add releasing to new structure
authorjjkang
Fri, 25 Jun 2010 18:37:20 +0800
changeset 602 3145852acc89
parent 600 6d08f4a05d93
child 603 5cadcee3d4b4
add releasing to new structure
releasing/cbrtools/group/bld.inf
releasing/cbrtools/group/build.mk
releasing/cbrtools/group/cbr.preconfigure.nsh
releasing/cbrtools/group/cbr_tools.tdf
releasing/cbrtools/group/cbrtools.mrp
releasing/cbrtools/group/release.txt
releasing/cbrtools/group/version.mk
releasing/cbrtools/perl/Archive/Tar.pm
releasing/cbrtools/perl/Archive/Zip.pm
releasing/cbrtools/perl/Archive/Zip/BufferedFileHandle.pm
releasing/cbrtools/perl/Archive/Zip/MockFileHandle.pm
releasing/cbrtools/perl/Archive/Zip/Tree.pm
releasing/cbrtools/perl/BinInfo
releasing/cbrtools/perl/BinInfo.bat
releasing/cbrtools/perl/BldDocs
releasing/cbrtools/perl/BldDocs.bat
releasing/cbrtools/perl/BuildRel
releasing/cbrtools/perl/BuildRel.bat
releasing/cbrtools/perl/CatData.pm
releasing/cbrtools/perl/CheckBc
releasing/cbrtools/perl/CheckBc.bat
releasing/cbrtools/perl/CheckBc.pm
releasing/cbrtools/perl/CheckRls
releasing/cbrtools/perl/CheckRls.bat
releasing/cbrtools/perl/Class/DISTRIBUTION.policy
releasing/cbrtools/perl/Class/Singleton.pm
releasing/cbrtools/perl/CleanEnv
releasing/cbrtools/perl/CleanEnv.bat
releasing/cbrtools/perl/CleanEnv.pm
releasing/cbrtools/perl/CleanEnv.pod
releasing/cbrtools/perl/CleanLocalArch
releasing/cbrtools/perl/CleanLocalArch.bat
releasing/cbrtools/perl/Cleaner.pm
releasing/cbrtools/perl/CommandController.pm
releasing/cbrtools/perl/CopyRel
releasing/cbrtools/perl/CopyRel.bat
releasing/cbrtools/perl/CopyRel.pm
releasing/cbrtools/perl/Crypt.pm
releasing/cbrtools/perl/Crypt/GPG.pm
releasing/cbrtools/perl/Crypt/PGP.pm
releasing/cbrtools/perl/DeltaEnv
releasing/cbrtools/perl/DeltaEnv.bat
releasing/cbrtools/perl/DiffEnv
releasing/cbrtools/perl/DiffEnv.bat
releasing/cbrtools/perl/DiffRel
releasing/cbrtools/perl/DiffRel.bat
releasing/cbrtools/perl/Digest/Perl/MD5.pm
releasing/cbrtools/perl/Digest/Perl/readme.txt
releasing/cbrtools/perl/EnvData
releasing/cbrtools/perl/EnvData.bat
releasing/cbrtools/perl/EnvDb.pm
releasing/cbrtools/perl/EnvDifferencer.pm
releasing/cbrtools/perl/EnvInfo
releasing/cbrtools/perl/EnvInfo.bat
releasing/cbrtools/perl/EnvInfoTk
releasing/cbrtools/perl/EnvInfoTk.bat
releasing/cbrtools/perl/Environment
releasing/cbrtools/perl/ExportData.pm
releasing/cbrtools/perl/ExportEnv
releasing/cbrtools/perl/ExportEnv.bat
releasing/cbrtools/perl/ExportRel
releasing/cbrtools/perl/ExportRel.bat
releasing/cbrtools/perl/ExportingReleases
releasing/cbrtools/perl/FAQ
releasing/cbrtools/perl/FundamentalConcepts
releasing/cbrtools/perl/FurtherInformation
releasing/cbrtools/perl/GetEnv
releasing/cbrtools/perl/GetEnv.bat
releasing/cbrtools/perl/GetEnv.pm
releasing/cbrtools/perl/GetSource
releasing/cbrtools/perl/GetSource.bat
releasing/cbrtools/perl/HistoricPerspective
releasing/cbrtools/perl/ImportEnv
releasing/cbrtools/perl/ImportEnv.bat
releasing/cbrtools/perl/ImportRel
releasing/cbrtools/perl/ImportRel.bat
releasing/cbrtools/perl/IniData.pm
releasing/cbrtools/perl/InstCol2
releasing/cbrtools/perl/InstCol2.bat
releasing/cbrtools/perl/InstallSnapShot
releasing/cbrtools/perl/InstallSnapShot.bat
releasing/cbrtools/perl/Installation
releasing/cbrtools/perl/LatestVer
releasing/cbrtools/perl/LatestVer.bat
releasing/cbrtools/perl/MLDBM.pm
releasing/cbrtools/perl/MLDBM/Serializer/Data/Dumper.pm
releasing/cbrtools/perl/MLDBM/Serializer/FreezeThaw.pm
releasing/cbrtools/perl/MLDBM/Serializer/Storable.pm
releasing/cbrtools/perl/MLDBM/Sync.pm
releasing/cbrtools/perl/MLDBM/Sync/SDBM_File.pm
releasing/cbrtools/perl/MakeEnv
releasing/cbrtools/perl/MakeEnv.bat
releasing/cbrtools/perl/MakeRel
releasing/cbrtools/perl/MakeRel.bat
releasing/cbrtools/perl/MakeRel.pm
releasing/cbrtools/perl/MakeSnapShot
releasing/cbrtools/perl/MakeSnapShot.bat
releasing/cbrtools/perl/MakingReleases
releasing/cbrtools/perl/ManagingEnvironments
releasing/cbrtools/perl/MergeEnvironments
releasing/cbrtools/perl/MergeEnvironments.bat
releasing/cbrtools/perl/ModNotes
releasing/cbrtools/perl/ModNotes.bat
releasing/cbrtools/perl/MrpComplexity
releasing/cbrtools/perl/MrpComplexity.bat
releasing/cbrtools/perl/MrpData.pm
releasing/cbrtools/perl/Net/Cmd.pm
releasing/cbrtools/perl/Net/Config.pm
releasing/cbrtools/perl/Net/Domain.pm
releasing/cbrtools/perl/Net/DummyInetd.pm
releasing/cbrtools/perl/Net/FTP.pm
releasing/cbrtools/perl/Net/FTP/A.pm
releasing/cbrtools/perl/Net/FTP/E.pm
releasing/cbrtools/perl/Net/FTP/I.pm
releasing/cbrtools/perl/Net/FTP/L.pm
releasing/cbrtools/perl/Net/FTP/dataconn.pm
releasing/cbrtools/perl/Net/NNTP.pm
releasing/cbrtools/perl/Net/Netrc.pm
releasing/cbrtools/perl/Net/PH.pm
releasing/cbrtools/perl/Net/POP3.pm
releasing/cbrtools/perl/Net/SMTP.pm
releasing/cbrtools/perl/Net/SNPP.pm
releasing/cbrtools/perl/Net/Time.pm
releasing/cbrtools/perl/Net/libnetFAQ.pod
releasing/cbrtools/perl/NotesCompiler.pm
releasing/cbrtools/perl/Optimisation
releasing/cbrtools/perl/PathData.pm
releasing/cbrtools/perl/PathData/ComponentBased.pm
releasing/cbrtools/perl/PathData/ProjectBased.pm
releasing/cbrtools/perl/PrepEnv
releasing/cbrtools/perl/PrepEnv.bat
releasing/cbrtools/perl/PrepRel
releasing/cbrtools/perl/PrepRel.bat
releasing/cbrtools/perl/PrepRel.pm
releasing/cbrtools/perl/PullEnv
releasing/cbrtools/perl/PullEnv.bat
releasing/cbrtools/perl/PushEnv
releasing/cbrtools/perl/PushEnv.bat
releasing/cbrtools/perl/PushPullRel.pm
releasing/cbrtools/perl/QuickStart
releasing/cbrtools/perl/RelData.pm
releasing/cbrtools/perl/RelTransfer.pm
releasing/cbrtools/perl/RelTransfer/Export.pm
releasing/cbrtools/perl/RelTransfer/Import.pm
releasing/cbrtools/perl/RemoteSite.pm
releasing/cbrtools/perl/RemoteSite/FTP.pm
releasing/cbrtools/perl/RemoteSite/FTP/Experimental.pm
releasing/cbrtools/perl/RemoteSite/FTP/Proxy.pm
releasing/cbrtools/perl/RemoteSite/FTP/Proxy/Experimental.pm
releasing/cbrtools/perl/RemoteSite/NetDrive.pm
releasing/cbrtools/perl/RemoteSite/NetDrive/MultiVolumeExport.pm
releasing/cbrtools/perl/RemoteSite/NetDrive/MultiVolumeImport.pm
releasing/cbrtools/perl/RemoveRel
releasing/cbrtools/perl/RemoveRel.bat
releasing/cbrtools/perl/SourceInfo
releasing/cbrtools/perl/SourceInfo.bat
releasing/cbrtools/perl/Symbian/CBR/ApplyDelta.pm
releasing/cbrtools/perl/Symbian/CBR/Component/Manifest.pm
releasing/cbrtools/perl/Symbian/CBR/CreateDelta.pm
releasing/cbrtools/perl/Symbian/CBR/DeltaRelease/Manifest.pm
releasing/cbrtools/perl/Symbian/CBR/IPR/DISTRIBUTION.policy
releasing/cbrtools/perl/Symbian/CBR/IPR/MRP.pm
releasing/cbrtools/perl/Symbian/CBR/MRP.pm
releasing/cbrtools/perl/Symbian/CBR/MRP/DISTRIBUTION.policy
releasing/cbrtools/perl/Symbian/CBR/MRP/Reader.pm
releasing/cbrtools/perl/Symbian/CBR/MRPInterface.pm
releasing/cbrtools/perl/Symbian/CBR/release/Manifest.pm
releasing/cbrtools/perl/Symbian/DistributionPolicy.pm
releasing/cbrtools/perl/Symbian/DistributionPolicy/Reader.pm
releasing/cbrtools/perl/Symbian/IPR.pm
releasing/cbrtools/perl/TableFormatter.pm
releasing/cbrtools/perl/TableFormatter/Auto.pm
releasing/cbrtools/perl/TableFormatter/Csv.pm
releasing/cbrtools/perl/TableFormatter/Excel.pm
releasing/cbrtools/perl/TableFormatter/Html.pm
releasing/cbrtools/perl/TableFormatter/Text.pm
releasing/cbrtools/perl/Text/Glob.pm
releasing/cbrtools/perl/Utils.pm
releasing/cbrtools/perl/ValidateEnv
releasing/cbrtools/perl/ValidateEnv.bat
releasing/cbrtools/perl/ValidateRel
releasing/cbrtools/perl/ValidateRel.bat
releasing/cbrtools/perl/ViewNotes
releasing/cbrtools/perl/ViewNotes.bat
releasing/cbrtools/perl/archive_path.txt.ex
releasing/cbrtools/perl/cleanremote
releasing/cbrtools/perl/cleanremote.bat
releasing/cbrtools/perl/envmembership
releasing/cbrtools/perl/envmembership.bat
releasing/cbrtools/perl/envsize
releasing/cbrtools/perl/envsize.bat
releasing/cbrtools/perl/getrel
releasing/cbrtools/perl/getrel.bat
releasing/cbrtools/perl/listcomponents
releasing/cbrtools/perl/listcomponents.bat
releasing/cbrtools/perl/mbld
releasing/cbrtools/perl/mbld.bat
releasing/cbrtools/perl/pullrel
releasing/cbrtools/perl/pullrel.bat
releasing/cbrtools/perl/pushrel
releasing/cbrtools/perl/pushrel.bat
releasing/cbrtools/perl/relnotes.txt
releasing/cbrtools/perl/reltools.ini.ex
releasing/cbrtools/perl/removesource
releasing/cbrtools/perl/removesource.bat
releasing/cbrtools/perl/version.txt
releasing/makecbr/CBROutputFile.xml
releasing/makecbr/CConfig.pm
releasing/makecbr/COutputHandler.pm
releasing/makecbr/CProcessStage.pm
releasing/makecbr/CStageRunner.pm
releasing/makecbr/MakeCBR.pl
releasing/makecbr/Parallel/ForkManager.pm
releasing/makecbr/Win32/Pipe.pm
releasing/makecbr/doc/DISTRIBUTION.POLICY
releasing/makecbr/doc/SGL.PR0080.150_Rev1.4_Automatic_Component_Based_Releasing_Design_Spec.doc
releasing/makecbr/files/release.src
releasing/makecbr/group/bld.inf
releasing/makecbr/group/makecbr.mrp
releasing/makecbr/stages/CBRRepair/CBRPatch.pm
releasing/makecbr/stages/CBRRepair/cbrfix.pm
releasing/makecbr/stages/CBRRepair/cbrproblem.pm
releasing/makecbr/stages/CCheckEnv.pm
releasing/makecbr/stages/CCheckMrpUpdates.pm
releasing/makecbr/stages/CCleanUp.pm
releasing/makecbr/stages/CConfigureRepair.pm
releasing/makecbr/stages/CCreateDrive.pm
releasing/makecbr/stages/CDelta.pm
releasing/makecbr/stages/CGetPrevRel.pm
releasing/makecbr/stages/CInstallGTConflicts.pm
releasing/makecbr/stages/CPrepGTRelease.pm
releasing/makecbr/stages/CReleaseEnv.pm
releasing/makecbr/stages/CRemoveNonGT.pm
releasing/makecbr/stages/CStoreMrpState.pm
releasing/makecbr/test/CExampleStage.pm
releasing/makecbr/test/CTestScore.pm
releasing/makecbr/test/runtests.pl
releasing/makecbr/test/unit_CConfig.pm
releasing/makecbr/test/unit_CProcessStage.pm
releasing/makecbr/test/unit_CStageRunner.pm
releasing/makecbr/test/unit_stage_CDelta.pm
releasing/zdelta-2.1/group/bld.inf
releasing/zdelta-2.1/group/release.txt
releasing/zdelta-2.1/group/zdelta-2.1.mrp
releasing/zdelta-2.1/zdc.exe
releasing/zdelta-2.1/zdu.exe
sbsv2/raptor/RELEASE-NOTES.html
sbsv2/raptor/bin/depcrunch.py
sbsv2/raptor/bin/recipestats.py
sbsv2/raptor/bin/sbs_check_exports.py
sbsv2/raptor/bin/sbs_env.bat
sbsv2/raptor/bin/sbs_filter
sbsv2/raptor/bin/sbs_filter.bat
sbsv2/raptor/bin/sbs_filter.py
sbsv2/raptor/bin/timelines.py
sbsv2/raptor/lib/flm/e32abiv2pdll.flm
sbsv2/raptor/lib/flm/run.mk
sbsv2/raptor/lib/flm/win32pdll.flm
sbsv2/raptor/license.txt
sbsv2/raptor/notes/abiv1_implibs.txt
sbsv2/raptor/notes/cross_compiling_tools.txt
sbsv2/raptor/notes/cygwin_1_7.txt
sbsv2/raptor/notes/delete_on_failed_compile.txt
sbsv2/raptor/notes/epocnestedexceptions.txt
sbsv2/raptor/notes/featurevariantsafe.txt
sbsv2/raptor/notes/localresourcecopying.txt
sbsv2/raptor/notes/parametric_log_filters.txt
sbsv2/raptor/notes/query_cli.txt
sbsv2/raptor/notes/system_definition_v3.txt
sbsv2/raptor/notes/tcomsupport.txt
sbsv2/raptor/python/plugins/filter_broken.py
sbsv2/raptor/python/plugins/filter_bz2log.py
sbsv2/raptor/python/plugins/filter_check.py
sbsv2/raptor/python/plugins/filter_checkcomp.py
sbsv2/raptor/python/plugins/filter_component.py
sbsv2/raptor/python/plugins/filter_copyfile.py
sbsv2/raptor/python/plugins/filter_tagcount.py
sbsv2/raptor/python/plugins/filter_timing.py
sbsv2/raptor/python/plugins/filter_whatcomp.py
sbsv2/raptor/python/raptor_api.py
sbsv2/raptor/python/raptor_buildplatform.py
sbsv2/raptor/python/raptor_timing.py
sbsv2/raptor/test/System_Definition.xml
sbsv2/raptor/test/cluster/README
sbsv2/raptor/test/cluster/headtest.sh
sbsv2/raptor/test/cluster/nodetest.sh
sbsv2/raptor/test/cluster/pvmtest.sh
sbsv2/raptor/test/common/raptor_tests.py
sbsv2/raptor/test/common/run_tests.py
sbsv2/raptor/test/config/abiv1kit/os_properties.xml
sbsv2/raptor/test/config/api.xml
sbsv2/raptor/test/config/apply_test_variants.xml
sbsv2/raptor/test/config/arm.xml
sbsv2/raptor/test/config/default.xml
sbsv2/raptor/test/config/interface.xml
sbsv2/raptor/test/config/os_properties.xml
sbsv2/raptor/test/config/user.xml
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun01/makefiles_testrun01.zip
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun01/testrig01.bat
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun02/makefiles_testrun02.zip
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun02/testrig02.bat
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun03/makefiles_testrun03.zip
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun03/testrig03.bat
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun04/makefiles_testrun04.zip
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun04/testrig04.bat
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun05/makefiles_testrun05.zip
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun05/testrig05.bat
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun06/makefiles_testrun06.zip
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun06/testrig06.bat
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun07/makefiles_testrun07.zip
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun07/testrig07.bat
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun08/makefiles_testrun08.zip
sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun08/testrig08.bat
sbsv2/raptor/test/core_utils/HowTo.txt
sbsv2/raptor/test/core_utils/makemakefile.py
sbsv2/raptor/test/core_utils/mingw.tar.bz2
sbsv2/raptor/test/core_utils/msys.tar.bz2
sbsv2/raptor/test/core_utils/src/msys-sed-4.1.5-src.tar.gz
sbsv2/raptor/test/envelope/1quarter.xml
sbsv2/raptor/test/envelope/2quarter.xml
sbsv2/raptor/test/envelope/all_nocompsupp.xml
sbsv2/raptor/test/envelope/allexport.xml
sbsv2/raptor/test/envelope/allexport2.xml
sbsv2/raptor/test/envelope/little.xml
sbsv2/raptor/test/envelope/preexport.xml
sbsv2/raptor/test/envelope/syslib0.xml
sbsv2/raptor/test/envelope/syslib1.xml
sbsv2/raptor/test/envelope/syslib2.xml
sbsv2/raptor/test/logging/bld.inf
sbsv2/raptor/test/logging/simple.mmp
sbsv2/raptor/test/logging/test.cpp
sbsv2/raptor/test/metadata/config/empty_cfg.cfg
sbsv2/raptor/test/metadata/config/invalid_cfg.cfg
sbsv2/raptor/test/metadata/config/test_cfg.cfg
sbsv2/raptor/test/metadata/include/subdir/test_hrh_include.h
sbsv2/raptor/test/metadata/include/test_hrh.hrh
sbsv2/raptor/test/metadata/project/bld.infs/bad_lone_end.inf
sbsv2/raptor/test/metadata/project/bld.infs/default_plats.inf
sbsv2/raptor/test/metadata/project/bld.infs/default_plats_minus_plat.inf
sbsv2/raptor/test/metadata/project/bld.infs/exports.inf
sbsv2/raptor/test/metadata/project/bld.infs/extensions.inf
sbsv2/raptor/test/metadata/project/bld.infs/includes/dir1/dir2/up_dir.inf
sbsv2/raptor/test/metadata/project/bld.infs/includes/dir3/down_dir.inf
sbsv2/raptor/test/metadata/project/bld.infs/includes/top_level.inf
sbsv2/raptor/test/metadata/project/bld.infs/multiple_plats.inf
sbsv2/raptor/test/metadata/project/bld.infs/no_plats.inf
sbsv2/raptor/test/metadata/project/bld.infs/no_prj_platforms.inf
sbsv2/raptor/test/metadata/project/bld.infs/single_plat.inf
sbsv2/raptor/test/metadata/project/mmps/includes/dir1/dir2/up_dir.mmh
sbsv2/raptor/test/metadata/project/mmps/includes/dir3/down_dir.mmh
sbsv2/raptor/test/metadata/project/mmps/includes/top_level.inf
sbsv2/raptor/test/metadata/project/mmps/includes/top_level.mmp
sbsv2/raptor/test/metadata/project/mmps/test_mmps/autotest.mmp
sbsv2/raptor/test/metadata/project/mmps/test_mmps/ignoretest.mmp
sbsv2/raptor/test/metadata/project/mmps/test_mmps/manualtest.mmp
sbsv2/raptor/test/metadata/project/mmps/test_mmps/supporttest.mmp
sbsv2/raptor/test/metadata/project/mmps/test_mmps/test_mmps.inf
sbsv2/raptor/test/metadata/system/system_definition_1.3.1.xml
sbsv2/raptor/test/metadata/system/system_definition_1.4.1.xml
sbsv2/raptor/test/metadata/system/system_definition_1.5.1.xml
sbsv2/raptor/test/metadata/system/system_definition_2.0.0.xml
sbsv2/raptor/test/metadata/system/system_definition_3.0.0.xml
sbsv2/raptor/test/metadata/system/system_definition_multi_layers.xml
sbsv2/raptor/test/metadata/system/system_definition_nover.xml
sbsv2/raptor/test/oe_linking_against_se_lib/group/bld.inf
sbsv2/raptor/test/oe_linking_against_se_lib/group/test_oeexe.mmp
sbsv2/raptor/test/oe_linking_against_se_lib/test_oedll.h
sbsv2/raptor/test/oe_linking_against_se_lib/test_oeexe.cpp
sbsv2/raptor/test/oe_linking_against_se_lib/test_oeexe_wins.cpp
sbsv2/raptor/test/retirement/metadep.py
sbsv2/raptor/test/run
sbsv2/raptor/test/run.bat
sbsv2/raptor/test/simple/test_dbg.cpp
sbsv2/raptor/test/smoke_suite/annofile2log.py
sbsv2/raptor/test/smoke_suite/apply_usecases.py
sbsv2/raptor/test/smoke_suite/armv5_asmtest.py
sbsv2/raptor/test/smoke_suite/armv5_stringtable.py
sbsv2/raptor/test/smoke_suite/armv5_testcode.py
sbsv2/raptor/test/smoke_suite/armv7_asmtest.py
sbsv2/raptor/test/smoke_suite/armv7_stringtable.py
sbsv2/raptor/test/smoke_suite/armv7_testcode.py
sbsv2/raptor/test/smoke_suite/bitmap.py
sbsv2/raptor/test/smoke_suite/capability_arm.py
sbsv2/raptor/test/smoke_suite/clean_readonly.py
sbsv2/raptor/test/smoke_suite/cli_makevar_override.py
sbsv2/raptor/test/smoke_suite/commandfile.py
sbsv2/raptor/test/smoke_suite/commandline.py
sbsv2/raptor/test/smoke_suite/configpath.py
sbsv2/raptor/test/smoke_suite/defs_armv5.py
sbsv2/raptor/test/smoke_suite/defs_armv7.py
sbsv2/raptor/test/smoke_suite/delete_on_failed_compile.py
sbsv2/raptor/test/smoke_suite/depcrunch_test.py
sbsv2/raptor/test/smoke_suite/dependencies.py
sbsv2/raptor/test/smoke_suite/dll_armv5.py
sbsv2/raptor/test/smoke_suite/dll_armv5_smp.py
sbsv2/raptor/test/smoke_suite/dll_armv5_winscw_freeze.py
sbsv2/raptor/test/smoke_suite/dll_armv6.py
sbsv2/raptor/test/smoke_suite/dll_armv7.py
sbsv2/raptor/test/smoke_suite/dll_winscw.py
sbsv2/raptor/test/smoke_suite/dll_winscw_win32resource.py
sbsv2/raptor/test/smoke_suite/emulated_drives.py
sbsv2/raptor/test/smoke_suite/exe_armv5.py
sbsv2/raptor/test/smoke_suite/exe_armv5_filtered.py
sbsv2/raptor/test/smoke_suite/exe_armv5_smp.py
sbsv2/raptor/test/smoke_suite/exe_armv5_winscw_check.py
sbsv2/raptor/test/smoke_suite/exe_armv5_winscw_plus_clean.py
sbsv2/raptor/test/smoke_suite/exe_armv5_winscw_single_file.py
sbsv2/raptor/test/smoke_suite/exe_armv5_winscw_what.py
sbsv2/raptor/test/smoke_suite/exe_armv7.py
sbsv2/raptor/test/smoke_suite/exe_checksource.py
sbsv2/raptor/test/smoke_suite/exe_winscw.py
sbsv2/raptor/test/smoke_suite/export.py
sbsv2/raptor/test/smoke_suite/export_multi.py
sbsv2/raptor/test/smoke_suite/extension_reallyclean.py
sbsv2/raptor/test/smoke_suite/extension_whattarget.py
sbsv2/raptor/test/smoke_suite/featurevariants.py
sbsv2/raptor/test/smoke_suite/filter_missing.py
sbsv2/raptor/test/smoke_suite/filter_params.py
sbsv2/raptor/test/smoke_suite/flm_extension.py
sbsv2/raptor/test/smoke_suite/gccxml.py
sbsv2/raptor/test/smoke_suite/gnumakefile.py
sbsv2/raptor/test/smoke_suite/gnumakefile_what.py
sbsv2/raptor/test/smoke_suite/gnumakefile_whatlog.py
sbsv2/raptor/test/smoke_suite/gui_whatlog.py
sbsv2/raptor/test/smoke_suite/implib_armv5.py
sbsv2/raptor/test/smoke_suite/implib_armv5_smp.py
sbsv2/raptor/test/smoke_suite/implib_armv5_what.py
sbsv2/raptor/test/smoke_suite/implib_armv5_with_armv5_smp.py
sbsv2/raptor/test/smoke_suite/implib_nodef.py
sbsv2/raptor/test/smoke_suite/implib_whatlog.py
sbsv2/raptor/test/smoke_suite/implib_winscw.py
sbsv2/raptor/test/smoke_suite/implib_winscw_what.py
sbsv2/raptor/test/smoke_suite/input_validation.py
sbsv2/raptor/test/smoke_suite/kdll_armv5.py
sbsv2/raptor/test/smoke_suite/keepgoing.py
sbsv2/raptor/test/smoke_suite/lib_armv5_armv7.py
sbsv2/raptor/test/smoke_suite/lib_versioned.py
sbsv2/raptor/test/smoke_suite/lib_winscw.py
sbsv2/raptor/test/smoke_suite/listing.py
sbsv2/raptor/test/smoke_suite/longfilenames.py
sbsv2/raptor/test/smoke_suite/longpath.py
sbsv2/raptor/test/smoke_suite/make_engine_errors.py
sbsv2/raptor/test/smoke_suite/mmp_keywords.py
sbsv2/raptor/test/smoke_suite/mmp_select.py
sbsv2/raptor/test/smoke_suite/named_extension.py
sbsv2/raptor/test/smoke_suite/nobuild.py
sbsv2/raptor/test/smoke_suite/non_ascii.py
sbsv2/raptor/test/smoke_suite/openenvironment.py
sbsv2/raptor/test/smoke_suite/output_control.py
sbsv2/raptor/test/smoke_suite/paging.py
sbsv2/raptor/test/smoke_suite/parallel_parsing.py
sbsv2/raptor/test/smoke_suite/pdll_arm.py
sbsv2/raptor/test/smoke_suite/pdll_winscw.py
sbsv2/raptor/test/smoke_suite/plugin_armv5_winscw_freeze.py
sbsv2/raptor/test/smoke_suite/pre_export.py
sbsv2/raptor/test/smoke_suite/qt_helloworld.py
sbsv2/raptor/test/smoke_suite/query_cli.py
sbsv2/raptor/test/smoke_suite/raptor_crash.py
sbsv2/raptor/test/smoke_suite/resource.py
sbsv2/raptor/test/smoke_suite/retry.py
sbsv2/raptor/test/smoke_suite/romfile.py
sbsv2/raptor/test/smoke_suite/sbs_with_nonexisting_bldinf.py
sbsv2/raptor/test/smoke_suite/smp.py
sbsv2/raptor/test/smoke_suite/splitlog_filter.py
sbsv2/raptor/test/smoke_suite/stringtable_zip_whatlog.py
sbsv2/raptor/test/smoke_suite/sysdef_dud.py
sbsv2/raptor/test/smoke_suite/sysdef_exports.py
sbsv2/raptor/test/smoke_suite/sysdef_layers.py
sbsv2/raptor/test/smoke_suite/talon_test.py
sbsv2/raptor/test/smoke_suite/tem_conflicts.py
sbsv2/raptor/test/smoke_suite/tem_stages.py
sbsv2/raptor/test/smoke_suite/temtest.py
sbsv2/raptor/test/smoke_suite/terminal_filter_tests.py
sbsv2/raptor/test/smoke_suite/test_resources/annofile2log/scrubbed_ncp_dfs_resource.anno.bz2
sbsv2/raptor/test/smoke_suite/test_resources/annofile2log/scrubbed_ncp_dfs_resource.stdout.bz2
sbsv2/raptor/test/smoke_suite/test_resources/annofile2log/testanno2log.py
sbsv2/raptor/test/smoke_suite/test_resources/apply_usecases/apply_test_usecases_variants.xml
sbsv2/raptor/test/smoke_suite/test_resources/apply_usecases/linker_options/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/apply_usecases/linker_options/test_apply_linkeroptions.cpp
sbsv2/raptor/test/smoke_suite/test_resources/apply_usecases/linker_options/test_apply_linkeroptions.mmp
sbsv2/raptor/test/smoke_suite/test_resources/asmtest/asmtest.mmp
sbsv2/raptor/test/smoke_suite/test_resources/asmtest/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/asmtest/testasm.s
sbsv2/raptor/test/smoke_suite/test_resources/asmtest/testassembler.cpp
sbsv2/raptor/test/smoke_suite/test_resources/asmtest/testcia.cia
sbsv2/raptor/test/smoke_suite/test_resources/basics/commonframework/CommonFramework.h
sbsv2/raptor/test/smoke_suite/test_resources/basics/commonframework/DISTRIBUTION.POLICY
sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/Bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/DISTRIBUTION.POLICY
sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/HelloWorld.cpp
sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/HelloWorld.mmp
sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/result_creation.flm
sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/result_creation.xml
sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF24.BMP
sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF2M.BMP
sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF32.BMP
sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF3M.BMP
sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF48.BMP
sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF4M.BMP
sbsv2/raptor/test/smoke_suite/test_resources/bitmap/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/bitmap/bmt.mmp
sbsv2/raptor/test/smoke_suite/test_resources/bitmap/mifconv.flm
sbsv2/raptor/test/smoke_suite/test_resources/bitmap/mifconv.xml
sbsv2/raptor/test/smoke_suite/test_resources/bv/CREATESTATICDLLARM.def
sbsv2/raptor/test/smoke_suite/test_resources/bv/CREATESTATICDLLWINS.def
sbsv2/raptor/test/smoke_suite/test_resources/bv/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/bv/config/properties/os_properties.xml
sbsv2/raptor/test/smoke_suite/test_resources/bv/config/variants/bv_test.xml
sbsv2/raptor/test/smoke_suite/test_resources/bv/debug/dummy.lib
sbsv2/raptor/test/smoke_suite/test_resources/bv/debug/fake.lib
sbsv2/raptor/test/smoke_suite/test_resources/bv/hrh/bv_hrh_relative/relative.h
sbsv2/raptor/test/smoke_suite/test_resources/bv/hrh/var1.hrh
sbsv2/raptor/test/smoke_suite/test_resources/bv/hrh/var2.hrh
sbsv2/raptor/test/smoke_suite/test_resources/bv/hrh/var3.hrh
sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/CreateStaticDLL_invariant.cpp
sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/CreateStaticDLL_invariant.h
sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/CreateStaticDLL_invariant.mmp
sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/CreateStaticLib.cpp
sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/CreateStaticLib.mmp
sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/dummy.rss
sbsv2/raptor/test/smoke_suite/test_resources/bv/listA.txt
sbsv2/raptor/test/smoke_suite/test_resources/bv/listB.txt
sbsv2/raptor/test/smoke_suite/test_resources/bv/release/dummy.lib
sbsv2/raptor/test/smoke_suite/test_resources/bv/release/fake.lib
sbsv2/raptor/test/smoke_suite/test_resources/bv/var1/var1.h
sbsv2/raptor/test/smoke_suite/test_resources/bv/var2/var2.h
sbsv2/raptor/test/smoke_suite/test_resources/bv/var3/var3.h
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant1/CreateStaticDLL_variant1.cpp
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant1/CreateStaticDLL_variant1.h
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant1/CreateStaticDLL_variant1.mmp
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant1/dummy.rss
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant2/CreateStaticDLL_variant2.cpp
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant2/CreateStaticDLL_variant2.h
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant2/CreateStaticDLL_variant2.mmp
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant2/dummy.rss
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant3/CreateEXE_variant3.cpp
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant3/CreateEXE_variant3.h
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant3/CreateEXE_variant3.mmp
sbsv2/raptor/test/smoke_suite/test_resources/bv/variant3/dummy.rss
sbsv2/raptor/test/smoke_suite/test_resources/bv/with_errors.cpp
sbsv2/raptor/test/smoke_suite/test_resources/bv/with_macros.cpp
sbsv2/raptor/test/smoke_suite/test_resources/bv/without_macros.cpp
sbsv2/raptor/test/smoke_suite/test_resources/checksource/commonframework/CommonFramework.h
sbsv2/raptor/test/smoke_suite/test_resources/checksource/helloworld/Bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/checksource/helloworld/HelloWorld.mmp
sbsv2/raptor/test/smoke_suite/test_resources/checksource/helloworld/HelloWorld2.mmp
sbsv2/raptor/test/smoke_suite/test_resources/checksource/source/HelloWorld.cpp
sbsv2/raptor/test/smoke_suite/test_resources/configpathtest/v2/variant2.xml
sbsv2/raptor/test/smoke_suite/test_resources/configpathtest/v3/variant3.xml
sbsv2/raptor/test/smoke_suite/test_resources/defs/eabi/deftestu.def
sbsv2/raptor/test/smoke_suite/test_resources/defs/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/defs/group/deftest.mmp
sbsv2/raptor/test/smoke_suite/test_resources/defs/group/e32def.h
sbsv2/raptor/test/smoke_suite/test_resources/defs/group/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/depcrunch/dep2.rpp.d
sbsv2/raptor/test/smoke_suite/test_resources/dependencies/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/dependencies/dependencies.mmp
sbsv2/raptor/test/smoke_suite/test_resources/dependencies/inc/dependency.h
sbsv2/raptor/test/smoke_suite/test_resources/dependencies/inc/dependency.rh
sbsv2/raptor/test/smoke_suite/test_resources/dependencies/main.cpp
sbsv2/raptor/test/smoke_suite/test_resources/dependencies/main.rss
sbsv2/raptor/test/smoke_suite/test_resources/dependencies/src/dependency1.cpp
sbsv2/raptor/test/smoke_suite/test_resources/dependencies/src/dependency1.rss
sbsv2/raptor/test/smoke_suite/test_resources/dependencies/src/dependency2.cpp
sbsv2/raptor/test/smoke_suite/test_resources/dependencies/src/dependency2.rss
sbsv2/raptor/test/smoke_suite/test_resources/emulated_drives_export/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/emulated_drives_export/emulated_drives_export.cpp
sbsv2/raptor/test/smoke_suite/test_resources/emulated_drives_export/emulated_drives_export.mmp
sbsv2/raptor/test/smoke_suite/test_resources/emulated_drives_export/emulated_drives_export1.mbm
sbsv2/raptor/test/smoke_suite/test_resources/emulated_drives_export/emulated_drives_export2.mbm
sbsv2/raptor/test/smoke_suite/test_resources/filter_test/testfilter.py
sbsv2/raptor/test/smoke_suite/test_resources/filter_test/testfilter_exceptions.py
sbsv2/raptor/test/smoke_suite/test_resources/gnumakefile/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/gnumakefile/master.mak
sbsv2/raptor/test/smoke_suite/test_resources/gnumakefile/simple.mmp
sbsv2/raptor/test/smoke_suite/test_resources/gnumakefile/slave.mak
sbsv2/raptor/test/smoke_suite/test_resources/gnumakefile/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/inc/macrotests.h
sbsv2/raptor/test/smoke_suite/test_resources/inc/macrotests.mmh
sbsv2/raptor/test/smoke_suite/test_resources/keepgoing/groups.xml
sbsv2/raptor/test/smoke_suite/test_resources/logexamples/filter_component.log
sbsv2/raptor/test/smoke_suite/test_resources/logexamples/what_component_repeated.log
sbsv2/raptor/test/smoke_suite/test_resources/long/paths/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/long/paths/deftest.mmp
sbsv2/raptor/test/smoke_suite/test_resources/long/paths/deftestu.def
sbsv2/raptor/test/smoke_suite/test_resources/long/paths/e32def.h
sbsv2/raptor/test/smoke_suite/test_resources/long/paths/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/longfilenames/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/longfilenames/longerfilenamethanyoumightnormallyexpecttobepresent.cpp
sbsv2/raptor/test/smoke_suite/test_resources/make_crash/exception_crash.inf
sbsv2/raptor/test/smoke_suite/test_resources/make_crash/make_crash.flm
sbsv2/raptor/test/smoke_suite/test_resources/make_crash/make_crash.xml
sbsv2/raptor/test/smoke_suite/test_resources/make_crash/memory_crash.inf
sbsv2/raptor/test/smoke_suite/test_resources/make_engine_errors/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/make_engine_errors/with_make_errors.flm
sbsv2/raptor/test/smoke_suite/test_resources/make_engine_errors/with_make_errors.xml
sbsv2/raptor/test/smoke_suite/test_resources/metadep.sh
sbsv2/raptor/test/smoke_suite/test_resources/mmp/apply/apply_test_exported_variants.xml
sbsv2/raptor/test/smoke_suite/test_resources/mmp/apply/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/mmp/apply/test_mmp_apply.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/apply/test_mmp_apply.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/epocnestedexceptions/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/mmp/epocnestedexceptions/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/epocnestedexceptions/test.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/eabi/shutdownsrvu.def
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/group/shutdownsrv.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/inc/shutdownsrv.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdownsrv.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdownsrvpatchdata.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdownsrvpatchdata.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdowntimer.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdowntimer.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp11/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp11/bytepaircompresstarget.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp11/combinedcompresstarget.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp11/compress.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp11/compresstarget.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp11/inflatecompresstarget.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp11/nocompresstarget.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/codecs/ColorConverter.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/codecs/ImageProcessor.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/group/ImageProcessorPerf.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/inc/icl/icl_uids.hrh
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/inc/icl/imageprocessor.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/src/ImageClientMain.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/src/ImageProcessorPriv.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/src/ImageUtils.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/src/fwextconstants.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/dfpaeabi.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/dfpaeabi_common.mmh
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/dfpaeabi_vfpv2.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/exchange.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/t_oom.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/t_oom.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/tbm.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/tbm.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/buffer/t_rbuf.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/d_lddturnaroundtimertest.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/d_lddturnaroundtimertest.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/d_lddturnaroundtimertest.inl
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/d_newldd.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/d_newldd.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/t_new_classes.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/t_new_classes.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/t_newldd.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/group/d_lddturnaroundtimertest.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/group/d_newldd.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/group/t_rbuf.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/group/t_sharedio3.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/mmu/d_sharedio.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/mmu/freeram.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/mmu/t_sharedio.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/fuzzlib.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/fuzzv5.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/fuzzv5.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/u32std.h
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/uc_exe.cia
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/uc_exex86.cia
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/x86hlp.inl
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp6_7/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp6_7/diagsuppress.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp6_7/diagsuppress.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp6_7/diagsuppress_noarmlibs.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp8/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp8/test_mmp_version.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp8/test_mmp_version.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp9_10/armfpu.cpp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp9_10/armfpu_soft.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp9_10/armfpu_vfpv2.mmp
sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp9_10/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/non_ascii/cmd.txt
sbsv2/raptor/test/smoke_suite/test_resources/oe/bwins/t_oedll.def
sbsv2/raptor/test/smoke_suite/test_resources/oe/eabi/t_oedll.def
sbsv2/raptor/test/smoke_suite/test_resources/oe/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/oe/group/oe_exe_without_stdcpp.mmp
sbsv2/raptor/test/smoke_suite/test_resources/oe/group/symbian_exe.mmp
sbsv2/raptor/test/smoke_suite/test_resources/oe/group/symbian_exe_with_stdcpp.mmp
sbsv2/raptor/test/smoke_suite/test_resources/oe/group/symbian_lib.mmp
sbsv2/raptor/test/smoke_suite/test_resources/oe/group/t_oedll.mmp
sbsv2/raptor/test/smoke_suite/test_resources/oe/group/t_oeexe.mmp
sbsv2/raptor/test/smoke_suite/test_resources/oe/group/t_oelib.mmp
sbsv2/raptor/test/smoke_suite/test_resources/oe/group/wrong_newlib_oe_exe.mmp
sbsv2/raptor/test/smoke_suite/test_resources/oe/group/wrong_newlib_symbian_exe.mmp
sbsv2/raptor/test/smoke_suite/test_resources/oe/symbian_lib.cpp
sbsv2/raptor/test/smoke_suite/test_resources/oe/t_oedll.cpp
sbsv2/raptor/test/smoke_suite/test_resources/oe/t_oedll.h
sbsv2/raptor/test/smoke_suite/test_resources/oe/t_oeexe.cpp
sbsv2/raptor/test/smoke_suite/test_resources/oe/t_oeexe_wins.cpp
sbsv2/raptor/test/smoke_suite/test_resources/oe/t_oelib.cpp
sbsv2/raptor/test/smoke_suite/test_resources/oe/wrong_newlib_symbian.cpp
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp1.inf
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp1.mmp
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp10.inf
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp10.mmp
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp2.inf
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp2.mmp
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp3.inf
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp3.mmp
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp4.inf
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp4.mmp
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp5.inf
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp5.mmp
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp6.inf
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp6.mmp
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp7.inf
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp7.mmp
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp8.inf
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp8.mmp
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp9.inf
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp9.mmp
sbsv2/raptor/test/smoke_suite/test_resources/pp/pp_common.mmh
sbsv2/raptor/test/smoke_suite/test_resources/pp/ppbldinf_commandfile
sbsv2/raptor/test/smoke_suite/test_resources/pp/readme
sbsv2/raptor/test/smoke_suite/test_resources/pp/test.cia
sbsv2/raptor/test/smoke_suite/test_resources/pp/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/pp/test.h
sbsv2/raptor/test/smoke_suite/test_resources/pp/test1.c++
sbsv2/raptor/test/smoke_suite/test_resources/pp/test2.cxx
sbsv2/raptor/test/smoke_suite/test_resources/pp/test3.Cpp
sbsv2/raptor/test/smoke_suite/test_resources/pp/test4.cc
sbsv2/raptor/test/smoke_suite/test_resources/pp/test5.CC
sbsv2/raptor/test/smoke_suite/test_resources/pp/test6.C++
sbsv2/raptor/test/smoke_suite/test_resources/pre-export/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/pre-export/mmh/my.mmh
sbsv2/raptor/test/smoke_suite/test_resources/pre-export/simple.mmp
sbsv2/raptor/test/smoke_suite/test_resources/pre-export/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/qt/helloworld.cpp
sbsv2/raptor/test/smoke_suite/test_resources/qt/helloworldqt.pro
sbsv2/raptor/test/smoke_suite/test_resources/refilter/Makefile_broken.log
sbsv2/raptor/test/smoke_suite/test_resources/refilter/refilter.py
sbsv2/raptor/test/smoke_suite/test_resources/refilter/testfilterterminal
sbsv2/raptor/test/smoke_suite/test_resources/refilter/testfilterterminal.bat
sbsv2/raptor/test/smoke_suite/test_resources/refilter/testfilterterminal.py
sbsv2/raptor/test/smoke_suite/test_resources/resource/aifsrccl/DEF24.BMP
sbsv2/raptor/test/smoke_suite/test_resources/resource/aifsrccl/DEF2M.BMP
sbsv2/raptor/test/smoke_suite/test_resources/resource/dependentresource.rss
sbsv2/raptor/test/smoke_suite/test_resources/resource/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/resource/group/testresource.mmp
sbsv2/raptor/test/smoke_suite/test_resources/resource/group/testresource_badef.rh
sbsv2/raptor/test/smoke_suite/test_resources/resource/inc/testresource.hrh
sbsv2/raptor/test/smoke_suite/test_resources/resource/inc/testresource.rh
sbsv2/raptor/test/smoke_suite/test_resources/resource/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/resource/testresource.rls
sbsv2/raptor/test/smoke_suite/test_resources/resource/testresource.rss
sbsv2/raptor/test/smoke_suite/test_resources/retry/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/retry/retry_test.flm
sbsv2/raptor/test/smoke_suite/test_resources/retry/retry_test.xml
sbsv2/raptor/test/smoke_suite/test_resources/scripts/delete_on_failed_compile.py
sbsv2/raptor/test/smoke_suite/test_resources/simple/always_build_as_arm.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple/always_build_as_arm_bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple/build_spec.xml
sbsv2/raptor/test/smoke_suite/test_resources/simple/capability.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple/capability.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple/commands-v7.txt
sbsv2/raptor/test/smoke_suite/test_resources/simple/compilervariants/delete_on_failed_compile_compiler_variants.xml
sbsv2/raptor/test/smoke_suite/test_resources/simple/debuggable.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple/debuggable_bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple/makevariants/delete_on_failed_compile_make_variants.xml
sbsv2/raptor/test/smoke_suite/test_resources/simple/simple.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple/test.cia
sbsv2/raptor/test/smoke_suite/test_resources/simple/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple/test.h
sbsv2/raptor/test/smoke_suite/test_resources/simple/test1.c++
sbsv2/raptor/test/smoke_suite/test_resources/simple/test2.cxx
sbsv2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple/test4.cc
sbsv2/raptor/test/smoke_suite/test_resources/simple/test5.CC
sbsv2/raptor/test/smoke_suite/test_resources/simple/test6.C++
sbsv2/raptor/test/smoke_suite/test_resources/simple_crash/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CREATESTATICDLLARM.def
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CREATESTATICDLLWINS.def
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CREATESTATICPDLLARM.def
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CREATESTATICPDLLWINS.def
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CommonFramework.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CreateStaticDLL.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CreateStaticDLL.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CreateStaticDLL.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CreateStaticPDLL.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/armv6_specific.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/armv7_specific.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/pbld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/epoc32.ico
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/gui.rc
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/hand.cur
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/resource.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/win32resourcedll.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_export/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_export/executable_file
sbsv2/raptor/test/smoke_suite/test_resources/simple_export/file with a space.doc
sbsv2/raptor/test/smoke_suite/test_resources/simple_export/simple.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_export/simple_exp1.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_export/simple_exp2.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_export/simple_exp3.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_export/simple_exp4.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_export/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/build.meta
sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/build.mk
sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/clean.meta
sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/clean.mk
sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/flm_bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/flm_export.flm
sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/flm_export.xml
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/Bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/BldVar2.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/Bld_stdcpp.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/DISTRIBUTION.policy
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.hrh
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.pkg
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.rss
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorldVar2.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_AppUi.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_AppView.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_Application.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_Document.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_Main.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_reg.rss
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorldstdcpp.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon24.BMP
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon2M.BMP
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon32.BMP
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon3M.BMP
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon48.BMP
sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon4M.BMP
sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/nodef/bwins/implib_implicit_def.def
sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/nodef/eabi/implib_implicit_def.def
sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/nodef/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/nodef/group/implib_implicit_def.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/nodef/group/implib_no_def.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/simple_implib.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/simple_implib_emulator.def
sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/simple_implib_target.def
sbsv2/raptor/test/smoke_suite/test_resources/simple_kdll/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_kdll/kdll.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_kdll/kdll.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_lib/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_lib/simple.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_lib/simple_lib1.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_lib/simple_lib2.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_lib/test_lib.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/a.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/default.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/paged.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/paged_unpaged.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/pagedcode_defaultdata.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/pagedcode_unpageddata.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/unpaged.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/unpagedcode_pageddata.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin.rss
sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin3.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin3.rss
sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin_with_deffile.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_stringtable/CommonFramework.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_stringtable/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_stringtable/simple_stringtable.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_stringtable/simple_stringtable.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_stringtable/strings/strconsts.st
sbsv2/raptor/test/smoke_suite/test_resources/simple_test/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/simple_test/simple_test_auto.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_test/simple_test_manual.mmp
sbsv2/raptor/test/smoke_suite/test_resources/simple_test/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/simple_test/testexportheader.h
sbsv2/raptor/test/smoke_suite/test_resources/simple_zip_export/archive.zip
sbsv2/raptor/test/smoke_suite/test_resources/simple_zip_export/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/smp/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/smp/smp.mmp
sbsv2/raptor/test/smoke_suite/test_resources/smp/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/build_gen_source/HelloWorld.hrh
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/build_gen_source/HelloWorld.rss
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/build_gen_source/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/build_gen_source/build_gen_source.mmp
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/Bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld.h
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld.hrh
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld.mmp
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_AppUi.cpp
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_AppView.cpp
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_Application.cpp
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_Document.cpp
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_Main.cpp
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_reg.rss
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon24.BMP
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon2M.BMP
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon32.BMP
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon3M.BMP
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon48.BMP
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon4M.BMP
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent_on_exports/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent_on_exports/dependent_on_exports.mmp
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent_on_exports/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export/exported.inf
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export/exported.mmh
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export_pre1/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export_pre1/metadata_export_pre1.mmh
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export_pre2/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export_pre2/metadata_export_pre2.mmh
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/system_definition_dud.xml
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/system_definition_mmp_export_dependencies_test.xml
sbsv2/raptor/test/smoke_suite/test_resources/sysdef/system_definition_order_layer_test.xml
sbsv2/raptor/test/smoke_suite/test_resources/talon_test/README.FIRST.txt
sbsv2/raptor/test/smoke_suite/test_resources/talon_test/script
sbsv2/raptor/test/smoke_suite/test_resources/tem/README
sbsv2/raptor/test/smoke_suite/test_resources/tem/bad2_bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tem/bad_bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tem/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tem/bldclean.inf
sbsv2/raptor/test/smoke_suite/test_resources/tem/cleantems.mk
sbsv2/raptor/test/smoke_suite/test_resources/tem/temex.mk
sbsv2/raptor/test/smoke_suite/test_resources/tem_conflict/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tem_conflict/tem_conflicts.meta
sbsv2/raptor/test/smoke_suite/test_resources/tem_conflict/tem_conflicts.mk
sbsv2/raptor/test/smoke_suite/test_resources/tem_conflict/tem_conflicts.sh
sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/tem.meta
sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/tem.mk
sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/test_exe.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/test_exe.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/test_lib.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/test_lib.mmp
sbsv2/raptor/test/smoke_suite/test_resources/timeout/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/timeout/sleeper.flm
sbsv2/raptor/test/smoke_suite/test_resources/timeout/sleeper.xml
sbsv2/raptor/test/smoke_suite/test_resources/toolchain_macros/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/toolchain_macros/macros.cpp
sbsv2/raptor/test/smoke_suite/test_resources/toolchain_macros/macros.mmp
sbsv2/raptor/test/smoke_suite/test_resources/toolcheck/toolcheck.xml
sbsv2/raptor/test/smoke_suite/test_resources/toolcheck/toolcheck6.py
sbsv2/raptor/test/smoke_suite/test_resources/tools/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tools/tool_exe.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tools/tool_lib1.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tools/tool_lib2.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tools2/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tools2/build_spec.xml
sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/BLD.INF
sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/PDRTRAN.MMP
sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/TEST.PD
sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/platmacros.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/LEXICAL.CPP
sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/PDRREADR.CPP
sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/PDRRECRD.CPP
sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/PDRTRAN.CPP
sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/READER.CPP
sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/RECORD.CPP
sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/STRNG.CPP
sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/platmacros.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tools2/header_abc.h
sbsv2/raptor/test/smoke_suite/test_resources/tools2/inc1/header_def.h
sbsv2/raptor/test/smoke_suite/test_resources/tools2/inc2/header_ghi.h
sbsv2/raptor/test/smoke_suite/test_resources/tools2/sys1/header_jkl.h
sbsv2/raptor/test/smoke_suite/test_resources/tools2/sys2/header_mno.h
sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_exe.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_exe_a.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_exe_b.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib1.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib1_a.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib1_b.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib2.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib2_a.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib2_b.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_autorun/autorun1.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_autorun/autorun2.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_autorun/autorun3.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_autorun/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/group/HelloWorld.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/inc/HelloWorld.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/src/HelloWorld.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/traces/OstTraceDefinitions.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/CommonFramework.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/TCSTATICDLLWINS.def
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/tcwinsStaticDLL.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/tcwinsStaticDLL.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/tcwinsStaticDLL.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/tcwinsfiletwo.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/tcwinsfiletwo.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/traces/OstTraceDefinitions.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/win32resource/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/win32resource/epoc32.ico
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/win32resource/gui.rc
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/win32resource/hand.cur
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/win32resource/resource.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/win32resource/win32resourcedll.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/group/tc_variants.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/hrh/var1.hrh
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/hrh/var2.hrh
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/hrh/var3.hrh
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/list.txt
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/src/tc_a.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/src/tc_b.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/src/tc_c.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/src/tc_main.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/traces/OstTraceDefinitions.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/variants.xml
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/child1.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/child2.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/child3.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/mum.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/src/child1.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/src/child2.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/src/child3.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/src/common.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child1_exe/OstTraceDefinitions.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child2_exe/OstTraceDefinitions.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child3_exe/OstTraceDefinitions.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/use_tc.xml
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/var1/var.hrh
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/var2/var.hrh
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/var3/var.hrh
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/eabi/testTCu.def
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/group/bld2.inf
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/group/test.TC.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/group/testTC.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/bcmnvmem.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/gendebug.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/lmac_firmware.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/plt_firmware.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/wlanhwinit.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/wlanhwinitinterface.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/wlanhwinitmain.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/wlanhwinitpermparser.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/wlanhwinittypes.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/src/wlanhwinit.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/src/wlanhwinitmain.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/src/wlanhwinitpermparser.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/traces/OstTraceDefinitions.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/group/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/group/invariant_source.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/group/variant_source.mmp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/src/inv_source.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/src/var_source1.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/src/var_source2.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/src/var_source3.cpp
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/OstTraceDefinitions.h
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/use_tc.xml
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/var1/var.hrh
sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/var2/var.hrh
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/CommonFramework.h
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/exeusingunfrozen.mmp
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/freeze.inf
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/frozen_with_removed_export.mmp
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/missing_symbols.cpp
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/partfrozenarm.def
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/partfrozenwins.def
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/unfrozensymbols.cpp
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/unfrozensymbols.h
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/unfrozensymbols.mmp
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/unfrozensymbols_for_freeze.mmp
sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/unfrozensymbols_with_deffile.mmp
sbsv2/raptor/test/smoke_suite/test_resources/variantplatforms/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/variantplatforms/variantplatforms.flm
sbsv2/raptor/test/smoke_suite/test_resources/variantplatforms/variantplatforms.xml
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/dllversioning.inf
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/test.cpp
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver.cpp
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver.h
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver.mmp
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver_20.mmp
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver_eabi.def
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver_eabi{00020000}.def
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver_wins.def
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver_wins{00020000}.def
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/versioned_lib.def
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/versioned_lib01.mmp
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/versioned_lib02.mmp
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/versioned_lib03.mmp
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/versioned_lib04.mmp
sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/xver_20.mmp
sbsv2/raptor/test/smoke_suite/test_resources/xml_invalid_chars/bld.inf
sbsv2/raptor/test/smoke_suite/test_resources/xml_invalid_chars/simple.mmp
sbsv2/raptor/test/smoke_suite/test_resources/xml_invalid_chars/test.cpp
sbsv2/raptor/test/smoke_suite/timeout.py
sbsv2/raptor/test/smoke_suite/timing.py
sbsv2/raptor/test/smoke_suite/toolchain_macros.py
sbsv2/raptor/test/smoke_suite/toolcheck.py
sbsv2/raptor/test/smoke_suite/tools.py
sbsv2/raptor/test/smoke_suite/tools2.py
sbsv2/raptor/test/smoke_suite/tools2_cross_compilation.py
sbsv2/raptor/test/smoke_suite/tracecompiler_general.py
sbsv2/raptor/test/smoke_suite/tracecompiler_incremental.py
sbsv2/raptor/test/smoke_suite/tracecompiler_variants.py
sbsv2/raptor/test/smoke_suite/tracecompiler_whatlog.py
sbsv2/raptor/test/smoke_suite/unfrozen.py
sbsv2/raptor/test/smoke_suite/unfrozen_savespace.py
sbsv2/raptor/test/smoke_suite/variantplatforms.py
sbsv2/raptor/test/smoke_suite/whatcomp.py
sbsv2/raptor/test/smoke_suite/whatlog_cache.py
sbsv2/raptor/test/smoke_suite/winscw_resource.py
sbsv2/raptor/test/smoke_suite/wrong_projectname.py
sbsv2/raptor/test/smoke_suite/xml_invalid_chars.py
sbsv2/raptor/test/smoke_suite/zip_export_plus_clean.py
sbsv2/raptor/test/smoke_suite/zip_export_what.py
sbsv2/raptor/test/spec/spec.xml
sbsv2/raptor/test/timing_tests/parse_time_exports_mmps.py
sbsv2/raptor/test/unit_suite/data/ignore.xml
sbsv2/raptor/test/unit_suite/data/old_bad.xml
sbsv2/raptor/test/unit_suite/data/old_ok.xml
sbsv2/raptor/test/unit_suite/data/sbs_init.xml
sbsv2/raptor/test/unit_suite/filter_utils_unit.py
sbsv2/raptor/test/unit_suite/generic_path_unit.py
sbsv2/raptor/test/unit_suite/mmpparser_unit.py
sbsv2/raptor/test/unit_suite/raptor_api_unit.py
sbsv2/raptor/test/unit_suite/raptor_cache_unit.py
sbsv2/raptor/test/unit_suite/raptor_cli_unit.py
sbsv2/raptor/test/unit_suite/raptor_data_unit.py
sbsv2/raptor/test/unit_suite/raptor_make_unit.py
sbsv2/raptor/test/unit_suite/raptor_makefile_unit.py
sbsv2/raptor/test/unit_suite/raptor_meta_unit.py
sbsv2/raptor/test/unit_suite/raptor_unit.py
sbsv2/raptor/test/unit_suite/raptor_utilities_unit.py
sbsv2/raptor/test/unit_suite/raptor_xml_unit.py
sbsv2/raptor/util/talon/chomp.c
sbsv2/raptor/util/talon/chomp.h
sbsv2/raptor/util/talon/testchomp.c
sbsv2/raptor/util/talon/tests/config.sh
sbsv2/raptor/util/talon/tests/run.sh
sbsv2/raptor/util/talon/tests/t6.mk
sbsv2/raptor/win32/bin/unhide_ci_refs.exe
srctools/distillsrc/DISTRIBUTION.POLICY
srctools/distillsrc/distillsrc.pl
srctools/distillsrc/distillsrc.pm
srctools/distillsrc/group/distillsrc.mrp
srctools/distillsrc/readmrp.pm
srctools/distillsrc/release.src
srctools/distillsrc/test/DISTRIBUTION.POLICY
srctools/distillsrc/test/base.txt
srctools/distillsrc/test/bincase.mrp
srctools/distillsrc/test/duffer.mrp
srctools/distillsrc/test/naughty.mrp
srctools/distillsrc/test/options.txt
srctools/distillsrc/test/source/DISTRIBUTION.POLICY
srctools/distillsrc/test/source/complete/DISTRIBUTION.POLICY
srctools/distillsrc/test/source/complete/complete.mrp
srctools/distillsrc/test/source/complete/file
srctools/distillsrc/test/source/fixer.mrp
srctools/distillsrc/test/source/missing/DISTRIBUTION.POLICY
srctools/distillsrc/test/source/missing/file
srctools/distillsrc/test/source/missing/missing.mrp
srctools/distillsrc/test/source/missing/unowned
srctools/distillsrc/test/source/shared/DISTRIBUTION.POLICY
srctools/distillsrc/test/source/shared/complete
srctools/distillsrc/test/source/shared/missing
srctools/distillsrc/test/source/spacey/DISTRIBUTION.POLICY
srctools/distillsrc/test/source/spacey/spa cey.txt
srctools/distillsrc/test/source/spacey/spacey.mrp
srctools/distillsrc/test/source/whole/DISTRIBUTION.POLICY
srctools/distillsrc/test/source/whole/file
srctools/distillsrc/test/source/whole/whole.mrp
srctools/distillsrc/test/test.pl
srctools/readtype/UnicodeData-5.0.txt
srctools/readtype/documentation/Unicode Character Data and Line Break data Update History.doc
srctools/readtype/group/bld.inf
srctools/readtype/group/readtype.mmp
srctools/readtype/group/readtype.mrp
srctools/readtype/readtype.cpp
srctools/readtype/unicodedata-3.0.0.txt
srctools/readtype/unicodedata-3.0.0_IndicCharsFrom_5.0.txt
srctools/readtype/unicodedata.html
srctools/tranasm/tranasm
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/group/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,216 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// 
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+// 
+// Contributors:
+// 
+// Description:
+// 
+//
+
+PRJ_PLATFORMS
+
+PRJ_EXPORTS
+
+../perl/archive_path.txt.ex	   /tools/cbr/archive_path.txt.ex
+../perl/BinInfo	   /tools/cbr/BinInfo
+../perl/BinInfo.bat	   /tools/cbr/BinInfo.bat
+../perl/BldDocs	   /tools/cbr/BldDocs
+../perl/BldDocs.bat	   /tools/cbr/BldDocs.bat
+../perl/BuildRel	   /tools/cbr/BuildRel
+../perl/BuildRel.bat	   /tools/cbr/BuildRel.bat
+../perl/CatData.pm	   /tools/cbr/CatData.pm
+../perl/CheckBc	   /tools/cbr/CheckBc
+../perl/CheckBc.bat	   /tools/cbr/CheckBc.bat
+../perl/CheckBc.pm	   /tools/cbr/CheckBc.pm
+../perl/CheckRls	   /tools/cbr/CheckRls
+../perl/CheckRls.bat	   /tools/cbr/CheckRls.bat
+../perl/CleanEnv	   /tools/cbr/CleanEnv
+../perl/CleanEnv.bat	   /tools/cbr/CleanEnv.bat
+../perl/CleanEnv.pm	   /tools/cbr/CleanEnv.pm
+../perl/CleanEnv.pod	   /tools/cbr/CleanEnv.pod
+../perl/Cleaner.pm	   /tools/cbr/Cleaner.pm
+../perl/CleanLocalArch	   /tools/cbr/CleanLocalArch
+../perl/CleanLocalArch.bat	   /tools/cbr/CleanLocalArch.bat
+../perl/cleanremote	   /tools/cbr/cleanremote
+../perl/cleanremote.bat	   /tools/cbr/cleanremote.bat
+../perl/CommandController.pm	   /tools/cbr/CommandController.pm
+../perl/CopyRel	   /tools/cbr/CopyRel
+../perl/CopyRel.bat	   /tools/cbr/CopyRel.bat
+../perl/CopyRel.pm	   /tools/cbr/CopyRel.pm
+../perl/Crypt.pm	   /tools/cbr/Crypt.pm
+../perl/DeltaEnv	   /tools/cbr/DeltaEnv
+../perl/DeltaEnv.bat	   /tools/cbr/DeltaEnv.bat
+../perl/DiffEnv	   /tools/cbr/DiffEnv
+../perl/DiffEnv.bat	   /tools/cbr/DiffEnv.bat
+../perl/DiffRel	   /tools/cbr/DiffRel
+../perl/DiffRel.bat	   /tools/cbr/DiffRel.bat
+../perl/EnvData	   /tools/cbr/EnvData
+../perl/EnvData.bat	   /tools/cbr/EnvData.bat
+../perl/EnvDb.pm	   /tools/cbr/EnvDb.pm
+../perl/EnvDifferencer.pm	   /tools/cbr/EnvDifferencer.pm
+../perl/EnvInfo	   /tools/cbr/EnvInfo
+../perl/EnvInfo.bat	   /tools/cbr/EnvInfo.bat
+../perl/EnvInfoTk	   /tools/cbr/EnvInfoTk
+../perl/EnvInfoTk.bat	   /tools/cbr/EnvInfoTk.bat
+../perl/Environment	   /tools/cbr/Environment
+../perl/envmembership	   /tools/cbr/envmembership
+../perl/envmembership.bat	   /tools/cbr/envmembership.bat
+../perl/envsize	   /tools/cbr/envsize
+../perl/envsize.bat	   /tools/cbr/envsize.bat
+../perl/ExportData.pm	   /tools/cbr/ExportData.pm
+../perl/ExportEnv	   /tools/cbr/ExportEnv
+../perl/ExportEnv.bat	   /tools/cbr/ExportEnv.bat
+../perl/ExportingReleases	   /tools/cbr/ExportingReleases
+../perl/ExportRel	   /tools/cbr/ExportRel
+../perl/ExportRel.bat	   /tools/cbr/ExportRel.bat
+../perl/FAQ	   /tools/cbr/FAQ
+../perl/FundamentalConcepts	   /tools/cbr/FundamentalConcepts
+../perl/FurtherInformation	   /tools/cbr/FurtherInformation
+../perl/GetEnv	   /tools/cbr/GetEnv
+../perl/GetEnv.bat	   /tools/cbr/GetEnv.bat
+../perl/GetEnv.pm	   /tools/cbr/GetEnv.pm
+../perl/getrel	   /tools/cbr/getrel
+../perl/getrel.bat	   /tools/cbr/getrel.bat
+../perl/GetSource	   /tools/cbr/GetSource
+../perl/GetSource.bat	   /tools/cbr/GetSource.bat
+../perl/HistoricPerspective	   /tools/cbr/HistoricPerspective
+../perl/ImportEnv	   /tools/cbr/ImportEnv
+../perl/ImportEnv.bat	   /tools/cbr/ImportEnv.bat
+../perl/ImportRel	   /tools/cbr/ImportRel
+../perl/ImportRel.bat	   /tools/cbr/ImportRel.bat
+../perl/IniData.pm	   /tools/cbr/IniData.pm
+../perl/Installation	   /tools/cbr/Installation
+../perl/InstallSnapShot	   /tools/cbr/InstallSnapShot
+../perl/InstallSnapShot.bat	   /tools/cbr/InstallSnapShot.bat
+../perl/InstCol2	   /tools/cbr/InstCol2
+../perl/InstCol2.bat	   /tools/cbr/InstCol2.bat
+../perl/LatestVer	   /tools/cbr/LatestVer
+../perl/LatestVer.bat	   /tools/cbr/LatestVer.bat
+../perl/listcomponents	   /tools/cbr/listcomponents
+../perl/listcomponents.bat	   /tools/cbr/listcomponents.bat
+../perl/MakeEnv	   /tools/cbr/MakeEnv
+../perl/MakeEnv.bat	   /tools/cbr/MakeEnv.bat
+../perl/MakeRel	   /tools/cbr/MakeRel
+../perl/MakeRel.bat	   /tools/cbr/MakeRel.bat
+../perl/MakeRel.pm	   /tools/cbr/MakeRel.pm
+../perl/MakeSnapShot	   /tools/cbr/MakeSnapShot
+../perl/MakeSnapShot.bat	   /tools/cbr/MakeSnapShot.bat
+../perl/MakingReleases	   /tools/cbr/MakingReleases
+../perl/ManagingEnvironments	   /tools/cbr/ManagingEnvironments
+../perl/mbld	   /tools/cbr/mbld
+../perl/mbld.bat	   /tools/cbr/mbld.bat
+../perl/MergeEnvironments	   /tools/cbr/MergeEnvironments
+../perl/MergeEnvironments.bat	   /tools/cbr/MergeEnvironments.bat
+../perl/MLDBM.pm	   /tools/cbr/MLDBM.pm
+../perl/ModNotes	   /tools/cbr/ModNotes
+../perl/ModNotes.bat	   /tools/cbr/ModNotes.bat
+../perl/MrpComplexity	   /tools/cbr/MrpComplexity
+../perl/MrpComplexity.bat	   /tools/cbr/MrpComplexity.bat
+../perl/MrpData.pm	   /tools/cbr/MrpData.pm
+../perl/NotesCompiler.pm	   /tools/cbr/NotesCompiler.pm
+../perl/Optimisation	   /tools/cbr/Optimisation
+../perl/PathData.pm	   /tools/cbr/PathData.pm
+../perl/PrepEnv	   /tools/cbr/PrepEnv
+../perl/PrepEnv.bat	   /tools/cbr/PrepEnv.bat
+../perl/PrepRel	   /tools/cbr/PrepRel
+../perl/PrepRel.bat	   /tools/cbr/PrepRel.bat
+../perl/PrepRel.pm	   /tools/cbr/PrepRel.pm
+../perl/PullEnv	   /tools/cbr/PullEnv
+../perl/PullEnv.bat	   /tools/cbr/PullEnv.bat
+../perl/pullrel	   /tools/cbr/pullrel
+../perl/pullrel.bat	   /tools/cbr/pullrel.bat
+../perl/PushEnv	   /tools/cbr/PushEnv
+../perl/PushEnv.bat	   /tools/cbr/PushEnv.bat
+../perl/PushPullRel.pm	   /tools/cbr/PushPullRel.pm
+../perl/pushrel	   /tools/cbr/pushrel
+../perl/pushrel.bat	   /tools/cbr/pushrel.bat
+../perl/QuickStart	   /tools/cbr/QuickStart
+../perl/RelData.pm	   /tools/cbr/RelData.pm
+../perl/relnotes.txt	   /tools/cbr/relnotes.txt
+../perl/reltools.ini.ex	   /tools/cbr/reltools.ini.ex
+../perl/RelTransfer.pm	   /tools/cbr/RelTransfer.pm
+../perl/RemoteSite.pm	   /tools/cbr/RemoteSite.pm
+../perl/RemoveRel	   /tools/cbr/RemoveRel
+../perl/RemoveRel.bat	   /tools/cbr/RemoveRel.bat
+../perl/removesource	   /tools/cbr/removesource
+../perl/removesource.bat	   /tools/cbr/removesource.bat
+../perl/SourceInfo	   /tools/cbr/SourceInfo
+../perl/SourceInfo.bat	   /tools/cbr/SourceInfo.bat
+../perl/TableFormatter.pm	   /tools/cbr/TableFormatter.pm
+../perl/Utils.pm	   /tools/cbr/Utils.pm
+../perl/ValidateEnv	   /tools/cbr/ValidateEnv
+../perl/ValidateEnv.bat	   /tools/cbr/ValidateEnv.bat
+../perl/ValidateRel	   /tools/cbr/ValidateRel
+../perl/ValidateRel.bat	   /tools/cbr/ValidateRel.bat
+../perl/version.txt	   /tools/cbr/version.txt
+../perl/ViewNotes	   /tools/cbr/ViewNotes
+../perl/ViewNotes.bat	   /tools/cbr/ViewNotes.bat
+../perl/Archive/Tar.pm	   /tools/cbr/Archive/Tar.pm
+../perl/Archive/Zip.pm	   /tools/cbr/Archive/Zip.pm
+../perl/Archive/Zip/BufferedFileHandle.pm	   /tools/cbr/Archive/Zip/BufferedFileHandle.pm
+../perl/Archive/Zip/MockFileHandle.pm	   /tools/cbr/Archive/Zip/MockFileHandle.pm
+../perl/Archive/Zip/Tree.pm	   /tools/cbr/Archive/Zip/Tree.pm
+../perl/Class/Singleton.pm	   /tools/cbr/Class/Singleton.pm
+../perl/Crypt/GPG.pm	   /tools/cbr/Crypt/GPG.pm
+../perl/Crypt/PGP.pm	   /tools/cbr/Crypt/PGP.pm
+../perl/Digest/Perl/MD5.pm	   /tools/cbr/Digest/Perl/MD5.pm
+../perl/Digest/Perl/readme.txt	   /tools/cbr/Digest/Perl/readme.txt
+../perl/MLDBM/Sync.pm      /tools/cbr/MLDBM/Sync.pm
+../perl/MLDBM/Sync/SDBM_File.pm            /tools/cbr/MLDBM/Sync/SDBM_File.pm
+../perl/MLDBM/Serializer/FreezeThaw.pm	   /tools/cbr/MLDBM/Serializer/FreezeThaw.pm
+../perl/MLDBM/Serializer/Storable.pm	   /tools/cbr/MLDBM/Serializer/Storable.pm
+../perl/MLDBM/Serializer/Data/Dumper.pm	   /tools/cbr/MLDBM/Serializer/Data/Dumper.pm
+../perl/Net/Cmd.pm	   /tools/cbr/Net/Cmd.pm
+../perl/Net/Config.pm	   /tools/cbr/Net/Config.pm
+../perl/Net/Domain.pm	   /tools/cbr/Net/Domain.pm
+../perl/Net/DummyInetd.pm	   /tools/cbr/Net/DummyInetd.pm
+../perl/Net/FTP.pm	   /tools/cbr/Net/FTP.pm
+../perl/Net/libnetFAQ.pod	   /tools/cbr/Net/libnetFAQ.pod
+../perl/Net/Netrc.pm	   /tools/cbr/Net/Netrc.pm
+../perl/Net/NNTP.pm	   /tools/cbr/Net/NNTP.pm
+../perl/Net/PH.pm	   /tools/cbr/Net/PH.pm
+../perl/Net/POP3.pm	   /tools/cbr/Net/POP3.pm
+../perl/Net/SMTP.pm	   /tools/cbr/Net/SMTP.pm
+../perl/Net/SNPP.pm	   /tools/cbr/Net/SNPP.pm
+../perl/Net/Time.pm	   /tools/cbr/Net/Time.pm
+../perl/Net/FTP/A.pm	   /tools/cbr/Net/FTP/A.pm
+../perl/Net/FTP/dataconn.pm	   /tools/cbr/Net/FTP/dataconn.pm
+../perl/Net/FTP/E.pm	   /tools/cbr/Net/FTP/E.pm
+../perl/Net/FTP/I.pm	   /tools/cbr/Net/FTP/I.pm
+../perl/Net/FTP/L.pm	   /tools/cbr/Net/FTP/L.pm
+../perl/PathData/ComponentBased.pm	   /tools/cbr/PathData/ComponentBased.pm
+../perl/PathData/ProjectBased.pm	   /tools/cbr/PathData/ProjectBased.pm
+../perl/RelTransfer/Export.pm	   /tools/cbr/RelTransfer/Export.pm
+../perl/RelTransfer/Import.pm	   /tools/cbr/RelTransfer/Import.pm
+../perl/RemoteSite/FTP.pm	   /tools/cbr/RemoteSite/FTP.pm
+../perl/RemoteSite/NetDrive.pm	   /tools/cbr/RemoteSite/NetDrive.pm
+../perl/RemoteSite/FTP/Experimental.pm	   /tools/cbr/RemoteSite/FTP/Experimental.pm
+../perl/RemoteSite/FTP/Proxy.pm	   /tools/cbr/RemoteSite/FTP/Proxy.pm
+../perl/RemoteSite/FTP/Proxy/Experimental.pm	   /tools/cbr/RemoteSite/FTP/Proxy/Experimental.pm
+../perl/RemoteSite/NetDrive/MultiVolumeExport.pm	   /tools/cbr/RemoteSite/NetDrive/MultiVolumeExport.pm
+../perl/RemoteSite/NetDrive/MultiVolumeImport.pm	   /tools/cbr/RemoteSite/NetDrive/MultiVolumeImport.pm
+../perl/Symbian/DistributionPolicy.pm	   /tools/cbr/Symbian/DistributionPolicy.pm
+../perl/Symbian/IPR.pm	   /tools/cbr/Symbian/IPR.pm
+../perl/Symbian/CBR/ApplyDelta.pm	   /tools/cbr/Symbian/CBR/ApplyDelta.pm
+../perl/Symbian/CBR/CreateDelta.pm	   /tools/cbr/Symbian/CBR/CreateDelta.pm
+../perl/Symbian/CBR/MRP.pm	   /tools/cbr/Symbian/CBR/MRP.pm
+../perl/Symbian/CBR/MRPInterface.pm	   /tools/cbr/Symbian/CBR/MRPInterface.pm
+../perl/Symbian/CBR/Component/Manifest.pm	   /tools/cbr/Symbian/CBR/Component/Manifest.pm
+../perl/Symbian/CBR/DeltaRelease/Manifest.pm	   /tools/cbr/Symbian/CBR/DeltaRelease/Manifest.pm
+../perl/Symbian/CBR/IPR/MRP.pm	   /tools/cbr/Symbian/CBR/IPR/MRP.pm
+../perl/Symbian/CBR/MRP/Reader.pm	   /tools/cbr/Symbian/CBR/MRP/Reader.pm
+../perl/Symbian/CBR/release/Manifest.pm	   /tools/cbr/Symbian/CBR/release/Manifest.pm
+../perl/Symbian/DistributionPolicy/Reader.pm	   /tools/cbr/Symbian/DistributionPolicy/Reader.pm
+../perl/TableFormatter/Auto.pm	   /tools/cbr/TableFormatter/Auto.pm
+../perl/TableFormatter/Csv.pm	   /tools/cbr/TableFormatter/Csv.pm
+../perl/TableFormatter/Excel.pm	   /tools/cbr/TableFormatter/Excel.pm
+../perl/TableFormatter/Html.pm	   /tools/cbr/TableFormatter/Html.pm
+../perl/TableFormatter/Text.pm	   /tools/cbr/TableFormatter/Text.pm
+../perl/Text/Glob.pm	   /tools/cbr/Text/Glob.pm
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/group/build.mk	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,74 @@
+# Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# Extension Makefile for creating the CBR tools installable package
+#
+
+# Constants
+TOOLS_DIR = $(EPOCROOT)tools
+WORK_DIR = $(EPOCROOT)temp\cbr
+SRC_DIR = ..\perl
+CUR_DIR = $(shell chdir)
+include version.mk
+
+# Targets
+
+do_nothing: 
+	rem do_nothing
+
+MAKMAKE : do_nothing
+
+RESOURCE : do_nothing
+
+FREEZE : do_nothing
+
+SAVESPACE : BLD
+
+LIB: do_nothing
+
+RELEASABLES :
+ifeq ("$(PLATFORM) $(CFG)", "TOOLS REL")
+	@echo $(TOOLS_DIR)\cbr\cbrtools$(VERSION).zip	
+endif
+
+
+# remove jar file and class files
+CLEAN :
+ifeq ("$(PLATFORM) $(CFG)", "TOOLS REL")
+	-del $(TOOLS_DIR)\cbr\cbrtools$(VERSION).zip	
+	-rmdir /s/q $(WORK_DIR)
+endif
+
+# Called with
+#
+# $(PLATFORM) = TOOLS
+# $(CFG)      = DEB, REL
+
+# Note: DISTRIBUTION.POLICY files are only shipped with the example 
+
+BLD	:  
+	@echo BLD called with $(PLATFORM) $(CFG)
+ifeq ("$(PLATFORM) $(CFG)", "TOOLS REL")
+	-rmdir /S/Q $(WORK_DIR)
+	-mkdir $(TOOLS_DIR)\cbr
+	-del $(TOOLS_DIR)\cbr\cbrtools$(VERSION).zip	
+	-mkdir $(WORK_DIR)
+	xcopy /EI $(SRC_DIR) $(WORK_DIR)	
+	cd $(WORK_DIR); zip -9r $(TOOLS_DIR)\cbr\cbrtools$(VERSION).zip *	
+	-rmdir /S/Q $(WORK_DIR)
+endif
+
+FINAL : do_nothing
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/group/cbr.preconfigure.nsh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,288 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+
+###########################################################################################
+#  CBR Tools handling
+# 
+!define RELTOOLSKEY "SOFTWARE\Symbian\Release Tools"
+!define CBRTOOLSKEY "SOFTWARE\Symbian\Symbian CBR Tools"
+!define PRODUCT_UNINST_KEY "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"
+
+VAR CBRUNINSTALL
+
+!macro CBRToolsNSISManualUninstall inVersion inPath
+           SetShellVarContext current
+           RMDir /r "$SMPROGRAMS\Symbian CBR Tools\${inVersion}"
+           RMDir "$SMPROGRAMS\Symbian CBR Tools" ; delete if empty
+           RMDir /r "${inPath}"
+           DeleteRegKey HKLM "${PRODUCT_UNINST_KEY}\Symbian CBR Tools ${inVersion}"
+           DeleteRegKey HKLM "${CBRTOOLSKEY}\${inVersion}"
+           DeleteRegKey /ifempty HKLM "${CBRTOOLSKEY}"
+           Push "${inPath}"
+           !insertmacro PathTypeRmvFromEnvVar "path" "${inPath}" ""
+           !insertmacro SetShellVarCtxt
+!macroend
+
+
+!macro CBRToolsISManualUninstall inVersion inPath inUninstallKey
+           RMDir /r "$SMPROGRAMS\Symbian OS Release Tools\"
+           RMDir /r "${inPath}"
+           ${If} "${inUninstallKey}" != ""
+             DeleteRegKey HKLM "${PRODUCT_UNINST_KEY}\${inUninstallKey}"
+           ${EndIf}
+           DeleteRegKey HKLM "${RELTOOLSKEY}\${inVersion}"
+           DeleteRegKey /ifempty HKLM "${RELTOOLSKEY}"
+           DeleteRegKey /ifempty HKLM "SOFTWARE\Symbian"
+           Push "${inPath}"
+           !insertmacro PathTypeRmvFromEnvVar "path" "${inPath}" ""
+!macroend
+
+
+Function CBRToolsPreConfigureFunction
+exch $0 
+push $1 # counter
+push $2 # version
+push $3 # uninstall string
+push $4
+push $5
+
+push $6
+
+push $R0 # $ReplaceVer
+push $R1 # $ReplaceKey
+
+push $R2 # nsis installations found
+push $R3 # install shield installations found
+      StrCpy $CBRUNINSTALL "no"
+StrCpy $5 1
+SectionGetFlags $0  $R0 
+IntOp $R0 $R0 & ${SF_SELECTED} 
+${If} $R0 == ${SF_SELECTED} 
+
+  StrCpy $R0 "Following CBR Tools version(s) are already installed: "
+  StrCpy $R1 ""
+  StrCpy $R2 "" 
+  StrCpy $R3 ""
+  StrCpy $6 ""
+  StrCpy $1 0
+  loop:           #check if there is install shield installation
+    EnumRegKey $2 HKLM "${RELTOOLSKEY}" $1
+    StrCmp $2 "" checkNsis
+    IntOp $1 $1 + 1
+    readregstr $3 HKLM "${RELTOOLSKEY}\$2" "Path"
+    StrCpy $R3 "1"
+    StrCpy $R0 "$R0$\r$\nVersion $2 is already installed in $3."
+    GoTo loop
+  
+  checkNsis:    # check if there is NSIS installation
+  StrCpy $4 $1  
+  StrCpy $1 0
+  loop1:
+    EnumRegKey $2 HKLM "${CBRTOOLSKEY}" $1
+    StrCmp $2 "" done
+    IntOp $1 $1 + 1
+    readregstr $3 HKLM "${CBRTOOLSKEY}\$2" "Path"
+    StrCpy $R2 "$R2-$2-"  
+    StrCpy $R0 "$R0$\r$\nVersion $2 is already installed in $3."
+    GoTo loop1
+  
+  done:
+    IntOp $1 $1 + $4
+    ${If} $1 > 0
+   
+    ${If} $SILENT == "true"
+    ${AndIf} $DIALOGS == "false"
+      !insertmacro LogStopMessage "CBRTools (Release Tools) already installed. Stopping installation.\
+      $\r$\nPlease uninstall CBRTools (Rlease Tools) before continuing " "${OTHER_ERROR}"
+    ${Else}
+      MessageBox MB_YESNOCANCEL "$R0$\r$\n\
+        Do you want to uninstall previous installation(s) before continuing?" IDYES continue IDNO finish 
+    ${EndIf} 
+
+      cancel:
+      StrCpy $5 0
+      GoTo finish
+      
+      
+      continue:
+      StrCpy $CBRUNINSTALL "yes"
+      
+    ${EndIf}
+  finish:  
+${EndIf}
+  StrCpy $0 "$5"
+  pop $R3
+  pop $R2
+  pop $R1
+  pop $R0
+  pop $6
+  pop $5
+  pop $4
+  pop $3
+  pop $2
+  pop $1
+  exch $0
+FunctionEnd
+
+Function CBRToolsPreviousUninstall
+exch $0 
+push $1 # counter
+push $2 # version
+push $3 # uninstall string
+push $4
+push $5
+
+push $6
+
+push $R0 # $ReplaceVer
+push $R1 # $ReplaceKey
+
+push $R2 # nsis installations found
+push $R3 # install shield installations found
+
+${If} $CBRUNINSTALL == "yes"
+  #uninstall
+  #Uninstall first all NSIS installations
+  StrCpy $1 0
+  EnumRegKey $2 HKLM "${CBRTOOLSKEY}" $1
+  ${While} $2 != ""
+        ReadRegStr $3 HKLM "${PRODUCT_UNINST_KEY}\Symbian CBR Tools $2" "UninstallString"
+        ReadRegStr $4 HKLM "${CBRTOOLSKEY}\$2" "Path"
+        ${If} $3 == "" #no uninstaller found
+          StrCpy $6 "error"
+        ${Else}
+          IfFileExists $3 +2 0
+          StrCpy $6 "error"
+        ${EndIf}
+        
+          ${If} $SILENT == "false" 
+          ${OrIf} $DIALOGS == "true"
+            Banner::show /NOUNLOAD /set 76 "Removing previous installation $2..." "Please wait."
+          ${EndIf}
+          IfFileExists "$4\reltools.ini" 0 +3
+           CreateDirectory "$TEMP\sitk\$2\"
+           CopyFiles /SILENT "$4\reltools.ini" "$TEMP\sitk\$2\"
+          ${If} $6 == "error"
+            !insertmacro CBRToolsNSISManualUninstall "$2" "$4"
+          ${Else}
+            ClearErrors
+            ExecWait '"$3" /S _?=$4\' ;$3: Uninstaller $4:installation path
+            IfErrors +2 0
+            RMDir /r $4 ; delete installation folder
+          ${EndIf}
+          IfFileExists "$TEMP\sitk\$2\reltools.ini" 0 +4
+           CreateDirectory "$4"        
+           CopyFiles /SILENT "$TEMP\sitk\$2\reltools.ini" "$4" 
+           RMDir /r "$TEMP\sitk\$2\"
+          ${If} $SILENT == "false" 
+          ${OrIf} $DIALOGS == "true"
+            Banner::destroy
+          ${EndIf}
+
+     #IntOp $1 $1 + 1
+     EnumRegKey $2 HKLM "${CBRTOOLSKEY}" $1
+  ${EndWhile}
+
+  loop:           #check if there is install shield installation
+
+
+  StrCpy $1 0
+  StrCpy $R3 0
+  EnumRegKey $2 HKLM "${RELTOOLSKEY}" $1 
+  ${While} $2 != ""
+    ReadRegStr $3 HKLM "${RELTOOLSKEY}\$2" "Path"
+    
+           CreateDirectory "$TEMP\sitk\InstallShield\$2\"
+           IfFileExists "$3\reltools.ini" 0 +2
+           CopyFiles /SILENT "$3\reltools.ini" "$TEMP\sitk\InstallShield\$2\"
+           FileOpen $4 "$TEMP\sitk\InstallShield\$2\dir.txt" "w"
+           FileWrite $4 "$3"
+           FileClose $4
+    StrCpy $R3 "1"
+    IntOp $1 $1 + 1
+    EnumRegKey $2 HKLM "${RELTOOLSKEY}" $1
+  ${EndWhile}    
+  
+  
+      ${If} $R3 == "1" #Look for install shield installations to uninstall
+        StrCpy $1 0
+        StrCpy $6 ""
+        EnumRegKey $2 HKLM "${PRODUCT_UNINST_KEY}" $1
+        ${While} $2 != "" 
+           ReadRegStr $3 HKLM "${PRODUCT_UNINST_KEY}\$2" "DisplayName"
+           ${If} $3 == "Release Tools"
+              ${ExitWhile}
+           ${EndIf}
+           IntOp $1 $1 + 1    
+           EnumRegKey $2 HKLM "${PRODUCT_UNINST_KEY}" $1
+        ${EndWhile}
+        
+        ${If} $2 == ""
+          StrCpy $6 "error"
+        ${ElseIf} $3 == "Release Tools"
+          ReadRegStr $3 HKLM "${PRODUCT_UNINST_KEY}\$2" "UninstallString"
+          ${If} $3 == ""
+            StrCpy $6 "error"
+          ${Else}
+            MessageBox MB_OK "InstallShield will be launched, please select <remove> and follow the wizard" /SD IDOK
+            ExecWait $3
+          ${EndIf}
+        ${EndIf}
+        
+        FindFirst $0 $4 "$TEMP\sitk\InstallShield\*"
+        ${While} $4 != ""
+            ${If} $4 != "."
+            ${AndIf} $4 != ".."
+              IfFileExists "$TEMP\sitk\InstallShield\$4\dir.txt" 0 notfound
+
+              FileOpen $3 "$TEMP\sitk\InstallShield\$4\dir.txt" "r"
+              FileRead $3 $1
+              FileClose $3
+              
+              ${If} $6 == "error"
+                !insertmacro CBRToolsISManualUninstall "$4" "$1" "$2"
+              ${EndIf}
+              
+              IfFileExists "$TEMP\sitk\InstallShield\$4\reltools.ini" 0 notfound
+              CreateDirectory "$1" 
+              CopyFiles /SILENT "$TEMP\sitk\InstallShield\$4\reltools.ini" "$1" 
+              notfound:
+              
+            ${EndIf}
+            FindNext $0 $4
+        ${EndWhile}
+        FindClose $0   
+
+      ${EndIf}
+      #uninstal
+${EndIF}
+
+  pop $R3
+  pop $R2
+  pop $R1
+  pop $R0
+  pop $6
+  pop $5
+  pop $4
+  pop $3
+  pop $2
+  pop $1
+  pop $0
+FunctionEnd
+
+!macro CBRToolsPreconfigure inSectionName
+  push "${inSectionName}"
+  call CBRToolsPreConfigureFunction
+!macroend
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/group/cbr_tools.tdf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,15 @@
+<tool name="CBR Tools" description="Component Based Release tools for integration and transferring releases" version="2.84.3">
+	<properties>
+		<property type="toolLogic" name="Path" value="$INSTDIR\cbr"/>
+	</properties>
+	<templates>
+		<template type="nsis" operation="preconfigure" name="src/tools/product/tools/cbr/group/cbr.preconfigure.nsh" />
+		<template type="xsl" operation="install" name="cbr_installer.xsl"/>
+	</templates>
+	<files>
+		<zip source="\tools\cbr\cbrtools*.zip" target="$INSTDIR/cbr"/>
+	</files>
+	<dependencies>
+		<dependency name="CBR Documentation"/>
+	</dependencies>
+</tool>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/group/cbrtools.mrp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+
+component dev_build_releasing_cbrtools
+
+source \src\tools\build\releasing\cbrtools
+
+ipr T
+
+exports \src\tools\build\releasing\cbrtools\group
+
+notes_source \src\tools\build\releasing\cbrtools\group\release.txt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/group/release.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,5 @@
+NOTESRC_RELEASER
+Symbian.
+
+NOTESRC_RELEASE_REASON
+CBR tools release.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/group/version.mk	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1 @@
+VERSION = 2.84.3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Archive/Tar.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1242 @@
+# Copyright 1997 Calle Dybedahl. All rights reserved.
+# Copyright 1998 Stephen Zander. All rights reserved.
+#
+# It is currently developed by Stephen Zander <gibreel@pobox.com>
+#
+# This library is free software; you can redistribute it and/or modify
+# it under the same terms as Perl itself.
+
+package Archive::Tar;
+
+use strict;
+use Carp qw(carp);
+use Cwd;
+use Fcntl qw(O_RDONLY O_RDWR O_WRONLY O_CREAT O_TRUNC F_DUPFD F_GETFL);
+use File::Basename;
+use Symbol;
+require Time::Local if $^O eq "MacOS";
+
+use vars qw($VERSION @ISA @EXPORT_OK %EXPORT_TAGS);
+$VERSION = do { my @a=q$Name: version_0_22 $ =~ /\d+/g; sprintf "%d." . ("%02d" x $#a ),@a };
+
+require Exporter;
+@ISA = qw(Exporter);
+
+@EXPORT_OK = qw(FILE HARDLINK SYMLINK 
+		CHARDEV BLOCKDEV DIR
+		FIFO SOCKET INVALID);
+%EXPORT_TAGS = (filetypes => \@EXPORT_OK);
+
+# Check if symbolic links are available
+my $symlinks = eval { readlink $0 or 1; };
+carp "Symbolic links not available"
+    unless $symlinks || !$^W;
+
+# Check if Compress::Zlib is available
+my $compression = eval { 
+    local $SIG{__DIE__};
+    require Compress::Zlib; 
+    sub Compress::Zlib::gzFile::gzseek {
+	my $tmp;
+
+	$_[0]->gzread ($tmp, 4096), $_[1] -= 4096
+	    while ($_[1] > 4096);
+
+	$_[0]->gzread ($tmp, $_[1])
+	  if $_[1];
+    }
+    1;
+};
+carp "Compression not available"
+    unless $compression || !$^W;
+
+# Check for get* (they don't exist on WinNT)
+my $fake_getpwuid;
+$fake_getpwuid = "unknown"
+    unless eval { $_ = getpwuid (0); }; # Pointless assigment to make -w shut up
+
+my $fake_getgrgid;
+$fake_getgrgid = "unknown"
+    unless eval { $_ = getgrgid (0); }; # Pointless assigment to make -w shut up
+
+# Automagically detect gziped files if they start with this
+my $gzip_magic_number = "^(?:\037\213|\037\235)";
+
+my $tar_unpack_header 
+    = 'A100 A8 A8 A8 A12 A12 A8 A1 A100 A6 A2 A32 A32 A8 A8 A155 x12';
+my $tar_pack_header
+    = 'a100 a8 a8 a8 a12 a12 A8 a1 a100 a6 a2 a32 a32 a8 a8 a155 x12',
+my $tar_header_length = 512;
+
+my $time_offset = ($^O eq "MacOS") ? Time::Local::timelocal(0,0,0,1,0,70) : 0;
+
+## Subroutines to return type constants 
+sub FILE() { return 0; }
+sub HARDLINK() { return 1; }
+sub SYMLINK() { return 2; }
+sub CHARDEV() { return 3; }
+sub BLOCKDEV() { return 4; }
+sub DIR() { return 5; }
+sub FIFO() { return 6; }
+sub SOCKET() { return 8; }
+sub UNKNOWN() { return 9; }
+
+###
+### Non-method functions
+###
+
+my $error;
+sub _drat {
+    $error = $! . '';
+    return;
+}
+
+sub error {
+    $error;
+}
+
+sub set_error {
+    shift;
+    $error = "@_";
+}
+
+## filetype -- Determine the type value for a given file
+sub filetype {
+    my $file = shift;
+
+    return SYMLINK
+	if (-l $file);		# Symlink
+
+    return FILE
+	if (-f _);		# Plain file
+
+    return DIR
+	if (-d _);		# Directory
+
+    return FIFO
+	if (-p _);		# Named pipe
+
+    return SOCKET
+	if (-S _);		# Socket
+
+    return BLOCKDEV
+	if (-b _);		# Block special
+
+    return CHARDEV
+	if (-c _);		# Character special
+
+    return UNKNOWN;		# Something else (like what?)
+}
+
+sub _make_special_file_UNIX {
+    # $file is the last component of $entry->{name}
+    my ($entry, $file) = @_;
+
+    if ($entry->{type} == SYMLINK) {
+	symlink $entry->{linkname}, $file or
+	    $^W && carp ("Making symbolic link from ", $entry->{linkname}, 
+			 " to ", $entry->{name}, ", failed.\n");
+    }
+    elsif ($entry->{type} == HARDLINK) {
+	link $entry->{linkname}, $file or
+	    $^W && carp ("Hard linking ", $entry->{linkname}, 
+			 " to ", $entry->{name}, ", failed.\n");
+    }
+    elsif ($entry->{type} == FIFO) {
+	system("mknod","$file","p") or
+	    $^W && carp "Making fifo ", $entry->{name}, ", failed.\n";
+    }
+    elsif ($entry->{type} == BLOCKDEV) {
+	system("mknod","$file","b",$entry->{devmajor},$entry->{devminor}) or
+	    $^W && carp ("Making block device ", $entry->{name},
+			 " (maj=", $entry->{devmajor}, 
+			 ", min=", $entry->{devminor}, "), failed.\n");
+    }
+    elsif ($entry->{type} == CHARDEV) {
+	system("mknod", "$file", "c", $entry->{devmajor}, $entry->{devminor}) or
+	    $^W && carp ("Making block device ", $entry->{name}, 
+			 " (maj=", $entry->{devmajor}, 
+			 " ,min=", $entry->{devminor}, "), failed.\n");
+    }
+}
+
+sub _make_special_file_Win32 {
+    # $file is the last component of $entry->{name}
+    my ($entry, $file) = @_;
+
+    if ($entry->{type} == SYMLINK) {
+	$^W && carp ("Making symbolic link from ", $entry->{linkname}, 
+		     " to ", $entry->{name}, ", failed.\n");
+    }
+    elsif ($entry->{type} == HARDLINK) {
+	link $entry->{linkname}, $file or
+	    $^W && carp ("Making hard link from ", $entry->{linkname}, 
+			 " to ", $entry->{name}, ", failed.\n");
+    }
+    elsif ($entry->{type} == FIFO) {
+	$^W && carp "Making fifo ", $entry->{name}, ", failed.\n";
+    }
+    elsif ($entry->{type} == BLOCKDEV) {
+	$^W && carp ("Making block device ", $entry->{name},
+		     " (maj=", $entry->{devmajor}, 
+		     ", min=", $entry->{devminor}, "), failed.\n");
+    }
+    elsif ($entry->{type} == CHARDEV) {
+	$^W && carp ("Making block device ", $entry->{name},
+		     " (maj=", $entry->{devmajor}, 
+		     " ,min=", $entry->{devminor}, "), failed.\n");
+    }
+}
+
+*_make_special_file = $^O eq "MSWin32" ? 
+    \&_make_special_file_Win32 : \&_make_special_file_UNIX;
+
+sub _munge_file {
+#
+#  Mac path to the Unix like equivalent to be used in tar archives
+#
+    my $inpath = $_[0];
+#
+#  If there are no :'s in the name at all, assume it's a single item in the
+#  current directory.  Return it, changing any / in the name into :
+#
+    if ($inpath !~ m,:,) {
+	$inpath =~ s,/,:,g;
+	return $inpath;
+    }
+#
+#  If we now split on :, there will be just as many nulls in the list as
+#  there should be up requests, except if it begins with a :, where there
+#  will be one extra.
+#
+    my @names = split (/:/, $inpath);
+    shift (@names)
+	if ($names[0] eq "");
+    my @outname = ();
+#
+#  Work from the end.
+#
+    my $i;
+    for ($i = $#names; $i >= 0; --$i) {
+	if ($names[$i] eq "") {
+	    unshift (@outname, "..");
+	} 
+	else {
+	    $names[$i] =~ s,/,:,g;
+	    unshift (@outname, $names[$i]);
+	}
+    }
+    my $netpath = join ("/", @outname);
+    $netpath = $netpath . "/" if ($inpath =~ /:$/);
+    if ($inpath !~ m,^:,) {
+	return "/".$netpath;
+    } 
+    else {
+	return $netpath;
+    }
+}
+
+sub _get_handle {
+    my ($fh, $flags, $mode);
+
+    sysseek ($_[0], 0, 0)
+	or goto &_drat;
+
+    if ($^O eq "MSWin32") {
+	$fh = $_[0];
+    }
+    else {
+	$fh = fcntl ($_[0], F_DUPFD, 0)
+	    or goto &_drat;
+    }
+    if ($compression && (@_ < 2 || $_[1] != 0)) {
+	$mode = $#_ ? (int($_[1]) > 1 ?
+			  "wb".int($_[1]) : "wb") : "rb";
+
+	$fh = Compress::Zlib::gzdopen_ ($fh, $mode, 0)
+	    or &_drat;
+    }
+    else {
+	$flags = fcntl ($_[0], F_GETFL, 0) & (O_RDONLY | O_WRONLY | O_RDWR);
+	$mode = ($flags == O_WRONLY) ? ">&=$fh" : 
+	    ($flags == O_RDONLY) ? "<&=$fh" : "+>&=$fh";
+	$fh = gensym;
+	open ($fh, $mode)
+	  or goto &_drat;
+
+	$fh = bless *{$fh}{IO}, "Archive::Tar::_io";
+	binmode $fh
+	    or goto &_drat;
+    }
+
+    return $fh;
+}
+
+sub _read_tar {
+    my ($file, $seekable, $extract) = @_;
+    my $tarfile = [];
+    my ($head, $offset, $size);
+
+    $file->gzread ($head, $tar_header_length)
+	or goto &_drat;
+
+    if (substr ($head, 0, 2) =~ /$gzip_magic_number/o) {
+	$error =
+	    "Compression not available\n";
+	return undef;
+    }
+
+    $offset = $tar_header_length
+	if $seekable;
+
+ READLOOP:
+    while (length ($head) == $tar_header_length) {
+	my ($name,		# string
+	    $mode,		# octal number
+	    $uid,		# octal number
+	    $gid,		# octal number
+	    $size,		# octal number
+	    $mtime,		# octal number
+	    $chksum,		# octal number
+	    $type,		# character
+	    $linkname,		# string
+	    $magic,		# string
+	    $version,		# two bytes
+	    $uname,		# string
+	    $gname,		# string
+	    $devmajor,		# octal number
+	    $devminor,		# octal number
+	    $prefix) = unpack ($tar_unpack_header, $head);
+	my ($data, $block, $entry);
+
+	$mode = oct $mode;
+	$uid = oct $uid;
+	$gid = oct $gid;
+	$size = oct $size;
+	$mtime = oct $mtime;
+	$chksum = oct $chksum;
+	$devmajor = oct $devmajor;
+	$devminor = oct $devminor;
+	$name = $prefix."/".$name if $prefix;
+	$prefix = "";
+	# some broken tar-s don't set the type for directories
+	# so we ass_u_me a directory if the name ends in slash
+	$type = DIR
+	    if $name =~ m|/$| and $type == FILE;
+
+	last READLOOP if $head eq "\0" x 512; # End of archive
+	# Apparently this should really be two blocks of 512 zeroes,
+	# but GNU tar sometimes gets it wrong. See comment in the
+	# source code (tar.c) to GNU cpio.
+
+	substr ($head, 148, 8) = "        ";
+	if (unpack ("%16C*", $head) != $chksum) {
+	   warn "$name: checksum error.\n";
+	}
+
+	unless ($extract || $type != FILE) {
+	    # Always read in full 512 byte blocks
+	    $block = $size & 0x01ff ? ($size & ~0x01ff) + 512 : $size;
+	    if ($seekable) {
+		while ($block > 4096) {
+		    $file->gzread ($data, 4096)
+			or goto &_drat;
+		    $block -= 4096;
+		}
+		$file->gzread ($data, $block)
+		    or goto &_drat
+			if ($block);
+
+		# Ignore everything we've just read.
+		undef $data;
+	    } else {
+		if ($file->gzread ($data, $block) < $block) {
+		    $error = "Read error on tarfile.";
+		    return undef;
+		}
+
+		# Throw away any trailing garbage
+		substr ($data, $size) = "";
+	    }
+	}
+
+	# Guard against tarfiles with garbage at the end
+	last READLOOP if $name eq ''; 
+
+	$entry = {name => $name,		    
+		  mode => $mode,
+		  uid => $uid,
+		  gid => $gid,
+		  size => $size,
+		  mtime => $mtime,
+		  chksum => $chksum,
+		  type => $type,
+		  linkname => $linkname,
+		  magic => $magic,
+		  version => $version,
+		  uname => $uname,
+		  gname => $gname,
+		  devmajor => $devmajor,
+		  devminor => $devminor,
+		  prefix => $prefix,
+		  offset => $offset,
+		  data => $data};
+
+	if ($extract) {
+	    _extract_file ($entry, $file);
+	    $file->gzread ($head, 512 - ($size & 0x1ff)) 
+		or goto &_drat
+		    if ($size & 0x1ff && $type == FILE);
+	}
+	else {
+	    push @$tarfile, $entry;
+	}
+
+	if ($seekable) {
+	    $offset += $tar_header_length;
+	    $offset += ($size & 0x01ff) ? ($size & ~0x01ff) + 512 : $size
+		if $type == FILE;
+	}
+	$file->gzread ($head, $tar_header_length) 
+	    or goto &_drat;
+    }
+
+    $file->gzclose ()
+	unless $seekable;
+
+    return $tarfile
+	unless $extract;
+}
+
+sub _format_tar_entry {
+    my ($ref) = shift;
+    my ($tmp,$file,$prefix,$pos);
+
+    $file = $ref->{name};
+    if (length ($file) > 99) {
+	$pos = index $file, "/", (length ($file) - 100);
+	next
+	    if $pos == -1;	# Filename longer than 100 chars!
+
+	$prefix = substr $file,0,$pos;
+	$file = substr $file,$pos+1;
+	substr ($prefix, 0, -155) = ""
+	    if length($prefix)>154;
+    }
+    else {
+	$prefix="";
+    }
+
+    $tmp = pack ($tar_pack_header,
+		 $file,
+		 sprintf("%06o ",$ref->{mode}),
+		 sprintf("%06o ",$ref->{uid}),
+		 sprintf("%06o ",$ref->{gid}),
+		 sprintf("%11o ",$ref->{size}),
+		 sprintf("%11o ",$ref->{mtime}),
+		 "",		#checksum field - space padded by pack("A8")
+		 $ref->{type},
+		 $ref->{linkname},
+		 $ref->{magic},
+		 $ref->{version} || '00',
+		 $ref->{uname},
+		 $ref->{gname},
+		 sprintf("%6o ",$ref->{devmajor}),
+		 sprintf("%6o ",$ref->{devminor}),
+		 $prefix);
+    substr($tmp,148,7) = sprintf("%6o\0", unpack("%16C*",$tmp));
+
+    return $tmp;
+}
+
+sub _format_tar_file {
+    my @tarfile = @_;
+    my $file = "";
+
+    foreach (@tarfile) {
+	$file .= _format_tar_entry $_;
+	$file .= $_->{data};
+	$file .= "\0" x (512 - ($_->{size} & 0x1ff))
+	    if ($_->{size} & 0x1ff);
+    }
+    $file .= "\0" x 1024;
+
+    return $file;
+}
+
+sub _write_tar {
+    my $file = shift;
+    my $entry;
+
+    foreach $entry ((ref ($_[0]) eq 'ARRAY') ? @{$_[0]} : @_) {
+	next
+	    unless (ref ($entry) eq 'HASH');
+
+	my $src;
+        if ($^O eq "MacOS") {  #convert back from Unix to Mac path
+            my @parts = split(/\//, $entry->{name});
+
+            $src = $parts[0] ? ":" : "";
+            foreach (@parts) {
+		next if !$_ || $_ eq ".";  
+                s,:,/,g;
+
+		$_ = ":"
+		    if ($_ eq "..");
+
+		$src .= ($src =~ /:$/) ? $_ : ":$_";
+	    }
+        }
+	else {
+            $src = $entry->{name};
+        }
+	sysopen (FH, $src, O_RDONLY)
+	    && binmode (FH)
+		or next
+		    unless $entry->{type} != FILE || $entry->{data};
+
+	$file->gzwrite (_format_tar_entry ($entry))
+	    or goto &_drat;
+
+	if ($entry->{type} == FILE) {
+	    if ($entry->{data}) {
+		$file->gzwrite ($entry->{data})
+		    or goto &_drat;
+	    }
+	    else {
+		my $size = $entry->{size};
+		my $data;
+		while ($size >= 4096) {
+		    sysread (FH, $data, 4096)
+			&& $file->gzwrite ($data)
+			    or goto &_drat;
+		    $size -= 4096;
+		}
+		sysread (FH, $data, $size)
+		    && $file->gzwrite ($data)
+			or goto &_drat
+			    if $size;
+		close FH;
+	    }
+	    $file->gzwrite ("\0" x (512 - ($entry->{size} & 511)))
+		or goto &_drat
+		    if ($entry->{size} & 511);
+	}
+    }
+
+    $file->gzwrite ("\0" x 1024)
+	and !$file->gzclose ()
+	    or goto &_drat;
+}
+
+sub _add_file {
+    my $file = shift;
+    my ($mode,$nlnk,$uid,$gid,$rdev,$size,$mtime,$type,$linkname);
+
+    if (($mode,$nlnk,$uid,$gid,$rdev,$size,$mtime) = (lstat $file)[2..7,9]) {
+	$linkname = "";
+	$type = filetype ($file);
+
+	$linkname = readlink $file
+	    if ($type == SYMLINK) && $symlinks;
+
+	$file = _munge_file ($file)
+	    if ($^O eq "MacOS");
+
+	return +{name => $file,		    
+		 mode => $mode,
+		 uid => $uid,
+		 gid => $gid,
+		 size => $size,
+		 mtime => (($mtime - $time_offset) | 0),
+		 chksum => "      ",
+		 type => $type, 
+		 linkname => $linkname,
+		 magic => "ustar",
+		 version => "00",
+		 # WinNT protection
+		 uname => ($fake_getpwuid || scalar getpwuid($uid)),
+		 gname => ($fake_getgrgid || scalar getgrgid ($gid)),
+		 devmajor => 0, # We don't handle this yet
+		 devminor => 0, # We don't handle this yet
+		 prefix => "",
+		 data => undef,
+		};
+    }
+}
+
+sub _extract_file {
+    my ($entry, $handle) = @_;
+    my ($file, $cwd, @path);
+
+    # For the moment, we assume that all paths in tarfiles
+    # are given according to Unix standards.
+    # Which they *are*, according to the tar format spec!
+    @path = split(/\//,$entry->{name});
+    $path[0] = '/' unless defined $path[0]; # catch absolute paths
+    $file = pop @path;
+    $file =~ s,:,/,g
+	if $^O eq "MacOS";
+    $cwd = cwd
+	if @path;
+    foreach (@path) {
+	if ($^O eq "MacOS") {
+	    s,:,/,g;
+	    $_ = "::" if $_ eq "..";
+	    $_ = ":" if $_ eq ".";
+	}
+	if (-e $_ && ! -d _) {
+	    $^W && carp "$_ exists but is not a directory!\n";
+	    next;
+	}
+	mkdir $_, 0777 unless -d _;
+	chdir $_;
+    }
+
+    if ($entry->{type} == FILE) {	# Ordinary file
+	sysopen (FH, $file, O_WRONLY|O_CREAT|O_TRUNC)
+	    and binmode FH
+		or goto &_drat;
+
+	if ($handle) {
+	    my $size = $entry->{size};
+	    my $data;
+	    while ($size > 4096) {
+		$handle->gzread ($data, 4096)
+		    and syswrite (FH, $data, length $data)
+			or goto &_drat;
+		$size -= 4096;
+	    }
+	    $handle->gzread ($data, $size)
+		and syswrite (FH, $data, length $data)
+		    or goto &_drat
+			if ($size);
+	}
+	else {
+	    syswrite FH, $entry->{data}, $entry->{size}
+		or goto &_drat
+	}
+	close FH
+	    or goto &_drat
+    }
+    elsif ($entry->{type} == DIR) { # Directory
+	goto &_drat
+	    if (-e $file && ! -d $file);
+
+	mkdir $file,0777
+	    unless -d $file;
+    }
+    elsif ($entry->{type} == UNKNOWN) {
+	$error = "unknown file type: $_->{type}";
+	return undef;
+    }
+    else {
+	_make_special_file ($entry, $file);
+    }
+    utime time, $entry->{mtime} + $time_offset, $file;
+
+    # We are root, and chown exists
+    chown $entry->{uid}, $entry->{gid}, $file
+	if ($> == 0 and $^O ne "MacOS" and $^O ne "MSWin32");
+
+    # chmod is done last, in case it makes file readonly
+    # (this accomodates DOSish OSes)
+    chmod $entry->{mode}, $file;
+    chdir $cwd
+	if @path;
+}
+
+###
+### Methods
+###
+
+##
+## Class methods
+##
+
+# Perfom the equivalent of ->new()->add_files(), ->write() without the
+# overhead of maintaining an Archive::Tar object.
+sub create_archive {
+    my ($handle, $file, $compress) = splice (@_, 0, 3);
+
+    if ($compress && !$compression) {
+	$error = "Compression not available.\n";
+	return undef;
+    }
+
+    $handle = gensym;
+    open $handle, ref ($file) ? ">&". fileno ($file) : ">" . $file
+	and binmode ($handle)
+	    or goto &_drat;
+
+    _write_tar (_get_handle ($handle, int ($compress)),
+		map {_add_file ($_)} @_);
+}
+
+# Perfom the equivalent of ->new()->list_files() without the overhead
+# of maintaining an Archive::Tar object.
+sub list_archive {
+    my ($handle, $file, $fields) = @_;
+
+    $handle = gensym;
+    open $handle, ref ($file) ? "<&". fileno ($file) : "<" . $file
+	and binmode ($handle)
+	    or goto &_drat;
+
+    my $data = _read_tar (_get_handle ($handle), 1);
+
+    return map {my %h; @h{@$fields} = @$_{@$fields}; \%h} @$data
+        if (ref $fields eq 'ARRAY'
+	    && (@$fields > 1 || $fields->[0] ne 'name'));
+
+    return map {$_->{name}} @$data;
+}
+
+# Perform the equivalen of ->new()->extract() without the overhead of
+# maintaining an Archive::Tar object.
+sub extract_archive {
+    my ($handle, $file) = @_;
+
+    $handle = gensym;
+    open $handle, ref ($file) ? "<&". fileno ($file) : "<" . $file
+	and binmode ($handle)
+	    or goto &_drat;
+
+    _read_tar (_get_handle ($handle), 0, 1);
+}
+
+# Constructor. Reads tarfile if given an argument that's the name of a
+# readable file.
+sub new {
+    my ($class, $file) = @_;
+
+    my $self = bless {}, $class;
+
+    $self->read ($file)
+      if defined $file;
+
+    return $self;
+}
+
+
+# Read a tarfile. Returns number of component files.
+sub read {
+    my ($self, $file) = @_;
+
+    $self->{_data} = [];
+
+    $self->{_handle} = gensym;
+    open $self->{_handle}, ref ($file) ? "<&". fileno ($file) : "<" . $file
+	and binmode ($self->{_handle})
+	    or goto &_drat;
+
+    $self->{_data} = _read_tar (_get_handle ($self->{_handle}), 
+				  sysseek $self->{_handle}, 0, 1);
+    return scalar @{$self->{_data}};
+}
+
+# Write a tar archive to file
+sub write {
+    my ($self, $file, $compress) = @_;
+
+    return _format_tar_file (@{$self->{_data}})
+	unless (@_ > 1);
+
+    my $handle = gensym;
+    open $handle, ref ($file) ? ">&". fileno ($file) : ">" . $file
+	and binmode ($handle)
+	    or goto &_drat;
+
+    if ($compress && !$compression) {
+	$error = "Compression not available.\n";
+	return undef;
+    }
+
+    _write_tar (_get_handle ($handle, $compress || 0), $self->{_data});
+}
+
+# Add files to the archive. Returns number of successfully added files.
+sub add_files {
+    my $self = shift;
+    my ($counter, $file, $entry);
+
+    foreach $file (@_) {
+	if ($entry = _add_file ($file)) {
+	    push (@{$self->{'_data'}}, $entry);
+	    ++$counter;
+	}
+    }
+
+    return $counter;
+}
+
+# Add data as a file
+sub add_data {
+    my ($self, $file, $data, $opt) = @_;
+    my $ref = {};
+    my ($key);
+
+    if($^O eq "MacOS") {
+	$file = _munge_file($file);
+    }
+    $ref->{'data'} = $data;
+    $ref->{name} = $file;
+    $ref->{mode} = 0666 & (0777 - umask);
+    $ref->{uid} = $>;
+    $ref->{gid} = (split(/ /,$)))[0]; # Yuck
+    $ref->{size} = length $data;
+    $ref->{mtime} = ((time - $time_offset) | 0),
+    $ref->{chksum} = "      ";	# Utterly pointless
+    $ref->{type} = FILE;		# Ordinary file
+    $ref->{linkname} = "";
+    $ref->{magic} = "ustar";
+    $ref->{version} = "00";
+    # WinNT protection
+    $ref->{uname} = $fake_getpwuid || getpwuid ($>);
+    $ref->{gname} = $fake_getgrgid || getgrgid ($ref->{gid});
+    $ref->{devmajor} = 0;
+    $ref->{devminor} = 0;
+    $ref->{prefix} = "";
+
+    if ($opt) {
+	foreach $key (keys %$opt) {
+	    $ref->{$key} = $opt->{$key}
+	}
+    }
+
+    push (@{$self->{'_data'}}, $ref);
+    return 1;
+}
+
+sub rename {
+    my ($self) = shift;
+    my $entry;
+
+    foreach $entry (@{$self->{_data}}) {
+	@{$self->{_data}} = grep {$_->{name} ne $entry} @{$self->{'_data'}};
+    }
+    return $self;
+}
+
+sub remove {
+    my ($self) = shift;
+    my $entry;
+
+    foreach $entry (@_) {
+	@{$self->{_data}} = grep {$_->{name} ne $entry} @{$self->{'_data'}};
+    }
+    return $self;
+}
+
+# Get the content of a file
+sub get_content {
+    my ($self, $file) = @_;
+    my ($entry, $data);
+
+    foreach $entry (@{$self->{_data}}) {
+	next
+	    unless $entry->{name} eq $file;
+
+	return $entry->{data}
+	    unless $entry->{offset};
+
+	my $handle = _get_handle ($self->{_handle});
+	$handle->gzseek ($entry->{offset}, 0)
+	    or goto &_drat;
+
+	$handle->gzread ($data, $entry->{size}) != -1
+	    or goto &_drat;
+
+	return $data;
+    }
+
+    return;
+}
+
+# Replace the content of a file
+sub replace_content {
+    my ($self, $file, $content) = @_;
+    my $entry;
+
+    foreach $entry (@{$self->{_data}}) {
+	next
+	    unless $entry->{name} eq $file;
+
+	$entry->{data} = $content;
+	$entry->{size} = length $content;
+	$entry->{offset} = undef;
+	return 1;
+    }
+}
+
+# Write a single (probably) file from the in-memory archive to disk
+sub extract {
+    my $self = shift;
+    my @files = @_;
+    my ($file, $entry);
+
+    @files = list_files ($self) unless @files;
+    foreach $entry (@{$self->{_data}}) {
+	my $cnt = 0;
+	foreach $file (@files) {
+	    ++$cnt, next
+		unless $entry->{name} eq $file;
+	    my $handle = $entry->{offset} && _get_handle ($self->{_handle});
+	    $handle->gzseek ($entry->{offset}, 0)
+		or goto &_drat
+		    if $handle;
+	    _extract_file ($entry, $handle);
+	    splice (@_, $cnt, 1);
+	    last;
+	}
+	last
+	    unless @_;
+    }
+    $self;
+}
+
+
+# Return a list names or attribute hashes for all files in the
+# in-memory archive.
+sub list_files {
+ my ($self, $fields) = @_;
+
+    return map {my %h; @h{@$fields} = @$_{@$fields}; \%h} @{$self->{'_data'}}
+    if (ref $fields eq 'ARRAY' && (@$fields > 1 || $fields->[0] ne 'name'));
+
+    return map {$_->{name}} @{$self->{'_data'}}
+}
+
+
+### Standard end of module :-)
+1;
+
+# 
+# Sub-package to hide I/O differences between compressed &
+# uncompressed archives.
+#
+# Yes, I could have used the IO::* class hierarchy here, but I'm
+# trying to minimise the necessity for non-core modules on perl5
+# environments < 5.004
+
+package Archive::Tar::_io;
+
+sub gzseek {
+    sysseek $_[0], $_[1], $_[2];
+}
+
+sub gzread {
+    sysread $_[0], $_[1], $_[2];
+}
+
+sub gzwrite {
+    syswrite $_[0], $_[1], length $_[1];
+}
+
+sub gzclose {
+    !close $_[0];
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Tar - module for manipulation of tar archives.
+
+=head1 SYNOPSIS
+
+  use Archive::Tar;
+
+  Archive::Tar->create_archive ("my.tar.gz", 9, "/this/file", "/that/file");
+  print join "\n", Archive::Tar->list_archive ("my.tar.gz"), "";
+
+  $tar = Archive::Tar->new();
+  $tar->read("origin.tar.gz",1);
+  $tar->add_files("file/foo.c", "file/bar.c");
+  $tar->add_data("file/baz.c","This is the file contents");
+  $tar->write("files.tar");
+
+=head1 DESCRIPTION
+
+This is a module for the handling of tar archives. 
+
+Archive::Tar provides an object oriented mechanism for handling tar
+files.  It provides class methods for quick and easy files handling
+while also allowing for the creation of tar file objects for custom
+manipulation.  If you have the Compress::Zlib module installed,
+Archive::Tar will also support compressed or gzipped tar files.
+
+=head2 Class Methods
+
+The class methods should be sufficient for most tar file interaction.
+
+=over 4
+
+=item create_archive ($file, $compression, @filelist)
+
+Creates a tar file from the list of files provided.  The first
+argument can either be the name of the tar file to create or a
+reference to an open file handle (e.g. a GLOB reference).
+
+The second argument specifies the level of compression to be used, if
+any.  Compression of tar files requires the installation of the
+Compress::Zlib module.  Specific levels or compression may be
+requested by passing a value between 2 and 9 as the second argument.
+Any other value evaluating as true will result in the default
+compression level being used.
+
+The remaining arguments list the files to be included in the tar file.
+These files must all exist.  Any files which don\'t exist or can\'t be
+read are silently ignored.
+
+If the archive creation fails for any reason, C<create_archive> will
+return undef.  Please use the C<error> method to find the cause of the
+failure.
+
+=item list_archive ($file, ['property', 'property',...])
+
+=item list_archive ($file)
+
+Returns a list of the names of all the files in the archive.  The
+first argument can either be the name of the tar file to create or a
+reference to an open file handle (e.g. a GLOB reference).
+
+If C<list_archive()> is passed an array reference as its second
+argument it returns a list of hash references containing the requested
+properties of each file.  The following list of properties is
+supported: name, size, mtime (last modified date), mode, uid, gid,
+linkname, uname, gname, devmajor, devminor, prefix.
+
+Passing an array reference containing only one element, 'name', is
+special cased to return a list of names rather than a list of hash
+references.
+
+=item extract_archive ($file)
+
+Extracts the contents of the tar file.  The first argument can either
+be the name of the tar file to create or a reference to an open file
+handle (e.g. a GLOB reference).  All relative paths in the tar file will
+be created underneath the current working directory.
+
+If the archive extraction fails for any reason, C<extract_archive>
+will return undef.  Please use the C<error> method to find the cause
+of the failure.
+
+=item new ($file)
+
+=item new ()
+
+Returns a new Tar object. If given any arguments, C<new()> calls the
+C<read()> method automatically, parsing on the arguments provided L<read()>.
+
+If C<new()> is invoked with arguments and the read method fails for
+any reason, C<new()> returns undef.
+
+=back
+
+=head2 Instance Methods
+
+=over 4
+
+=item read ($ref, $compressed)
+
+Read the given tar file into memory. The first argument can either be
+the name of a file or a reference to an already open file handle (e.g. a
+GLOB reference).  The second argument indicates whether the file
+referenced by the first argument is compressed.
+
+The second argument is now optional as Archive::Tar will automatically
+detect compressed archives.
+
+The C<read> will I<replace> any previous content in C<$tar>!
+
+=item add_files(@filenamelist)
+
+Takes a list of filenames and adds them to the in-memory archive.  On
+MacOS, the path to the file is automatically converted to a Unix like
+equivalent for use in the archive, and the file\'s modification time
+is converted from the MacOS epoch to the Unix epoch.  So tar archives
+created on MacOS with B<Archive::Tar> can be read both with I<tar> on
+Unix and applications like I<suntar> or I<Stuffit Expander> on MacOS.
+Be aware that the file\'s type/creator and resource fork will be lost,
+which is usually what you want in cross-platform archives.
+
+=item add_data ($filename, $data, $opthashref)
+
+Takes a filename, a scalar full of data and optionally a reference to
+a hash with specific options. Will add a file to the in-memory
+archive, with name C<$filename> and content C<$data>. Specific
+properties can be set using C<$opthashref>, The following list of
+properties is supported: name, size, mtime (last modified date), mode,
+uid, gid, linkname, uname, gname, devmajor, devminor, prefix.  (On
+MacOS, the file\'s path and modification times are converted to Unix
+equivalents.)
+
+=item remove (@filenamelist)
+
+Removes any entries with names matching any of the given filenames
+from the in-memory archive. String comparisons are done with C<eq>.
+
+=item write ($file, $compressed)
+
+Write the in-memory archive to disk.  The first argument can either be
+the name of a file or a reference to an already open file handle (be a
+GLOB reference).  If the second argument is true, the module will use
+Compress::Zlib to write the file in a compressed format.  If
+Compress:Zlib is not available, the C<write> method will fail.
+Specific levels of compression can be chosen by passing the values 2
+through 9 as the second parameter.
+
+If no arguments are given, C<write> returns the entire formatted
+archive as a string, which could be useful if you\'d like to stuff the
+archive into a socket or a pipe to gzip or something.  This
+functionality may be deprecated later, however, as you can also do
+this using a GLOB reference for the first argument.
+
+=item extract(@filenames)
+
+Write files whose names are equivalent to any of the names in
+C<@filenames> to disk, creating subdirectories as necessary. This
+might not work too well under VMS.  Under MacPerl, the file\'s
+modification time will be converted to the MacOS zero of time, and
+appropriate conversions will be done to the path.  However, the length
+of each element of the path is not inspected to see whether it\'s
+longer than MacOS currently allows (32 characters).
+
+If C<extract> is called without a list of file names, the entire
+contents of the archive are extracted.
+
+=item list_files(['property', 'property',...])
+
+=item list_files()
+
+Returns a list of the names of all the files in the archive.
+
+If C<list_files()> is passed an array reference as its first argument
+it returns a list of hash references containing the requested
+properties of each file.  The following list of properties is
+supported: name, size, mtime (last modified date), mode, uid, gid,
+linkname, uname, gname, devmajor, devminor, prefix.
+
+Passing an array reference containing only one element, 'name', is
+special cased to return a list of names rather than a list of hash
+references.
+
+=item get_content($file)
+
+Return the content of the named file.
+
+=item replace_content($file,$content)
+
+Make the string $content be the content for the file named $file.
+
+=back
+
+=head1 CHANGES
+
+=over 4
+
+=item Version 0.20
+
+Added class methods for creation, extraction and listing of tar files.
+No longer maintain a complete copy of the tar file in memory.  Removed
+the C<data()> method.
+
+=item Version 0.10
+
+Numerous changes. Brought source under CVS.  All changes now recorded
+in ChangeLog file in distribution.
+
+=item Version 0.08
+
+New developer/maintainer.  Calle has carpal-tunnel syndrome and cannot
+type a great deal. Get better as soon as you can, Calle.
+
+Added proper support for MacOS.  Thanks to Paul J. Schinder
+<schinder@leprss.gsfc.nasa.gov>.
+
+=item Version 0.071
+
+Minor release.
+
+Arrange to chmod() at the very end in case it makes the file read only.
+Win32 is actually picky about that.
+
+SunOS 4.x tar makes tarfiles that contain directory entries that
+don\'t have typeflag set properly.  We use the trailing slash to
+recognise directories in such tar files.
+
+=item Version 0.07
+
+Fixed (hopefully) broken portability to MacOS, reported by Paul J.
+Schinder at Goddard Space Flight Center.
+
+Fixed two bugs with symlink handling, reported in excellent detail by
+an admin at teleport.com called Chris.
+
+Primitive tar program (called ptar) included with distribution. Usage
+should be pretty obvious if you\'ve used a normal tar program.
+
+Added methods get_content and replace_content.
+
+Added support for paths longer than 100 characters, according to
+POSIX. This is compatible with just about everything except GNU tar.
+Way to go, GNU tar (use a better tar, or GNU cpio).
+
+NOTE: When adding files to an archive, files with basenames longer
+      than 100 characters will be silently ignored. If the prefix part
+      of a path is longer than 155 characters, only the last 155
+      characters will be stored.
+
+=item Version 0.06
+
+Added list_files() method, as requested by Michael Wiedman.
+
+Fixed a couple of dysfunctions when run under Windows NT. Michael
+Wiedmann reported the bugs.
+
+Changed the documentation to reflect reality a bit better.
+
+Fixed bug in format_tar_entry. Bug reported by Michael Schilli.
+
+=item Version 0.05
+
+Quoted lots of barewords to make C<use strict;> stop complaining under
+perl version 5.003.
+
+Ties to L<Compress::Zlib> put in. Will warn if it isn\'t available.
+
+$tar->write() with no argument now returns the formatted archive.
+
+=item Version 0.04
+
+Made changes to write_tar so that Solaris tar likes the resulting
+archives better.
+
+Protected the calls to readlink() and symlink(). AFAIK this module
+should now run just fine on Windows NT.
+
+Add method to write a single entry to disk (extract)
+
+Added method to add entries entirely from scratch (add_data)
+
+Changed name of add() to add_file()
+
+All calls to croak() removed and replaced with returning undef and
+setting Tar::error.
+
+Better handling of tarfiles with garbage at the end.
+
+=head1 COPYRIGHT
+
+Archive::Tar is Copyright 1997 Calle Dybedahl. All rights reserved.
+                Copyright 1998 Stephen Zander. All rights reserved.
+
+It is currently developed by Stephen Zander <gibreel@pobox.com>
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Archive/Zip.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,3351 @@
+#! perl -w
+# $Revision: 1.39 $
+
+# Copyright (c) 2000 Ned Konz. All rights reserved.  This program is free
+# software; you can redistribute it and/or modify it under the same terms
+# as Perl itself.
+
+=head1 NAME
+
+Archive::Zip - Provide an interface to ZIP archive files.
+
+=head1 SYNOPSIS
+
+ use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
+
+ my $zip = Archive::Zip->new();
+ my $member = $zip->addDirectory( 'dirname/' );
+ $member = $zip->addString( 'This is a test', 'stringMember.txt' );
+ $member->desiredCompressionMethod( COMPRESSION_DEFLATED );
+ $member = $zip->addFile( 'xyz.pl', 'AnotherName.pl' );
+
+ die 'write error' if $zip->writeToFileNamed( 'someZip.zip' ) != AZ_OK;
+
+ $zip = Archive::Zip->new();
+ die 'read error' if $zip->read( 'someZip.zip' ) != AZ_OK;
+
+ $member = $zip->memberNamed( 'stringMember.txt' );
+ $member->desiredCompressionMethod( COMPRESSION_STORED );
+
+ die 'write error' if $zip->writeToFileNamed( 'someOtherZip.zip' ) != AZ_OK;
+
+=head1 DESCRIPTION
+
+The Archive::Zip module allows a Perl program to create,
+manipulate, read, and write Zip archive files.
+
+Zip archives can be created, or you can read from existing zip files.
+Once created, they can be written to files, streams, or strings.
+
+Members can be added, removed, extracted, replaced, rearranged,
+and enumerated.
+They can also be renamed or have their dates, comments,
+or other attributes queried or modified.
+Their data can be compressed or uncompressed as needed.
+Members can be created from members in existing Zip files,
+or from existing directories, files, or strings.
+
+This module uses the L<Compress::Zlib|Compress::Zlib> library
+to read and write the compressed streams inside the files.
+
+=head1 EXPORTS
+
+=over 4
+
+=item :CONSTANTS
+
+Exports the following constants:
+
+FA_MSDOS FA_UNIX GPBF_ENCRYPTED_MASK
+GPBF_DEFLATING_COMPRESSION_MASK GPBF_HAS_DATA_DESCRIPTOR_MASK
+COMPRESSION_STORED COMPRESSION_DEFLATED
+IFA_TEXT_FILE_MASK IFA_TEXT_FILE IFA_BINARY_FILE
+COMPRESSION_LEVEL_NONE
+COMPRESSION_LEVEL_DEFAULT
+COMPRESSION_LEVEL_FASTEST
+COMPRESSION_LEVEL_BEST_COMPRESSION
+
+=item :MISC_CONSTANTS
+
+Exports the following constants (only necessary for extending the module):
+
+FA_AMIGA FA_VAX_VMS FA_VM_CMS FA_ATARI_ST
+FA_OS2_HPFS FA_MACINTOSH FA_Z_SYSTEM FA_CPM FA_WINDOWS_NTFS
+GPBF_IMPLODING_8K_SLIDING_DICTIONARY_MASK
+GPBF_IMPLODING_3_SHANNON_FANO_TREES_MASK
+GPBF_IS_COMPRESSED_PATCHED_DATA_MASK COMPRESSION_SHRUNK
+DEFLATING_COMPRESSION_NORMAL DEFLATING_COMPRESSION_MAXIMUM
+DEFLATING_COMPRESSION_FAST DEFLATING_COMPRESSION_SUPER_FAST
+COMPRESSION_REDUCED_1 COMPRESSION_REDUCED_2 COMPRESSION_REDUCED_3
+COMPRESSION_REDUCED_4 COMPRESSION_IMPLODED COMPRESSION_TOKENIZED
+COMPRESSION_DEFLATED_ENHANCED
+COMPRESSION_PKWARE_DATA_COMPRESSION_LIBRARY_IMPLODED
+
+=item :ERROR_CODES
+
+Explained below. Returned from most methods.
+
+AZ_OK AZ_STREAM_END AZ_ERROR AZ_FORMAT_ERROR AZ_IO_ERROR
+
+=back
+
+=head1 OBJECT MODEL
+
+=head2 Inheritance
+
+ Exporter
+    Archive::Zip                            Common base class, has defs.
+        Archive::Zip::Archive               A Zip archive.
+        Archive::Zip::Member                Abstract superclass for all members.
+            Archive::Zip::StringMember      Member made from a string
+            Archive::Zip::FileMember        Member made from an external file
+                Archive::Zip::ZipFileMember Member that lives in a zip file
+                Archive::Zip::NewFileMember Member whose data is in a file
+            Archive::Zip::DirectoryMember   Member that is a directory
+
+=cut
+
+# ----------------------------------------------------------------------
+# class Archive::Zip
+# Note that the package Archive::Zip exists only for exporting and
+# sharing constants. Everything else is in another package
+# in this file.
+# Creation of a new Archive::Zip object actually creates a new object
+# of class Archive::Zip::Archive.
+# ----------------------------------------------------------------------
+
+package Archive::Zip;
+require 5.003_96;
+use strict;
+
+use Carp ();
+use IO::File ();
+use IO::Seekable ();
+use Compress::Zlib ();
+use POSIX qw(_exit);
+
+use vars qw( @ISA @EXPORT_OK %EXPORT_TAGS $VERSION $ChunkSize $ErrorHandler );
+
+if ($Compress::Zlib::VERSION < 1.06)
+{
+    if ($] < 5.006001)
+    {
+       print STDERR "Your current perl libraries are too old; please upgrade to Perl 5.6.1\n";
+    }
+    else
+    {
+       print STDERR "There is a problem with your perl run time environment.\n An old version of Zlib is in use,\n please check your perl installation (5.6.1 or later) and your perl libraries\n"; 
+    }
+    STDERR->flush;
+    POSIX:_exit(1);
+}
+
+# This is the size we'll try to read, write, and (de)compress.
+# You could set it to something different if you had lots of memory
+# and needed more speed.
+$ChunkSize = 32768;
+
+$ErrorHandler = \&Carp::carp;
+
+# BEGIN block is necessary here so that other modules can use the constants.
+BEGIN
+{
+	require Exporter;
+
+	$VERSION = "0.11";
+	@ISA = qw( Exporter );
+
+	my @ConstantNames = qw( FA_MSDOS FA_UNIX GPBF_ENCRYPTED_MASK
+	GPBF_DEFLATING_COMPRESSION_MASK GPBF_HAS_DATA_DESCRIPTOR_MASK
+	COMPRESSION_STORED COMPRESSION_DEFLATED COMPRESSION_LEVEL_NONE
+	COMPRESSION_LEVEL_DEFAULT COMPRESSION_LEVEL_FASTEST
+	COMPRESSION_LEVEL_BEST_COMPRESSION IFA_TEXT_FILE_MASK IFA_TEXT_FILE
+	IFA_BINARY_FILE );
+
+	my @MiscConstantNames = qw( FA_AMIGA FA_VAX_VMS FA_VM_CMS FA_ATARI_ST
+	FA_OS2_HPFS FA_MACINTOSH FA_Z_SYSTEM FA_CPM FA_WINDOWS_NTFS
+	GPBF_IMPLODING_8K_SLIDING_DICTIONARY_MASK
+	GPBF_IMPLODING_3_SHANNON_FANO_TREES_MASK
+	GPBF_IS_COMPRESSED_PATCHED_DATA_MASK COMPRESSION_SHRUNK
+	DEFLATING_COMPRESSION_NORMAL DEFLATING_COMPRESSION_MAXIMUM
+	DEFLATING_COMPRESSION_FAST DEFLATING_COMPRESSION_SUPER_FAST
+	COMPRESSION_REDUCED_1 COMPRESSION_REDUCED_2 COMPRESSION_REDUCED_3
+	COMPRESSION_REDUCED_4 COMPRESSION_IMPLODED COMPRESSION_TOKENIZED
+	COMPRESSION_DEFLATED_ENHANCED
+	COMPRESSION_PKWARE_DATA_COMPRESSION_LIBRARY_IMPLODED );
+
+	my @ErrorCodeNames = qw( AZ_OK AZ_STREAM_END AZ_ERROR AZ_FORMAT_ERROR
+	AZ_IO_ERROR );
+
+	my @PKZipConstantNames = qw( SIGNATURE_FORMAT SIGNATURE_LENGTH
+	LOCAL_FILE_HEADER_SIGNATURE LOCAL_FILE_HEADER_FORMAT
+	LOCAL_FILE_HEADER_LENGTH DATA_DESCRIPTOR_FORMAT DATA_DESCRIPTOR_LENGTH
+	CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE
+	CENTRAL_DIRECTORY_FILE_HEADER_FORMAT CENTRAL_DIRECTORY_FILE_HEADER_LENGTH
+	END_OF_CENTRAL_DIRECTORY_SIGNATURE
+	END_OF_CENTRAL_DIRECTORY_SIGNATURE_STRING END_OF_CENTRAL_DIRECTORY_FORMAT
+	END_OF_CENTRAL_DIRECTORY_LENGTH );
+
+	my @UtilityMethodNames = qw( _error _ioError _formatError
+		_subclassResponsibility _binmode _isSeekable _newFileHandle);
+
+	@EXPORT_OK = ( 'computeCRC32' );
+	%EXPORT_TAGS = ( 'CONSTANTS' => \@ConstantNames,
+			'MISC_CONSTANTS' => \@MiscConstantNames,
+			'ERROR_CODES' => \@ErrorCodeNames,
+			# The following two sets are for internal use only
+			'PKZIP_CONSTANTS' => \@PKZipConstantNames,
+			'UTILITY_METHODS' => \@UtilityMethodNames );
+
+	# Add all the constant names and error code names to @EXPORT_OK
+	Exporter::export_ok_tags( 'CONSTANTS', 'ERROR_CODES',
+		'PKZIP_CONSTANTS', 'UTILITY_METHODS', 'MISC_CONSTANTS' );
+}
+
+# ------------------------- begin exportable error codes -------------------
+
+=head1 ERROR CODES
+
+Many of the methods in Archive::Zip return error codes.
+These are implemented as inline subroutines, using the C<use constant> pragma.
+They can be imported into your namespace using the C<:CONSTANT>
+tag:
+
+    use Archive::Zip qw( :CONSTANTS );
+    ...
+    die "whoops!" if $zip->read( 'myfile.zip' ) != AZ_OK;
+
+=over 4
+
+=item AZ_OK (0)
+
+Everything is fine.
+
+=item AZ_STREAM_END (1)
+
+The read stream (or central directory) ended normally.
+
+=item AZ_ERROR (2)
+
+There was some generic kind of error.
+
+=item AZ_FORMAT_ERROR (3)
+
+There is a format error in a ZIP file being read.
+
+=item AZ_IO_ERROR (4)
+
+There was an IO error.
+
+=back
+
+=cut
+
+use constant AZ_OK			=> 0;
+use constant AZ_STREAM_END	=> 1;
+use constant AZ_ERROR		=> 2;
+use constant AZ_FORMAT_ERROR => 3;
+use constant AZ_IO_ERROR	=> 4;
+
+# ------------------------- end exportable error codes ---------------------
+# ------------------------- begin exportable constants ---------------------
+
+# File types
+# Values of Archive::Zip::Member->fileAttributeFormat()
+
+use constant FA_MSDOS		=> 0;
+use constant FA_UNIX		=> 3;
+
+# general-purpose bit flag masks
+# Found in Archive::Zip::Member->bitFlag()
+
+use constant GPBF_ENCRYPTED_MASK						=> 1 << 0;
+use constant GPBF_DEFLATING_COMPRESSION_MASK			=> 3 << 1;
+use constant GPBF_HAS_DATA_DESCRIPTOR_MASK				=> 1 << 3;
+
+# deflating compression types, if compressionMethod == COMPRESSION_DEFLATED
+# ( Archive::Zip::Member->bitFlag() & GPBF_DEFLATING_COMPRESSION_MASK )
+
+use constant DEFLATING_COMPRESSION_NORMAL		=> 0 << 1;
+use constant DEFLATING_COMPRESSION_MAXIMUM		=> 1 << 1;
+use constant DEFLATING_COMPRESSION_FAST			=> 2 << 1;
+use constant DEFLATING_COMPRESSION_SUPER_FAST	=> 3 << 1;
+
+# compression method
+
+=head1 COMPRESSION
+
+Archive::Zip allows each member of a ZIP file to be compressed (using
+the Deflate algorithm) or uncompressed. Other compression algorithms
+that some versions of ZIP have been able to produce are not supported.
+
+Each member has two compression methods: the one it's stored as (this
+is always COMPRESSION_STORED for string and external file members),
+and the one you desire for the member in the zip file.
+These can be different, of course, so you can make a zip member that
+is not compressed out of one that is, and vice versa.
+You can inquire about the current compression and set
+the desired compression method:
+
+    my $member = $zip->memberNamed( 'xyz.txt' );
+    $member->compressionMethod();    # return current compression
+    # set to read uncompressed
+    $member->desiredCompressionMethod( COMPRESSION_STORED );
+    # set to read compressed
+    $member->desiredCompressionMethod( COMPRESSION_DEFLATED );
+
+There are two different compression methods:
+
+=over 4
+
+=item COMPRESSION_STORED
+
+file is stored (no compression)
+
+=item COMPRESSION_DEFLATED
+
+file is Deflated
+
+=back
+
+=head2 Compression Levels
+
+If a member's desiredCompressionMethod is COMPRESSION_DEFLATED,
+you can choose different compression levels. This choice may
+affect the speed of compression and decompression, as well as
+the size of the compressed member data.
+
+    $member->desiredCompressionLevel( 9 );
+
+The levels given can be:
+
+=over 4
+
+=item 0 or COMPRESSION_LEVEL_NONE
+
+This is the same as saying
+
+    $member->desiredCompressionMethod( COMPRESSION_STORED );
+
+=item 1 .. 9
+
+1 gives the best speed and worst compression, and 9 gives the best
+compression and worst speed.
+
+=item COMPRESSION_LEVEL_FASTEST
+
+This is a synonym for level 1.
+
+=item COMPRESSION_LEVEL_BEST_COMPRESSION
+
+This is a synonym for level 9.
+
+=item COMPRESSION_LEVEL_DEFAULT
+
+This gives a good compromise between speed and compression, and is
+currently equivalent to 6 (this is in the zlib code).
+
+This is the level that will be used if not specified.
+
+=back
+
+=cut
+
+# these two are the only ones supported in this module
+use constant COMPRESSION_STORED => 0;	# file is stored (no compression)
+use constant COMPRESSION_DEFLATED => 8;	# file is Deflated
+
+use constant COMPRESSION_LEVEL_NONE => 0;
+use constant COMPRESSION_LEVEL_DEFAULT => -1;
+use constant COMPRESSION_LEVEL_FASTEST => 1;
+use constant COMPRESSION_LEVEL_BEST_COMPRESSION => 9;
+
+# internal file attribute bits
+# Found in Archive::Zip::Member::internalFileAttributes()
+
+use constant IFA_TEXT_FILE_MASK	=> 1;
+use constant IFA_TEXT_FILE		=> 1;	# file is apparently text
+use constant IFA_BINARY_FILE	=> 0;
+
+# PKZIP file format miscellaneous constants (for internal use only)
+use constant SIGNATURE_FORMAT => "V";
+use constant SIGNATURE_LENGTH => 4;
+
+use constant LOCAL_FILE_HEADER_SIGNATURE	=> 0x04034b50;
+use constant LOCAL_FILE_HEADER_FORMAT		=> "v3 V4 v2";
+use constant LOCAL_FILE_HEADER_LENGTH		=> 26;
+
+use constant DATA_DESCRIPTOR_FORMAT	=> "V3";
+use constant DATA_DESCRIPTOR_LENGTH	=> 12;
+
+use constant CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE => 0x02014b50;
+use constant CENTRAL_DIRECTORY_FILE_HEADER_FORMAT => "C2 v3 V4 v5 V2";
+use constant CENTRAL_DIRECTORY_FILE_HEADER_LENGTH => 42;
+
+use constant END_OF_CENTRAL_DIRECTORY_SIGNATURE => 0x06054b50;
+use constant END_OF_CENTRAL_DIRECTORY_SIGNATURE_STRING => pack( "V",
+	END_OF_CENTRAL_DIRECTORY_SIGNATURE );
+use constant END_OF_CENTRAL_DIRECTORY_FORMAT => "v4 V2 v";
+use constant END_OF_CENTRAL_DIRECTORY_LENGTH => 18;
+
+use constant FA_AMIGA		=> 1;
+use constant FA_VAX_VMS		=> 2;
+use constant FA_VM_CMS		=> 4;
+use constant FA_ATARI_ST	=> 5;
+use constant FA_OS2_HPFS	=> 6;
+use constant FA_MACINTOSH	=> 7;
+use constant FA_Z_SYSTEM	=> 8;
+use constant FA_CPM			=> 9;
+use constant FA_WINDOWS_NTFS => 10;
+
+use constant GPBF_IMPLODING_8K_SLIDING_DICTIONARY_MASK	=> 1 << 1;
+use constant GPBF_IMPLODING_3_SHANNON_FANO_TREES_MASK	=> 1 << 2;
+use constant GPBF_IS_COMPRESSED_PATCHED_DATA_MASK		=> 1 << 5;
+
+# the rest of these are not supported in this module
+use constant COMPRESSION_SHRUNK => 1;	# file is Shrunk
+use constant COMPRESSION_REDUCED_1 => 2;# file is Reduced CF=1
+use constant COMPRESSION_REDUCED_2 => 3;# file is Reduced CF=2
+use constant COMPRESSION_REDUCED_3 => 4;# file is Reduced CF=3
+use constant COMPRESSION_REDUCED_4 => 5;# file is Reduced CF=4
+use constant COMPRESSION_IMPLODED => 6;	# file is Imploded
+use constant COMPRESSION_TOKENIZED => 7;# reserved for Tokenizing compr.
+use constant COMPRESSION_DEFLATED_ENHANCED => 9; # reserved for enh. Deflating
+use constant COMPRESSION_PKWARE_DATA_COMPRESSION_LIBRARY_IMPLODED => 10;
+
+# ------------------------- end of exportable constants ---------------------
+
+=head1  Archive::Zip methods
+
+The Archive::Zip class (and its invisible subclass Archive::Zip::Archive)
+implement generic zip file functionality.
+
+Creating a new Archive::Zip object actually makes an Archive::Zip::Archive
+object, but you don't have to worry about this unless you're subclassing.
+
+=cut
+
+=head2 Constructor
+
+=over 4
+
+=cut
+
+use constant ZIPARCHIVECLASS 	=> 'Archive::Zip::Archive';
+use constant ZIPMEMBERCLASS		=> 'Archive::Zip::Member';
+
+#--------------------------------
+
+=item new( [$fileName] )
+
+Make a new, empty zip archive.
+
+    my $zip = Archive::Zip->new();
+
+If an additional argument is passed, new() will call read() to read the
+contents of an archive:
+
+    my $zip = Archive::Zip->new( 'xyz.zip' );
+
+If a filename argument is passed and the read fails for any reason, new
+will return undef. For this reason, it may be better to call read
+separately.
+
+=cut
+
+sub new	# Archive::Zip
+{
+	my $class = shift;
+	return $class->ZIPARCHIVECLASS->new( @_ );
+}
+
+=back
+
+=head2  Utility Methods
+
+These Archive::Zip methods may be called as functions or as object
+methods. Do not call them as class methods:
+
+    $zip = Archive::Zip->new();
+    $crc = Archive::Zip::computeCRC32( 'ghijkl' );    # OK
+    $crc = $zip->computeCRC32( 'ghijkl' );            # also OK
+
+    $crc = Archive::Zip->computeCRC32( 'ghijkl' );    # NOT OK
+
+=over 4
+
+=cut
+
+#--------------------------------
+
+=item Archive::Zip::computeCRC32( $string [, $crc] )
+
+This is a utility function that uses the Compress::Zlib CRC
+routine to compute a CRC-32.
+
+You can get the CRC of a string:
+
+    $crc = Archive::Zip::computeCRC32( $string );
+
+Or you can compute the running CRC:
+
+    $crc = 0;
+    $crc = Archive::Zip::computeCRC32( 'abcdef', $crc );
+    $crc = Archive::Zip::computeCRC32( 'ghijkl', $crc );
+
+=cut
+
+sub computeCRC32	# Archive::Zip
+{
+	my $data = shift;
+	$data = shift if ref( $data );	# allow calling as an obj method
+	my $crc = shift;
+	return Compress::Zlib::crc32( $data, $crc );
+}
+
+#--------------------------------
+
+=item Archive::Zip::setChunkSize( $number )
+
+Change chunk size used for reading and writing.
+Currently, this defaults to 32K.
+This is not exportable, so you must call it like:
+
+    Archive::Zip::setChunkSize( 4096 );
+
+or as a method on a zip (though this is a global setting).
+Returns old chunk size.
+
+=cut
+
+sub setChunkSize	# Archive::Zip
+{
+	my $chunkSize = shift;
+	$chunkSize = shift if ref( $chunkSize );	# object method on zip?
+	my $oldChunkSize = $Archive::Zip::ChunkSize;
+	$Archive::Zip::ChunkSize = $chunkSize;
+	return $oldChunkSize;
+}
+
+#--------------------------------
+
+=item Archive::Zip::setErrorHandler( \&subroutine )
+
+Change the subroutine called with error strings.
+This defaults to \&Carp::carp, but you may want to change
+it to get the error strings.
+
+This is not exportable, so you must call it like:
+
+    Archive::Zip::setErrorHandler( \&myErrorHandler );
+
+If no error handler is passed, resets handler to default.
+
+Returns old error handler.
+
+Note that if you call Carp::carp or a similar routine
+or if you're chaining to the default error handler
+from your error handler, you may want to increment the number
+of caller levels that are skipped (do not just set it to a number):
+
+    $Carp::CarpLevel++;
+
+=cut
+
+sub setErrorHandler (&)	# Archive::Zip
+{
+	my $errorHandler = shift;
+	$errorHandler = \&Carp::carp if ! defined( $errorHandler );
+	my $oldErrorHandler = $Archive::Zip::ErrorHandler;
+	$Archive::Zip::ErrorHandler = $errorHandler;
+	return $oldErrorHandler;
+}
+
+sub _printError	# Archive::Zip
+{
+	my $string = join( ' ', @_, "\n" );
+	my $oldCarpLevel = $Carp::CarpLevel;
+	$Carp::CarpLevel += 2;
+	&{ $ErrorHandler }( $string );
+	$Carp::CarpLevel = $oldCarpLevel;
+}
+
+# This is called on format errors.
+sub _formatError	# Archive::Zip
+{
+	shift if ref( $_[0] );
+	_printError( 'format error:', @_ );
+	return AZ_FORMAT_ERROR;
+}
+
+# This is called on IO errors.
+sub _ioError	# Archive::Zip
+{
+	shift if ref( $_[0] );
+	_printError( 'IO error:', @_, ':', $! );
+	return AZ_IO_ERROR;
+}
+
+# This is called on generic errors.
+sub _error	# Archive::Zip
+{
+	shift if ref( $_[0] );
+	_printError( 'error:', @_ );
+	return AZ_ERROR;
+}
+
+# Called when a subclass should have implemented
+# something but didn't
+sub _subclassResponsibility 	# Archive::Zip
+{
+	Carp::croak( "subclass Responsibility\n" );
+}
+
+# Try to set the given file handle or object into binary mode.
+sub _binmode	# Archive::Zip
+{
+	my $fh = shift;
+	return $fh->can( 'binmode' )
+		?	$fh->binmode()
+		:	binmode( $fh );
+}
+
+# Attempt to guess whether file handle is seekable.
+sub _isSeekable	# Archive::Zip
+{
+	my $fh = shift;
+	my ($p0, $p1);
+	my $seekable = 
+		( $p0 = $fh->tell() ) >= 0
+		&& $fh->seek( 1, IO::Seekable::SEEK_CUR )
+		&& ( $p1 = $fh->tell() ) >= 0
+		&& $p1 == $p0 + 1
+		&& $fh->seek( -1, IO::Seekable::SEEK_CUR )
+		&& $fh->tell() == $p0;
+	return $seekable;
+}
+
+# Return an opened IO::Handle
+# my ( $status, fh ) = _newFileHandle( 'fileName', 'w' );
+# Can take a filename, file handle, or ref to GLOB
+# Or, if given something that is a ref but not an IO::Handle,
+# passes back the same thing.
+sub _newFileHandle	# Archive::Zip
+{
+	my $fd = shift;
+	my $status = 1;
+	my $handle = IO::File->new();
+
+	if ( ref( $fd ) )
+	{
+		if ( $fd->isa( 'IO::Handle' ) or $fd->isa( 'GLOB' ) )
+		{
+			$status = $handle->fdopen( $fd, @_ );
+		}
+		else
+		{
+			$handle = $fd;
+		}
+	}
+	else
+	{
+		$status = $handle->open( $fd, @_ );
+	}
+
+	return ( $status, $handle );
+}
+
+=back
+
+=cut
+
+# ----------------------------------------------------------------------
+# class Archive::Zip::Archive (concrete)
+# Generic ZIP archive.
+# ----------------------------------------------------------------------
+package Archive::Zip::Archive;
+use File::Path;
+use File::Basename;
+
+use vars qw( @ISA );
+@ISA = qw( Archive::Zip );
+
+BEGIN { use Archive::Zip qw( :CONSTANTS :ERROR_CODES :PKZIP_CONSTANTS
+	:UTILITY_METHODS ) }
+
+#--------------------------------
+# Note that this returns undef on read errors, else new zip object.
+
+sub new	# Archive::Zip::Archive
+{
+	my $class = shift;
+	my $self = bless( {
+		'diskNumber' => 0,
+		'diskNumberWithStartOfCentralDirectory' => 0,
+		'numberOfCentralDirectoriesOnThisDisk' => 0, # shld be # of members
+		'numberOfCentralDirectories' => 0,	# shld be # of members
+		'centralDirectorySize' => 0,	# must re-compute on write
+		'centralDirectoryOffsetWRTStartingDiskNumber' => 0,	# must re-compute
+		'zipfileComment' => ''
+		}, $class );
+	$self->{'members'} = [];
+	if ( @_ )
+	{
+		my $status = $self->read( @_ );
+		return $status == AZ_OK ? $self : undef;
+	}
+	return $self;
+}
+
+=head2 Accessors
+
+=over 4
+
+=cut
+
+#--------------------------------
+
+=item members()
+
+Return a copy of my members array
+
+    my @members = $zip->members();
+
+=cut
+
+sub members	# Archive::Zip::Archive
+{ @{ shift->{'members'} } }
+
+#--------------------------------
+
+=item numberOfMembers()
+
+Return the number of members I have
+
+=cut
+
+sub numberOfMembers	# Archive::Zip::Archive
+{ scalar( shift->members() ) }
+
+#--------------------------------
+
+=item memberNames()
+
+Return a list of the (internal) file names of my members
+
+=cut
+
+sub memberNames	# Archive::Zip::Archive
+{
+	my $self = shift;
+	return map { $_->fileName() } $self->members();
+}
+
+#--------------------------------
+
+=item memberNamed( $string )
+
+Return ref to member whose filename equals given filename or undef
+
+=cut
+
+sub memberNamed	# Archive::Zip::Archive
+{
+	my ( $self, $fileName ) = @_;
+	my ( $retval ) = grep { $_->fileName() eq $fileName } $self->members();
+	return $retval;
+}
+
+#--------------------------------
+
+=item membersMatching( $regex )
+
+Return array of members whose filenames match given regular
+expression in list context.
+Returns number of matching members in scalar context.
+
+    my @textFileMembers = $zip->membersMatching( '.*\.txt' );
+    # or
+    my $numberOfTextFiles = $zip->membersMatching( '.*\.txt' );
+
+=cut
+
+sub membersMatching	# Archive::Zip::Archive
+{
+	my ( $self, $pattern ) = @_;
+	return grep { $_->fileName() =~ /$pattern/ } $self->members();
+}
+
+#--------------------------------
+
+=item diskNumber()
+
+Return the disk that I start on.
+Not used for writing zips, but might be interesting if you read a zip in.
+This had better be 0, as Archive::Zip does not handle multi-volume archives.
+
+=cut
+
+sub diskNumber	# Archive::Zip::Archive
+{ shift->{'diskNumber'} }
+
+#--------------------------------
+
+=item diskNumberWithStartOfCentralDirectory()
+
+Return the disk number that holds the beginning of the central directory.
+Not used for writing zips, but might be interesting if you read a zip in.
+This had better be 0, as Archive::Zip does not handle multi-volume archives.
+
+=cut
+
+sub diskNumberWithStartOfCentralDirectory	# Archive::Zip::Archive
+{ shift->{'diskNumberWithStartOfCentralDirectory'} }
+
+#--------------------------------
+
+=item numberOfCentralDirectoriesOnThisDisk()
+
+Return the number of CD structures on this disk.
+Not used for writing zips, but might be interesting if you read a zip in.
+
+=cut
+
+sub numberOfCentralDirectoriesOnThisDisk	# Archive::Zip::Archive
+{ shift->{'numberOfCentralDirectoriesOnThisDisk'} }
+
+#--------------------------------
+
+=item numberOfCentralDirectories()
+
+Return the number of CD structures in the whole zip.
+Not used for writing zips, but might be interesting if you read a zip in.
+
+=cut
+
+sub numberOfCentralDirectories	# Archive::Zip::Archive
+{ shift->{'numberOfCentralDirectories'} }
+
+#--------------------------------
+
+=item centralDirectorySize()
+
+Returns central directory size, as read from an external zip file.
+Not used for writing zips, but might be interesting if you read a zip in.
+
+=cut
+
+sub centralDirectorySize	# Archive::Zip::Archive
+{ shift->{'centralDirectorySize'} }
+
+#--------------------------------
+
+=item centralDirectoryOffsetWRTStartingDiskNumber()
+
+Returns the offset into the zip file where the CD begins.
+Not used for writing zips, but might be interesting if you read a zip in.
+
+=cut
+
+sub centralDirectoryOffsetWRTStartingDiskNumber	# Archive::Zip::Archive
+{ shift->{'centralDirectoryOffsetWRTStartingDiskNumber'} }
+
+#--------------------------------
+
+=item zipfileComment( [$string] )
+
+Get or set the zipfile comment.
+Returns the old comment.
+
+    print $zip->zipfileComment();
+    $zip->zipfileComment( 'New Comment' );
+
+=cut
+
+sub zipfileComment	# Archive::Zip::Archive
+{
+	my $self = shift;
+	my $comment = $self->{'zipfileComment'};
+	if ( @_ )
+	{
+		$self->{'zipfileComment'} = shift;
+	}
+	return $comment;
+}
+
+=back
+
+=head2 Member Operations
+
+Various operations on a zip file modify members.
+When a member is passed as an argument, you can either use a reference
+to the member itself, or the name of a member. Of course, using the
+name requires that names be unique within a zip (this is not enforced).
+
+=over 4
+
+=cut
+
+#--------------------------------
+
+=item removeMember( $memberOrName )
+
+Remove and return the given member, or match its name and remove it.
+Returns undef if member name doesn't exist in this Zip.
+No-op if member does not belong to this zip.
+
+=cut
+
+sub removeMember	# Archive::Zip::Archive
+{
+	my ( $self, $member ) = @_;
+	$member = $self->memberNamed( $member ) if ! ref( $member );
+	return undef if ! $member;
+	my @newMembers = grep { $_ != $member } $self->members();
+	$self->{'members'} = \@newMembers;
+	return $member;
+}
+
+#--------------------------------
+
+=item replaceMember( $memberOrName, $newMember )
+
+Remove and return the given member, or match its name and remove it.
+Replace with new member.
+Returns undef if member name doesn't exist in this Zip.
+
+    my $member1 = $zip->removeMember( 'xyz' );
+    my $member2 = $zip->replaceMember( 'abc', $member1 );
+    # now, $member2 (named 'abc') is not in $zip,
+    # and $member1 (named 'xyz') is, having taken $member2's place.
+
+=cut
+
+sub replaceMember	# Archive::Zip::Archive
+{
+	my ( $self, $oldMember, $newMember ) = @_;
+	$oldMember = $self->memberNamed( $oldMember ) if ! ref( $oldMember );
+	return undef if ! $oldMember;
+	my @newMembers
+		= map { ( $_ == $oldMember ) ? $newMember : $_ } $self->members();
+	$self->{'members'} = \@newMembers;
+	return $oldMember;
+}
+
+#--------------------------------
+
+=item extractMember( $memberOrName [, $extractedName ] )
+
+Extract the given member, or match its name and extract it.
+Returns undef if member doesn't exist in this Zip.
+If optional second arg is given, use it as the name of the
+extracted member. Otherwise, the internal filename of the member is used
+as the name of the extracted file or directory.
+
+All necessary directories will be created.
+
+Returns C<AZ_OK> on success.
+
+=cut
+
+sub extractMember	# Archive::Zip::Archive
+{
+	my $self = shift;
+	my $member = shift;
+	$member = $self->memberNamed( $member ) if ! ref( $member );
+	return _error( 'member not found' ) if !$member;
+	my $name = shift;
+	$name = $member->fileName() if not $name;
+	my $dirName = dirname( $name );
+	mkpath( $dirName ) if ( ! -d $dirName );
+	return _ioError( "can't create dir $dirName" ) if ( ! -d $dirName );
+	return $member->extractToFileNamed( $name, @_ );
+}
+
+#--------------------------------
+
+=item extractMemberWithoutPaths( $memberOrName [, $extractedName ] )
+
+Extract the given member, or match its name and extract it.
+Does not use path information (extracts into the current directory).
+Returns undef if member doesn't exist in this Zip.
+If optional second arg is given, use it as the name of the
+extracted member (its paths will be deleted too).
+Otherwise, the internal filename of the member (minus paths) is used
+as the name of the extracted file or directory.
+
+Returns C<AZ_OK> on success.
+
+=cut
+
+sub extractMemberWithoutPaths	# Archive::Zip::Archive
+{
+	my $self = shift;
+	my $member = shift;
+	$member = $self->memberNamed( $member ) if ! ref( $member );
+	return _error( 'member not found' ) if !$member;
+	my $name = shift;
+	$name = $member->fileName() if not $name;
+	$name = basename( $name );
+	return $member->extractToFileNamed( $name, @_ );
+}
+
+#--------------------------------
+
+=item addMember( $member )
+
+Append a member (possibly from another zip file) to the zip file.
+Returns the new member.
+Generally, you will use addFile(), addDirectory(), addString(), or read()
+to add members.
+
+    # Move member named 'abc' to end of zip:
+    my $member = $zip->removeMember( 'abc' );
+    $zip->addMember( $member );
+
+=cut
+
+sub addMember	# Archive::Zip::Archive
+{
+	my ( $self, $newMember ) = @_;
+	push( @{ $self->{'members'} }, $newMember ) if $newMember;
+	return $newMember;
+}
+
+#--------------------------------
+
+=item addFile( $fileName [, $newName ] )
+
+Append a member whose data comes from an external file,
+returning the member or undef.
+The member will have its file name set to the name of the external
+file, and its desiredCompressionMethod set to COMPRESSION_DEFLATED.
+The file attributes and last modification time will be set from the file.
+
+If the name given does not represent a readable plain file or symbolic link,
+undef will be returned.
+
+The text mode bit will be set if the contents appears to be text (as returned
+by the C<-T> perl operator).
+
+The optional second argument sets the internal file name to
+something different than the given $fileName.
+
+=cut
+
+sub addFile	# Archive::Zip::Archive
+{
+	my $self = shift;
+	my $fileName = shift;
+	my $newName = shift;
+	my $newMember = $self->ZIPMEMBERCLASS->newFromFile( $fileName );
+	if (defined($newMember))
+	{
+		$self->addMember( $newMember );
+		$newMember->fileName( $newName ) if defined( $newName );
+	}
+	return $newMember;
+}
+
+#--------------------------------
+
+=item addString( $stringOrStringRef [, $name] )
+
+Append a member created from the given string or string reference.
+The name is given by the optional second argument.
+Returns the new member.
+
+The last modification time will be set to now,
+and the file attributes will be set to permissive defaults.
+
+    my $member = $zip->addString( 'This is a test', 'test.txt' );
+
+=cut
+
+sub addString	# Archive::Zip::Archive
+{
+	my $self = shift;
+	my $newMember = $self->ZIPMEMBERCLASS->newFromString( @_ );
+	return $self->addMember( $newMember );
+}
+
+#--------------------------------
+
+=item addDirectory( $directoryName [, $fileName ] )
+
+Append a member created from the given directory name.
+The directory name does not have to name an existing directory.
+If the named directory exists, the file modification time and permissions
+are set from the existing directory, otherwise they are set to now and
+permissive default permissions.
+The optional second argument sets the name of the archive member
+(which defaults to $directoryName)
+
+Returns the new member.
+
+=cut
+
+sub addDirectory	# Archive::Zip::Archive
+{
+	my ( $self, $name, $newName ) = @_;
+	my $newMember = $self->ZIPMEMBERCLASS->newDirectoryNamed( $name );
+	$self->addMember( $newMember );
+	$newMember->fileName( $newName ) if defined( $newName );
+	return $newMember;
+}
+
+#--------------------------------
+
+=item contents( $memberOrMemberName [, $newContents ] )
+
+Returns the uncompressed data for a particular member, or undef.
+
+    print "xyz.txt contains " . $zip->contents( 'xyz.txt' );
+
+Also can change the contents of a member:
+
+    $zip->contents( 'xyz.txt', 'This is the new contents' );
+
+=cut
+
+sub contents	# Archive::Zip::Archive
+{
+	my ( $self, $member, $newContents ) = @_;
+	$member = $self->memberNamed( $member ) if ! ref( $member );
+	return undef if ! $member;
+	return $member->contents( $newContents );
+}
+
+#--------------------------------
+
+=item writeToFileNamed( $fileName )
+
+Write a zip archive to named file.
+Returns C<AZ_OK> on success.
+
+Note that if you use the same name as an existing
+zip file that you read in, you will clobber ZipFileMembers.
+So instead, write to a different file name, then delete
+the original.
+
+    my $status = $zip->writeToFileNamed( 'xx.zip' );
+    die "error somewhere" if $status != AZ_OK;
+
+=cut
+
+sub writeToFileNamed	# Archive::Zip::Archive
+{
+	my $self = shift;
+	my $fileName = shift;
+	foreach my $member ( $self->members() )
+	{
+		if ( $member->_usesFileNamed( $fileName ) )
+		{
+			return _error("$fileName is needed by member " 
+					. $member->fileName() 
+					. "; try renaming output file");
+		}
+	}
+	my ( $status, $fh ) = _newFileHandle( $fileName, 'w' );
+	return _ioError( "Can't open $fileName for write" ) if !$status;
+	my $retval = $self->writeToFileHandle( $fh, 1 );
+	$fh->close();
+	return $retval;
+}
+
+#--------------------------------
+
+=item writeToFileHandle( $fileHandle [, $seekable] )
+
+Write a zip archive to a file handle.
+Return AZ_OK on success.
+
+The optional second arg tells whether or not to try to seek backwards
+to re-write headers.
+If not provided, it is set by testing seekability. This could fail
+on some operating systems, though.
+
+    my $fh = IO::File->new( 'someFile.zip', 'w' );
+    $zip->writeToFileHandle( $fh );
+
+If you pass a file handle that is not seekable (like if you're writing
+to a pipe or a socket), pass a false as the second argument:
+
+    my $fh = IO::File->new( '| cat > somefile.zip', 'w' );
+    $zip->writeToFileHandle( $fh, 0 );   # fh is not seekable
+
+=cut
+
+sub writeToFileHandle	# Archive::Zip::Archive
+{
+	my $self = shift;
+	my $fh = shift;
+	my $fhIsSeekable = @_ ? shift : _isSeekable( $fh );
+	_binmode( $fh );
+
+	my $offset = 0;
+	foreach my $member ( $self->members() )
+	{
+		$member->{'writeLocalHeaderRelativeOffset'} = $offset;
+		my $retval = $member->_writeToFileHandle( $fh, $fhIsSeekable );
+		$member->endRead();
+		return $retval if $retval != AZ_OK;
+		$offset += $member->_localHeaderSize() + $member->_writeOffset();
+		$offset += $member->hasDataDescriptor() ? DATA_DESCRIPTOR_LENGTH : 0;
+	}
+	$self->{'writeCentralDirectoryOffset'} = $offset;
+	return $self->_writeCentralDirectory( $fh );
+}
+
+# Returns next signature from given file handle, leaves
+# file handle positioned afterwards.
+# In list context, returns ($status, $signature)
+
+sub _readSignature	# Archive::Zip::Archive
+{
+	my $self = shift;
+	my $fh = shift;
+	my $fileName = shift;
+	my $signatureData;
+	$fh->read( $signatureData, SIGNATURE_LENGTH )
+		or return _ioError( "reading header signature" );
+	my $signature = unpack( SIGNATURE_FORMAT, $signatureData );
+	my $status = AZ_OK;
+	if ( $signature != CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE
+			and $signature != LOCAL_FILE_HEADER_SIGNATURE
+			and $signature != END_OF_CENTRAL_DIRECTORY_SIGNATURE )
+	{
+		$status = _formatError(
+			sprintf( "bad signature: 0x%08x at offset %d in file \"%s\"",
+				$signature, $fh->tell() - SIGNATURE_LENGTH, $fileName ) );
+	}
+
+	return ( $status, $signature );
+}
+
+# Used only during writing
+sub _writeCentralDirectoryOffset	# Archive::Zip::Archive
+{ shift->{'writeCentralDirectoryOffset'} }
+
+sub _writeEOCDOffset	# Archive::Zip::Archive
+{ shift->{'writeEOCDOffset'} }
+
+# Expects to have _writeEOCDOffset() set
+sub _writeEndOfCentralDirectory	# Archive::Zip::Archive
+{
+	my ( $self, $fh ) = @_;
+
+	$fh->write( END_OF_CENTRAL_DIRECTORY_SIGNATURE_STRING, SIGNATURE_LENGTH )
+		or return _ioError( 'writing EOCD Signature' );
+
+	my $header = pack( END_OF_CENTRAL_DIRECTORY_FORMAT,
+		0,	# {'diskNumber'},
+		0,	# {'diskNumberWithStartOfCentralDirectory'},
+		$self->numberOfMembers(),	# {'numberOfCentralDirectoriesOnThisDisk'},
+		$self->numberOfMembers(),	# {'numberOfCentralDirectories'},
+		$self->_writeEOCDOffset() - $self->_writeCentralDirectoryOffset(),
+		$self->_writeCentralDirectoryOffset(),
+		length( $self->zipfileComment() )
+	 );
+	$fh->write( $header, END_OF_CENTRAL_DIRECTORY_LENGTH )
+		or return _ioError( 'writing EOCD header' );
+	if ( length( $self->zipfileComment() ))
+	{
+		$fh->write( $self->zipfileComment(), length( $self->zipfileComment() ))
+			or return _ioError( 'writing zipfile comment' );
+	}
+	return AZ_OK;
+}
+
+sub _writeCentralDirectory	# Archive::Zip::Archive
+{
+	my ( $self, $fh ) = @_;
+
+	my $offset = $self->_writeCentralDirectoryOffset();
+	foreach my $member ( $self->members() )
+	{
+		my $status = $member->_writeCentralDirectoryFileHeader( $fh );
+		return $status if $status != AZ_OK;
+		$offset += $member->_centralDirectoryHeaderSize();
+	}
+	$self->{'writeEOCDOffset'} = $offset;
+	return $self->_writeEndOfCentralDirectory( $fh );
+}
+
+#--------------------------------
+
+=item read( $fileName )
+
+Read zipfile headers from a zip file, appending new members.
+Returns C<AZ_OK> or error code.
+
+    my $zipFile = Archive::Zip->new();
+    my $status = $zipFile->read( '/some/FileName.zip' );
+
+=cut
+
+sub read	# Archive::Zip::Archive
+{
+	my $self = shift;
+	my $fileName = shift;
+	return _error( 'No filename given' ) if ! $fileName;
+	my ( $status, $fh ) = _newFileHandle( $fileName, 'r' );
+	return _ioError( "opening $fileName for read" ) if !$status;
+	_binmode( $fh );
+
+	$status = $self->_findEndOfCentralDirectory( $fh );
+	return $status if $status != AZ_OK;
+
+	my $eocdPosition = $fh->tell();
+
+	$status = $self->_readEndOfCentralDirectory( $fh );
+	return $status if $status != AZ_OK;
+
+	$fh->seek( $eocdPosition - $self->centralDirectorySize(),
+		IO::Seekable::SEEK_SET )
+			or return _ioError( "Can't seek $fileName" );
+
+	for ( ;; )
+	{
+		my $newMember = 
+			$self->ZIPMEMBERCLASS->_newFromZipFile( $fh, $fileName );
+		my $signature;
+		( $status, $signature ) = $self->_readSignature( $fh, $fileName );
+		return $status if $status != AZ_OK;
+		last if $signature == END_OF_CENTRAL_DIRECTORY_SIGNATURE;
+		$status = $newMember->_readCentralDirectoryFileHeader();
+		return $status if $status != AZ_OK;
+		$status = $newMember->endRead();
+		return $status if $status != AZ_OK;
+		$newMember->_becomeDirectoryIfNecessary();
+		push( @{ $self->{'members'} }, $newMember );
+	}
+
+	$fh->close();
+	return AZ_OK;
+}
+
+# Read EOCD, starting from position before signature.
+# Return AZ_OK on success.
+sub _readEndOfCentralDirectory	# Archive::Zip::Archive
+{
+	my $self = shift;
+	my $fh = shift;
+
+	# Skip past signature
+	$fh->seek( SIGNATURE_LENGTH, IO::Seekable::SEEK_CUR )
+		or return _ioError( "Can't seek past EOCD signature" );
+
+	my $header = '';
+	$fh->read( $header, END_OF_CENTRAL_DIRECTORY_LENGTH )
+		or return _ioError( "reading end of central directory" );
+
+	my $zipfileCommentLength;
+	(
+		$self->{'diskNumber'},
+		$self->{'diskNumberWithStartOfCentralDirectory'},
+		$self->{'numberOfCentralDirectoriesOnThisDisk'},
+		$self->{'numberOfCentralDirectories'},
+		$self->{'centralDirectorySize'},
+		$self->{'centralDirectoryOffsetWRTStartingDiskNumber'},
+		$zipfileCommentLength
+	 ) = unpack( END_OF_CENTRAL_DIRECTORY_FORMAT, $header );
+
+	if ( $zipfileCommentLength )
+	{
+		my $zipfileComment = '';
+		$fh->read( $zipfileComment, $zipfileCommentLength )
+			or return _ioError( "reading zipfile comment" );
+		$self->{'zipfileComment'} = $zipfileComment;
+	}
+
+	return AZ_OK;
+}
+
+# Seek in my file to the end, then read backwards until we find the
+# signature of the central directory record. Leave the file positioned right
+# before the signature. Returns AZ_OK if success.
+sub _findEndOfCentralDirectory	# Archive::Zip::Archive
+{
+	my $self = shift;
+	my $fh = shift;
+	my $data = '';
+	$fh->seek( 0, IO::Seekable::SEEK_END )
+		or return _ioError( "seeking to end" );
+
+	my $fileLength = $fh->tell();
+	if ( $fileLength < END_OF_CENTRAL_DIRECTORY_LENGTH + 4 )
+	{
+		return _formatError( "file is too short" )
+	}
+
+	my $seekOffset = 0;
+	my $pos = -1;
+	for ( ;; )
+	{
+		$seekOffset += 512;
+		$seekOffset = $fileLength if ( $seekOffset > $fileLength );
+		$fh->seek( -$seekOffset, IO::Seekable::SEEK_END )
+			or return _ioError( "seek failed" );
+		$fh->read( $data, $seekOffset )
+			or return _ioError( "read failed" );
+		$pos = rindex( $data, END_OF_CENTRAL_DIRECTORY_SIGNATURE_STRING );
+		last if ( $pos > 0
+			or $seekOffset == $fileLength
+			or $seekOffset >= $Archive::Zip::ChunkSize );
+	}
+
+	if ( $pos >= 0 )
+	{
+		$fh->seek( $pos - $seekOffset, IO::Seekable::SEEK_CUR )
+			or return _ioError( "seeking to EOCD" );
+		return AZ_OK;
+	}
+	else
+	{
+		return _formatError( "can't find EOCD signature" );
+	}
+}
+
+=back
+
+=head1 MEMBER OPERATIONS
+
+=head2 Class Methods
+
+Several constructors allow you to construct members without adding
+them to a zip archive.
+
+These work the same as the addFile(), addDirectory(), and addString()
+zip instance methods described above, but they don't add the new members
+to a zip.
+
+=over 4
+
+=cut
+
+# ----------------------------------------------------------------------
+# class Archive::Zip::Member
+# A generic member of an archive ( abstract )
+# ----------------------------------------------------------------------
+package Archive::Zip::Member;
+use vars qw( @ISA );
+@ISA = qw ( Archive::Zip );
+
+BEGIN { use Archive::Zip qw( :CONSTANTS :ERROR_CODES :PKZIP_CONSTANTS
+	:UTILITY_METHODS ) }
+
+use Time::Local ();
+use Compress::Zlib qw( Z_OK Z_STREAM_END MAX_WBITS );
+use File::Path;
+use File::Basename;
+
+use constant ZIPFILEMEMBERCLASS	=> 'Archive::Zip::ZipFileMember';
+use constant NEWFILEMEMBERCLASS	=> 'Archive::Zip::NewFileMember';
+use constant STRINGMEMBERCLASS	=> 'Archive::Zip::StringMember';
+use constant DIRECTORYMEMBERCLASS	=> 'Archive::Zip::DirectoryMember';
+
+# Unix perms for default creation of files/dirs.
+use constant DEFAULT_DIRECTORY_PERMISSIONS => 040755;
+use constant DEFAULT_FILE_PERMISSIONS => 0100666;
+use constant DIRECTORY_ATTRIB => 040000;
+use constant FILE_ATTRIB => 0100000;
+
+# Returns self if successful, else undef
+# Assumes that fh is positioned at beginning of central directory file header.
+# Leaves fh positioned immediately after file header or EOCD signature.
+sub _newFromZipFile # Archive::Zip::Member
+{
+	my $class = shift;
+	my $self = $class->ZIPFILEMEMBERCLASS->_newFromZipFile( @_ );
+	return $self;
+}
+
+#--------------------------------
+
+=item Archive::Zip::Member->newFromString( $stringOrStringRef [, $fileName] )
+
+Construct a new member from the given string. Returns undef on error.
+
+    my $member = Archive::Zip::Member->newFromString( 'This is a test',
+                                                     'xyz.txt' );
+
+=cut
+
+sub newFromString	# Archive::Zip::Member
+{
+	my $class = shift;
+	my $self = $class->STRINGMEMBERCLASS->_newFromString( @_ );
+	return $self;
+}
+
+#--------------------------------
+
+=item newFromFile( $fileName )
+
+Construct a new member from the given file. Returns undef on error.
+
+    my $member = Archive::Zip::Member->newFromFile( 'xyz.txt' );
+
+=cut
+
+sub newFromFile	# Archive::Zip::Member
+{
+	my $class = shift;
+	my $self = $class->NEWFILEMEMBERCLASS->_newFromFileNamed( @_ );
+	return $self;
+}
+
+#--------------------------------
+
+=item newDirectoryNamed( $directoryName )
+
+Construct a new member from the given directory.
+Returns undef on error.
+
+    my $member = Archive::Zip::Member->newDirectoryNamed( 'CVS/' );
+
+=cut
+
+sub newDirectoryNamed # Archive::Zip::Member
+{
+	my $class = shift;
+	my $self = $class->DIRECTORYMEMBERCLASS->_newNamed( @_ );
+	return $self;
+}
+
+sub new	# Archive::Zip::Member
+{
+	my $class = shift;
+	my $self = {
+		'lastModFileDateTime' => 0,
+		'fileAttributeFormat' => FA_UNIX,
+		'versionMadeBy' => 20,
+		'versionNeededToExtract' => 20,
+		'bitFlag' => 0,
+		'compressionMethod' => COMPRESSION_STORED,
+		'desiredCompressionMethod' => COMPRESSION_STORED,
+		'desiredCompressionLevel' => COMPRESSION_LEVEL_NONE,
+		'internalFileAttributes' => 0,
+		'externalFileAttributes' => 0,	# set later
+		'fileName' => '',
+		'cdExtraField' => '',
+		'localExtraField' => '',
+		'fileComment' => '',
+		'crc32' => 0,
+		'compressedSize' => 0,
+		'uncompressedSize' => 0,
+		@_
+	};
+	bless( $self, $class );
+	$self->unixFileAttributes( $self->DEFAULT_FILE_PERMISSIONS );
+	return $self;
+}
+
+sub _becomeDirectoryIfNecessary	# Archive::Zip::Member
+{
+	my $self = shift;
+	$self->_become( DIRECTORYMEMBERCLASS )
+		if $self->isDirectory();
+	return $self;
+}
+
+# Morph into given class (do whatever cleanup I need to do)
+sub _become	# Archive::Zip::Member
+{
+	return bless( $_[0], $_[1] );
+}
+
+=back
+
+=head2 Simple accessors
+
+These methods get (and/or set) member attribute values.
+
+=over 4
+
+=cut
+
+#--------------------------------
+
+=item versionMadeBy()
+
+Gets the field from my member header.
+
+=cut
+
+sub versionMadeBy	# Archive::Zip::Member
+{ shift->{'versionMadeBy'} }
+
+#--------------------------------
+
+=item fileAttributeFormat( [$format] )
+
+Gets or sets the field from the member header.
+These are C<FA_*> values.
+
+=cut
+
+sub fileAttributeFormat	# Archive::Zip::Member
+{
+	( $#_ > 0 ) ? ( $_[0]->{'fileAttributeFormat'} = $_[1] )
+		: $_[0]->{'fileAttributeFormat'}
+}
+
+#--------------------------------
+
+=item versionNeededToExtract()
+
+Gets the field from my member header.
+
+=cut
+
+sub versionNeededToExtract	# Archive::Zip::Member
+{ shift->{'versionNeededToExtract'} }
+
+#--------------------------------
+
+=item bitFlag()
+
+Gets the general purpose bit field from my member header.
+This is where the C<GPBF_*> bits live.
+
+=cut
+
+sub bitFlag	# Archive::Zip::Member
+{ shift->{'bitFlag'} }
+
+#--------------------------------
+
+=item compressionMethod()
+
+Returns my compression method. This is the method that is
+currently being used to compress my data.
+
+This will be COMPRESSION_STORED for added string or file members,
+or any of the C<COMPRESSION_*> values for members from a zip file.
+However, this module can only handle members whose data is in
+COMPRESSION_STORED or COMPRESSION_DEFLATED format.
+
+=cut
+
+sub compressionMethod	# Archive::Zip::Member
+{ shift->{'compressionMethod'} }
+
+#--------------------------------
+
+=item desiredCompressionMethod( [$method] )
+
+Get or set my desiredCompressionMethod
+This is the method that will be used to write.
+Returns prior desiredCompressionMethod.
+
+Only COMPRESSION_DEFLATED or COMPRESSION_STORED are valid arguments.
+
+Changing to COMPRESSION_STORED will change my desiredCompressionLevel
+to 0; changing to COMPRESSION_DEFLATED will change my
+desiredCompressionLevel to COMPRESSION_LEVEL_DEFAULT.
+
+=cut
+
+sub desiredCompressionMethod	# Archive::Zip::Member
+{
+	my $self = shift;
+	my $newDesiredCompressionMethod = shift;
+	my $oldDesiredCompressionMethod = $self->{'desiredCompressionMethod'};
+	if ( defined( $newDesiredCompressionMethod ))
+	{
+		$self->{'desiredCompressionMethod'} = $newDesiredCompressionMethod;
+		if ( $newDesiredCompressionMethod == COMPRESSION_STORED )
+		{
+			$self->{'desiredCompressionLevel'} = 0;
+		}
+		elsif ( $oldDesiredCompressionMethod == COMPRESSION_STORED )
+		{
+			$self->{'desiredCompressionLevel'} = COMPRESSION_LEVEL_DEFAULT;
+		}
+	}
+	return $oldDesiredCompressionMethod;
+}
+
+#--------------------------------
+
+=item desiredCompressionLevel( [$method] )
+
+Get or set my desiredCompressionLevel
+This is the method that will be used to write.
+Returns prior desiredCompressionLevel.
+
+Valid arguments are 0 through 9, COMPRESSION_LEVEL_NONE,
+COMPRESSION_LEVEL_DEFAULT, COMPRESSION_LEVEL_BEST_COMPRESSION, and
+COMPRESSION_LEVEL_FASTEST.
+
+0 or COMPRESSION_LEVEL_NONE will change the desiredCompressionMethod
+to COMPRESSION_STORED. All other arguments will change the
+desiredCompressionMethod to COMPRESSION_DEFLATED.
+
+=cut
+
+sub desiredCompressionLevel	# Archive::Zip::Member
+{
+	my $self = shift;
+	my $newDesiredCompressionLevel = shift;
+	my $oldDesiredCompressionLevel = $self->{'desiredCompressionLevel'};
+	if ( defined( $newDesiredCompressionLevel ))
+	{
+		$self->{'desiredCompressionLevel'} = $newDesiredCompressionLevel;
+		$self->{'desiredCompressionMethod'} = ( $newDesiredCompressionLevel
+			? COMPRESSION_DEFLATED
+			: COMPRESSION_STORED );
+	}
+	return $oldDesiredCompressionLevel;
+}
+
+#--------------------------------
+
+=item fileName()
+
+Get or set my internal filename.
+Returns the (possibly new) filename.
+
+Names will have backslashes converted to forward slashes,
+and will have multiple consecutive slashes converted to single ones.
+
+=cut
+
+sub fileName	# Archive::Zip::Member
+{
+	my $self = shift;
+	my $newName = shift;
+	if ( $newName )
+	{
+		$newName =~ s{[\\/]+}{/}g;	# deal with dos/windoze problems
+		$self->{'fileName'} = $newName;
+	}
+	return $self->{'fileName'}
+}
+
+#--------------------------------
+
+=item lastModFileDateTime()
+
+Return my last modification date/time stamp in MS-DOS format.
+
+=cut
+
+sub lastModFileDateTime	# Archive::Zip::Member
+{ shift->{'lastModFileDateTime'} }
+
+#--------------------------------
+
+=item lastModTime()
+
+Return my last modification date/time stamp,
+converted to unix localtime format.
+
+    print "Mod Time: " . scalar( localtime( $member->lastModTime() ) );
+
+=cut
+
+sub lastModTime	# Archive::Zip::Member
+{
+	my $self = shift;
+	return _dosToUnixTime( $self->lastModFileDateTime() );
+}
+
+#--------------------------------
+
+=item setLastModFileDateTimeFromUnix()
+
+Set my lastModFileDateTime from the given unix time.
+
+    $member->setLastModFileDateTimeFromUnix( time() );
+
+=cut
+
+sub setLastModFileDateTimeFromUnix	# Archive::Zip::Member
+{
+	my $self = shift;
+	my $time_t = shift;
+	$self->{'lastModFileDateTime'} = _unixToDosTime( $time_t );
+}
+
+# Convert DOS date/time format to unix time_t format
+# NOT AN OBJECT METHOD!
+sub _dosToUnixTime	# Archive::Zip::Member
+{
+	my $dt = shift;
+
+	my $year = ( ( $dt >> 25 ) & 0x7f ) + 80;
+	my $mon  = ( ( $dt >> 21 ) & 0x0f ) - 1;
+	my $mday = ( ( $dt >> 16 ) & 0x1f );
+
+	my $hour = ( ( $dt >> 11 ) & 0x1f );
+	my $min  = ( ( $dt >> 5 ) & 0x3f );
+	my $sec  = ( ( $dt << 1 ) & 0x3e );
+
+	my $time_t = Time::Local::timelocal( $sec, $min, $hour, $mday, $mon, $year );
+	return $time_t;
+}
+
+#--------------------------------
+
+=item internalFileAttributes()
+
+Return the internal file attributes field from the zip header.
+This is only set for members read from a zip file.
+
+=cut
+
+sub internalFileAttributes	# Archive::Zip::Member
+{ shift->{'internalFileAttributes'} }
+
+#--------------------------------
+
+=item externalFileAttributes()
+
+Return member attributes as read from the ZIP file.
+Note that these are NOT UNIX!
+
+=cut
+
+sub externalFileAttributes	# Archive::Zip::Member
+{ shift->{'externalFileAttributes'} }
+
+# Convert UNIX permissions into proper value for zip file
+# NOT A METHOD!
+sub _mapPermissionsFromUnix	# Archive::Zip::Member
+{
+	my $perms = shift;
+	return $perms << 16;
+}
+
+# Convert ZIP permissions into Unix ones
+# NOT A METHOD!
+sub _mapPermissionsToUnix	# Archive::Zip::Member
+{
+	my $perms = shift;
+	return $perms >> 16;
+}
+
+#--------------------------------
+
+=item unixFileAttributes( [$newAttributes] )
+
+Get or set the member's file attributes using UNIX file attributes.
+Returns old attributes.
+
+    my $oldAttribs = $member->unixFileAttributes( 0666 );
+
+Note that the return value has more than just the file permissions,
+so you will have to mask off the lowest bits for comparisions.
+
+=cut
+
+sub unixFileAttributes	# Archive::Zip::Member
+{
+	my $self = shift;
+	my $oldPerms = _mapPermissionsToUnix( $self->{'externalFileAttributes'} );
+	if ( @_ )
+	{
+		my $perms = shift;
+		if ( $self->isDirectory() )
+		{
+			$perms &= ~FILE_ATTRIB;
+			$perms |= DIRECTORY_ATTRIB;
+		}
+		else
+		{
+			$perms &= ~DIRECTORY_ATTRIB;
+			$perms |= FILE_ATTRIB;
+		}
+		$self->{'externalFileAttributes'} = _mapPermissionsFromUnix( $perms);
+	}
+	return $oldPerms;
+}
+
+#--------------------------------
+
+=item localExtraField( [$newField] )
+
+Gets or sets the extra field that was read from the local header.
+This is not set for a member from a zip file until after the
+member has been written out.
+
+The extra field must be in the proper format.
+
+=cut
+
+sub localExtraField	# Archive::Zip::Member
+{
+	( $#_ > 0 ) ? ( $_[0]->{'localExtraField'} = $_[1] )
+		: $_[0]->{'localExtraField'}
+}
+
+#--------------------------------
+
+=item cdExtraField( [$newField] )
+
+Gets or sets the extra field that was read from the central directory header.
+
+The extra field must be in the proper format.
+
+=cut
+
+sub cdExtraField	# Archive::Zip::Member
+{
+	( $#_ > 0 ) ? ( $_[0]->{'cdExtraField'} = $_[1] )
+		: $_[0]->{'cdExtraField'}
+}
+
+#--------------------------------
+
+=item extraFields()
+
+Return both local and CD extra fields, concatenated.
+
+=cut
+
+sub extraFields	# Archive::Zip::Member
+{
+	my $self = shift;
+	return $self->localExtraField() . $self->cdExtraField();
+}
+
+#--------------------------------
+
+=item fileComment( [$newComment] )
+
+Get or set the member's file comment.
+
+=cut
+
+sub fileComment	# Archive::Zip::Member
+{
+	( $#_ > 0 ) ? ( $_[0]->{'fileComment'} = $_[1] )
+		: $_[0]->{'fileComment'}
+}
+
+#--------------------------------
+
+=item hasDataDescriptor()
+
+Get or set the data descriptor flag.
+If this is set, the local header will not necessarily
+have the correct data sizes. Instead, a small structure
+will be stored at the end of the member data with these
+values.
+
+This should be transparent in normal operation.
+
+=cut
+
+sub hasDataDescriptor	# Archive::Zip::Member
+{
+	my $self = shift;
+	if ( @_ )
+	{
+		my $shouldHave = shift;
+		if ( $shouldHave )
+		{
+			$self->{'bitFlag'} |= GPBF_HAS_DATA_DESCRIPTOR_MASK
+		}
+		else
+		{
+			$self->{'bitFlag'} &= ~GPBF_HAS_DATA_DESCRIPTOR_MASK
+		}
+	}
+	return $self->{'bitFlag'} & GPBF_HAS_DATA_DESCRIPTOR_MASK;
+}
+
+#--------------------------------
+
+=item crc32()
+
+Return the CRC-32 value for this member.
+This will not be set for members that were constructed from strings
+or external files until after the member has been written.
+
+=cut
+
+sub crc32	# Archive::Zip::Member
+{ shift->{'crc32'} }
+
+#--------------------------------
+
+=item crc32String()
+
+Return the CRC-32 value for this member as an 8 character printable
+hex string.  This will not be set for members that were constructed
+from strings or external files until after the member has been written.
+
+=cut
+
+sub crc32String	# Archive::Zip::Member
+{ sprintf( "%08x", shift->{'crc32'} ); }
+
+#--------------------------------
+
+=item compressedSize()
+
+Return the compressed size for this member.
+This will not be set for members that were constructed from strings
+or external files until after the member has been written.
+
+=cut
+
+sub compressedSize	# Archive::Zip::Member
+{ shift->{'compressedSize'} }
+
+#--------------------------------
+
+=item uncompressedSize()
+
+Return the uncompressed size for this member.
+
+=cut
+
+sub uncompressedSize	# Archive::Zip::Member
+{ shift->{'uncompressedSize'} }
+
+#--------------------------------
+
+=item isEncrypted()
+
+Return true if this member is encrypted.
+The Archive::Zip module does not currently create or extract
+encrypted members.
+
+=cut
+
+sub isEncrypted	# Archive::Zip::Member
+{ shift->bitFlag() & GPBF_ENCRYPTED_MASK }
+
+
+#--------------------------------
+
+=item isTextFile( [$flag] )
+
+Returns true if I am a text file.
+Also can set the status if given an argument (then returns old state).
+Note that this module does not currently do anything with this flag
+upon extraction or storage.
+That is, bytes are stored in native format whether or not they came
+from a text file.
+
+=cut
+
+sub isTextFile	# Archive::Zip::Member
+{
+	my $self = shift;
+	my $bit = $self->internalFileAttributes() & IFA_TEXT_FILE_MASK;
+	if ( @_ )
+	{
+		my $flag = shift;
+		$self->{'internalFileAttributes'} &= ~IFA_TEXT_FILE_MASK;
+		$self->{'internalFileAttributes'} |=
+			( $flag ? IFA_TEXT_FILE : IFA_BINARY_FILE );
+	}
+	return $bit == IFA_TEXT_FILE;
+}
+
+#--------------------------------
+
+=item isBinaryFile()
+
+Returns true if I am a binary file.
+Also can set the status if given an argument (then returns old state).
+Note that this module does not currently do anything with this flag
+upon extraction or storage.
+That is, bytes are stored in native format whether or not they came
+from a text file.
+
+=cut
+
+sub isBinaryFile	# Archive::Zip::Member
+{
+	my $self = shift;
+	my $bit = $self->internalFileAttributes() & IFA_TEXT_FILE_MASK;
+	if ( @_ )
+	{
+		my $flag = shift;
+		$self->{'internalFileAttributes'} &= ~IFA_TEXT_FILE_MASK;
+		$self->{'internalFileAttributes'} |=
+			( $flag ? IFA_BINARY_FILE : IFA_TEXT_FILE );
+	}
+	return $bit == IFA_BINARY_FILE;
+}
+
+#--------------------------------
+
+=item extractToFileNamed( $fileName )
+
+Extract me to a file with the given name.
+The file will be created with default modes.
+Directories will be created as needed.
+
+Returns AZ_OK on success.
+
+=cut
+
+sub extractToFileNamed	# Archive::Zip::Member
+{
+	my $self = shift;
+	my $name = shift;
+	return _error( "encryption unsupported" ) if $self->isEncrypted();
+	mkpath( dirname( $name ) );	# croaks on error
+	my ( $status, $fh ) = _newFileHandle( $name, 'w' );
+	return _ioError( "Can't open file $name for write" ) if !$status;
+	my $retval = $self->extractToFileHandle( $fh );
+	$fh->close();
+	return $retval;
+}
+
+#--------------------------------
+
+=item isDirectory()
+
+Returns true if I am a directory.
+
+=cut
+
+sub isDirectory	# Archive::Zip::Member
+{ return 0 }
+
+# The following are used when copying data
+sub _writeOffset	# Archive::Zip::Member
+{ shift->{'writeOffset'} }
+
+sub _readOffset	# Archive::Zip::Member
+{ shift->{'readOffset'} }
+
+sub _writeLocalHeaderRelativeOffset	# Archive::Zip::Member
+{ shift->{'writeLocalHeaderRelativeOffset'} }
+
+sub _dataEnded	# Archive::Zip::Member
+{ shift->{'dataEnded'} }
+
+sub _readDataRemaining	# Archive::Zip::Member
+{ shift->{'readDataRemaining'} }
+
+sub _inflater	# Archive::Zip::Member
+{ shift->{'inflater'} }
+
+sub _deflater	# Archive::Zip::Member
+{ shift->{'deflater'} }
+
+# Return the total size of my local header
+sub _localHeaderSize	# Archive::Zip::Member
+{
+	my $self = shift;
+	return SIGNATURE_LENGTH
+		+ LOCAL_FILE_HEADER_LENGTH
+		+ length( $self->fileName() )
+		+ length( $self->localExtraField() )
+}
+
+# Return the total size of my CD header
+sub _centralDirectoryHeaderSize	# Archive::Zip::Member
+{
+	my $self = shift;
+	return SIGNATURE_LENGTH
+		+ CENTRAL_DIRECTORY_FILE_HEADER_LENGTH
+		+ length( $self->fileName() )
+		+ length( $self->cdExtraField() )
+		+ length( $self->fileComment() )
+}
+
+# convert a unix time to DOS date/time
+# NOT AN OBJECT METHOD!
+sub _unixToDosTime	# Archive::Zip::Member
+{
+	my $time_t = shift;
+	my ( $sec,$min,$hour,$mday,$mon,$year ) = localtime( $time_t );
+	my $dt = 0;
+	$dt += ( $sec >> 1 );
+	$dt += ( $min << 5 );
+	$dt += ( $hour << 11 );
+	$dt += ( $mday << 16 );
+	$dt += ( ( $mon + 1 ) << 21 );
+	$dt += ( ( $year - 80 ) << 25 );
+	return $dt;
+}
+
+# Write my local header to a file handle.
+# Stores the offset to the start of the header in my
+# writeLocalHeaderRelativeOffset member.
+# Returns AZ_OK on success.
+sub _writeLocalFileHeader	# Archive::Zip::Member
+{
+	my $self = shift;
+	my $fh = shift;
+
+	my $signatureData = pack( SIGNATURE_FORMAT, LOCAL_FILE_HEADER_SIGNATURE );
+	$fh->write( $signatureData, SIGNATURE_LENGTH )
+		or return _ioError( "writing local header signature" );
+
+	my $header = pack( LOCAL_FILE_HEADER_FORMAT,
+		$self->versionNeededToExtract(),
+		$self->bitFlag(),
+		$self->desiredCompressionMethod(),
+		$self->lastModFileDateTime(),
+		$self->crc32(),
+		$self->compressedSize(),		# may need to be re-written later
+		$self->uncompressedSize(),
+		length( $self->fileName() ),
+		length( $self->localExtraField() )
+		 );
+
+	$fh->write( $header, LOCAL_FILE_HEADER_LENGTH )
+		or return _ioError( "writing local header" );
+	if ( length( $self->fileName() ))
+	{
+		$fh->write( $self->fileName(), length( $self->fileName() ))
+			or return _ioError( "writing local header filename" );
+	}
+	if ( length( $self->localExtraField() ))
+	{
+		$fh->write( $self->localExtraField(), length( $self->localExtraField() ))
+			or return _ioError( "writing local header signature" );
+	}
+
+	return AZ_OK;
+}
+
+sub _writeCentralDirectoryFileHeader	# Archive::Zip::Member
+{
+	my $self = shift;
+	my $fh = shift;
+
+	my $sigData = pack( SIGNATURE_FORMAT,
+		CENTRAL_DIRECTORY_FILE_HEADER_SIGNATURE );
+	$fh->write( $sigData, SIGNATURE_LENGTH )
+		or return _ioError( "writing central directory header signature" );
+
+	my $fileNameLength = length( $self->fileName() );
+	my $extraFieldLength = length( $self->cdExtraField() );
+	my $fileCommentLength = length( $self->fileComment() );
+
+	my $header = pack( CENTRAL_DIRECTORY_FILE_HEADER_FORMAT,
+		$self->versionMadeBy(),
+		$self->fileAttributeFormat(),
+		$self->versionNeededToExtract(),
+		$self->bitFlag(),
+		$self->desiredCompressionMethod(),
+		$self->lastModFileDateTime(),
+		$self->crc32(),			# these three fields should have been updated
+		$self->_writeOffset(),	# by writing the data stream out
+		$self->uncompressedSize(),	#
+		$fileNameLength,
+		$extraFieldLength,
+		$fileCommentLength,
+		0,						# {'diskNumberStart'},
+		$self->internalFileAttributes(),
+		$self->externalFileAttributes(),
+		$self->_writeLocalHeaderRelativeOffset()
+	 );
+
+	$fh->write( $header, CENTRAL_DIRECTORY_FILE_HEADER_LENGTH )
+		or return _ioError( "writing central directory header" );
+	if ( $fileNameLength )
+	{
+		$fh->write( $self->fileName(), $fileNameLength )
+			or return _ioError( "writing central directory header signature" );
+	}
+	if ( $extraFieldLength )
+	{
+		$fh->write( $self->cdExtraField(), $extraFieldLength )
+			or return _ioError( "writing central directory extra field" );
+	}
+	if ( $fileCommentLength )
+	{
+		$fh->write( $self->fileComment(), $fileCommentLength )
+			or return _ioError( "writing central directory file comment" );
+	}
+
+	return AZ_OK;
+}
+
+# This writes a data descriptor to the given file handle.
+# Assumes that crc32, writeOffset, and uncompressedSize are
+# set correctly (they should be after a write).
+# Further, the local file header should have the
+# GPBF_HAS_DATA_DESCRIPTOR_MASK bit set.
+sub _writeDataDescriptor	# Archive::Zip::Member
+{
+	my $self = shift;
+	my $fh = shift;
+	my $header = pack( DATA_DESCRIPTOR_FORMAT,
+		$self->crc32(),
+		$self->_writeOffset(),
+		$self->uncompressedSize()
+	 );
+
+	$fh->write( $header, DATA_DESCRIPTOR_LENGTH )
+		or return _ioError( "writing data descriptor" );
+	return AZ_OK;
+}
+
+# Re-writes the local file header with new crc32 and compressedSize fields.
+# To be called after writing the data stream.
+# Assumes that filename and extraField sizes didn't change since last written.
+sub _refreshLocalFileHeader	# Archive::Zip::Member
+{
+	my $self = shift;
+	my $fh = shift;
+
+	my $here = $fh->tell();
+	$fh->seek( $self->_writeLocalHeaderRelativeOffset() + SIGNATURE_LENGTH,
+		IO::Seekable::SEEK_SET )
+			or return _ioError( "seeking to rewrite local header" );
+
+	my $header = pack( LOCAL_FILE_HEADER_FORMAT,
+		$self->versionNeededToExtract(),
+		$self->bitFlag(),
+		$self->desiredCompressionMethod(),
+		$self->lastModFileDateTime(),
+		$self->crc32(),
+		$self->_writeOffset(),
+		$self->uncompressedSize(),
+		length( $self->fileName() ),
+		length( $self->localExtraField() )
+		 );
+
+	$fh->write( $header, LOCAL_FILE_HEADER_LENGTH )
+		or return _ioError( "re-writing local header" );
+	$fh->seek( $here, IO::Seekable::SEEK_SET )
+			or return _ioError( "seeking after rewrite of local header" );
+
+	return AZ_OK;
+}
+
+=back
+
+=head2 Low-level member data reading
+
+It is possible to use lower-level routines to access member
+data streams, rather than the extract* methods and contents().
+
+For instance, here is how to print the uncompressed contents
+of a member in chunks using these methods:
+
+    my ( $member, $status, $bufferRef );
+    $member = $zip->memberNamed( 'xyz.txt' );
+    $member->desiredCompressionMethod( COMPRESSION_STORED );
+    $status = $member->rewindData();
+    die "error $status" if $status != AZ_OK;
+    while ( ! $member->readIsDone() )
+    {
+        ( $bufferRef, $status ) = $member->readChunk();
+        die "error $status" if $status != AZ_OK;
+        # do something with $bufferRef:
+        print $$bufferRef;
+    }
+    $member->endRead();
+
+=over 4
+
+=cut
+
+#--------------------------------
+
+=item readChunk( [$chunkSize] )
+
+This reads the next chunk of given size from the member's data stream and
+compresses or uncompresses it as necessary, returning a reference to the bytes
+read and a status.
+If size argument is not given, defaults to global set by
+Archive::Zip::setChunkSize.
+Status is AZ_OK on success. Returns C<( \$bytes, $status)>.
+
+    my ( $outRef, $status ) = $self->readChunk();
+    print $$outRef if $status != AZ_OK;
+
+=cut
+
+sub readChunk	# Archive::Zip::Member
+{
+	my ( $self, $chunkSize ) = @_;
+
+	if ( $self->readIsDone() )
+	{
+		$self->endRead();
+		my $dummy = '';
+		return ( \$dummy, AZ_STREAM_END );
+	}
+
+	$chunkSize = $Archive::Zip::ChunkSize if not defined( $chunkSize );
+	$chunkSize = $self->_readDataRemaining()
+		if $chunkSize > $self->_readDataRemaining();
+
+	my $buffer = '';
+	my $outputRef;
+	my ( $bytesRead, $status) = $self->_readRawChunk( \$buffer, $chunkSize );
+	return ( \$buffer, $status) if $status != AZ_OK;
+
+	$self->{'readDataRemaining'} -= $bytesRead;
+	$self->{'readOffset'} += $bytesRead;
+
+	if ( $self->compressionMethod() == COMPRESSION_STORED )
+	{
+		$self->{'crc32'} = $self->computeCRC32( $buffer, $self->{'crc32'} );
+	}
+
+	( $outputRef, $status) = &{$self->{'chunkHandler'}}( $self, \$buffer );
+	$self->{'writeOffset'} += length( $$outputRef );
+
+	$self->endRead()
+		if $self->readIsDone();
+
+	return ( $outputRef, $status);
+}
+
+# Read the next raw chunk of my data. Subclasses MUST implement.
+#	my ( $bytesRead, $status) = $self->_readRawChunk( \$buffer, $chunkSize );
+sub _readRawChunk	# Archive::Zip::Member
+{
+	my $self = shift;
+	return $self->_subclassResponsibility();
+}
+
+# A place holder to catch rewindData errors if someone ignores
+# the error code.
+sub _noChunk	# Archive::Zip::Member
+{
+	my $self = shift;
+	return ( \undef, _error( "trying to copy chunk when init failed" ));
+}
+
+# Basically a no-op so that I can have a consistent interface.
+# ( $outputRef, $status) = $self->_copyChunk( \$buffer );
+sub _copyChunk	# Archive::Zip::Member
+{
+	my ( $self, $dataRef ) = @_;
+	return ( $dataRef, AZ_OK );
+}
+
+
+# ( $outputRef, $status) = $self->_deflateChunk( \$buffer );
+sub _deflateChunk	# Archive::Zip::Member
+{
+	my ( $self, $buffer ) = @_;
+	my ( $out, $status ) = $self->_deflater()->deflate( $buffer );
+
+	if ( $self->_readDataRemaining() == 0 )
+	{
+		my $extraOutput;
+		( $extraOutput, $status ) = $self->_deflater()->flush();
+		$out .= $extraOutput;
+		$self->endRead();
+		return ( \$out, AZ_STREAM_END );
+	}
+	elsif ( $status == Z_OK )
+	{
+		return ( \$out, AZ_OK );
+	}
+	else
+	{
+		$self->endRead();
+		my $retval = _error( 'deflate error', $status);
+		my $dummy = '';
+		return ( \$dummy, $retval );
+	}
+}
+
+# ( $outputRef, $status) = $self->_inflateChunk( \$buffer );
+sub _inflateChunk	# Archive::Zip::Member
+{
+	my ( $self, $buffer ) = @_;
+	my ( $out, $status ) = $self->_inflater()->inflate( $buffer );
+	my $retval;
+	$self->endRead() if ( $status != Z_OK );
+	if ( $status == Z_OK || $status == Z_STREAM_END )
+	{
+		$retval = ( $status == Z_STREAM_END )
+			? AZ_STREAM_END : AZ_OK;
+		return ( \$out, $retval );
+	}
+	else
+	{
+		$retval = _error( 'inflate error', $status);
+		my $dummy = '';
+		return ( \$dummy, $retval );
+	}
+}
+
+#--------------------------------
+
+=item rewindData()
+
+Rewind data and set up for reading data streams or writing zip files.
+Can take options for C<inflateInit()> or C<deflateInit()>,
+but this isn't likely to be necessary.
+Subclass overrides should call this method.
+Returns C<AZ_OK> on success.
+
+=cut
+
+sub rewindData	# Archive::Zip::Member
+{
+	my $self = shift;
+	my $status;
+
+	# set to trap init errors
+	$self->{'chunkHandler'} = $self->can( '_noChunk' );
+
+	# Work around WinZip defect with 0-length DEFLATED files
+	$self->desiredCompressionMethod( COMPRESSION_STORED )
+		if $self->uncompressedSize() == 0;
+
+	# assume that we're going to read the whole file, and compute the CRC anew.
+	$self->{'crc32'} = 0 if ( $self->compressionMethod() == COMPRESSION_STORED );
+
+	# These are the only combinations of methods we deal with right now.
+	if ( $self->compressionMethod() == COMPRESSION_STORED
+			and $self->desiredCompressionMethod() == COMPRESSION_DEFLATED )
+	{
+		( $self->{'deflater'}, $status ) = Compress::Zlib::deflateInit(
+			'-Level' => $self->desiredCompressionLevel(),
+			'-WindowBits' => - MAX_WBITS(), # necessary magic
+			@_ );	# pass additional options
+		return _error( 'deflateInit error:', $status ) if $status != Z_OK;
+		$self->{'chunkHandler'} = $self->can( '_deflateChunk' );
+	}
+	elsif ( $self->compressionMethod() == COMPRESSION_DEFLATED
+			and $self->desiredCompressionMethod() == COMPRESSION_STORED )
+	{
+		( $self->{'inflater'}, $status ) = Compress::Zlib::inflateInit(
+			'-WindowBits' => - MAX_WBITS(), # necessary magic
+			@_ );	# pass additional options
+		return _error( 'inflateInit error:', $status ) if $status != Z_OK;
+		$self->{'chunkHandler'} = $self->can( '_inflateChunk' );
+	}
+	elsif ( $self->compressionMethod() == $self->desiredCompressionMethod() )
+	{
+		$self->{'chunkHandler'} = $self->can( '_copyChunk' );
+	}
+	else
+	{
+		return _error(
+			sprintf( "Unsupported compression combination: read %d, write %d",
+				$self->compressionMethod(),
+				$self->desiredCompressionMethod() )
+		 );
+	}
+
+	$self->{'dataEnded'} = 0;
+	$self->{'readDataRemaining'} = $self->compressedSize();
+	$self->{'readOffset'} = 0;
+
+	return AZ_OK;
+}
+
+#--------------------------------
+
+=item endRead()
+
+Reset the read variables and free the inflater or deflater.
+Must be called to close files, etc.
+
+Returns AZ_OK on success.
+
+=cut
+
+sub endRead	# Archive::Zip::Member
+{
+	my $self = shift;
+	delete $self->{'inflater'};
+	delete $self->{'deflater'};
+	$self->{'dataEnded'} = 1;
+	$self->{'readDataRemaining'} = 0;
+	return AZ_OK;
+}
+
+#--------------------------------
+
+=item readIsDone()
+
+Return true if the read has run out of data or errored out.
+
+=cut
+
+sub readIsDone	# Archive::Zip::Member
+{
+	my $self = shift;
+	return ( $self->_dataEnded() or ! $self->_readDataRemaining() );
+}
+
+#--------------------------------
+
+=item contents()
+
+Return the entire uncompressed member data or undef in scalar context.
+When called in array context, returns C<( $string, $status )>; status
+will be AZ_OK on success:
+
+    my $string = $member->contents();
+    # or
+    my ( $string, $status ) = $member->contents();
+    die "error $status" if $status != AZ_OK;
+
+Can also be used to set the contents of a member (this may change
+the class of the member):
+
+    $member->contents( "this is my new contents" );
+
+=cut
+
+sub contents	# Archive::Zip::Member
+{
+	my $self = shift;
+	my $newContents = shift;
+	if ( defined( $newContents ) )
+	{
+		$self->_become( STRINGMEMBERCLASS );
+		return $self->contents( $newContents );
+	}
+	else
+	{
+		my $oldCompression = 
+			$self->desiredCompressionMethod( COMPRESSION_STORED );
+		my $status = $self->rewindData( @_ );
+		if ( $status != AZ_OK )
+		{
+			$self->endRead();
+			return $status;
+		}
+		my $retval = '';
+		while ( $status == AZ_OK )
+		{
+			my $ref;
+			( $ref, $status ) = $self->readChunk( $self->_readDataRemaining() );
+			# did we get it in one chunk?
+			if ( length( $$ref ) == $self->uncompressedSize() )
+			{ $retval = $$ref }
+			else
+			{ $retval .= $$ref }
+		}
+		$self->desiredCompressionMethod( $oldCompression );
+		$self->endRead();
+		$status = AZ_OK if $status == AZ_STREAM_END;
+		$retval = undef if $status != AZ_OK;
+		return wantarray ? ( $retval, $status ) : $retval;
+	}
+}
+
+#--------------------------------
+
+=item extractToFileHandle( $fh )
+
+Extract (and uncompress, if necessary) my contents to the given file handle.
+Return AZ_OK on success.
+
+=cut
+
+sub extractToFileHandle	# Archive::Zip::Member
+{
+	my $self = shift;
+	return _error( "encryption unsupported" ) if $self->isEncrypted();
+	my $fh = shift;
+	_binmode( $fh );
+	my $oldCompression = $self->desiredCompressionMethod( COMPRESSION_STORED );
+	my $status = $self->rewindData( @_ );
+	$status = $self->_writeData( $fh ) if $status == AZ_OK;
+	$self->desiredCompressionMethod( $oldCompression );
+	$self->endRead();
+	return $status;
+}
+
+# write local header and data stream to file handle
+sub _writeToFileHandle	# Archive::Zip::Member
+{
+	my $self = shift;
+	my $fh = shift;
+	my $fhIsSeekable = shift;
+
+	# Determine if I need to write a data descriptor
+	# I need to do this if I can't refresh the header
+	# and I don't know compressed size or crc32 fields.
+	my $headerFieldsUnknown = ( ( $self->uncompressedSize() > 0 )
+		and ( $self->compressionMethod() == COMPRESSION_STORED
+			or $self->desiredCompressionMethod() == COMPRESSION_DEFLATED ) );
+
+	my $shouldWriteDataDescriptor =
+		( $headerFieldsUnknown and not $fhIsSeekable );
+
+	$self->hasDataDescriptor( 1 )
+		if ( $shouldWriteDataDescriptor );
+
+	$self->{'writeOffset'} = 0;
+
+	my $status = $self->rewindData();
+	( $status = $self->_writeLocalFileHeader( $fh ) )
+		if $status == AZ_OK;
+	( $status = $self->_writeData( $fh ) )
+		if $status == AZ_OK;
+	if ( $status == AZ_OK )
+	{
+		if ( $self->hasDataDescriptor() )
+		{
+			$status = $self->_writeDataDescriptor( $fh );
+		}
+		elsif ( $headerFieldsUnknown )
+		{
+			$status = $self->_refreshLocalFileHeader( $fh );
+		}
+	}
+
+	return $status;
+}
+
+# Copy my (possibly compressed) data to given file handle.
+# Returns C<AZ_OK> on success
+sub _writeData	# Archive::Zip::Member
+{
+	my $self = shift;
+	my $writeFh = shift;
+
+	return AZ_OK if ( $self->uncompressedSize() == 0 );
+	my $status;
+	my $chunkSize = $Archive::Zip::ChunkSize;
+	while ( $self->_readDataRemaining() > 0 )
+	{
+		my $outRef;
+		( $outRef, $status ) = $self->readChunk( $chunkSize );
+		return $status if ( $status != AZ_OK and $status != AZ_STREAM_END );
+
+		$writeFh->write( $$outRef, length( $$outRef ) )
+			or return _ioError( "write error during copy" );
+
+		last if $status == AZ_STREAM_END;
+	}
+	return AZ_OK;
+}
+
+
+# Return true if I depend on the named file
+sub _usesFileNamed
+{
+	return 0;
+}
+
+# ----------------------------------------------------------------------
+# class Archive::Zip::DirectoryMember
+# ----------------------------------------------------------------------
+
+package Archive::Zip::DirectoryMember;
+use File::Path;
+
+use vars qw( @ISA );
+@ISA = qw ( Archive::Zip::Member );
+BEGIN { use Archive::Zip qw( :ERROR_CODES :UTILITY_METHODS ) }
+
+sub _newNamed	# Archive::Zip::DirectoryMember
+{
+	my $class = shift;
+	my $name = shift;
+	my $self = $class->new( @_ );
+	$self->fileName( $name );
+	if ( -d $name )
+	{
+		my @stat = stat( _ );
+		$self->unixFileAttributes( $stat[2] );
+		$self->setLastModFileDateTimeFromUnix( $stat[9] );
+	}
+	else
+	{
+		$self->unixFileAttributes( $self->DEFAULT_DIRECTORY_PERMISSIONS );
+		$self->setLastModFileDateTimeFromUnix( time() );
+	}
+	return $self;
+}
+
+sub isDirectory	# Archive::Zip::DirectoryMember
+{ return 1; }
+
+sub extractToFileNamed	# Archive::Zip::DirectoryMember
+{
+	my $self = shift;
+	my $name = shift;
+	my $attribs = $self->unixFileAttributes() & 07777;
+	mkpath( $name, 0, $attribs );	# croaks on error
+	return AZ_OK;
+}
+
+sub fileName	# Archive::Zip::DirectoryMember
+{
+	my $self = shift;
+	my $newName = shift;
+	$newName =~ s{/?$}{/} if defined( $newName );
+	return $self->SUPER::fileName( $newName );
+}
+
+=back
+
+=head1 Archive::Zip::FileMember methods
+
+The Archive::Zip::FileMember class extends Archive::Zip::Member.
+It is the base class for both ZipFileMember and NewFileMember classes.
+This class adds an C<externalFileName> and an C<fh> member to keep
+track of the external file.
+
+=over 4
+
+=cut
+
+# ----------------------------------------------------------------------
+# class Archive::Zip::FileMember
+# Base class for classes that have file handles
+# to external files
+# ----------------------------------------------------------------------
+
+package Archive::Zip::FileMember;
+use vars qw( @ISA );
+@ISA = qw ( Archive::Zip::Member );
+BEGIN { use Archive::Zip qw( :UTILITY_METHODS ) }
+
+#--------------------------------
+
+=item externalFileName()
+
+Return my external filename.
+
+=cut
+
+sub externalFileName	# Archive::Zip::FileMember
+{ shift->{'externalFileName'} }
+
+#--------------------------------
+
+# Return true if I depend on the named file
+sub _usesFileNamed
+{
+	my $self = shift;
+	my $fileName = shift;
+	return $self->externalFileName eq $fileName;
+}
+
+=item fh()
+
+Return my read file handle.
+Automatically opens file if necessary.
+
+=cut
+
+sub fh	# Archive::Zip::FileMember
+{
+	my $self = shift;
+	$self->_openFile() if ! $self->{'fh'};
+	return $self->{'fh'};
+}
+
+# opens my file handle from my file name
+sub _openFile	# Archive::Zip::FileMember
+{
+	my $self = shift;
+	my ( $status, $fh ) = _newFileHandle( $self->externalFileName(), 'r' );
+	if ( !$status )
+	{
+		_ioError( "Can't open", $self->externalFileName() );
+		return undef;
+	}
+	$self->{'fh'} = $fh;
+	_binmode( $fh );
+	return $fh;
+}
+
+# Closes my file handle
+sub _closeFile	# Archive::Zip::FileMember
+{
+	my $self = shift;
+	$self->{'fh'} = undef;
+}
+
+# Make sure I close my file handle
+sub endRead	# Archive::Zip::FileMember
+{
+	my $self = shift;
+	$self->_closeFile();
+	return $self->SUPER::endRead( @_ );
+}
+
+sub _become	# Archive::Zip::FileMember
+{
+	my $self = shift;
+	my $newClass = shift;
+	return $self if ref( $self ) eq $newClass;
+	delete( $self->{'externalFileName'} );
+	delete( $self->{'fh'} );
+	return $self->SUPER::_become( $newClass );
+}
+
+# ----------------------------------------------------------------------
+# class Archive::Zip::NewFileMember
+# Used when adding a pre-existing file to an archive
+# ----------------------------------------------------------------------
+
+package Archive::Zip::NewFileMember;
+use vars qw( @ISA );
+@ISA = qw ( Archive::Zip::FileMember );
+
+BEGIN { use Archive::Zip qw( :CONSTANTS :ERROR_CODES :UTILITY_METHODS ) }
+
+# Given a file name, set up for eventual writing.
+sub _newFromFileNamed	# Archive::Zip::NewFileMember
+{
+	my $class = shift;
+	my $fileName = shift;
+	return undef if ! ( -r $fileName && ( -f _ || -l _ ) );
+	my $self = $class->new( @_ );
+	$self->fileName( $fileName );
+	$self->{'externalFileName'} = $fileName;
+	$self->{'compressionMethod'} = COMPRESSION_STORED;
+	my @stat = stat( _ );
+	$self->{'compressedSize'} = $self->{'uncompressedSize'} = $stat[7];
+	$self->desiredCompressionMethod( ( $self->compressedSize() > 0 )
+		? COMPRESSION_DEFLATED
+		: COMPRESSION_STORED );
+	$self->unixFileAttributes( $stat[2] );
+	$self->setLastModFileDateTimeFromUnix( $stat[9] );
+	$self->isTextFile( -T _ );
+	return $self;
+}
+
+sub rewindData	# Archive::Zip::NewFileMember
+{
+	my $self = shift;
+
+	my $status = $self->SUPER::rewindData( @_ );
+	return $status if $status != AZ_OK;
+
+	return AZ_IO_ERROR if ! $self->fh();
+	$self->fh()->clearerr();
+	$self->fh()->seek( 0, IO::Seekable::SEEK_SET )
+		or return _ioError( "rewinding", $self->externalFileName() );
+	return AZ_OK;
+}
+
+# Return bytes read. Note that first parameter is a ref to a buffer.
+# my $data;
+# my ( $bytesRead, $status) = $self->readRawChunk( \$data, $chunkSize );
+sub _readRawChunk	# Archive::Zip::NewFileMember
+{
+	my ( $self, $dataRef, $chunkSize ) = @_;
+	return ( 0, AZ_OK ) if ( ! $chunkSize );
+	my $bytesRead = $self->fh()->read( $$dataRef, $chunkSize )
+		or return ( 0, _ioError( "reading data" ) );
+	return ( $bytesRead, AZ_OK );
+}
+
+# If I already exist, extraction is a no-op.
+sub extractToFileNamed	# Archive::Zip::NewFileMember
+{
+	my $self = shift;
+	my $name = shift;
+	if ( $name eq $self->fileName() and -r $name )
+	{
+		return AZ_OK;
+	}
+	else
+	{
+		return $self->SUPER::extractToFileNamed( $name, @_ );
+	}
+}
+
+=back
+
+=head1 Archive::Zip::ZipFileMember methods
+
+The Archive::Zip::ZipFileMember class represents members that have
+been read from external zip files.
+
+=over 4
+
+=cut
+
+# ----------------------------------------------------------------------
+# class Archive::Zip::ZipFileMember
+# This represents a member in an existing zip file on disk.
+# ----------------------------------------------------------------------
+
+package Archive::Zip::ZipFileMember;
+use vars qw( @ISA );
+@ISA = qw ( Archive::Zip::FileMember );
+
+BEGIN { use Archive::Zip qw( :CONSTANTS :ERROR_CODES :PKZIP_CONSTANTS
+	:UTILITY_METHODS ) }
+
+# Create a new Archive::Zip::ZipFileMember
+# given a filename and optional open file handle
+sub _newFromZipFile	# Archive::Zip::ZipFileMember
+{
+	my $class = shift;
+	my $fh = shift;
+	my $externalFileName = shift;
+	my $self = $class->new(
+		'crc32' => 0,
+		'diskNumberStart' => 0,
+		'localHeaderRelativeOffset' => 0,
+		'dataOffset' =>  0,	# localHeaderRelativeOffset + header length
+		@_
+	 );
+	$self->{'externalFileName'} = $externalFileName;
+	$self->{'fh'} = $fh;
+	return $self;
+}
+
+sub isDirectory	# Archive::Zip::FileMember
+{
+	my $self = shift;
+	return ( substr( $self->fileName(), -1, 1 ) eq '/'
+		and $self->uncompressedSize() == 0 );
+}
+
+# Because I'm going to delete the file handle, read the local file
+# header if the file handle is seekable. If it isn't, I assume that
+# I've already read the local header.
+# Return ( $status, $self )
+
+sub _become	# Archive::Zip::ZipFileMember
+{
+	my $self = shift;
+	my $newClass = shift;
+	return $self if ref( $self ) eq $newClass;
+
+	my $status = AZ_OK;
+
+	if ( _isSeekable( $self->fh() ) )
+	{
+		my $here = $self->fh()->tell();
+		$status = $self->fh()->seek(
+			$self->localHeaderRelativeOffset() + SIGNATURE_LENGTH,
+			IO::Seekable::SEEK_SET );
+		if ( ! $status )
+		{
+			$self->fh()->seek( $here );
+			_ioError( "seeking to local header" );
+			return $self;
+		}
+		$self->_readLocalFileHeader();
+		$self->fh()->seek( $here, IO::Seekable::SEEK_SET );
+	}
+
+	delete( $self->{'diskNumberStart'} );
+	delete( $self->{'localHeaderRelativeOffset'} );
+	delete( $self->{'dataOffset'} );
+
+	return $self->SUPER::_become( $newClass );
+}
+
+#--------------------------------
+
+=item diskNumberStart()
+
+Returns the disk number that my local header resides
+in. Had better be 0.
+
+=cut
+
+sub diskNumberStart	# Archive::Zip::ZipFileMember
+{ shift->{'diskNumberStart'} }
+
+#--------------------------------
+
+=item localHeaderRelativeOffset()
+
+Returns the offset into the zip file where my local header is.
+
+=cut
+
+sub localHeaderRelativeOffset	# Archive::Zip::ZipFileMember
+{ shift->{'localHeaderRelativeOffset'} }
+
+#--------------------------------
+
+=item dataOffset()
+
+Returns the offset from the beginning of the zip file to
+my data.
+
+=cut
+
+sub dataOffset	# Archive::Zip::ZipFileMember
+{ shift->{'dataOffset'} }
+
+# Skip local file header, updating only extra field stuff.
+# Assumes that fh is positioned before signature.
+sub _skipLocalFileHeader	# Archive::Zip::ZipFileMember
+{
+	my $self = shift;
+	my $header;
+	$self->fh()->read( $header, LOCAL_FILE_HEADER_LENGTH )
+		or return _ioError( "reading local file header" );
+	my $fileNameLength;
+	my $extraFieldLength;
+	(	undef, 	# $self->{'versionNeededToExtract'},
+		undef,	# $self->{'bitFlag'},
+		undef,	# $self->{'compressionMethod'},
+		undef,	# $self->{'lastModFileDateTime'},
+		undef,	# $crc32,
+		undef,	# $compressedSize,
+		undef,	# $uncompressedSize,
+		$fileNameLength,
+		$extraFieldLength ) = unpack( LOCAL_FILE_HEADER_FORMAT, $header );
+
+	if ( $fileNameLength )
+	{
+		$self->fh()->seek( $fileNameLength, IO::Seekable::SEEK_CUR )
+			or return _ioError( "skipping local file name" );
+	}
+
+	if ( $extraFieldLength )
+	{
+		$self->fh()->read( $self->{'localExtraField'}, $extraFieldLength )
+			or return _ioError( "reading local extra field" );
+	}
+
+	$self->{'dataOffset'} = $self->fh()->tell();
+
+	return AZ_OK;
+}
+
+# Read from a local file header into myself. Returns AZ_OK if successful.
+# Assumes that fh is positioned after signature.
+# Note that crc32, compressedSize, and uncompressedSize will be 0 if
+# GPBF_HAS_DATA_DESCRIPTOR_MASK is set in the bitFlag.
+
+sub _readLocalFileHeader	# Archive::Zip::ZipFileMember
+{
+	my $self = shift;
+	my $header;
+	$self->fh()->read( $header, LOCAL_FILE_HEADER_LENGTH )
+		or return _ioError( "reading local file header" );
+	my $fileNameLength;
+	my $crc32;
+	my $compressedSize;
+	my $uncompressedSize;
+	my $extraFieldLength;
+	(	$self->{'versionNeededToExtract'},
+		$self->{'bitFlag'},
+		$self->{'compressionMethod'},
+		$self->{'lastModFileDateTime'},
+		$crc32,
+		$compressedSize,
+		$uncompressedSize,
+		$fileNameLength,
+		$extraFieldLength ) = unpack( LOCAL_FILE_HEADER_FORMAT, $header );
+
+	if ( $fileNameLength )
+	{
+		my $fileName;
+		$self->fh()->read( $fileName, $fileNameLength )
+			or return _ioError( "reading local file name" );
+		$self->fileName( $fileName );
+	}
+
+	if ( $extraFieldLength )
+	{
+		$self->fh()->read( $self->{'localExtraField'}, $extraFieldLength )
+			or return _ioError( "reading local extra field" );
+	}
+
+	$self->{'dataOffset'} = $self->fh()->tell();
+
+	# Don't trash these fields from the CD if we already have them.
+	if ( not $self->hasDataDescriptor() )
+	{
+		$self->{'crc32'} = $crc32;
+		$self->{'compressedSize'} = $compressedSize;
+		$self->{'uncompressedSize'} = $uncompressedSize;
+	}
+
+	# We ignore data descriptors (we don't read them,
+	# and we compute elsewhere whether we need to write them ).
+	# And, we have the necessary data from the CD header.
+	# So mark this entry as not having a data descriptor.
+	$self->hasDataDescriptor( 0 );
+
+	return AZ_OK;
+}
+
+
+# Read a Central Directory header. Return AZ_OK on success.
+# Assumes that fh is positioned right after the signature.
+
+sub _readCentralDirectoryFileHeader	# Archive::Zip::ZipFileMember
+{
+	my $self = shift;
+	my $fh = $self->fh();
+	my $header = '';
+	$fh->read( $header, CENTRAL_DIRECTORY_FILE_HEADER_LENGTH )
+		or return _ioError( "reading central dir header" );
+	my ( $fileNameLength, $extraFieldLength, $fileCommentLength );
+	(
+		$self->{'versionMadeBy'},
+		$self->{'fileAttributeFormat'},
+		$self->{'versionNeededToExtract'},
+		$self->{'bitFlag'},
+		$self->{'compressionMethod'},
+		$self->{'lastModFileDateTime'},
+		$self->{'crc32'},
+		$self->{'compressedSize'},
+		$self->{'uncompressedSize'},
+		$fileNameLength,
+		$extraFieldLength,
+		$fileCommentLength,
+		$self->{'diskNumberStart'},
+		$self->{'internalFileAttributes'},
+		$self->{'externalFileAttributes'},
+		$self->{'localHeaderRelativeOffset'}
+	 ) = unpack( CENTRAL_DIRECTORY_FILE_HEADER_FORMAT, $header );
+
+	if ( $fileNameLength )
+	{
+		$fh->read( $self->{'fileName'}, $fileNameLength )
+			or return _ioError( "reading central dir filename" );
+	}
+	if ( $extraFieldLength )
+	{
+		$fh->read( $self->{'cdExtraField'}, $extraFieldLength )
+			or return _ioError( "reading central dir extra field" );
+	}
+	if ( $fileCommentLength )
+	{
+		$fh->read( $self->{'fileComment'}, $fileCommentLength )
+			or return _ioError( "reading central dir file comment" );
+	}
+
+	$self->desiredCompressionMethod( $self->compressionMethod() );
+
+	return AZ_OK;
+}
+
+sub rewindData	# Archive::Zip::ZipFileMember
+{
+	my $self = shift;
+
+	my $status = $self->SUPER::rewindData( @_ );
+	return $status if $status != AZ_OK;
+
+	return AZ_IO_ERROR if ! $self->fh();
+
+	$self->fh()->clearerr();
+
+	# Seek to local file header.
+	# The only reason that I'm doing this this way is that the extraField
+	# length seems to be different between the CD header and the LF header.
+	$self->fh()->seek( $self->localHeaderRelativeOffset() + SIGNATURE_LENGTH,
+		IO::Seekable::SEEK_SET )
+			or return _ioError( "seeking to local header" );
+
+	# skip local file header
+	$status = $self->_skipLocalFileHeader();
+	return $status if $status != AZ_OK;
+
+	# Seek to beginning of file data
+	$self->fh()->seek( $self->dataOffset(), IO::Seekable::SEEK_SET )
+		or return _ioError( "seeking to beginning of file data" );
+
+	return AZ_OK;
+}
+
+# Return bytes read. Note that first parameter is a ref to a buffer.
+# my $data;
+# my ( $bytesRead, $status) = $self->readRawChunk( \$data, $chunkSize );
+sub _readRawChunk	# Archive::Zip::ZipFileMember
+{
+	my ( $self, $dataRef, $chunkSize ) = @_;
+	return ( 0, AZ_OK )
+		if ( ! $chunkSize );
+	my $bytesRead = $self->fh()->read( $$dataRef, $chunkSize )
+		or return ( 0, _ioError( "reading data" ) );
+	return ( $bytesRead, AZ_OK );
+}
+
+# ----------------------------------------------------------------------
+# class Archive::Zip::StringMember ( concrete )
+# A Zip member whose data lives in a string
+# ----------------------------------------------------------------------
+
+package Archive::Zip::StringMember;
+use vars qw( @ISA );
+@ISA = qw ( Archive::Zip::Member );
+
+BEGIN { use Archive::Zip qw( :CONSTANTS :ERROR_CODES ) }
+
+# Create a new string member. Default is COMPRESSION_STORED.
+# Can take a ref to a string as well.
+sub _newFromString	# Archive::Zip::StringMember
+{
+	my $class = shift;
+	my $string = shift;
+	my $name = shift;
+	my $self = $class->new( @_ );
+	$self->contents( $string );
+	$self->fileName( $name ) if defined( $name );
+	# Set the file date to now
+	$self->setLastModFileDateTimeFromUnix( time() );
+	$self->unixFileAttributes( $self->DEFAULT_FILE_PERMISSIONS );
+	return $self;
+}
+
+sub _become	# Archive::Zip::StringMember
+{
+	my $self = shift;
+	my $newClass = shift;
+	return $self if ref( $self ) eq $newClass;
+	delete( $self->{'contents'} );
+	return $self->SUPER::_become( $newClass );
+}
+
+# Get or set my contents. Note that we do not call the superclass
+# version of this, because it calls us.
+sub contents    # Archive::Zip::StringMember
+{
+	my $self = shift;
+	my $string = shift;
+	if ( defined( $string ) )
+	{
+		$self->{'contents'} = ( ref( $string ) eq 'SCALAR' )
+			? $$string
+			: $string;
+		$self->{'uncompressedSize'}
+			= $self->{'compressedSize'}
+			= length( $self->{'contents'} );
+		$self->{'compressionMethod'} = COMPRESSION_STORED;
+	}
+	return $self->{'contents'};
+}
+
+# Return bytes read. Note that first parameter is a ref to a buffer.
+# my $data;
+# my ( $bytesRead, $status) = $self->readRawChunk( \$data, $chunkSize );
+sub _readRawChunk	# Archive::Zip::StringMember
+{
+	my ( $self, $dataRef, $chunkSize ) = @_;
+	$$dataRef = substr( $self->contents(), $self->_readOffset(), $chunkSize );
+	return ( length( $$dataRef ), AZ_OK );
+}
+
+1;
+__END__
+
+=back
+
+=head1 AUTHOR
+
+Ned Konz, perl@bike-nomad.com
+
+=head1 COPYRIGHT
+
+Copyright (c) 2000 Ned Konz. All rights reserved.  This program is free
+software; you can redistribute it and/or modify it under the same terms
+as Perl itself.
+
+=head1 SEE ALSO
+
+L<Compress::Zlib>
+
+=cut
+
+# vim: ts=4 sw=4 columns=80
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Archive/Zip/BufferedFileHandle.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,139 @@
+# Copyright (c) 2000 Ned Konz. All rights reserved.  This program is free
+# software; you can redistribute it and/or modify it under the same terms
+# as Perl itself.
+
+# File handle that uses a string internally and can seek
+# This is given as a demo for getting a zip file written
+# to a string.
+# I probably should just use IO::Scalar instead.
+# Ned Konz, March 2000
+#
+# $Revision: 1.3 $
+
+use strict;
+package Archive::Zip::BufferedFileHandle;
+use FileHandle ();
+use Carp;
+
+sub new
+{
+	my $class = shift || __PACKAGE__;
+	$class = ref($class) || $class;
+	my $self = bless( { 
+		content => '', 
+		position => 0, 
+		size => 0
+	}, $class );
+	return $self;
+}
+
+# Utility method to read entire file
+sub readFromFile
+{
+	my $self = shift;
+	my $fileName = shift;
+	my $fh = FileHandle->new($fileName, "r");
+	if (! $fh)
+	{
+		Carp::carp("Can't open $fileName: $!\n");
+		return undef;
+	}
+	local $/ = undef;
+	$self->{content} = <$fh>;
+	$self->{size} = length($self->{content});
+	return $self;
+}
+
+sub contents
+{
+	my $self = shift;
+	if (@_)
+	{
+		$self->{content} = shift;
+		$self->{size} = length($self->{content});
+	}
+	return $self->{content};
+}
+
+sub binmode
+{ 1 }
+
+sub close
+{ 1 }
+
+sub eof
+{
+	my $self = shift;
+	return $self->{position} >= $self->{size};
+}
+
+sub seek
+{
+	my $self = shift;
+	my $pos = shift;
+	my $whence = shift;
+
+	# SEEK_SET
+	if ($whence == 0) { $self->{position} = $pos; }
+	# SEEK_CUR
+	elsif ($whence == 1) { $self->{position} += $pos; }
+	# SEEK_END
+	elsif ($whence == 2) { $self->{position} = $self->{size} + $pos; }
+	else { return 0; }
+
+	return 1;
+}
+
+sub tell
+{ return shift->{position}; }
+
+# Copy my data to given buffer
+sub read
+{
+	my $self = shift;
+	my $buf = \($_[0]); shift;
+	my $len = shift;
+	my $offset = shift || 0;
+
+	$$buf = '' if not defined($$buf);
+	my $bytesRead = ($self->{position} + $len > $self->{size})
+		? ($self->{size} - $self->{position})
+		: $len;
+	substr($$buf, $offset, $bytesRead) 
+		= substr($self->{content}, $self->{position}, $bytesRead);
+	$self->{position} += $bytesRead;
+	return $bytesRead;
+}
+
+# Copy given buffer to me
+sub write
+{
+	my $self = shift;
+	my $buf = \($_[0]); shift;
+	my $len = shift;
+	my $offset = shift || 0;
+
+	$$buf = '' if not defined($$buf);
+	my $bufLen = length($$buf);
+	my $bytesWritten = ($offset + $len > $bufLen)
+		? $bufLen - $offset
+		: $len;
+	substr($self->{content}, $self->{position}, $bytesWritten)
+		= substr($$buf, $offset, $bytesWritten);
+	$self->{size} = length($self->{content});
+	return $bytesWritten;
+}
+
+sub clearerr() { 1 }
+
+# vim: ts=4 sw=4
+1;
+__END__
+
+=head1 COPYRIGHT
+
+Copyright (c) 2000 Ned Konz. All rights reserved.  This program is free
+software; you can redistribute it and/or modify it under the same terms
+as Perl itself.
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Archive/Zip/MockFileHandle.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,87 @@
+# Copyright (c) 2000 Ned Konz. All rights reserved.  This program is free
+# software; you can redistribute it and/or modify it under the same terms
+# as Perl itself.
+
+# Output file handle that calls a custom write routine
+# Ned Konz, March 2000
+# This is provided to help with writing zip files
+# when you have to process them a chunk at a time.
+#
+# See the examples.
+#
+# $Revision: 1.2 $
+
+use strict;
+package Archive::Zip::MockFileHandle;
+
+sub new
+{
+	my $class = shift || __PACKAGE__;
+	$class = ref($class) || $class;
+	my $self = bless( { 
+		'position' => 0, 
+		'size' => 0
+	}, $class );
+	return $self;
+}
+
+sub eof
+{
+	my $self = shift;
+	return $self->{'position'} >= $self->{'size'};
+}
+
+# Copy given buffer to me
+sub write
+{
+	my $self = shift;
+	my $buf = \($_[0]); shift;
+	my $len = shift;
+	my $offset = shift || 0;
+
+	$$buf = '' if not defined($$buf);
+	my $bufLen = length($$buf);
+	my $bytesWritten = ($offset + $len > $bufLen)
+		? $bufLen - $offset
+		: $len;
+	$bytesWritten = $self->writeHook(substr($$buf, $offset, $bytesWritten));
+	if ($self->{'position'} + $bytesWritten > $self->{'size'})
+	{
+		$self->{'size'} = $self->{'position'} + $bytesWritten
+	}
+	$self->{'position'} += $bytesWritten;
+	return $bytesWritten;
+}
+
+# Called on each write.
+# Override in subclasses.
+# Return number of bytes written (0 on error).
+sub writeHook
+{
+	my $self = shift;
+	my $bytes = shift;
+	return length($bytes);
+}
+
+sub binmode { 1 } 
+
+sub close { 1 } 
+
+sub clearerr { 1 } 
+
+# I'm write-only!
+sub read { 0 } 
+
+sub tell { return shift->{'position'} }
+
+# vim: ts=4 sw=4
+1;
+__END__
+
+=head1 COPYRIGHT
+
+Copyright (c) 2000 Ned Konz. All rights reserved.  This program is free
+software; you can redistribute it and/or modify it under the same terms
+as Perl itself.
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Archive/Zip/Tree.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,238 @@
+# Copyright (c) 2000 Ned Konz. All rights reserved.  This program is free
+# software; you can redistribute it and/or modify it under the same terms
+# as Perl itself.
+
+# $Revision: 1.5 $
+package Archive::Zip::Archive;
+use File::Find ();
+use Archive::Zip qw(:ERROR_CODES :UTILITY_METHODS);
+
+=head1 NAME
+
+Archive::Zip::Tree -- methods for adding/extracting trees using Archive::Zip
+
+=head1 SYNOPSIS
+
+  use Archive::Zip;
+  use Archive::Zip::Tree;
+  my $zip = Archive::Zip->new();
+  # add all readable files and directories below . as xyz/*
+  $zip->addTree( '.', 'xyz' );	
+  # add all readable plain files below /abc as /def/*
+  $zip->addTree( '/abc', '/def', sub { -f && -r } );	
+  # add all .c files below /tmp as stuff/*
+  $zip->addTreeMatching( '/tmp', 'stuff', '\.c$' );
+  # add all .o files below /tmp as stuff/* if they aren't writable
+  $zip->addTreeMatching( '/tmp', 'stuff', '\.o$', sub { ! -w } );
+  # and write them into a file
+  $zip->writeToFile('xxx.zip');
+
+  # now extract the same files into /tmpx
+  $zip->extractTree( 'stuff', '/tmpx' );
+
+=head1 METHODS
+
+=over 4
+
+=item $zip->addTree( $root, $dest [,$pred] )
+
+$root is the root of the tree of files and directories to be added
+
+$dest is the name for the root in the zip file (undef or blank means to use
+relative pathnames)
+
+C<$pred> is an optional subroutine reference to select files: it is passed the
+name of the prospective file or directory using C<$_>,
+and if it returns true, the file or
+directory will be included.  The default is to add all readable files and
+directories.
+
+For instance, using
+
+  my $pred = sub { /\.txt/ };
+  $zip->addTree( '.', '.', $pred );
+
+will add all the .txt files in and below the current directory,
+using relative names, and making the names identical in the zipfile:
+
+  original name           zip member name
+  ./xyz                   xyz
+  ./a/                    a/
+  ./a/b                   a/b
+
+To use absolute pathnames, just pass them in:
+
+$zip->addTree( '/a/b', '/a/b' );
+
+  original name           zip member name
+  /a/                     /a/
+  /a/b                    /a/b
+
+To translate relative to absolute pathnames, just pass them in:
+
+$zip->addTree( '.', '/c/d' );
+
+  original name           zip member name
+  ./xyz                   /c/d/xyz
+  ./a/                    /c/d/a/
+  ./a/b                   /c/d/a/b
+
+To translate absolute to relative pathnames, just pass them in:
+
+$zip->addTree( '/c/d', 'a' );
+
+  original name           zip member name
+  /c/d/xyz                a/xyz
+  /c/d/a/                 a/a/
+  /c/d/a/b                a/a/b
+
+Returns AZ_OK on success.
+
+Note that this will not follow symbolic links to directories.
+
+Note also that this does not check for the validity of filenames.
+
+=back
+
+=cut
+
+sub addTree
+{
+	my $self = shift;
+	my $root = shift or return _error("root arg missing in call to addTree()");
+	my $dest = shift || '';
+	my $pred = shift || sub { -r };
+	$root =~ s{\\}{/}g;	# normalize backslashes in case user is misguided
+	$root =~ s{([^/])$}{$1/};	# append slash if necessary
+	$dest =~ s{([^/])$}{$1/} if $dest;	# append slash if necessary
+	my @files;
+	File::Find::find( sub { push( @files, $File::Find::name ) }, $root );
+	@files = grep { &$pred } @files;	# pass arg via local $_
+	foreach my $fileName ( @files )
+	{
+		( my $archiveName = $fileName ) =~ s{^\Q$root}{$dest};
+		$archiveName =~ s{^\./}{};
+		next if $archiveName =~ m{^\.?/?$};	# skip current dir
+		my $member = ( -d $fileName )
+			? $self->addDirectory( $fileName, $archiveName )
+			: $self->addFile( $fileName, $archiveName );
+		return _error( "add $fileName failed in addTree()" ) if !$member;
+	}
+	return AZ_OK;
+}
+
+=over 4
+
+=item $zip->addTreeMatching( $root, $dest, $pattern [,$pred] )
+
+$root is the root of the tree of files and directories to be added
+
+$dest is the name for the root in the zip file (undef means to use relative
+pathnames)
+
+$pattern is a (non-anchored) regular expression for filenames to match
+
+$pred is an optional subroutine reference to select files: it is passed the
+name of the prospective file or directory in C<$_>,
+and if it returns true, the file or
+directory will be included.  The default is to add all readable files and
+directories.
+
+To add all files in and below the current dirctory
+whose names end in C<.pl>, and make them extract into a subdirectory
+named C<xyz>, do this:
+
+  $zip->addTreeMatching( '.', 'xyz', '\.pl$' )
+
+To add all I<writable> files in and below the dirctory named C</abc>
+whose names end in C<.pl>, and make them extract into a subdirectory
+named C<xyz>, do this:
+
+  $zip->addTreeMatching( '/abc', 'xyz', '\.pl$', sub { -w } )
+
+Returns AZ_OK on success.
+
+Note that this will not follow symbolic links to directories.
+
+=back
+
+=cut
+
+sub addTreeMatching
+{
+	my $self = shift;
+	my $root = shift
+		or return _error("root arg missing in call to addTreeMatching()");
+	my $dest = shift || '';
+	my $pattern = shift
+		or return _error("pattern missing in call to addTreeMatching()");
+	my $pred = shift || sub { -r };
+	my $matcher = sub { m{$pattern} && &$pred };
+	return $self->addTree( $root, $dest, $matcher );
+}
+
+=over 4
+
+=item $zip->extractTree( $root, $dest )
+
+Extracts all the members below a given root. Will
+translate that root to a given dest pathname.
+
+For instance,
+
+   $zip->extractTree( '/a/', 'd/e/' );
+
+when applied to a zip containing the files:
+ /a/x /a/b/c /d/e
+
+will extract:
+ /a/x to d/e/x
+ /a/b/c to d/e/b/c
+
+and ignore /d/e
+
+=back 
+
+=cut
+
+sub extractTree
+{
+	my $self = shift();
+	my $root = shift();
+	return _error("root arg missing in call to extractTree()")
+		unless defined($root);
+	my $dest = shift || '.';
+	$root =~ s{\\}{/}g;	# normalize backslashes in case user is misguided
+	$root =~ s{([^/])$}{$1/};	# append slash if necessary
+	my @members = $self->membersMatching( "^$root" );
+	foreach my $member ( @members )
+	{
+		my $fileName = $member->fileName(); 
+		$fileName =~ s{$root}{$dest};
+		my $status = $member->extractToFileNamed( $fileName );
+		return $status if $status != AZ_OK;
+	}
+	return AZ_OK;
+}
+
+1;
+__END__
+
+=head1 AUTHOR
+
+Ned Konz, perl@bike-nomad.com
+
+=head1 COPYRIGHT
+
+Copyright (c) 2000 Ned Konz. All rights reserved.  This program is free
+software; you can redistribute it and/or modify it under the same terms
+as Perl itself.
+
+=head1 SEE ALSO
+
+L<Compress::Zlib>
+L<Archive::Zip>
+
+=cut
+
+# vim: ts=4 sw=4 columns=80
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/BinInfo	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,177 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'BinInfo');
+my $envDb;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions('h' => \$help, 'v+' => \$verbose);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  unless (scalar (@ARGV) == 1) {
+    print "Error: Invalid arguments\n";
+    Usage(1);
+  }
+
+  $envDb = EnvDb->Open($iniData, $verbose);
+
+  if ($ARGV[0] =~ /[\*\?]/) {
+    my $glob = shift @ARGV;
+    foreach my $entry (@{Utils::ReadGlob($glob)}) {
+      Utils::AbsoluteFileName(\$entry);
+      print "\nFile:        $entry\n";
+      BinInfo($entry);
+    }
+  }
+  elsif (-f $ARGV[0]) {
+    my $binary = shift @ARGV;
+    Utils::AbsoluteFileName(\$binary);
+    BinInfo($binary);
+  }
+  else {
+    my $comp = shift @ARGV;
+    ListBins($comp);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+  
+  Utils::PrintDeathMessage($exitCode, "\nUsage: bininfo [options] <binary_file> | <component>
+
+options:
+
+-h  help
+-v  verbose output (-vv very verbose)\n");
+}
+
+sub BinInfo {
+  my $binary = shift;
+  my $info = $envDb->BinaryInfo($binary);
+  $iniData->TableFormatter->PrintTable($info);
+}
+
+sub ListBins {
+  my $comp = shift;
+  unless ($envDb->Version($comp)) {
+    print "Error: \"$comp\" is not a file and is not a component that is currently installed\n";
+    Usage(1);
+  }
+  my $info = $envDb->ListBins($comp);
+  $iniData->TableFormatter->PrintTable($info, 1);
+}
+
+
+
+__END__
+
+=head1 NAME
+
+BinInfo - Displays information about a currently installed binary file.
+
+=head1 SYNOPSIS
+
+  bininfo [options] <binary_file> | <component>
+
+options:
+
+  -h  help
+  -v  verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+If given a file name, prints the name of the component that owns the binary, the currently installed version and its status. For example:
+
+ D:\>bininfo \epoc32\release\wins\udeb\brdcst.dll
+ Component:   brdcst
+ Version:     001
+ Status:      pending release
+
+If given a component name, displays a list of all the binary files owned by that component and their status. For example:
+
+ D:\>bininfo brdcst
+ File                                                     Status
+
+ \EPOC32\INCLUDE\brdcst.h                                 clean
+ \EPOC32\RELEASE\THUMB\UREL\BRDCST.DLL                    clean
+ \EPOC32\RELEASE\THUMB\UREL\BRDCST.DLL.MAP                clean
+ \EPOC32\RELEASE\THUMB\UREL\BRDCST.LIB                    clean
+ \EPOC32\RELEASE\THUMB\UREL\BRDSRV.EXE                    clean
+ \EPOC32\RELEASE\THUMB\UREL\BRDSRV.EXE.MAP                clean
+ \EPOC32\RELEASE\THUMB\UREL\BRDSRV.LIB                    clean
+ \EPOC32\RELEASE\WINS\UDEB\BRDCST.DLL                     clean
+ \EPOC32\RELEASE\WINS\UDEB\BRDCST.LIB                     clean
+ \EPOC32\RELEASE\WINS\UDEB\BRDCST.PDB                     clean
+ \EPOC32\RELEASE\WINS\UDEB\BRDSRV.LIB                     clean
+ \EPOC32\RELEASE\WINS\UDEB\Z\SYSTEM\PROGRAMS\BRDSRV.DLL   clean
+ \EPOC32\RELEASE\WINS\UDEB\Z\SYSTEM\PROGRAMS\BRDSRV.PDB   clean
+ \EPOC32\rom\include\brdcst.iby                           clean
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/BinInfo.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/BldDocs	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,347 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use CGI qw(:standard);
+use FindBin;
+use lib "$FindBin::Bin";
+use Utils;
+use Cwd;
+use File::Basename;
+use Pod::Html;
+use Getopt::Long;
+
+$|++;
+
+#
+# Constants.
+#
+
+my $KDocDir = "..\\doc";
+my @intro = ({fileName => "HistoricPerspective",
+	      caption => "Historic Perspective",
+	      comment => ""},
+#	     {fileName => "Environment",
+#	      caption => "Licensee Product Environment",
+#	      comment => ""},
+	     {fileName => "QuickStart",
+	      caption => "Quick Start",
+	      comment => ""},
+	     {fileName => "MakingReleases",
+	      caption => "Making Releases",
+	      comment => ""},
+	     {fileName => "Installation",
+	      caption => "Installation Guide",
+	      comment => ""},
+	     {fileName => "ExportingReleases",
+	      caption => "Exporting and Importing Releases",
+	      comment => ""},
+	     {fileName => "FurtherInformation",
+	      caption => "Further Information",
+	      comment => ""},
+	     {fileName => "Optimisation",
+	      caption => "Optimisation",
+	      comment => ""},
+	     {fileName => "FAQ",
+	      caption => "Frequently Asked Questions",
+	      comment => ""});
+my @commands = ({fileName => "BinInfo"},
+		{fileName => "BuildRel"},
+		{fileName => "CleanEnv"},
+		{fileName => "CleanLocalArch"},
+		{fileName => "CleanRemote"},
+		{fileName => "CopyRel"},
+		{fileName => "DeltaEnv"},
+		{fileName => "DiffEnv"},
+		{fileName => "DiffRel"},
+		{fileName => "EnvInfo"},
+		{fileName => "ExportEnv"},
+		{fileName => "ExportRel"},
+		{fileName => "EnvMembership"},
+		{fileName => "EnvSize"},
+		{fileName => "GetEnv"},
+		{fileName => "GetRel"},
+		{fileName => "GetSource"},
+		{fileName => "ImportEnv"},
+		{fileName => "ImportRel"},
+		{fileName => "InstallSnapShot"},
+		{fileName => "LatestVer"},
+		{fileName => "ListComponents"},
+		{fileName => "MakeEnv"},
+		{fileName => "MakeRel"},
+		{fileName => "MakeSnapShot"},
+		{fileName => "ModNotes"},
+		{fileName => "MrpComplexity"},
+		{fileName => "RemoveRel"},
+		{fileName => "RemoveSource"},
+		{fileName => "SourceInfo"},
+		{fileName => "PrepEnv"},
+		{fileName => "PrepRel"},
+		{fileName => "PullEnv"},
+		{fileName => "PushEnv"},
+		{fileName => "PullRel"},
+		{fileName => "PushRel"},
+		{fileName => "ValidateEnv"},
+		{fileName => "ValidateRel"},
+		{fileName => "ViewNotes"});
+
+my @utils =({fileName => "BldDocs"},
+	    {fileName => "CheckBc"},
+	    {fileName => "CheckRls"},
+	    {fileName => "InstCol2"},
+	    {fileName => "MBld"},
+	    {fileName => "MergeEnvironments"});
+
+my @modules =({fileName => "CatData.pm"},
+	      {fileName => "CheckBc.pm"},
+	      {fileName => "CleanEnv.pm"},
+	      {fileName => "Cleaner.pm"},
+	      {fileName => "CommandController.pm"},
+	      {fileName => "CopyRel.pm"},
+	      {fileName => "Crypt.pm"},
+	      {fileName => "Crypt/GPG.pm"},
+	      {fileName => "Crypt/PGP.pm"},
+	      {fileName => "EnvDb.pm"},
+	      {fileName => "EnvDifferencer.pm"},
+	      {fileName => "ExportData.pm"},
+	      {fileName => "GetEnv.pm"},
+	      {fileName => "IniData.pm"},
+	      {fileName => "MakeRel.pm"},
+	      {fileName => "MrpData.pm"},
+	      {fileName => "NotesCompiler.pm"},
+	      {fileName => "PathData.pm"},
+	      {fileName => "PathData/ComponentBased.pm"},
+	      {fileName => "PathData/ProjectBased.pm"},
+	      {fileName => "PrepRel.pm"},
+	      {fileName => "RelData.pm"},
+	      {fileName => "RelTransfer.pm"},
+	      {fileName => "RelTransfer/Export.pm"},
+	      {fileName => "RelTransfer/Import.pm"},
+	      {fileName => "RemoteSite.pm"},
+	      {fileName => "RemoteSite/FTP.pm"},
+	      {fileName => "RemoteSite/FTP/Proxy.pm"},
+	      {fileName => "RemoteSite/NetDrive.pm"},
+	      {fileName => "RemoteSite/NetDrive/MultiVolumeExport.pm"},
+	      {fileName => "RemoteSite/NetDrive/MultiVolumeImport.pm"},
+	      {fileName => "Symbian/CBR/ApplyDelta.pm"},
+	      {fileName => "Symbian/CBR/CreateDelta.pm"},
+	      {fileName => "TableFormatter.pm"},
+	      {fileName => "TableFormatter/Text.pm"},
+	      {fileName => "TableFormatter/Excel.pm"},
+	      {fileName => "TableFormatter/Csv.pm"},
+	      {fileName => "TableFormatter/Html.pm"},
+	      {fileName => "TableFormatter/Auto.pm"},
+	      {fileName => "Utils.pm"}
+	     );
+
+
+
+#
+# Globals.
+#
+
+my $docDir;
+my $devDocs = 0;
+my $verbose = 0;
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+my $cwd = cwd;
+my $toolsdir = $FindBin::Bin;
+chdir $toolsdir or die "Error: Couldn't chdir to \"$toolsdir\": $!\n";
+ReadCaptions(\@commands);
+ReadCaptions(\@utils);
+ReadCaptions(\@modules);
+chdir $cwd or die "Error: Couldn't chdir to \"cwd\": $!\n";;
+Utils::MakeDir($docDir);
+chdir $docDir or die "Error: Couldn't chdir to \"$docDir\": $!\n";;
+BldIndex();
+BldDocs();
+chdir $cwd or die "Error: Couldn't chdir to \"cwd\": $!\n";;
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions('h' => \$help, 'd' => \$devDocs, 'v+' => \$verbose);
+
+  $docDir = shift @ARGV || $KDocDir;
+
+  unless (scalar(@ARGV) == 0) {
+    print "Error: Invalid arguments\n";
+    Usage(1);
+  }
+
+  if ($help) {
+    Usage(0);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: blddocs [<documentation_directory>]
+
+options:
+
+-h  help
+-d  generate additional documentation relevent to development of the tools
+-v  verbose output (-vv very verbose)\n");
+}
+
+sub BldIndex {
+  print "Generating index.html...\n";
+
+  open INDEX, ">index.html" or die "Couldn't open index.html for writing: $!\n";
+  $CGI::NO_DEBUG = 1;
+  $CGI::NO_DEBUG = 1;
+  my $cgi = new CGI;
+  print INDEX $cgi->start_html("LPD Release Tools Documentation");
+  print INDEX $cgi->h1("LPD Release Tools Documentation");
+  my $version = Utils::ToolsVersion();
+  print INDEX $cgi->h3("Version $version\n");
+
+  AddSection("Introduction", \@intro, *INDEX, $cgi);
+  AddSection("Command reference", \@commands, *INDEX, $cgi);
+  AddSection("Utilities", \@utils, *INDEX, $cgi);
+  AddSection("Implementation notes", \@modules, *INDEX, $cgi) if ($devDocs);
+
+  print INDEX $cgi->hr;
+  print INDEX $cgi->end_html();
+  close INDEX;
+}
+
+sub ReadCaptions {
+  my $list = shift;
+  foreach my $module (@$list) {
+    open (FILE, $module->{fileName}) or die "Error: Couldn't open $module->{fileName} for reading: $!\n";
+
+    # Search through file for name section.
+    while (<FILE>) {
+      if (/^=head1 NAME/) {
+	last;
+      }
+    }
+
+    # Read name section.
+    while (<FILE>) {
+      unless (/^\s*$/) {
+	(my $caption, my $comment) = split (/ - /, $_, 2);
+	die unless defined $caption and defined $comment;
+	$module->{caption} = $caption;
+	$module->{comment} = " - $comment";
+	last;
+      }
+    }
+
+    unless (exists $module->{caption}) {
+      $module->{caption} = "";
+      $module->{comment} = "";
+    }
+
+    close (FILE);
+  }
+}
+
+sub AddSection {
+  my $heading = shift;
+  my $list = shift;
+  local *INDEX = shift;
+  my $cgi = shift;
+
+  print INDEX $cgi->hr;
+  print INDEX $cgi->h2($heading);
+  foreach my $module (@$list) {
+    print INDEX $cgi->a({ -href => "$module->{fileName}.html" }, $module->{caption}), $module->{comment};
+    print INDEX $cgi->p("");
+  }
+}
+
+sub BldDocs {
+  BldList(\@intro);
+  BldList(\@commands);
+  BldList(\@utils);
+  BldList(\@modules) if ($devDocs);
+}
+
+sub BldList {
+  my $listRef = shift;
+
+  foreach my $item (@$listRef) {
+    my $itemMTime = Utils::FileModifiedTime("$toolsdir\\$item->{fileName}");
+    if ($itemMTime == 0 or not -e "$item->{fileName}.html" or $itemMTime > Utils::FileModifiedTime("$item->{fileName}.html")) {
+      my $dirName = dirname($item->{fileName});
+      unless (-e $dirName) {
+        eval {Utils::MakeDir($dirName)};
+        if ($@) {
+          die "Error: Couldn't make directory $docDir/$dirName : $@\n";
+        }
+      }
+      print "Generating $item->{fileName}.html...\n";
+      pod2html("--infile=$toolsdir\\$item->{fileName}", "--outfile=$item->{fileName}.html", "--title=$item->{fileName}");
+    }
+  }
+}
+
+
+=head1 NAME
+
+BldDocs - Builds this HTML documentation set from the POD in the Perl sources.
+
+=head1 SYNOPSIS
+
+  blddocs [<documentation_directory>]
+
+options:
+
+  -h  help
+  -d  generate additional documentation relevent to development of the tools
+  -v  verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+Invokes C<pod2html> on each source file, and puts all the generated documentation files into a F<doc> directory. On subsequent calls only generates new html for source files that have been modified. Also generates the file F<doc\index.html> which contains a set of links to the other documentation files.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/BldDocs.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/BuildRel	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,219 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use MrpData;
+use CommandController;
+use Cwd;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $comp;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'BuildRel');
+my $envDb;
+my $buildall;
+my $noclean;
+my $dummyrun;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+BuildRel();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  my $ignore;
+  my $stdin;
+  GetOptions("h" => \$help, "v+" => \$verbose, "a" => \$buildall, "q" => \$noclean, "d" => \$dummyrun, "f" => \$ignore);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $comp = shift @ARGV;
+
+  if (@ARGV) {
+    print "Error: too many arguments\n";
+    Usage(1);
+  } elsif ($buildall && $comp) {
+    print "Error: can't use -a with a component name\n";
+    Usage(1);
+  } elsif (!$buildall && !$comp) {
+    print "Error: Must specify -a or a component name\n";
+    Usage(1);
+  }
+
+  $envDb = EnvDb->Open($iniData, $verbose);
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: buildrel [options] -a | <component>
+
+options:
+
+-a                    build all pending release components
+-h                    help
+-f                    (deprecated)
+-v                    verbose output (-vv very verbose)
+-q                    quick (don't do \"abld reallyclean\")
+-d                    dummy run: just show what would happen\n");
+}
+
+sub BuildRel {
+  if ($buildall) {
+    BuildEnvironment();
+  } else {
+    BuildComp($comp);
+  }
+}
+
+# Implementation
+
+sub BuildComp {
+  my $comp = shift; # could accept a component name or an entry
+
+  print "Building \"$comp\"\n" if ($verbose);
+
+  print "Gathering data from MRP file...\n" if ($verbose>1);
+  my $mrpData = $envDb->GetMrpData($comp);
+  print "Working out build commands...\n" if ($verbose>1);
+  my $cwd = cwd();
+  my $nul = ($verbose > 2)?"":" > NUL";
+  my %commands_by_path;
+
+  foreach my $binset (@{$mrpData->BinSets()}) {
+    my $path = Utils::PrependSourceRoot($binset->{path});
+    unless ($commands_by_path{$path}) {
+      $commands_by_path{$path} = [ "bldmake bldfiles" ];
+      push @{$commands_by_path{$path}}, "abld reallyclean" unless $noclean;
+    }
+    push @{$commands_by_path{$path}}, "abld $binset->{test} build $binset->{plat} $binset->{var} $binset->{mmp}";
+  }
+
+  print "Running build commands...\n" if ($verbose>1);
+  foreach my $path (sort keys %commands_by_path) {
+    chdir($path);
+    my $cmds = $commands_by_path{$path};
+    foreach my $cmd (@$cmds) {
+      print "Build command: $cmd\n" if ($dummyrun || $verbose > 1);
+      next if $dummyrun;
+      open(CMD, "$cmd|") or die "Couldn't start command \"$_\" because $!";
+      my $output = "";
+      my $failure = 0;
+      while (<CMD>) {
+        print $_ if $verbose > 2;
+        $failure = 1 if m/fatal error/i;
+        $output .= $_;
+      }
+      close CMD;
+      die "Error: build failed. Command \"$cmd\" in directory \"$path\" failed with error code $? and output:\n$output\n\n" if ($? || $failure);
+      # ABLD currently doesn't pass through error codes. I have requested
+      # that it be modified to do so.
+    }
+  }
+  chdir $cwd;
+}
+
+sub BuildEnvironment {
+  foreach my $comp (keys %{$envDb->{db}}) {
+    next unless $envDb->Status($comp) == EnvDb::STATUS_PENDING_RELEASE;
+    BuildComp($comp);
+  }
+}
+
+
+__END__
+
+=head1 NAME
+
+BuildRel - Attempt to build a component.
+
+=head1 SYNOPSIS
+
+  buildrel [options] -a | <component>
+
+options:
+
+  -a                    build all components pending release
+  -h                    help
+  -v                    verbose output (-vv  very verbose)
+  -q                    quick (don't do abld reallyclean)
+  -d                    dummy run: just show what would happen
+
+=head1 DESCRIPTION
+
+Attempts to build a component, using all the platforms listed in the
+MRP file. Using -a will build all the components that are pending
+release.
+
+The -d option doesn't do any building. However, in the process of
+reading the details from the MRP it may be forced to run commands
+such as C<bldmake bldfiles> and C<abld makefile>.
+
+The commands this script runs are:
+
+  bldmake bldfiles
+  abld reallyclean (unless you're using -q)
+  abld build XXX XXX (or abld test build XXX XXX)
+
+=head1 STATUS
+
+Supported. If you find a problem, please report it to us.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/BuildRel.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/CatData.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,192 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+package CatData;
+
+use strict;
+use Data::Dumper;
+use MrpData;
+use PathData;
+
+#
+# Public.
+#
+
+sub New {
+  my $pkg = shift;
+  my $self = {};
+  bless $self, $pkg;
+
+  my $iniData = shift;
+  my $fileToWriteTo = shift;
+  my $mrpData = shift;
+  my $category = shift;
+  
+  $self->{data}->{category} = $category;
+
+  foreach my $exportfile (keys %{$mrpData->ExportInfoForCat($category)}) {
+    my $destination = $mrpData->ExportSourceFileInfoForCat($category, $exportfile);
+
+    # Consider any mappings if defined in the reltools.ini file
+    if($iniData->HasMappings()){
+      $destination = $iniData->PerformReverseMapOnFileName($destination);
+      $destination = Utils::RemoveSourceRoot($destination);
+    }
+    $self->{data}->{exportinfo}->{$exportfile} = $destination;
+  }
+  
+  # Used to write infomation store to to file named $fileToWriteTo
+  $self->WriteToFile($fileToWriteTo);
+}
+
+sub Open {
+  my $pkg = shift;
+  my $self = {};
+  bless $self, $pkg;
+  $self->{iniData} = shift;
+  $self->{comp} = shift;
+  $self->{ver} = shift;
+  $self->{category} = shift;
+  $self->ReadFromFile();
+  return $self;
+}
+
+sub Category {
+  my $self = shift;
+  die unless exists $self->{data}->{category};
+  return $self->{data}->{category};
+}
+
+sub ExportInfo {
+  my $self = shift;
+  die unless exists $self->{data}->{exportinfo};
+  return $self->{data}->{exportinfo};
+}
+
+sub ExportSource {
+  my $self = shift;
+  my $destination = shift;
+  die unless exists $self->{data}->{exportinfo}->{$destination};
+  return $self->{data}->{exportinfo}->{$destination};
+}
+
+#
+# Private.
+#
+
+sub WriteToFile {
+  my $self = shift;
+  my $fileToWriteTo = shift;
+  
+  if (-e $fileToWriteTo) {
+    Utils::SetFileWritable($fileToWriteTo);
+  }
+  open (OUT, ">$fileToWriteTo") or die "Error: Couldn't open \"$fileToWriteTo\" for writing: $!\n";
+  print OUT Data::Dumper->Dump([$self->{data}], ['self->{data}']);
+  close (OUT);
+  Utils::SetFileReadOnly($fileToWriteTo);
+}
+
+sub ReadFromFile {
+  my $self = shift;
+  my $category = $self->{category};
+  my $pathData = $self->{iniData}->PathData;
+  my $comp = $self->{comp};
+  my $ver = $self->{ver};
+  
+  my $relDir = $pathData->LocalArchivePathForExistingComponent($comp, $ver);
+  die "Error: \"$comp $ver\" does not exist\n" unless $relDir;
+  if (!-e "$relDir\\exports$category.txt") {
+    print "Info: Can't find \"$relDir\\exports$category.txt\" \"$comp $ver\" is an incompatible release\n";
+  }
+  else{
+    $self->{project} = $pathData->ComponentProject($comp, $ver);
+    unless (-e $relDir) {
+      die "Error: $comp $ver does not exist\n";
+    }
+    my $file = "$relDir\\exports$category.txt";
+
+    open (IN, $file) or die "Error: Couldn't open \"$file\" for reading: $!\n";
+    local $/ = undef;
+    my $data = <IN>;
+    die "Error: Reldata in \"$relDir\" is blank" unless $data =~ (m/\S/);
+    eval ($data) or die "Error: Couldn't parse reldata in \"$relDir\"\n";
+    close (IN);
+  }
+}
+
+1;
+
+=head1 NAME
+
+CatData.pm - Provides an interface to data associated with categories for a release.
+
+=head1 DESCRIPTION
+
+Stores the source and export location of export files in a release. All information is stored in a single file named F<catdata> within the release directory using the module Data::Dumper.
+
+=head1 INTERFACE
+
+=head2 New
+
+Creates a new C<CatData> object and corresponding data file. Expects to be passed a filename to write to, a C<MrpData> reference, and a category.
+
+=head2 Open
+
+Creates a C<CatData> object from an existing data file. Expects to be passed an C<IniData> reference, a component name, a version and a category.
+
+=head2 Category
+
+Returns the category value.
+
+=head2 ExportInfo
+
+Returns the exportinfo.
+
+=head2 ExportSource
+
+Expects an export destination. Returns the export source location.
+
+=head2 WriteToFile
+
+Expects to be passed a filename which is used to write a F<catdata>.
+
+=head2 ReadFromFile
+
+Enables a F<catdata> file to be read so that all infomation contained can be read.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/CheckBc	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,307 @@
+#!perl
+# Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+require 5.006_001;
+use strict;
+use FindBin;
+use Pod::Usage;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use CheckBc;
+
+$|++;
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  my $verbose;
+  my @additionalHeaders;
+  my @additionalIncludePaths;
+  my @ignoreClasses;
+  my $ignoreR3Unused = 0;
+  my $whichChecks = { noClassSize => 0, noDef => 0, noVtable => 0 };
+  GetOptions('h' => \$help, 'v+' => \$verbose, 'c' => \$whichChecks->{noClassSize}, 'd' => \$whichChecks->{noDef}, 't' => \$whichChecks->{noVtable}, 'header=s' => \@additionalHeaders, 'include=s' => \@additionalIncludePaths, 'ignore=s' => \@ignoreClasses, 'ignoreR3UNUSED+' => \$ignoreR3Unused);
+
+  if ($help) {
+    Usage($verbose);
+  }
+
+  my $allNo = 1;
+  foreach my $thisCheck (keys %{$whichChecks}) {
+    unless ($whichChecks->{$thisCheck}) {
+      $allNo = 0;
+      last;
+    }
+  }
+  if ($allNo) {
+    print "\nError: Specified options have disabled all the checks\n\n";
+    Usage();
+  }
+
+  if (scalar(@ARGV) == 1) {
+    my $descriptionFile = shift @ARGV;
+    HandleDescriptionFile($descriptionFile, $ignoreR3Unused, $whichChecks, $verbose);
+  }
+  elsif (scalar(@ARGV) == 2) {
+    my $bldInfDir1 = shift @ARGV;
+    my $bldInfDir2 = shift @ARGV;
+    HandleBldInfPair($bldInfDir1, $bldInfDir2, \@additionalHeaders, \@additionalIncludePaths, \@ignoreClasses, $ignoreR3Unused, $whichChecks, $verbose);
+  }
+  else {
+    print "Error: Invalid arguments\n";
+    Usage();
+  }
+}
+
+sub Usage {
+  my $verbose = shift;
+  if ($verbose) {
+    system("perldoc $0");
+  }
+  else {
+    pod2usage(-verbose => 1);
+  }
+  die ("\n");
+}
+
+sub HandleBldInfPair {
+  my $bldInfDir1 = shift;
+  my $bldInfDir2 = shift;
+  my $additionalHeaders = shift;
+  my $additionalIncludePaths = shift;
+  my $ignoreClasses = shift;
+  my $ignoreR3Unused = shift;
+  my $whichChecks = shift;
+  my $verbose = shift;
+  my $checkBc = CheckBc->New($bldInfDir1, $bldInfDir2, $verbose, undef, $additionalHeaders, $additionalIncludePaths, $ignoreClasses, $ignoreR3Unused);
+  if (DoCheck($checkBc, $whichChecks)) {
+    print "Check passed\n";
+  }
+  else {
+    print "Check failed\n";
+  }
+}
+
+sub HandleDescriptionFile {
+  my $descriptionFile = shift;
+  my $ignoreR3Unused = shift;
+  my $whichChecks = shift;
+  my $verbose = shift;
+  open (DESC, $descriptionFile) or die "Error: Couldn't open \"$descriptionFile\": $!\n";
+  my $lineNum = 0;
+  while (my $thisLine = <DESC>) {
+    ++$lineNum;
+    chomp $thisLine;
+    $thisLine =~ s/^\s*$//;
+    $thisLine =~ s/#.*//;
+    next if ($thisLine eq '');
+    $thisLine =~ s/^\s+//;
+    @ARGV = split (/\s+/, $thisLine);
+    my @additionalHeaders;
+    my @additionalIncludePaths;
+    my @ignoreClasses;
+    GetOptions('header=s' => \@additionalHeaders, 'include=s' => \@additionalIncludePaths, 'ignore=s' => \@ignoreClasses);
+    my $component = shift @ARGV;
+    my $bldInfDir1 = shift @ARGV;
+    my $bldInfDir2 = shift @ARGV;
+    unless ($component and $bldInfDir1 and $bldInfDir2) {
+      die "Error: Invalid line in $descriptionFile($lineNum)\n";
+    }
+    print "=== $component\n";
+    eval {
+      my $checkBc = CheckBc->New($bldInfDir1, $bldInfDir2, $verbose, $component, \@additionalHeaders, \@additionalIncludePaths, \@ignoreClasses, $ignoreR3Unused);
+      if (DoCheck($checkBc, $whichChecks)) {
+	print "=== $component passed ===\n";
+      }
+      else {
+	print "=== $component failed ===\n";
+      }
+    };
+    if ($@) {
+      print $@;
+      print "===\n";
+    }
+  }
+  close (DESC);
+}
+
+sub DoCheck {
+  my $checkBc = shift;
+  my $whichChecks = shift;
+  my $passed = 1;
+  unless ($whichChecks->{noDef}) {
+    unless ($checkBc->CheckDefFiles() and $passed) {
+      $passed = 0;
+    }
+  }
+  unless ($whichChecks->{noClassSize}) {
+    unless ($checkBc->CheckClassSizes() and $passed) {
+      $passed = 0;
+    }
+  }
+  unless ($whichChecks->{noVtable}) {
+    unless ($checkBc->CheckVTables() and $passed) {
+      $passed = 0;
+    }
+  }
+  return $passed;
+}
+
+__END__
+
+=head1 NAME
+
+CheckBc - Runs some simple tests to see if one component source tree is backwards compatible another.
+
+=head1 SYNOPSIS
+
+  checkbc [options] (<bld_inf_dir_1> <bld_inf_dir_2>) | <description_file>
+
+Options:
+
+  -h  help
+  -c  don't check class sizes
+  -d  don't check def files
+  -t  don't check vtables
+  -v  verbose output (-vv very verbose)
+
+Additional options for use on a per component basis:
+
+  --ignoreR3UNUSED
+  --ignore  <class_to_ignore>
+  --header  <additional_header_file>
+  --include <additional_include_path>
+
+=head1 DESCRIPTION
+
+C<CheckBc> is a tool that attempts to discover if one release of a component has broken backwards compatibility with another. It is currently able to perform the following checks:
+
+=over 4
+
+=item 1
+
+Compares the ARM F<.def> files to ensure that only new lines have been added to the end of the file.
+
+=item 2
+
+Compares the sizes of any classes that have an exported C++ constructor. This is done by compiling some generated C++ code that uses the C<sizeof> operator to print the relevant class sizes to C<STDOUT>.
+
+=item 3
+
+Compares the v-table layouts of any classes that have an exported C++ constructor. This is done by compiling each source code set to ARM4 assembler listings, comparing the v-table sections.
+
+=back
+
+There are two ways of envoking C<CheckBc>:
+
+=over 4
+
+=item 1 By specifying a pair of F<bld.inf> directories
+
+Given the location of two F<bld.inf> files (say, C<bld_inf_1> and C<bld_inf_2>), C<CheckBc> attempts to discover if the source code referred by by C<bld_inf_2> is backwards compatible with C<bld_inf_1>.
+
+=item 2 By specifying a list of F<bld.inf> directory pairs in a text file
+
+The text file must have the following line format:
+
+  <component_name>  <bld_inf_dir_1>  <bld_inf_dir_2> [options]
+
+Any text following a 'C<#>' character will be ignored.
+
+=back
+
+Using either invokation method, the following options can be specified as many times as required:
+
+=over 4
+
+=item * --ignoreR3UNUSED
+
+Indicates that differences between F<.def> files relating to the R3UNUSED export stub optimisation should be ignored.
+
+=item * --header <additional_header>
+
+Specifies an additional #include statement to be included in the generated C++. This option can be used to get headers that don't include all the headers they need to compile. Common headers are automatically included (e32std.h, e32def.h and e32base.h), but occasionally others are also required.
+
+=item * --include <additional_include_path>
+
+Specifies an additional path that the pre-processor should use to find header files.
+
+=item * --ignore <class_to_ignore>
+
+Specifies the name of a class that should be ignored from a class size point of view. This option can be useful if components release librarys that are intended for debugging purposes only and so are not required to maintain backwards compatibility.
+
+=back
+
+=head1 LIMITATIONS
+
+=over 4
+
+=item 1
+
+The component's headers must compile using Microsoft's Visual C++ compiler.
+
+=item 2
+
+The component's exported headers must compile when they are all #include'd into a single F<.cpp> file. If this isn't the case, then the C<--header> option can be used to add additional headers.
+
+=item 3
+
+Declarations of the component's exported C++ constructors must be found in one of the exported headers.
+
+=item 4
+
+F<.def> file lines are expected to be identical. This can lead to checks failing falsely because, for example, the name of a function may be changed without breaking BC provided the F<.def> file is carefully edited.
+
+=item 5
+
+The components must compile as ARM4. This is likely to mean that each set of source code needs to be accompanied with a suitable F<\epoc32> tree that allows it to be built. The simplest way to acheive this is to prepare a pair of subst'd drives.
+
+=back
+
+=head1 KNOWN BUGS
+
+F<bld.inf>, F<.mmp> and F<.def> file parsing is probably not as industrial strength as it should be.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/CheckBc.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/CheckBc.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1032 @@
+# Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+
+package CheckBc;
+
+
+#
+# Public.
+#
+
+sub New {
+  my $pkg = shift;
+  my $self = {};
+  bless $self, $pkg;
+  my $bldInfDir1 = shift;
+  my $bldInfDir2 = shift;
+  Utils::AbsoluteFileName(\$bldInfDir1);
+  Utils::AbsoluteFileName(\$bldInfDir2);
+  $self->{verbose} = shift;
+  $self->{compName} = shift;
+  $self->{additionalHeaders} = shift;
+  $self->{additionalIncludePaths} = shift;
+  my $ignoreClasses = shift;
+  foreach my $thisClass (@$ignoreClasses) {
+    $self->{ignoreClasses}->{$thisClass} = 1;
+  }
+  $self->{ignoreR3Unused} = shift;
+  $self->{bldInf1} = BldInf->New($bldInfDir1, $self->{verbose});
+  $self->{bldInf2} = BldInf->New($bldInfDir2, $self->{verbose});
+  return $self;
+}
+
+sub CheckAll {
+  my $self = shift;
+  my $passed = 1;
+  unless ($self->CheckDefFiles()) {
+    $passed = 0;
+  }
+  unless ($self->CheckClassSizes()) {
+    $passed = 0;
+  }
+  unless ($self->CheckVTables()) {
+    $passed = 0;
+  }
+  return $passed;
+}
+
+sub CheckDefFiles {
+  my $self = shift;
+  return $self->{bldInf1}->CheckDefFiles($self->{bldInf2}, $self->{ignoreR3Unused});
+}
+
+sub CheckClassSizes {
+  my $self = shift;
+  my $classSizes1 = $self->GetClassSizes($self->{bldInf1});
+  my $classSizes2 = $self->GetClassSizes($self->{bldInf2});
+  return $classSizes1->Check($classSizes2);
+}
+
+sub CheckVTables {
+  my $self = shift;
+  my $vtable1 = $self->GetVTable($self->{bldInf1});
+  my $vtable2 = $self->GetVTable($self->{bldInf2});
+  return $vtable1->Check($vtable2);
+}
+
+
+#
+# Private.
+#
+
+sub GetClassSizes {
+  my $self = shift;
+  my $bldInf = shift;
+  my $constructorsToCheck = $self->GetConstructorsToCheck($bldInf->ListConstructors());
+  my @headers;
+  if ($self->{additionalHeaders}) {
+    push (@headers, @{$self->{additionalHeaders}});
+  }
+  foreach my $thisExport (@{$bldInf->ListExports()}) {
+    if ($thisExport =~ /\.h$/i) {
+      push (@headers, $thisExport);
+    }
+  }
+  my $includes = $bldInf->ListIncludes();
+  if ($self->{additionalIncludePaths}) {
+    push (@$includes, @{$self->{additionalIncludePaths}});
+  }
+  return ClassSize->New($constructorsToCheck, \@headers, $includes, $self->{verbose}, $self->{compName}, $bldInf->{dir});
+}
+
+sub GetVTable {
+  my $self = shift;
+  my $bldInf = shift;
+  my $constructorsToCheck = $self->GetConstructorsToCheck($bldInf->ListConstructors());
+  return VTable->New($bldInf->{dir}, $constructorsToCheck, $self->{verbose});
+}
+
+sub GetConstructorsToCheck {
+  my $self = shift;
+  my $constructors = shift;
+  my @constructorsToCheck;
+  foreach my $thisConstructor (@$constructors) {
+    unless (exists $self->{ignoreClasses}->{$thisConstructor}) {
+      push (@constructorsToCheck, $thisConstructor);
+    }
+  }
+  return \@constructorsToCheck;
+}
+
+
+#
+# BldInf
+#
+
+package BldInf;
+
+
+#
+# Public.
+#
+
+sub New {
+  my $pkg = shift;
+  my $self = {};
+  bless $self, $pkg;
+  $self->{dir} = shift;
+  $self->{verbose} = shift;
+  $self->Parse();
+  return $self;
+}
+
+sub CheckDefFiles {
+  my $self = shift;
+  my $other = shift;
+  my $ignoreR3Unused = shift;
+  my $passed = 1;
+  foreach my $thisMmp (keys %{$self->{mmps}}) {
+    if (exists $other->{mmps}->{$thisMmp}) {
+      unless ($self->{mmps}->{$thisMmp}->CheckDefFile($other->{mmps}->{$thisMmp}, $ignoreR3Unused)) {
+	$passed = 0;
+      }
+    }
+    else {
+      print "Mmp file \"$thisMmp\" missing for bld.inf \"$other->{dir}\"\n";
+      $passed = 0;
+    }
+  }
+  return $passed;
+}
+
+sub ListConstructors {
+  my $self = shift;
+  my @constructors = ();
+  foreach my $thisMmp (keys %{$self->{mmps}}) {
+    push (@constructors, @{$self->{mmps}->{$thisMmp}->ListConstructors()});
+  }
+  return \@constructors;
+}
+
+sub ListExports {
+  my $self = shift;
+  if (exists $self->{exports}) {
+    return $self->{exports};
+  }
+  return [];
+}
+
+sub ListIncludes {
+  my $self = shift;
+  my %includes = ();
+  foreach my $thisMmp (keys %{$self->{mmps}}) {
+    foreach my $thisInclude (@{$self->{mmps}->{$thisMmp}->ListIncludes()}) {
+      $includes{$thisInclude} = 1;
+    }
+  }
+  my @includes = keys %includes;
+  return \@includes;
+}
+
+
+#
+# Private.
+#
+
+sub Parse {
+  my $self = shift;
+  if ($self->{verbose}) {  print "Parsing $self->{dir}\\bld.inf...\n"; }
+  Utils::PushDir($self->{dir});
+  my $fullName = "$self->{dir}\\bld.inf";
+  unless (open (BLDINF, "cpp -DARM -DMARM $fullName|")) {
+    Utils::PopDir();
+    die "Error: Couldn't open \"cpp -DARM -DMARM $fullName\": $!\n";
+  }
+  my $foundMmps = 0;
+  my $foundExports = 0;
+  my $doDie = 0;
+  my $currentDir = $self->{dir};
+  while (my $line = <BLDINF>) {
+    if ($line =~ /^# \d+ "(.*)" \d+?/) {
+	my $newFile = $1;
+	$newFile =~ s/\\\\/\\/g;
+	$newFile =~ s/\\$//;
+	Utils::AbsoluteFileName(\$newFile);
+	($currentDir) = Utils::SplitFileName($newFile);
+	next;
+      }
+    if ($line =~ /^#/ or $line =~ /^\s*$/) {	
+	# Ignore lines starting with '#' or those filled with white space.
+	next;
+      }
+    chomp $line;
+
+    if ($line =~ /PRJ_MMPFILES/i) {
+      $foundMmps = 1;
+      $foundExports = 0;
+      next;
+    }
+    elsif ($line =~ /PRJ_EXPORTS/i) {
+      $foundMmps = 0;
+      $foundExports = 1;
+      next;
+    }
+    elsif ($line =~ /PRJ_/i) {
+      $foundMmps = 0;
+      $foundExports = 0;
+      next;
+    }
+    if ($foundMmps) {
+      if ($line =~ /makefile\s+(\S+)/i) {
+	if ($self->{verbose}) { print "Info: \"makefile $1\" found in \"$self->{dir}\\bld.inf\", ignoring.\n"; }
+	next;
+      }
+
+      $line =~ /\s*(\S+)/;
+      my $mmpName = lc($1);
+      if (not $mmpName =~ /\.mmp$/) {
+	$mmpName .= '.mmp';
+      }
+      unless (-e $mmpName) {
+	if (-e "$currentDir\\$mmpName") {
+	  $mmpName = "$currentDir\\$mmpName";
+	}
+	elsif (-e "$self->{dir}\\$mmpName") {
+	  $mmpName = "$self->{dir}\\$mmpName";
+	}
+	else {
+	  print "Warning: Couldn't find location of \"$mmpName\n";
+	  next;
+	}
+      }
+      Utils::AbsoluteFileName(\$mmpName);
+      (my $path, my $name, my $ext) = Utils::SplitFileName($mmpName);
+      eval {
+	$self->{mmps}->{lc("$name$ext")} = Mmp->New($mmpName, $self->{verbose});
+      };
+      if ($@) {
+	$doDie = 1;
+	print "$@";
+      }
+      next;
+    }
+    elsif ($foundExports) {
+      my $thisExport;
+      if ($line =~  /^\s*\"([^\"]*)/) {
+	$thisExport = $1;
+      }
+      elsif ($line =~ /\s*(\S+)/) {
+	$thisExport = $1;
+      }
+      else {
+	die;
+      }
+      unless (-e $thisExport) {
+	if (-e "$currentDir\\$thisExport") {
+	  $thisExport = "$currentDir\\$thisExport";
+	}
+	elsif (-e "$self->{dir}\\$thisExport") {
+	  $thisExport = "$self->{dir}\\$thisExport";
+	}
+	else {
+	  print "Warning: Couldn't find location of \"$thisExport\n";
+	  next;
+	}
+      }
+      Utils::AbsoluteFileName(\$thisExport);
+      push (@{$self->{exports}}, $thisExport);
+    }
+  }
+  close (BLDINF);
+  Utils::PopDir();
+  if ($doDie) {
+    die "Aborting due to above errors\n";
+  }
+}
+
+
+#
+# Mmp
+#
+
+package Mmp;
+
+
+#
+# Public.
+#
+
+sub New {
+  my $pkg = shift;
+  my $self = {};
+  bless $self, $pkg;
+  $self->{name} = shift;
+  $self->{verbose} = shift;
+  $self->Parse();
+  return $self;
+}
+
+sub CheckDefFile {
+  my $self = shift;
+  my $other = shift;
+  my $ignoreR3Unused = shift;
+  if ($self->{def}) {
+    return $self->{def}->Check($other->{def}, $ignoreR3Unused);
+  }
+  return 1;
+}
+
+sub ListConstructors {
+  my $self = shift;
+  if ($self->{def}) {
+    return $self->{def}->ListConstructors();
+  }
+  return [];
+}
+
+sub ListIncludes {
+  my $self = shift;
+  if (exists $self->{includes}) {
+    my @includes = keys %{$self->{includes}};
+    return \@includes;
+  }
+  return [];
+}
+
+
+#
+# Private.
+#
+
+sub Parse {
+  my $self = shift;
+  if ($self->{verbose}) {  print "Parsing $self->{name}...\n"; }
+  (my $path) = Utils::SplitFileName($self->{name});
+  $path =~ s/(.*)\\.*/$1/; # Extract path.
+  Utils::PushDir($path);
+  unless (open (MMP, "cpp -DARM -DMARM $self->{name}|")) {
+    Utils::PopDir();
+    die "Error: Couldn't open \"cpp -DARM -DMARM $self->{name}\": $!\n";
+  }
+  my $noStrictDef = 0;
+  my $targetType = '';
+  while (my $line = <MMP>) {
+    if ($line =~ /^#/ or $line =~ /^\s*$/) {	
+	# Ignore lines starting with '#' or those filled with white space.
+	next;
+      }
+    chomp $line;
+    if ($line =~ /^\s*targettype\s+(\S*)\s*$/i) {
+	$targetType = $1;
+    }
+    elsif ($line =~ /^\s*deffile\s+(\S*)\s*$/i) {
+      die if exists $self->{defFileName};
+      $self->{defFileName} = $1;
+    }	 
+    elsif ($line =~ /nostrictdef/i) {
+      $noStrictDef = 1;
+    }
+    elsif ($line =~ /^\s*userinclude\s+(.+)/i) {
+      my @userIncludes = split (/\s+/, $1);
+      foreach my $thisUserInclude (@userIncludes) {
+	$thisUserInclude =~ s/\+/$ENV{EPOCROOT}epoc32/;
+	Utils::AbsoluteFileName(\$thisUserInclude);
+	$self->{includes}->{lc($thisUserInclude)} = 1;
+      }
+    }
+    elsif ($line =~ /^\s*systeminclude\s+(.+)/i) {
+      my @systemIncludes = split (/\s+/, $1);
+      foreach my $thisSystemInclude (@systemIncludes) {
+	$thisSystemInclude =~ s/\+/$ENV{EPOCROOT}epoc32/;
+	Utils::AbsoluteFileName(\$thisSystemInclude);
+	$self->{includes}->{lc($thisSystemInclude)} = 1;
+      }
+    }
+  }
+  close (MMP);
+
+  if ($targetType =~ /^(app|ani|ctl|ctpkg|epocexe|exe|exedll|fsy|kdll|kext|klib|ldd|lib|ecomiic|mda|mdl|notifier|opx|pdd|pdl|rdl|var|wlog)$/i) {
+    # Don't bother looking for the deffile.
+    Utils::PopDir();
+    return;
+  }
+  
+  (my $mmpPath, my $mmpBase) = Utils::SplitFileName($self->{name});
+  if (exists $self->{defFileName}) {
+    (my $path, my $base, my $ext) = Utils::SplitFileName($self->{defFileName});
+    if ($base eq '') {
+      $base = $mmpBase;
+    }
+    if ($ext eq '') {
+      $ext = '.def';
+    }
+    if ($path eq '') {
+      $path = $mmpPath;
+    }
+    unless ($noStrictDef) {
+      $base .= 'u';
+    }
+    unless (-e "$path$base$ext") {
+      $path = "$path..\\bmarm\\";
+    }
+    unless (-e "$path$base$ext") {
+      $path = $mmpPath . $path;
+    }
+    $self->{defFileName} = "$path$base$ext";
+    Utils::AbsoluteFileName(\$self->{defFileName});
+  }
+  else {
+    # Assume default.
+    $self->{defFileName} = $mmpBase;
+    unless ($noStrictDef) {	
+      $self->{defFileName} .= 'u';
+    }
+    $self->{defFileName} .= '.def';
+    $self->AddDefaultDefFilePath();
+  }
+
+  if ($self->{defFileName}) {
+    $self->{def} = Def->New($self->{defFileName}, $self->{verbose});
+  }
+
+  Utils::PopDir();
+}
+
+sub AddDefaultDefFilePath {
+  my $self = shift;
+  (my $path) = Utils::SplitFileName($self->{name});
+  $self->{defFileName} = "$path\\..\\bmarm\\$self->{defFileName}";
+  if (-e $self->{defFileName}) {
+    Utils::AbsoluteFileName(\$self->{defFileName});
+  }
+  else {
+    print "Warning: Unable to find def file in \"$self->{name}\"\n";
+    delete $self->{defFileName};
+  }
+}
+
+
+#
+# Def
+#
+
+package Def;
+
+
+#
+# Public.
+#
+
+sub New {
+  my $pkg = shift;
+  my $self = {};
+  bless $self, $pkg;
+  $self->{name} = shift;
+  $self->{verbose} = shift;
+  $self->Parse();
+  $self->DemangleNames();
+  return $self;
+}
+
+sub Check {
+  my $self = shift;
+  my $other = shift;
+  my $ignoreR3Unused = shift;
+  if ($self->{verbose}) { print "Checking DEF file \"$self->{name}\" against \"$other->{name}\"...\n"; }
+  my $passed = 1;
+  if (exists $self->{data}) {
+    for (my $ii = 0; $ii < scalar(@{$self->{data}}); ++$ii) {
+      my $ordinal = $ii + 1;
+      if ($ii >= scalar @{$other->{data}}) {
+	print "Failure reason: \"$self->{name}\" has more exports than \"$other->{name}\"\n";
+	$passed = 0;
+	last;
+      }
+      my $selfRaw = $self->{data}->[$ii]->{raw};
+      my $otherRaw = $other->{data}->[$ii]->{raw};
+      if ($ignoreR3Unused) {
+	$selfRaw =~ s/R3UNUSED //;
+	$otherRaw =~ s/R3UNUSED //;
+      }
+      unless ($selfRaw eq $otherRaw) {
+	$passed = 0;
+	print "Failure reason: Def file mismatch between \"$self->{name}\" and \"$other->{name}\" at $ordinal\n";
+	if ($self->{verbose}) {
+	  print "\t$self->{data}->[$ii]->{raw}\n\t$other->{data}->[$ii]->{raw}\n";
+	}
+      }
+    }
+  }
+  return $passed;
+}
+
+sub ListConstructors {
+  my $self = shift;
+  my @constructors = ();
+  if (exists $self->{data}) {
+    my $ordinal = 0;
+    foreach my $thisEntry (@{$self->{data}}) {
+      $ordinal++;
+      die unless (exists $thisEntry->{function});
+      if ($thisEntry->{function} =~ /(.+)::(.+)\(/) {
+	if ($1 eq $2) {
+	  push (@constructors, $1);
+	}
+      }
+    }
+  }
+  return \@constructors;
+}
+
+
+#
+# Private.
+#
+
+sub Parse {
+  my $self = shift;
+  open (DEF, $self->{name}) or die "Error: Couldn't open \"$self->{name}\" for reading: $!\n";
+  my $lineNum = 0;
+  while (my $thisLine = <DEF>) {
+    ++$lineNum;
+    chomp $thisLine;
+    if ($thisLine =~ /^(EXPORTS|;|\s*$)/) {
+      next;
+    }
+	my $entry = {};
+    $entry->{raw} = $thisLine;
+	     
+    push (@{$self->{data}}, $entry);
+  }
+      close (DEF);
+}
+
+sub DemangleNames {
+  my $self = shift;
+  open (FILT, "type $self->{name} | c++filt |") or die "Error: Couldn't open \"type $self->{name} | c++filt |\": $!\n";
+  my $lineNum = 0;
+  while (my $line = <FILT>) {
+    ++$lineNum;
+    chomp $line;
+    next if ($line =~ /^(EXPORT|;|\s*$)/);
+    if ($line =~ /^\s+(\"(.+)\"|(.+)) @ (\d+)/) {
+      my $function;
+      if ($2) {
+	$function = $2;
+      }
+      else {
+	die unless $3;
+	$function = $3;
+      }
+      my $ordinal = $4;
+      $self->{data}->[$ordinal - 1]->{function} = $function;
+    }
+    else {
+      die "Error: Unable to parse c++filt output for \"$self->{name}\" at line $lineNum\n";
+    }
+  }
+  close (FILT);
+}
+
+
+#
+# ClassSize
+#
+
+package ClassSize;
+
+
+#
+# Public.
+#
+
+sub New {
+  my $pkg = shift;
+  my $self = {};
+  bless $self, $pkg;
+  $self->{classes} = shift;
+  $self->{headers} = shift;
+  $self->{includes} = shift;
+  $self->{verbose} = shift;
+  $self->{compName} = shift;
+  $self->{bldInfDir} = shift;
+  if (scalar @{$self->{classes}} > 0) {
+    $self->GetClassSizes();
+  }
+  return $self;
+}
+
+sub Check {
+  my $self = shift;
+  my $other = shift;
+  if ($self->{verbose}) { print "Comparing class sizes of \"$self->{bldInfDir}\" against \"$other->{bldInfDir}\"..\n"; }
+  my $passed = 1;
+  foreach my $thisClass (keys %{$self->{classSizes}}) {
+    if ($self->{verbose}) { print "Examining class sizes of \"$thisClass\"...\n"; }
+    unless (exists $other->{classSizes}->{$thisClass}) {
+      print "Failure reason: \"$thisClass\" not found (possibly renamed)\n";
+      $passed = 0;
+      next;
+    }
+    unless ($self->{classSizes}->{$thisClass} == $other->{classSizes}->{$thisClass}) {
+      $passed = 0;
+      print "Failure reason: Class \"$thisClass\" has changed size from $self->{classSizes}->{$thisClass} to $other->{classSizes}->{$thisClass}\n";
+    }
+  }
+  return $passed;
+}
+
+
+#
+# Private.
+#
+
+sub GetClassSizes {
+  my $self = shift;
+  eval {
+    $self->GenerateCode();
+    $self->CompileCode();
+    $self->GetOutput();
+  };
+  $self->CleanUp();
+  if ($@) {
+    die $@;
+  }
+}
+
+sub GenerateCode {
+  my $self = shift;
+  open (CODE, '>__ClassSize.cpp') or die "Error: Couldn't open \"__ClassSize.cpp\" for writing: $!\n";
+  print CODE "#include <stdio.h>\n";
+  print CODE "#include <e32std.h>\n";
+  print CODE "#include <e32def.h>\n";
+  print CODE "#include <e32base.h>\n";
+  foreach my $thisHeader (@{$self->{headers}}) {
+    print CODE "#include <$thisHeader>\n";
+  }
+  print CODE "int main(int argc, char* argv[]) {\n";
+  foreach my $thisClass (@{$self->{classes}}) {
+    print CODE "\tprintf(\"$thisClass\\t%d\\n\", sizeof($thisClass));\n";
+  }
+  print CODE "\treturn 0; }\n";
+  close (CODE);
+}
+
+sub CompileCode {
+  my $self = shift;
+  my $command = 'cl ';
+  foreach my $thisInclude (@{$self->{includes}}) {
+    $command .= " /I$thisInclude";
+  }
+  $command .= " /D__VC32__ /D__WINS__ /D__SYMBIAN32__ /DWIN32 /D_WINDOWS /D_UNICODE __ClassSize.cpp";
+  unless ($self->{verbose}) {
+    $command .= ' /nologo 2>&1 > NUL';
+  }
+  if (system ($command)) {
+    if (exists $self->{compName} and $self->{compName}) {
+      rename ("__ClassSize.cpp", "$self->{compName}.cpp");
+    }
+    else {
+      rename ("__ClassSize.cpp", "unknown.cpp");
+    }
+    die "Error: Problem executing \"$command\"\n";
+  }
+}
+
+sub GetOutput {
+  my $self = shift;
+  open (OUTPUT, '__ClassSize.exe|') or die "Error: Couldn't run \"__ClassSize.exe\": $!\n";
+  while (my $thisLine = <OUTPUT>) {
+    chomp $thisLine;
+    next if ($thisLine =~ /^\s*$/);
+    if ($thisLine =~ /^(\S+)\t(\d+)$/) {
+      $self->{classSizes}->{$1} = $2;
+    }
+    else {
+      die "Error: Problem parsing output of \"__ClassSize.exe\"\n";
+    }
+  }
+  close (OUTPUT);
+}
+
+sub CleanUp {
+  my $self = shift;
+  DeleteFile('__ClassSize.cpp');
+  DeleteFile('__ClassSize.obj');
+  DeleteFile('__ClassSize.exe');
+}
+
+sub DeleteFile {
+  my $file = shift;
+  if (-e $file) {
+    unlink ($file) or die "Error: Couldn't delete \"$file\"\n";
+  }
+}
+
+
+#
+# VTable
+#
+
+package VTable;
+
+
+#
+# Public.
+#
+
+sub New {
+  my $pkg = shift;
+  my $self = {};
+  bless $self, $pkg;
+  $self->{bldInfDir} = shift;
+  my $classes = shift;
+  foreach my $class (@$classes) {
+    $self->{classes}->{$class} = 1;
+  }
+  $self->{verbose} = shift;
+
+  Utils::PushDir($self->{bldInfDir});
+  eval {
+    $self->BuildAssemblerListings();
+    $self->ParseAssemblerListings();
+    $self->DeleteAssemblerListings();
+    };
+  Utils::PopDir();
+  if ($@) {
+    die $@;
+  }
+  return $self;
+}
+
+sub Check {
+  my $self = shift;
+  my $other = shift;
+  if ($self->{verbose}) { print "Comparing vtable layout of \"$self->{bldInfDir}\" against \"$other->{bldInfDir}\"..\n"; }
+  my $passed = 1;
+  foreach my $class (keys %{$self->{vtables}}) {
+    if (exists $other->{vtables}->{$class}) {
+      if ($self->{verbose}) { print "Examining vtable of class \"$class\"...\n"; }
+      for (my $ii = 0; $ii < scalar (@{$self->{vtables}->{$class}}); ++$ii) {
+	my $thisVTableEntry = $self->{vtables}->{$class}->[$ii];
+	if ($ii >= scalar (@{$other->{vtables}->{$class}})) {
+	  print "Failure reason: Unexpected vtable entry \"$thisVTableEntry\"\n";
+	  $passed = 0;
+	  last;
+	}
+	my $otherVTableEntry = $other->{vtables}->{$class}->[$ii];
+	if ($thisVTableEntry eq $otherVTableEntry) {
+	  if ($self->{verbose}) { print "\tMatched vtable entry \"$thisVTableEntry\"\n"; }
+	}
+	else {
+	  print "Failure reason: Mismatched vtable entries in class \"$class\"\n\t$thisVTableEntry\n\t$otherVTableEntry\n";
+	  $passed = 0;
+	}
+      }
+    }
+    else {
+      print "Failure reason: Vtable for \"$class\" missing from $other->{bldInfDir}\n";
+      $passed = 0;
+    }
+  }
+  return $passed;
+}
+
+
+
+#
+# Private.
+#
+
+sub BuildAssemblerListings {
+  my $self = shift;
+  if ($self->{verbose}) { print "Calling \"bldmake bldfiles\" in \"$self->{bldInfDir}\"\n"; }
+  open (BLDMAKE, "bldmake bldfiles 2>&1 |") or die "Error: Couldn't run \"bldmake bldfiles\" in \"$self->{bldInfDir}\": $!\n";
+  while (my $line = <BLDMAKE>) {
+    if ($line) {
+      if ($self->{verbose}) { print "\t$line"; }
+      die "Error: Problem running \"bldmake bldfiles\" in \"$self->{bldInfDir}\"\n";
+    }
+  }
+  close (BLDMAKE);
+
+  if ($self->{verbose}) { print "Calling \"abld makefile arm4\" in \"$self->{bldInfDir}\"\n"; }
+  open (ABLD, "abld makefile arm4 2>&1 |") or die "Error: Couldn't run \"abld makefile arm4\" in \"$self->{bldInfDir}\": $!\n";
+  while (my $line = <ABLD>) {
+    if ($line) {
+      if ($self->{verbose}) { print "\t$line"; }
+    }
+  }
+  close (ABLD);
+  
+  if ($self->{verbose}) { print "Calling \"abld listing arm4 urel\" in \"$self->{bldInfDir}\"\n"; }
+  open (ABLD, "abld listing arm4 urel 2>&1 |") or die "Error: Couldn't run \"abld listing arm4 urel\" in \"$self->{bldInfDir}\": $!\n";
+  while (my $line = <ABLD>) {
+    if ($line) {
+      if ($self->{verbose}) { print "\t$line"; }
+      if ($line =~ /^Created (.*)/) {
+	my $listingFile = $1;
+	push (@{$self->{listingFiles}}, $listingFile);
+      }
+    }
+  }
+  close (ABLD);
+}
+
+sub ParseAssemblerListings {
+  my $self = shift;
+  foreach my $listing (@{$self->{listingFiles}}) {
+    open (LISTING, $listing) or die "Error: Couldn't open \"$listing\" for reading: $!\n";
+    while (my $line = <LISTING>) {
+      if ($line =~ /^\s.\d+\s+__vt_\d+(\D+):$/) {  # If start of vtable section.
+	my $class = $1;
+	if (exists $self->{classes}->{$class}) { # If one of the classes we're interested in.
+	  while (my $line2 = <LISTING>) {
+	    if ($line2 =~ /^\s.\d+\s[\da-fA-F]{4}\s[\da-fA-F]{8}\s+\.word\s+(.*)/) {  # If this is a valid vtable entry.
+	      my $vtableEntry = $1;
+	      push (@{$self->{vtables}->{$class}}, $vtableEntry);
+	    }
+	    else {
+	      last;
+	    }
+	  }
+	}
+      }
+    }
+    close (LISTING);
+  }
+}
+
+sub DeleteAssemblerListings {
+  my $self = shift;
+  foreach my $listing (@{$self->{listingFiles}}) {
+    unlink $listing or die "Error: Unable to delete \"$listing\": $!\n";
+  }
+}
+
+
+#
+# Utils.
+#
+
+package Utils;
+
+use File::Basename;
+use Cwd 'abs_path', 'cwd';
+use Win32;
+
+sub AbsoluteFileName {
+  my $fileName = shift;
+  unless (-e $$fileName) {
+    die "Error: \"$$fileName\" does not exist\n";
+  }
+  (my $base, my $path) = fileparse($$fileName);
+  my $absPath = abs_path($path);
+  $$fileName = $absPath;
+  unless ($$fileName =~ /[\\\/]$/) {
+    $$fileName .= "\\";
+  }
+  $$fileName .= $base;
+  TidyFileName($fileName);
+}
+
+sub SplitFileName {
+  my $fileName = shift;
+  my $path = '';
+  my $base = '';
+  my $ext = '';
+
+  if ($fileName =~ /\\?([^\\]*?)(\.[^\\\.]*)?$/) {
+    $base = $1;
+  }
+  if ($fileName =~ /^(.*\\)/) {
+    $path = $1;
+  }
+  if ($fileName =~ /(\.[^\\\.]*)$/o) {
+    $ext =  $1;
+  }
+
+  die unless ($fileName eq "$path$base$ext");
+  return ($path, $base, $ext);
+}
+
+sub TidyFileName {
+  my $a = shift;
+  $$a =~ s/\//\\/g;      # Change forward slashes to back slashes.
+  $$a =~ s/\\\.\\/\\/g;  # Change "\.\" into "\".
+
+  if ($$a =~ /^\\\\/) {  # Test for UNC paths.
+    $$a =~ s/\\\\/\\/g;  # Change "\\" into "\".
+    $$a =~ s/^\\/\\\\/;  # Add back a "\\" at the start so that it remains a UNC path.
+  }
+  else {
+    $$a =~ s/\\\\/\\/g;  # Change "\\" into "\".
+  }
+}
+
+my @dirStack;
+
+sub PushDir {
+  my $dir = shift;
+  my $cwd = cwd();
+  chdir ($dir) or die "Error: Couldn't change working directory to \"$dir\": $!\n";
+  push (@dirStack, $cwd);
+}
+
+sub PopDir {
+  if (scalar @dirStack > 0) {
+    my $dir = pop @dirStack;
+    chdir ($dir) or die "Error: Couldn't change working directory to \"$dir\": $!\n";
+  }
+  else {
+    die "Error: Directory stack empty";
+  }
+}
+
+
+1;
+
+=head1 NAME
+
+CheckBc.pm - A module that runs some simple tests to see if one component source tree is backwards compatible another.
+
+=head1 SYNOPSIS
+
+  my $checkBc = CheckBc->New('\branch1\comp\group', '\branch2\comp\group', 0);
+  unless ($checkBc->CheckAll()) {
+    print "Check failed\n";
+  }
+
+=head1 DESCRIPTION
+
+C<CheckBc> does the following checks to see if a backwards compatibility breaking change has been introduced:
+
+=over 4
+
+=item 1
+
+Compares the ARM F<.def> files to ensure that only new lines have been added to the end of the file.
+
+=item 2
+
+Compares the sizes of any classes that have an exported C++ constructor. This is done by compiling some generated C++ code that uses the C<sizeof> operator to print the relevant class sizes to C<STDOUT>. Compilation is done using the MSVC++ compiler.
+
+=item 3
+
+Compares the v-table layouts of any classes that have an exported C++ constructor. This is done by compiling each source code set to ARM4 assembler listings, comparing the v-table sections.
+
+=back
+
+=head1 LIMITATIONS
+
+=over 4
+
+=item 1
+
+The component's headers must compile using Microsoft's Visual C++ compiler.
+
+=item 2
+
+The component's exported headers must compile when they are all #include'd into a single F<.cpp> file. If this is not the case, then additional headers and include paths can be passed into the constructor.
+
+=item 3
+
+Declarations of the component's exported C++ constructors must be found in one of the exported headers.
+
+=item 4
+
+F<.def> file lines are expected to be identical. This can lead to checks failing falsely because, for example, the name of a function may be changed without breaking BC provided the F<.def> file is carefully edited.
+
+=item 5
+
+The components must compile as ARM4. This is likely to mean that each set of source code needs to be accompanied with a suitable F<\epoc32> tree that allows it to be built. The simplest way to acheive this is to prepare a pair of subst'd drives.
+
+=back
+
+=head1 KNOWN BUGS
+
+F<bld.inf>, F<.mmp> and F<.def> file parsing is probably not as industrial strength as it should be.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/CheckRls	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,181 @@
+#!perl
+# Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use File::Find;
+use File::Basename;
+use Cwd 'abs_path';
+
+$|++;
+
+my $dir1 = shift @ARGV;
+my $dir2 = shift @ARGV;
+
+unless ($dir1 and -d $dir1 and $dir2 and -d $dir2) {
+  die "Error: Invalid arguments\n";
+}
+
+$dir1 = AbsoluteFileName($dir1);
+$dir2 = AbsoluteFileName($dir2);
+
+my $rlsFiles = FindRlsFiles($dir1, $dir2);
+DiffRlsFiles($dir1, $dir2, $rlsFiles);
+
+
+sub FindRlsFiles {
+  my $dir1 = shift;
+  my $dir2 = shift;
+  my %rlsFiles;
+  my $whichDir = $dir1;
+  my $processFileSub = sub {
+    if (/\.rls$/i) {
+      print '.';
+      my $thisFile = $File::Find::name;
+      $thisFile =~ s/^\Q$whichDir\E//;
+      $thisFile =~ s/^\///;
+      $thisFile =~ s/\//\\/g;
+      $rlsFiles{$thisFile} = 1;
+    }
+  };
+  print 'Scanning for rls files';
+  find($processFileSub, $dir1);
+  $whichDir = $dir2;
+  find($processFileSub, $dir2);
+  print "\n";
+  return \%rlsFiles;
+}
+
+sub DiffRlsFiles {
+  my $dir1 = shift;
+  my $dir2 = shift;
+  my $rlsFiles = shift;
+  foreach my $thisFile (sort keys %$rlsFiles) {
+    my $file1 = ConcatenatePaths($dir1, $thisFile);
+    my $file2 = ConcatenatePaths($dir2, $thisFile);
+    if (-e $file1 and -e $file2) {
+      CompareFiles($file1, $file2);
+    }
+    elsif (-e $file1) {
+      print "Warning: $file2 does not exist\n";
+    }
+    else {
+      print "Warning: $file1 does not exist\n";
+    }
+  }
+}
+
+sub CompareFiles {
+  my $file1 = shift;
+  my $file2 = shift;
+  open(IN1, "cpp $file1 2>NUL|") or die "Error: Unable to open \"$file1\": $!";
+  open(IN2, "cpp $file2 2>NUL|") or die "Error: Unable to open \"$file2\": $!";
+  my $result = 'identical';
+  while (my $file1Line = <IN1>) {
+    my $file2Line = <IN2>;
+    unless ($file2Line) {
+      # file2 has been fully read, so file1 must be longer.
+      $result = 'different';
+      last;
+    }
+    if ($file1Line =~ /^\#/ and $file2Line =~ /^\#/) {
+      # Ignore stuff put in by cpp.
+      next;
+    }
+
+    # Remove whitespace from the ends of lines.
+    chomp $file1Line;
+    chomp $file2Line;
+    $file1Line =~ s/\s*$//;
+    $file2Line =~ s/\s*$//;
+
+    # Do the comparison.
+    if ($file1Line ne $file2Line) {
+      $result = 'different';
+      last;
+    }
+  }
+  if (<IN2>) {
+    # We've compared all lines in file1. Need to check to see if file2 has been fully read.
+    $result = 'different';
+  }
+  close(IN1);
+  close(IN2);
+
+  if ($result eq 'identical') {
+  }
+  else {
+    print "Different: $file1 $file2\n";
+  }
+}
+
+
+sub AbsoluteFileName {
+  my $fileName = shift;
+  (my $base, my $path) = fileparse($fileName);
+  my $absPath = abs_path($path);
+  unless ($absPath =~ /[\\\/]$/) {
+    $absPath .= "\\";
+  }
+  $fileName = $absPath . $base;
+  $fileName =~ s/\//\\/g;
+  return $fileName;
+}
+
+sub ConcatenatePaths {
+  my $path1 = shift;
+  my $path2 = shift;
+  $path1 =~ s/([^\\]$)/$1\\/;
+  $path2 =~ s/^\\//;
+  return $path1.$path2;
+}
+
+=head1 NAME
+
+CheckRls - Compares all rls files found in a pair of directory trees
+
+=head1 SYNOPSIS
+
+  checkrls <dir1> <dir2>
+
+=head1 DESCRIPTION
+
+rls files contain the content of resource files that needs to be translated into different languages. Changes made to a particular language variant therefore potentially need to be applied to all other language variants. It is therefore important that changes to rls files are made in a highly controlled way. This tool provides a means of comparing the rls found in a pair of directory trees, and reporting which ones have changed.
+
+The rls files are run through the C preprocessor before being compared. This means that changes to comments will be ignored. Also, differences in white space (space and tab characters) at the end of a line are ignored. Each file pair that contains any other kind of difference is reported to C<STDOUT>. Use a conventional differencing tool to get a detailed picture of what the differences are.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/CheckRls.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Class/DISTRIBUTION.policy	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2 @@
+Category T
+OSD:	Reference/Test	Tools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Class/Singleton.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,352 @@
+#============================================================================
+#
+# Class::Singleton.pm
+#
+# Implementation of a "singleton" module which ensures that a class has
+# only one instance and provides global access to it.  For a description 
+# of the Singleton class, see "Design Patterns", Gamma et al, Addison-
+# Wesley, 1995, ISBN 0-201-63361-2
+#
+# Written by Andy Wardley <abw@cre.canon.co.uk>
+#
+# Copyright (C) 1998 Canon Research Centre Europe Ltd.  All Rights Reserved.
+#
+#----------------------------------------------------------------------------
+#
+# $Id: Singleton.pm,v 1.3 1999/01/19 15:57:43 abw Exp $
+#
+#============================================================================
+
+package Class::Singleton;
+
+require 5.004;
+
+use strict;
+use vars qw( $RCS_ID $VERSION );
+
+$VERSION = sprintf("%d.%02d", q$Revision: 1.3 $ =~ /(\d+)\.(\d+)/);
+$RCS_ID  = q$Id: Singleton.pm,v 1.3 1999/01/19 15:57:43 abw Exp $;
+
+
+
+#========================================================================
+#                      -----  PUBLIC METHODS -----
+#========================================================================
+
+#========================================================================
+#
+# instance()
+#
+# Module constructor.  Creates an Class::Singleton (or derivative) instance 
+# if one doesn't already exist.  The instance reference is stored in the
+# _instance variable of the $class package.  This means that classes 
+# derived from Class::Singleton will have the variables defined in *THEIR*
+# package, rather than the Class::Singleton package.  The impact of this is
+# that you can create any number of classes derived from Class::Singleton
+# and create a single instance of each one.  If the _instance variable
+# was stored in the Class::Singleton package, you could only instantiate 
+# *ONE* object of *ANY* class derived from Class::Singleton.  The first
+# time the instance is created, the _new_instance() constructor is called 
+# which simply returns a reference to a blessed hash.  This can be 
+# overloaded for custom constructors.  Any addtional parameters passed to 
+# instance() are forwarded to _new_instance().
+#
+# Returns a reference to the existing, or a newly created Class::Singleton
+# object.  If the _new_instance() method returns an undefined value
+# then the constructer is deemed to have failed.
+#
+#========================================================================
+
+sub instance {
+    my $class = shift;
+
+    # get a reference to the _instance variable in the $class package 
+    no strict 'refs';
+    my $instance = \${ "$class\::_instance" };
+
+    defined $$instance
+	? $$instance
+	: ($$instance = $class->_new_instance(@_));
+}
+
+
+
+#========================================================================
+#
+# _new_instance(...)
+#
+# Simple constructor which returns a hash reference blessed into the 
+# current class.  May be overloaded to create non-hash objects or 
+# handle any specific initialisation required.
+#
+# Returns a reference to the blessed hash.
+#
+#========================================================================
+
+sub _new_instance {
+    bless { }, $_[0];
+}
+
+
+
+1;
+
+__END__
+
+=head1 NAME
+
+Class::Singleton - Implementation of a "Singleton" class 
+
+=head1 SYNOPSIS
+
+    use Class::Singleton;
+
+    my $one = Class::Singleton->instance();   # returns a new instance
+    my $two = Class::Singleton->instance();   # returns same instance
+
+=head1 DESCRIPTION
+
+This is the Class::Singleton module.  A Singleton describes an object class
+that can have only one instance in any system.  An example of a Singleton
+might be a print spooler or system registry.  This module implements a
+Singleton class from which other classes can be derived.  By itself, the
+Class::Singleton module does very little other than manage the instantiation
+of a single object.  In deriving a class from Class::Singleton, your module 
+will inherit the Singleton instantiation method and can implement whatever
+specific functionality is required.
+
+For a description and discussion of the Singleton class, see 
+"Design Patterns", Gamma et al, Addison-Wesley, 1995, ISBN 0-201-63361-2.
+
+=head1 PREREQUISITES
+
+Class::Singleton requires Perl version 5.004 or later.  If you have an older 
+version of Perl, please upgrade to latest version.  Perl 5.004 is known 
+to be stable and includes new features and defect fixes over previous
+versions.  Perl itself is available from your nearest CPAN site (see
+INSTALLATION below).
+
+=head1 INSTALLATION
+
+The Class::Singleton module is available from CPAN. As the 'perlmod' man
+page explains:
+
+    CPAN stands for the Comprehensive Perl Archive Network.
+    This is a globally replicated collection of all known Perl
+    materials, including hundreds of unbunded modules.
+
+    [...]
+
+    For an up-to-date listing of CPAN sites, see
+    http://www.perl.com/perl/ or ftp://ftp.perl.com/perl/ .
+
+The module is available in the following directories:
+
+    /modules/by-module/Class/Class-Singleton-<version>.tar.gz
+    /authors/id/ABW/Class-Singleton-<version>.tar.gz
+
+For the latest information on Class-Singleton or to download the latest
+pre-release/beta version of the module, consult the definitive reference:
+
+    http://www.kfs.org/~abw/perl/
+
+Class::Singleton is distributed as a single gzipped tar archive file:
+
+    Class-Singleton-<version>.tar.gz
+
+Note that "<version>" represents the current version number, of the 
+form "1.23".  See L<REVISION> below to determine the current version 
+number for Class::Singleton.
+
+Unpack the archive to create an installation directory:
+
+    gunzip Class-Singleton-<version>.tar.gz
+    tar xvf Class-Singleton-<version>.tar
+
+'cd' into that directory, make, test and install the module:
+
+    cd Class-Singleton-<version>
+    perl Makefile.PL
+    make
+    make test
+    make install
+
+The 'make install' will install the module on your system.  You may need 
+root access to perform this task.  If you install the module in a local 
+directory (for example, by executing "perl Makefile.PL LIB=~/lib" in the 
+above - see C<perldoc MakeMaker> for full details), you will need to ensure 
+that the PERL5LIB environment variable is set to include the location, or 
+add a line to your scripts explicitly naming the library location:
+
+    use lib '/local/path/to/lib';
+
+=head1 USING THE CLASS::SINGLETON MODULE
+
+To import and use the Class::Singleton module the following line should 
+appear in your Perl script:
+
+    use Class::Singleton;
+
+The instance() method is used to create a new Class::Singleton instance, 
+or return a reference to an existing instance.  Using this method, it
+is only possible to have a single instance of the class in any system.
+
+    my $highlander = Class::Singleton->instance();
+
+Assuming that no Class::Singleton object currently exists, this first
+call to instance() will create a new Class::Singleton and return a reference
+to it.  Future invocations of instance() will return the same reference.
+
+    my $macleod    = Class::Singleton->instance();
+
+In the above example, both $highlander and $macleod contain the same
+reference to a Class::Singleton instance.  There can be only one.
+
+=head1 DERIVING SINGLETON CLASSES
+
+A module class may be derived from Class::Singleton and will inherit the 
+instance() method that correctly instantiates only one object.
+
+    package PrintSpooler;
+    use vars qw(@ISA);
+    @ISA = qw(Class::Singleton);
+
+    # derived class specific code
+    sub submit_job {
+        ...
+    }
+
+    sub cancel_job {
+        ...
+    }
+
+The PrintSpooler class defined above could be used as follows:
+
+    use PrintSpooler;
+
+    my $spooler = PrintSpooler->instance();
+
+    $spooler->submit_job(...);
+
+The instance() method calls the _new_instance() constructor method the 
+first and only time a new instance is created.  All parameters passed to 
+the instance() method are forwarded to _new_instance().  In the base class
+this method returns a blessed reference to an empty hash array.  Derived 
+classes may redefine it to provide specific object initialisation or change
+the underlying object type (to a list reference, for example).
+
+    package MyApp::Database;
+    use vars qw( $ERROR );
+    use base qw( Class::Singleton );
+    use DBI;
+
+    $ERROR = '';
+
+    # this only gets called the first time instance() is called
+    sub _new_instance {
+	my $class = shift;
+	my $self  = bless { }, $class;
+	my $db    = shift || "myappdb";    
+	my $host  = shift || "localhost";
+
+	unless (defined ($self->{ DB } 
+			 = DBI->connect("DBI:mSQL:$db:$host"))) {
+	    $ERROR = "Cannot connect to database: $DBI::errstr\n";
+	    # return failure;
+	    return undef;
+	}
+
+	# any other initialisation...
+	
+	# return sucess
+	$self;
+    }
+
+The above example might be used as follows:
+
+    use MyApp::Database;
+
+    # first use - database gets initialised
+    my $database = MyApp::Database->instance();
+    die $MyApp::Database::ERROR unless defined $database;
+
+Some time later on in a module far, far away...
+
+    package MyApp::FooBar
+    use MyApp::Database;
+
+    sub new {
+	# usual stuff...
+	
+	# this FooBar object needs access to the database; the Singleton
+	# approach gives a nice wrapper around global variables.
+
+	# subsequent use - existing instance gets returned
+	my $database = MyApp::Database->instance();
+
+	# the new() isn't called if an instance already exists,
+	# so the above constructor shouldn't fail, but we check
+	# anyway.  One day things might change and this could be the
+	# first call to instance()...  
+	die $MyAppDatabase::ERROR unless defined $database;
+
+	# more stuff...
+    }
+
+The Class::Singleton instance() method uses a package variable to store a
+reference to any existing instance of the object.  This variable, 
+"_instance", is coerced into the derived class package rather than
+the base class package.
+
+Thus, in the MyApp::Database example above, the instance variable would
+be:
+
+    $MyApp::Database::_instance;
+
+This allows different classes to be derived from Class::Singleton that 
+can co-exist in the same system, while still allowing only one instance
+of any one class to exists.  For example, it would be possible to 
+derive both 'PrintSpooler' and 'MyApp::Database' from Class::Singleton and
+have a single instance of I<each> in a system, rather than a single 
+instance of I<either>.
+
+=head1 AUTHOR
+
+Andy Wardley, C<E<lt>abw@cre.canon.co.ukE<gt>>
+
+Web Technology Group, Canon Research Centre Europe Ltd.
+
+Thanks to Andreas Koenig C<E<lt>andreas.koenig@anima.deE<gt>> for providing
+some significant speedup patches and other ideas.
+
+=head1 REVISION
+
+$Revision: 1.3 $
+
+=head1 COPYRIGHT
+
+Copyright (C) 1998 Canon Research Centre Europe Ltd.  All Rights Reserved.
+
+This module is free software; you can redistribute it and/or modify it under 
+the term of the Perl Artistic License.
+
+=head1 SEE ALSO
+
+=over 4
+
+=item Canon Research Centre Europe Perl Pages
+
+http://www.cre.canon.co.uk/perl/
+
+=item The Author's Home Page
+
+http://www.kfs.org/~abw/
+
+=item Design Patterns
+
+Class::Singleton is an implementation of the Singleton class described in 
+"Design Patterns", Gamma et al, Addison-Wesley, 1995, ISBN 0-201-63361-2
+
+=back
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/CleanEnv	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,138 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use CommandController;
+use CleanEnv;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'CleanEnv');
+my $reallyClean = 0;
+my $force = 0;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+CleanEnv::CleanEnv($iniData, $reallyClean, $force, $verbose);
+print "Environment cleaned.\n" if ($force);
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions('h' => \$help, 'r' => \$reallyClean, 'f' => \$force, 'v+' => \$verbose);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  unless ($#ARGV == -1) {
+    print "Error: Invalid number of arguments\n";
+    Usage(1);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: cleanenv [options]
+
+options:
+
+-h  help
+-r  really clean
+-f  force (don't prompt)
+-v  verbose output (-vv very verbose)\n");
+}
+
+__END__
+
+=head1 NAME
+
+CleanEnv - Restores an environment to a clean state.
+
+=head1 SYNOPSIS
+
+  cleanenv [options]
+
+options:
+
+  -h  help
+  -r  really clean
+  -f  force (don't prompt)
+  -v  verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+Provides the user with the option of:
+
+=over 4
+
+=item *
+
+Re-installing dirty components.
+
+=item *
+
+Removing files of unknown origin.
+
+=back
+
+Normally when scanning an environment certain directories and files are ignored from the point of view of C<unknown origin> status (see the document I<Installation Guide> for more details), for example intermediate build files. The C<-r> switch causes C<CleanEnv> to not ignore any files when performing it's scan, and hence do a more comprehensive clean.
+
+Normally it will ask you if you want to delete files, and/or reinstall components. The -f flag supresses these questions, and should be used with care.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/CleanEnv.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/CleanEnv.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,179 @@
+#!perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+package CleanEnv;
+
+use strict;
+
+#
+# Globals.
+#
+
+my $reallyClean = 0;
+my $force = 0;
+my $verbose = 0;
+
+
+#
+# Public.
+#
+
+sub CleanEnv {
+  my $iniData = shift;
+  $reallyClean = shift;
+  $force = shift;
+  $verbose = shift;
+  my $envDb = EnvDb->Open($iniData, $verbose);
+  (my $overallStatus, undef, my $dirtyComps, my $unaccountedItems, my $duplicates) = $envDb->CheckEnv(1, $reallyClean, 1);
+
+  if ($overallStatus == EnvDb::STATUS_CLEAN) {
+    print "Environment already clean\n";
+    return 1;
+  }
+  else {
+    my $cleaned = 1;
+    if (scalar(@$unaccountedItems) > 0) {
+      if (not $force or $verbose) {
+        foreach my $line (@$unaccountedItems) {
+          print "$line has unknown origin\n"; 
+        }
+      }
+      if (Query("\nDelete above file(s)? [y/n] ")) {
+        foreach my $file (@$unaccountedItems) {
+          if ($verbose) { print "Deleting $file...\n"; }
+          unlink $file or print "Warning: Couldn't delete $file: $!\n" if (-f $file);
+          RemoveDirIfEmpty($file) if (-d $file);
+
+          (my $dir) = Utils::SplitFileName($file);
+          RemoveDirIfEmpty($dir) if (-d $dir);
+        }
+      }
+      else {
+        $cleaned = 0;
+      }
+    }
+    if (scalar(@$dirtyComps) > 0) {
+      print "\n";
+      if (not $force or $verbose) {
+        foreach my $comp (@$dirtyComps) {
+          print "$comp->{comp} $comp->{ver} is dirty\n";
+        }
+      }
+      if (Query("\nRe-install the above component(s)? [y/n] ")) {
+        foreach my $comp (@$dirtyComps) {
+          $envDb->RefreshComponent($comp->{comp});
+        }
+      }
+      else {
+        $cleaned = 0;
+      }
+    }
+    if (scalar(@$duplicates) > 0) {
+       print "\nThe following components are claiming the ownership of the same file:\n";
+
+       # Compile a hash of conflicting components indexed by file
+       my %duplicateFiles;
+       foreach my $dup (@$duplicates) {
+         # Each list item contains the filename, plus only two conflicting components.
+         my $file = shift @$dup;
+         $duplicateFiles{$file} = [] if !exists $duplicateFiles{$file};
+         foreach my $comp (@$dup) {
+           my $found = 0;
+           foreach my $existingComp (@{$duplicateFiles{$file}}) {
+             if ($existingComp eq $comp) {
+               $found = 1;
+               last;
+             }
+           }
+           push @{$duplicateFiles{$file}}, $comp if !$found;
+         }
+       }
+
+       foreach my $file (keys(%duplicateFiles)) {
+         print join(", ", sort(@{$duplicateFiles{$file}})).": $file\n";
+       }
+       print "\nCleanEnv cannot resolve these duplicates.  To fix this, please remove one or\nmore of the conflicting components\n";
+    }
+    return $cleaned;
+  }
+}
+
+
+#
+# Private.
+#
+
+sub RemoveDirIfEmpty {
+  my $dir = shift;
+  if (DirEmpty($dir)) {
+    rmdir $dir or print "Warning: Couldn't delete \"$dir\": $!\n";
+    $dir =~ s/\\$//; # Remove trailing backslash.
+    (my $parentDir) = Utils::SplitFileName($dir);
+    RemoveDirIfEmpty($parentDir);
+  }
+}
+
+sub DirEmpty {
+  my $dir = shift;
+  return (scalar @{Utils::ReadDir($dir)} == 0);
+}
+
+sub Query {
+  my $question = shift;
+  return 1 if $force;
+  print $question;
+  my $response = lc <STDIN>;
+  chomp $response;
+  return ($response eq 'y')?1:0;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+CleanEnv.pm - Provides an interface for cleaning environments.
+
+=head1 INTERFACE
+
+=head2 CleanEnv
+
+Expects to be passed an C<IniData> reference, a flag indicating if a 'really clean' should be done, a flag indiacting of no user interaction (force) should be done, and a verbosity level. Cleans the environment accordingly. Returns true if the environment was cleaned (i.e. the user replied 'y' to all questions), false otherwise.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/CleanEnv.pod	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,73 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+
+
+=head1 NAME
+
+CleanEnv - Restores an environment to a clean state.
+
+=head1 SYNOPSIS
+
+  cleanenv [options]
+
+options:
+
+  -h  help
+  -r  really clean
+  -f  force (don't prompt)
+  -v  verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+Provides the user with the option of:
+
+=over 4
+
+=item *
+
+Re-installing dirty components.
+
+=item *
+
+Removing files of unknown origin.
+
+=back
+
+Normally when scanning an environment certain directories and files are ignored from the point of view of C<unknown origin> status (see the document I<Installation Guide> for more details), for example intermediate build files. The C<-r> switch causes C<CleanEnv> to not ignore any files when performing it's scan, and hence do a more comprehensive clean.
+
+Normally it will ask you if you want to delete files, and/or reinstall components. The -f flag supresses these questions, and should be used with care.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/CleanLocalArch	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,486 @@
+#!perl
+# Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use RelData;
+use File::Copy;
+use File::Path;
+use File::Spec;
+use File::Basename;
+use Cleaner;
+use Utils;
+use Cwd;
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $overwrite = 0;
+my $dummyRun = 0;
+my $descriptionFile;
+my $iniData = IniData->New();
+my $cleaner; # object that does most of it
+my $cleanTo;
+my $expunge = 0; # don't leave reldatas lying around
+my $reallyClean;
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+$cleaner = Cleaner->New($iniData, 0, $verbose, $reallyClean); # 0 = local not remote
+ParseDescriptionFile($descriptionFile);
+$cleaner->SetCleaningSubroutine(\&CleaningSubroutine);
+if (!$expunge) {
+  $cleaner->SetRevertingSubroutine(\&RevertingSubroutine);
+}
+$cleaner->Clean();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions('h' => \$help, 'd' => \$dummyRun, 'v+' => \$verbose, 'o' => \$overwrite, 'r' => \$reallyClean);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $descriptionFile = shift @ARGV;
+
+  unless ($descriptionFile) {
+    print "Error: Archive cleaning description file not specified\n";
+    Usage(1);
+  }
+
+  unless ($#ARGV == -1) {
+    print "Error: Invalid number of arguments\n";
+    Usage(1);
+  }
+
+  if ($dummyRun and not $verbose) {
+    $verbose = 1;
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: cleanlocalarch [options] description-file
+
+options:
+
+-h  help
+-d  dummy run (don't do anything) - assumes -v
+-r  really clean (removes corrupt and partially released components)
+-v  verbose output (-vv very verbose)
+-o  overwrite destination (delete destination then normal copy)
+
+Please note, if you are in the process of publishing components to the archive
+and specify the -r option you may lose partially released components.\n");
+
+}
+
+sub ParseDescriptionFile {
+  if ($dummyRun) { print "Running in dummy mode...\n"; }
+  if ($verbose) { print "Parsing \"$descriptionFile\"...\n"; }
+  open (DES, $descriptionFile) or die "Unable to open \"$descriptionFile\" for reading: $!\n";
+
+  while (my $line = <DES>) {
+    # Remove line feed, white space and comments.
+    chomp($line);
+    $line =~ s/^\s*$//;
+    $line =~ s/#.*//;
+    if ($line eq '') {
+      # Nothing left.
+      next;
+    }
+
+    my $keyWord;
+    my @operand;
+    if ($line =~ /^(\w+)\s+(.*)/) {
+      $keyWord = $1;
+      @operand = ();
+      if ($2) {
+        @operand = split /\s+/, $2;
+      }
+    } else {
+      $keyWord = $line;
+    }
+
+    unless (defined $keyWord) {
+      die "Error: Invalid line in \"$descriptionFile\":\n$line\n";
+      next;
+    }
+
+    if ($cleaner->ProcessDescriptionLine($descriptionFile, $keyWord, @operand)) {
+      # We're happy because Cleaner.pm knows what to do with this line
+    } elsif ($keyWord =~ /^clean_to$/) {
+      unless ($#operand == 0) {
+        die "Error: Incorrect number of arguments to \'$keyWord\' keyword in \"$descriptionFile\"\nSyntax: clean_to <path>\n";
+      }
+      if ($cleanTo) {
+        die "Error: \'$keyWord\' keyword specifed more than once in \"$descriptionFile\"\n";
+      }
+      $cleanTo = $operand[0];
+    } elsif ($keyWord =~ /^delete$/) {
+      if (@operand) {
+        die "Error: Incorrect number of arguments to \'$keyWord\' keyword in \"$descriptionFile\"\nSyntax: delete\n";
+      }
+    } elsif ($keyWord =~ /^expunge$/) {
+      $expunge = 1;
+      $cleaner->{expunge_already_cleaned} = 1;
+    } elsif ($keyWord =~ /^no_prompt$/) {
+      print "Warning: currently, CleanLocalArch does not prompt. 'no_prompt' keyword is redundant.\n";
+    } else {
+      die "Error: Unknown keyword \'$keyWord\' in \"$descriptionFile\"\n";
+    }
+  }
+
+  close (DES);
+
+  unless ($cleanTo || $expunge) {
+    die "Error: \"Clean to\" path not specified in \"$descriptionFile\"\n";
+  }
+  if ($cleanTo && $expunge) {
+    die "Error: can't specify both \"clean_to\" and \"expunge\" in \"$descriptionFile\"\n";
+  }
+
+  if ($verbose > 1) {
+    $cleaner->PrintEnvsToKeep();
+  }
+}
+
+sub CleaningSubroutine {
+  # This actually gets run by Cleaner.pm (it's a callback)
+  my $thisComp = shift;
+  my $thisVer = shift;
+  my $relDir = shift;
+  if ($expunge) {
+    print "Expunging $thisComp $thisVer from $relDir...\n" if ($verbose);
+    return DeleteComp($relDir);
+  }
+  print "Archiving $thisComp $thisVer from $relDir to $cleanTo...\n" if ($verbose);
+  my $cleanDir = "$cleanTo\\$thisComp\\$thisVer";
+  
+  if (CopyComp($relDir, $cleanDir)) {
+    print "Wiping $thisComp $thisVer from $relDir...\n" if ($verbose);
+    if (DeleteComp("$relDir")) {
+      # Check if the remaining dir is empty
+      my ($parent, $file, $ext) = Utils::SplitFileName($relDir);
+      return DeleteCompIfEmpty($parent);
+    }
+    else {
+      # Call the reverting subroutine here because cleaner.pm will only revert clean components
+      RevertingSubroutine($thisComp, $thisVer, $relDir);
+    }
+  }
+  
+  return 0;
+}
+
+sub RevertingSubroutine {
+  # Again, this gets run by Cleaner.pm
+  my $thisComp = shift;
+  my $thisVer = shift;
+  my $relDir = shift;
+  
+  print "Restoring $thisComp $thisVer to $relDir...\n" if ($verbose);
+  
+  # create the reldir if required
+  if(!-d $relDir) {
+    Utils::MakeDir($relDir);
+  }
+  
+  my $fullCleanToPath = File::Spec->catdir($cleanTo, $thisComp, $thisVer);
+  
+  my $dirContents = Utils::ReadDir($fullCleanToPath);
+  foreach my $thisFile (@$dirContents) {
+     copy(File::Spec->catdir($fullCleanToPath, $thisFile), $relDir);
+  }  
+
+  print "Removing copy of $thisComp $thisVer from $cleanTo...\n" if ($verbose);
+  if (DeleteComp("$cleanTo\\$thisComp\\$thisVer")) {
+    # Check if the remaining dir is empty
+    return DeleteCompIfEmpty("$cleanTo\\$thisComp");
+  }
+  else {
+    # Failed to even delete component
+    return 0;
+  }
+}
+
+sub CopyComp {
+  my $dir = shift;
+  my $destDir = shift;
+
+  if (-e $destDir) {
+    if ($overwrite) {
+      if ($verbose > 0) { print "Overwriting by deleting \"$destDir\"\n"; }
+      DeleteComp("$destDir");
+    }
+    else {
+      print "Error: Can't copy \"$dir\" to \"$destDir\" because directory \"$destDir\" already exists\n";
+      return 0;
+    }
+  }
+
+  my $failed = 0;
+  my @copied;
+  eval {
+    Utils::MakeDir($destDir) unless $dummyRun;
+  };
+  if ($@) {
+    print "$@";
+    $failed = 1;
+  }
+
+  if($failed==0) {
+    my $dirContents = Utils::ReadDir($dir);
+    foreach my $thisFile (@$dirContents) {
+      if ($verbose > 1) { print "\tCopying \"$dir\\$thisFile\" to \"$destDir\"...\n"; }
+      if ($dummyRun) {
+        return 1;
+      }
+      else {
+        if (copy($dir."\\".$thisFile, $destDir)) {
+          push @copied, $thisFile;
+        }
+        else {
+          print "Error: Couldn't copy \"$dir\\$thisFile\" to \"$destDir\": $!\n";
+          $failed = 1;
+          if (-f $destDir."\\".$thisFile) {
+            # Must've part-copied this file
+            push @copied, $thisFile;
+          }
+          last;
+        }
+      }
+    }
+  }
+
+  if ($failed) {
+    # Revert copied files
+    foreach my $thisFile (@copied) {
+      unlink $destDir."\\".$thisFile or print "Error: Couldn't delete $destDir\\$thisFile when cleaning up\n";
+    }
+    DeleteCompIfEmpty($destDir) or print "Error: Couldn't clean up empty directory $destDir\n";
+  }
+
+  return ($failed == 0);
+}
+
+sub DeleteComp {
+  my $dir = shift;
+
+  if (!$dummyRun) {
+    local $SIG{__WARN__} = sub {my $line = shift;
+                                $line =~ s/ at .*$//;
+                                print "Error: $line\n";};
+    
+    my $reldataFile = File::Spec->catdir($dir, 'reldata');
+
+    my $origDir = cwd();
+    chdir(dirname($dir));
+    
+    if (-e $reldataFile) {
+      # Delete the reldata file first, if something goes wrong other tools will identify the archived component
+      # as corrupt by the absence of reldata
+      if (!unlink $reldataFile) {
+        print "Error: Couldn't delete \"$reldataFile\"\n";
+        return 0;
+      }
+    }
+    
+    if (!rmtree($dir, 0, 0) or -d $dir) {
+      print "Error: Couldn't delete \"$dir\"\n";
+      return 0;
+    }
+    else {
+      chdir($origDir);
+      return 1;
+    }
+  }
+  else {
+    return 1;
+  }
+}
+
+sub DeleteCompIfEmpty {
+  my $dir = shift;
+
+  if (!$dummyRun) {
+    if (opendir(DIR, $dir)) {
+      my @files = grep( !/\.\.?$/, readdir DIR);
+      if (!closedir(DIR)) {
+        die "Error: Couldn't close '$dir' after reading. Aborting\n";
+      }
+      if (scalar(@files) == 0) {
+        print "Tidying $dir...\n" if ($verbose);
+        return DeleteComp("$dir");
+
+      }
+      else {
+        return 1; # Nothing to do
+      }
+    }
+    else {
+      print "Warning: Couldn't open '$dir' directory for reading. An empty directory may have been left behind.\n";
+      return 1; # Warning only
+    }
+  }
+  else {
+    return 1; # Dummy run
+  }
+}
+
+__END__
+
+=head1 NAME
+
+CleanLocalArch - Cleans unwanted releases from the local release archive.
+
+=head1 SYNOPSIS
+
+  cleanlocalarch [options] <description_file>
+
+options:
+
+  -h  help
+  -d  dummy run (don't do anything) - assumes -v
+  -r  really clean (removes corrupt and partially released components)
+  -v  verbose output (-vv very verbose)
+  -o  overwrite destination (delete destination then normal copy)
+
+Please note, if you are in the process of publishing components to the archive and specify the -r option you may lose partially released components.
+
+=head1 DESCRIPTION
+
+C<CleanLocalArch> allows releases to be cleaned out of a local archive. This may be useful if a local archive is consuming a large amount of disk space and there are old releases present that are no longer required. Note that releases to be cleaned are normally backed up to a user defined directory before being deleted. This allows the cleaned releases to be permanently archived (to say a writable CDROM) before they are deleted.
+
+If C<CleanLocalArch> encounters an error while backing up releases to be cleaned, it will attempt to back out of the change by deleting the backups of any releases already done. If C<CleanLocalArch> encounters errors while backing out of a clean, it has the potential to leave releases in the backup directory. Similarly, if after backing up all releases to delete, it encounters errors while actually deleting them, it may leave releases in the local archive. However the clean can be repeated to a fresh backup directory once the problem has been isolated to get rid of these releases.
+
+Before using C<CleanLocalArchive> you must write a plain text file that describes which releases you want to keep etc. The following keywords are supported:
+
+=over 4
+
+=item keep_env <component> <version>
+
+Instructs C<CleanLocalArchive> to keep all the component versions in the environment from which the specified component was released. This keyword may be used multiple times.
+
+=item keep_rel <component> <version>
+
+Instructs C<CleanLocalArchive> to keep a specific component release. This keyword may be used multiple times.
+
+=item keep_recent_env <component> <num_days>
+
+Instructs C<CleanLocalArchive> to keep all named component releases, including their environments, where the component release has been made within the specified number of days (since the current time). This keyword may be used multiple times provided it is used for different components each time.
+
+=item keep_recent_rel [component] <num_days>
+
+Instructs C<CleanLocalArchive> to keep any component releases made within the specified number of days (since the current time). If a component name is specified, C<CleanLocalArchive> will only keep component releases which match that name (and are sufficiently recent). This keyword may be used multiple times if the command is used for different components.
+
+=item keep_recent <num_days>
+
+B<Depricated:> Equivalent to keep_recent_rel without a component name entered.
+
+=item clean_to
+
+Specifies where to move release to be cleaned. Use of this keyword is mandatory and may only be used once. There is an alternative, 'expunge', which will actually delete the releases - but this is only intended for test scripts and use on real, important archives is strongly discouraged.
+
+=item force
+
+This keyword, which takes no operands, specifies that cleanlocalarch should be non-interactive.
+
+=back
+
+For example:
+
+ keep_env     pixie alpha
+ keep_env     pixie beta
+ keep_rel     comp1 rel1
+ keep_recent  10
+ clean_to     \\backup\pixie_cleaned_releases
+
+C<CleanLocalArch> will work out which component releases need to be kept in order to satisfy the specified keep criteria. All other component releases found in the archive will be moved to the C<clean_to> directory. B<It is therefore extremely important that the list of environments to keep is complete>. It is recommended that this file be controlled using a configuration management tool. It is also recommended that each project has only one description file, and that all users of C<CleanLocalArch> know where to find it.
+
+Recommended procedure for using C<CleanLocalArch>:
+
+=over 4
+
+=item 1
+
+Inform all users of the archive that a clean is about to be performed, and that the archive will be unavailable whilst this is happening.
+
+=item 2
+
+Take the archive off-line or alter directory permissions such that you are the only person that can access it.
+
+=item 3
+
+Backup the archive.
+
+=item 4
+
+Run C<CleanLocalArchive> and carefully check the list of components that are about to be cleaned. If you are happy, type 'yes' to continue, otherwise type 'no', modify your description file and re-run C<CleanLocalArchive>.
+
+=item 5
+
+Backup the C<clean_to> directory.
+
+=item 6
+
+Bring the archive back on-line.
+
+=item 7
+
+Inform all users of the archive that it is available for use once more.
+
+=back
+
+=head1 STATUS
+
+Supported. If you find a problem, please report it to us.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/CleanLocalArch.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Cleaner.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,522 @@
+# Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use RelData;
+use File::Spec;
+
+package Cleaner;
+
+sub New {
+  my $class = shift;
+  my $iniData = shift;
+  my $remote = shift;
+  my $verbose = shift;
+  my $reallyClean = shift;
+  
+  die "Cleaner didn't get an inidata" unless $iniData;
+  die "Must tell Cleaner whether you want remote or local!!!" unless defined $remote;
+  
+  my $self = {
+    iniData => $iniData,
+    remote => $remote,
+    verbose => $verbose,
+    reallyClean => $reallyClean,
+    force => 0,
+    relsToClean => {},
+    relsToKeep => {},
+    envsToKeep => {},
+    relsToKeepAfter => {},
+    envsToKeepAfter => {},
+    keepAfter => undef,
+    cleanTo => undef,
+    remoteSite => undef,
+    cleaningSubroutine => undef,
+    expunge_already_cleaned => undef
+  };
+
+  bless $self, (ref $class || $class);
+
+  $self->{remoteSite} = $iniData->RemoteSite if ($self->{remote});
+
+  return $self;
+}
+
+sub SetCleaningSubroutine {
+  my $self = shift;
+  my $cleaningsub = shift;
+  $self->{cleaningSubroutine} = $cleaningsub;
+}
+
+sub SetFinishingSubroutine {
+  my $self = shift;
+  $self->{finishingSubroutine} = shift;
+}
+
+sub SetRevertingSubroutine {
+  my $self = shift;
+  $self->{revertingSubroutine} = shift;
+}
+
+sub ProcessDescriptionLine {
+  my $self = shift;
+  my $descriptionFile = shift;
+  my $keyWord = shift;
+  my @operand = @_;
+
+  if ($keyWord =~ /^keep_env$/) {
+    unless ($#operand == 1) {
+      die "Error: Incorrect number of arguments to \'$keyWord\' keyword in \"$descriptionFile\"\nSyntax: keep_env <component> <version>\n";
+    }
+    my $comp = lc($operand[0]);
+    my $ver = lc($operand[1]);
+    if (exists $self->{envsToKeep}->{$comp}->{$ver}) {
+      die "Error: Environment \"$comp $ver\" specified for keeping more than once\n";
+    }
+    $self->{envsToKeep}->{$comp}->{$ver} = 1;
+  }
+  elsif ($keyWord =~ /^keep_rel$/) {
+    unless ($#operand == 1) {
+      die "Error: Incorrect number of arguments to \'$keyWord\' keyword in \"$descriptionFile\"\nSyntax: keep_rel <component> <version>\n";
+    }
+    my $comp = lc($operand[0]);
+    my $ver = lc($operand[1]);
+    $self->{relsToKeep}->{$comp}->{$ver} = 1;
+  }
+  elsif ($keyWord eq "keep_recent_env") {
+    unless ($#operand == 1) {
+      die "Error: Incorrect number of arguments to \'$keyWord\' keyword in \"$descriptionFile\"\nSyntax: keep_recent_env <component> <num_days>\n";
+    }
+    my $comp = lc($operand[0]);
+    
+    my $time = $operand[1];
+    
+    if ($time !~ /^\d+$/) {
+      die "Error: The <num_days> argument for the '$keyWord' keyword must be a positive number\n";
+    }
+    
+    $time = time - ($time * 60 * 60 * 24);   
+    
+    if (exists $self->{envsToKeepAfter}->{$comp}) {
+      die "Error: keep_recent_env called more than once on component \'$comp\' in \"$descriptionFile\"\n";
+    }
+    $self->{envsToKeepAfter}->{$comp} = $time;
+  }
+  elsif ($keyWord eq "keep_recent_rel") {
+    if ($#operand == 0) {
+      if (defined $self->{keepAfter}) {
+        die "Error: \'$keyWord\' keyword used more than once with no component name in \"$descriptionFile\"\n";
+      }
+      else {
+        my $keepAfter = $operand[0];
+        
+        if ($keepAfter !~ /^\d+$/) {
+          die "Error: The <num_days> argument for the '$keyWord' keyword must be a positive number\n";
+        }
+
+        $self->{keepAfter} = time - ($keepAfter * 60 * 60 * 24);
+      }
+    }
+    elsif ($#operand == 1) {
+      my $comp = lc($operand[0]);
+      my $time = $operand[1];
+      
+      if ($time !~ /^\d+$/) {
+        die "Error: Error: The <num_days> argument for the '$keyWord' keyword must be a positive number\n";
+      }
+      
+      $time = time - ($time * 60 * 60 * 24);
+      if (exists $self->{relsToKeepAfter}->{$comp}) {
+        die "Error: keep_recent_rel called more than once on component \'$comp\' in \"$descriptionFile\"\n";
+      }
+      $self->{relsToKeepAfter}->{$comp} = $time;
+    }
+    else {
+      die "Error: Incorrect number of arguments to \'$keyWord\' keyword in \"$descriptionFile\"\nSyntax: keep_recent_rel [<component>] <num_days>\n";
+    }
+  } 
+  elsif ($keyWord =~ /^keep_recent$/) {
+    unless ($#operand == 0) {
+      die "Error: Incorrect number of arguments to \'$keyWord\' keyword in \"$descriptionFile\"\nSyntax: keep_recent <num_days>\n";
+    }
+    if (defined $self->{keepAfter}) {
+      die "Error: \'$keyWord\' keyword used more than once in \"$descriptionFile\"\n";
+    }
+    
+    my $keepAfter = $operand[0];
+    
+    if ($keepAfter !~ /^\d+$/) {
+      die "Error: The <num_days> argument for the '$keyWord' keyword must be a positive number\n";
+    }
+    
+    $self->{keepAfter} = time - ($keepAfter * 60 * 60 * 24);  
+    print "Warning: The 'keep_recent' keyword has been deprecated, as it\nresults in broken environments. You can use the 'keep_recent_rel' keyword\nwithout a component name instead if you really mean this, to get rid of this\nwarning.\n";
+  } elsif ($keyWord =~ /^force$/) {
+    if (@operand) {
+      die "Error: Incorrect number of arguments to \'$keyWord\' keyword in \"$descriptionFile\"\nSyntax: force\n";
+    }
+    if ($self->{force}) {
+      die "Error: \'$keyWord\' keyword used more than once in \"$descriptionFile\"\n";
+    }
+    $self->{force} = 1;
+  }
+  else {
+    return 0;
+    
+  }
+  return 1;
+}
+
+sub PrintEnvsToKeep {
+  my $self = shift;
+  print "Environments to keep:\n";
+  $self->TablePrintHash($self->{envsToKeep});
+}
+
+# Reads {envsToKeep} and {envsToKeepAfter}, updates {envsToKeep}, and fills out {relsToKeep}.
+sub FindRelsToKeep {
+  my $self = shift;
+
+  # Convert envsToKeepAfter into a list of envsToKeep
+  foreach my $keepEnv (keys %{$self->{envsToKeepAfter}}) {
+    my $keepAfter = $self->{envsToKeepAfter}->{$keepEnv};
+
+    foreach my $ver (keys %{$self->{archiveComponents}->{$keepEnv}}) {
+      # Check reldata time
+      my $timestamp;
+      if ($self->{remote}) {
+        my $file = $self->{iniData}->PathData->RemoteArchivePathForExistingComponent($keepEnv, $ver, $self->{iniData}->RemoteSite);
+        die "Failed to find path for \"$keepEnv\" \"$ver\"\n" unless $file;
+        $file .= "/$keepEnv$ver.zip";
+        $timestamp = $self->{remoteSite}->FileModifiedTime($file);
+        
+      } elsif (-e File::Spec->catfile($self->GetPathForExistingComponent($keepEnv, $ver), 'reldata')) {
+        my $relData = RelData->Open($self->{iniData}, $keepEnv, $ver, $self->{verbose});
+        $timestamp = $relData->ReleaseTime();
+      } else {
+        next;
+      }
+
+      if ($timestamp >= $keepAfter) {
+        $self->{envsToKeep}->{$keepEnv}->{$ver} = 1; # It's new; keep it
+      }
+    }
+  }
+
+  # Convert envsToKeep into a list of relsToKeep
+  foreach my $thisComp (sort(keys %{$self->{envsToKeep}})) {
+    foreach my $thisVer (sort(keys %{$self->{envsToKeep}->{$thisComp}})) {
+      if ($self->{verbose}) { print "Reading release data from $thisComp $thisVer...\n"; }
+   
+      my $thisCompPath = $self->{iniData}->PathData->LocalArchivePathForExistingComponent($thisComp, $thisVer);
+     
+      if ($thisCompPath) {
+        $thisCompPath = File::Spec->catfile($thisCompPath, 'reldata'); 
+      } else {
+        if ($self->{remote}) {
+          die "Error: Unable to continue since cleanremote requires a corresponding version of '$thisComp $thisVer' in your local archive(s).  Please check that your CBR configuration file is in order and is pointing to the correct location for your local archive(s).  Failing this you will need to ensure you have a copy of '$thisComp $thisVer' in one of your configured local archives\n";      
+        } else {
+          die "Internal error:  Release not found in local archive when attempting to get environment for kept component\n";
+        }
+      }
+      
+      if (-e $thisCompPath) {  
+        my $thisRelData = RelData->Open($self->{iniData}, $thisComp, $thisVer, $self->{verbose});
+        my $thisRelEnv = $thisRelData->Environment();
+   
+        foreach my $compToKeep (keys %{$thisRelEnv}) {
+          my $verToKeep = $thisRelEnv->{$compToKeep};
+          $self->{relsToKeep}->{lc($compToKeep)}->{lc($verToKeep)} = 1;
+          delete $self->{archiveComponents}->{$compToKeep}->{$verToKeep}; # saves time when finding components to remove
+        }
+      } elsif ($self->{remote}) {
+        die "Error: Unable to continue because the environment for '$thisComp $thisVer' could not be identified (corrupt release; missing reldata file)\n";
+      } else {
+        print "Warning: Unable to identify the environment for '$thisComp $thisVer'. This may result in additional component releases being cleaned from the archive.  (Corrupt release; missing reldata file)\n";
+      }
+    }
+  }
+}
+
+sub Clean {
+  my $self = shift;
+
+  # remoteSite may be defined, or it may not...
+  # If not, then this will operate on the local archive  
+  foreach my $archiveComponent (@{$self->{iniData}->PathData->ListComponents($self->{remoteSite})}) {
+    map {$self->{archiveComponents}->{$archiveComponent}->{$_} = 1} $self->{iniData}->PathData->ListVersions($archiveComponent, $self->{remoteSite});
+  }
+
+  $self->FindRelsToKeep();
+
+  if ($self->{verbose} > 1) {
+    print "Releases to keep:\n";
+    $self->TablePrintHash($self->{relsToKeep});
+  }
+
+  $self->FindRelsToClean();
+  
+  if (%{$self->{relsToClean}}) {
+    print "About to clean the following releases:\n";
+    $self->TablePrintHash($self->{relsToClean});
+    if ($self->Query("Continue?")) {
+      $self->CleanReleases();
+    }
+    else {
+      print "Aborting...\n";
+      exit;
+    }
+  }
+  else {
+    print "Nothing to clean\n";
+  }
+}
+
+# Walks the archive, filling out %relsToClean with releases that are not present in %relsToKeep.
+sub FindRelsToClean {
+  my $self = shift;
+
+  select STDOUT; $|=1;
+  
+  foreach my $thisArchComp (keys %{$self->{archiveComponents}}) {
+    foreach my $ver (keys %{$self->{archiveComponents}->{$thisArchComp}}) {
+      $self->CheckComp($thisArchComp, $ver);
+    }
+  }
+}
+
+sub CheckComp {
+  my $self = shift;
+  my $comp = lc(shift);
+  my $thisVer = shift;
+
+  unless (exists $self->{relsToKeep}->{$comp}->{lc($thisVer)}) {
+    my $timestamp;
+    if ($self->{remote}) {
+      my $file = $self->{iniData}->PathData->RemoteArchivePathForExistingComponent($comp, $thisVer, $self->{iniData}->RemoteSite);
+      die "Failed to find path for \"$comp\" \"$thisVer\"\n" unless $file;
+      $file .= "/$comp$thisVer.zip";
+      $timestamp = $self->{remoteSite}->FileModifiedTime($file);
+    } elsif (-e File::Spec->catfile($self->GetPathForExistingComponent($comp, $thisVer), 'reldata')) {
+          my $relData = RelData->Open($self->{iniData}, $comp, $thisVer, $self->{verbose});
+          $timestamp = $relData->ReleaseTime();
+    } elsif (!$self->{reallyClean}) {
+          print "Warning: $comp $thisVer is not a complete release in " . $self->GetPathForExistingComponent($comp, $thisVer) . '.' .
+          "\nThe component may be in the process of being released into the archive or it may be corrupt." .
+          "\nRe-run with the -r option to remove this release from the archive.\n";
+          return;
+    }
+    else {
+          $self->{relsToClean}->{$comp}->{lc($thisVer)} = $thisVer;
+          return;
+    }
+         
+    if ($self->{keepAfter} && $timestamp >= $self->{keepAfter}) {
+      print "Not cleaning $comp $thisVer - too new\n";
+      return;
+    }
+    if (exists($self->{relsToKeepAfter}->{$comp}) && $timestamp >= $self->{relsToKeepAfter}->{$comp}) {
+      print "Not cleaning $comp $thisVer - too new\n";
+      return;
+    }
+    $self->{relsToClean}->{$comp}->{lc($thisVer)} = $thisVer;
+  }
+}
+
+sub TablePrintHash {
+  my $self = shift;
+  my $hash = shift;
+  my @tableData;
+  foreach my $thisComp (sort keys %{$hash}) {
+    foreach my $thisVer (sort keys %{$hash->{$thisComp}}) {
+      push (@tableData, [$thisComp, $thisVer]);
+    }
+  }
+  $self->{iniData}->TableFormatter->PrintTable(\@tableData);
+  print "\n";
+}
+
+sub CleanReleases {
+  my $self = shift;
+
+  my $cleaningsub = $self->{cleaningSubroutine};
+  die "No execution sub provided" unless ref $cleaningsub;
+
+  my $failed = 0;
+  my $cleaned = {};
+
+  print "Cleaning...\n";
+
+  foreach my $thisComp (sort keys %{$self->{relsToClean}}) {
+    foreach my $thisVer (sort values %{$self->{relsToClean}->{$thisComp}}) { # use values to get correct case
+      my $path = $self->GetPathForExistingComponent($thisComp, $thisVer);
+      if (!defined($path)) {
+        print "Unable to get path for $thisComp $thisVer: possible disconnection of FTP site?\n";
+        $failed = 1;
+        last;
+      }
+      elsif (&$cleaningsub($thisComp, $thisVer, $path)) {
+        # Cleaning worked
+        $cleaned->{$thisComp}->{lc($thisVer)} = [$thisVer, $path];
+      }
+      else {
+        print "Unable to delete $thisComp $thisVer from $path\n";
+        $failed = 1;
+        last;
+      }
+    }
+    if ($failed) {
+      last;
+    }
+  }
+
+  if ($failed) {
+    my $revertsub = $self->{revertingSubroutine};
+    if (ref $revertsub) {
+      # Attempt to roll back
+      print "Warning: Cleaning failed. Rolling back...\n";
+      $failed = 0;
+      foreach my $undoComp (sort keys %$cleaned) {
+	my @vers = map( $_->[0], values %{$cleaned->{$undoComp}} );
+        foreach my $undoVer (sort @vers) {
+          my $path = $cleaned->{$undoComp}->{lc($undoVer)}->[1];
+          if (!&$revertsub($undoComp, $undoVer, $path)) {
+            $failed = 1;
+	  }
+	}
+      }
+      if ($failed) {
+        die "Warning: Cleaning failed and rollback also failed - the archive may have been left in an indeterminate state\n";
+      }
+    }
+    else {
+      # No rollback routine
+      die "Warning: Cleaning failed - the archive may have been left in an indeterminate state\n";
+    }
+  }
+  else {
+    my $finishingsub = $self->{finishingSubroutine};
+    if (ref $finishingsub) {
+      # Finish the job
+      foreach my $thisComp (sort keys %{$cleaned}) {
+	my @vers = map( $_->[0], values %{$cleaned->{$thisComp}} );
+        foreach my $thisVer (sort @vers) {
+          my $path = $cleaned->{$thisComp}->{lc($thisVer)}->[1];
+          if (!&$finishingsub($thisComp, $thisVer, $path)) {
+            print "Warning: Failed to complete cleaning of $thisComp at version $thisVer\n";
+            $failed = 1;
+          }
+        }
+      }
+    }
+    if (!$failed) {
+      print "Cleaning complete.\n";
+    }
+  }
+}
+
+sub GetPathForExistingComponent {
+  my $self = shift;
+  my $thisComp = shift;
+  my $thisVer = shift;
+  my $path;
+  if ($self->{remote}) {
+    $path = $self->{iniData}->PathData->RemoteArchivePathForExistingComponent($thisComp, $thisVer, $self->{remoteSite});
+  } else {
+    $path = $self->{iniData}->PathData->LocalArchivePathForExistingComponent($thisComp, $thisVer);
+  }
+  return $path;
+}
+
+sub Query {
+  my $self = shift;
+  my $msg = shift;
+
+  if ($self->{force}) {
+    print "Skipping question \"$msg\" because of \"force\" keyword - assuming \"yes\"\n" if ($self->{verbose});
+    return 1;
+  }
+
+  print "$msg [yes/no] ";
+  my $response = <STDIN>;
+  chomp $response;
+  return ($response =~ m/^y/i);
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Cleaner.pm - A module to clean an archive
+
+=head1 DESCRIPTION
+
+A module to clean an archive. Supposed to implement the common bits between C<cleanlocalarch> and C<cleanremote>, but the first of those commands has been temporarily suspended. The basic plan is: let it process the lines of your cleaning description file, then give it a subroutine to operate on the releases that should be cleaned. It will do the intervening stages of working out what releases should be kept, and which should be clean.
+
+=head1 INTERFACE
+
+=head2 New
+
+Pass it an IniData object, and a 0 or 1 to indicate whether it should act locally or remotely. If it's acting remotely, it will get a RemoteSite object from the IniData object.
+
+=head2 SetCleaningSubroutine
+
+Pass in a reference to a subroutine to actually do the first phase of cleaning. The subroutine will be passed the component name, the version number and the path. If this phase passes, the optional finishing routine will be called next. If it fails at any point, the reverting routine (if defined) will be called on each component which was 'cleaned'.
+
+=head2 SetFinishingSubroutine
+
+Pass in a reference to a 'finishing' subroutine to complete the cleaning (see L<SetCleaningSubroutine|setcleaningsubroutine>). If this routine has not been called then no finishing routine will be set up, and the clean will be said to have completed once the first phase is done. The finishing subroutine will be passed the component name, the version number and the path.
+
+=head2 SetRevertingSubroutine
+
+Pass in a reference to a 'reverting' subroutine to undo any 'cleaned' components (see L<SetCleaningSubroutine|setcleaningsubroutine>). If this routine has not been called then the cleaner will not attempt to revert changes if cleaning fails. The reverting subroutine will be passed the component name, the version number and the (original) path.
+
+=head2 ProcessDescriptionLine
+
+This should be passed the name of the description file (for error messages only), then a keyword, then an array of operands. It will interpret lines keep_rel, keep_env, force, and keep_recent. If it understands a line it returns 1; otherwise it returns 0.
+
+=head2 PrintEnvsToKeep
+
+This just prints a list of the environments it is going to keep.
+
+=head2 Clean
+
+This actually does the cleaning. It first finds the releases to keep, then finds the releases to clean, then runs the cleaning subroutine for each one.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/CommandController.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,294 @@
+# Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+package CommandController;
+
+use strict;
+
+
+#
+# Constants.
+#
+
+use constant READER_SEMAPHORE_NAME => "CommandControllerReaderSemaphore_";
+use constant WRITER_SEMAPHORE_NAME => "CommandControllerWriterSemaphore_";
+use constant MAX_NUM_CONCURRENT_READERS => 100;
+use constant CMD_INDEPENDANT => 0; # Commands that can be run regardless of what else is running.
+use constant CMD_ENV_READER => 1;  # Commands that only read the environment.
+use constant CMD_ENV_WRITER => 2;  # Commands that modify the environment.
+
+my %commandInfo = (
+ 		   EnvMembership => CMD_INDEPENDANT,
+		   CleanRemote => CMD_INDEPENDANT,
+		   ExportEnv => CMD_INDEPENDANT,
+		   ExportRel => CMD_INDEPENDANT,
+		   CopyRel => CMD_INDEPENDANT,
+		   ImportEnv => CMD_INDEPENDANT,
+		   ImportRel => CMD_INDEPENDANT,		
+		   LatestVer => CMD_INDEPENDANT,
+		   PullEnv => CMD_INDEPENDANT,
+		   PushEnv => CMD_INDEPENDANT,
+		   PushRel => CMD_INDEPENDANT,
+		   PullRel => CMD_INDEPENDANT,
+		   DeltaEnv => CMD_INDEPENDANT,
+		   BinInfo => CMD_ENV_READER,
+		   SourceInfo => CMD_ENV_READER,
+		   DiffEnv => CMD_ENV_READER,
+		   DiffRel => CMD_ENV_READER,
+		   ModNotes => CMD_ENV_READER,
+		   ViewNotes => CMD_ENV_READER,
+		   BuildRel => CMD_ENV_READER,
+		   EnvSize => CMD_ENV_READER,
+		   MakeSnapShot => CMD_ENV_READER,
+		   CleanEnv => CMD_ENV_WRITER,
+		   EnvInfo => CMD_ENV_WRITER,
+		   GetEnv => CMD_ENV_WRITER,
+		   GetRel => CMD_ENV_WRITER,
+		   GetSource => CMD_ENV_WRITER,
+		   InstallSnapShot => CMD_ENV_WRITER,
+		   MakeEnv => CMD_ENV_WRITER,
+		   MakeRel => CMD_ENV_WRITER,
+		   RemoveRel => CMD_ENV_WRITER,
+		   RemoveSource => CMD_ENV_READER,
+		   PrepEnv => CMD_ENV_WRITER,
+		   PrepRel => CMD_ENV_WRITER,
+		   ValidateEnv => CMD_ENV_WRITER,
+		   ValidateRel => CMD_ENV_WRITER,
+		   EnvData => CMD_ENV_WRITER
+		  );
+
+
+#
+# Public.
+#
+
+sub New {
+  my $pkg = shift;
+  my $self = {};
+  bless $self, $pkg;
+  $self->{iniData} = shift;
+  $self->{command} = shift;
+  unless ($self->{iniData}->Win32ExtensionsDisabled()) {
+    $self->OpenSemaphores();
+    unless ($self->CanRun()) {
+      die "Error: Cannot run $self->{command} because another command is already running\n";
+    }
+  }
+  return $self;
+}
+
+
+#
+# Private.
+#
+
+sub CanRun {
+  my $self = shift;
+  $self->{canRun} = 0;
+  my $commandType = $self->CommandType();
+  if ($commandType == CMD_INDEPENDANT) {
+    $self->{canRun} = 1;
+  }
+  elsif ($commandType == CMD_ENV_READER) {
+    unless ($self->WriterRunning()) {
+      $self->{canRun} = 1;
+      $self->IncReadersRunning();
+    }
+  }
+  elsif ($commandType == CMD_ENV_WRITER) {
+    if (($self->NumReadersRunning() == 0) and not $self->WriterRunning()) {
+      $self->{canRun} = 1;
+      $self->SetWriterRunning();
+    }
+  }
+  return $self->{canRun};
+}
+
+sub DESTROY {
+  my $self = shift;
+  if ($self->{canRun}) {
+    my $commandType = $self->CommandType();
+    if ($commandType == CMD_INDEPENDANT) {
+      # Nothing to do.
+    }
+    elsif ($commandType == CMD_ENV_READER) {
+      $self->DecReadersRunning();
+    }
+    elsif ($commandType == CMD_ENV_WRITER) {
+      $self->ClearWriterRunning();
+    }
+  }
+}
+
+sub OpenSemaphores {
+  my $self = shift;
+  my $currentEnvironment = Utils::CurrentDriveLetter() . lc(Utils::EpocRoot());
+  $currentEnvironment =~ s/[:\\\/]+/_/g; # Can't have slashes in semaphore name
+  
+  require Win32::Semaphore;
+  # No longer 'use', as that fails with some versions of Perl
+  $self->{writerSemaphore} = Win32::Semaphore->new(0, 2, WRITER_SEMAPHORE_NAME . $currentEnvironment) or die; # 2 because when counting the semaphore, it need to be incremented and then decremented (release(0, $var) doesn't work).
+  $self->{readerSemaphore} = Win32::Semaphore->new(0, MAX_NUM_CONCURRENT_READERS, READER_SEMAPHORE_NAME . $currentEnvironment) or die;
+}
+
+sub CommandType {
+  my $self = shift;
+  die unless exists $commandInfo{$self->{command}};
+  return $commandInfo{$self->{command}};
+}
+
+sub WriterRunning {
+  my $self = shift;
+  my $writerRunning = SemaphoreCount($self->{writerSemaphore});
+  die if $writerRunning > 1;
+  return $writerRunning;
+}
+
+sub SetWriterRunning {
+  my $self = shift;
+  SemaphoreInc($self->{writerSemaphore});
+}
+
+sub ClearWriterRunning {
+  my $self = shift;
+  SemaphoreDec($self->{writerSemaphore});
+}
+
+sub NumReadersRunning {
+  my $self = shift;
+  return SemaphoreCount($self->{readerSemaphore});
+}
+
+sub IncReadersRunning {
+  my $self = shift;
+  SemaphoreInc($self->{readerSemaphore});
+}
+
+sub DecReadersRunning {
+  my $self = shift;
+  SemaphoreInc($self->{readerSemaphore});
+}
+
+sub SemaphoreCount {
+  my $semaphore = shift;
+  my $count;
+  $semaphore->release(1, $count) or die;
+  $semaphore->wait();
+  return $count;
+}
+
+sub SemaphoreInc {
+  my $semaphore = shift;
+  $semaphore->release(1) or die;
+}
+
+sub SemaphoreDec {
+  my $semaphore = shift;
+  $semaphore->wait();
+}
+
+1;
+
+=head1 NAME
+
+CommandController.pm - Provides a means of controlling which commands can run concurrently within a single environment.
+
+=head1 DESCRIPTION
+
+Certain commands can reliably be run while others are running, whereas others must be run in isolation. This class has responsibility for defining a set of rules regarding concurrent running of commands and ensuring that they are followed. Each command is classified into one of three types:
+
+=over 4
+
+=item 1 Independant
+
+Commands of this type can be run regardless of whatever else may also be running at the time because they neither read nor modify the environment. Commands of this type:
+
+ 		   EnvMembership
+		   CleanRemote
+		   ExportEnv
+		   ExportRel
+		   ImportEnv
+		   ImportRel		
+		   LatestVer
+		   PullEnv
+		   PullRel
+		   PushEnv
+		   PushRel
+		   DeltaEnv
+
+
+=item 2 Environment readers
+
+Commands of this type can be run provided there aren't any writers running. Commands of this type:
+
+		   BinInfo
+		   DiffEnv
+		   DiffRel
+                   MakeSnapShot
+		   ModNotes
+                   RemoveSource
+		   ViewNotes
+
+=item 3 Environment writers
+
+Commands of this type may modify the state of the environment, and so may only run providing there are no other writers or readers running. Commands of this type:
+
+		   CleanEnv
+		   EnvInfo
+		   GetEnv
+		   GetRel
+		   GetSource
+                   InstallSnapShot
+		   MakeEnv
+		   MakeRel
+		   RemoveRel
+		   PrepEnv
+		   PrepRel
+		   ValidateEnv
+		   ValidateRel
+
+=back
+
+To enforce these runs, multiple instances of C<CommandController> (running in different processes) need to know what else is running at any particular point in time. This information could have been stored in a file, but this has the significant problem that commands that are prematurely killed by the user (perhaps by hitting ctrl-c), they will not cleanup after themselves and so the environment could get stuck in an invalid state. To avoid this problem, a pair of Win32 semaphores are used to count the number of readers and writers currently active at any point in time. Note, only the counting properties of the semaphores are used, which is somewhat unusual (normally semaphores are used to control the execution of threads). The advantage of this scheme is that even if a command is prematurely killed by the user, its handles to the semaphoreswill be released. This may mean that for a period of time the semaphores may have invalid value, but once all commands that are currently running have completed, the semaphores will be destroyed (kernel side) and the environment is guaranteed of being in a 'ready to run' state.
+
+=head1 INTERFACE
+
+=head2 New
+
+Expects to be passed an C<IniData> reference and the name of the command that is about to be run (this is case sensitive). Creates and returns a new C<CommandController> instance if the command if free to run. Dies if not. The C<IniData> reference is used to determine if Win32 extensions have been disabled. If this is the case then the check to see if this command is free to run is not done (since doing so relies on Win32 functionality).
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/CopyRel	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,147 @@
+#!perl
+# Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use CommandController;
+use CopyRel;
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $force = 0;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'CopyRel');
+my $component;
+my $versionToCopy;
+my $version;
+my $internalVersion;
+my $project;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+PrintHeinousWarning();
+CopyRel();
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions("h" => \$help, "f" => \$force, "v+" => \$verbose, "w=s" => \$project);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $component = shift @ARGV;
+  $versionToCopy = shift @ARGV;
+  $version = shift @ARGV;
+  $internalVersion = shift @ARGV;
+
+  unless (defined $component and defined $versionToCopy and defined $version and defined $internalVersion and $#ARGV == -1) {
+    print "Error: Invalid arguments\n";
+    Usage(1);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: copyrel [options] <component> <external_version_to_copy> <new_external_version> <new_internal_version>
+
+options:
+
+-h                    help
+-f                    if check fails, overwrite external copy
+-v                    verbose output (-vv very verbose)
+-w <project>          copy the release in given \"project\"
+\n");
+}
+
+sub PrintHeinousWarning {
+  Utils::QueryUnsupportedTool(<<GUILTY, 0);  # Set $reallyrun as 0
+Warning: This operation may pollute the archive if used incorrectly. 
+Also note that if the copy fails because of an interruption, disk 
+full or a network error, you must re-run copyrel with -f. 
+
+Do you want to continue? (y/n)
+GUILTY
+}
+
+sub CopyRel {
+  my $cr = new CopyRel($iniData, $force, $verbose, $project);
+  
+  $cr->CopyRelease($component, $versionToCopy, $version, $internalVersion);
+  $cr->SummariseErrors(1);
+}
+
+
+__END__
+
+=head1 NAME
+
+CopyRel - Modifies an archive so that an additional release version is created which is a copy of a release version input.
+
+=head1 SYNOPSIS
+
+  copyrel [options] <component> <external_version_to_copy> <new_external_version> <new_internal_version>
+
+options:
+
+  -h                    help
+  -f                    if check fails, overwrite external copy
+  -v                    verbose output (-vv very verbose)
+  -w <project>          copy the release in given \"project\"
+
+=head1 DESCRIPTION
+
+The command CopyRel is used to create a new release which is based upon another release. The contents of the new release version is identical to the release input, except the external and internal version is updated as specified.
+
+By using CopyRel a new baseline release can be created, which will inherit the environment of the original baseline release version that was copied. This is useful renumbering a baseline.
+
+By default the new release is created in the same archive as the release which is copied. The option -w <project> changes the default behavior so that the archive to create the new release can be set as <project>.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/CopyRel.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/CopyRel.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,179 @@
+#!perl
+# Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# CopyRelease - contains fuctions to copy a release in an archive
+#
+
+package CopyRel;
+
+use strict;
+use RelData;
+use PushPullRel;
+
+BEGIN {
+  @CopyRel::ISA=('PushPullRel');
+};
+
+sub new {
+  my $class = shift;
+  my $inidata = shift; 
+  my $force = shift;
+  my $verbose = shift;
+  my $project = shift;
+
+  my $self = bless {}, (ref $class || $class);
+
+  $self->{iniData} = $inidata;
+  $self->{force} = $force;
+  $self->{verbose} = $verbose;
+  $self->{project} = $project;
+  $self->{errors} = [];
+  
+  return $self;
+}
+
+sub CopyRelease {
+  my $self = shift;
+  my $component = shift;
+  my $versionToCopy = shift;
+  my $version = shift; 
+  my $internalVersion = shift;
+
+  my $releaseDir = $self->ObtainReleaseDir($component, $versionToCopy);
+  my $releaseCopyDir;
+  
+  # Obtain the release copy directory
+  if(defined $self->{project}){
+    $releaseCopyDir = $self->{iniData}->PathData->LocalArchivePathForNewComponent($component, $version, $self->{project});
+  }
+  else{
+    $releaseCopyDir = $releaseDir; 
+    $releaseCopyDir =~ s/$versionToCopy$/$version/; 
+  }
+  
+  eval {
+    
+    # Preform the copying of files
+    $self->PerformCopying($component, $versionToCopy, $releaseCopyDir, $releaseDir);
+    
+    if($versionToCopy !~ /^$version$/i || $versionToCopy !~ /^$internalVersion$/i){
+      # Update the reldata so that the release number is correct...
+      $self->UpdateRelData($component, $version, $internalVersion);
+    }
+  };
+  
+  if ($@) {
+    print "$@";
+    $self->_AddError($@);
+  }
+}
+
+sub UpdateRelData {
+  my $self = shift;
+  my $component = shift;
+  my $version = shift;
+  my $internalVersion = shift;
+  
+  my $reldata;
+  
+  if (!($reldata = RelData->Open($self->{iniData}, $component, $version, 0))) {
+    die "ERROR: Couldn't open version '$version' of '$component'";
+  }
+  
+  $reldata->UpdateProject($self->{project});
+  $reldata->UpdateInternalVersion("$internalVersion");
+
+  my $env = $reldata->Environment;
+
+  foreach my $thisComp (sort keys %{$env}) {
+    
+    if($thisComp =~ /$component/i) {
+      $env->{$thisComp} = $version;
+    }
+  }
+  
+  $reldata->UpdateEnv($env);
+}
+
+sub ObtainReleaseDir {
+  my $self = shift;
+  my $component = shift;
+  my $version = shift;
+  
+  my $releaseDir;
+  
+  if (!($releaseDir = $self->{iniData}->PathData->LocalArchivePathForExistingComponent($component, $version))) {
+    die "ERROR: Couldn't locate component '$component' at version '$version'";
+  }
+
+  return $releaseDir;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+CopyRel.pm - Class for copying a release version.
+
+=head1 DESCRIPTION
+
+Provides an API to create a new release version which is a copy of an another release. This class extends the methods provide by PushPullRel.pm to enable the copying of a release version.
+
+=head1 INTERFACE
+
+=head2 New
+
+Creates a new object of this class. Takes four parameters. 1) An IniData object corresponding
+to your local repository. 2) Force (overwrites). 3) Verbose.  4) Project name to uses, which is associated to archive paths as set the reltools.ini.
+
+=head2 CopyRelease
+
+Takes component name, verson to copy, new version and new internal version. Is used to initiate the copying of a release.
+
+=head2 UpdateRelData
+
+Takes component name, version and internal version. Is used to update the reldata of a newly copied release so that the release version information is correct in the reldata file.
+
+=head2 ObtainReleaseDir
+
+Takes component name and version. Is used to get the release dir using the component name and version as input.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Crypt.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,318 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+package Crypt;
+
+use strict;
+
+#
+# Constructor
+#
+
+sub New {
+  my $invocant = shift;
+  my $class = ref($invocant) || $invocant;
+  my %args = @_;
+  my $self = {
+	      defaultPath => $args{default_path},
+	      verbose => $args{verbose}
+	     };
+  bless $self, $class;
+  $self->Initialize();
+  return $self;
+}
+
+sub Initialize {
+  my $self = shift;
+  
+  #convert defaultPath attribute to correct format
+  if ($self->{defaultPath}) {
+    $self->DefaultPath($self->{defaultPath});
+  }
+}
+
+#
+# Public getters/setters
+#
+
+sub DefaultPath {
+  my $self = shift;
+  
+  if (defined $_[0]) {
+    my $defaultPath = shift;
+    $defaultPath =~ s/\\/\//g;  #replace '\'s with / 
+    $defaultPath =~ s/\/+$//;   #remove trailing '/'s  
+    $self->{defaultPath} = $defaultPath;
+    delete $self->{publicKeys};   #new default path implies new keyring files so delete  
+    delete $self->{secretKeys};   #the current key lists
+  }
+  return $self->{defaultPath};
+}
+
+#
+# Public methods
+#
+
+sub Encrypt {
+  my $self = shift;
+  my $plainText = shift;
+  my $cipherText = shift;
+  my @recipientKeys = @{$_[0]};
+
+  unless (defined $plainText and defined $cipherText and @recipientKeys) {
+    die "Error: Incorrect arguments for encryption.\n";
+  }
+  $plainText=~ s/\\/\//g;  #replace '\'s with /`s
+  $cipherText=~ s/\\/\//g;
+
+  if ($self->{verbose} > 1) {
+    print "Encrypting $plainText with key(s) ".join(", ",@recipientKeys)."\n";
+  }
+
+  unless (-e $plainText) {
+    die "Error: Encryption aborted. $plainText does not exist.\n";
+  }
+  #check to see if all the recipient keys exist on the public keyring
+  foreach my $recipientKey (@recipientKeys) {
+    $self->PublicKeyExists($recipientKey) 
+      or die "Error: Encryption failed. $recipientKey not in keyring.\n";
+  }
+  
+  #call subclass method to actually encrypt file
+  $self->DoEncrypt($plainText, $cipherText, \@recipientKeys);
+  
+  #throw an error if encrypted file not created
+  unless (-e $cipherText) {
+    die "Error: Encryption of $plainText failed.\n";
+  }
+}
+
+sub Decrypt {
+  my $self = shift;
+  my $cipherText = shift;
+  my $plainText = shift;
+  my $passPhrase = shift;
+
+  unless (defined $plainText and defined $cipherText and defined $passPhrase) {
+    die "Error: Incorrect arguments for decryption.\n";
+  }
+  $plainText=~ s/\\/\//g;  #replace '\'s with /`s
+  $cipherText=~ s/\\/\//g;
+
+  if ($self->{verbose} > 1) {
+    print "Decrypting $cipherText\n";    
+  }
+
+  unless (-e $cipherText) {
+    die "Error: Decryption aborted. $cipherText does not exist.\n";
+  }
+  #call subclass method to actually decrypt file
+  $self->DoDecrypt($cipherText, $plainText, $passPhrase);
+  
+  #throw an error if decrypted file not created
+  unless (-e $plainText) {
+    die "Error: Decryption of $cipherText failed.\n";
+  }	
+}
+
+sub PublicKeyList {
+  my $self = shift;
+
+  unless (exists $self->{publicKeys}) {
+    #call subclass method to get key list
+    foreach my $key (@{$self->GetPublicKeyList()}) {
+      $self->{publicKeys}->{uc($key)} = 1;
+    }	
+  }
+  my @keys = keys %{$self->{publicKeys}};
+  return \@keys;
+}
+
+sub SecretKeyList {
+  my $self = shift;
+
+  unless (exists $self->{secretKeys}) { 
+    #call subclass method to get key list 
+    foreach my $key (@{$self->GetSecretKeyList()}) {
+      $self->{secretKeys}->{uc($key)} = 1;
+    }
+  }
+  my @keys = keys %{$self->{secretKeys}};
+  return \@keys;
+}
+
+
+sub PublicKeyExists {
+  my $self = shift;
+  my $requiredKey = shift;
+
+  unless (exists $self->{publicKeys}) {
+    $self->PublicKeyList();
+  }
+  return ($self->{publicKeys}->{uc($requiredKey)});
+}
+
+sub SecretKeyExists {
+  my $self = shift;
+  my $requiredKey = $_[0];
+
+  unless (exists $self->{secretKeys}) {
+    $self->SecretKeyList();
+  }
+  return ($self->{secretKeys}->{uc($requiredKey)});
+}
+
+#
+# Abstract methods (must be implemented in a subclass)
+#
+
+sub DoEncrypt {
+  die "Error: Call to abstract method ".ref($_[0])."::_DoEncrypt.\n";
+}
+
+sub DoDecrypt {
+  die "Error: Call to abstract method ".ref($_[0])."::_DoDecrypt.\n";
+}
+
+sub GetPublicKeyList {
+  die "Error: Call to abstract method ".ref($_[0])."::_GetPublicKeyList.\n";
+}
+
+sub GetSecretKeyList {
+  die "Error: Call to abstract method ".ref($_[0])."::_GetSecretKeyList.\n";
+}
+
+#
+# Private methods
+#
+
+sub Quoted {
+  my $self = shift;
+  my $string = $_[0];
+  return ($string =~ /^\s*(\".*\")\s*$/) ? $1 : "\"$string\"";
+}
+
+1;
+
+=head1 NAME
+
+Crypt.pm - Abstract base class to crypt modules.
+
+=head1 SYNOPSIS
+
+ use Crypt::PGP;
+
+ $crypt = Crypt::PGP->New(default_path => 'somePath/someDir',
+                          verbose => 1);
+
+ $crypt->DefaultPath('somedir/anotherdir');
+ $defaultpath = $crypt->DefaultPath();
+
+ @publickeys = @{$crypt->PublicKeyList()};
+ @secretkeys = @{$crypt->SecretKeyList()};
+
+ $crypt->Encrypt('somefile.txt', 'somefile.pgp', ['0x24534213', '0x1EA3B4DC', '0x8721DACE']);
+ $crypt->Decrypt('somefile.pgp', 'somefile.txt', 'mypassphrase');
+
+
+=head1 DESCRIPTION
+
+C<Crypt> is the abstract base class to a family of modules of the form C<Crypt::>F<PGPTool> which are simple wrappers over PGP command line tools. Each module in the C<Crypt> directory must implement the following abstract interface...
+
+=over 4
+
+=item * DoEncrypt($plainText, $cipherText, \@recipientKeys)
+
+Should encrypt the C<$plainText> file with the public keys C<@recipientKeys> and store the result in the C<$cipherText> file.
+
+=item * DoDecrypt($cipherText, $plainText, $passPhrase)
+
+Should decrypt the C<$cipherText> file using the secret key with pass phrase C<$passPhrase> and store the result in the C<$plainText> file. Must die with C<"BAD_PASSPHRASE"> if passphrase incorrect and C<"NO_SECKEY"> if secret key not available for decrypting file.
+
+=item * array_ref GetPublicKeyList( )
+
+Should return the list of keyids stored on the public keyring.
+
+=item * array_ref GetSecretKeyList( )
+
+Should return the list of keyids stored on the secret keyring.
+
+=back
+
+B<NOTE:> A key id is an 8 digit hexadecimal number preceeded by a zero and an x (or X) e.g 0x12345678, 0X3eDC2A82
+
+
+=head1 INTERFACE
+
+=head2 New
+
+Passed an argument list in the form of hash key value pairs. The supported arguments are...
+
+  default_path  => $path_string
+  verbose       => $verbosity_integer
+
+Returns a reference to an object derived from C<Crypt> (C<Crypt> is abstract so cannot be instantiated)
+
+=head2 DefaultPath
+
+Returns the current value of the C<defaultPath> attribute which stores the path to the users configuration and keyring files. If the C<defaultPath> is undefined then the tools default path is used. If passed a path as an argument sets the C<defaultPath> attribute to this value and updates the public and secret keyring file names. 
+
+=head2 Encrypt
+
+Passed a plain text file name, a cipher text file name and a reference to an array of recipients pgp keyids. Encrypts the plain text file with the recipients keys. Outputs the result to the cipher text file.
+
+=head2 Decrypt
+
+Passed a cipher text file name, a plain text file name and the users private key pass phrase. Decrypts the cipher text file with the users private key and outputs the result to the plain text file.
+
+=head2 PublicKeyList
+
+Returns a reference to an array of keyids for keys stored in the public keyring
+
+=head2 SecretKeyList
+
+Returns a reference to an array of keyids for keys stored in the secret keyring
+
+=head2 PublicKeyExists
+
+Passed a public key id. Returns true if the key exists in the public keyring
+
+=head2 SecretKeyExists
+
+Passed a secret key id. Returns true if the key exists in the secret keyring
+
+=head1 KNOWN BUGS
+
+None
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Crypt/GPG.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,311 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# Crypt::GPG.pm
+#
+
+package Crypt::GPG;
+
+use strict;
+use File::Basename;
+use IPC::Open2;
+use IO::Handle;
+
+use Crypt;
+use vars qw(@ISA);
+@ISA=("Crypt");
+
+# Overidden methods from Crypt.pm
+
+sub Initialize {
+  my $self = shift;
+
+  #check to see if the pgp executable exists
+  grep {-x "$_/gpg.exe"} split /;/, $ENV{PATH}
+    or die "Error: The PGP executable \"gpg.exe\" does not exist in users path\n";
+
+  #call super class method
+  $self->SUPER::Initialize();
+
+  #check for existence of keyrings and keys
+  $self->CheckKeyRings();
+}
+
+#
+# Implemented abstract methods from Crypt.pm
+#
+
+sub DoEncrypt {
+  my $self = shift;
+  my $plainText = shift;
+  my $cipherText = shift;
+  my @recipientKeys = @{$_[0]};
+
+  $self->CheckKeyRings();
+
+  #build options list
+  my @options = qw(--batch --no-tty --yes --always-trust);
+  push @options, '--status-fd 1';
+  push @options, '-o '.$self->Quoted($cipherText);
+  if ($self->DefaultPath()) {
+    push @options, '--homedir '.$self->Quoted($self->DefaultPath());
+  }
+  foreach my $key (@recipientKeys) {
+    if ($key =~ /^0x([0-9a-fA-F]{8})$/i) {
+      push @options, '-r '.$1;
+    }
+  }
+  my @command = '-e '.$self->Quoted($plainText);
+
+  # Do encryption. This occasionally fails due to GPG failing to read
+  # the random_seed file when we get a return value of 2. Until we get
+  # a later version of gpg checked as compatible, just retry if this happens.
+  my $retries = 2;
+  my $retval;
+  do {
+      my $cmd = "gpg @options @command";
+      print "Executing command: $cmd\n" if $self->{verbose} > 1;
+      open GPG, "$cmd 2>&1 |" or die "Error: Encrypt command failed.\n";
+      my $error;
+      while (my $line = <GPG>) {
+        if ($self->{verbose} > 1) {
+          print "\t$line";
+        }
+      }
+      close GPG;
+      $retval = $? >> 8;
+      $retries = 0 unless( $retval == 2 );  # Only retry if retval is 2.
+      if( $retval ) {
+        print "WARNING: GPG failure. Error code $retval. ";
+        print "Retrying GPG..." if( $retries > 0 );
+        print "\n";
+      }
+  } while( $retries-- > 0 );
+  die "ERROR: GPG returned error code $retval.\n" if ($retval > 0);
+}
+
+sub DoDecrypt {
+  my $self = shift;
+  my $cipherText = shift;
+  my $plainText = shift;
+  my $passPhrase = shift;
+
+  $self->CheckKeyRings();
+
+  #build options list
+  my @options = qw(--batch);
+  push @options, '--status-fd 1';
+  push @options, '--passphrase-fd 0';
+  push @options, '-o '.$self->Quoted($plainText);
+  if ($self->DefaultPath()) {
+    push @options, '--homedir '.$self->Quoted($self->DefaultPath());
+  }
+  my @command = '-d '.$self->Quoted($cipherText);
+
+  #do decryption reading passphrase from STDIN writing output to log file
+  my $gpgOutput = '/gpg_output.log';
+  my $cmd = "gpg @options @command";
+
+  # retry 100 times of GPG and opening GPG output
+  my $retries = 100;
+  while ($retries > 0) {
+    print "Executing command: $cmd\n" if $self->{verbose} > 1;
+    if (open GPGIN, "| $cmd 2>NUL 1> $gpgOutput") {
+      print GPGIN "$passPhrase\n";
+      while (my $line  = <GPGIN>) {
+      }
+      close GPGIN;
+	  
+      #open output of gpg command from file for parsing
+      if (open GPGOUT, "$gpgOutput") {
+        #open output of gpg successfully, then jump out and go ahead
+        last;
+      }
+      else {
+        print "Warning: Cannot open gpg output file, $!\n";
+      }
+    }
+    else {
+      print "Warning: Error: Decrypt command failed, $!\n";
+    }
+    $retries--;
+
+    # sleep 10 seconds for next try
+    sleep(10);
+  }
+  die "Error: Cannot create or open output log file for $cipherText.\n" if ($retries<=0);
+  
+  my $badPassPhrase =0;
+  my %enc_to;
+  my %no_seckey;
+  my $keyTally = 0;
+  my $useKeyTally = 0; # Fallback for if parsing fails
+  while (my $line = <GPGOUT>) {
+    if ($self->{verbose} > 1) {
+      print "\t$line";
+    }
+    next if ($line =~ /^\s*$/);
+    if ($line =~ /BAD_PASSPHRASE/) {
+      $badPassPhrase = 1;
+    }
+    elsif ($line =~ /GOOD_PASSPHRASE/) {
+      $badPassPhrase = 0;
+    }
+    elsif ($line =~ /ENC_TO/) {
+      if ($line =~ /ENC_TO\s+([\dA-F]*)/) {
+        $enc_to{$1} = $1; # Value is unimportant
+      } else {
+        $useKeyTally = 1;
+      }
+      --$keyTally;
+    }
+    elsif ($line =~ /NO_SECKEY/) {
+      if ($line =~ /NO_SECKEY\s+([\dA-F]*)/) {
+        $no_seckey{$1} = $1; # Value is unimportant
+      } else {
+        $useKeyTally = 1;
+      }
+      --$keyTally;
+    }
+  }
+  close GPGOUT;
+  my $retval = $? >> 8;
+  unlink $gpgOutput;
+
+  if (!$useKeyTally) {
+    foreach my $key (keys(%no_seckey)) {
+      delete $no_seckey{$key};
+      if (exists $enc_to{$key}) {
+        delete $enc_to{$key};
+      } else {
+        die "Error: Parsing of GPG output failed. Got a NO_SECKEY for no corresponding ENC_TO.\n";
+      }
+    }
+    $keyTally = scalar(keys(%enc_to)); # Number of private keys
+  }
+
+  #handle specific decryption errors
+  if ($badPassPhrase and $keyTally != 0) {
+    die "Error: Decryption of $cipherText failed. BAD_PASSPHRASE\n";
+  }
+  elsif ($keyTally == 0) {
+    die "Error: Decryption of $cipherText failed. No decrypting key available. NO_SECKEY\n";
+  }
+  elsif ($keyTally < 0) {
+    # Parsing failed, and we got spurious NO_SECKEY messages
+    die "Error: Parsing of GPG output failed. Too many NO_SECKEYs\n";
+  }
+  die "Error code returned by gpg: $retval.\n" if ($retval > 0);
+}
+
+sub GetPublicKeyList {
+  my $self = shift;
+
+  my @options;
+  if ($self->DefaultPath()) {
+    push @options, '--homedir '.$self->Quoted($self->DefaultPath());
+  }
+  my @command = qw(--list-keys);
+
+  #list and extract keyids
+  open GPG, "gpg @options @command 2>&1 |" or die "Error: List keys command failed.\n";
+  my @keys;
+  while (my $line = <GPG>) {
+    if ($line =~ /^pub.*?([0-9a-fA-F]{8})\b/i) {
+      push @keys, '0x'.$1;
+    }
+  }
+  close GPG;
+  return \@keys;
+}
+
+sub GetSecretKeyList {
+  my $self = shift;
+
+  my @options;
+  if ($self->DefaultPath()) {
+    push @options, '--homedir '.$self->Quoted($self->DefaultPath());
+  }
+  my @command = qw(--list-secret-keys);
+
+  #list and extract keyids
+  open GPG, "gpg @options @command 2>&1 |" or die "Error: List keys command failed.\n";
+  my @keys;
+  while (my $line = <GPG>) {
+    if ($line =~ /^sec.*?([0-9a-fA-F]{8})\b/i) {
+      push @keys, '0x'.$1;
+    }
+  }
+  close GPG;
+  return \@keys;
+}
+#
+# Private
+#
+
+sub CheckKeyRings {
+  my $self = shift;
+
+  if ($self->DefaultPath) {
+    unless (-e $self->DefaultPath.'/pubring.gpg') {
+      die "Error: PGP Public keyring does not exist\n";
+    }
+    unless (-e $self->DefaultPath.'/secring.gpg') {
+      die "Error: PGP secret keyring does not exist\n";
+    }
+  }
+  unless (@{$self->PublicKeyList}) {
+    die "Error: PGP public keyring is empty\n";
+  }
+  unless (@{$self->SecretKeyList}) {
+    die "Error: PGP secret keyring is empty\n";
+  }
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Crypt::GPG.pm - A wrapper over the Gnu Privacy Guard command line PGP tool
+
+=head1 DESCRIPTION
+
+C<Crypt::GPG> is inherited from the abstract base class C<Crypt>, implementing the abstract methods required for PGP encryption, decryption, etc... by calling Gnu Privacy Guard PGP command line tool (tested with version 1.0.6). For this module to work the PGP executable must have the name C<gpg.exe> and exist in one of the directories defined in the users path.
+
+=head1 KNOWN BUGS
+
+None
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Crypt/PGP.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,223 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# Crypt::PGP.pm
+#
+
+package Crypt::PGP;
+
+use strict;
+
+use Crypt;
+use vars qw(@ISA);
+@ISA=("Crypt");
+
+# Overidden methods from Crypt.pm
+ 
+sub Initialize {
+  my $self = shift;
+
+  #check to see if the pgp executable exists
+  grep {-x "$_/pgp.exe"} split /;/, $ENV{PATH}
+    or die "Error: The PGP executable \"pgp.exe\" does not exist in users path\n";
+  
+  #call super class method
+  $self->SUPER::Initialize();
+ 
+  #check for existence of keyrings and keys
+  $self->CheckKeyRings();
+}
+
+#
+# Implemented abstract methods from Crypt.pm
+#
+
+sub DoEncrypt {
+  my $self = shift;
+  my $plainText = shift;
+  my $cipherText = shift;
+  my @recipientKeys = @{$_[0]};
+
+  $self->CheckKeyRings();
+
+  #build options list
+  my @options = qw(+force +batchmode +verbose=2);
+  push @options, '-o '.$self->Quoted($cipherText);
+  if ($self->DefaultPath()) {
+    push @options, '+PUBRING='.$self->Quoted($self->DefaultPath().'/pubring.pkr');
+  }
+  my @command = '-e '.$self->Quoted($plainText);
+  push @command, @recipientKeys;
+
+  #do encryption
+  open PGP, "pgp @options @command 2>NUL |" or die "Error: Encrypt command failed.\n";
+  my $unsignedKeyError;
+  while (my $line = <PGP>) {
+    if ($self->{verbose} > 1) {print $line;}
+    if ($line =~ /skipping userid/i) { #check for unsigned key errors
+      $unsignedKeyError = 1;
+    }	
+  }
+  close PGP;
+  if ($unsignedKeyError) {
+    die "Error: Encryption failed. Public keys must be signed with the default signing key\n";
+  }
+}
+
+sub DoDecrypt {
+  my $self = shift;
+  my $cipherText = shift;
+  my $plainText = shift;
+  my $passPhrase = shift;
+  
+  $self->CheckKeyRings();
+
+  #build options list
+  my @options =qw(+force +batchmode +verbose=2);
+  push @options, '-o '.$self->Quoted($plainText);
+  if ($self->DefaultPath()) {
+    push @options, '+SECRING='.$self->Quoted($self->DefaultPath().'/secring.skr');
+  }
+  push @options, '-z'.$self->Quoted($passPhrase);
+
+  my @command = ('-d '.$self->Quoted($cipherText));
+
+  #do decryption
+  open PGP, "pgp @options @command 2>NUL |" or die "Error: Decrypt command failed.\n";
+  my ($errorCode, $exitCode);
+  while (my $line = <PGP>) {
+    if ($self->{verbose} > 1) {print $line;}
+    if ($line =~ /error.*?-(\d+)/i) {
+      $errorCode = $1;
+    } 
+    elsif ($line =~ /exitcode.*?(\d+)/i) {
+      $exitCode = $1;
+    }
+  }
+  close PGP;
+
+  #handle specific decryption errors
+  if (defined $errorCode) {
+    if ($errorCode == 11477) {
+      die "Error: Decryption of $cipherText failed. No decrypting key available. NO_SECKEY\n";
+    } 
+    elsif ($errorCode == 11489) {
+      die "Error: Decryption of $cipherText failed. BAD_PASSPHRASE\n";
+    }
+  }	
+}
+
+sub GetPublicKeyList {
+  my $self = shift;
+
+  my @options = qw(+verbose=2);
+  if ($self->DefaultPath()) {
+    push @options, '+PUBRING='.$self->Quoted($self->DefaultPath().'/pubring.pkr');
+  } 
+  my @command = qw(-kv);
+
+  #list and extract keyids
+  open PGP, "pgp @options @command 2>NUL |" or die "Error: List keys command failed.\n";
+  my @keys;
+  while (my $line = <PGP>) {
+    if ($line =~ /(0x[0-9a-fA-F]{8})/i) {
+      push @keys, $1;
+    }
+  }
+  close PGP;
+  return \@keys;
+}
+
+sub GetSecretKeyList {
+  my $self = shift;
+
+  my @options = qw(+verbose=2);
+  if ($self->DefaultPath()) {
+    push @options, '+SECRING='.$self->Quoted($self->DefaultPath().'/secring.skr');
+  } 
+  my @command = qw(-kv);
+
+  #list and extract keyids
+  open PGP, "pgp @options @command 2>NUL |" or die "Error: List keys command failed.\n";
+  my @keys;
+  while (my $line = <PGP>) {
+    if ($self->{verbose} > 1) {print $line;}
+    if ($line =~ /(0x[0-9a-fA-F]{8})/i) {
+      push @keys, $1;
+    }
+  }
+  close PGP;
+  return \@keys;
+}
+
+#
+# Private
+#
+
+sub CheckKeyRings {
+  my $self = shift;
+
+  if ($self->DefaultPath) {
+    unless (-e $self->DefaultPath.'/pubring.pkr') {
+      die "Error: PGP public keyring does not exist\n";
+    }
+    unless (-e $self->DefaultPath.'/secring.skr') {
+      die "Error: PGP secret keyring does not exist\n";
+    }
+  }
+  unless (@{$self->PublicKeyList}) {
+    die "Error: PGP public keyring is empty\n";
+  }
+  unless (@{$self->SecretKeyList}) {
+    die "Error: PGP secret keyring is empty\n";
+  }
+}
+
+
+1;
+
+__END__
+
+=head1 NAME
+
+Crypt::PGP.pm - A wrapper over Network Associates command line PGP tool
+
+=head1 DESCRIPTION
+
+C<Crypt::PGP> is inherited from the abstract base class C<Crypt>, implementing the abstract methods required for PGP encryption, decryption, etc... by calling NAI Inc. PGP command line tool (tested with version 6). For this module to work the PGP executable must have the name C<pgp.exe> and exist in one of the directories defined in the users path.
+
+=head1 KNOWN BUGS
+
+None
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/DeltaEnv	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,375 @@
+#!perl
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use CommandController;
+use Cwd 'abs_path';
+use Symbian::CBR::CreateDelta;
+use Symbian::CBR::ApplyDelta;
+use Symbian::CBR::Release::Manifest;
+use Carp;
+use File::Spec;
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $overwrite = 0;
+my $noevalid = 0;
+my $nodelta = 0;
+my $iniData = IniData->New();
+my $commandController = CommandController->New( $iniData, 'DeltaEnv' );
+my $referenceComp;
+my $referenceVer;
+my $nominatedComp;
+my $nominatedVer;
+my $report;
+my $createDelta;
+my $applyDelta;
+my $releaseManifestFile;
+my $receivingArchive;
+my $pgpKey;
+my $deltaPackagePath;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ( "bundling" );
+  my $help;
+  my $maxdeltasize;
+
+  GetOptions( 'h' => \$help, 'o' => \$overwrite, 'v+' => \$verbose, 'noevalid+' => \$noevalid, 'nodelta+' => \$nodelta, 'c+' => \$createDelta, 'a+' => \$applyDelta, 'r+' => \$report, 'rb=s' => \$referenceComp, 'rv=s' => \$referenceVer, 'nb=s' => \$nominatedComp, 'nv=s' => \$nominatedVer, 'rm=s' => \$releaseManifestFile, 'ra=s' => \$receivingArchive, 'p=s' => \$pgpKey, 'dp=s' => \$deltaPackagePath, 'maxdelta=s' => \$maxdeltasize );
+
+  if ( $help ) {
+    Usage(0);
+  }
+  elsif ( $report ) {
+    generateReleaseManifest();
+  }
+  elsif ($createDelta) {
+    createDeltaEnv($maxdeltasize);
+  }
+  elsif ($applyDelta) {
+    ReconstructEnv();
+  }
+  else {
+    print "Error: Invalid option.\n";
+    Usage(1);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  if ($report) {
+    GenerateReleaseManifestUsage($exitCode);
+  }
+  if ($createDelta) {
+    CreateDeltaUsage($exitCode);
+  }
+  if ($applyDelta) {
+    ApplyDeltaUsage($exitCode);
+  }
+
+  Utils::PrintDeathMessage($exitCode, "\n
+
+options:
+
+-h    help
+-r    generate release manifest mode
+-c    create delta mode
+-a    apply delta mode
+-v    verbose output
+-r -h generate release manifest mode help
+-c -h create delta mode help
+-a -h apply delta mode help \n" );
+}
+
+sub GenerateReleaseManifestUsage {
+  my $exitCode = shift;
+  
+  Utils::PrintDeathMessage($exitCode, "\nUsage: deltaenv -r [options] <component> <version> [report path]
+
+options:
+
+-h help
+-o overwrite existing release manifest file
+-v verbose output \n" );
+}
+
+sub CreateDeltaUsage {
+  my $exitCode = shift;
+    
+  Utils::PrintDeathMessage($exitCode, "\nUsage: deltaenv -c [options] --nb <nominated baseline> --nv <nominated version> [--rm <release manifest>|--rb <reference baseline> --rv <reference version> --ra <receiving archive>] -p <PGP key> [--dp <delta release package>]
+
+options:
+
+-h         help
+-v         verbose output
+-o         overwrite existing delta release package
+--nodelta  include whole files where modified (don't create deltas)
+--noevalid use raw binary comparison (don't use evalid)
+--nb       <nominated baseline> nominated baseline component name
+--nv       <nominated version> nominated baseline component version
+--rm       <release manifest> release manifest file
+--rb       <reference baseline> reference baseline component name
+--rv       <reference version> reference baseline component version
+--ra       <receiving archive> receiving archive path
+-p         <PGP key> PGP key of recipient
+--maxdelta <max size> max size to delta (larger files treated as --nodelta)
+--dp       <delta release package> delta release package path \n" );
+}
+
+sub ApplyDeltaUsage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: deltaenv -a [options] <delta release package>
+
+options:
+
+-h help
+-o overwrite existing components
+-v verbose output \n" );
+}
+
+sub generateReleaseManifest {
+  my $comp = shift @ARGV;
+  my $ver = shift @ARGV;
+  my $destinationManifestPath  = shift @ARGV;
+  unless ( defined $comp and defined $ver and $#ARGV == -1 ) {
+    print "Error: Reference component and version must be specified.\n";
+    GenerateReleaseManifestUsage(1);
+  }
+  my $localArchive = $iniData->PathData->LocalArchivePathForExistingComponent($comp, $ver);
+  die "Error: $comp $ver does not exist.\n" unless (defined $localArchive);
+  
+  if ($localArchive !~ s/\Q$comp\E[\\\/]\Q$ver\E([\\\/])?$//) { # Remove the component name
+    die "Error: (INTERNAL) Unable to remove component information $comp $ver from the archive path $localArchive\n";
+  } 
+  
+  my $archiveReleaseManifestDir = File::Spec->catdir($localArchive, ".cbr");
+  my $archiveFile = $comp."_".$ver."_manifest.xml";
+  $archiveFile = File::Spec->catfile($archiveReleaseManifestDir, $archiveFile);
+
+  my $releaseManifest = Symbian::CBR::Release::Manifest->new( $iniData, $verbose );
+  unless ( defined $destinationManifestPath ) {
+    $destinationManifestPath = Cwd::cwd();
+  }
+
+  if (-e $archiveFile and !$overwrite) {
+    $releaseManifest->Load($archiveFile);
+  }
+  else {
+    $releaseManifest->GenerateManifest($comp, $ver);
+  }
+  
+  if ($overwrite or !-e $archiveFile) {
+    eval{ $releaseManifest->Save($archiveReleaseManifestDir);};
+    print "Warning: Not backing up manifest file in $archiveReleaseManifestDir path because $@" if($@);
+  }
+  
+  $releaseManifest->Save( $destinationManifestPath );
+}
+
+sub createDeltaEnv {
+  my $maxdeltasize = shift;
+  unless ( defined $nominatedComp and defined $nominatedVer and $#ARGV == -1 ) {
+    print "Error: Invalid arguments\n";
+    CreateDeltaUsage(1);
+  }
+  unless (defined $releaseManifestFile or (defined $referenceComp and defined $referenceVer)) {
+    print "Error: Invalid arguments\n";
+    CreateDeltaUsage(1);
+  }
+
+  # Parse max delta file size
+  my $maxdeltabytes;
+  if (defined $maxdeltasize) {
+    if ($maxdeltasize =~ /^\d+$/) {
+      $maxdeltabytes = $maxdeltasize;
+    } elsif ($maxdeltasize =~ /^(\d+)k$/i) {
+      $maxdeltabytes = $1*1024;
+    } elsif ($maxdeltasize =~ /^(\d+)m$/i) {
+      $maxdeltabytes = $1*1024*1024;
+    } elsif ($maxdeltasize =~ /^(\d+)g$/i) {
+      $maxdeltabytes = $1*1024*1024*1024;
+    } else {
+      die "Error: Option '--maxdelta ".$maxdeltasize."' is not a valid size (sizes must be in bytes, or have a K, M or G postfix)\n";
+    }
+  }
+
+  # Get a release manifest to represent the nominated baseline in the receiving archive
+  my $deltaAllFiles;
+  my $releaseManifest = Symbian::CBR::Release::Manifest->new( $iniData, $verbose );
+  if ( defined  $releaseManifestFile) {
+    $releaseManifestFile = File::Spec->rel2abs($releaseManifestFile);
+    print "Reading $releaseManifestFile file.\n";
+    $releaseManifest->Load( $releaseManifestFile );
+  }
+  elsif (defined $receivingArchive) {
+    $releaseManifest->GenerateManifest($referenceComp, $referenceVer, $receivingArchive);
+  }
+  else {
+    $deltaAllFiles = 1;
+  }
+
+  # Create the delta
+  $referenceComp = $releaseManifest->{'baselineName'} unless (defined $referenceComp);
+  $referenceVer = $releaseManifest->{'baselineVersion'} unless (defined $referenceVer);
+  unless ( defined $deltaPackagePath ) {
+    $deltaPackagePath = Cwd::cwd();
+  }
+  my $packageZipFile = $referenceVer."_".$nominatedVer.".zip";
+  $packageZipFile = File::Spec->catfile($deltaPackagePath, $packageZipFile);
+  die "Error: Delta release for $referenceVer and $nominatedVer is already present in $deltaPackagePath. Please use -o option to overwrite.\n" if (-e $packageZipFile and !$overwrite);
+  my $createDelta = Symbian::CBR::CreateDelta->new( $iniData, $pgpKey, $releaseManifest, $verbose, $noevalid, $nodelta, $maxdeltabytes );
+  $createDelta->{deltaAllFiles} = 1 if ($deltaAllFiles);
+  $createDelta->{exportAll} = 1 unless (defined $pgpKey);
+  $createDelta->createDeltaEnv( $referenceComp, $referenceVer, $nominatedComp, $nominatedVer, $deltaPackagePath );
+  print "Successfully created deltas for baseline.\n";
+}
+
+sub ReconstructEnv {
+  my $zipFile = shift @ARGV;
+  unless (defined $zipFile and $#ARGV == -1 ) {
+    print "Error: Invalid arguments\n";
+    ApplyDeltaUsage(1);
+  }
+  print "Reconstructing Environment\n";
+  my $reconstructEnv = Symbian::CBR::ApplyDelta->new($iniData,$verbose);
+  $reconstructEnv->ReconstructEnv($zipFile, $overwrite);
+  print "Reconstructed baseline successfully.\n";
+}
+
+
+__END__
+
+=head1 NAME
+
+DeltaEnv - Creates and applies deltas for modified components between pair of baselines.
+
+=head1 SYNOPSIS
+
+options:
+
+  -h    help
+  -r    generate release manifest mode
+  -c    create delta mode
+  -a    apply delta mode
+  -v    verbose output
+  -r -h generate release manifest mode help
+  -c -h create delta mode help
+  -a -h apply delta mode help
+
+
+Generate release manifest mode
+
+  deltaenv -r [options] <component> <version> [report path]
+
+options:
+
+  -h help
+  -o overwrite existing release manifest file
+  -v verbose output
+
+
+Create delta mode
+
+  deltaenv -c [options] --nb <nominated baseline> --nv <nominated version> [--rm <release manifest>|--rb <reference baseline> --rv <reference version> --ra <receiving archive>] -p <PGP key> [--dp <delta release package>]
+
+options:
+
+  -h         help
+  -v         verbose output
+  -o         overwrite existing delta release package
+  --nodelta  include whole files where modified (don't create deltas)
+  --noevalid use raw binary comparison (don't use evalid)
+  --nb       <nominated baseline> nominated baseline component name
+  --nv       <nominated version> nominated baseline component version
+  --rm       <release manifest> release manifest file
+  --rb       <reference baseline> reference baseline component name
+  --rv       <reference version> reference baseline component version
+  --ra       <receiving archive> receiving archive path
+   -p        <PGP key> PGP key of recipient
+  --maxdelta <max size> max size to delta (larger files treated as --nodelta)
+  --dp       <delta release package> delta release package path
+
+
+Apply delta mode
+
+  deltaenv -a [options] <delta release package>
+
+options:
+
+  -h help
+  -o overwrite existing components
+  -v verbose output
+
+=head1 DESCRIPTION
+
+This command can be used in 3 modes: generate release manifest, create delta, and apply delta.
+
+Generate Release Manifest :
+Generates a release manifest file, which lists all files available in the reference baseline at the receiving archive. It is used in create delta mode, in order that it has an accurate representation of the reference baseline to make the delta against.
+
+The release manifest contains the list of components and their versions in the reference baseline environment. It also lists all the files in each component, and all the metadata files, and each file's size, timestamp and MD5 checksum.
+
+
+Create delta mode :
+Creates a smallest possible delta package, using which whole baseline can be reconstructed at the receiving site. this delta package contains deltas for modified files from reference version to the nominated version of a component, newly added files for the existing components, newly added components for the baseline and delta release manifest file. This delta package can be transferred by the user to receiving site instead of whole baseline.
+
+
+Apply delta mode : 
+Reconstructs a nominated baseline using reference version and delta release package which is created in create delta mode. Using create delta and apply delta mode, amount of data to be transferred from sending site to receiving site can be reduced.
+
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/DeltaEnv.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/DiffEnv	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,195 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use CommandController;
+use EnvDifferencer;
+
+
+#
+# Constants.
+#
+
+my $margin = 2;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'DiffEnv');
+my $comp1;
+my $ver1;
+my $comp2;
+my $ver2;
+my $doDateComparison = 0;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+DiffEnv();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions('h' => \$help, 'd' => \$doDateComparison, 'v+' => \$verbose);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $comp1 = shift @ARGV;
+  $ver1 = shift @ARGV;
+  $comp2 = shift @ARGV;
+  $ver2 = shift @ARGV;
+
+  unless (defined $comp1 and defined $ver1 and $#ARGV == -1) {
+    print "Error: Invalid number of arguments\n";
+    Usage(1);
+  }
+  if (defined $comp2) {
+    unless (defined $ver2) {
+      print "Error: Invalid number of arguments\n";
+      Usage(1);
+    }
+  }
+  if ($verbose && $doDateComparison) {
+    print "Warning: -v disables -d\n";
+    $doDateComparison = 0;
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: diffenv [options] <component_1> <version_1> [<component_2> <version_2>]
+
+options:
+
+-h  help
+-d  ignore differences when components in the first environment are younger than the second
+-v  verbose output\n");
+}
+
+sub DiffEnv {
+  my $env1Name;
+  my $env2Name;
+  my $envDifferencer = EnvDifferencer->New($iniData, $verbose);
+  if (defined $comp2 and $ver2) {
+    $envDifferencer->SetStartCompVer($comp1, $ver1);
+    $envDifferencer->SetEndCompVer($comp2, $ver2);
+    $env1Name = "$comp1 $ver1";
+    $env2Name = "$comp2 $ver2";
+  }
+  else {
+    $env1Name = "current";
+    $env2Name = "$comp1 $ver1";
+    $envDifferencer->SetEndCompVer($comp1, $ver1);
+    # no need to specify the other environment since the default
+    # is to use the current environment
+  }
+
+  my @tableData;
+  foreach my $comp (@{$envDifferencer->OnlyEnd()}) {
+    push @tableData, [ $comp, '-', $envDifferencer->EndVersion($comp) ];
+  }
+  foreach my $comp (@{$envDifferencer->OnlyStart()}) {
+    push @tableData, [ $comp, $envDifferencer->StartVersion($comp), '-'  ];
+  }
+  if ($verbose) {
+    foreach my $comp (@{$envDifferencer->UnchangedComps()}) {
+      my $ver = $envDifferencer->StartVersion($comp);
+      push @tableData, [ $comp, $ver, $ver  ];
+    }
+  }
+  if ($doDateComparison) {
+    foreach my $comp (@{$envDifferencer->NewerComps()}) {
+      push @tableData, [ $comp, $envDifferencer->StartVersion($comp), $envDifferencer->EndVersion($comp)  ];
+    }
+  } else {
+    foreach my $comp (@{$envDifferencer->ChangedComps()}) {
+      push @tableData, [ $comp, $envDifferencer->StartVersion($comp), $envDifferencer->EndVersion($comp)  ];
+    }
+  }
+
+  if (@tableData) {
+    my @sortedTableData = sort { $a->[0] cmp $b->[0] } @tableData;
+    unshift @sortedTableData, ['', $env1Name, $env2Name]; # Heading.
+    $iniData->TableFormatter->PrintTable(\@sortedTableData, 1);
+  }
+  else {
+    print "Environments identical\n";
+  }
+}
+
+__END__
+
+=head1 NAME
+
+DiffEnv - Compare the component versions of a pair of environments.
+
+=head1 SYNOPSIS
+
+  diffenv [options] <component_1> <version_1> [<component_2> <version_2>]
+
+options:
+
+  -h  help
+  -d  ignore differences when components in the first environment are younger than the second
+  -v  verbose output
+
+=head1 DESCRIPTION
+
+Displays a table of component version differences. If the second component / version pair is ommitted, the comparison is made against the current environment. If the C<-v> switch is specified, all versions will be displayed, even those that are identical. The results will be displayed in a table. The C<-d> option may be useful when newer version of a component are known to be backwards compatible with older versions.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/DiffEnv.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/DiffRel	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,303 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use Utils;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'DiffRel');
+my $comp;
+my $ver1;
+my $ver2;
+my $specifiedLocalDir;
+my $specifiedReleaseDir;
+my $specifiedDiffTool;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+DoDiff();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions('h' => \$help, 'l=s' => \$specifiedLocalDir, 'r=s' => \$specifiedReleaseDir, 'v+' => \$verbose, 't=s' => \$specifiedDiffTool);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $comp = shift @ARGV;
+  $ver1 = shift @ARGV;
+  $ver2 = shift @ARGV;
+
+  unless ($comp and $#ARGV = -1) {
+    print "Error: Invalid arguments\n";
+    Usage(1);
+  }
+
+  if ($ver2 and $specifiedLocalDir) {
+    print "Warning: The '-l' switch has no effect when specifying a pair of versions to difference\n";
+  }
+
+  if ($ver2 and $specifiedReleaseDir) {
+    print "Warning: The '-r' switch has no effect when specifying a pair of versions to difference\n";
+  }
+
+  if ($specifiedReleaseDir and $specifiedReleaseDir !~ /^\\/) {
+    die "Error: Release directories must be absolute (i.e. start with '\\')\n";
+  }
+
+  if ($specifiedLocalDir) {
+    Utils::AbsoluteFileName(\$specifiedLocalDir);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: diffrel [options] <component> [<version_1>] [<version_2>]
+
+options:
+
+-h                help
+-l <local_dir>    specify a specific local directory to difference against
+-r <release_dir>  specify a specific directory within the release zip file to difference against
+-t <tool>         specify a particular diffing tool to use (instead of that specified in reltools.ini)
+-v                verbose output (-vv very verbose)\n");
+}
+
+sub DoDiff {
+  my $diffTool = $specifiedDiffTool || $iniData->DiffTool();
+  unless (defined $diffTool) {
+    die "Error: No differencing tool specified - use diff_tool keyword in reltools.ini\n";
+  }
+
+  my $envDb = EnvDb->Open($iniData, $verbose);
+  unless ($ver1) {
+    $ver1 = $envDb->Version($comp);
+    unless ($ver1) {
+      die "Error: $comp not currently installed\n";
+    }
+  }
+
+  Utils::InitialiseTempDir($iniData);
+  eval {
+    if ($ver2) {
+      DiffPair($envDb, $diffTool);
+    }
+    else {
+      DiffAgainstLocalDir($envDb, $diffTool);
+    }
+  };
+  Utils::RemoveTempDir();
+  if ($@) {
+    die $@;
+  }
+}
+
+sub DiffAgainstLocalDir {
+  my $envDb = shift;
+  my $diffTool = shift;
+  my $tempDir = Utils::TempDir();
+  $envDb->UnpackSource($comp, $ver1, $tempDir, 0, 0, 1); # 0 = overwrite, 0 = do not show progress, 1 = validate
+  my $significantDir = Utils::SignificantDir($tempDir);
+
+  my $localDir;
+  if ($specifiedLocalDir) {
+    $localDir = $specifiedLocalDir;
+  }
+  else {
+    $localDir = $significantDir;
+    $localDir =~ s/\Q$tempDir\E//;
+    unless ($localDir) {
+      $localDir = '\\';
+    }
+    $localDir = Utils::PrependSourceRoot($localDir);
+  }
+  # UnpackSource does not return a success status so we check the dir manually
+  if (!-d $localDir) {
+    warn "Nothing to do".($verbose ? '' : ' (run with -v for more info)').".\n";
+    return;
+  }
+
+  my $releaseDir;
+  if ($specifiedReleaseDir) {
+    $releaseDir = "$tempDir$specifiedReleaseDir";
+  }
+  else {
+    $releaseDir = $significantDir;
+  }
+  # UnpackSource does not return a success status so we check the dir manually
+  if (!-d $releaseDir) {
+    warn "Nothing to do".($verbose ? '' : ' (run with -v for more info)').".\n";
+    return;
+  }
+
+  if ($localDir eq '\\') {
+    print "Warning: About to diff \"$releaseDir\" against the root of your development environment.
+         You could alternatively use the -l and -r options to specify which directories to diff.
+         Are you sure you want to continue? [y/n] ";
+    my $response = <STDIN>;
+    chomp $response;
+    unless ($response eq 'y') {
+      warn "Aborting...\n";
+      return;
+    }
+  }
+
+  $localDir =~ s/^[\\\/]// unless ($localDir =~ m/^[\\\/][\\\/]/);
+  if ($verbose) { print "Envoking \"call $diffTool \"$releaseDir\" \"$localDir\"\"\n"; }
+  system "call \"$diffTool\" \"$releaseDir\" \"$localDir\"";
+}
+
+sub DiffPair {
+  my $envDb = shift;
+  my $diffTool = shift;
+  my $tempDir = Utils::TempDir();
+  my $ver1Dir = "$tempDir\\1";
+  my $ver2Dir = "$tempDir\\2";
+
+  $envDb->UnpackSource($comp, $ver1, $ver1Dir, 0, 0, 1); # 0 = overwrite, 0 = do not show progress, 1 = validate
+  $envDb->UnpackSource($comp, $ver2, $ver2Dir, 0, 0, 1); # 0 = overwrite, 0 = do not show progress, 1 = validate
+
+  if (!-d $ver1Dir or !-d $ver2Dir) {
+    warn "Nothing to do".($verbose ? '' : ' (run with -v for more info)').".\n";
+    return;
+  }
+
+  if ($verbose) { print "Envoking \"call $diffTool $ver1Dir $ver2Dir\"\n"; }
+  system "call \"$diffTool\" \"$ver1Dir\" \"$ver2Dir\"";
+}
+
+
+=head1 NAME
+
+DiffRel - Displays the source differences between two component releases.
+
+=head1 SYNOPSIS
+
+  diffrel [options] <component> [<version_1>] [<version_2>]
+
+options:
+
+  -h                help
+  -l <local_dir>    specify a specific local directory to difference against
+  -r <release_dir>  specify a specific directory within the release zip file to difference against
+  -t <diff_tool>    specify a particular diffing tool to use (instead of that in reltools.ini)
+  -v                verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+C<DiffRel> allows you to lauch a differencing tool of your choice to anyalise the source differences between either a pair of releases or a single release and the source in your development drive. The differencing tool to be used must be specified in C<reltools.ini> using the keyword C<diff_tool> and it must support differencing a pair of directories specified as command line arguments.
+
+There are three main ways of envoking C<DiffRel>:
+
+=over 4
+
+=item * Specifying a component and a pair of versions
+
+C<DiffRel> will difference the source of a pair of component releases. It will unpack the source from the specified versions into two temporary directories. The differencing tool will then be launched with the names of the temporary directories passed as command line arguments.
+
+=item * Specifying a component and a single version
+
+C<DiffRel> will difference the source of the specified version against that present in your development drive. It will unpack the source from the specified version into a temporary directory. It will then attempt to find a suitable pair of directories to difference (this process described in detail later) and then launch the differencing tool, passing the directory names as command line arguments.
+
+=item * Specifying just a component name
+
+As above, except the source of the currently installed version of the component will be differenced against that in your development drive.
+
+=back
+
+As mentioned previously, when C<DiffRel> is asked to perform a diff against the source code in your development drive, it attempts find a suitable pair of directories to pass to your differencing tool. The source code belonging to a particular component often lives in a deeply nested directory structure containing the source for other components also. C<DiffRel> therefore attempts to find the deepest sub-directory that captures all the source belonging to a particular component. It does this as follows:
+
+=over 4
+
+=item 1
+
+C<DiffRel> unpacks the source belonging to the component to be differenced against into a temporary directory.
+
+=item 2
+
+C<DiffRel> then examines the sub-directories of the temporary directory, looking for the deepest sub-directory that captures all files.
+
+=item 3
+
+By default the full path to this sub-directory is used as the first argument to the differencing tool. Optionally, this argument can be manually specified using the C<-r> option. In this case, C<DiffRel> with add the name of the temporary directory to the start of the path you specify.
+
+=item 4
+
+By default, the sub-directory found in (2), minus the leading temporary directory name is used as the second argument to your differencing tool. Optionally, this argument can be manually specified using the C<-l> option. In this case, C<DiffRel> will use the path you specify unaltered.
+
+=back
+
+Normally C<DiffRel>'s default behaviour will do the right thing. Situations where you may want to use the C<-r> and / or the C<-l> option include:
+
+=over 4
+
+=item 1
+
+If the source of the component you need to difference is in a different location in your development environment compared to that of the released version.
+
+=item 2
+
+If the source of the component you need to difference is contained in two or more root level directories. In this case C<DiffRel> will warn that it is about to difference against the root of your development drive (which is unlikely to be a good idea since there are likely to be source directories of other components at this level).
+
+=back
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/DiffRel.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Digest/Perl/MD5.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,418 @@
+# This library is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+#
+#  Copyright 2000 Christian Lackas, Imperia Software Solutions
+#  Copyright 1998-1999 Gisle Aas.
+#  Copyright 1995-1996 Neil Winton.
+#  Copyright 1991-1992 RSA Data Security, Inc.
+
+#!/usr/local/bin/perl -w
+#$Id: MD5.pm,v 1.16 2000/09/19 22:19:31 lackas Exp $
+
+package Digest::Perl::MD5;
+use strict;
+use integer;
+use Exporter;
+use vars qw($VERSION @ISA @EXPORTER @EXPORT_OK);
+
+@EXPORT_OK = qw(md5 md5_hex md5_base64);
+
+@ISA = 'Exporter';
+$VERSION = '1.5';
+
+# I-Vektor
+sub A() { 0x67_45_23_01 }
+sub B() { 0xef_cd_ab_89 }
+sub C() { 0x98_ba_dc_fe }
+sub D() { 0x10_32_54_76 }
+
+# for internal use
+sub MAX() { 0xFFFFFFFF }
+
+# padd a message to a multiple of 64
+sub padding($) {
+    my $l = length (my $msg = shift() . chr(128));    
+    $msg .= "\0" x (($l%64<=56?56:120)-$l%64);
+    $l = ($l-1)*8;
+    $msg .= pack 'VV', $l & MAX , ($l >> 16 >> 16);
+}
+
+
+sub rotate_left($$) {
+	($_[0] << $_[1]) | (( $_[0] >> (32 - $_[1])  )  & ((1 << $_[1]) - 1));
+}
+
+sub gen_code {
+  # Discard upper 32 bits on 64 bit archs.
+  my $MSK = ((1 << 16) << 16) ? ' & ' . MAX : '';
+  my %f = (
+	FF => "X0=rotate_left((X3^(X1&(X2^X3)))+X0+X4+X6$MSK,X5)+X1$MSK;",
+	GG => "X0=rotate_left((X2^(X3&(X1^X2)))+X0+X4+X6$MSK,X5)+X1$MSK;",
+	HH => "X0=rotate_left((X1^X2^X3)+X0+X4+X6$MSK,X5)+X1$MSK;",
+	II => "X0=rotate_left((X2^(X1|(~X3)))+X0+X4+X6$MSK,X5)+X1$MSK;",
+  );
+
+  my %s = (  # shift lengths
+	S11 => 7, S12 => 12, S13 => 17, S14 => 22, S21 => 5, S22 => 9, S23 => 14,
+	S24 => 20, S31 => 4, S32 => 11, S33 => 16, S34 => 23, S41 => 6, S42 => 10,
+	S43 => 15, S44 => 21
+  );
+
+  my $insert = "";
+  while(<DATA>) {
+	chomp;
+	next unless /^[FGHI]/;
+	my ($func,@x) = split /,/;
+	my $c = $f{$func};
+	$c =~ s/X(\d)/$x[$1]/g;
+	$c =~ s/(S\d{2})/$s{$1}/;
+        $c =~ s/^(.*)=rotate_left\((.*),(.*)\)\+(.*)$//;
+
+	$c = "\$r = $2;
+        $1 = ((\$r << $3) | ((\$r >> (32 - $3))  & ((1 << $3) - 1))) + $4";
+	$insert .= "\t$c\n";
+  }
+  
+  my $dump = '
+  sub round {
+	my ($a,$b,$c,$d) = @_[0 .. 3];
+	my $r;
+
+	' . $insert . '
+	$_[0]+$a' . $MSK . ', $_[1]+$b ' . $MSK . 
+        ', $_[2]+$c' . $MSK . ', $_[3]+$d' . $MSK . ';
+  }';
+  eval $dump;
+}
+
+gen_code();
+
+
+# object part of this module
+sub new {
+	my $class = shift;
+	bless {}, ref($class) || $class;
+}
+
+sub reset {
+	my $self = shift;
+	delete $self->{data};
+	$self
+}
+
+sub add(@) {
+	my $self = shift;
+	$self->{data} .= join'', @_;
+	$self
+}
+
+sub addfile {
+  	my ($self,$fh) = @_;
+	if (!ref($fh) && ref(\$fh) ne "GLOB") {
+	    require Symbol;
+	    $fh = Symbol::qualify($fh, scalar caller);
+	}
+	$self->{data} .= do{local$/;<$fh>};
+	$self
+}
+
+sub digest {
+	md5(shift->{data})
+}
+
+sub hexdigest {
+	md5_hex(shift->{data})
+}
+
+sub b64digest {
+	md5_base64(shift->{data})
+}
+
+sub md5(@) {
+	my $message = padding(join'',@_);
+	my ($a,$b,$c,$d) = (A,B,C,D);
+	my $i;
+	for $i (0 .. (length $message)/64-1) {
+		my @X = unpack 'V16', substr $message,$i*64,64;	
+		($a,$b,$c,$d) = round($a,$b,$c,$d,@X);
+	}
+	pack 'V4',$a,$b,$c,$d;
+}
+
+
+sub md5_hex(@) {  
+  unpack 'H*', &md5;
+}
+
+sub md5_base64(@) {
+  encode_base64(&md5);
+}
+
+
+sub encode_base64 ($) {
+    my $res;
+    while ($_[0] =~ /(.{1,45})/gs) {
+	$res .= substr pack('u', $1), 1;
+	chop $res;
+    }
+    $res =~ tr|` -_|AA-Za-z0-9+/|;#`
+    chop $res;chop $res;
+    $res;
+}
+
+1;
+
+=head1 NAME
+
+Digest::MD5::Perl - Perl implementation of Ron Rivests MD5 Algorithm
+
+=head1 DISCLAIMER
+
+This is B<not> an interface (like C<Digest::MD5>) but a Perl implementation of MD5.
+It is written in perl only and because of this it is slow but it works without C-Code.
+You should use C<Digest::MD5> instead of this module if it is available.
+This module is only usefull for
+
+=over 4
+
+=item
+
+computers where you cannot install C<Digest::MD5> (e.g. lack of a C-Compiler)
+
+=item
+
+encrypting only small amounts of data (less than one million bytes). I use it to
+hash passwords.
+
+=item
+
+educational purposes
+
+=back
+
+=head1 SYNOPSIS
+
+ # Functional style
+ use Digest::MD5  qw(md5 md5_hex md5_base64);
+
+ $hash = md5 $data;
+ $hash = md5_hex $data;
+ $hash = md5_base64 $data;
+    
+
+ # OO style
+ use Digest::MD5;
+
+ $ctx = Digest::MD5->new;
+
+ $ctx->add($data);
+ $ctx->addfile(*FILE);
+
+ $digest = $ctx->digest;
+ $digest = $ctx->hexdigest;
+ $digest = $ctx->b64digest;
+
+=head1 DESCRIPTION
+
+This modules has the same interface as the much faster C<Digest::MD5>. So you can
+easily exchange them, e.g.
+
+	BEGIN {
+	  eval {
+	    require Digest::MD5;
+	    import Digest::MD5 'md5_hex'
+	  };
+	  if ($@) { # ups, no Digest::MD5
+	    require Digest::Perl::MD5;
+	    import Digest::Perl::MD5 'md5_hex'
+	  }		
+	}
+
+If the C<Digest::MD5> module is available it is used and if not you take
+C<Digest::Perl::MD5>.
+
+You can also install the Perl part of Digest::MD5 together with Digest::Perl::MD5
+and use Digest::MD5 as normal, it falls back to Digest::Perl::MD5 if it
+cannot load its object files.
+
+For a detailed Documentation see the C<Digest::MD5> module.
+
+=head1 EXAMPLES
+
+The simplest way to use this library is to import the md5_hex()
+function (or one of its cousins):
+
+    use Digest::Perl::MD5 'md5_hex';
+    print 'Digest is ', md5_hex('foobarbaz'), "\n";
+
+The above example would print out the message
+
+    Digest is 6df23dc03f9b54cc38a0fc1483df6e21
+
+provided that the implementation is working correctly.  The same
+checksum can also be calculated in OO style:
+
+    use Digest::MD5;
+    
+    $md5 = Digest::MD5->new;
+    $md5->add('foo', 'bar');
+    $md5->add('baz');
+    $digest = $md5->hexdigest;
+    
+    print "Digest is $digest\n";
+
+=head1 LIMITATIONS
+
+This implementation of the MD5 algorithm has some limitations:
+
+=over 4
+
+=item
+
+It's slow, very slow. I've done my very best but Digest::MD5 is still about 135 times faster.
+You can only encrypt Data up to one million bytes in an acceptable time. But it's very usefull
+for encrypting small amounts of data like passwords.
+
+=item
+
+You can only encrypt up to 2^32 bits = 512 MB on 32bit archs. You should use C<Digest::MD5>
+for those amounts of data.
+
+=item
+
+C<Digest::Perl::MD5> loads all data to encrypt into memory. This is a todo.
+
+=back
+
+=head1 SEE ALSO
+
+L<Digest::MD5>
+
+L<md5sum(1)>
+
+RFC 1321
+
+=head1 COPYRIGHT
+
+This library is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+ Copyright 2000 Christian Lackas, Imperia Software Solutions
+ Copyright 1998-1999 Gisle Aas.
+ Copyright 1995-1996 Neil Winton.
+ Copyright 1991-1992 RSA Data Security, Inc.
+
+The MD5 algorithm is defined in RFC 1321. The basic C code
+implementing the algorithm is derived from that in the RFC and is
+covered by the following copyright:
+
+=over 4
+
+=item
+
+Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All
+rights reserved.
+
+License to copy and use this software is granted provided that it
+is identified as the "RSA Data Security, Inc. MD5 Message-Digest
+Algorithm" in all material mentioning or referencing this software
+or this function.
+
+License is also granted to make and use derivative works provided
+that such works are identified as "derived from the RSA Data
+Security, Inc. MD5 Message-Digest Algorithm" in all material
+mentioning or referencing the derived work.
+
+RSA Data Security, Inc. makes no representations concerning either
+the merchantability of this software or the suitability of this
+software for any particular purpose. It is provided "as is"
+without express or implied warranty of any kind.
+
+These notices must be retained in any copies of any part of this
+documentation and/or software.
+
+=back
+
+This copyright does not prohibit distribution of any version of Perl
+containing this extension under the terms of the GNU or Artistic
+licenses.
+
+=head1 AUTHORS
+
+The original MD5 interface was written by Neil Winton
+(C<N.Winton@axion.bt.co.uk>).
+
+C<Digest::MD5> was made by Gisle Aas <gisle@aas.no> (I took his Interface
+and part of the documentation)
+
+Thanks to Guido Flohr for his 'use integer'-hint.
+
+This release was made by Christian Lackas <delta@clackas.de>.
+
+=cut
+
+__DATA__
+FF,$a,$b,$c,$d,$_[4],7,0xd76aa478,/* 1 */
+FF,$d,$a,$b,$c,$_[5],12,0xe8c7b756,/* 2 */
+FF,$c,$d,$a,$b,$_[6],17,0x242070db,/* 3 */
+FF,$b,$c,$d,$a,$_[7],22,0xc1bdceee,/* 4 */
+FF,$a,$b,$c,$d,$_[8],7,0xf57c0faf,/* 5 */
+FF,$d,$a,$b,$c,$_[9],12,0x4787c62a,/* 6 */
+FF,$c,$d,$a,$b,$_[10],17,0xa8304613,/* 7 */
+FF,$b,$c,$d,$a,$_[11],22,0xfd469501,/* 8 */
+FF,$a,$b,$c,$d,$_[12],7,0x698098d8,/* 9 */
+FF,$d,$a,$b,$c,$_[13],12,0x8b44f7af,/* 10 */
+FF,$c,$d,$a,$b,$_[14],17,0xffff5bb1,/* 11 */
+FF,$b,$c,$d,$a,$_[15],22,0x895cd7be,/* 12 */
+FF,$a,$b,$c,$d,$_[16],7,0x6b901122,/* 13 */
+FF,$d,$a,$b,$c,$_[17],12,0xfd987193,/* 14 */
+FF,$c,$d,$a,$b,$_[18],17,0xa679438e,/* 15 */
+FF,$b,$c,$d,$a,$_[19],22,0x49b40821,/* 16 */ 
+GG,$a,$b,$c,$d,$_[5],5,0xf61e2562,/* 17 */
+GG,$d,$a,$b,$c,$_[10],9,0xc040b340,/* 18 */
+GG,$c,$d,$a,$b,$_[15],14,0x265e5a51,/* 19 */
+GG,$b,$c,$d,$a,$_[4],20,0xe9b6c7aa,/* 20 */
+GG,$a,$b,$c,$d,$_[9],5,0xd62f105d,/* 21 */
+GG,$d,$a,$b,$c,$_[14],9,0x2441453,/* 22 */
+GG,$c,$d,$a,$b,$_[19],14,0xd8a1e681,/* 23 */
+GG,$b,$c,$d,$a,$_[8],20,0xe7d3fbc8,/* 24 */
+GG,$a,$b,$c,$d,$_[13],5,0x21e1cde6,/* 25 */
+GG,$d,$a,$b,$c,$_[18],9,0xc33707d6,/* 26 */
+GG,$c,$d,$a,$b,$_[7],14,0xf4d50d87,/* 27 */
+GG,$b,$c,$d,$a,$_[12],20,0x455a14ed,/* 28 */
+GG,$a,$b,$c,$d,$_[17],5,0xa9e3e905,/* 29 */
+GG,$d,$a,$b,$c,$_[6],9,0xfcefa3f8,/* 30 */
+GG,$c,$d,$a,$b,$_[11],14,0x676f02d9,/* 31 */
+GG,$b,$c,$d,$a,$_[16],20,0x8d2a4c8a,/* 32 */
+HH,$a,$b,$c,$d,$_[9],4,0xfffa3942,/* 33 */
+HH,$d,$a,$b,$c,$_[12],11,0x8771f681,/* 34 */
+HH,$c,$d,$a,$b,$_[15],16,0x6d9d6122,/* 35 */
+HH,$b,$c,$d,$a,$_[18],23,0xfde5380c,/* 36 */
+HH,$a,$b,$c,$d,$_[5],4,0xa4beea44,/* 37 */
+HH,$d,$a,$b,$c,$_[8],11,0x4bdecfa9,/* 38 */
+HH,$c,$d,$a,$b,$_[11],16,0xf6bb4b60,/* 39 */
+HH,$b,$c,$d,$a,$_[14],23,0xbebfbc70,/* 40 */
+HH,$a,$b,$c,$d,$_[17],4,0x289b7ec6,/* 41 */
+HH,$d,$a,$b,$c,$_[4],11,0xeaa127fa,/* 42 */
+HH,$c,$d,$a,$b,$_[7],16,0xd4ef3085,/* 43 */
+HH,$b,$c,$d,$a,$_[10],23,0x4881d05,/* 44 */
+HH,$a,$b,$c,$d,$_[13],4,0xd9d4d039,/* 45 */
+HH,$d,$a,$b,$c,$_[16],11,0xe6db99e5,/* 46 */
+HH,$c,$d,$a,$b,$_[19],16,0x1fa27cf8,/* 47 */
+HH,$b,$c,$d,$a,$_[6],23,0xc4ac5665,/* 48 */
+II,$a,$b,$c,$d,$_[4],6,0xf4292244,/* 49 */
+II,$d,$a,$b,$c,$_[11],10,0x432aff97,/* 50 */
+II,$c,$d,$a,$b,$_[18],15,0xab9423a7,/* 51 */
+II,$b,$c,$d,$a,$_[9],21,0xfc93a039,/* 52 */
+II,$a,$b,$c,$d,$_[16],6,0x655b59c3,/* 53 */
+II,$d,$a,$b,$c,$_[7],10,0x8f0ccc92,/* 54 */
+II,$c,$d,$a,$b,$_[14],15,0xffeff47d,/* 55 */
+II,$b,$c,$d,$a,$_[5],21,0x85845dd1,/* 56 */
+II,$a,$b,$c,$d,$_[12],6,0x6fa87e4f,/* 57 */
+II,$d,$a,$b,$c,$_[19],10,0xfe2ce6e0,/* 58 */
+II,$c,$d,$a,$b,$_[10],15,0xa3014314,/* 59 */
+II,$b,$c,$d,$a,$_[17],21,0x4e0811a1,/* 60 */
+II,$a,$b,$c,$d,$_[8],6,0xf7537e82,/* 61 */
+II,$d,$a,$b,$c,$_[15],10,0xbd3af235,/* 62 */
+II,$c,$d,$a,$b,$_[6],15,0x2ad7d2bb,/* 63 */
+II,$b,$c,$d,$a,$_[13],21,0xeb86d391,/* 64 */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Digest/Perl/readme.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1 @@
+The module FileCompare.pm needs an MD5 module. If present it will use Digest::MD5, because this is implemented in C and so is faster than this pure Perl version. However, Perl version 5.005_03 (the version currently shipped with the Symbian platform SDK) doesn't contain Digest::MD5. This module is therefore provided as a fall back.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/EnvData	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,207 @@
+#!perl
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use CommandController;
+
+my ($remove, $mrpName, $verbose, $comp, $forceRemove);
+
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'EnvData');
+
+ProcessCommandLine();
+
+my $envDb = EnvDb->Open($iniData, $verbose);
+
+if ($remove) {
+    RemoveEntryFromDB();
+}
+elsif (!$mrpName) {
+    DisplayInformation();
+}
+else {
+    AddEntryToDB();
+}
+
+sub ProcessCommandLine {
+    Getopt::Long::Configure ("bundling");
+    
+    my $help;
+    GetOptions("h" => \$help, "r" => \$remove, "m=s" => \$mrpName, "v+" => \$verbose, "f" => \$forceRemove);
+    
+    if ($help) {
+        Usage(0);
+    }
+
+    $comp = lc(shift @ARGV);
+
+    if (scalar @ARGV) {
+            print "Error: Invalid number of arguments\n";
+            Usage(1);
+        }    
+    elsif ($remove && $mrpName) {
+        print "Error: Can not specify -m and -r options together\n";
+        Usage(1);
+    }
+    elsif (($remove || $mrpName) && !$comp) {
+        print "Error: You must specify a component name\n";
+        Usage(1);       
+    }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: envdata [options] <component>
+EnvData is used for adding components to the evironment database...
+  
+options:
+
+-h             help
+-m <mrp_name>  specify a new mrp file name
+-v             verbose output (-vv very verbose)\n");
+}
+
+sub AddEntryToDB {
+    Utils::CheckExists($mrpName);
+    Utils::AbsoluteFileName(\$mrpName);
+    
+    if($iniData->HasMappings()) {
+      $mrpName = $iniData->PerformReverseMapOnFileName($mrpName);
+    }
+    
+    $mrpName = Utils::RemoveSourceRoot($mrpName);
+    
+    if ($envDb->ComponentExistsInDatabase($comp) && $envDb->Status($comp) != EnvDb::STATUS_INFORMATION_ONLY) {
+        die "EnvData can only be used to update non-installed components\n";
+    }
+
+    $envDb->SetVersion($comp, '__info__');
+    $envDb->SetStatus($comp, EnvDb::STATUS_INFORMATION_ONLY);
+    $envDb->GenerateEmptySignature($comp, '__info__');
+
+    $envDb->SetMrpName($comp, $mrpName);
+    
+    print "Entry for $comp added to the environment database\n";
+}
+
+sub RemoveEntryFromDB {
+    if ($envDb->ComponentExistsInDatabase($comp) && $envDb->Status($comp) != EnvDb::STATUS_INFORMATION_ONLY) {
+        die "EnvData can only be used to update non-installed components\n";
+    }
+
+    my $ver = $envDb->Version($comp, 1);
+    
+    if (defined $ver) {
+        if ($forceRemove) {
+            $envDb->SetVersion($comp, undef);
+        }
+        else {
+            print "Remove environment database entry for $comp? [y/n] ";
+            my $response = <STDIN>;
+            chomp $response;
+            if ($response =~ /^y$/i) {
+                $envDb->SetVersion($comp, undef);
+            }
+            else {
+                die "Remove aborted\n";
+            }
+        }
+    }
+    else {
+        die "Error: No information for $comp exists in the environment database\n";
+    }
+}
+
+sub DisplayInformation {
+    my $versionInfo = $envDb->VersionInfo(1);
+    
+    my $tableData = [["Component", "Status", "MRP"]];
+    
+    if ($comp) {
+        if (exists $versionInfo->{$comp}) {
+            push @{$tableData}, [$comp, EnvDb::StatusString($envDb->Status($comp)), $envDb->MrpName($comp)];
+        }
+    }
+    else {
+        foreach my $entry (sort keys %{$versionInfo}) {
+                push @{$tableData}, [$entry, EnvDb::StatusString($envDb->Status($entry)), $envDb->MrpName($entry)];
+        }
+    }
+
+    if (scalar(@{$tableData}) > 1) {
+        print "\n";
+        $iniData->TableFormatter->PrintTable($tableData, 1);
+    }
+    else {
+        print "No information exists in the environment database". ($comp ? " for $comp" : '') ."\n";        
+    }
+}
+
+
+=head1 NAME
+
+EnvData
+
+=head1 SYNOPSIS
+
+  envdata [options] [<component>]
+
+options:
+  -h             help
+  -m <mrp_name>  specify a new mrp file name
+  -v             verbose output (-vv very verbose)
+  -r             remove entry from database
+  -f             force removal from database (no confirmation prompt)\n");
+
+=head1 DESCRIPTION
+
+Displays the information contained within the environment database.  Can also add
+and delete information about components which are not installed.  This is particularly
+useful for when IPR information needs to be obtained from MRP files, but the MRP file
+locations are not known to the CBR Tools as the components are not already part of
+the environment, for example during the overnight build process.
+
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/EnvData.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/EnvDb.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2145 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+
+
+package EnvDb;
+
+use strict;
+use MLDBM::Sync;                       # this gets the default, SDBM_File
+use MLDBM qw(DB_File Storable);        # use Storable for serializing
+use MLDBM qw(MLDBM::Sync::SDBM_File);  # use extended SDBM_File, handles values > 1024 bytes
+use Fcntl qw(:DEFAULT);                # import symbols O_CREAT & O_RDWR for use with DBMs
+use Cwd;
+use File::Find;
+use File::Copy;
+use File::Basename;
+use File::Path;
+use File::Spec;
+use Fcntl;
+use MrpData;
+use RelData;
+use DirHandle; # we're recursing in CrossCheckSourceDirectory, so this is slightly nicer than DIRHANDLEs
+                # (though not actually necessary, as it happens)
+use Utils;
+use CatData;
+use Carp;
+use Symbian::CBR::Component::Manifest;
+
+#
+# Constants.
+#
+
+use constant DB_NAME => "\\epoc32\\relinfo\\envdb";
+use constant STATUS_CLEAN => 0;
+use constant STATUS_DIRTY => 1;
+use constant STATUS_PENDING_RELEASE => 2;
+use constant STATUS_INFORMATION_ONLY => 5;
+use constant STATUS_NOT_INSTALLED => 3;
+use constant STATUS_DIRTY_SOURCE => 4;
+use constant STATUS_STRING_PASSED => "clean";
+use constant STATUS_STRING_FAILED => "dirty";
+use constant STATUS_STRING_MISSING => "missing";
+use constant STATUS_STRING_PENDING_RELEASE => "pending release";
+use constant STATUS_STRING_NOT_INSTALLED => "not installed";
+use constant STATUS_STRING_DIRTY_SOURCE => "binaries clean, source dirty";
+use constant STATUS_STRING_INFORMATION_ONLY => "Information only";
+use constant SCAN_PROGRESS_TUNER => 50;
+use constant ACCEPTABLE_EVALID_FAILURES => "abld.bat"; # this is a regexp - use | to add more items. It is case-insensitive.
+
+#
+# Public.
+#
+
+sub Open {
+  my $pkg = shift;
+  my $iniData = shift;
+  my $verbose = shift;
+  
+  # Check that the environment is not on an illegal volume - INC105548
+  Utils::CheckIllegalVolume($iniData);
+
+  my $dbName = Utils::PrependEpocRoot(DB_NAME);
+  my $dbDir = dirname($dbName);
+  unless (-e $dbDir) {
+    Utils::MakeDir($dbDir);
+  }
+  my $db;
+  {
+    local $^W = 0;
+    tie (%{$db}, 'MLDBM::Sync', $dbName, O_CREAT|O_RDWR, 0666) || die "Couldn't open database DB_NAME: $!\n";
+  }
+
+  my $self = {iniData => $iniData,
+	      db => $db,
+        mrpcache => {},
+	      verbose => ($verbose || 0)};
+  bless $self, $pkg;
+  return $self;
+}
+
+sub Close {
+  my $self = shift;
+  untie %{$self};
+}
+
+sub ComponentExistsInDatabase {
+  my $self = shift;
+  my $comp = shift;
+  
+  return 1 if (exists $self->{db}->{$comp});
+}
+
+sub Version {
+  my $self = shift;
+  my $comp = shift;
+  my $includeInformationOnlyEntries = shift;
+  
+  $comp = lc($comp); # Note, component names are always stored in lower case.
+  my $entry = $self->{db}->{$comp};
+  
+  if (defined $entry) {
+    if (!$includeInformationOnlyEntries && $entry->{status} eq STATUS_INFORMATION_ONLY) {
+      # Some callers are not interested in information only entries
+      return undef;
+    }
+    
+    return $entry->{ver};
+  }
+  return undef;
+}
+
+sub VersionInfo {
+  my $self = shift;
+  my $includeInformationOnlyEntries = shift;
+  
+  my $versionInfo;
+  foreach my $thisKey (keys %{$self->{db}}) {
+    if (!$includeInformationOnlyEntries) {
+      # Some callers are not interested in information only entries
+      next if ($self->{db}->{$thisKey}->{status} eq STATUS_INFORMATION_ONLY);
+    }
+    
+    $versionInfo->{$thisKey} = $self->{db}->{$thisKey}->{ver};
+  }
+  return $versionInfo;
+}
+
+sub SetVersion {
+  my $self = shift;
+  my $comp = lc(shift);
+  my $ver = shift;
+
+  my $entry = $self->{db}->{$comp};
+  if (defined $ver) {
+    if (defined $entry->{ver} and $entry->{status} != STATUS_PENDING_RELEASE) {
+      $self->DeleteSignature($comp, $entry->{ver});
+    }
+    $entry->{ver} = $ver;
+
+    # Write entry to database.
+    $self->{db}->{$comp} = $entry;
+  }
+  else {
+    # undefined version, so remove entry from database (if it was present).
+    if (defined $entry) {
+      delete $self->{db}->{$comp}
+    }
+  }
+}
+
+sub InternalVersion {
+  my $self = shift;
+  my $comp = shift;
+  $comp = lc($comp); # Note, component names are always stored in lower case.
+  my $entry = $self->{db}->{$comp};
+  if (defined $entry) {
+    return $entry->{intVer};
+  }
+  return undef;
+}
+
+sub SetInternalVersion {
+  my $self = shift;
+  my $comp = lc(shift);
+  my $intVer = shift;
+
+  my $entry = $self->{db}->{$comp};
+  unless (defined $entry) {
+    die "Error: $comp not found in environment database\n";
+  }
+  $entry->{intVer} = $intVer;
+
+  # Write entry to database.
+  $self->{db}->{$comp} = $entry;
+}
+
+sub Status {
+  my $self = shift;
+  my $comp = lc(shift);
+
+  my $entry = $self->{db}->{$comp};
+  unless (defined $entry) {
+    die "Error: $comp not found in environment database\n";
+  }
+
+  return $entry->{status};
+}
+
+sub SetStatus {
+  my $self = shift;
+  my $comp = lc(shift);
+  my $status = shift;
+
+  my $entry = $self->{db}->{$comp};
+  unless (defined $entry) {
+    die "Error: $comp not found in environment database\n";
+  }
+  $entry->{status} = $status;
+
+  # Write entry to database.
+  $self->{db}->{$comp} = $entry;
+}
+
+sub StatusString {
+  my $status = shift;
+  if ($status == STATUS_CLEAN) {
+    return STATUS_STRING_PASSED;
+  }
+  elsif ($status == STATUS_DIRTY) {
+    return STATUS_STRING_FAILED;
+  }
+  elsif ($status == STATUS_PENDING_RELEASE) {
+    return STATUS_STRING_PENDING_RELEASE;
+  }
+  elsif ($status == STATUS_DIRTY_SOURCE) {
+    return STATUS_STRING_DIRTY_SOURCE;
+  }
+  elsif ($status == STATUS_INFORMATION_ONLY) {
+    return STATUS_STRING_INFORMATION_ONLY;
+  }  
+}
+
+sub CheckCompName {
+  my $self = shift;
+  my $comp = shift;
+  die "Error: Component name can't begin with .(dot) \"$comp\".\n" if ($comp =~ m/^\./);
+}
+
+sub MrpName {
+  my $self = shift;
+  my $comp = lc(shift);
+
+  my $entry = $self->{db}->{$comp};
+  unless (defined $entry) {
+    die "Error: $comp not found in environment database\n";
+  }
+
+  return $entry->{mrpName};
+}
+
+sub SetMrpName {
+  my $self = shift;
+  my $comp = lc(shift);
+  my $mrpName = shift;
+
+  my $entry = $self->{db}->{$comp};
+  unless (defined $entry) {
+    die "Error: $comp not found in environment database\n";
+  }
+
+  $entry->{mrpName} = $mrpName;
+
+  # Write entry to database.
+  $self->{db}->{$comp} = $entry;
+}
+
+sub ComponentsPendingRelease {
+  my $self = shift;
+  my %comps;
+  foreach my $thisComp (keys %{$self->{db}}) {
+    my $thisEntry = $self->{db}->{$thisComp};
+    if ($thisEntry->{status} == STATUS_PENDING_RELEASE) {
+      $comps{$thisComp} = {mrpName => $thisEntry->{mrpName},
+			   ver => $thisEntry->{ver},
+			   intVer => $thisEntry->{intVer}};
+    }
+  }
+  return \%comps;
+}
+
+sub GenerateSignature {
+  my $self = shift;
+  my $comp = lc (shift);
+  my $ver = shift;
+  my $sigName = SignatureName($comp, $ver);
+  open (SIG, ">$sigName") or die "Error: Couldn't open $sigName: $!\n";
+  foreach my $thisBinZip (@{$self->RelevantBinaryZips($comp, $ver)}) {
+    foreach my $file (@{Utils::ListZip($thisBinZip, 1)}) {
+      my $fileER = Utils::PrependEpocRoot($file);
+      if (-f $fileER) {
+        (my $mTime, my $size) = Utils::FileModifiedTimeAndSize($fileER);
+        unless (defined $size) {
+          die "Error: Problem reading stats of \"$fileER\"\n";
+        }
+        if ($self->{verbose} > 1) {
+          print "Adding signature entry for \"$file\"\n";
+          print "\tmTime: $mTime (", scalar gmtime($mTime), "\n";
+          print "\tsize:  $size\n";
+        }
+        print SIG "$file\t$mTime\t$size\n";
+      }
+      else {
+        print "Warning: Unexpected entry in \"$thisBinZip\": \"$file\"\n         $comp $ver could be corrupt or tampered with\n";
+      }
+    }
+  }
+  close (SIG);
+}
+
+sub GenerateFakeSignature {
+# As GenerateSignature, except the mtime and size of each file is set to zero.
+# This is intended to be used when validating against an external baseline.
+  my $self = shift;
+  my $comp = lc (shift);
+  my $ver = shift;
+  my $sigName = SignatureName($comp, $ver);
+  open (SIG, ">$sigName") or die "Error: Couldn't open $sigName: $!\n";
+  foreach my $thisBinZip (@{$self->RelevantBinaryZips($comp, $ver)}) {
+    foreach my $file (@{Utils::ListZip($thisBinZip)}) {
+      print SIG "$file\t0\t0\n";
+    }
+  }
+  close (SIG);
+}
+
+sub GenerateEmptySignature {
+  my $self = shift;
+  my $comp = lc (shift);
+  my $ver = shift;
+  my $sigName = SignatureName($comp, $ver);
+  open (SIG, ">$sigName") or die "Error: Couldn't open $sigName: $!\n";
+  close (SIG);
+}
+
+sub RemoveComponent {
+  my $self = shift;
+  my $comp = lc(shift);
+
+  # Read database entry.
+  my $entry = $self->{db}->{$comp};
+
+  if (defined $entry) {
+    # Remove installed binaries.
+    if ($self->{verbose}) { print "Removing binaries from $comp $entry->{ver}...\n"; }
+    $self->DeleteFilesInSignature($comp, $entry->{ver});
+    $self->DeleteSignature($comp, $entry->{ver});
+
+    # Remove the database entry.
+    delete $self->{db}->{$comp};
+  }
+  else {
+    print "$comp not currently installed, aborting removal of binaries\n";
+  }
+}
+
+sub RefreshComponent {
+  my $self = shift;
+  my $comp = lc(shift);
+  my $overwrite = shift;
+
+  # Read database entry.
+  my $entry = $self->{db}->{$comp};
+
+  if (!defined $entry) {
+    print "$comp not currently installed; aborting refreshing of binaries\n";
+  } elsif ($entry->{status} == STATUS_PENDING_RELEASE) {
+    print "$comp is pending release and cannot be refreshed; use 'preprel' to remove it from your environment\n";
+  } else {
+    my $ver = $entry->{ver};
+
+    my $relData = RelData->Open($self->{iniData}, $comp, $ver, $self->{verbose}); # Dies if release not in archive
+    $relData->WarnIfReleaseTooNew();
+
+    print "Removing $comp $ver..\n";
+    if ($self->{verbose}) { print "Removing binaries from $comp $ver...\n"; }
+    $self->DeleteFilesInSignature($comp, $entry->{ver});
+
+    print "Installing $comp $ver...\n";
+    $self->UnpackBinaries($comp, $ver, Utils::EpocRoot(), $overwrite);
+
+    my $status = ($self->CheckComp($comp))[0];
+    if ($status == STATUS_DIRTY) {
+      print "WARNING: Installed component does not match existing signature; updating signature\n";
+      $self->GenerateSignature($comp, $ver);
+    }
+  }
+}
+
+sub DeleteSource {
+  my $self = shift;
+  my $thisComp = shift;
+  my $dryrun = shift;
+  my $force = shift;
+
+  my $ver = $self->Version($thisComp);
+
+  if(!defined $ver) {
+    die "ERROR: Unable to obtain version for $thisComp\n";
+  }
+
+  my $reldata = RelData->Open($self->{iniData}, $thisComp, $ver, $self->{verbose});
+
+  my $srcitems = $reldata->SourceItems;
+  foreach my $thisSrcItem (keys %$srcitems) {
+    # If there are mappings and the source root is \\, perform mappings on filename. Otherwise prepend source root.
+    if($self->{iniData}->HasMappings() && Utils::SourceRoot() eq "\\") {
+      $thisSrcItem = $self->{iniData}->PerformMapOnFileName($thisSrcItem);
+    }
+    else{
+      $thisSrcItem = Utils::PrependSourceRoot($thisSrcItem);
+    }
+
+    if ($self->{verbose} || $dryrun) {
+      my $dir = (-d $thisSrcItem)?" (directory)":"";
+      my $exists = (-e $thisSrcItem)?"":" (doesn't exist)";
+      my $verb = $dryrun?"Would remove":"Removing";
+      print "$verb $thisSrcItem$dir$exists\n";
+    }
+    {
+        local $SIG{__WARN__} = sub {
+            my $warn = shift;
+	    $warn =~ s/ at .*?EnvDb\.pm line \d+//;
+	    print STDERR "WARNING: $warn";
+        };
+        rmtree($thisSrcItem, 0, !$force) unless $dryrun;
+    }
+    my $directory = dirname($thisSrcItem);
+	
+	my @items = @{Utils::ReadDir($directory)};
+
+	if (scalar @items == 1 && $items[0] =~ /^distribution\.policy$/i) {
+	  unlink File::Spec->catdir($directory, shift @items) unless $dryrun;
+	}
+
+    if (-e $directory && (!scalar @items)) { # No items in dir or just a distribution.policy file in dir
+      rmdir $directory or die "Error: Could not remove directory $directory: $!";
+      while (($directory = dirname($directory)) && -e $directory && !scalar @{Utils::ReadDir($directory)}) {
+        rmdir $directory or die "Error: Could not remove directory $directory: $!";
+      }
+    }
+  }
+}
+
+sub CheckEnv {
+  my $self = shift;
+  my $displayProgress = shift;
+  my $ignoreStandardIgnores = shift;
+  my $warnNotError = shift; # When validating the MrpData, warnings will be produced
+                           # instead of errors when checking paths lengths DEF099673
+  
+  unless (defined $displayProgress) {
+    $displayProgress = 0;
+  }
+  unless (defined $ignoreStandardIgnores) {
+    $ignoreStandardIgnores = 0;
+  }
+
+  my $overallStatus = STATUS_CLEAN;
+  my @dirtyComps;
+
+  if ($displayProgress) {
+    print "Scanning environment";
+  }
+
+  $self->InitIgnores($ignoreStandardIgnores);
+  $self->ScanEnv($displayProgress);
+
+  my @mrpData;
+  my @errors;
+  foreach my $thisComp (sort keys %{$self->{db}}) {
+    (my $status, my $mrpData) = $self->CheckComp($thisComp, undef, $warnNotError);
+    my $ver = $self->{db}->{$thisComp}->{ver};
+    if ($status == STATUS_DIRTY || $status == STATUS_DIRTY_SOURCE) {
+      $overallStatus = STATUS_DIRTY;
+      push (@dirtyComps, {comp => $thisComp, ver => $ver});
+    }
+    elsif ($status == STATUS_PENDING_RELEASE) {
+      unless ($overallStatus == STATUS_DIRTY) {
+        $overallStatus = STATUS_PENDING_RELEASE;
+      }
+      if (defined $mrpData) {
+        push @mrpData, $mrpData;
+      }
+      else {
+        push @errors, "Error: Problem extracting mrp data from $thisComp\n";
+      }
+    }
+    if ($displayProgress and not $self->{verbose}) {
+      print '.';
+    }
+  }
+  if ($displayProgress and not $self->{verbose}) {
+    print "\n";
+  }
+
+  if ($#errors >= 0) {
+    chomp $errors[$#errors];
+    print @errors;
+    die "\n";
+  }
+
+  $self->RemoveBinsToIgnore();
+
+  my $unaccountedFiles = $self->UnaccountedEnvFiles();
+  if (scalar(@$unaccountedFiles) >= 1) {
+    $overallStatus = STATUS_DIRTY;
+  }
+
+  my $duplicates = $self->Duplicates(\@mrpData);
+  if (scalar(@$duplicates) >= 1) {
+    $overallStatus = STATUS_DIRTY;
+  }
+
+  return ($overallStatus, \@mrpData, \@dirtyComps, $unaccountedFiles, $duplicates);
+}
+
+sub CheckComp {
+  my $self = shift;
+  my $comp = lc(shift);
+  my $keepGoing = shift;
+  my $warnNotError = shift;
+  
+  unless (defined $keepGoing) {
+    $keepGoing = 1;
+  }
+
+  my $entry = $self->{db}->{$comp};
+  if (!defined $entry || $self->{db}->{$comp}->{status} == STATUS_INFORMATION_ONLY) {
+    return (STATUS_NOT_INSTALLED);
+  }
+  my $oldstatus = $entry->{status};
+  my $ver = $entry->{ver};
+  die unless $ver;
+  my $passed = 1;
+
+  my $doCheck = sub {
+    my $file = shift;
+    my $sigMTime = shift;
+    my $sigSize = shift;
+
+    if (-e $file) { # Files might be installed in directories other than \epoc32, so do an explicit check.
+      $self->CheckFileAgainstEnvScan($file);
+      # Check the signature information against what is physically present in the environment.
+      (my $actualMTime, my $actualSize) = Utils::FileModifiedTimeAndSize($file);
+      if ($sigMTime != $actualMTime or $sigSize != $actualSize) {
+        # File failed check.
+        $passed = 0;
+        if ($self->{verbose}) {
+          print "$comp $ver $file failed check\n";
+        }
+        if ($self->{verbose} > 1) {
+          my $printableActualMTime = gmtime($actualMTime);
+          my $printableSigMTime = gmtime($sigMTime);
+          print "\tcurrent mtime:   $printableActualMTime\n";
+          print "\tsignature mtime: $printableSigMTime\n";
+          print "\tcurrent size:    $actualSize\n";
+          print "\tsignature size:  $sigSize\n";
+        }
+        unless ($keepGoing) {
+          return 0;
+        }
+      }
+      else {
+        # File passed check.
+        if ($self->{verbose} > 1) {
+          print "$comp $ver $file passed\n";
+        }
+      }
+    }
+    else {
+      # File missing.
+      $passed = 0;
+      if ($self->{verbose}) {
+        print "$comp $ver $file missing\n";
+      }
+      unless ($keepGoing) {
+        return 0;
+      }
+    }
+
+    return 1;
+  };
+
+  my $mrpData;
+  die unless defined $entry->{status};
+  if ($entry->{status} == STATUS_PENDING_RELEASE) {
+    eval {
+      unless (defined $entry->{mrpName}) {
+        die "Error: mrp name not specified for $comp\n";
+      }
+      $mrpData = $self->GetMrpData($comp);
+      $mrpData->Validate($warnNotError);
+      foreach my $thisBin (@{$mrpData->BinariesAndExports()}) {
+	$thisBin = Utils::PrependEpocRoot($thisBin);
+        $self->CheckFileAgainstEnvScan($thisBin);
+      }
+    };
+    if ($@) {
+      $mrpData = undef; # splat the MrpData in order to stop
+                        # the envinfo/cleanenv.
+                        # We need to do this because the only
+                        # way we have of returning an error is to
+                        # fail to return the MRP.
+      if ($self->{verbose} == 0) {
+        print "\n";
+      }
+      print "$comp: $@";
+    }
+  }
+  else {
+    ExecuteSignature(SignatureName($comp, $ver), $doCheck);
+
+    if ($passed) {
+      if ($oldstatus == STATUS_DIRTY) {
+        $self->SetStatus($comp, STATUS_CLEAN);
+      } else {
+        # Here we return the original status from the environment database,
+        # which is probably STATUS_CLEAN but might by STATUS_DIRTY_SOURCE
+        $self->SetStatus($comp, $oldstatus);
+      }
+    }
+    else {
+      $self->SetStatus($comp, STATUS_DIRTY);
+    }
+  }
+
+  return ($self->Status($comp), $mrpData);
+}
+
+sub ValidateEnv {
+  my $self = shift;
+  my $comp = lc(shift);
+  my $ver = shift;
+  my $validatesource = shift;
+  my $fullbincheck = shift;
+
+  my $validatingExternalEnv = 0;
+  my $compsToValidate;
+  if (defined $comp and defined $ver) {
+    if (scalar (keys %{$self->{db}}) > 0) {
+      die "Error: Can't validate against an external environment, because the current environment database is not empty\n";
+    }
+    $validatingExternalEnv = 1;
+    my $relData = RelData->Open($self->{iniData}, $comp, $ver, $self->{verbose});
+    $compsToValidate = $relData->Environment();
+  }
+  else {
+    # Use the current environment.
+    foreach my $thisComp (sort keys %{$self->{db}}) {
+      $compsToValidate->{$thisComp} = $self->{db}->{$thisComp}->{ver};
+    }
+  }
+
+  my @failedComps;
+  foreach my $thisComp (sort keys %{$compsToValidate}) {
+    my $thisVer = $compsToValidate->{$thisComp};
+    my $result = $self->ValidateComp($thisComp, $thisVer, 0, $validatesource, 0, $fullbincheck);
+    if ($result == STATUS_DIRTY || $result == STATUS_DIRTY_SOURCE) {
+      push (@failedComps, $thisComp);
+      if ($validatingExternalEnv) {
+        # Add an entry even of components that failed. This makes it easier for the user to specify what needs to be re-released.
+        $self->SetVersion($thisComp, $thisVer);
+        if ($result == STATUS_DIRTY) {
+          $self->GenerateFakeSignature($thisComp, $thisVer);
+        } elsif ($result == STATUS_DIRTY_SOURCE) {
+          $self->GenerateSignature($thisComp, $thisVer);
+        }
+        $self->SetStatus($thisComp, $result);
+        my $relData = RelData->Open($self->{iniData}, $thisComp, $thisVer, $self->{verbose});
+        $self->SetMrpName($thisComp, $relData->MrpName());
+        $self->SetInternalVersion($thisComp, $relData->InternalVersion());
+      }
+    }
+  }
+
+  return \@failedComps;
+}
+
+sub ValidateCompOld {
+  my $self = shift;
+  my $comp = lc(shift);
+  my $ver = shift;
+  my $keepGoing = shift;
+  my $validatesource = shift;
+  my $keeptemp = shift;
+  my $fullbincheck = shift;
+  unless (defined $keepGoing) {
+    $keepGoing = 1;
+  }
+
+  my $status = STATUS_CLEAN;
+  die unless defined $ver;
+
+  my $entry = $self->{db}->{$comp};
+  if (defined $entry and $entry->{status} == STATUS_PENDING_RELEASE) {
+    if ($ver eq $entry->{ver}) { # allow validation against other versions even if we're pending release
+      return STATUS_PENDING_RELEASE;
+    }
+  }
+
+  my $relData = RelData->Open($self->{iniData}, $comp, $ver, $self->{verbose});
+
+  # Always validate binaries
+  # I initially added an option to turn this off, but I decided that was overcomplexity
+  # and I couldn't think of any use cases except tinkering with the release tools...
+  print "Validating binaries $comp $ver...\n";
+  Utils::InitialiseTempDir($self->{iniData});
+  eval {
+    # Get a temporary copy of the released binaries.
+    my $tempDir = Utils::TempDir();
+    $self->UnpackBinaries($comp, $ver, $tempDir, 1); # 1 = overwrite
+
+    # Call evalid to compare these with those installed in the environment.
+    # We now validate everything in the temp dir, not just \epoc32,
+    # because some components release binaries outside \epoc32.
+    my $clean = $self->EvalidateDirectories($tempDir, Utils::PrependEpocRoot('.'), $keepGoing);
+    $status = ($clean)?(STATUS_CLEAN):(STATUS_DIRTY);
+
+    if ($clean and $fullbincheck) {
+      # Ask the current mrp file for a list of binaries (using abld -what)
+      my $mrpData;
+
+      my $mrpPath = $relData->MrpName();
+      if($self->{iniData}->HasMappings() && Utils::SourceRoot() eq "\\") {
+        $mrpPath = $self->{iniData}->PerformMapOnFileName($mrpPath);
+      }
+      else{
+        $mrpPath = Utils::PrependSourceRoot($mrpPath);
+      }
+      if (!-f $mrpPath) {
+        print "Not checking for new binaries; MRP file not present\n";
+      } else {
+        eval {
+          $mrpData = New MrpData($relData->MrpName(), undef, undef, $self->{iniData}, $self->{verbose}); # undef = we're not preprel-ing it
+        };
+
+        if (!defined($mrpData)) {
+          my $error = $@;
+          $error =~ s/\s*$//;
+          print "Not checking for new binaries; $error\n";
+        } else {
+          my @binaries = @{$mrpData->Binaries()};
+          push @binaries, @{$mrpData->Exports()};
+
+          # Get list of binaries in the temporary copy
+          my %oldbinaries;
+
+          my $sub = sub { # Subroutine to add files to %oldbinaries
+            return if -d $_; # Check it's not a directory
+            s/^\Q$tempDir\E[\/\\]?//; # Strip the temp dir path off
+            s/\\/\//g; # Convert backslashes
+            $oldbinaries{lc($_)}=1 unless (/^\.\.?$/) # Add to hash (unless it's .. or .)
+          };
+
+          find( {wanted=>$sub, no_chdir=>1}, $tempDir); # Use no_chdir and s/.../ to get a full relative path. Second s/.../ converts backslashes to normal slashes
+          foreach my $binary (@binaries) {
+            $binary = lc($binary);
+            $binary =~ s/\\/\//g; # Convert backslashes to normal slashes
+            if (exists $oldbinaries{$binary}) {
+              delete $oldbinaries{$binary};
+            } else {
+              print "New binary file: $binary\n";
+              $status = STATUS_DIRTY;
+            }
+          }
+          foreach my $oldbinary (keys(%oldbinaries)) {
+            print "Binary file no longer built: $oldbinary\n";
+	    $status = STATUS_DIRTY;
+          }
+	}
+      }
+    }
+  };
+
+  if ($keeptemp) {
+    print "Old release stored in \"".Utils::TempDir()."\"\n";
+  } else {
+    Utils::RemoveTempDir();
+  }
+  if ($@) {
+    die $@;
+  }
+
+  # We need to check if the categories for exports has changed or not...
+  if ($status == STATUS_CLEAN) {
+    foreach my $thisBinZip (@{$self->RelevantBinaryZips($comp, $ver)}) {
+
+      if($thisBinZip =~ /exports([a-z]).zip/i) {
+        my $catInArchive = $1;
+        # Open and read the corresponding exports category info file in the archive
+        my $catData = CatData->Open($self->{iniData}, $comp, $ver, $catInArchive);
+        my $catWriteInCatDataFile;
+
+        # Obtain the category written the exports category info file, if unable to read skip check
+        eval {
+          $catWriteInCatDataFile = $catData->Category();
+        };
+        if ($@) {
+          last;
+        }
+        # Check the categories match
+        if($catInArchive !~ /^$catWriteInCatDataFile$/i){
+          die "ERROR: Mismatch in category found in exports$catInArchive.txt for $comp $ver\n";
+        }
+
+        my $exportinfo = $catData->ExportInfo();
+        my $destinationDirBuffer;
+
+        # Using the export infomation as read for the exports category info file check the category of the export file.
+        foreach my $export (sort(keys %{$exportinfo})) {
+          my $destinationDir;
+          my $classifySourceFlag = 1; # Classify source using function ClassifySourceFile only if set as 1;
+          my $destination = $catData->ExportSource($export);
+
+          # Consider any mappings if defined
+          if($self->{iniData}->HasMappings()){
+            $destination = $self->{iniData}->PerformMapOnFileName($destination);
+          }
+
+          if(defined $destinationDirBuffer){
+            ($destinationDir) = Utils::SplitFileName($destination);
+
+            if($destinationDirBuffer =~ /^\Q$destinationDir\E$/i){
+              $classifySourceFlag = 0;
+            }
+          }
+
+          my $absolute_path = Utils::PrependSourceRoot($destination);
+
+    	  # validate only if source validation is requested or the source is present
+    	  if($classifySourceFlag and ($validatesource or -e $absolute_path)){
+                # Obtain the category from the source destinaton extracted for the exports category info file
+    	    my ($catInEnv, $errors) = Utils::ClassifyPath($self->{iniData}, $destination, 0, 0, $comp); # verbose = 0 and logErrors = 0
+    	    if ($catInEnv !~ /^$catInArchive$/i){
+                  print "Change in category found (ENV) \"$catInEnv\" : (Archive) \"$catInArchive\" using $thisBinZip for file $export\n";
+    	      $status = STATUS_DIRTY;
+    	      last;
+    	    }
+
+    	    $destinationDirBuffer = Utils::SplitFileName($destination);
+    	  }
+        }
+      }
+    }
+  }
+
+  # We only bother validating source if we've discovered the binaries are clean.
+  # This implies that STATUS_DIRTY means the binaries are dirty, but the status of
+  # the source code is undefined.
+  if ($validatesource && $status == STATUS_CLEAN) {
+    print "Validating source for $comp $ver...\n";
+    Utils::InitialiseTempDir($self->{iniData});
+    eval {
+      # Get a temporary copy of the released source.
+      my $tempDir = Utils::TempDir();
+
+      my $changeInCat = $self->UnpackSource($comp, $ver, $tempDir, 1, 0, 1); # 1 = overwrite, 0 = do not show progress, 1 = validate
+
+      if($changeInCat){
+	print "Change in category found for $comp...\n";
+        $status = STATUS_DIRTY_SOURCE;
+      }
+
+      # The following code is the only place where a component can have its
+      # status set to "dirty source code". This status was added when
+      # the -s switch was added to ValidateEnv/Rel to validate source code.
+      # It would have been simpler to just set a component to 'dirty' when
+      # the source code was dirty, but this was not possible for the following
+      # reason. When envinfo -f gathers the state information of a component
+      # (or, for that matter, some other command checks the environment is clean)
+      # this calls the CheckComp function. This ignores the status stored in
+      # the environment database, and works it out afresh from the timestamps
+      # on the individual files. Hence we needed to add a new status which
+      # CheckComp would propagate through, so it can report the status
+      # on envinfo. (Otherwise we would have to change CheckComp
+      # so it also checked the status of each source code file eacb
+      # time).
+      #
+      # It would be nice here to ensure we have all the source
+      # installed, but I don't think there's a nice way of finding
+      # out the directory that the source comes in. (Not without
+      # unzipping the zip, and we might as well just evalidate it...)
+      #
+      # This grim \. thing is not homage to the Great Geek Website
+      # It is because evalid gets grumpy if you give it either \ or ''
+      # as an argument. The first time is because \\ isn't a valid
+      # directory separator in Win32 (!!) and the second is because
+      # Perl doesn't think '' is a valid directory (which is probably
+      # fair enough). Rather than file a defect against Windows,
+      # let's pass in slightly silly arguments to evalid.
+      if ($status == STATUS_CLEAN) {
+        print "Checking for changed or removed files\n" if ($self->{verbose});
+        my $clean = $self->EvalidateDirectories($tempDir, Utils::PrependSourceRoot('.'), $keepGoing);
+        $status = STATUS_DIRTY_SOURCE unless ($clean);
+      }
+      # The above checks will only have found changed or removed files.
+      # Files that have been added to the source won't be in the $tempDir,
+      # so evalid won't pick them up and test them. So we have to
+      # explicitly check for added files.
+      # Only bother doing this if we haven't found problems already.
+      if ($status == STATUS_CLEAN) {
+        # Recurse through each directory in the temp dir, listing the
+        # equivalent dir on the drive (i.e. the latest source). If there
+        # are more files on the drive than in the source tree, source
+        # is dirty.
+        print "Checking for added files\n" if ($self->{verbose});
+        eval {
+          $status = STATUS_DIRTY_SOURCE if ($self->CheckForAddedFiles($relData, $tempDir));
+        };
+        if ($@) {
+          print "Warning: skipping the check for added files, for the component \"$comp\". All other source code validation checks passed. The reason is: $@";
+        }
+      }
+    };
+    Utils::RemoveTempDir();
+    if ($@) {
+      die $@;
+    }
+  }
+
+  if ($status == STATUS_CLEAN) {
+    # Previously this SetVersion line was wrapped in an "if", so that
+    # it didn't happen if $entry was defined - i.e. it was already in the
+    # environment database. After discussion with Joe and James this behaviour
+    # has been changed.
+    $self->SetVersion($comp, $ver);
+    $self->SetStatus($comp, $status);
+    $self->GenerateSignature($comp, $ver);
+    $self->SetMrpName($comp, $relData->MrpName());
+    $self->SetInternalVersion($comp, $relData->InternalVersion());
+  }
+  elsif ($entry && $entry->{status} &&
+    $entry->{status} == STATUS_PENDING_RELEASE) {
+    # Old status was pending release; so we don't do anything
+  }
+  elsif ($status == STATUS_DIRTY) {
+    if (defined $entry) {
+      # The component used to be in the environment database
+      # We set its status in case it used to be STATUS_DIRTY_SOURCE
+      # and it's now STATUS_DIRTY.
+      $self->SetStatus($comp, $status);
+    }
+    # This component wasn't previously in the environment database;
+    # do nothing
+  }
+  elsif ($status == STATUS_DIRTY_SOURCE) {
+    if (defined $entry) {
+      $self->SetStatus($comp, $status);
+      $self->GenerateSignature($comp, $ver);
+      # Because otherwise any 'envinfo' will reset a component status
+      # to dirty, even if only its source is dirty
+    }
+  }
+  print "Status ", StatusString($status), "\n";
+  return $status;
+}
+
+sub ValidateComp {
+	my $self = shift;
+	my $comp = lc(shift);
+	my $ver = shift;
+	my $keepGoing = shift;
+	my $validatesource = shift;
+	my $keeptemp = shift;
+	my $fullbincheck = shift;
+	unless ( defined $keepGoing ) {
+	  $keepGoing = 1;
+	}
+	my $manifestFromThisComponent = undef;
+	my $status = STATUS_CLEAN;
+	die unless defined $ver;
+
+	my $entry = $self->{db}->{$comp};
+	if (defined $entry and $entry->{status} == STATUS_PENDING_RELEASE) {
+		if ($ver eq $entry->{ver}) { # allow validation against other versions even if we're pending release
+			return STATUS_PENDING_RELEASE;
+		}
+	}
+
+	#Create a relData object for retrieving the mrpPath required for building the manifest object
+	my $relData = RelData->Open( $self->{iniData}, $comp, $ver, $self->{verbose} );
+
+	#Find the archive location for release and build the file path for loading the manifest file from the location
+	my $relDir = $relData->{iniData}->PathData->LocalArchivePathForExistingComponent( $comp, $ver );
+	my $manifestPath = File::Spec->catfile( $relDir, MANIFEST_FILE );
+
+	#Check if manifest file exists
+	if (-e $manifestPath) {
+	#Define callback to validate files which don't have checksum defined in manifest file.
+	my $callback = sub {
+		my $filesToValidate = shift;
+		my $manifestObject = shift;
+		my $keepGoing = shift;
+		{
+			local $" = ", ";
+			print "No checksum found for file(s) @{$filesToValidate} - reverting to old evalid process.\n";
+		}
+		Utils::InitialiseTempDir($self->{iniData});
+		my $tempDir = Utils::TempDir();
+		my $epocFilePath = Utils::EpocRoot();
+		my $sourceFilePath = Utils::SourceRoot();
+		my $fullEvalidName = Utils::FindInPath('evalid.bat');
+		my $clean = 1;
+		my @files;
+		foreach  my $thisFile (@{$filesToValidate}) {
+			my $zipName;
+			my $file;
+			my $fileContentType = $manifestObject->GetFileInfo($thisFile, CONTENT_TYPE);
+			if ($fileContentType  eq 'source' or $fileContentType  eq 'export') {
+				my $cat = $manifestObject->GetFileInfo($thisFile, IPR_CATEGORY);
+				if ($fileContentType eq 'source') {
+					$zipName = "source".$cat;
+					$file = File::Spec->catfile($sourceFilePath, $thisFile) 
+				} else {
+					$zipName = "exports".$cat;
+					$file = File::Spec->catfile($epocFilePath, $thisFile);
+				}
+			}
+			elsif ($fileContentType eq 'binary') {
+				my $platForm = $manifestObject->{files}{$thisFile}{'platform'}; 
+				if (defined $platForm) {
+					$zipName = "binaries"."_".$platForm;
+				}
+				else {
+					$zipName = "binaries";
+				}
+				$file = File::Spec->catfile($epocFilePath, $thisFile);
+			}
+			$zipName = $zipName.".zip";
+			my $zipPath = File::Spec->catfile($relDir,$zipName);  
+			Utils::UnzipSingleFile($zipPath,$thisFile, $tempDir, $self->{verbose}, 1, $comp); #overwrite = 1
+			push @files, [$thisFile, $file];
+		}
+		foreach my $thisFile (@files) {
+			my $firstPath = File::Spec->catfile($tempDir,shift(@$thisFile));
+			my $secondPath = shift(@$thisFile);
+			open EVALID, "$fullEvalidName -c $firstPath $secondPath|" or die "Error: Couldn't run EValid: $!\n";
+			my $thisLine;
+			my $acceptablefailures = ACCEPTABLE_EVALID_FAILURES;
+			while ($thisLine = <EVALID>) {
+				if ($thisLine =~ m/MISSING:|FAILED:|PROBLEM:/ && $thisLine !~ m/$acceptablefailures/i) {
+					print $thisLine  if ($self->{verbose});
+					$clean = 0;
+					unless ($keepGoing) {
+						Utils::RemoveTempDir();
+						return $clean;
+					}
+				}
+			}
+		}
+		Utils::RemoveTempDir();
+		return $clean;
+	};
+
+	#Load the manifest file to create a manifest object
+	my $manifestFromBaselineComponent = Symbian::CBR::Component::Manifest->new( $manifestPath );
+
+	my $mrpPath = Utils::RelativeToAbsolutePath( $relData->MrpName(), $self->{iniData}, SOURCE_RELATIVE );
+
+	if ($fullbincheck && -e $mrpPath) {
+		$manifestFromThisComponent = Symbian::CBR::Component::Manifest->new($mrpPath);
+	} else {
+		if ($fullbincheck) {
+			print "Not checking for new binaries; MRP file not present\n";
+		}
+
+		$manifestFromThisComponent = Symbian::CBR::Component::Manifest->new($manifestPath);
+		$manifestFromThisComponent->RefreshMetaData($comp, $ver);
+	}
+
+	#Compare the manifest objects
+	eval {$status = $manifestFromThisComponent->Compare($manifestFromBaselineComponent, $validatesource, $keepGoing,$callback)};
+
+	#Check if Compare() completed without errors
+	if (!$@) {
+
+		#If $keeptemp set, unpack binaries to temp location
+		if ( $keeptemp ) {
+
+			Utils::InitialiseTempDir($self->{iniData});
+			# Get a temporary copy of the released binaries.
+			my $tempDir = Utils::TempDir();
+			$self->UnpackBinaries($comp, $ver, $tempDir, 1); # 1 = overwrite
+
+			#If $validatesource is set, get temp copy of released sources
+			$self->UnpackSource($comp, $ver, $tempDir, 1, 0, 1) if $validatesource;
+
+			print "Old release stored in \"".Utils::TempDir()."\"\n";
+		}
+
+		#If status is dirty, save manifest to temp location
+		$self->SaveManifestToTempDir($comp, $manifestFromThisComponent) if $status == STATUS_DIRTY;
+
+		#Update the environemnt as done by validatecompold
+		$self->UpdateEnvironment( $status, $entry, $relData );
+
+		print "Status ", StatusString($status), "\n";
+		return $status;
+	}
+
+	else {
+		print "$@Continuing with old validaterel process..\n";
+	}
+
+	}
+	else {
+		print "Manifest file does not exist in the version $ver for component $comp..\nContinuing with old validaterel process..\n";
+	}
+
+	#Call the old validaterel process if manifest comparison is not possible
+	$status = $self->ValidateCompOld( $comp, $ver, $keepGoing, $validatesource, $keeptemp, $fullbincheck );
+
+	#If status is dirty during validatecompold, still we want to save manifest to temp location
+	if ( defined $manifestFromThisComponent and ($status == STATUS_DIRTY or $status == STATUS_DIRTY_SOURCE) ) {
+		$self->SaveManifestToTempDir($comp, $manifestFromThisComponent);
+	}
+
+	return $status;
+}
+
+sub UpdateEnvironment {
+	my $self = shift;
+	my $status = shift;
+	my $entry = shift;
+	my $relData = shift;
+
+	my $comp = $relData->Component();
+	my $ver = $relData->Version();
+
+	if ($status == STATUS_CLEAN) {
+		# Previously this SetVersion line was wrapped in an "if", so that
+		# it didn't happen if $entry was defined - i.e. it was already in the
+		# environment database. After discussion with Joe and James this behaviour
+		# has been changed.
+		$self->SetVersion( $comp, $ver );
+		$self->SetStatus( $comp, $status );
+		$self->GenerateSignature( $comp, $ver );
+		$self->SetMrpName( $comp, $relData->MrpName() );
+		$self->SetInternalVersion( $comp, $relData->InternalVersion() );
+	}
+	elsif ($entry && $entry->{status} &&
+		$entry->{status} == STATUS_PENDING_RELEASE) {
+		# Old status was pending release; so we don't do anything
+	}
+	elsif ($status == STATUS_DIRTY) {
+		if (defined $entry) {
+			# The component used to be in the environment database
+			# We set its status in case it used to be STATUS_DIRTY_SOURCE
+			# and it's now STATUS_DIRTY.
+			$self->SetStatus( $comp, $status );
+		}
+		# This component wasn't previously in the environment database;
+		# do nothing
+	}
+	elsif ($status == STATUS_DIRTY_SOURCE) {
+		if (defined $entry) {
+			$self->SetStatus( $comp, $status );
+			$self->GenerateSignature( $comp, $ver );
+			# Because otherwise any 'envinfo' will reset a component status
+			# to dirty, even if only its source is dirty
+		}
+	}
+}
+
+sub SaveManifestToTempDir {
+	my $self = shift;
+	my $comp = shift;
+	my $manifestFromThisComponent = shift;
+
+	my $manifestTempFile = "manifest_".$comp.".xml";
+	my $manifestFile = $manifestFromThisComponent->Save( File::Spec->tmpdir(), $manifestTempFile );
+#	my $manifestTempFile = File::Spec->catfile( File::Spec->tmpdir(), "manifest_".$comp.".xml" );
+#	rename( $manifestFile, $manifestTempFile );
+}
+
+sub Duplicates {
+  my $self = shift;
+  my $mrpData = shift;
+  my $installedComps = $self->VersionInfo();
+  my %binHash;
+  my @duplicates;
+
+  # First cross-check against the components about to be released.
+  foreach my $thisMrp (@{$mrpData}) {
+    my $comp = lc($thisMrp->Component());
+    my $bins = $thisMrp->BinariesAndExports();
+    foreach my $thisBin (@$bins) {
+      $thisBin = lc(Utils::PrependEpocRoot($thisBin));
+
+      print "Checking $thisBin for duplicateness (pending release)\n" if ($self->{verbose}>1);
+      if (exists $binHash{$thisBin}) {
+ 	push @duplicates, [$thisBin, $comp, $binHash{$thisBin}]; # $comp attempting to release $thisBin which has already been released by $binHash{$thisBin}";
+      }
+      else {
+	$binHash{$thisBin} = $comp;
+      }
+    }
+    delete $installedComps->{$comp};
+  }
+
+  # Now cross-check against the other components in the environment.
+  foreach my $thisComp (keys %{$installedComps}) {
+    my $doCheck = sub {
+      my $file = lc(shift);
+      print "Checking $file for duplicateness\n" if ($self->{verbose}>1);
+      if (exists $binHash{$file}) {
+	push @duplicates, [$file, $binHash{$file}, $thisComp]; #"$binHash{$file} attempting to release $file which has already been released by $thisComp";
+      }
+      else {
+	$binHash{$file} = $thisComp;
+      }
+    };
+    my $sigName = SignatureName($thisComp, $installedComps->{$thisComp});
+    ExecuteSignature($sigName, $doCheck);
+  }
+
+  return \@duplicates;
+}
+
+sub BinaryInfo {
+  my $self = shift;
+  my $binary = shift;
+  unless (-e $binary) {
+    die "Error: \"$binary\" does not exist\n";
+  }
+
+  (my $currentMTime, my $currentSize) = Utils::FileModifiedTimeAndSize($binary);
+  my $sigMTime;
+  my $sigSize;
+  my $sigName;
+
+  my $findBin = sub {
+    my $file = shift;
+    if (lc($binary) eq lc($file)) {
+      $sigMTime = shift;
+      $sigSize = shift;
+      $sigName = shift;
+      return 0;
+    }
+    return 1; # Means continue;
+  };
+  ExecuteAllSignatures($findBin);
+
+  my $comp;
+  my $ver;
+  my $pendingRelease = 0;
+
+  if (defined $sigMTime and defined $sigName) {
+    ($comp, $ver) = $self->DecodeSignatureName($sigName);
+  }
+  else {
+    # Binary not found in the signatures, so check for components pending release.
+    if (Utils::WithinEpocRoot($binary)) {
+	      $binary = Utils::RemoveEpocRoot($binary); # remove EPOCROOT
+    }
+    $binary =~ s!^[\\\/]!!; # remove leading slash
+
+    foreach my $thisComp (keys %{$self->{db}}) {
+      if ($self->Status($thisComp) == STATUS_PENDING_RELEASE) {
+        my $thisVer = $self->{db}->{$thisComp}->{ver};
+        my $thisMrpData = $self->GetMrpData($thisComp);
+        $thisMrpData->EnsureDoesNotExist();
+
+        if (grep /^\Q$binary\E$/i, @{$thisMrpData->Binaries()}) {
+          $pendingRelease = 1;
+          $comp = $thisComp;
+          $ver = $thisVer;
+          last;
+        }
+        elsif (grep /^\Q$binary\E$/i, @{$thisMrpData->Exports()}) {
+          $pendingRelease = 1;
+          $comp = $thisComp;
+          $ver = $thisVer;
+          last;
+        }
+      }
+    }
+    unless (defined $comp and defined $ver) {
+      my $ignoreList = $self->{iniData}->BinariesToIgnore();
+      push (@$ignoreList, Utils::PrependEpocRoot('\\epoc32\\relinfo\\*'));
+      foreach my $ignore (@$ignoreList) {
+      $ignore =~ s/\\/\\\\/g;
+      $ignore =~ s/\./\\\./g;
+      $ignore =~ s/\*/\.\*/g;
+
+      if ($binary !~ /^\\/) {
+        $ignore =~ s/^\\*//;
+      }
+
+      if ($binary =~ /^$ignore$/i) {
+        die "Error: no information available for \"$binary\". It is not part of any component, but it is ignored by the 'ignore_binary' rule '$ignore'. This rule might be in your reltools.ini, or it might be one of the standard ignores.\n";
+      }
+      }
+      die "Error: No information available for \"$binary\". It's not even one of the files/directories that are ignored as standard.\n";
+    }
+  }
+
+  my $info;
+  push (@$info, ['Component:', $comp]);
+  push (@$info, ['Version:', $ver]);
+  if ($pendingRelease) {
+    push (@$info, ['Status:', 'pending release']);
+  }
+  elsif ($currentMTime == $sigMTime and $currentSize == $sigSize) {
+    push (@$info, ['Status:', 'clean']);
+  }
+  else {
+    push (@$info, ['Status:', 'dirty']);
+  }
+
+  return $info;
+}
+
+sub ListBins {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = $self->Version($comp);
+  die unless $ver;
+
+  if ($self->Status($comp) == STATUS_PENDING_RELEASE) {
+    $self->ListBinsPendingRelease($comp, $ver);
+  } else {
+    $self->ListBinsStandard($comp, $ver);
+  }
+}
+
+sub GetMrpData {
+  my $self = shift;
+  my $compname = lc(shift);
+  my $entry = $self->{db}->{$compname};
+  die "Invalid component name \"$compname\"" unless $entry;
+
+  my $name = $entry->{mrpName};
+  unless ($self->{mrpcache}->{$name}) {
+    my $mrpData = MrpData->New($entry->{mrpName}, $entry->{ver}, $entry->{intVer}, $self->{iniData}, $self->{verbose});
+    my $namefrommrp = $mrpData->Component();
+    die "Error: Component name in MRP file is \"$namefrommrp\" whilst the name of this component in the environment database is \"$compname\".\n" unless (lc $compname eq lc $namefrommrp);
+    $self->{mrpcache}->{$name} = $mrpData;
+  }
+  return $self->{mrpcache}->{$name};
+}
+
+
+sub GetMRPLocations {
+  my $self = shift;
+  my $componentName = lc(shift);
+  
+  # If only the MRP location for a specified component is required...
+  if ($componentName) {
+    if (exists $self->{db}->{$componentName}) {
+      return (Utils::PrependSourceRoot($self->{db}->{$componentName}->{mrpName}));
+    }
+    else {
+      return undef;
+    }
+  }
+
+  # Otherwise all MRP locations are returned to the caller
+  my @mrpLocations;
+  
+  foreach my $component (keys %{$self->{db}}) {
+    push @mrpLocations, Utils::PrependSourceRoot($self->{db}->{$component}->{mrpName});
+  }
+  
+  return @mrpLocations;  
+}
+
+#
+# Private.
+#
+
+sub ListBinsStandard {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+
+  my $info;
+  push (@$info, ['File', 'Status']);
+
+  my $sigName = SignatureName($comp, $ver);
+  my $gatherInfo = sub {
+    my $file = shift;
+    my $sigMTime = shift;
+    my $sigSize = shift;
+
+    if (-e $file) {
+      (my $actualMTime, my $actualSize) = Utils::FileModifiedTimeAndSize($file);
+      if (!defined $actualMTime or !defined $actualSize) {
+	die "Error: Problem stating \"$file\"\n";
+      }
+      elsif ($sigMTime != $actualMTime or $sigSize != $actualSize) {
+	push (@$info, [$file, STATUS_STRING_FAILED]);
+      }
+      else {
+	push (@$info, [$file, STATUS_STRING_PASSED]);
+      }
+    }
+    else {
+      push (@$info, [$file, STATUS_STRING_MISSING]);
+    }
+
+    return 1; # Means continue with next line in signature.
+  };
+
+  ExecuteSignature($sigName, $gatherInfo);
+  return $info;
+}
+
+sub ListBinsPendingRelease {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+
+  my $mrpData = $self->GetMrpData($comp);
+
+  my @info;
+  push @info, ['File', 'Status', 'Category'];
+  foreach my $cat (@{$mrpData->BinaryCategories()}) {
+    foreach my $file (@{$mrpData->Binaries($cat)}) {
+      push @info, [$file, 'pending release', $cat];
+    }
+  }
+  foreach my $cat (@{$mrpData->ExportCategories()}) {
+    foreach my $file (@{$mrpData->Exports($cat)}) {
+      push @info, [$file, 'pending release', $cat];
+    }
+  }
+  # To do ideally: add another column to report which bld.inf each binary
+  # comes from (if any). This requires quite a lot of internal restructuring
+  # of MrpData.pm so will probably never happen... It's not worth the benefits.
+  return \@info;
+}
+
+sub DESTROY {
+  my $self = shift;
+  $self->Close();
+}
+
+sub EvalidateDirectories {
+  my $self = shift;
+  my $firstdirectory = shift;
+  my $seconddirectory = shift;
+  my $keepGoing = shift;
+
+  my $clean = 1;
+  my $fullEvalidName = Utils::FindInPath('evalid.bat');
+
+  # Call evalid to compare these with those installed in the environment.
+  if ($self->{verbose} > 1) {
+    print "Evalid command is $fullEvalidName -c $firstdirectory $seconddirectory\n";
+  }
+  open EVALID, "$fullEvalidName -c $firstdirectory $seconddirectory|" or die "Error: Couldn't run EValid: $!\n";
+  my $thisLine;
+  while ($thisLine = <EVALID>) {
+    my $acceptablefailures = ACCEPTABLE_EVALID_FAILURES;
+    if ($thisLine =~ m/MISSING:|FAILED:|PROBLEM:/ && $thisLine !~ m/$acceptablefailures/i) {
+      if ($self->{verbose}) { print $thisLine; }
+      $clean = 0;
+      unless ($keepGoing) {
+        last;
+      }
+    }
+    elsif ($self->{verbose} > 1) {
+      print $thisLine;
+    }
+  }
+  close EVALID;
+
+  return $clean;
+}
+
+sub ScanEnv {
+  my $self = shift;
+  my $displayProgress = shift;
+  my $progressTuner = 0;
+
+  my $processFileSub = sub {
+    if ($displayProgress) {
+      ++$progressTuner;
+      if ($progressTuner >= SCAN_PROGRESS_TUNER) {
+        $progressTuner = 0;
+        select STDOUT; $|=1;
+        print ".";
+      }
+    }
+    my $thisFile = lc($File::Find::name);
+    Utils::TidyFileName(\$thisFile);
+    if (-f $thisFile) {
+      $self->{envFileList}->{$thisFile} = 1;
+    }
+    elsif (-d $thisFile and $self->CheckIgnoreDir($thisFile)) {
+      $File::Find::prune = 1;
+    }
+    elsif (-d $thisFile && !@{Utils::ReadDir($thisFile)}) {
+      # This is an empty directory.  It is not possible to own empty directories,
+      #so this will be included in the unowned list
+      $self->{envFileList}->{$thisFile} = 1;
+    }
+  };
+
+  my $cwd = cwd();
+  $cwd =~ s/:$/:\\/; # Needed because if at root, cwd() just returns drive_letter:
+  find($processFileSub, Utils::PrependEpocRoot('\\epoc32'));
+  chdir ($cwd);
+  if ($displayProgress and $self->{verbose}) {
+    print "\n";
+  }
+}
+
+sub CheckIgnoreDir {
+  my $self = shift;
+  my $dir = shift;
+  if (exists $self->{ignoreDirs}->{$dir}) {
+    return 1;
+  }
+  return 0;
+}
+
+# Classify the ignores according to whether they correspond to directories or files. This allows the
+# File::Find scan to prune directories to be ignored efficiently.
+sub InitIgnores {
+  my $self = shift;
+  my $ignoreStandardIgnores = shift;
+  my $ignoreList;
+  unless ($ignoreStandardIgnores) {
+    $ignoreList = $self->{iniData}->BinariesToIgnore();
+  }
+  push (@$ignoreList, '\\epoc32\\relinfo\\*'); # Need to always ignore \epoc32\relinfo since this contains the environment database.
+
+  foreach my $thisIgnore (@$ignoreList) {
+    if ($thisIgnore =~ /(.*)\\\*$/) {
+      my $dir = $1;
+      Utils::TidyFileName(\$dir);
+      $self->{ignoreDirs}->{lc(Utils::PrependEpocRoot($dir))} = 1;  # Store dirs in a hash so they can be looked up fast.
+    }
+    else {
+      push (@{$self->{ignoreFiles}}, Utils::PrependEpocRoot($thisIgnore));
+    }
+  }
+}
+
+sub CheckFileAgainstEnvScan {
+  my $self = shift;
+  my $file = lc(shift);
+  my $ok = 1;
+
+  if (exists $self->{envFileList}) {
+    if (exists $self->{envFileList}->{$file}) {
+      # Exists, so remove from envFileList hash - any file names left in here at the end will be reported to the user.
+      delete $self->{envFileList}->{$file};
+    }
+    else {
+      $ok = 0;
+    }
+  }
+  elsif (not -e $file) {
+    $ok = 0;
+  }
+  return $ok;
+}
+
+sub RemoveBinsToIgnore {
+  my $self = shift;
+  foreach my $thisIgnore (@{$self->{ignoreFiles}}) {
+    $thisIgnore =~ s/\\/\\\\/g;
+    $thisIgnore =~ s/\./\\\./g;
+    $thisIgnore =~ s/\*/\.\*/g;
+    foreach my $thisFile (keys %{$self->{envFileList}}) {
+      if ($thisFile =~ /$thisIgnore/i) {
+	delete $self->{envFileList}->{$thisFile};
+      }
+    }
+  }
+}
+
+sub UnaccountedEnvFiles {
+  my $self = shift;
+  my @unaccountedFiles = sort keys %{$self->{envFileList}};
+  return \@unaccountedFiles;
+}
+
+sub DeleteSignature {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  
+  if ($self->{verbose} > 1) { print "Deleting signature file for $comp $ver\n"; }
+  my $sigName = SignatureName($comp, $ver);
+  unlink ($sigName) or print "Warning: Couldn't delete $sigName: $!\n";
+}
+
+sub ExecuteAllSignatures {
+  my $sub = shift;
+
+  opendir(DIR, Utils::PrependEpocRoot("\\epoc32\\relinfo")) or die "Error: Couldn't open directory \"" . Utils::PrependEpocRoot("\\epoc32\\relinfo") . "\": $!\n";
+  while (defined(my $file = readdir(DIR))) {
+    if ($file =~ /\.sig$/) {
+      my $continue = ExecuteSignature(Utils::PrependEpocRoot("\\epoc32\\relinfo\\$file"), $sub);
+      unless ($continue) {
+	last;
+      }
+    }
+  }
+  closedir(DIR);
+}
+
+sub ExecuteSignature {
+# For each line in the signature file, parse and call the given subroutine with the parsed variables.
+
+  my $sigName = shift;
+  my $filessub = shift;
+  my $directoriesSub = shift;
+
+  my %directories;
+
+  my $continue = 1;
+  open (SIG, $sigName) or die "Couldn't open $sigName for reading: $!\n";
+  while (my $line = <SIG>) {
+    # Parse signature line.
+    (my $file, my $mTime, my $size) = split (/\t/, $line);
+    unless (defined $file and defined $mTime and defined $size) {
+      die "Error: Invalid line in signature file $sigName\n";
+    }
+    $directories{dirname($file)} = 1;
+    # Call subroutine.
+    $continue = &$filessub(Utils::PrependEpocRoot($file), $mTime, $size, $sigName);
+    unless ($continue) {
+      last;
+    }
+  }
+  close (SIG);
+
+  if ($directoriesSub) {
+    foreach my $directory (sort keys %directories) {
+      &$directoriesSub(Utils::PrependEpocRoot($directory), $sigName);
+    }
+  }
+
+  return $continue;
+}
+
+sub DeleteFilesInSignature {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $sigName = SignatureName($comp, $ver);
+  my $filesDeletionSub = sub {
+    my $file = shift;
+    if (-e $file) {
+      if ($self->{verbose} > 1) { print "Deleting \"$file\"...\n"; }
+      unlink ($file) or die "Error: Couldn't delete \"$file\": $!\n";
+    }
+    return 1;
+  };
+  my $directoriesDeletionSub = sub {
+    my $directory = shift;
+
+    if (-e $directory && !scalar @{Utils::ReadDir($directory)} ) {
+      print "Removing directory $directory...\n" if ($self->{verbose});
+      rmdir $directory or die "Error: Could not remove directory $directory: $!\n";
+      while (($directory = dirname($directory)) && -e $directory && !scalar @{Utils::ReadDir($directory)}) {
+        print "Removing directory $directory...\n" if ($self->{verbose});
+        rmdir $directory or die "Error: Could not remove directory $directory: $!\n";
+      }
+    }
+  };
+
+  ExecuteSignature($sigName, $filesDeletionSub, $directoriesDeletionSub);
+}
+
+sub InstallComponent {
+  my $self = shift;
+  my $comp = lc(shift);
+  my $ver = shift;
+  my $overwrite = shift;
+
+  my $relData = RelData->Open($self->{iniData}, $comp, $ver, $self->{verbose});
+  $relData->WarnIfReleaseTooNew();
+  $self->UnpackBinaries($comp, $ver, Utils::EpocRoot(), $overwrite);
+  $self->GenerateSignature($comp, $ver);
+  $self->SetVersion($comp, $ver);
+  $self->SetMrpName($comp, $relData->MrpName());
+  $self->SetInternalVersion($comp, $relData->InternalVersion());
+  $self->SetStatus($comp, STATUS_CLEAN);
+}
+
+sub UnpackBinaries {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $where = shift;
+  my $overwrite = (shift || $self->{overwrite});
+  foreach my $thisBinZip (@{$self->RelevantBinaryZips($comp, $ver)}) {
+    $overwrite = Utils::Unzip($thisBinZip, $where, $self->{verbose}, $overwrite);
+  }
+  
+  $self->{overwrite} = $overwrite;
+}
+
+sub RelevantBinaryZips {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  $self->PathData()->CheckReleaseExists($comp, $ver);
+
+  my $requiredBinaries = $self->{iniData}->RequiredBinaries($comp);
+  my $relDir = $self->PathData->LocalArchivePathForExistingOrNewComponent($comp, $ver);
+  my @relevantBinaries = ();
+  foreach my $thisRelFile (@{Utils::ReadDir($relDir)}) {
+    if ($thisRelFile eq 'binaries.zip') {
+      push (@relevantBinaries, "$relDir\\$thisRelFile");
+      next;
+    }
+    if ($thisRelFile =~ /^binaries_(.*)\.zip$/) {
+      my $category = $1;
+      if ($requiredBinaries) {
+	foreach my $requiredBinary (@$requiredBinaries) {
+	  if (($category =~ /^$requiredBinary\_/) || ($category eq $requiredBinary)) {
+	    push (@relevantBinaries, "$relDir\\$thisRelFile");
+	    last;
+	  }
+	}
+      }
+      else {
+	push (@relevantBinaries, "$relDir\\$thisRelFile");
+      }
+    }
+    elsif ($thisRelFile =~ /^exports[a-z].zip$/i) {
+      push (@relevantBinaries, "$relDir\\$thisRelFile");
+    }
+  }
+  return \@relevantBinaries;
+}
+
+sub UnpackSource {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $where = shift;
+  my $overwrite = shift;
+  my $skipinstall = 0;
+  unless (defined $overwrite) {
+    $overwrite = 0;
+  }
+  my $showProgress = shift;
+  unless (defined $showProgress) {
+    $showProgress = 0;
+  }
+  my $toValidate = shift;
+  unless (defined $toValidate) {
+    $toValidate = 0;
+  }
+
+  my $changeInCat = 0;
+
+  $self->PathData()->CheckReleaseExists($comp, $ver);
+
+  if ($where eq "\\") {
+    $where = Utils::SourceRoot();
+  }
+
+  # Unpack all categories of source code that are available.
+  my $relDir = $self->PathData->LocalArchivePathForExistingOrNewComponent($comp, $ver);
+
+  opendir(RELDIR, $relDir) or die "Error: can't opendir $relDir\n";
+  my @srcZipNames = grep {/source[a-z]\.zip/i} map {"$relDir\\$_"} readdir(RELDIR);
+  close RELDIR;
+
+  if ($self->{verbose} and scalar(@srcZipNames) == 0) {
+    print "No source available for $comp $ver\n";
+  }
+  else {
+    unless ($overwrite) {
+      my $checkFailed = 0;
+      foreach my $thisSrcZip (@srcZipNames) {
+        if (Utils::CheckZipFileContentsNotPresent($thisSrcZip, $where, $self->{iniData})) {
+          $checkFailed = 1;
+        }
+      }
+      if ($checkFailed) {
+        warn "Warning: Above errors found, skipping the unpacking of $comp zips...\n";
+        $skipinstall = 1;
+      }
+    }
+
+    unless($skipinstall){
+      foreach my $thisSrcZip (@srcZipNames) {
+        if ($showProgress) {
+          my $significantDir = Utils::SignificantZipDir($thisSrcZip);
+          my $unzipDir  = Utils::ConcatenateDirNames($where, $significantDir);
+
+          if($self->{iniData}->HasMappings()){
+            $unzipDir = $self->{iniData}->PerformMapOnFileName($unzipDir);
+          }
+
+          print "\tUnpacking \"$thisSrcZip\" into \"$unzipDir\"...\n";
+        }
+
+        $changeInCat = Utils::UnzipSource($thisSrcZip, $where, $self->{verbose}, $overwrite, $self->{iniData}, $toValidate, $comp);
+        if($changeInCat==1 && $toValidate ==1) {
+          last;
+	}
+      }
+    }
+  }
+
+  return $changeInCat; # 1 = change in cat found, 0 = change in cat not found. Return value only used for validation.
+}
+
+sub SignatureName {
+  my $comp = shift;
+  my $ver = shift;
+  croak unless defined $ver;
+  return Utils::PrependEpocRoot("\\epoc32\\relinfo\\$comp.$ver.sig");
+}
+
+sub DecodeSignatureName {
+  my $self = shift;
+  my $sigName = shift;
+  my $comp;
+  my $ver;
+  my $name = $sigName;
+  $name =~ s/.*\\epoc32\\relinfo\\(.*)\.sig/$1/;
+  foreach my $thisComp (keys %{$self->{db}}) {
+    my $thisVer = $self->{db}->{$thisComp}->{ver};
+    if ("$thisComp.$thisVer" eq $name) {
+      $comp = $thisComp;
+      $ver = $thisVer;
+    }
+  }
+
+  unless (defined $comp and defined $ver) {
+    die "Error: Couldn't decode signature name \"$sigName\"\n";
+  }
+
+  return ($comp, $ver);
+}
+
+sub ComponentDir {
+  require Carp;
+  Carp->import;
+  confess ("Obsolete method called");
+}
+
+sub ReleaseDir {
+  require Carp;
+  Carp->import;
+  confess ("Obsolete method called");
+}
+
+sub PathData {
+  my $self = shift;
+  return $self->{iniData}->PathData();
+}
+
+sub CheckForAddedFiles {
+  my $self = shift;
+  my $reldata = shift;
+  my $tempdir = shift;
+
+  # Here we have been asked to search for files that exist in the real source directory,
+  # but don't exist in the temporary source directory.
+
+  my $foundextra = 0; # let's hope this stays zero
+  foreach my $item (keys %{$reldata->SourceItems}) {
+    $item = Utils::PrependSourceRoot($item);
+    next unless -d $item; # we're only checking for added files, so we don't care unless this
+                          # is a directory in which there ought to be files.
+
+    print "Looking for added files inside \"$item\"\n" if ($self->{verbose});
+    # Ah, the lovely Find::File
+    find(sub {
+      my $tempfile = Utils::ConcatenateDirNames($tempdir, Utils::RemoveSourceRoot($File::Find::name));
+      # Be careful with that line - an extra \\ anywhere and it breaks, such is DOS...
+
+      print "Checking existence of \"$tempfile\"\n" if ($self->{verbose}>1);
+      unless (-e $tempfile) {
+        print "\"$File::Find::name\" only exists in new source code.\n" if ($self->{verbose});
+        $foundextra++;
+        $File::Find::prune = 1 unless ($self->{verbose}); # skip some of the rest
+      }
+    }, $item);
+
+    return $foundextra if ($foundextra && !$self->{verbose});
+        # don't bother scanning other directories unless it's verbose
+  }
+    return $foundextra;
+}
+
+sub GetReleaseSize {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  $self->{relsize}->{$comp}->{$ver} = $self->AddUpReleaseSize($comp, $ver) unless defined $self->{relsize}->{$comp}->{$ver};
+  return $self->{relsize}->{$comp}->{$ver};
+}
+
+sub AddUpReleaseSize {
+  my $self = shift;
+  my $comp = shift;
+  my $version = shift;
+  my $pathdata = $self->{iniData}->PathData();
+  my $path = $pathdata->LocalArchivePathForExistingComponent($comp, $version);
+  die "Component $comp $version didn't exist\n" unless $path;
+  opendir(DIR, $path) or die "Couldn't open directory \"$path\" because $!";
+  my @entries = grep { ! m/^\./ } readdir(DIR);
+  closedir DIR;
+  my $size = 0;
+  print "Adding up size of $comp $version\n" if ($self->{verbose});
+  foreach my $file (@entries) {
+    my $full = $path . "\\" . $file;
+    $size += -s $full;
+  }
+  return $size;
+}
+
+sub GetEnvironmentSize {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $deltasize = shift;
+  $self->{envsize}->{$comp}->{$ver} = $self->AddUpEnvSize($comp, $ver, $deltasize) if (!exists $self->{envsize}->{$comp}->{$ver});
+  return $self->{envsize}->{$comp}->{$ver};
+}
+
+sub AddUpEnvSize {
+  my $self = shift;
+  my $maincomp = shift;
+  my $mainver = shift;
+  my $deltasize = shift;
+  my $relData = RelData->Open($self->{iniData}, $maincomp, $mainver, $self->{verbose});
+  die "Component $maincomp version $mainver didn't exist\n" unless $relData;
+  my $compsToValidate = $relData->Environment();
+  my $size = 0;
+  while ((my $comp, my $ver) = each %$compsToValidate) {
+    # If a delta size is requested and the component version does not
+    # match the main component version then don't increment the size
+    next if ($deltasize && ($mainver ne $ver));
+    
+    $size += $self->GetReleaseSize($comp, $ver);
+  }
+  return $size;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+EnvDb.pm - A database to keep track of component versions installed on a development drive.
+
+=head1 DESCRIPTION
+
+The database is implemented as a tied hash. It provides a persistent store of component / version pairs. Also provides facilities for checking and validating the contents of an environemnt.
+
+Each component has a status associated with it. The possible values are as follows:
+
+=over 4
+
+=item C<STATUS_CLEAN>: the binaries on disk match those in the release packet
+
+=item C<STATUS_DIRTY>: the binaries on disk don't appear to match those in the release packet
+
+=item C<STATUS_DIRTY_SOURCE>: the binaries match, but the source code doesn't
+
+=item C<STATUS_PENDING_RELEASE>: the component has been set to 'pending release'
+
+=back
+
+=head1 INTERFACE
+
+=head2 Object Management
+
+=head3 Open
+
+Expects to be passed an C<IniData> reference and a verbosity level. Opens the C<EnvDb> on the current drive. If not already present, an empty databse is created. This must be done before any of the following interfaces are used.
+
+=head3 Close
+
+Closes the database file.
+
+=head2 Data Management
+
+=head3 Version
+
+Expects to be passed a component name. Returns the version of the component that is currently installed. Returns undef if there is no version currently installed.
+
+=head3 VersionInfo
+
+Returns a reference to an in memory hash containing component component name / version pairs for every entry in the database.
+
+=head3 SetVersion
+
+Expects to be passed a component name and a optionally a version. If the version is specified, a database entry for the component is created, or, if it is already present, updated. If the version is not specified, and a database entry for the component entry exists, it is deleted.
+
+=head3 InternalVersion
+
+Expects to be passed a component name. Returns the internal version of the component that is currently installed. Returns undef if the component is not currently installed.
+
+=head3 SetInternalVersion
+
+Expects to be passed a component name and an internal version. Dies if an entry for the component is not already present in the database. Store the component's internal version.
+
+=head3 Status
+
+Expects to be passed a component name. Dies if an entry for the component is not already present in the database. Returns the component's last recorded status (which may be C<STATUS_CLEAN>, C<STATUS_DIRTY> or C<STATUS_PENDING_RELEASE>).
+
+=head3 SetStatus
+
+Expects to be passed a component name and a status integer. Dies if an entry for the component is not already present in the database. Updates the component's database entry with the new status.
+
+=head3 MrpName
+
+Expects to be passed a component name. Dies if an entry for the component is not already present in the database. Returns the corresponding F<mrp> name.
+
+=head3 SetMrpName
+
+Expects to be passed a component name and an F<mrp> name. Dies if an entry for the component is not already present in the database. Stores of the F<mrp> name of the component.
+
+=head3 ComponentsPendingRelease
+
+Returns a reference to a hash of hash references. The primary hash key is component name. The secondary hashes each containing details a component that is pending release. The secondary hashes contain the following keys:
+
+ mrpName
+ ver
+ intVer
+
+=head3 BinaryInfo
+
+Expects to be passed the name of a binary file. Searches for this file name within the component signatures. If it is not found there, then checks for components that are pending release. C<MrpData> objects are then created for each of these to see if the binary file is about to be released. Dies if the file is still not found. Otherwise, returns a two dimentional array containing the component name, verion and current file status.
+
+=head3 ListBins
+
+Expects to be passed a component name. Returns a 2D array containing all the file names owned by component and their current status. These facts will be in the first and second column; subsequent columns may hold further information. The table contains a header row describing what each column is.
+
+=head2 Environment Scans
+
+=head3 CheckEnv
+
+Performs a scan of the F<\epoc32> tree building a hash of all file names. Calls C<CheckComp> for all the components installed on the drive. C<CheckComp> will remove files that pass the check from the F<\epoc32> tree hash. Any file names left in the hash after all components have been checked will be printed to warn the user, since their origin is unknown to the release tools. The F<reltools.ini> keyword C<ignore_binary> my be used to specify (using file names with DOS style wild characters) binary files to be ignored in the checking process. As standard, the following are ignored:
+
+ \epoc32\relinfo\*
+ \epoc32\build\*
+ \epoc32\wins\c\*
+ \epoc32\release\*.ilk
+ \epoc32\release\*.bsc
+ \epoc32\data\emulator\epoc.sys.ini
+
+Returns the overall status of the environement after the check (which may be of value C<STATUS_CLEAN>, C<STATUS_DIRTY> or C<STATUS_PENDING_RELEASE>), a reference to a list of C<MrpData> objects that are pending release, a reference to a list of component that failed their check, and a reference to a list of unaccounted files.
+
+=head3 CheckComp
+
+Expects to be passed a component name and optionally a scalar flag indicating if the check should continue after the first failure is found (true means continue). Details of any files that fail their check will be printed. Returns the status of the component after the check (which may be of value C<STATUS_CLEAN>, C<STATUS_DIRTY>, C<STATUS_DIRTY_SOURCE> or C<STATUS_PENDING_RELEASE>), and a reference to an C<MrpData> object if the status is C<STATUS_PENDING_RELEASE>.
+
+CheckComp does not check the source code files. In fact, if it determines the binaries match, then it returns either C<STATUS_CLEAN> or C<STATUS_DIRTY_SOURCE> depending on what the environment database says. A component will only ever attain the status of C<STATUS_DIRTY_SOURCE> through the operation of ValidateComp: effectively CheckComp just passes that information through, if the component otherwise appears clean.
+
+=head3 ValidateEnv
+
+Calls C<ValidateComp> for all the components installed on the drive that don't have a status of I<pending release>. Returns a reference to a list of components names that failed. May optionally be passed a component name and version of an external environment against which to validate. This mode may only be used when the current environment database is empty. It causes a complete set of database entries to be written corresponding to the external environment. However, a dummy signature file will be generated for components that fail their validation which contains the names of the binaries released in the external environment, but zero last modified times and sizes. This is to ensure that C<CheckEnv> continues to report these components as C<STATUS_DIRTY>.
+
+=head3 ValidateComp
+
+Expects to be passed a component name, a version and optionally two scalar flags indicating:
+
+=over 4
+
+=item whether validation should continue after the first failure is found (true means continue)
+
+=item whether source code should be validated
+
+=back
+
+Makes use of Manifest.pm and constructs manifest object of the current environment using the mrp file for the components and another manifest object using the manifest file available in the archive location of the previous release for the component. These objects are compared for their similarity and shall return STATUS_CLEAN if everything validates OK and returns STATUS_DIRTY otherwise.
+
+If for some reasons, validation through manifest objects is not possible, then the call is transferred to the old process of validation described herewith as follows:
+
+The process returns the overall status of the release, which is C<STATUS_DIRTY> if there are dirty binaries, C<STATUS_DIRTY_SOURCE> if the binaries are clean but there is dirty source code, or C<CLEAN> if everything validates OK. C<STATUS_DIRTY_SOURCE> will only ever be set if source code validation is turned on; otherwise all components will be set to either C<CLEAN> or C<DIRTY>.
+
+If the validation passes, but there is currently no entry for the release in the database, an entry is created with details corresponding to the version being validated. Whether or not an entry previously existed, if the validation passes, the component's status is set to C<STATUS_CLEAN> and a signature file is generated. If the validation failed and there is already an entry in the database for the component, it's status is set to C<STATUS_DIRTY> or C<STATUS_DIRTY_SOURCE> as appropriate.
+
+If the overall process results in validating the component status as DIRTY, then the manifest information for the current environment will be generated and saved as a manifest file in a temporary location within local file system for use during release processes.
+
+=head2 Environment Management
+
+=head3 InstallComponent
+
+Expects to be passed a component name, and a version. Unpacks the component's binaries, and creates (or updates) a complete database entry from the provided version and information read out of the release's C<RelData> object.
+
+=head3 RemoveComponent
+
+Expects to be passed a component name. Removes all the binary files associated with the installed version of the component, the component's signature file and the component's environment database record.
+
+=head3 DeleteSource
+
+Expects to be passed a component name, a dryrun and a force flag. Removes all the source files associated with the installed version of the component. If dryrun is used the script just reports what it would do. If force is used the script would delete write-protected files.
+
+=head3 UnpackBinaries
+
+Expects to be passed a component name, a version and a directory in which the release should be installed. Unpacks the component's binaries into the specified directory. The environment database is neither consulted, nor modified by this interface. It is intended to allow a set of released binaries to be temporarily unpacked (for example, for validation purposes)
+
+=head3 UnpackSource
+
+Expects to be passed a component name, a version, a directory in which the release should be installed, a flag which represents the verbose level, a flag which represents to overwrite or not, an inidata and a flag which represent whether this process is for validation or not. Unpacks the component's source into the specified directory. The environment database is neither consulted, nor modified by this interface. Returns a change in category flag, when flag is 1 a change in category has been found. Change in category flag is only uses when a validation occurs.
+
+=head3 GetReleaseSize
+
+Takes a component name and a version number. Returns the total size (in bytes) of the zips in the local archive making up a release.
+
+=head3 GetEnvironmentSize
+
+Takes a component name and a version number. Returns the total size (in bytes) of the zips in the local archive making up the environment.
+
+=head2 Notable private methods
+
+=head3 EvalidateDirectories
+
+Expects to be passed two directory names; it will then run C<EValid> over the two. Returns a Boolean (whether the two directories match), and prints the results according to the verbosity level. If the verbosity level is 1 or greater, details of failures are printed. If the verbosity level is greater than 1, all C<EValid> output is printed.
+
+=head3 CheckForAddedFiles
+
+This method checks to see if any files have been added to a component since it was packetised. It's part of source validation. It uses C<Find::File> to list all the files that are in a component's source code directory, then checks each of them are in a temporary directory which has been unzipped from the release packet.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/EnvDifferencer.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,386 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+package EnvDifferencer;
+
+use strict;
+use RelData;
+
+sub New {
+  my $class = shift;
+  my $self = bless {}, (ref $class || $class);
+  $self->{iniData} = shift;
+  $self->{verbose} = shift;
+  $self->{startcomp} = undef;
+  $self->{endcomp} = undef;
+  $self->{startver} = undef;
+  $self->{endver} = undef;
+  $self->{reldatacache} = {}; # keyed by concatenated of comp and ver
+  $self->{results} = undef;
+  if ($self->{verbose}) {
+    require Data::Dumper ;
+    Data::Dumper->import();
+  }
+  return $self;
+}
+
+sub SetStartCompVer {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  $self->Reset();
+  $self->{startcomp} = $comp;
+  $self->{startver} = $ver;
+}
+
+sub SetEndCompVer {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  $self->Reset();
+  $self->{endcomp} = $comp;
+  $self->{endver} = $ver;
+}
+
+sub Reset {
+  my $self = shift;
+  $self->{results} = undef;
+}
+
+# Accessor methods
+
+sub StartEnvReldata {
+  my $self = shift;
+  die "Start component not defined" unless $self->{startcomp};
+  die "Start version not defined" unless $self->{startver};
+  return $self->RelData($self->{startcomp}, $self->{startver});
+}
+
+sub EndEnvReldata {
+  my $self = shift;
+  die "End component not defined" unless $self->{endcomp};
+  die "End version not defined" unless $self->{endver};
+  return $self->RelData($self->{endcomp}, $self->{endver});
+}
+
+sub StartReldata {
+  my $self = shift;
+  my $comp = shift;
+  return $self->RelData($comp, $self->StartVersion($comp));
+}
+
+sub EndReldata {
+  my $self = shift;
+  my $comp = shift;
+  return $self->RelData($comp, $self->EndVersion($comp));
+}
+
+sub StartVersion {
+  my $self = shift;
+  my $comp = shift;
+  return $self->GetStartEnv()->{$comp};
+}
+
+sub EndVersion {
+  my $self = shift;
+  my $comp = shift;
+  return $self->GetEndEnv()->{$comp};
+}
+
+sub ChangedComps {
+  my $self = shift;
+  $self->DoDiff;
+  return $self->{results}->{diff}->{changed};
+}
+
+sub NewerComps {
+  my $self = shift;
+  $self->CompareDiffDates;
+  return $self->{results}->{diffdates}->{newer};
+}
+
+sub OlderComps {
+  my $self = shift;
+  $self->CompareDiffDates;
+  return $self->{results}->{diffdates}->{older};
+}
+
+sub UnchangedComps {
+  my $self = shift;
+  $self->DoDiff;
+  return $self->{results}->{diff}->{same};
+}
+
+sub OnlyStart {
+  my $self = shift;
+  $self->DoDiff;
+  return $self->{results}->{diff}->{onlystart};
+}
+
+sub OnlyEnd {
+  my $self = shift;
+  $self->DoDiff;
+  return $self->{results}->{diff}->{onlyend};
+}
+
+sub IntermediateReldatas {
+  my $self = shift;
+  my $comp = shift;
+  my $relDataObjects = RelData->OpenSet($self->{iniData}, $comp, $self->{verbose});
+
+  my $startdate = $self->StartReldata($comp)->ReleaseTime();
+  my $enddate = $self->EndReldata($comp)->ReleaseTime();
+
+  # Specifically exclude the start and end reldatas... i.e use < > not <= >=
+  my @results = grep { $_->ReleaseTime() < $enddate and $_->ReleaseTime() > $startdate } @$relDataObjects;
+  return \@results;
+}
+
+sub GetStartEnv {
+  my $self = shift;
+  unless ($self->{results}->{startenv}) {
+    if ($self->{startcomp}) {
+      $self->{results}->{startenv} = $self->StartEnvReldata()->Environment();
+    } else {
+      $self->{results}->{startenv} = $self->CurrentEnv;
+    }
+  }
+  return $self->{results}->{startenv};
+}
+
+sub GetEndEnv {
+  my $self = shift;
+  unless ($self->{results}->{endenv}) {
+    if ($self->{endcomp}) {
+      $self->{results}->{endenv} = $self->EndEnvReldata()->Environment();
+    } else {
+      $self->{results}->{endenv} = $self->CurrentEnv;
+    }
+  }
+  return $self->{results}->{endenv};
+}
+
+### Private
+
+sub CurrentEnv {
+  my $self = shift;
+  my $envDb = EnvDb->Open($self->{iniData}, $self->{verbose});
+  return $envDb->VersionInfo();
+}
+
+sub DoDiff {
+  my $self = shift;
+
+  return if $self->{results}->{diff};
+
+  die "Neither environment was specified.\n" unless ($self->{startcomp} || $self->{endcomp});
+
+  my %env1 = %{$self->GetStartEnv()};
+  my %env2 = %{$self->GetEndEnv()};
+  # Deliberately make copies, as we will be deleting stuff from them
+  
+  if ($self->{verbose}>1) {
+    print "Start environment is ".Dumper(\%env1)."\n";
+    print "End environment is ".Dumper(\%env2)."\n";
+  }
+
+  my @changed;
+  my @onlynew;
+  my @onlyold;
+  my @same;
+
+  # Compare $env1 against $env2 first.
+  foreach my $thisComp (keys %env1) {
+    my $ver1 = $env1{$thisComp};
+    my $ver2 = $env2{$thisComp};
+    if (not defined $ver2) {
+      push @onlyold, $thisComp;
+    }
+    elsif (lc($ver1) eq lc($ver2)) {
+      push @same, $thisComp;
+    }
+    else {
+      push @changed, $thisComp;
+    }
+
+    if (defined $ver2) {
+      # Remove this component from $env2 because it has been accounted for.
+      # Components left over in the $env2 hash are those not present in $env1.
+      delete $env2{$thisComp};
+    }
+  }
+
+  # List the components in $env2 but not in $env1.
+  @onlynew = keys %env2;
+
+  $self->{results}->{diff} = {
+    same => \@same,
+    onlyend => \@onlynew,
+    onlystart => \@onlyold,
+    changed => \@changed
+  };
+
+  print "At end of main comparison... with results ".Dumper($self->{results}->{diff})."\n" if $self->{verbose}>1;
+}
+
+sub CompareDiffDates {
+  my $self = shift;
+  return if $self->{results}->{diffdates};
+  $self->DoDiff; # returns if already completed
+
+  my @older;
+  my @newer;
+  foreach my $thisComp (@{$self->{results}->{diff}->{changed}}) {
+    my $relData1 = $self->StartReldata($thisComp);
+    my $relData2 = $self->EndReldata($thisComp);
+    if ($relData1->ReleaseTime() <= $relData2->ReleaseTime()) {
+      push @newer, $thisComp;
+    } else {
+      push @older, $thisComp;
+    }
+  }
+
+  $self->{results}->{diffdates} = {
+    older => \@older,
+    newer => \@newer
+  };
+  print "At end of date comparison... with results ".Dumper($self->{results}->{diffdates})."\n" if $self->{verbose}>1;
+}
+
+sub RelData {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+
+  print "Asked for reldata for $comp $ver\n" if $self->{verbose}>2;
+
+  die "Can't get reldata for undefined comp" unless $comp;
+  die "Can't get reldata for undefined version of $comp" unless $ver;
+
+  my $key = "$comp$ver";
+  unless ($self->{reldatacache}->{$key}) {
+    $self->{reldatacache}->{$key} = RelData->Open
+      ($self->{iniData}, $comp, $ver, $self->{verbose});
+  }
+  return $self->{reldatacache}->{$key};
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+EnvDifferencer.pm - A class to find differences between two environments.
+
+=head1 DESCRIPTION
+
+This class is used by C<DiffEnv> and C<ViewNotes> to examine the differences between two environments. To use it, first create an object, then use the C<SetStartCompVer> and C<SetEndCompVer> methods to set the component name and version that you wish to compare. You can then use any of the other methods to access information about the differences between them.
+
+=head1 INTERFACE
+
+=head2 Necessary calls
+
+=head3 New
+
+Expects to be passed two arguments; firstly, an C<IniData> object, and secondly, a verbosity level.
+
+=head3 SetStartCompVer
+
+=head3 SetEndCompVer
+
+These two methods are each passed a component name a version number. These two environments are used for differencing. Note that no differencing is actually performed until information is requested by one of the accessor methods. These methods also call C<Reset>, which means that all results are deleted and a new diff will be performed whenever information is requested.
+
+If one of these is not called before the comparison, then the current environment (as returned by a C<EnvDb> object) will be used for the missing environment.
+
+=head3 Reset
+
+This method should never be needed. It resets the object so that it performs a new diff the next time some information is requested.
+
+=head2 Accessor Methods
+
+Any of these may trigger a differencing to happen.
+
+=head3 StartReldata
+
+=head3 EndReldata
+
+Takes a component name. Returns a C<RelData> object corresponding to that component in the start or the end environment.
+
+=head3 StartVersion
+
+=head3 EndVersion
+
+Given a component name, returns the version number of that component in the start or the end environment. The behaviour is undefined if that component doesn't exist in the given environment.
+
+=head3 GetStartEnv
+
+=head3 GetEndEnv
+
+Returns a hashref of the components and version numbers in each environment.
+
+=head3 StartEnvReldata
+
+=head3 EndEnvReldata
+
+Returns the C<RelData> object corresponding to the environment itself.
+
+=head3 ChangedComps
+
+Returns a list of component names in both environments, but with different version numbers.
+
+=head3 UnchangedComps
+
+Returns a similar list of those components which are identical in both environments.
+
+=head3 OnlyStart
+
+=head3 OnlyEnd
+
+Return lists of those components only in one or other environment.
+
+=head3 NewerComps
+
+=head3 OlderComps
+
+These two methods trigger some additional differencing, which compares the dates of each changed component. They then return a list of those components which are newer, or older, in the end environment.
+
+=head3 IntermediateReldatas
+
+Given a component name, this returns a list of C<RelData> objects belonging to releases of that component made between the start and end release. It specifically does not include the start or end release.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/EnvInfo	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,335 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $full = 0;
+my $component;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'EnvInfo');
+my $envDb;
+my $overallStatus;
+my $displayClean = 0;
+my $displayDirty = 0;
+my $displayPendingRelease = 0;
+my $noScan = 0;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+CheckEnv();
+DisplayInfo();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions("h" => \$help, "f+" => \$full, "c" => \$displayClean, "d" => \$displayDirty, "p" => \$displayPendingRelease, "n" => \$noScan, "v+" => \$verbose);
+  if ($help) {
+    Usage(0);
+  }
+
+  if (not $full and ($displayClean or $displayDirty or $displayPendingRelease)) {
+    print "Warning: Inappropriate option(s), must be invoked together with -f\n";
+  }
+
+  if (not $displayClean and not $displayDirty and not $displayPendingRelease) {
+    $displayClean = 1;
+    $displayDirty = 1;
+    $displayPendingRelease = 1;
+  }
+
+  $component = $ARGV[0];
+  $envDb = EnvDb->Open($iniData, $verbose);
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: envinfo [options] [<component>]
+
+options:
+
+-h  help
+-v  verbose output (-vv very verbose)
+-f  display fuller information (the remaining switches only apply when this is used)
+-ff display even fuller information (internal version and mrp name)
+-c  display the components with status \"clean\"
+-d  display the components with status \"dirty\"
+-p  display the components with status \"pending release\"
+-n  no scan\n");
+}
+
+sub CheckEnv {
+  unless ($noScan or not $full) {
+    if (defined $component) {
+      $envDb->CheckComp($component, undef, 1);
+    }
+    else {
+      ($overallStatus, undef, undef, my $unaccountedFiles, my $duplicates) = $envDb->CheckEnv(1, 0, 1);
+      if (scalar (@$unaccountedFiles) > 0) {
+	foreach my $line (@$unaccountedFiles) {
+	  print "Warning: $line has unknown origin\n"; 
+	}
+      }
+      if (scalar (@$duplicates) > 0) {
+	foreach my $args (@$duplicates) {
+	  print "Warning: $args->[1] attempting to release $args->[0] which has already been released by $args->[2]\n"; 
+	}
+      }
+    }
+  }
+}
+
+sub DisplayInfo {
+  # Create a list of the components to be displayed.
+  my @comps;
+  if (defined $component) {
+    my $ver = $envDb->Version($component);
+    unless (defined $ver) {
+      die "Error: $component not found\n";
+    }
+    push @comps, $component;
+  }
+  else {
+    my $versionInfo = $envDb->VersionInfo();
+    foreach my $comp (sort keys %{$versionInfo}) {
+      push @comps, $comp;
+    }
+  }
+
+  my $tableData;
+  if ($full == 1) {
+    $tableData = GenFullInfoTable(\@comps);
+  }
+  elsif ($full > 1) {
+    $tableData = GenEvenFullerInfoTable(\@comps);
+  }
+  else {
+    $tableData = GenMinimalInfoTable(\@comps);
+  }
+
+  # Only print the table if there's something in it.
+  if (scalar(@$tableData) > 1) {
+    print "\n";
+    $iniData->TableFormatter->PrintTable($tableData, 1);
+  }
+
+  # Only display the overall status if a full check was done.
+  if (defined $overallStatus) {
+    print "\nOverall status: ", EnvDb::StatusString($overallStatus), "\n";
+  }
+}
+
+sub GenMinimalInfoTable {
+  my $comps = shift;
+
+  # Create a two dimentional array of the data to be printed.
+  my $tableData = [["Component", "Version"]];
+  my $row = 1;
+  foreach my $comp (@$comps) {
+    my $ver = $envDb->Version($comp);
+    $tableData->[$row++] = [$comp, $ver];
+  }
+  return $tableData;
+}
+
+sub GenFullInfoTable {
+  my $comps = shift;
+
+  # Create a two dimentional array of the data to be printed.
+  my $tableData = [["Component", "Version", "Project", "Status"]];
+  my $row = 1;
+  foreach my $comp (@$comps) {
+    my $ver = $envDb->Version($comp);
+    my $status = $envDb->Status($comp);
+    if (not $displayClean and $status == EnvDb::STATUS_CLEAN) {
+      next;
+    }
+    elsif (not $displayDirty and ($status == EnvDb::STATUS_DIRTY or $status == EnvDb::STATUS_DIRTY_SOURCE)) {
+      next;
+    }
+    elsif (not $displayPendingRelease and $status == EnvDb::STATUS_PENDING_RELEASE) {
+      next;
+    }
+    my $project = $iniData->PathData->ComponentProject($comp, $ver);
+    unless (defined $project) {
+      $project = "-";
+    }
+    $tableData->[$row++] = [$comp, $ver, $project, EnvDb::StatusString($status)];
+  }
+  return $tableData;
+}
+
+sub GenEvenFullerInfoTable {
+  my $comps = shift;
+
+  # Create a two dimentional array of the data to be printed.
+  my $tableData = [["Component", "Version", "Internal version", "Project",  "Status", "Mrp"]];
+  my $row = 1;
+  foreach my $comp (@$comps) {
+    my $ver = $envDb->Version($comp);
+    my $status = $envDb->Status($comp);
+    if (not $displayClean and $status == EnvDb::STATUS_CLEAN) {
+      next;
+    }
+    elsif (not $displayDirty and ($status == EnvDb::STATUS_DIRTY or $status == EnvDb::STATUS_DIRTY_SOURCE)) {
+      next;
+    }
+    elsif (not $displayPendingRelease and $status == EnvDb::STATUS_PENDING_RELEASE) {
+      next;
+    }
+
+    my $mrpName = $envDb->MrpName($comp);
+    unless (defined $mrpName) {
+      $mrpName = "-";
+    }
+    my $intVer = $envDb->InternalVersion($comp);
+    unless (defined $intVer) {
+      $intVer = "-";
+    }
+    my $project = $iniData->PathData->ComponentProject($comp, $ver);
+    unless (defined $project) {
+      $project= "-";
+    }
+    $tableData->[$row++] = [$comp, $ver, $intVer, $project, EnvDb::StatusString($status), $mrpName];
+  }
+  return $tableData;
+}
+
+
+=head1 NAME
+
+EnvInfo - Displays information about the installed components in the current environment.
+
+=head1 SYNOPSIS
+
+  envinfo [options] [<component>]
+
+options:
+
+  -h  help
+  -v  verbose output (-vv very verbose)
+  -f  display fuller information (the remaining switches only apply when this is used)
+  -ff display even fuller information (internal version and mrp name)
+  -c  display the components with status "clean"
+  -d  display the components with status "dirty"
+  -p  display the components with status "pending release"
+  -n  no scan
+
+=head1 DESCRIPTION
+
+By default displays a brief summary table of the information contained in the current drive's environment database. For example:
+
+ Component   Version
+
+ mycomp1     026
+ mycomp2     057
+
+If envoked with the C<-f> switch, a scan is performed of the F<\epoc32> tree and the status of each component is also reported:
+
+ Component   Version   Status
+
+ mycomp1     026       clean
+ mycomp2     057       clean
+
+ Overall status: clean
+
+The C<Status> field may have the following values:
+
+=over 4
+
+=item *
+
+B<clean> - The component's binaries all match the time stamp information that was stored when they were installed (or when they were last validated using either C<ValidateRel> or C<ValidateEnv>).
+
+=item *
+
+B<dirty> - One or more of the component's binaries doesn't match the time stamp information that was stored when they were installed. This may be because the source has been re-built but not changed (see the commands C<ValidateRel> and C<ValidateEnv> for details of how to check if a re-built set of binaries are identical to an already released set), or because changes have been made.
+
+=item *
+
+B<pending release> - The component is waiting to be released (see the commands C<PrepEnv> and C<MakeEnv> for details of how to make releases).
+
+=back
+
+The overall status of the environment is displayed last. This may have the following values:
+
+=over 4
+
+=item *
+
+B<clean> - All the installed components have a status of C<clean> and there are no files in the F<\epoc32> tree that have unkown origins (i.e. they are all known to belong to a component).
+
+=item *
+
+B<dirty> - One or more of the installed components has a status of C<dirty>, or there is one or more files in the F<\epoc32> tree that has unknown origins.
+
+=item *
+
+B<pending release> - All components have a status of either C<clean> or C<pending release> and there are no files in the F<\epoc32> with unknown origins. This status indicates that C<MakeEnv> may be used to release this environment.
+
+=back
+
+
+By default when C<EnvInfo> is envoked with the C<-f> switch, it will perform a scan of the F<\epoc32> tree checking all the time stamps. To avoid this processing, use the C<-n> switch also. This will cause the status of each component when the last scan was performed to be displayed (which may now be out of date). The output of C<EnvInfo> can be filtered according to status using the switches C<-c>, C<-d> and C<-p>. For example, if you wanted to view all the components that are either C<dirty> or C<pending release>, type:
+
+  envinfo -fdp
+
+If envoked with a C<component> argument, then only the details of the specified component will be displayed and a scan of the F<\epoc32> tree will not be performed.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/EnvInfo.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/EnvInfoTk	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,326 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Tk; 
+use Tk::Table; 
+use Getopt::Long;
+use IniData;
+use EnvDb;
+
+
+#
+# Constants.
+#
+
+my $margin = 2;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $full = 0;
+my $component;
+my $iniData = IniData->New();
+my $envDb;
+my $overallStatus;
+my $displayClean = 0;
+my $displayDirty = 0;
+my $displayPendingRelease = 0;
+my $noScan = 0;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+CheckEnv();
+DisplayInfo();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions("h" => \$help, "f" => \$full, "c" => \$displayClean, "d" => \$displayDirty, "p" => \$displayPendingRelease, "n" => \$noScan, "v+" => \$verbose);
+  if ($help) {
+    Usage(0);
+  }
+
+  if (not $full and ($displayClean or $displayDirty or $displayPendingRelease)) {
+    print "Warning: Inappropriate option(s)\n";
+  }
+
+  if (not $displayClean and not $displayDirty and not $displayPendingRelease) {
+    $displayClean = 1;
+    $displayDirty = 1;
+    $displayPendingRelease = 1;
+  }
+
+  $component = $ARGV[0];
+  $envDb = EnvDb->Open($iniData, $verbose);
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: envinfo [options] [<component>]
+
+options:
+
+-h  help
+-v  verbose output (-vv very verbose)
+-f  display full information (the remaining switches only apply when this is used)
+-c  display the components with status \"clean\"
+-d  display the components with status \"dirty\"
+-p  display the components with status \"pending release\"
+-n  no scan");
+}
+
+sub CheckEnv {
+  unless ($noScan or not $full) {
+    if (defined $component) {
+      $envDb->CheckComp($component);
+    }
+    else {
+      ($overallStatus) = $envDb->CheckEnv();
+    }
+  }
+}
+
+sub DisplayInfo {
+  # Create a list of the components to be displayed.
+  my @comps;
+  if (defined $component) {
+    my $ver = $envDb->Version($component);
+    unless (defined $ver) {
+      die "Error: $component not found\n";
+    }
+    push @comps, $component;
+  }
+  else {
+    my $versionInfo = $envDb->VersionInfo();
+    foreach my $comp (sort keys %{$versionInfo}) {
+      push @comps, $comp;
+    }
+  }
+
+  my $tableData;
+  if ($full) {
+    $tableData = GenFullInfoTable(\@comps);
+  }
+  else {
+    $tableData = GenMinimalInfoTable(\@comps);
+  }
+
+  # Only print the table if there's something in it.
+  if (scalar(@$tableData) > 1) {
+    print "\n";
+    DisplayTable($tableData, 1);
+  }
+
+  # Only display the overall status if a full check was done.
+  if (defined $overallStatus) {
+    print "\nOverall status: ", EnvDb::StatusString($overallStatus), "\n";
+  }
+}
+
+sub GenMinimalInfoTable {
+  my $comps = shift;
+
+  # Create a two dimentional array of the data to be printed.
+  my $tableData = [["Component", "Version"]];
+  my $row = 1;
+  foreach my $comp (@$comps) {
+    my $ver = $envDb->Version($comp);
+    $tableData->[$row++] = [$comp, $ver];
+  }
+  return $tableData;
+}
+
+sub GenFullInfoTable {
+  my $comps = shift;
+
+  # Create a two dimentional array of the data to be printed.
+  my $tableData = [["Component", "Version", "Internal version", "Status", "Mrp"]];
+  my $row = 1;
+  foreach my $comp (@$comps) {
+    my $ver = $envDb->Version($comp);
+    my $status = $envDb->Status($comp);
+    if (not $displayClean and $status == EnvDb::STATUS_CLEAN) {
+      next;
+    }
+    elsif (not $displayDirty and ($status == EnvDb::STATUS_DIRTY or $status == EnvDb::STATUS_DIRTY_SOURCE)) {
+      next;
+    }
+    elsif (not $displayPendingRelease and $status == EnvDb::STATUS_PENDING_RELEASE) {
+      next;
+    }
+
+    my $mrpName = $envDb->MrpName($comp);
+    unless (defined $mrpName) {
+      $mrpName = "-";
+    }
+    my $intVer = $envDb->InternalVersion($comp);
+    unless (defined $intVer) {
+      $intVer = "-";
+    }
+    $tableData->[$row++] = [$comp, $ver, $intVer, EnvDb::StatusString($status), $mrpName];
+  }
+  return $tableData;
+}
+
+sub DisplayTable {
+  my $tableData = shift;
+  my $numRows = scalar(@{$tableData});
+  die unless $numRows and defined $tableData->[0]; # There must be at least one column and row.
+  my $numCols = scalar(@{$tableData->[0]});
+
+  my $mw = MainWindow->new();
+  CreateGrid($mw, $tableData);
+  MainLoop();
+}
+
+sub CreateGrid() {
+  my $mw = shift;
+  my $data = shift;
+  my $numRows = scalar(@{$data});
+  die unless $numRows and defined $data->[0]; # There must be at least one column and row.
+  my $numCols = scalar(@{$data->[0]});
+
+  foreach my $row (0 ... $numRows - 1) {
+    my @row;
+    foreach my $col (1 ... $numCols - 1) {
+      $row[$col - 1] = $mw->Label(-text => $data->[$row][$col],
+				  -justify => 'left',
+				  -background => 'blue');
+    }
+    $mw->Label(-text => $data->[$row][0],
+	       -justify => 'left')->grid(@row,
+					 -sticky => 'nsew');
+  }
+}
+
+=head1 NAME
+
+EnvInfoTk - Displays information about the installed components in the current environment.
+
+=head1 SYNOPSIS
+
+  envinfo [options] [<component>]
+
+options:
+
+  -h  help
+  -v  verbose output (-vv very verbose)
+  -f  display full information (the remaining switches only apply when this is used)
+  -c  display the components with status "clean"
+  -d  display the components with status "dirty"
+  -p  display the components with status "pending release"
+  -n  no scan
+
+=head1 DESCRIPTION
+
+By default displays a brief summary table of the information contained in the current drive's environment database. For example:
+
+ Component   Version
+
+ mycomp1     026
+ mycomp2     057
+
+If envoked with the C<-f> switch a full table is displayed:
+
+ Component   Version   Internal version                       Status   Mrp
+
+ mycomp1     026       //myproject/latest/mycomp1/...@10106   clean    \mycomp1\mycomp1.mrp
+ mycomp2     057       //myproject/latest/mycomp1/...@10157   clean    \mycomp2\mycomp2.mrp
+
+ Overall status: clean
+
+The C<Component> and C<Version> fields are self explanatory. The C<Internal version> field is a label used by the site that owns the component, to store an internal reference (normally generated by their source control system). This is likely to be of use only to the owning site. The C<Status> field may have the following values:
+
+=over 4
+
+=item *
+
+B<clean> - The component's binaries all match the time stamp information that was stored when they were installed.
+
+=item *
+
+B<dirty> - One or more of the component's binaries doesn't match the time stamp information that was stored when they were installed. This may be because the source has been re-built but not changed (see the commands C<ValidateRel> and C<ValidateEnv> for details of how to check if a re-built set of binaries are identical to an already released set), or because changes have been made.
+
+=item *
+
+B<pending release> - The component is waiting to be released (see the commands C<PrepEnv> and C<MakeEnv> for details of how to make releases).
+
+=back
+
+The C<Mrp> field contains the name of the F<mrp> file that was used when the release was made. The overall status of the environment is displayed last. This may have the following values:
+
+=over 4
+
+=item *
+
+B<clean> - All the installed components have a status of C<clean> and there are no files in the F<\epoc32> tree that have unkown origins (i.e. they are all known to belong to a component).
+
+=item *
+
+B<dirty> - One or more of the installed components has a status of C<dirty>, or there is one or more files in the F<\epoc32> tree that has unknown origins.
+
+=item *
+
+B<pending release> - All components have a status of either C<clean> or C<pending release> and there are no files in the F<\epoc32> with unknown origins.
+
+=back
+
+
+By default C<EnvInfoTk> will perform a scan of the F<\epoc32> tree checking all the time stamps. To avoid this processing, use the C<-n> switch. This will cause the status of each component when the last scan was performed to be displayed (which may now be out of date). The output of C<EnvInfoTk> can be filtered according to status using the switches C<-c>, C<-d> and C<-p>. For example, if you wanted to view all the components that are either C<dirty> or C<pending release>, type:
+
+  envinfo -dp
+
+If envoked with a C<component> argument, then only the details of the specified component will be displayed and a scan of the F<\epoc32> tree will not be performed.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/EnvInfoTk.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Environment	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,140 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# Licensee Product Environment
+#
+
+=head1 Licensee Project Environment
+
+The processes for distributing source code and binaries between engineers has a large impact on the efficiency of both the development and integration phases of a project. The efficiency of these processes is even more significant when a project is being developed between multiple sites that are geographically separated. The LPD release tools address the key elements of this process, making the human tasks required to distribute software as simple as possible. The following points characterise the projects LPD are generally involved with:
+
+=over 4
+
+=item *
+
+Integration is centrally owned and performed by a dedicated integration team. The integration team are responsible for collecting all software modules delivered by multiple external and internal parties, and assembling them into a self-consistent sofware platform.
+
+=item *
+
+Many 3rd parties are involved in delivering software modules into the integration team. It is important, therefore, to have a standard means of delivering software irrespective of the package's origin.
+
+=item *
+
+There are dependancies between the software 3rd parties. 
+
+...delivery of software packets into the integration team is not a one-way process. Unofficial baselines are typically maintained in different sites amongst integration-clusters. All software packets may be delivered to all development groups.
+
+=item *
+
+different 3rd parties have different SLDA's and therefore are entitled to differing source IPR categories
+
+...there is no single customer and so provision must be made for protecting source code IPR and confidentiality.
+
+=item *
+
+contributing software teams may have close dependancies, and form natural integration clusters
+
+...telephony, for example, consists of a number of contributing components and may choose to release a sub-system of components before submitting to the rest of the porject.
+
+=item *
+
+software author's development environments should never become too old, and hence require updating frequently
+
+...developing against an old environment always leads to unecessary integration problems. This most frequently occurs when the cost of upgrading a development environment is large; in terms of time, network bandwidth, and local storage.
+
+=item *
+
+an effective integration team must be capable of fast baseline turnaround
+
+...delays in baseline deliveries result in a larget than normal volume of unintegrated code getting submitted to the next build. It is therefore more likely to be late again.
+
+=back
+
+=head1 Software Distribution
+
+There are two main strategies for distributing source and binaries:
+
+=over 4
+
+=item *
+
+component releases
+
+=item *
+
+monolithic environments
+
+=back
+
+=head2 Component Releases
+
+The component release strategy involves modularising the project into a set of named components. These generally map onto the source level modularisation. Component owners are identified and are responsible for compiling a set of binaries for use by the rest of the developers at regular intervals. An integration team is responsible for identifying a set of versioned releases that work together.
+
+=head2 Monolithic environments
+
+These are the direct ouputs of a centralised build process, where all software components are built from source on a single machine, using a uniform procedure. A build team is employed to perform these builds at regular intervals on the latest source. The results of the build are packaged into a small number of large F<.zip> files for distribution.
+
+Each of these approaches is best suited to particular applications and address some of the same problems. They both have a number of advantages and disadvantages.
+
+In addressing the key aspects of the Licensee project environment described at the start, the LPD Release Tools combine the strengths of both distribution methods:
+
+=over 4
+
+=item *
+
+reduce the data transfer between sites
+
+=item *
+
+reliable environment sharing between sites
+
+=item *
+
+ability to verify the I<current> state of a development drive
+
+=item *
+
+incorporation of I<mainline builds> with I<component releases> (ie, validateenv)
+
+=item *
+
+facilitate I<integration clusters>
+
+=item *
+
+fast baseline turn-around
+
+=back
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/ExportData.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,454 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+package ExportData;
+use strict;
+use Utils;
+use IniData;
+
+use constant BIN_KEYS => 0;
+use constant RELDATA_KEYS => 1;
+use constant EXP_KEYS => 2;
+use constant SRC_KEYS => 3;
+use constant SRC_EXP_KEYS => 4;
+
+#
+# Constructor
+#
+sub New {
+  my $invocant = shift;
+  my $class = ref($invocant) || $invocant;
+  my %args = @_;
+  my $self = {
+	      exportsFile => $args{exports_file},
+	      verbose => $args{verbose},
+	      iniData => IniData->New(),
+	     };
+  bless $self, $class;
+  
+  $self->ParseExportData();
+  return $self;
+}
+
+#
+# Public
+#
+
+sub PgpKeysForSource {
+  my $self = shift;
+  my $component = lc(shift);
+  my $category = lc(shift);
+
+  return $self->ReconstructData($component, SRC_KEYS, $category);
+}
+
+sub PgpKeysForBinaries {
+  my $self = shift;
+  my $component = lc(shift);
+
+  return $self->ReconstructData($component, BIN_KEYS);
+}
+
+sub PgpKeysForExports {
+  my $self = shift;
+  my $component = lc(shift);
+  my $category = lc(shift);
+
+  return $self->ReconstructData($component, EXP_KEYS, $category);
+}
+
+sub PgpKeysForRelData {
+  my $self = shift;
+  my $component = lc(shift);
+
+  return $self->ReconstructData($component, RELDATA_KEYS);
+}
+
+sub AllPgpKeys {
+  my $self = shift;
+  if (exists $self->{pgpKeys}) {
+    return $self->{pgpKeys};
+  }
+  return [];
+}
+
+sub ExportableComponents {
+  my $self = shift;
+
+  if (exists $self->{components}) {
+    return $self->{components};
+  }
+  return [];
+}
+
+sub ComponentIsExportable {
+  my $self = shift;
+  my $comp = lc(shift);
+
+  foreach my $exportableComp (@{$self->ExportableComponents()}) {
+    if ($comp eq lc($exportableComp)) {
+      return 1;
+    }
+  }
+  return 0;
+}
+
+
+#
+# Private
+#
+
+sub ParseExportData {
+  my $self = shift;
+
+  unless ($self->{exportsFile}) {
+    die "Error: Export data filename not defined\n";
+  }
+
+  open EXPORTS, "$self->{exportsFile}" or die "Error: Unable to open $self->{exportsFile} for reading\n";
+
+  if ($self->{verbose}) {
+    print "Parsing export data file $self->{exportsFile} ...\n";
+  }
+
+  my $separator = $self->{iniData}->CsvSeparator();
+
+  my $firstRow = 1;
+  while (my $row = <EXPORTS>) {
+    chomp $row;
+    if ($row =~ /^\s*$/ or $row =~ /^[$separator]*#/) {next;}  #ignore empty rows in table
+    #handle first non empty row
+    if ($firstRow) {
+      $self->HandleFirstRow($row);
+      $firstRow = 0;
+    }
+    #handle subsequent non empty rows
+    else {
+      $self->HandleRow($row);
+    }
+  }
+  close EXPORTS;
+}
+
+sub HandleFirstRow {
+  my $self = shift;
+  my $row = shift;
+
+  #parse row of delimiter-separated values
+  my @cols = $self->ParseCSV($row);
+
+  for (my $i = 1; $i <= $#cols; ++$i) {
+    my $cell = $cols[$i];
+    if (defined $cell) {
+      Utils::StripWhiteSpace(\$cell);
+      my ($pgpKeyid) = ($cell =~ /\b(0X[0-9a-fA-F]{8})\b/i);
+      unless ($pgpKeyid) {
+	die "Error: PGP key ID of the correct format not defined in column header \"$cell\"\n";
+      }
+      push @{$self->{pgpKeys}}, $pgpKeyid;
+      push @{$self->{nonemptyColumns}} ,$i;
+    }
+    else {
+      die "Error: Undefined PGP key in ".$self->{exportsFile}." file.\n";
+    }
+  }
+}
+
+sub HandleRow {
+  my $self = shift;
+  my $row = shift;
+
+  $row = lc($row);
+
+  #parse row of delimiter-separated values
+  my @cols = $self->ParseCSV($row);
+
+  my $component = $cols[0];
+  Utils::StripWhiteSpace(\$component);
+  if ($component =~ /^\s*$/) {
+    die "Error: Export table has wrong format. Must have component name in first column.\n";
+  }
+  push @{$self->{components}}, $component;
+
+  #iterate over columns which have a nonempty recipient heading and store cell data
+  my @cells = @cols[@{$self->{nonemptyColumns}}];
+  for (my $j = 0; $j < @cells; ++$j) {
+    $self->HandleCell($component, $j, $cells[$j]); #$j is the PGP array index
+  }
+}
+
+sub HandleCell {
+  my $self = shift;
+  my $component = shift;
+  my $pgpKeyIndex = shift;
+  my $cell = shift;
+  
+  my $pgpKey = $self->{pgpKeys}->[$pgpKeyIndex];
+
+  # cell must not be undef but may be blank
+  if (!defined $cell) {
+    $cell = '';
+  }
+
+  if ($cell =~ /exclude(?!_)/i) {
+    # Cells containing 'exclude' must not have _any_ release files of this
+    # component exported to this recipient.  However if only you want to stop
+    # binaries, use exclude_bin
+    return;
+  }
+
+  # Other cells must have the recipient's key added to 'relDataPgpKeys' and
+  # possibly also 'srcPgpKeys', 'expPgpKeys or 'binPgpKeys' for this component.
+  # Concatenating the string save memory, over using an array
+  $self->{keys}->{$component}->[RELDATA_KEYS] .= "$pgpKeyIndex,";
+
+  # Include binaries unless 'exclude_bin'
+  if ( $cell !~ s/exclude_bin//i ) {
+    $self->{keys}->{$component}->[BIN_KEYS] .= "$pgpKeyIndex,";
+  }
+
+  # Identify any S() or E() blocks
+  my %blocks;
+  while ($cell =~ s/([a-z])\((.*?)\)//i) {
+    if (!defined $blocks{$1}) {
+      $blocks{$1} = [$1, $2];
+    } else {
+      die "Error: Export table has wrong format. Multiple $1() blocks found in cell for component '$component', PGP key '$pgpKey'\n";
+    }
+  }
+
+  foreach my $block (keys(%blocks)) {
+    my ($origblock, $cats) = @{$blocks{$block}};
+    my $type;
+    if ($block eq "s") {
+      $type = SRC_KEYS;
+    } elsif ($block eq "e") {
+      $type = EXP_KEYS;
+    }
+    if (defined $type) {
+      while ($cats =~ s/([a-z]-[a-z]|\S)//i) { # a letter range (e.g. A-Z) or any non whitespace character
+        my $cat = $1;
+        
+        if ($cat =~ /(.)-(.)/) {
+          my ($from, $to) = ($1, $2);
+      
+          foreach my $cat (ord($from)..ord($to)) { # convert the characters to numbers so that we can do a foreach on the range
+            $cat -= 96;
+            $self->{keys}->{$component}->[$type]->[$cat] .= "$pgpKeyIndex,";
+          }
+        }
+        elsif ($cat =~ /^[a-z]$/i) {
+          $cat = ord($cat) - 96;         
+          $self->{keys}->{$component}->[$type]->[$cat] .= "$pgpKeyIndex,";
+        } else {
+          die "Error: Export table has wrong format. '$cat' is not a valid IPR category in cell for component '$component', PGP key '$pgpKey'\n";
+        }
+      }
+    } else {
+      die "Error: Export table has wrong format. '$origblock()' is not a valid construct in cell for component '$component', PGP key '$pgpKey'\n";
+    }
+  }
+
+  # Handle any 'old format' IPR categories not in blocks
+  while ($cell =~ s/([a-z]-[a-z]|\S)//i) { # a letter range (e.g. A-Z) or any non whitespace character
+    my $cat = $1;
+
+    if ($cat =~ /(.)-(.)/) {
+      my ($from, $to) = ($1, $2);
+
+      foreach my $cat (ord($from)..ord($to)) { # convert the characters to numbers so that we can do a foreach on the range
+        $cat -= 96;
+        $self->{keys}->{$component}->[SRC_EXP_KEYS]->[$cat] .= "$pgpKeyIndex,";
+      }
+    }
+    elsif ($cat !~ /^[a-z]$/i) {
+      die "Error: Export table has wrong format. '$cat' is not a valid IPR category in cell for component '$component', PGP key '$pgpKey'\n";
+    }
+    else {
+      $cat = ord($cat) - 96;
+      $self->{keys}->{$component}->[SRC_EXP_KEYS]->[$cat] .= "$pgpKeyIndex,";
+    }
+  }
+}
+
+sub ParseCSV {
+  my $self = shift;
+  my $text = shift;      # record containing delimited-separated values
+  my @new ;
+  
+  my $separator = $self->{iniData}->CsvSeparator();
+  
+  while ($text =~ m{"([^\"\\]*(?:\\.[^\"\\]*)*)"$separator?|([^$separator]+)$separator?|$separator}gx) {
+    push(@new, $+);
+  }
+  
+  push(@new, undef) if substr($text, -1,1) eq $separator;
+
+  return @new;      # list of values that were delimited-separated
+}
+
+sub ReconstructData {
+  my $self = shift;
+  my $component = shift;
+  my $type = shift;
+  my $category = shift;
+  
+  if ($category) {
+    $category = ord($category) - 96;
+  }
+
+  if (defined $self->{keys}->{$component}) {
+    my @results;
+    my @pgpKeysIndex;
+  
+    if ($type == EXP_KEYS || $type == SRC_KEYS) {
+      # Gets a list of the src or export keys, as well as the list of keys in both source and exports.
+      # Splits the key indexes on ,
+      if (defined $self->{keys}->{$component}->[$type]->[$category]) {
+        @pgpKeysIndex = split /,/, $self->{keys}->{$component}->[$type]->[$category];
+      }
+      if (defined $self->{keys}->{$component}->[SRC_EXP_KEYS]->[$category]) {
+        push @pgpKeysIndex, split /,/, $self->{keys}->{$component}->[SRC_EXP_KEYS]->[$category];
+      }
+    }
+    else { # BIN or RELDATA
+      @pgpKeysIndex = split /,/, $self->{keys}->{$component}->[$type]
+    }
+    
+    @results = map $self->{pgpKeys}->[$_], @pgpKeysIndex;
+    return \@results;
+  }
+  
+  return [];
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+ExportData.pm - Provides an interface to the contents of the project's export data file.
+
+=head1 DESCRIPTION
+
+A module used for accessing export restriction information for a component release.
+
+=head1 INTERFACE
+
+=head2 New
+
+Passed a named parameter list in the form of hash key value pairs:
+
+ exportsFile => $export_data_filename
+ verbose     => $integer_verbosity_value
+
+Opens and parses the export data file which should contain lines of delimiter separated values representing a table of component name rows and recipient columns, as in the example below:
+
+             | pgpkeyid_1 (recipient) | pgpkeyid_2 (recipient) | pgpkeyid_3 (recipient) |
+ ------------+------------------------+------------------------+------------------------+--
+ component_1 |           DE           |            E           |          CDE           |
+ ------------+------------------------+------------------------+------------------------+--
+ component_2 |          S(CDE) E(DE)  |                        |           DE           |
+ ------------+------------------------+------------------------+------------------------+--
+ component_3 |           D-G  T       |           A-F          |         exclude        |
+ ------------+------------------------+------------------------+------------------------+--
+ component_4 |  exclude_bin DEFG      |       DEFG             |       DEFG             |
+
+
+
+The column headers must contain the recipients PGP key ID - an eight digit hexadecimal number preceeded by C<0x> (e.g C<0xD9A2CE15>). This public PGP key will be used to encrypt all files sent to the recipient. The name of the recipient may also be included in the column header although this is not mandatory.
+
+A cell contains a list of IPR categories available to the recipient of the component.
+ Each category must be a single letter or digit or a range (e.g. A-Z). Empty cells imply that the recipient
+ does not have access to any source for the corresponding component but can still receive
+binaries.
+
+Alternatively, different categories may be specified for source files and export files, using the S(...) and E(...) notations respectively, with '...' being a list of IPR categories.
+
+To prevent a recipient from receiving both source and binaries for the corresponding component, use the keyword C<exclude>. This can be useful when certain recipients may receive releases of some but not all components.
+
+To prevent a recipient from receiving binaries for the corresponding component, use the keyword C<exclude_bin>. Unlike C<exclude>, this does not break any environment.
+
+Components which are not listed in the table but exist on the local site will not be exported to any recipients. However, a warning will be issued to alert the exporter of this situation.
+
+If a licensee or third party does not use C<DISTRIBUTION.POLICY> files to categorize source then all source will have the category X. In this case, putting X in a cell implies that all source for that component will be sent to the recipient, otherwise none will be sent.
+
+Lines starting with a C<#> are treated as comments and ignored.
+
+[NOTE: It is recommended that this file is created and maintained using a spreadsheet
+application (saving as a CSV file) rather than editing it directly.]
+
+If your CSV file does not use a comma ',' as the separator you will need to specify the required
+separator in your reltools.ini, using the syntax F<csv_separator <separator>>, e.g. F<csv_separator ;>.
+
+=head2 PgpKeysForRelData
+
+Expects a component name. Returns a reference to an array of public PGP key ids (corresponding to different
+recipients) to be used to encrypt the component's reldata.
+
+=head2 PgpKeysForSource
+
+Expects a component name and a source category. Returns a reference to an array of public PGP
+ key ids (corresponding to different recipients) to be used to encrypt the component's source of
+ this category.
+
+=head2 PgpKeysForBinaries
+
+Expects a component name. Returns a reference to an array of public PGP key ids (corresponding to different
+recipients) to be used to encrypt the component's binaries.
+
+=head2 PgpKeysForExports
+
+Expects a component name and an IPR category. Returns a reference to an array of public PGP
+ key ids (corresponding to different recipients) to be used to encrypt the component's exports of
+ this category.
+
+=head2 AllPgpKeys
+
+Returns a reference to an array of all PGP key IDs listed in the export table.
+
+=head2 ExportableComponents
+
+Returns a reference to an array of all the components listed in the export table
+
+=head2 ComponentIsExportable
+
+Expects to be passed a component name. Returns true if the component is listed in the
+export table.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/ExportEnv	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,244 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use File::Path;
+use IniData;
+use RelData;
+use RelTransfer::Export;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $dummy = 0;
+my $force = 0;
+my $ftpResume = 0;
+my $iniData;
+my $commandController;
+my $envcomp;
+my $envver;
+my $examining;
+my $excludeSource = 0;
+my %failedExports;
+my %goodExports;
+my %alreadyExported;
+
+#
+# Main
+#
+
+ProcessCommandLine();
+ExportEnvironment();
+PrintReport();
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions("h" => \$help, "v+" => \$verbose, "f" => \$force, "r" => \$ftpResume, "x" => \$examining, "d" => \$dummy, "e" => \$excludeSource);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $envcomp = lc($ARGV[0]);
+  $envver = $ARGV[1];
+
+  unless (defined $envcomp and defined $envver and $#ARGV = -1) {
+    print "Error: Invalid arguments\n";
+    Usage(1);
+  }
+  $iniData = IniData->New(undef,1);
+  $commandController = CommandController->New($iniData, 'ExportEnv');
+  #if ftp resume option is used override value in reltools.ini
+  if ($ftpResume) {
+    $iniData->FtpServerSupportsResume(1);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: exportenv [options] <component> <external_version>
+
+options:
+
+-h  help
+-f  force export overwriting if necessary
+-r  use FTP reconnect and resume transfer mode
+-x  confirm correct size of files on remote site rather than exporting them
+-d  dummy run (don't do anything) - assumes -v
+-e  exclude source
+-v  verbose output (-vv very verbose)\n");
+}
+
+sub ExportEnvironment {
+  my $relData = RelData->Open($iniData, $envcomp, $envver, $verbose);
+  my $env = $relData->Environment();
+
+  my $exporter = RelTransfer::Export->New(ini_data => $iniData,
+					  force => $force,
+					  dummy => $dummy,
+					  excludeSource => $excludeSource,
+					  verbose => $verbose);
+
+  unless ($examining) {
+    foreach my $comp (sort keys %{$env}) {
+      my $ver = $env->{$comp};
+      $exporter->CheckExportable($comp, $ver);
+    }
+  }
+
+  #do the export checking for errors
+  foreach my $comp (sort keys %{$env}) {
+    my $exported;
+    my $ver = $env->{$comp};
+    eval {
+      if ($examining) {
+        $exporter->ExamineExportedRelease($comp, $ver);
+      } else {
+        $exported = $exporter->TransferRelease($comp, $ver);
+      }
+    };
+    if ($@) {
+      print $@;
+      if ($@ =~ /cannot\s+connect/i) {
+        print "\nAborting export of $envcomp $envver environment\n";
+        last;
+      }
+      my $error = $@;
+      chomp $error;
+      $error =~ s/^error: ("?$comp $ver"? )?//i;
+      $failedExports{$comp}->{$ver} = $error;
+    } else {
+      if ($examining || $exported) {
+        push @{$goodExports{$comp}}, $ver;
+      } else {
+        push @{$alreadyExported{$comp}}, $ver;
+      }
+    }
+  }
+}
+
+sub PrintReport {
+  print "\n=========EXPORT SUMMARY==========\n";
+
+  my $tableData = [["Component", "Version", "status"]];
+
+  foreach my $comp (sort keys %goodExports) {
+    foreach my $ver (@{$goodExports{$comp}}) {
+      push (@$tableData, [$comp, $ver, 'successfully exported']);
+    }
+  }
+  
+  foreach my $comp (sort keys %alreadyExported) {
+    foreach my $ver (@{$alreadyExported{$comp}}) {
+      push (@$tableData, [$comp, $ver, 'has already been exported']);
+    }
+  }
+  
+  if (scalar @{$tableData} > 1) {
+    $iniData->TableFormatter->PrintTable($tableData, 1);
+  }
+  
+  #handle failed exports
+  if (keys %failedExports) {
+    print "\n=========FAILED EXPORTS==========\n";
+    print "\nExport Failure Summary\n\n";
+    my $failureTableData = [["Component", "Version", "Failure reason"]];
+    foreach my $comp (sort keys %failedExports) {
+      foreach my $ver (sort keys %{$failedExports{$comp}}) {
+        push (@$failureTableData, [$comp, $ver, $failedExports{$comp}->{$ver}]);
+      }
+    }
+    $iniData->TableFormatter->PrintTable($failureTableData, 1);
+    print "\nError: Unable to export component release successfully\n";
+  }
+  else
+  {
+    if (keys %goodExports) {
+      print "\nEnvironment $envcomp $envver successfully exported\n";
+    } else {
+      print "\nNothing to do!\n";
+    }
+  }
+}
+
+__END__
+
+=head1 NAME
+
+ExportEnv - Exports the environment from which a component release was made.
+
+=head1 SYNOPSIS
+
+  exportenv [options] <component> <version>
+
+options:
+
+  -h  help
+  -f  force export overwriting if necessary
+  -r  use FTP reconnect and resume transfer mode
+  -v  verbose output (-vv very verbose)
+  -d  dummy run (don't do anything) - assumes -v
+  -e  exclude source
+  -x  examine: confirm correct sizes of files on remote site rather than exporting them
+
+=head1 DESCRIPTION
+
+When a release is made, a description of the environment it was made from is stored with it. 
+C<ExportEnv> takes a component name and version number, reads the environment data for this 
+component and builds a list of component names and version numbers. It then encrypts these releases before sending them to the projects shared archive on a remote site.
+
+Using the C<-f> option will force releases to be exported even if they already exist on the remote site (this only applies to components existing in the users export table)
+
+If the C<-r> option is used and the FTP connection is dropped during the upload of a release, the tools will automatically reconnect to the FTP site and resume the upload. This feature may not be supported by some FTP servers.
+
+Using C<-e> option will create a release without source. 
+
+=head1 KNOWN BUGS
+
+None
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/ExportEnv.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/ExportRel	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,267 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use File::Path;
+use IniData;
+use RelTransfer::Export;
+use RelData;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $dummy = 0;
+my $force = 0;
+my $ftpResume = 0;
+my $iniData;
+my $commandController;
+my $excludeSource = 0;
+my %releases; # Data structure changed to a double hash (from a single hash).
+              # Top level keys are (case lowered) component names with has reference values.
+              # Second level hash keys are versions, with a dummy value.
+              # This arrangement makes it possible for a single component to have more than one
+              # version, and to easily delete versions that have already been imported.
+my %failedExports;
+my %goodExports;
+my %alreadyExported;
+  
+#
+# Main.
+#
+
+ProcessCommandLine();
+ExportRelease();
+PrintReport();
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions("h" => \$help, "v+" => \$verbose, "f" => \$force, "r" => \$ftpResume, "d" => \$dummy, "e" => \$excludeSource);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  if (scalar(@ARGV) == 1) {
+    if (-f $ARGV[0]) {
+      open IN, $ARGV[0] or die "Error: Couldn't open $ARGV[0] for reading: $!\n";
+      while (my $line = <IN>) {
+	chomp $line;
+	$line =~ s/^\s*$//;
+	$line =~ s/#.*//;
+	if ($line eq '') {
+	  next; #Nothing left
+	}
+	my ($comp, $ver) = split(" ", $line);
+	if (defined $comp and defined $ver) {
+	  $releases{lc($comp)}->{$ver} = 1;
+	}
+	else {
+	  print "Error: Invalid file format in $ARGV[0]\n";
+	  Usage(1);
+	}
+      }
+      close IN;
+    }
+    else {
+      print "Error: $ARGV[0] is not a file\n";
+      Usage(1);
+    }      
+  }	
+  elsif (scalar(@ARGV) == 2) {
+    $releases{lc($ARGV[0])}->{$ARGV[1]} = 1;
+  }
+  else {
+    print "Error: Invalid arguments\n";
+    Usage(1);
+  }
+  $iniData = IniData->New(undef,1);
+  $commandController = CommandController->New($iniData, 'ExportRel');
+  #if ftp resume option is used override value in reltools.ini
+  if ($ftpResume) {
+    $iniData->FtpServerSupportsResume(1);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: exportrel [options] (<component> <version>) | (<component_ver_list_file>)
+
+options:
+
+-h  help
+-f  force export overwriting if necessary
+-r  use FTP reconnect and resume transfer mode
+-d  dummy run (don't do anything) - assumes -v
+-e  exclude source
+-v  verbose output (-vv very verbose)\n");
+}
+
+sub ExportRelease {
+  my $exporter = RelTransfer::Export->New(ini_data => $iniData,
+					  force => $force,
+					  dummy => $dummy,
+					  excludeSource => $excludeSource,
+					  verbose => $verbose);
+  #do the export checking for errors
+  foreach my $comp (sort keys %releases) {
+    foreach my $ver (keys %{$releases{$comp}}) {
+      my $exported;
+      eval {
+        GetCorrectVersionNumber($comp, \$ver);
+        $exported = $exporter->TransferRelease($comp, $ver);
+      };
+      if ($@) {
+        print $@;
+        if ($@ =~ /cannot\s+connect/i) {
+          print "\nConnection to remote site dropped aborting export\n";
+          last;
+        }
+        my $error = $@;
+        chomp $error;
+        $error =~ s/^error: ("?$comp $ver"? )?//i;
+        $failedExports{$comp}->{$ver} = $error;
+      } else {
+        if ($exported) {
+          push @{$goodExports{$comp}}, $ver;
+        } else {
+          push @{$alreadyExported{$comp}}, $ver;
+        }
+      }
+    }
+  }
+}
+
+sub GetCorrectVersionNumber {
+  #This function changes the version number string of each component to that 
+  #stored in its reldata file. This is required because version numbers are case dependent
+  my $comp = shift;
+  my $verRef = shift;
+
+  my $relData = RelData->Open($iniData, $comp, $$verRef, $verbose);
+  my $env = $relData->Environment();
+  $$verRef = $env->{$comp};
+}
+
+sub PrintReport {
+  print "\n=========EXPORT SUMMARY==========\n";
+
+  my $tableData = [["Component", "Version", "status"]];
+
+  foreach my $comp (sort keys %goodExports) {
+    foreach my $ver (@{$goodExports{$comp}}) {
+      push (@$tableData, [$comp, $ver, 'successfully exported']);
+    }
+  }
+  
+  foreach my $comp (sort keys %alreadyExported) {
+    foreach my $ver (@{$alreadyExported{$comp}}) {
+      push (@$tableData, [$comp, $ver, 'has already been exported']);
+    }
+  }
+  
+  if (scalar @{$tableData} > 1) {
+    $iniData->TableFormatter->PrintTable($tableData, 1);
+  }
+  
+  #handle failed exports
+  if (keys %failedExports) {
+    print "\n=========FAILED EXPORTS==========\n";
+    my $failureTableData = [["Component", "Version", "Failure reason"]];
+    foreach my $comp (sort keys %failedExports) {
+      foreach my $ver (sort keys %{$failedExports{$comp}}) {
+        push (@$failureTableData, [$comp, $ver, $failedExports{$comp}->{$ver}]);
+      }
+    }
+    $iniData->TableFormatter->PrintTable($failureTableData, 1);
+    print "\nError: Unable to export component release successfully\n";
+  }
+  else
+  {
+    if (keys %goodExports) {
+      print "\nAll releases exported successfully\n";
+    } else {
+      print "\nNothing to do!\n";
+    }
+  }
+}
+
+__END__
+
+=head1 NAME
+
+ExportRel - Exports a component release to a remote site.
+
+=head1 SYNOPSIS
+
+  exportrel [options] (<component> <version>) | (<component_ver_list_file>)
+
+options:
+
+  -h  help
+  -f  force export overwriting if necessary
+  -r  use FTP reconnect and resume transfer mode
+  -d  dummy run (don't do anything) - assumes -v
+  -e  exclude source
+  -v  verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+Takes a C<component> and C<version> number as arguments. Encrypts the release and sends it to the projects shared archive stored on a remote site.
+
+The name of file containing a list of components and versions maybe passed as an argument to the tool instead of a single component to export multiple releases.
+
+Using the C<-f> option will force releases to be exported even if they already exist on the remote site (this only applies to components existing in the users export table)
+
+If the C<-r> option is used and the FTP connection is dropped during the upload of a release, the tools will automatically reconnect to the FTP site and resume the upload. This feature may not be supported by some FTP servers.
+
+Using C<-e> option will create a component release without source.
+
+=head1 KNOWN BUGS
+
+None
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/ExportRel.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/ExportingReleases	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,215 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+=head1 Introduction
+
+When a release is created with C<makerel> and C<makeenv> it is stored in the releasers local archive. To share this release with other development teams involved in the project it must be exported to a remote release archive (typically hosted on an FTP server) which all teams have access to. 
+
+This document describes how to configure and use the tools to export a teams releases to the remote archive and import other teams releases from it.
+
+=head1 Configuration
+
+The F<reltools.ini> and export data files must be set up as described in the F<Installation> document. Typically these files will have already been created for the user so no further editing of them is required. (An archive path file may also be needed, depending on your archive arrangement).
+
+Releases exported to the remote site are PGP encrypted for security. To encrypt and decrypt releases a command line PGP tool is used by the tools (defined by the C<pgp_tool> keyword in the F<reltools.ini> file). Both supported PGP clients (GnuPG and NAI PGP) require some configuration before they will work with the tools. 
+
+=head2 Configuring Network Associates PGP
+
+NAI command line PGP (version 6 or 7) must be installed on the users machine. The executable is assumed to have the name C<pgp.exe> and exist somewhere in the users path.
+
+PGP encrypts and decrypts files using keys stored on a public and secret key ring. Before using the export and import tools the user must set up their key rings for the project they are working on. If pre-configured keyrings have not been supplied the steps below should be followed:
+
+=over 4
+
+=item * 
+
+To use keys from another keyring first extract the keys with the command
+
+ pgp -kx <keyid> keyfile
+
+If the keyrings are not stored in the default directory then the options C<+PUBRING> or C<+SECRING> are required. For example
+
+ pgp +PUBRING=keyringPath/pubring.pkr -kx 0x12345678 foo.asc
+ pgp +SECRING=keyringPath/secring.skr -kx 0x87654321 bar.asc
+
+Remember to extract both public and private keys.
+
+To extract keys using the GUI version of PGP use the export key menu option. If the key is private make sure the "include private keys" check box is selected.
+
+=item *
+
+Create empty key ring files F<pubring.pkr> and F<secring.skr>. Add key files to these key rings using the command
+
+ pgp -ka keyfile  
+
+For example
+
+ pgp +PUBRING=keyringPath/pubring.pkr -ka somePublicKeyfile.asc
+ pgp +SECRING=keyringPath/secring.skr -ka someSecretKeyfile.asc
+
+The project key rings must have the names F<pubring.pkr> and F<secring.skr> but can be stored in any directory. If this is not the default directory used by PGP then the user must set the C<pgp_config_path> keyword in the F<reltools.ini> file to the directory where they are stored.
+
+=item *
+
+Check that the keys exist on the key ring using the command
+
+ pgp -kv
+
+For example
+
+ pgp +PUBRING=keyringPath/pubring.pkr -kv
+ pgp +SECRING=keyringPath/secring.skr -kv
+
+=back
+
+Once the keyrings have been created and populated, the keys must be signed with the users private key so that PGP can encrypt non-interactively (a requirement for the export tools to work). To sign all the keys on the project keyring follow the steps below:
+
+=over 4
+
+=item *
+
+First set the users private key to be the most trusted introducer and the default signing key. To do this run the command
+
+ pgp -ke your_private_keyid
+
+For example
+
+ pgp +SECRING=keyringPath/secring.skr -kv
+
+Input the passphrase, then answer 'y' to make the key the ultimately trusted introducer and the default signing key. Answer 'n' to the other questions.
+
+=item *
+
+Sign all the keys on the public key ring with the default signing key by calling the command
+
+ pgp -ks public_keyid 
+
+for each public key. For example
+
+ pgp +PUBRING=keyringPath/pubring.pkr -ks 0x12345678 
+
+=back
+
+Finally, once the key rings have been created and all the keys on them signed they maybe moved to a directory of the users choice (although the file names must be F<pubring.pkr> and F<secring.skr>) The C<pgp_config_path> keyword value in F<reltools.ini> should then be modified to this path. 
+
+=head2 Configuring GnuPG
+
+The tools have been tested with versions 1.06 and 1.4.7 of GnuPG and assume that the C<gpg.exe> executable exists somewhere in the users path.  You can either generate a new key pair or you can import PGP keys.
+
+=head3 Generating a New Key Pair
+
+To generate a new GPG key pair use the command
+
+ gpg --gen-key
+
+and follow the on screen instructions.
+
+=head3 Using existing PGP Keys
+
+GnuPG can use key rings created by Network Associates PGP (see above) just rename the files to F<pubring.gpg> and F<secring.gpg>. If the user wishes to create GnuPG key rings then follow the steps below
+
+=over 4
+
+=item *
+
+Export the keys from a PGP keyring using the method described in the section above
+
+=item *
+
+Import the keys onto the public and private key rings using the command:
+
+ gpg --import keyfile
+
+For GnuPG 1.06 (but not for GnuPG 1.4.7) an additional flag needs to be set to import private keys.  Use the command:
+
+ gpg --allow-secret-keys --import keyfile
+
+If the user wishes to use key rings which are not stored in the default location the '--homedir' option must be used. For example
+
+ gpg --homedir keyringPath --import somePublicKeyFile.asc
+
+As before, if importing private keys using GnuPG 1.06, the '--allow-secret-keys' flag is also needed (this flag is not necessary if using GnuPG 1.4.7).  Use the command:
+
+ gpg --homedir keyringPath --allow-secret-keys --import someSecretKeyFile.asc
+
+=item *
+
+Check that the keys exist on the key rings using
+
+ gpg --homedir keyringPath --list-keys
+ gpg --homedir keyringPath --list-secret-keys
+
+=back
+
+Once the key rings have been created they maybe moved to any directory (keeping the file names as F<pubring.gpg> and F<secring.gpg>). The C<pgp_config_path> keyword value in F<reltools.ini> should then be modified to this path.
+
+=head2 PGP vs GPG compatibility
+
+When exporting or importing with GPG defined as your 'pgp_tool' , and when using keys provided by PGP which employ a patented algorithm such as IDEA, an appropriate plugin will have to be installed for use by GPG.
+
+=head1 Exporting releases
+
+To export a single release to the remote site use the C<exportrel> command. For example 
+
+ exportrel mycomp myver -v
+
+to export a complete environment use the C<exportenv> command. For example
+
+ exportenv mycomp myver -v
+
+C<exportenv> will attempt to export every release in the environment of mycomp myver.
+
+Both commands will only attempt to export a release if it is listed in the export table and does not already exist in the remote archive.
+Using the C<-f> option will force releases to be exported even if they already exist on the remote site (again this only applies to components existing in the users export table)
+
+If the C<-r> option is used and the FTP connection is dropped during the upload of a release, the tools will automatically reconnect to the FTP site and resume the upload. This feature may not be supported by some FTP servers.  
+
+=head1 Importing releases
+
+To import a single release to the remote site use the C<importrel> command. For example 
+
+ importrel mycomp myver -v
+
+to import a complete environment use the C<importenv> command. For example
+
+ importenv mycomp myver -v
+
+C<importenv> will attempt to import every release in the environment of mycomp myver. If mycomp myver does not exist in the local archive it will import it, read its environment information and then import the rest of the environment.
+
+C<importrel> has a C<-f> option which will force the import of a release even if it already 
+exists in the local archive
+
+If the C<-r> option is used and the FTP connection is dropped during the download of a release, the tools will automatically reconnect to the FTP site and resume the download. This feature may not be supported by some FTP servers.  
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/FAQ	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,152 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+=head1 Frequently Asked Questions
+
+=head3 How do I remove an environment database entry?
+
+Use C<preprel comp_name> - no parameters indicates that you want to remove the entry. This may be useful if you edit the environment database (via either C<PrepRel> or C<PrepEnv>) incorrectly and want to rectify your mistake.
+
+=head3 When making a release, the tools complain about missing files that I don't want to release. How do I avoid this?
+
+F<mrp> statements like...
+
+ binary  \mycomp\mybldinfdir wins
+
+...cause the release tools to get the identity of file that need to be release from the build tools (using their C<-what> switch). It is possible that the build files (F<bld.inf>, F<mmp>s, custom make files, etc.) could list more releasables than you want to actually release. One solution is to modify the build files, but this may not be convenient if you are releasing code that you don't actually own. An alternative is to explicitly exclude certain binary files using the C<-binary> keyword in your F<mrp> file. This supports the same syntax as the C<binary> keyword, but tells the release tools to not release the files specified. It can be used to exclude exported files also. For example, to exclude the file F<\epoc32\release\wins\udeb\mycomp.pdb>:
+
+ -binary \epoc32\release\wins\udeb\mycomp.pdb
+
+To exclude all the files associated with the F<mmp> file F<mymmp>:
+
+ -binary \mycomp\mybldinfdir wins mymmp
+
+See the document I<Making Releases> for more details.
+
+=head3 How can I exclude exported files?
+
+The F<mrp> keyword C<exports> can be used to instruct the release tools to release a component's exports. Note, since version 2.59 of the release tools, it has been possible to categorise exports according to the IPR classifications applied to source code. See the C<categorise_exports> keyword in the section F<Installation> for more details.
+
+=head3 When making a release, the tools complain about files of unknown origin even though I know they were created by building the component. What could the problem be?
+
+The tools use the C<binary> statements in the components F<mrp> file to create a list of binary files associated with the release. 
+If the output of the build generates extra files to those contained in this list then they will be reported as files of unknown origin.
+
+The list of binaries the tools expect to be in the release can be viewed manually by reading the F<mrp> file. The files and directories explicitly defined after C<binary> keywords are included in this list. If a C<binary> keyword is followed by the location of a F<bld.inf> and a target then running C<abld -what build target> will display the binaries contributed to the list by these C<binary> statements.
+
+If the list of binaries created from the F<mrp> file is different to the output of the build then it is likely that the build configuration files (in particular the custom makefiles) have been written in a non-standard way. The ideal solution would be for the user to fix the build configuration files; if this is not possible then an alternative would be to explicitly list the extra files in the F<mrp> file and then make the release.     
+
+=head3 EnvInfo appears to hang after I set some components to pending release. What's going on?
+
+When you set a component's status to C<pending release> and run C<EnvInfo>, instead of checking the component's binaries against the stored signature (which contains the binary file names and their last modified times), the release tools attempt to determine the identity of binaries are are about to be released. This involves parsing the component's F<mrp> file, which in turn may involve generating a set of makefiles. This can take a considerable amount of time for large components.
+
+=head3 Where can I get help in setting up GnuPG?
+
+You can find all the GnuPG documentation you need at C<www.gnupg.org>
+
+=head3 Why is it possible to set PGP key ids in both F<reltools.ini> and the export data table?
+
+The configuration file F<reltools.ini> supports the keyword C<pgp_encryption_keys> which can be used to specify keys which should be used to encrypt B<ALL> exported files. This should be used to specify the outbound public key(s) of the site that is doing the exporting. This allows the site that generated each release to decrypt it if need be. It should not be used to specify the public keys any other sites. These should be specified in the export data table (contains in the file specified using the C<export_data_file> keyword in F<reltools.ini>). This table allows each site's export policy to be carefully defined and controlled. See the F<Installation Guide> for details.
+
+=head3 I get the error "Unable to decrypt any part of <component> <version>" when using C<ImportRel> or C<ImportEnv>. What does this mean?
+
+The exporter of a release may apply different access restrictions to the release files. Source files and exported files (headers etc.) may be given an IPR category. This allows the exporter to control which recipients are allowed to receive which categories. In addition to this a component's binaries may also have restricted access. Binaries aren't categorised - each recipient is either allowed to receive all binaries for a particular component or none. See the section F<Installation> for more details on how to control exports.
+
+Provided a recipient has access to the binary files of a component release, they will be allowed to install that component release into an environment. The above error is generated to alert recipients of the situation where they have attempted to import a release that they don't have access to, and as a result with not be able to install it into an environment.
+
+It's possible that this situation has occurred due to an error on the part of the exporter. If this is suspected, then the exporter should be contacted and asked to check their export table. If the recipient should have been able to access the release, then the exporter will need to update their export table and re-export using the C<-f> option to force an overwrite.
+
+=head3 How large (or small) should I make my components?
+
+Here are some points to bear in mind when deciding upon component granularity:
+
+=over 4
+
+=item 1
+
+A package description (or F<mrp>) file must be written and maintained for each component.
+
+=item 2
+
+The simpler these files are, the easier they are to maintain.
+
+=item 3
+
+Componentising at a granularity of a F<bld.inf> generally results in the simplest F<mrp> files. Such F<mrp> files hardly ever need to be changed once they have been created.
+
+=item 4
+
+Componentising at a granularity less than a F<bld.inf> in terms of F<mmp> files, is possible, however it does introduced some increased complexity in the F<mrp> files. It also may require changes to the source code structure the ensure that the source can be correctly distributed between the fine granularity components. This is almost never required when componentising at the F<bld.inf> granularity.
+
+=item 5
+
+Componentising at a granularity less than an F<mmp> file is again possible, but highly unadvisable since building one component would cause files belonging to another component to get overwritten. It would also significantly increase the complexity of the F<mrp> files. The reason for this is that it would no longer be possible to rely on the build tools to provide the identity of the binary files. They would need to be listed manually (to some extent). Doing so would make maintenance of the F<mrp> files very burdensome. Also, it would not be possible to separate the source in a mutually exclusive way. This would mean that certain source files would need to be distributed with more than one component. This is bad news, because it makes ownership unclear.
+
+=item 6
+
+Minimising component sizes minimises the amount of data that must be transferred between sites and to workstations. This is because if one file has changed within a component, the whole component must be re-released. Keeping components small increases the likely hood that entire components have not changed between builds, and hence do not need to be re-released or distributed.
+
+=item 7
+
+Minimising component sizes maximises customisation flexibility. This is because customisers can branch just the bits they need to, and continue to use the original components for everything else.
+
+=item 8
+
+Minimising component sizes inevitably means that there will be a large number of components. Each component needs to have a new version assigned each time it is released. Large numbers of components therefore increases the workload of the release engineer each time a release is made (thought points 7 and 8 may well out weigh this cost).
+
+=back
+
+=head3 My exporting seems unreliable. How can I improve that?
+
+If you are behind any sort of firewall, you should use passive FTP connections. See the F<Installation> document for details of how.
+
+=head3 How can I run a sequence of Release Tools commands?
+
+Windows supports this syntax: C<command1 && command2>. This will first run C<command1>, then run C<command2> - but only if the first command succeeds. The release tools provide the proper information to Windows to allow it to make these decisions, so you can for example do:
+
+  getenv baseline 001 && getsource component
+
+or
+
+  getenv baseline 001 && cleanenv -rf
+
+or even
+
+  getenv baseline 001 && getsource component && cd \component && bldmake bldfiles && abld build thumb urel
+
+whilst making a cup of tea.
+
+But one caveat: currently, C<abld> doesn't correctly tell Windows whether it succeeded or failed. Any commands after C<abld> will always get run, irrespective of whether the build succeeded or failed.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/FundamentalConcepts	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,54 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# MakingReleases
+#
+
+=head1 Overview
+
+
+
+=head1 Fundamental Concepts
+
+Consider a project that is being developed by three geographically separated sites (A, B and C). Each site is contributes various pieces of software. Site A is responsible for coordinating the software deliveries between all sites. It is critical that all sites develop against a common environment.
+
+The release tools provide an efficient means for the different sites to share environments with one another. Each site defines its deliverables as components (a single site may have a single component, or several smaller ones). B<Arrrgggg, this section needs more thought!!>
+
+=head1 Considerations Before Making a Release
+
+Component releases are fundamentally mechanism for distributing binary files. Source files may also be distributed, but the binary files are the key focus. The release tools are not intended to be a replacement for conventional source control systems. However they do allow sites to store in their source control system only the files that they actually own, and rely on the binaries distributed by the release tools to complete their environment. Source for these binaries may be available for debugging purposes according to licensing agreements.
+
+So the release tools are generally used in conjunction with a source control system during development. Individual developers will use the command C<GetEnv> to install a particual environment onto their workstation. They would then check out of the source control system the components they plan to work on, make changes and perform builds to test those changes.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/FurtherInformation	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,42 @@
+#!perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# Further Information
+#
+
+=head1 Further Information
+
+There is a PowerPoint presentation available about the release tools.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/GetEnv	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,212 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use RelData;
+use EnvDb;
+use CommandController;
+use GetEnv;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $overwriteSource = 0;
+my $sourceInstallPath = undef;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'GetEnv');
+my $comp;
+my $ver;
+my $installSource = 0;
+my $removeSource =0;
+my $excludeComponents = undef;
+my $forceExclusion = 0;
+my $sourceOnly;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+
+if ($sourceOnly) {
+  GetEnvSource();
+}
+else {
+  GetEnv::GetEnvFromRelData($iniData, $comp, $ver, $installSource, $sourceInstallPath, $overwriteSource, $removeSource, $verbose, $excludeComponents, $forceExclusion);
+  print "Checking environment...\n";
+  my $envDb = EnvDb->Open($iniData, $verbose);
+  (my $status) = $envDb->CheckEnv();
+  print "Status: ", EnvDb::StatusString($status), "\n";
+}
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions('h' => \$help, 's' => \$installSource, 'o' => \$overwriteSource, 'r' => \$removeSource, 'v+' => \$verbose,  'i=s' => \$sourceInstallPath, 'x=s' => \$excludeComponents, 'f' => \$forceExclusion, 'source-only' => \$sourceOnly);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $comp = shift @ARGV;
+  $ver = shift @ARGV;
+
+  unless (defined $comp and defined $ver and $#ARGV = -1) {
+    print "Error: Invalid arguments\n";
+    Usage(1);
+  }
+
+  if ($sourceInstallPath and not ($installSource || $sourceOnly )) {
+    print "Error: Invalid options - cannot specify install path (using -i) without installing source (using -s or --source-only)\n";
+    Usage(1);
+  }
+  
+  Utils::CheckDirectoryName($sourceInstallPath) if defined $sourceInstallPath;
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: getenv [options] <component> <external_version>
+
+options:
+
+-h  help
+-s  install source also
+-r  remove source which belongs to components deleted during upgrade
+-i  <source_install_directory>
+-o  overwrite any existing source and binaries (including pending release components)
+-v  verbose output (-vv very verbose)
+-x  <component_name> to exclude from installation or <file> with list of components to exclude (sets -r)
+-f  overrides the user prompt when removing components specified with the -x flag. Does nothing if -x not defined
+--source-only Installs the source code for any environment, irrespective of whether it is the current environment or not\n");
+}
+
+sub GetEnvSource {   
+    my $reldata = RelData->Open($iniData, $comp, $ver, $verbose);
+    my $components = $reldata->Environment();    
+    my $envDb = EnvDb->Open($iniData, $verbose);
+    
+    if (defined $excludeComponents) {
+      $components = GetEnv::FilterCompsToExclude($components, $excludeComponents, $verbose, $forceExclusion);
+    }
+    
+    foreach my $thisComp (sort keys %{$components}) {
+        eval {
+            print "Getting source for $thisComp $components->{$thisComp}...\n";
+            $envDb->UnpackSource($thisComp, $components->{$thisComp}, $sourceInstallPath || "\\", $overwriteSource, $verbose);     
+        };
+    }
+}
+
+__END__
+
+=head1 NAME
+
+GetEnv - Installs the environment from which a component release was made.
+
+=head1 SYNOPSIS
+
+  getenv [options] <component> <version>
+
+options:
+
+  -h  help
+  -s  install source also
+  -r  removes source which belongs to components deleted during upgrade
+  -i  <source_install_directory>
+  -o  overwrite any existing source and binaries (including components pending release)
+  -v  verbose output (-vv very verbose)
+  -x  <component_name> to exclude from installation or <file> with list of components to exclude (sets -r)
+  -f  overrides the user prompt when removing components specified with the -x flag. Does nothing if -x not defined.
+  --source-only Installs the source code for any environment, irrespective of whether it is the current environment or not
+
+=head1 DESCRIPTION
+
+When a release is made, a description of the environment it was made from is stored with it. C<GetEnv> reads this and installs the necessary components into the current environment in order to make it identical to the environment from which the release was made. Note, the term I<environment> is used to mean the F<\epoc32> tree. C<GetEnv> will optionally install source code into the root of the current drive, but it makes no attempt to verify the cleanliness of these directories.
+
+Components that were present in the release environment, but which are not present in the current environment are simply installed. Components of a different version in the current environment to that of the release environment are upgraded. The upgrade process involves removing the currently installed binaries, and then unpacking the new binaries. The binaries of components that have the same version in the current environment to that of the release environment are checked against the time stamp information that was stored when they were installed. If the check fails, the component is upgraded. If it succeeds, the component left untouched.
+
+As well as overwriting existing source code, C<-o> will overwrite any binaries which are left on the drive. There will only be leftover binaries in exceptional circumstances; normally C<getenv> will remove old versions of components before trying to install new ones. C<-o> will also force 'pending release' components to be removed if necessary.
+
+Unrequired components, (e.g. documentation), can be optionally excluded from being installed using the -x flag and specifying the component name or a file which contains a list of component names (Wildcards are supported). If the unrequired component exists in the current environment the binaries and source will be removed from the current environment, if it does not currently exist the component will simply not be installed if it is in the new environment. This option should be used cautiously especially if making releases from your local work area.
+
+Examples of -x flag:
+
+	getenv -vos gt_techview_baseline <some_version> -x tools_e32toolp
+	
+	This will exclude the component tools_e32toolp from the new installation if it exists in the archive
+	
+	
+	
+	getenv -vos gt_techview_baseline <some_version> -x tools*
+	
+	This will exclude any components which begin with the string "tools" in their name from the new installation
+	
+	
+	
+	getenv -vos gt_techview_baseline <some_version> -x d:\exclude.txt
+	
+	This will exclude any components that are mentioned in the file from the new installation if they exist in the archive
+	(File can be named anything)
+	
+	
+	Format of the file:
+	
+	component_one
+	component_two
+	component_three
+	component*
+	
+	(All components are to be on seperate lines, empty lines are permitted).
+	
+	When using the * wildcard this must be at the end of the line.
+	
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/GetEnv.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/GetEnv.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,307 @@
+#!perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+package GetEnv;
+
+use strict;
+
+
+#
+# Public.
+#
+
+sub GetEnvFromRelData {
+  my $iniData = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $installSource = shift;
+  my $sourceInstallPath = shift;
+  my $overwriteSource = shift;
+  my $removeSource = shift;
+  my $verbose = shift;
+  my $excludeComponents = shift;
+  my $forceExclusion = shift;
+  
+  
+
+  my $envDb = EnvDb->Open($iniData, $verbose);
+  $iniData->PathData()->CheckReleaseExists($comp, $ver);
+
+  print "Gathering environment information...\n";
+  my $relData = RelData->Open($iniData, $comp, $ver, $verbose);
+  my $env = $relData->Environment();
+  GetEnv($iniData, $env, $installSource, $sourceInstallPath, $overwriteSource, $removeSource, $verbose, $excludeComponents, $forceExclusion);
+}
+
+sub GetEnv {
+  my $iniData = shift;
+  my $env = shift;
+  my $installSource = shift;
+  my $sourceInstallPath = shift;
+  my $overwriteSource = shift;
+  my $removeSource = shift;
+  my $verbose = shift;
+  my $excludeComponents = shift;
+  my $forceExclusion = shift;
+
+  my $envDb = EnvDb->Open($iniData, $verbose);
+  my %compsToInstall;
+  my %cleanComps;
+  my @compsToRemove;
+  
+  
+  # Edit the list of components if $excludeComponents is set
+  if (defined $excludeComponents){
+	  $env = FilterCompsToExclude($env, $excludeComponents, $verbose, $forceExclusion);
+  }
+  
+
+  # Check the status of each component in the new environment.
+  my $error = 0;
+  foreach my $thisComp (sort keys %{$env}) {
+    my $thisVer = $env->{$thisComp};
+    $iniData->PathData()->CheckReleaseExists($thisComp, $thisVer);
+
+    my $installedVer = $envDb->Version($thisComp);
+    if (defined $installedVer) {
+      if ($installedVer eq $thisVer) {
+        # The requested version is already installed, so check its status.
+        (my $status) = $envDb->CheckComp($thisComp);
+        if ($status == EnvDb::STATUS_CLEAN) {
+          # Do nothing.
+          if ($verbose) { print "$thisComp $thisVer is already installed, and is clean\n"; }
+          $cleanComps{$thisComp} = 1;
+        }
+        elsif ($status == EnvDb::STATUS_PENDING_RELEASE && !$overwriteSource) {
+          print "Error: $thisComp is pending release\n";
+          $error = 1;
+        }
+        elsif ($status == EnvDb::STATUS_DIRTY || $status == EnvDb::STATUS_DIRTY_SOURCE || $status == EnvDb::STATUS_PENDING_RELEASE) {
+          if ($verbose) { print "$thisComp $thisVer is already installed, but is dirty\n"; }
+          push (@compsToRemove, $thisComp);
+          $compsToInstall{$thisComp} = $thisVer;
+        }
+        elsif ($status == EnvDb::STATUS_NOT_INSTALLED) {
+          die;
+        }
+      }
+      else {
+        if ($envDb->Status($thisComp) == EnvDb::STATUS_PENDING_RELEASE && !$overwriteSource) {
+          print "Error: $thisComp is pending release\n";
+          $error = 1;
+        }
+        if ($verbose) { print "$thisComp $installedVer currently installed\n"; }
+        push (@compsToRemove, $thisComp);
+        $compsToInstall{$thisComp} = $thisVer;
+      }
+    }
+    else {
+      $compsToInstall{$thisComp} = $thisVer;
+    }
+  }
+
+  if ($error) {
+    die "\n";
+  }
+
+  # Add to the remove list components in the current environment that aren't in the new environment.
+  my $currentEnv = $envDb->VersionInfo();
+  foreach my $thisComp (keys %{$currentEnv}) {
+    unless (exists $compsToInstall{$thisComp} or exists $cleanComps{$thisComp}) {
+      (my $status) = $envDb->CheckComp($thisComp);
+      if ($status == EnvDb::STATUS_CLEAN) {
+	if ($verbose) { print "$thisComp currently installed (clean), but not in new environment - will be removed\n"; }
+	push (@compsToRemove, $thisComp);
+      }
+      elsif ($status == EnvDb::STATUS_DIRTY || $status == EnvDb::STATUS_DIRTY_SOURCE) {
+	if ($verbose) { print "$thisComp currently installed (dirty), but not in new environment - will be removed\n"; }
+	push (@compsToRemove, $thisComp);
+      }
+      elsif ($status == EnvDb::STATUS_PENDING_RELEASE) {
+	print "Warning: $thisComp is pending release - its binaries cannot be automatically removed.\n";
+	print "         Continue with GetEnv? [y/n] ";
+	my $response = <STDIN>;
+	chomp $response;
+	if (lc $response eq 'y') {
+	  # Remove EnvDb entry.
+	  my $ver = $envDb->Version($thisComp);
+	  if (defined $ver) {
+	    $envDb->DeleteSignature($thisComp, $ver);
+	    $envDb->SetVersion($thisComp, undef);
+	  }
+	  else {
+	    die;
+	  }
+	}
+	else {
+	  die "GetEnv aborted\n";
+	}
+      }
+      elsif ($status == EnvDb::STATUS_NOT_INSTALLED) {
+	die;
+      }
+    }
+  }
+
+  # Remove old binaries and source.
+  foreach my $thisComp (@compsToRemove) {
+    print "Removing $thisComp...\n";
+    
+    if ($removeSource) {
+      $envDb->DeleteSource($thisComp, 0, 1);
+    }
+    
+    $envDb->RemoveComponent($thisComp);
+  }
+
+  # Install new binaries (and possibly source).
+  foreach my $thisComp (sort keys %compsToInstall) {
+    my $thisVer = $compsToInstall{$thisComp};
+    print "Installing $thisComp $thisVer...\n";
+    $envDb->InstallComponent($thisComp, $thisVer, $overwriteSource);
+    if ($installSource) {
+      my $installPath = $sourceInstallPath;
+      if (!defined ($installPath)) {
+        $installPath="\\";
+      }
+      $envDb->UnpackSource($thisComp, $thisVer, $installPath, $overwriteSource, 1);
+    }
+  }
+}
+
+
+sub FilterCompsToExclude {
+	my $editEnv = shift;
+	my $excludeComp = lc (shift); 
+	my $verbose = shift;
+	my $forceExclusion = shift;
+	my $editFlag = 0;
+			
+	print "Checking components to exclude...\n";
+	
+	if(-f $excludeComp) {			# file
+		open FILE, "$excludeComp" or die "Unable to open exclude file $excludeComp - $!. Requested components for exclusion will not be excluded. ";
+		
+		while (<FILE>) {	
+			if(ExcludeComp($_, $editEnv, $verbose) and ($editFlag == 0)){
+				$editFlag = 1;
+			}
+		}				
+	}
+	else{							# single component name
+		if(ExcludeComp($excludeComp, $editEnv, $verbose)){
+			$editFlag = 1;
+		}
+	}	
+	
+	# Make user aware of what they are doing
+	if(($editFlag) and not ($forceExclusion)){
+		print "Are you happy to continue installing a Release with excluded components? - y/n\n";
+		my $input = <STDIN>;
+		unless($input =~ /^y$/i){
+			die "Getenv aborted.\n";
+		}	
+	}	
+	print "\n";	
+	return $editEnv;
+}
+
+
+sub ExcludeComp{
+	
+	my $component = shift;
+	my $env = shift;
+	my $verbose = shift;
+	my $editFlag = 0;
+
+	chomp ($component);
+	$component =~ s/\s+$//;
+	$component =~ s/^\s+//;	
+	$component = lc ($component);
+	
+	if($component =~ /^$/){					# empty string
+	}
+	elsif($component =~ /^[\w\.-]+\*$/){			# wild cards
+		$component =~ s!([\w\.-]+)\*$!$1!;
+		foreach my $comp (keys %{$env}){
+			if($comp =~ /^\Q$component\E/){
+				$editFlag = ExcludeComp($comp, $env, $verbose);
+			}
+		}
+	}	
+	elsif($component =~ /\*$/){
+		print "$component - did not understand line - ignoring.\n";	# do nothing
+	}			 
+	elsif($component !~ /\s/){				# possible component name
+		if (exists $$env{$component}){
+			print "$component will be excluded from the new environment as requested.\n" if $verbose;				
+			delete $$env{$component};
+			$editFlag = 1;
+		}
+		else{
+			print "$component is not in the archive so cannot exclude it from the new environment.\n" if $verbose;			
+		}
+	}
+	else{
+		print "'$component' contains spaces in its name - this is not a valid component name.\n";
+	}	
+	return $editFlag;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+GetEnv.pm - Provides an interface for installing and upgrading environments.
+
+=head1 INTERFACE
+
+=head2 GetEnv
+
+Expects to be passed an C<IniData> reference, a reference to a hash containing the required component release versions, a flag indicating if to install source, a source install path (which may be undefined), a flag indicating if to overwrite source, a flag indicating whether there are components to be excluded or not and a verboisty level. Installs the specified component releases by adding, removing and upgrading existing components as required.
+
+=head2 GetEnvFromRelData
+
+Expects to be passed an C<IniData> reference, a component name, a version, a flag indicating if to install source, a source install path (which may be undefined), a flag indicating if to overwrite source, a flag indicating whether there are components to be excluded or not and a verboisty level. Retreives the version information associated with the specified component release version, and calls C<GetEnv> to install them.
+
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
+
+__END__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/GetSource	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,171 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $overwrite = 0;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'GetSource');
+my $envDb;
+my $comp;
+my $ver;
+my $installDir = "\\";
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+GetSource();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions('h' => \$help, 'i=s' => \$installDir, 'o' => \$overwrite, 'v+' => \$verbose);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $comp = shift @ARGV;
+  $ver = shift @ARGV;
+
+  unless ($#ARGV == -1) {
+    print "Error: Invalid number of arguments\n";
+    Usage(1);
+  }
+
+  Utils::CheckDirectoryName($installDir);
+
+  $envDb = EnvDb->Open($iniData, $verbose);
+  
+  if (defined $comp and not defined $ver) {
+    $ver = $envDb->Version($comp);
+    unless (defined $ver) {
+      die "Error: $comp not installed\n";
+    }
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: getsource [options] [<component> [<version>]]
+
+options:
+
+-h  help
+-i  <install_directory>
+-o  overwrite any existing source
+-v  verbose output (-vv very verbose)\n");
+}
+
+sub GetSource {
+  if (defined $comp) {
+    UnpackSource($comp, $ver, $installDir);
+  }
+  else {
+    print "About to unpack the source for the entire environment. Continue? [y/n] ";
+    my $response = <STDIN>;
+    if ($response =~ /^y$/i) {
+      my $versionInfo = $envDb->VersionInfo();
+      foreach my $thisComp (sort keys %{$versionInfo}) {
+        eval {
+          UnpackSource($thisComp, $versionInfo->{$thisComp}, $installDir);
+        };
+ 
+        if ($@) {
+          print $@;
+        }
+      }
+    }
+  }
+}
+
+sub UnpackSource {
+  my $comp = shift;
+  my $ver = shift;
+  my $dir = shift;
+
+  print "Getting source for $comp $ver...\n";
+  $envDb->UnpackSource($comp, $ver, $dir, $overwrite, 1);
+}
+
+
+__END__
+
+=head1 NAME
+
+GetSource - Installs the source code from a component release into the current environment.
+
+=head1 SYNOPSIS
+
+  getsource [options] [<component> [<version>]]
+
+options:
+
+  -h  help
+  -i  <install_directory>
+  -o  overwrite any existing source
+  -v  verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+Releases are generally made containing both source and binaries. By default, tools like C<GetEnv> and C<GetRel> only unpack the binaries. C<GetSource> provides a means of installing the source when it is required (e.g. for debugging purposes).
+
+If only a component name is specified, the source for the currently installed version of the component is unpacked into the root of the current drive. If the source code for a version of a component that is not currently installed is required, then specify both the version and a directory in which the source should be unpacked (this will be created if it does not already exist). If no arguments are specified, the source to all the installed components is unpacked into the root of the current drive.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/GetSource.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/HistoricPerspective	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,172 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# Overview
+#
+
+=head1 Introduction
+
+The processes for distributing source and binaries between engineers has a large impact on the efficiency of both the development and integration phases of a project. The efficiency of these processes is even more significant when a project is being development between multiple sites that are geographically separated. The LPD release tools were written to make the human tasks necessary to distribute software as simple as possible. This document provides an historic perspective of the way things have been done in the past. It then goes on to present the main features of the release tools.
+
+=head1 History
+
+There have been two different distribution strategies for source and binaries:
+
+=over 4
+
+=item * Component Releases
+
+The component release strategy involves modularising the project into a set of named components. These generally map onto the source level modularisation. Component owners are identified and are responsible for compiling a set of binaries for use by the rest of the developers at regular intervals. An integration team is responsible for identifying a set of versioned releases that work together.
+
+Advantages
+
+=over 8
+
+=item *
+
+B<Pluggable.> Provided a new release is binary compatible with the previous release, it may be installed onto a development environment and run immediately (i.e. without having to re-compile and other components). If a problem is found with the release, the component can be quickly reverted to the previous version.
+
+=item *
+
+B<Easy to patch.> Because the integrated product is assembled from a set of versioned components, it is easy to re-release a single component that is found to be problematic, without having to touch the rest of the system. 
+
+=item *
+
+B<Minimises data transfer between sites.> Only newly released component need be distributed between sites.
+
+=item *
+
+B<Flexible for developers.> Developers can create their own configuration of component versions suitable for the task in hand. Also, developers can share their software with one another in a very efficient way. This is useful for authors of components that are highly dependent on one another, because they can form an 'integration cluster', and solve many problems before their components are released to the project at large.
+
+=item *
+
+B<Easy to reference.> Component version numbers encourage a common vocabulary between engineers ("I've found problem I<x> in verion I<y> of component I<z>", "I've fixed that in version I<y+1>").
+
+=back
+
+Disadvantages
+
+=over 8
+
+=item *
+
+B<Hard to maintain.> The original tools for automating the procedures for generating and unpacking releases were written using DOS-style batch files. These were notoriously cryptic and hard to maintain. As a result, releases were often missing files. Also, component scripts for populating a development drive were often broken.
+
+=item *
+
+B<Time consuming to prepare a new development drive.> Even when the scripts for populating a development drive were working correctly, they invariably took a long time to run. This generally led to developers either using a vastly cut down environment (that would not be suitable for reproducing certain types of problem) or updating their environments very seldomly (which often compounded integration problems).
+
+=item *
+
+B<Reliance on binary compatibility.> As already stated, the benefits of pluggable releases only come when releases are binary compatible with one another. If a component release is made than breaks binary compatibility, all the components that depend on it must be re-released also. This so called batton passing procedure can introduce significant delays and risks to integration.
+
+ 
+
+=back
+
+=item * Monolithic F<.zip> files
+
+Centralised builds were introduced when the EPOC build tools were over-halled. The new build technology allowed all of the components that make up EPOC to be built on the same machine using a uniform procedure (this was a massive step forward from the days when each component has a hand crafted build script). A build team is employed to run builds of the latest source on a regular basis. The output of these builds is then packaged into a small set of large F<.zip> files for distribution.
+
+Advantages
+
+=over 8
+
+=item *
+
+B<Eliminatates binary incompatibilities.> The inherent fragility of component releases as regards binary compatibility is eliminated - if all the project's components have been sucessfully built in the same environment there is no risk of incompatibility.
+
+=item *
+
+B<Simple distribution mechanism.> The set of large F<.zip> files are simple to install and provide a high degree of confidence that the environment generated on the build machine will be faithfully reproduced on other machines.
+
+=back
+
+Disadvantages
+
+=over 8
+
+=item *
+
+B<Slow transfer between sites.> Because the F<.zip> files contain everything, they are inherently large. A large binary transfer must therefore take place in order to distribute changes to even a very small number of components. This can be a huge problem for sites with low bandwidth connections, particularly if the file transfer mechanism is not reliable (as is often the case when using FTP without resume functionality). Transfer of a complete development environment can in the worst cases take several days.
+
+=item *
+
+B<Time consuming to prepare a new development drive.> Again due to the size of the F<.zip> files, even when available on a local network, they can be time consuming to install. As with component releases, this can result in developers not upgrading their development enviroments as often as they would like.
+
+=item *
+
+B<Hard to patch cleanly.> Patches are generally provided in the form of additional F<.zip> files. This introduces another level of complexity (and room for error) due to their ad-hock nature. Subtly different development environments may be produced by unpacking patches in the wrong order, for example.
+
+=item *
+
+B<Build team becomes a bottle neck.> During the integration phase of a project it is desirable for developers to receive environment updates as frequently as possible. However, the build cycle rate dictates the rate at which developers receive new development environments. A delayed build has the nasty side effect that it is likely to cause the next build to be delayed also, since a higher than normal volume of un-integrated code will be submitted. This can result in a very unpredictable build cycle rate, and overall project integration is likely to suffer as a result.
+
+=item *
+
+B<Hard to reference.> Build numbers are extremely coarse for referencing purposes. It is often difficult to get information on the state of an individual component from only a build number. This can make information exchanges between licensees (who only have a build number) and development engineers (who may not have a current installation of the relevant build) error prone and time consuming.
+
+=back
+
+=back
+
+=head1 A combined approach
+
+The previous section described a number of significant problems associated with each of the software distribution strategies that have been used in the past. The LPD release tools have been designed to build on the positive points mentioned above and to minimise the negative points. Fundamentally they opperate in a similar way to the 'component releases' strategy and so gain all the advantages of this approach. However, they also allow the use of a 'centralised build' strategy, thereby most of those advantages also. The main features are as follows:
+
+=over 4
+
+=item *
+
+B<Easy to maintain.> The tools are by and large maintenance free once configured. This is largely due to their reliance on the EPOC build tools to provide information about which binary files to include in a particular release. Also, when any release (or set of releases) is made, the tools store details of the exact environment from which this was done. This information can then be used by others to reproduce the release environment.
+
+=item *
+
+B<Upgradable development environments.> Development environments need not be prepared from scratch (i.e. on an empty drive) to ensure their cleanliness. The tools keep track of what has been installed in a particlar environment, and allow this to be upgraded. They also provide a means for verifying that the cleanliness of an environment (listing files that are known to not have originated from releases). Because development environments can be upgraded incrementally, the time taken to perform this opperation is vastly reduced.
+
+=item *
+
+B<Automatic release generation.> The tools can compare the output of a build (either full, or partial) and re-release only the components whose binaries have changed. This is significant because it allow a centralised build strategy to be married with the component release strategy, thereby eliminating problems concerning binary compatibility. It also means that a new build can be distributed by only transferring the components that have actually changed.
+
+=item *
+
+B<Automated delivery via FTP.> The tools are capable of automatically retrieving component releases made by remote sites from a central FTP server. They also provide a simple means of exporting releases to the FTP server. It is recommended that each project has a single FTP server to facilitate the transfer of releases between sites.
+
+=item *
+
+B<Automatic handling of IPR sensitive source.> When a release is made, the source code is categorized according to the F<distribution.policy> files present using C<IPRTOOL>. Before exporting releases to a central FTP server, these separately categorized source F<.zip> files are encrypted using PGP according to the data present in a project specific export configuration table. This table contains a complete list of each site concerned with the project, and their PGP key ids. It also contains a per-component list of which site is allowed to view which categories of source code. The correct set (according the the export table) of PGP keys are then used to encrypt each source F<.zip> file, thereby significantly reducing the risk of human error.
+
+=back
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/ImportEnv	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,258 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use File::Path;
+use IniData;
+use RelData;
+use RelTransfer::Import;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $ftpResume = 0;
+my $iniData;
+my $commandController;
+my $envcomp;
+my $envver;
+my $passphraseFile;
+my $force;
+my $noPassphraseRetry;
+my %goodImports;
+my %failedImports;
+my %alreadyImported;
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+ImportEnvironment();
+PrintReport();
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions("h" => \$help, "v+" => \$verbose, "r" => \$ftpResume, "p=s" => \$passphraseFile, "f" => \$force, "noPassphraseRetry" => \$noPassphraseRetry);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $envcomp = lc($ARGV[0]);
+  $envver = $ARGV[1];
+
+  unless (defined $envcomp and defined $envver and $#ARGV = -1) {
+    print "Error: Invalid arguments\n";
+    Usage(1);
+  }
+  $iniData = IniData->New(undef,1);
+  $commandController = CommandController->New($iniData, 'ImportEnv');
+  #if ftp resume option is used override value in reltools.ini
+  if ($ftpResume) {
+    $iniData->FtpServerSupportsResume(1);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: importenv [options] <component> <external_version>
+
+options:
+
+-h  help
+-r  use FTP reconnect and resume transfer mode
+-v  verbose output (-vv very verbose)
+-p <file>  file containing passphrase
+-f  force the re-import of component releases
+--noPassphraseRetry  Will cause ImportEnv to terminate if an incorrect passphrase is specified
+
+N.B. You will be prompted for your passphrase unless the -p option is specified.
+Use of the -p option is NOT recommended though, as storing your passphrase in a file is considered a security risk.\n");
+}
+
+sub ReadPassphraseFile {
+  return undef unless $passphraseFile;
+  open(PP, $passphraseFile) or die "Couldn't open passphrase file \"$passphraseFile\" because $!\n";
+  my $passphrase = join ("\n", <PP>);
+  close PP;
+  return $passphrase;
+}
+
+sub ImportEnvironment {
+  my $importer = RelTransfer::Import->New(ini_data => $iniData, force => $force,
+					  verbose => $verbose, passphrase => ReadPassphraseFile);
+
+  #import the release to get the environment information
+  eval {
+    $importer->TransferRelease($envcomp, $envver, $noPassphraseRetry);
+  };
+  if ($@) {
+    print $@;
+    die "Aborting import of $envcomp $envver environment\n";
+  }
+
+  #read the environment information and transfer releases
+  print "Reading $envcomp $envver environment...\n" if ($verbose);
+  my $relData = RelData->Open($iniData, $envcomp, $envver, $verbose);
+  my %env = %{$relData->Environment()};
+
+  delete $env{$envcomp};
+
+  #do the import checking for errors
+
+  foreach my $comp (sort keys %env) {
+    my $imported;
+    my $ver = $env{$comp};
+    eval {
+      $imported = $importer->TransferRelease($comp, $ver, $noPassphraseRetry);
+    };
+    if ($@) {
+      print $@;
+      if ($@ =~ /cannot\s+connect/i) {
+        print "\nAborting import of $envcomp $envver environment\n";
+        last;
+      }
+      my $error = $@;
+      chomp $error;
+      $error =~ s/^error: ("?$comp $ver"? )?//i;
+      $failedImports{$comp}->{$ver} = $error;
+
+      print "Aborting import of $envcomp $envver environment\n";
+      last;
+    }
+    else {
+      if ($imported) {
+        push (@{$goodImports{$comp}}, $ver);
+      } else {
+        push (@{$alreadyImported{$comp}}, $ver);
+      }
+    }
+  }
+}
+
+sub PrintReport {
+  print "\n=========IMPORT SUMMARY==========\n";
+
+  my $tableData = [["Component", "Version", "status"]];
+
+  foreach my $comp (sort keys %goodImports) {
+    foreach my $ver (@{$goodImports{$comp}}) {
+      push (@$tableData, [$comp, $ver, 'successfully imported']);
+    }
+  }
+    
+  foreach my $comp (sort keys %alreadyImported) {
+    foreach my $ver (@{$alreadyImported{$comp}}) {
+      push (@$tableData, [$comp, $ver, 'has already been imported']);
+    }
+  }
+  
+  $iniData->TableFormatter->PrintTable($tableData, 1);
+
+  if (scalar (keys %alreadyImported) > 0) {
+    print "\nYou can specify the -f option to force the re-import of component releases\n";
+  }
+ 
+  if (keys %failedImports) {
+    print "\n=========FAILED IMPORTS==========\n";
+    print "\nImport Failure Summary\n\n";
+    my $failureTableData = [["Component", "Version", "Failure reason"]];
+    foreach my $comp (sort keys %failedImports) {
+      foreach my $ver (sort keys %{$failedImports{$comp}}) {
+        push (@$failureTableData, [$comp, $ver, $failedImports{$comp}->{$ver}]);
+      }
+    }
+    $iniData->TableFormatter->PrintTable($failureTableData, 1);
+    print "\nError: Unable to import environment successfully. Environment might be corrupted.\n";
+  }
+  else
+  {
+    if (keys %goodImports) {
+      print "\nEnvironment $envcomp $envver successfully imported\n";
+    } else {
+      print "\nNothing to do!\n";
+    }
+  }
+}
+
+__END__
+
+=head1 NAME
+
+ImportEnv - Imports the environment from which a component release was made.
+
+=head1 SYNOPSIS
+
+  importenv [options] <component> <version>
+
+options:
+
+  -h  help
+  -r  use FTP reconnect and resume transfer mode
+  -v  verbose output (-vv very verbose)
+  -p <file>  file containing passphrase
+  -f  force the re-import of component releases
+  --noPassphraseRetry  Will cause ImportEnv to terminate if an incorrect passphrase is specified
+
+=head1 DESCRIPTION
+
+When a release is made, a description of the environment it was made from is stored with it.
+C<ImportEnv> takes a component name and version, reads the environment data for this
+component and imports the necessary releases from a remote site if they do not already
+exist on the local archive. If the environment data is not available from the local archive
+an attempt is made to import this component first.
+
+If the C<-r> option is used and the FTP connection is dropped during the download of a release, the tools will automatically reconnect to the FTP site and resume the download. This feature may not be supported by some FTP servers.
+
+It is recommended NOT to use the -p option; you will be prompted for your
+passphrase. Having a file containing your passphrase is be a security risk.
+
+=head1 KNOWN BUGS
+
+None
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/ImportEnv.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/ImportRel	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,287 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use File::Path;
+use IniData;
+use RelTransfer::Import;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $iniData;
+my $commandController;
+my $force = 0;
+my $ftpResume = 0;
+my %releases; # Data structure changed to a double hash (from a single hash).
+              # Top level keys are (case lowered) component names with has reference values.
+              # Second level hash keys are versions, with a dummy value.
+              # This arrangement makes it possible for a single component to have more than one
+              # version, and to easily delete versions that have already been imported.
+my $passphraseFile;
+my $noPassphraseRetry;
+my %goodImports;
+my %failedImports;
+my %alreadyImported;
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+CheckAlreadyImported();
+ImportRelease() if (keys %releases); # It may be that all components have already been imported
+PrintReport();
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions("h" => \$help, "v+" => \$verbose, "f" => \$force, "r" => \$ftpResume, "p=s" => \$passphraseFile, "noPassphraseRetry" => \$noPassphraseRetry);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  if (scalar(@ARGV) == 1) {
+    if (-f $ARGV[0]) {
+      open IN, $ARGV[0] or die "Error: Couldn't open $ARGV[0] for reading: $!\n";
+      while (my $line = <IN>) {
+	chomp $line;
+	$line =~ s/^\s*$//;
+	$line =~ s/#.*//;
+	if ($line eq '') {
+	  next; #Nothing left
+	}
+	my ($comp, $ver) = split(" ", $line);
+	if (defined $comp and defined $ver) {
+	  $releases{lc($comp)}->{$ver} = 1;
+	}
+	else {
+	  print "Error: Invalid file format in $ARGV[0]\n";
+	  Usage(1);
+	}
+      }
+      close IN;
+    }
+    else {
+      print "Error: $ARGV[0] is not a file\n";
+      Usage(1);
+    }
+  }	
+  elsif (scalar(@ARGV) == 2) {
+    $releases{lc($ARGV[0])}->{$ARGV[1]} = 1;
+  }
+  else {
+    print "Error: Invalid arguments\n";
+    Usage(1);
+  }
+  $iniData = IniData->New(undef,1);
+  $commandController = CommandController->New($iniData, 'ImportRel');
+  #if ftp resume option is used override value in reltools.ini
+  if ($ftpResume) {
+    $iniData->FtpServerSupportsResume(1);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: importrel [options] (<component> <version>) | (<component_ver_list_file>)
+
+options:
+
+-h  help
+-f  force import overwriting if necessary
+-r  use FTP reconnect and resume transfer mode
+-p <file> file containing passphrase
+-v  verbose output (-vv very verbose)
+--noPassphraseRetry  Will cause ImportRel to terminate if an incorrect passphrase is specified\n");
+}
+
+sub CheckAlreadyImported {
+#remove releases from attempted imports if they already exist locally
+  unless ($force) {
+    foreach my $comp (sort keys %releases) {
+      foreach my $ver (keys %{$releases{$comp}}) {
+	my $loc = $iniData->PathData->LocalArchivePathForExistingComponent($comp, $ver);
+	if ($loc && -d $loc) { 
+	  push (@{$alreadyImported{$comp}}, $ver);          
+	  print "$comp $ver already exists in local archive\n" if ($verbose);
+	  delete $releases{$comp}->{$ver};
+	  unless (scalar(keys %{$releases{$comp}}) > 0) {
+	    delete $releases{$comp};
+	  }
+	}	
+      }
+    }
+  }
+}
+
+sub ReadPassphraseFile {
+  return undef unless $passphraseFile;
+  open(PP, $passphraseFile) or die "Couldn't open passphrase file \"$passphraseFile\" because $!\n";
+  my $passphrase = join ("\n", <PP>);
+  close PP;
+  return $passphrase;
+}
+
+sub ImportRelease {
+  my $importer = RelTransfer::Import->New(ini_data => $iniData,
+					  force => $force,
+					  verbose => $verbose,
+            passphrase => ReadPassphraseFile);
+  #do the import
+  foreach my $comp (sort keys %releases) {
+    my $imported;
+    foreach my $ver (keys %{$releases{$comp}}) {
+      eval {
+        $imported = $importer->TransferRelease($comp, $ver, $noPassphraseRetry);
+      };
+      if ($@) {
+        print $@;
+        if ($@ =~ /cannot\s+connect/i) {
+          print "\nConnection to remote site dropped aborting import\n";
+          last;
+        }
+        my $error = $@;
+        chomp $error;
+        $error =~ s/^error: ("?$comp $ver"? )?//i;
+        $failedImports{$comp}->{$ver} = $error;
+      }
+      else {
+        if ($imported) {
+          push (@{$goodImports{$comp}}, $ver);
+        } else {
+          push (@{$alreadyImported{$comp}}, $ver);
+        }
+      }
+    }
+  }
+}
+
+sub PrintReport { 
+  print "\n=========IMPORT SUMMARY==========\n";
+
+  my $tableData = [["Component", "Version", "status"]];
+
+  foreach my $comp (sort keys %goodImports) {
+    foreach my $ver (@{$goodImports{$comp}}) {
+      push (@$tableData, [$comp, $ver, 'successfully imported']);
+    }
+  }
+    
+  foreach my $comp (sort keys %alreadyImported) {
+    foreach my $ver (@{$alreadyImported{$comp}}) {
+      push (@$tableData, [$comp, $ver, 'has already been imported']);
+    }
+  }
+  
+  if (scalar @{$tableData} > 1) {
+    $iniData->TableFormatter->PrintTable($tableData, 1);
+  }
+  
+  if (scalar (keys %alreadyImported) > 0) {
+    print "\nYou can specify the -f option to force the re-import of component releases\n";
+  }
+  
+  #handle failed imports
+  if (keys %failedImports) {
+    print "\n=========FAILED IMPORTS==========\n";
+    my $failureTableData = [["Component", "Version", "Failure reason"]];
+    foreach my $comp (sort keys %failedImports) {
+      foreach my $ver (sort keys %{$failedImports{$comp}}) {
+        push (@$failureTableData, [$comp, $ver, $failedImports{$comp}->{$ver}]);
+      }
+    }
+    $iniData->TableFormatter->PrintTable($failureTableData, 1);
+    print "\nError: Unable to import component release successfully.  Component release might be corrupted.\n";
+  }
+  else
+  {
+    if (keys %goodImports) {
+      print "\nAll releases imported successfully\n";
+    } else {
+      print "\nNothing to do!\n";
+    }
+  }
+}
+
+  
+__END__
+
+=head1 NAME
+
+ImportRel - Imports a component release from a remote site.
+
+=head1 SYNOPSIS
+
+  importrel [options] (<component> <version>) | (<component_ver_list_file>)
+
+options:
+
+  -h  help
+  -f  force import overwriting if necessary
+  -r  use FTP reconnect and resume transfer mode
+  -p <file> file containing passphrase
+  -v  verbose output (-vv very verbose)
+  --noPassphraseRetry  Will cause ImportRel to terminate if an incorrect passphrase is specified
+
+=head1 DESCRIPTION
+
+Attempts to import the component release specified on the command line from the projects remote site to the local archive.
+
+The name of file containing a list of components and versions maybe passed as an argument to the tool instead of a single component to import multiple releases.
+
+Using the C<-f> option will force releases to be imported even if they already exist in the local archive.
+
+If the C<-r> option is used and the FTP connection is dropped during the download of a release, the tools will automatically reconnect to the FTP site and resume the download. This feature may not be supported by some FTP servers.
+
+It is recommended NOT to use the C<-p> option as it may be a security risk. You will be prompted if a passphrase is needed.
+
+=head1 KNOWN BUGS
+
+None
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/ImportRel.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/IniData.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1267 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+package IniData;
+
+use strict;
+use FindBin;
+use File::Path;
+use File::Spec;
+use Utils;
+use PathData;
+
+our $cache = {}; # Persistent (private) cache
+
+$|++;
+
+#
+# Constants.
+#
+
+my $iniName = \ 'reltools.ini';
+my $envDir = undef; # only filled in when we do New()
+my $binDir = \ "$FindBin::Bin\\";
+my @standardIgnores = ('\\epoc32\\build\\*',
+           '\\epoc32\\wins\\c\\*',
+           '\\epoc32\\winscw\\c\\*',
+           '\\epoc32\\release\\*.ilk',
+           '\\epoc32\\release\\*.bsc',
+           '\\epoc32\\data\\emulator\\*.sys.ini',
+           '\\epoc32\\release\\tools\\*',
+           '\\epoc32\\release\\tools2\\*'
+          );
+
+# Support for target alias file
+use constant CBR_TARGET_ALIAS_LOCATION => scalar "\\epoc32\\tools\\variant\\";
+
+#
+# Constructor
+#
+
+sub New {
+  my $pkg = shift;  
+  my $filename = shift;
+  my $ignoreepocroot = shift;
+
+  if ( defined ($ENV{EPOCROOT}) or ! $ignoreepocroot ){
+     $envDir = \ Utils::PrependEpocRoot("\\epoc32\\relinfo\\");
+  }
+  
+  my $self = {};
+  
+  $self->{warnIniLocation} = 0;
+  # Support for target alias file
+  # This is a persistant flag.
+  # If set then a warning must be printed if either HasTargetPlatforms()
+  # or TargetPlatforms() is used. The flag is then cleared thus the warning is a one off.
+  # If clear this is because the cbrtargetsalias.cfg file has been found
+  # or the no_target_alias_warning flag is set in reltools.ini
+  $self->{mustWarnTargetAliasLocation} = 1;
+  if (defined $filename and -e $filename ) {
+    $self->{iniFileName} = $filename;
+  } elsif (defined $$envDir and -e "$$envDir$$iniName" ) {
+    $self->{iniFileName} = "$$envDir$$iniName";
+  } elsif (-e "$$binDir$$iniName") {
+    $self->{warnIniLocation} = 1;
+    $self->{iniFileName} = "$$binDir$$iniName";
+  } else {
+    my $msg = "Error: \"$$iniName\" not found in ";
+    $msg = $msg."either \"$$envDir\" or " if ( defined ($$envDir));
+    $msg = $msg."\"$$binDir\"\n";
+    die $msg;
+  }
+
+  if ($cache->{lc($self->{iniFileName})}) {           
+    return $cache->{lc($self->{iniFileName})};
+  }
+
+  foreach my $thisIgnore (@standardIgnores) {
+    push (@{$self->{binIgnore}}, $thisIgnore);
+  }
+
+  bless $self, $pkg; # $self isn't blessed until we know we need it
+
+  $self->ReadIni();
+
+  # Support for target alias file
+  if (!$ignoreepocroot) {
+    $self->{targetAliasName} = Utils::PrependEpocRoot(CBR_TARGET_ALIAS_LOCATION).'cbrtargetalias.cfg';
+
+    if ($self->ReadTargetAliasFile == 1) {
+      # Successful read so clear the warning flag
+      $self->{mustWarnTargetAliasLocation} = 0;
+    }
+  }
+
+  $cache->{lc($self->{iniFileName})} = $self;
+
+  return $self;
+}
+
+#
+# Public
+#
+
+sub DiffTool {
+  my $self = shift;
+  unless (exists $self->{diff_tool}) {
+    return undef;
+  }
+  return $self->{diff_tool};
+}
+
+sub RequireInternalVersions {
+  my $self = shift;
+  if (exists $self->{require_internal_versions}) {
+    return 1;
+  }
+  return 0;
+}
+
+sub IgnoreSourceFilterErrors {
+  my $self = shift;
+  if (exists $self->{ignore_source_filter_errors}) {
+    return 1;
+  }
+  return 0;
+}
+
+sub RemoteSiteType {
+  my $self = shift;
+
+  unless (exists $self->{remote_site_type}) {
+    $self->{remote_site_type} = 'FTP';
+  }
+  elsif ($self->{remote_site_type} =~ /(network|drive)/i) {
+    $self->{remote_site_type} = 'NetDrive';
+  }
+  elsif ($self->{remote_site_type} =~ /experimentalproxy/i) {
+    $self->{remote_site_type} = 'FTP::Proxy::Experimental';
+  }
+  elsif ($self->{remote_site_type} =~ /experimentalftp/i) {
+    $self->{remote_site_type} = 'FTP::Experimental';
+  }
+  elsif ($self->{remote_site_type} =~ /multivolumeexport/i) {
+    $self->{remote_site_type} = 'NetDrive::MultiVolumeExport';
+  }
+  elsif ($self->{remote_site_type} =~ /multivolumeimport/i) {
+    $self->{remote_site_type} = 'NetDrive::MultiVolumeImport';
+  }
+  elsif ($self->{remote_site_type} =~ /proxy/i) {
+    $self->{remote_site_type} = 'FTP::Proxy';
+  }  
+  else {
+    $self->{remote_site_type} = 'FTP';
+  }
+  return $self->{remote_site_type};
+}
+
+sub RemoteHost {
+  my $self = shift;
+  unless (exists $self->{remote_host}) {
+    return undef;
+  }
+  return $self->{remote_host};
+}
+
+sub RemoteUsername {
+  my $self = shift;
+  unless (exists $self->{remote_username}) {
+    return undef;
+  }
+  return $self->{remote_username};
+}
+
+sub RemotePassword {
+  my $self = shift;
+  unless (exists $self->{remote_password}) {
+    return undef;
+  }
+  return $self->{remote_password};
+}
+
+sub RemoteLogsDir {
+  my $self = shift;
+  unless (exists $self->{remote_logs}) {
+    return undef;
+  }
+  return $self->{remote_logs};
+}
+
+sub Proxy {
+  my $self = shift;
+  unless (exists $self->{proxy}) {
+    return undef;
+  }
+  return $self->{proxy};
+}
+
+sub ProxyUsername {
+  my $self = shift;
+  unless (exists $self->{proxy_username}) {
+    return undef;
+  }
+  return $self->{proxy_username};
+}
+
+sub ProxyPassword {
+  my $self = shift;
+  unless (exists $self->{proxy_password}) {
+    return undef;
+  }
+  return $self->{proxy_password};
+}
+
+sub PasvTransferMode {
+  my $self = shift;
+  if (exists $self->{pasv_transfer_mode}) {
+    return 1;
+  }
+  return 0;
+}
+
+sub FtpServerSupportsResume {
+  my $self = shift;
+  if (defined $_[0]) {
+    $self->{ftp_server_supports_resume} = $_[0];
+  }
+  if (exists $self->{ftp_server_supports_resume}) {
+    return $self->{ftp_server_supports_resume} ? 1 : 0;
+  }
+  return 0;
+}
+
+sub FtpTimeout {
+  my $self = shift;
+  unless (exists $self->{ftp_timeout}) {
+    return undef;
+  }
+  return $self->{ftp_timeout};
+}
+
+sub FtpReconnectAttempts {
+  my $self = shift;
+  unless (exists $self->{ftp_reconnect_attempts}) {
+    return undef;
+  }
+  return $self->{ftp_reconnect_attempts};
+}
+
+sub TempDir {
+  my $self = shift;
+  if (exists $self->{temp_dir}) {
+    return $self->{temp_dir};
+  }
+  return undef;
+}
+
+sub MaxExportVolumeSize {
+  my $self = shift;
+  if (exists $self->{max_export_volume_size}) {
+    return $self->{max_export_volume_size};
+  }
+  else {
+    return 639 * 1024 * 1024;
+  }
+}
+
+sub PgpTool {
+  my $self = shift;
+
+  unless (exists $self->{pgp_tool}) {
+    $self->{pgp_tool} = 'PGP';
+  }
+  elsif ($self->{pgp_tool} =~ /(gpg|gnupg)/i) {
+    $self->{pgp_tool} = 'GPG';
+  }
+  else {
+    $self->{pgp_tool} = 'PGP';
+  }
+  return $self->{pgp_tool};
+}
+
+sub PgpEncryptionKeys {
+  my $self = shift;
+  unless (exists $self->{pgp_encryption_keys}) {
+    return [];
+  }
+  return $self->{pgp_encryption_keys};
+}
+
+sub PgpConfigPath {
+  my $self = shift;
+  unless (exists $self->{pgp_config_path}) {
+    return undef;
+  }
+  return $self->{pgp_config_path};
+}
+
+sub ExportDataFile {
+  my $self = shift;
+  unless (exists $self->{export_data_file}) {
+    die "Error: export_data_file keyword not specified in reltools.ini\n";
+  }
+  return $self->{export_data_file};
+}
+
+sub PathData {
+  my $self = shift;
+  unless (defined $self->{pathData}) {
+    $self->{pathData} = PathData->New($self->{verbose});
+  }
+  return $self->{pathData};
+}
+
+sub HtmlNotes {
+  my $self = shift;
+  return (exists $self->{html_notes});
+}
+
+sub FromMapping {
+  my $self = shift;
+  my @fromMapping;
+
+  if(defined @{$self->{from_mapping}}){
+    @fromMapping = @{$self->{from_mapping}};
+  }
+
+  return @fromMapping;
+}
+
+sub ToMapping {
+  my $self = shift;
+  my @toMapping;
+
+  if(defined @{$self->{to_mapping}}){
+    @toMapping = @{$self->{to_mapping}};
+  }
+
+  return @toMapping;
+}
+
+sub HasMappings {
+  my $self = shift;
+  my $result = 0;
+
+  if(defined @{$self->{from_mapping}} && defined @{$self->{to_mapping}} && Utils::SourceRoot() eq "\\"){
+    $result = 1;
+  }
+
+  return $result;
+}
+
+sub PerformMapOnFileName {
+  my $self = shift;
+  my $operand = shift;
+
+  my @fromMapping = $self->FromMapping();
+  my @toMapping  = $self->ToMapping();
+  my $fromMappingSize = @fromMapping;
+
+  unless($operand =~ /^\\.*/) {
+    $operand = "\\"."$operand";  # Add a \\ to the beginning, which is equal to srcroot.
+  }
+
+  if(@fromMapping) {
+    for(my $position = 0; $position<$fromMappingSize; $position++) {
+      if($operand =~ /^\Q$fromMapping[$position]\E/i){
+        $operand =~ s/^\Q$fromMapping[$position]\E/$toMapping[$position]/i;
+        last;
+      }
+    }
+  }
+
+  return $operand;
+}
+
+sub PerformReverseMapOnFileName {
+  my $self = shift;
+  my $operand = shift;
+
+  my @fromMapping = $self->FromMapping();
+  my @toMapping  = $self->ToMapping();
+  my $toMappingSize = @toMapping;
+
+  unless($operand =~ /^\\(.*)/) {
+    $operand = "\\"."$operand";  # Add a \\ to the beginning, which is equal to srcroot.
+  }
+
+  if(@toMapping) {
+    for(my $position = 0; $position<$toMappingSize; $position++) {
+      if($operand =~ /^\Q$toMapping[$position]\E/i){
+        $operand =~ s/^\Q$toMapping[$position]\E/$fromMapping[$position]/i;
+        last;
+      }
+    }
+  }
+
+  return $operand;
+}
+
+sub CheckFileNameForMappingClash {
+  my $self = shift;
+  my $fileName = shift;
+
+  my @toMapping  = $self->ToMapping();
+  my $dirName;
+
+  if($fileName =~ /^(.*)\\/) {
+    $dirName = $1;
+  }
+
+  if(@toMapping) {
+    foreach my $toMap (@toMapping) {
+      if($dirName =~ /^\Q$toMap\E/i) {
+        die "ERROR: Clash in mappings. The local mapping $toMap clashes with the source directory $dirName.\n";
+      }
+    }
+  }
+}
+
+sub RemoteSite {
+  my $self = shift;
+  my $verbose = shift;
+  unless (defined $self->{remoteSite}) {
+    my $module = 'RemoteSite::'.$self->RemoteSiteType();
+    eval "require $module";
+    $self->{remoteSite} = $module->New(host => $self->RemoteHost(),
+               username => $self->RemoteUsername(),
+               password => $self->RemotePassword(),
+               passive_mode => $self->PasvTransferMode(),
+               resume_mode => $self->FtpServerSupportsResume(),
+               proxy => $self->Proxy(),
+               proxy_username => $self->ProxyUsername(),
+               proxy_password => $self->ProxyPassword(),
+               max_export_volume_size => $self->MaxExportVolumeSize(),
+               verbose => $verbose);
+    die "Failed to create remote site object" unless ref $self->{remoteSite};
+  }
+  return $self->{remoteSite};
+}
+
+sub LocalArchivePath {
+  require Carp;
+  Carp->import;
+  confess ("Obsolete method called");
+}
+
+sub RemoteArchivePath {
+  require Carp;
+  Carp->import;
+  confess ("Obsolete method called");
+}
+
+sub ArchivePathFile {
+  require Carp;
+  Carp->import;
+  confess ("Obsolete method called");
+}
+
+sub ListArchiveComponents {
+  require Carp;
+  Carp->import;
+  confess ("Obsolete method called");
+}
+
+sub BinariesToIgnore {
+  my $self = shift;
+  if (exists $self->{binIgnore}) {
+    return $self->{binIgnore};
+  }
+  return [];
+}
+
+sub DisallowUnclassifiedSource {
+  my $self = shift;
+  if (exists $self->{disallow_unclassified_source}) {
+    return 1;
+  }
+  return 0;
+}
+
+sub Win32ExtensionsDisabled {
+  my $self = shift;
+  
+  if (exists $self->{disable_win32_extensions}) {
+    return 1;
+  }
+  return 0;
+}
+
+sub CategoriseBinaries {
+  my $self = shift;
+  if (exists $self->{categorise_binaries}) {
+    return 1;
+  }
+  return 0;
+}
+
+sub CategoriseExports {
+  my $self = shift;
+  if (exists $self->{categorise_exports}) {
+    return 1;
+  }
+  return 0;
+}
+
+sub RequiredBinaries {
+  my $self = shift;
+  my $component = lc(shift);
+  if (exists $self->{required_binaries}->{$component}) {
+    return $self->{required_binaries}->{$component};
+  }
+  elsif (exists $self->{required_binaries}->{default}) {
+    return $self->{required_binaries}->{default};
+  }
+  return undef;
+}
+
+sub TableFormatter {
+  my $self = shift;
+  require TableFormatter;
+  require POSIX;
+  # Not 'use' because not many commands draw tables so that would be a waste
+
+  if (!POSIX::isatty('STDOUT')) {
+    $self->{table_format} = "text";
+    $self->{table_format_args} = "";
+  }
+
+  unless (defined $self->{table_formatter}) {
+    my $format = $self->{table_format} || "text";
+    $self->{table_formatter} = TableFormatter::CreateFormatter($format, $self, $self->{table_format_args});
+  }
+
+  return $self->{table_formatter};
+}
+
+sub LatestVerFilter {
+  my $self = shift;
+  unless (exists $self->{latestver_filter}) {
+    return undef;
+  }
+  return $self->{latestver_filter};
+}
+
+sub IllegalWorkspaceVolumes {
+  my $self = shift;
+  if (defined $self->{illegal_workspace_volumes}) {
+    return @{$self->{illegal_workspace_volumes}};
+  }
+  return ();
+}
+
+#
+# Private
+#
+
+sub CheckMappingPath {
+  my $self = shift;
+  my $operand = shift;
+
+  # Is used to clean up the mapping path.
+
+  $operand =~ s/\//\\/g;
+
+  die "Error: The source_map path $operand must not include a drive letter.\n" if ($operand =~ /^.:/);
+  die "Error: The source_map path $operand must be an absolute path without a drive letter.\n" if ($operand !~ /^\\/);
+  die "Error: The source_map path $operand must not be a UNC path.\n" if ($operand =~ /^\\\\/);
+
+  #Remove any \\ at the end of the path.
+  if($operand =~ /(.*)\\$/){
+    $operand = $1;
+  }
+
+  return $operand;
+}
+
+sub BuildSystemVersion {
+  my $self = shift;
+  my $verbose = shift;
+  
+  if (exists $self->{sbs_version}) {
+  	print "User set the value of sbs_version to $self->{sbs_version}\n" if($verbose);
+    return $self->{sbs_version};
+  }
+  return "0";
+}
+
+sub ExtractMapping {
+  my $self = shift;
+  my $operand = shift;
+  my $epoc32dir = Utils::EpocRoot()."epoc32";
+
+  $operand =~ s/\s+$//;
+
+  if ($operand =~ /^(\S+)\s+(\S+)$/) {
+    my $archivePath = $self->CheckMappingPath($1);
+    my $localPath = $self->CheckMappingPath($2);
+
+    if($archivePath =~ /^\Q$epoc32dir\E/i){
+      die "ERROR: Archive path $epoc32dir... in source mapping is not allowed.\n";
+    }
+    elsif($localPath =~ /^\Q$epoc32dir\E/i){
+      die "ERROR: Local path $epoc32dir... in source mapping is not allowed.\n";
+    }
+
+    # Need to check whether the from location is already present in from_mapping array
+    if(defined @{$self->{from_mapping}}){
+      foreach my $fromMap (@{$self->{from_mapping}}) {
+        if(($archivePath =~ /^\W*\Q$fromMap\E\W*$/i) || ($fromMap =~ /^\W*\Q$archivePath\E\W*$/i)){
+          die "ERROR: Duplicate <archive_source_directory> $fromMap, <archive_source_directory> $archivePath found in source mappings.\n";
+  }
+      }
+    }
+
+    # Need to check whether the to location is already present in to_mapping array
+    if(defined @{$self->{to_mapping}}){
+      foreach my $toMap (@{$self->{to_mapping}}) {
+        if(($localPath =~ /^\W*\Q$toMap\E\W*$/i) || ($toMap =~ /^\W*\Q$localPath\E\W*$/i)){
+          die "ERROR: Duplicate <local_source_directory> $toMap, <local_source_directory> $localPath found in source mappings.\n";
+    }
+      }
+    }
+
+    push @{$self->{from_mapping}}, $archivePath;
+    push @{$self->{to_mapping}}, $localPath;
+  }
+  else{
+    die "ERROR: Incorrect usage of source_map keyword in reltools.ini. Expected input is source_map <archive_source_directory> <local_source_directory>\n";
+  }
+}
+
+sub ReadIni {
+  my $self = shift;
+
+  open (INI, $self->{iniFileName}) or die "Unable to open \"$self->{iniFileName}\" for reading: $!\n";
+
+  while (local $_ = <INI>) {
+    # Remove line feed, white space and comments.
+    chomp;
+    s/^\s*$//;
+    
+    # INC105677 - Warn user if remote_password contains an unescaped #
+    if (/remote_password\s+\S*[^\\\s]\#/) {
+      warn "Warning: remote_password appears to contain a comment (# characters need to be escaped)\n";
+    }
+    
+    s/(?<!\\)#.*//; # remove comments unless they are immediately preceded by \ (negative lookbehind assertion)
+    s/\\#/#/g; # now remove backslashes before # signs
+    
+    if ($_ eq '') {
+      # Nothing left.
+      next;
+    }
+
+    my $keyWord;
+    my $operand;
+    if (/^(\w+)\s+(.*)/) {
+      $keyWord = $1;
+      $operand = $2;
+    }
+    else {
+      # Must be a line with no operand.
+      $keyWord = $_;
+    }
+
+    unless (defined $keyWord) {
+      die "Error: Invalid line in \"$self->{iniFileName}\":\n\t$_\n";
+      next;
+    }
+
+    if ($keyWord =~ /^diff_tool$/i) {
+      Utils::StripWhiteSpace(\$operand);
+      $self->{diff_tool} = $operand;
+    }
+    elsif ($keyWord =~ /^require_internal_versions$/) {
+      $self->{require_internal_versions} = 1;
+    }
+    elsif ($keyWord =~ /^ignore_source_filter_errors$/) {
+      $self->{ignore_source_filter_errors} = 1;
+    }
+    elsif ($keyWord =~ /^html_notes$/) {
+      $self->{html_notes} = 1;
+    }
+    elsif ($keyWord =~ /^temp_dir$/) {
+      Utils::StripWhiteSpace(\$operand);
+      $operand = File::Spec->catdir($operand);
+      $operand =~ s/[\\\/]$//;
+      if (!-d $operand  && length $operand) {
+        die "Error: Invalid line in \"$self->{iniFileName}\":\n\t$_\n$operand does not exist or is an invalid directory name\n";
+      }
+      $self->{temp_dir} = $operand;
+    }   
+    elsif ($keyWord =~ /^remote_site_type$/) {
+      Utils::StripWhiteSpace(\$operand);
+      $self->{remote_site_type} = $operand;
+    }
+    elsif ($keyWord =~ /^remote_host$/) {
+      Utils::StripWhiteSpace(\$operand);
+      $self->{remote_host} = $operand;
+    }
+    elsif ($keyWord =~ /^remote_username$/) {
+      Utils::StripWhiteSpace(\$operand);
+      $self->{remote_username} = $operand;
+    }
+    elsif ($keyWord =~ /^remote_password$/) {
+      Utils::StripWhiteSpace(\$operand);
+      $self->{remote_password} = $operand;
+    }
+    elsif ($keyWord =~ /^remote_logs_dir$/) {
+      Utils::StripWhiteSpace(\$operand);
+      $self->{remote_logs} = $operand;
+    }
+    elsif ($keyWord =~ /^pgp_tool$/) {
+      Utils::StripWhiteSpace(\$operand);
+      $self->{pgp_tool} = $operand;
+    }
+    elsif ($keyWord =~ /^pgp_encryption_key$/) {
+      Utils::StripWhiteSpace(\$operand);
+      push @{$self->{pgp_encryption_keys}}, $operand;
+    }
+    elsif ($keyWord =~ /^pgp_config_path$/) {
+      Utils::StripWhiteSpace(\$operand);
+      $self->{pgp_config_path} = $operand;
+    }
+    elsif ($keyWord =~ /^export_data_file$/) {
+      Utils::StripWhiteSpace(\$operand);
+      $self->{export_data_file} = $operand;
+    }
+    elsif ($keyWord =~ /^archive_path_file$/) {
+      $self->PathData->ProcessLine(\$keyWord, \$operand);
+    }
+    elsif ($keyWord =~ /^archive_path$/) {
+      $self->PathData->ProcessLine(\$keyWord, \$operand);
+    }
+    elsif ($keyWord =~ /^source_map$/) {
+       $self->ExtractMapping($operand);
+    }
+    elsif ($keyWord =~ /^no_ini_location_warning$/) {
+      $self->{warnIniLocation} = 0;
+    }
+    elsif ($keyWord =~ /^ignore_binary$/) {
+      Utils::StripWhiteSpace(\$operand);
+      push (@{$self->{binIgnore}}, $operand);
+    }
+    elsif ($keyWord =~ /^proxy$/) {
+      Utils::StripWhiteSpace(\$operand);
+      $self->{proxy} = $operand;
+    }
+    elsif ($keyWord =~ /^proxy_username$/) {
+      Utils::StripWhiteSpace(\$operand);
+      $self->{proxy_username} = $operand;
+    }
+    elsif ($keyWord =~ /^proxy_password$/) {
+      Utils::StripWhiteSpace(\$operand);
+      $self->{proxy_password} = $operand;
+    }
+    elsif ($keyWord =~ /^pasv_transfer_mode$/) {
+      $self->{pasv_transfer_mode} = 1;
+    }
+    elsif ($keyWord =~ /^ftp_server_supports_resume$/) {
+      $self->{ftp_server_supports_resume} = 1;
+    }
+    elsif ($keyWord =~ /^ftp_timeout$/) {
+      Utils::StripWhiteSpace(\$operand);
+      $self->{ftp_timeout} = $operand;
+    }
+    elsif ($keyWord =~ /^ftp_reconnect_attempts$/) {
+      Utils::StripWhiteSpace(\$operand);
+      $self->{ftp_reconnect_attempts} = $operand;
+    }
+    elsif ($keyWord =~ /^max_export_volume_size$/) {
+      Utils::StripWhiteSpace(\$operand);
+      $self->{max_export_volume_size} = $operand;
+    }
+    elsif ($keyWord =~ /^disallow_unclassified_source$/) {
+      $self->{disallow_unclassified_source} = 1;
+    }
+    elsif ($keyWord =~ /^disable_win32_exten[ts]ions$/) {
+      $self->{disable_win32_extensions} = 1;
+    }
+    elsif ($keyWord =~ /^categori[sz]e_binaries$/) {
+      $self->{categorise_binaries} = 1;
+    }
+    elsif ($keyWord =~ /^categori[sz]e_exports$/) {
+      $self->{categorise_exports} = 1;
+    }
+    elsif ($keyWord =~ /^latestver_filter$/) {
+      Utils::StripWhiteSpace(\$operand);
+      require Text::Glob;
+      $self->{latestver_filter} = Text::Glob::glob_to_regex($operand);;
+    }    
+    elsif ($keyWord =~ /^required_binaries$/) {
+      Utils::StripWhiteSpace(\$operand);
+      (my $component, my $required, my $dummy) = split (/\s+/, $operand);
+      if ($dummy or not ($component and $required)) {
+        die "Error: Invalid line in \"$self->{iniFileName}\":\n\t$_\n";
+        next;
+      }
+      push (@{$self->{required_binaries}->{lc($component)}}, lc($required));
+    }
+    #Support for target alias file
+    elsif ($keyWord =~ /^no_target_alias_warning$/) {
+      $self->{mustWarnTargetAliasLocation} = 0;
+    }
+    elsif ($keyWord =~ /^table_format$/) {
+      Utils::StripWhiteSpace(\$operand);
+      (my $format, my $args) = $operand =~ m/^(\w+)(.*)$/;
+      Utils::StripWhiteSpace(\$args);
+      $self->{table_format} = $format;
+      $self->{table_format_args} = $args;
+    }
+    elsif ($keyWord =~ /^illegal_workspace_volumes$/) {
+      Utils::StripWhiteSpace(\$operand);
+      if ($operand !~ /^[a-z\s,]+$/i) {
+        die "Error: Invalid line in \"$self->{iniFileName}\":\n\t$_\n";
+      }
+      @{$self->{illegal_workspace_volumes}} = split /\s*,\s*/,$operand;
+    }
+    elsif ($keyWord =~ /^use_distribution_policy_files_first/) {
+      $self->{use_distribution_policy_files_first} = 1;
+    }
+    elsif ($keyWord =~ /^csv_separator$/) {
+      Utils::StripWhiteSpace(\$operand);
+      $self->{csv_separator} = $operand;
+    }
+    elsif ($keyWord =~ /^sbs_version$/) {
+      Utils::StripWhiteSpace(\$operand);
+      $self->{sbs_version} = $operand;
+    }
+    else {
+      die "Error: Unknown keyword \"$keyWord\" in \"$self->{iniFileName}\"\n";
+    }
+  }
+  
+  close (INI);
+
+  if ($self->{warnIniLocation}) {
+    if (defined $$envDir){
+       print "Warning: \"$$iniName\" not found in \"$$envDir\", using version found in \"$$binDir\"\n";
+    } else {
+       print "Warning: Using \"$$iniName\" version found in \"$$binDir\"\n";
+    }
+    print "         Use the keyword \"no_ini_location_warning\" to disable this warning.\n";
+  }
+}
+
+sub ReadTargetAliasFile {
+  my $self = shift;
+  
+  if (-e $self->{targetAliasName}) {
+    open (ALIAS, $self->{targetAliasName}) or die "Unable to open \"$self->{targetAliasName}\" for reading: $!\n";
+    # %allValuesSeenSoFar is a temporary hash of all the values seen so far
+    my %allValuesSeenSoFar = ();
+    # %aliasMap is the final hash of keys to values with all aliases expanded out
+    my %aliasMap = ();
+    $self->{alias_map} = {};
+    while (local $_ = <ALIAS>) {
+      # Remove line feed, white space and comments.
+      chomp;
+      s/^\s*$//;
+      s/(?<!\\)#.*//; # remove comments unless they are immediately preceded by \ (negative lookbehind assertion)
+      s/\\#/#/g; # now remove backslashes before # signs
+      if ($_ eq '') {
+        # Nothing left.
+        next;
+      }
+      my $keyWord;        # The key field
+      my @valueList;      # The list of values as read from the line.
+      my %seen = ();      # Temporary hash for making values on the line unique
+      if (/^\s*(\S+)\s+(.+)/) {
+        # Uppercase significant
+        $keyWord = uc($1);
+        @valueList = split /\s+/, uc($2);
+        # Check the key for:
+        # A key that has been seen as already as a value i.e. a forward reference - fatal error
+        # A key that has been seen as already as a key i.e. a duplicate key - fatal error
+        if (exists $allValuesSeenSoFar{$keyWord}) {
+          die "Fatal error: Line \"$_\" in $self->{targetAliasName} has forward reference to \"$keyWord\"\n";
+        }
+        elsif (exists $self->{alias_map}->{$keyWord}) {
+          die "Fatal error: Line \"$_\" in $self->{targetAliasName} has duplicate key \"$keyWord\"\n";
+        }
+        # Check for:
+        # Circular references - fatal error
+        # Duplicates in the value list - warn and ignore
+        foreach my $value (@valueList) {
+          if ($value eq $keyWord) {
+            die "Fatal error: Line \"$_\" in $self->{targetAliasName} has circular reference in \"$keyWord\"\n"
+          }
+          elsif (exists $seen{$value}) {
+            print "Warning Line \"$_\" in $self->{targetAliasName} has duplicate value entry \"$value\" in key $keyWord\n";
+          }
+          else {
+            # Add to seen map and uniqueList
+            $seen{$value} = 1;
+            $allValuesSeenSoFar{$value} = 1;
+          }
+        }
+        my @resolvedList = ();  # Resolved aliases
+        # Check for the special use of the value '<EMPTY>'
+        # If this is present then there must be no other values.
+        if (exists $seen{"<EMPTY>"}) {
+          if (scalar (keys %seen) > 1) {
+            die "Fatal error: Multiple targets in list declared \"<EMPTY>\" for alias \"$keyWord\"\n";
+          }
+        } else {
+          # Now can expand the unique list by resolving aliases against existing keys
+          foreach my $uniqueLine (keys %seen) {
+            if (exists $self->{alias_map}->{$uniqueLine}) {
+              # Expand the list to resolve the aliases
+              push(@resolvedList, @{$self->{alias_map}->{$uniqueLine}});
+            }
+            else {
+              # No alias resolution required, just add it
+              push(@resolvedList, $uniqueLine);
+            }
+          }
+        }
+        # Add the resolved list to the aliasMap
+        push( @{$self->{alias_map}->{$keyWord}}, @resolvedList);
+      }
+      else {
+        # A line with no value is illegal.
+        # Grab the key word
+        if (/^\s*(\S+)/) {
+          # Make uppercase as HasTargetPlatforms(), TargetPlatforms()
+          # expects uppercase keys
+          $keyWord = uc($1);
+        } else {
+          die "Fatal error: Fatal parser error.\n"
+        }
+        die "Fatal error: No targets detected for \"$keyWord\"\n"
+      }
+    unless (defined $keyWord) {
+      die "Error: Invalid line in \"$self->{targetAliasName}\":\n\t$_\n";
+      next;
+    }
+  }
+  close (ALIAS);
+  } else {
+    # Failed to find target alias file
+    return 0;
+  }
+  return 1; # Success at reading the file
+}
+
+# Support for target alias file
+# Returns 1 if target platforms exist for a given alias
+# or 0 if no target platforms exist for a given alias
+sub HasTargetPlatforms {
+  my $self = shift;
+  my $alias = shift;
+  $alias = uc($alias);
+  $self->CheckAliasWarning();
+  if (exists $self->{alias_map}) {
+    if (exists $self->{alias_map}->{$alias}) {
+      return 1;
+    }
+  }
+  return 0;
+}
+
+# Support for target alias file
+# Returns the arrary of target platforms for a given alias
+# or undef if no target platforms for a given alias
+sub TargetPlatforms {
+  my $self = shift;
+  my $alias = shift;
+  $self->CheckAliasWarning();
+  $alias = uc($alias);
+  if (exists $self->{alias_map}) {
+    if (exists $self->{alias_map}->{$alias}) {
+      return $self->{alias_map}->{$alias};
+    }
+  }
+  # Nothing found so return the callers argument
+  return [$alias];
+}
+
+sub CheckAliasWarning {
+  my $self = shift;
+  if ($self->{mustWarnTargetAliasLocation} == 1) {
+    print "Warning: \"$self->{targetAliasName}\" not found.\n";
+    print "         Use the keyword \"no_target_alias_warning\" to disable this warning.\n";
+   }
+  $self->{mustWarnTargetAliasLocation} = 0;
+}
+
+sub UseDistributionPolicyFilesFirst {
+  my $self = shift;
+  return !!$self->{use_distribution_policy_files_first};
+}
+
+sub CsvSeparator {
+  my $self = shift;
+  
+  if (defined $self->{csv_separator}) {
+    return $self->{csv_separator};
+  }
+  
+  return ',';
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+IniData.pm - Provides an interface to the data contained in reltools.ini.
+
+=head1 INTERFACE
+
+=head2 New
+
+Expects to find a file named F<reltools.ini> in the release tools directory, dies if it can't. Parses this file according to the following keywords / value pairs:
+
+ require_internal_versions
+ ignore_source_filter_errors
+ no_ini_location_warning
+ disallow_unclassified_source
+ categorise_binaries
+ categorise_exports
+ html_notes
+ archive_path                <archive_name> <archive_path> [<remote_archive_path>]
+ diff_tool                   <tool_name>
+ export_data_file            <file_name>
+ archive_path_file           <file_name>
+ source_map                  <archive_source_directory> <local_source_directory>
+ remote_site_type            <server_type>
+ remote_host                 <host_name>
+ remote_username             <user_name>
+ remote_password             <pass_word>
+ remote_logs_dir             <path>
+ pasv_transfer_mode
+ ftp_server_supports_resume
+ ftp_timeout                 <time_in_seconds>
+ ftp_reconnect_attempts      <positive_integer>
+ proxy                       <host_name>
+ proxy_username              <user_name>
+ proxy_password              <pass_word>
+ pgp_tool                    <tool_name>
+ pgp_encryption_key          <keyid>
+ pgp_config_path             <dir_name>
+ ignore_binary               <wild_file_name>
+ required_binaries           default wins_udeb
+ required_binaries           default thumb_urel
+ table_format                <table_format module>
+ csv_separator               <csv_separator_character>
+ sbs_version                 <symbian_build_system>
+
+It assumes # indicates the start of a comment, unless it is preceded by \.
+
+=head2 DiffTool
+
+Returns the name of the differencing tool specified with the C<diff_tool> keyword.
+
+=head2 RequireInternalVersions
+
+Returns true or false depending on whether the C<require_internal_versions> keyword has been specified.
+
+=head2 IgnoreSourceFilterErrors
+
+Returns true or false depending on whether the C<ignore_source_filter_errors> keyword has been specified.
+
+=head2 RemoteSiteType
+
+Returns the type of server hosting the projects remote release archive. Currently this will return either C<'FTP'>, C<'FTP::Proxy'>, C<'NetDrive'>, C<'NetDrive::MultiVolumeExport'> or C<'NetDrive::MultiVolumeImport'>. The default return value is C<'FTP'> if not set.
+
+=head2 RemoteHost
+
+Returns the host address of the project's remote site. If the remote site is an ftp server this will be an ftp address; if it is a network drive then the return value will be a UNC path.
+
+=head2 RemoteUsername
+
+Returns the username for the project's remote site.
+
+=head2 RemotePassword
+
+Returns the password for the project's remote site.
+
+=head2 RemoteLogsDir
+
+Returns the directory on the project's remote site where release notification logs are to be written.
+
+=head2 PasvTransferMode
+
+Returns true or false depending on whether the C<pasv_transfer_mode> keyword has been specified.
+
+=head2 FtpServerSupportsResume
+
+Returns true or false depending on whether the C<ftp_server_supports_resume> keyword has been specified.
+
+=head2 FtpTimeout
+
+Returns the timeout in seconds allowed before dropping the connection to the FTP server
+
+=head2 FtpReconnectAttempts
+
+Returns the number of attempts to reconnect to the FTP site if the connection is dropped
+
+=head2 Proxy
+
+Returns the FTP address of a proxy server used to connect to the project's FTP site.
+
+=head2 ProxyUsername
+
+Returns the username for a proxy server used to connect to the project's FTP site.
+
+=head2 ProxyPassword
+
+Returns the password for a proxy server used to connect to the project's FTP site.
+
+=head2 RemoteSite
+
+Tries to create a RemoteSite object appropriate to the data in the iniData, and return it. Caches the RemoteSite object so that it is only created once.
+
+=head2 MaxExportVolumeSize
+
+Returns the value specified by the keyword C<max_export_volume_size>. If this has not been specified, returns 639 * 1024 * 1024.
+
+=head2 PgpTool
+
+Returns the command line PGP client used to encrypt and decrypt releases.
+Currently this will return either C<'PGP'> for NAI Inc. PGP or C<'GPG'> for GNU Privacy Guard. The default return value is C<'PGP'> if not set.
+
+=head2 PgpEncryptionKeys
+
+Returns a reference to an array of PGP key ids (an 8 digit hexadecimal number) used to encrypt all release files before exporting to the remote site. Typically these values will correspond to the local sites project PGP keys so that the user may decrypt their own releases.
+
+=head2 PgpConfigPath
+
+Returns the directory where the users PGP configuration and keyring files are stored.
+
+=head2 ArchivePathFile
+
+Returns the name of the archive path file.
+
+=head2 ExportDataFile
+
+Returns the name of the export data file.
+
+=head2 LocalArchivePath
+
+Expects to be passed a component name. Returns the path to the component's local archive (generally on a LAN share).
+
+=head2 RemoteArchivePath
+
+Expects to be passed a component name. Returns the path to the component's remote archive (may be either on a Network share or an FTP site).
+
+=head2 ListArchiveComponents
+
+Returns a list of component names specified in the archive path file. One of these may be 'default' (if this has been specified). The directories pointed to by this may contain multiple components.
+
+=head2 BinariesToIgnore
+
+Returns a reference to a list of binaries to be ignored when scanning the F<\epoc32> tree. These may contain the C<*> wild character.
+
+=head2 DisallowUnclassifiedSource
+
+Returns false unless the C<disallow_unclassified_source> keyword has been specified.
+
+=head2 Win32ExtensionsDisabled
+
+Returns false unless the C<disable_win32_extensions> keyword has been specified. (Spelling C<disable_win32_extentions> also OK!)
+
+=head2 CategoriseBinaries
+
+Returns false unless the C<categorise_binaries> keyword has been specified.
+
+=head2 CategoriseExports
+
+Returns false unless the C<categorise_exports> keyword has been specified.
+
+=head2 TableFormatter
+
+Returns a TableFormatter object, which can be used to print a table.
+
+=head2 RequiredBinaries
+
+Expects to be passed a component name. Returns the required binaries for that component if any were specified using the C<required_binaries> keyword. If none were, then those specified using C<required_binaries default> are returned. If there are none of those either, then C<undef> is returned - this means that all binaries should be used.
+
+=head2 PathData
+
+Returns a PathData object appropriate to the path configuration data in the ini file. This may be a PathData::ProjectBased or a PathData::ComponentBased object.
+
+=head2 FromMapping
+
+Returns an array of <archive_source_directory> mappings. If there are no mappings defined an undefined value is returned.
+
+=head2 ToMapping
+
+Returns an array of <local_source_directory> mappings. If there are no mappings defined an undefined value is returned.
+
+=head2 HasMappings
+
+Returns false if no mappings are defined. Otherwise returns true.
+
+=head2 PerformMapOnFileName
+
+Reads a filename and takes all mappings defined into consideration with <archive_source_directory> being mapped to <local_source_directory>. Returns the new filename, with the mappings processed.
+
+=head2 PerformReverseMapOnFileName
+
+Reads a filename and takes all mappings defined into consideration with <local_source_directory> being mapped to <archive_source_directory>. Returns the new filename, with the mappings processed.
+
+=head2 CheckMappingPath
+
+Expects a mapping path which is checked. Any problems with the path are reported and the program exits. Otherwise returns the checked mapping path.
+
+=head2 ExtractMapping
+
+Is used to extract and store the local and archive mappings directories as defined. If an usage error is encountered, an error message is displayed and the program exits.
+
+=head2 CheckFileNameForMappingClash
+
+Is used to check if any of the mappings defined clash with the filename passed. If there is a clash an error message is shown and the program exits.
+
+=head2 HasTargetPlatforms
+
+Returns true if there is are any target platforms for a given alias. False otherwise.
+
+=head2 TargetPlatforms
+
+Returns a reference to a list containing either the platforms for a given alias or the alias itself (i.e. not an alias but a platform name).
+
+=head2 CsvSeparator
+
+Returns the separator to be used for CSV files, which by default is a comma ','.  Depending on the locale, the separator may be different.  The user can specify the separator required by using the C<csv_separator> keyword.
+
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/InstCol2	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,383 @@
+#!perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use File::Find;
+use File::Copy;
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use Utils;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $dummyRun = 0;
+my $interactive = 0;
+my $force = 0;
+my $wins = 1;
+my $wincw = 1;
+my $udeb = 1;
+my $urel = 1;
+my $comp;
+my %affectedExtentions;
+
+
+#
+# Constants.
+#
+
+my %searchPath = (
+		   wins => {
+			    udeb => '\\epoc32\\release\\wins\\udeb\\z',
+			    urel => '\\epoc32\\release\\wins\\urel\\z'
+			    },
+		   wincw => {
+			    udeb => '\\epoc32\\release\\wincw\\udeb\\z',
+			    urel => '\\epoc32\\release\\wincw\\urel\\z'
+			    }
+		 );
+my $KBinCompareChunkSize = 16 * 1024;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+my $files = FindFiles();
+CopyFiles($files);
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ('bundling');
+  my $help;
+  my $extention;
+  my $winsOnly = 0;
+  my $wincwOnly = 0;
+  my $udebOnly = 0;
+  my $urelOnly = 0;
+  GetOptions('h' => \$help, 'f' => \$force, 'n' => \$dummyRun, 'i' => \$interactive, 'w' => \$winsOnly, 'c' => \$wincwOnly, 'd' => \$udebOnly, 'r' => \$urelOnly, 'v+' => \$verbose);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $extention = lc(shift @ARGV);
+  $comp = shift @ARGV;
+
+  unless ($extention and ($extention eq 'cl' or $extention eq 'bw')) {
+    print "Error: Invalid colour discription\n";
+    Usage(1);
+  }
+  unless (scalar (@ARGV) == 0) {
+    print "Error: Invalid number of arguments\n";
+    Usage(1);
+  }
+  if ($winsOnly and $wincwOnly) {
+    print "Error: -w and -c options are mutually exclusive\n";
+    Usage(1);
+  }
+  if ($udebOnly and $urelOnly) {
+    print "Error: -d and -r options are mutually exclusive\n";
+    Usage(1);
+  }
+
+  if ($winsOnly) {
+    $wincw = 0;
+  }
+  if ($wincwOnly) {
+    $wins = 0;
+  }
+  if ($udebOnly) {
+    $urel = 0;
+  }
+  if ($urelOnly) {
+    $udeb = 0;
+  }
+
+  %affectedExtentions = (
+			  ".a$extention" => '.aif',
+			  ".i$extention" => '.ini',
+			  ".m$extention" => '.mbm'
+			 );
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: instcol2 [options] cl | bw [<component>]
+
+options:
+
+-h  help
+-f  force a copy of everything (i.e. instcol behaviour)
+-n  dummy run (list what would be done, but doesn't do anything)
+-i  interactive mode (ask before copying each file)
+-w  WINS emulator only
+-c  WINCW emulator only
+-d  UDEB builds only
+-r  UREL builds only
+-v  verbose output (-vv very verbose)\n");
+}
+
+sub FindFiles {
+  my @files;
+  if ($comp) {
+    FindCompFiles($comp, \@files);
+  }
+  else {
+    if ($wins) {
+      if ($udeb) {
+	DoFindFiles($searchPath{wins}->{udeb}, \@files);
+      }
+      if ($urel) {
+	DoFindFiles($searchPath{wins}->{urel}, \@files);
+      }
+    }
+    if ($wincw) {
+      if ($udeb) {
+	DoFindFiles($searchPath{wincw}->{udeb}, \@files);
+      }
+      if ($urel) {
+	DoFindFiles($searchPath{wincw}->{urel}, \@files);
+      }
+    }
+  }
+  return \@files;
+}
+
+sub FindCompFiles {
+  my $comp = shift;
+  my $files = shift;
+  my $iniData = IniData->New();
+  my $envDb = EnvDb->Open($iniData, $verbose);
+  unless ($envDb->Version($comp)) {
+    print "Error: \"$comp\" is not currently installed\n";
+    Usage(1);
+  }
+  my $info = $envDb->ListBins($comp);
+  shift @$info; # Get rid of title.
+  foreach my $line (@$info) {
+    unless ($line->[0] =~ /^\\epoc32\\data/i) {
+      my $extention = lc (Extention($line->[0]));
+      if ($extention and ($line->[1] ne EnvDb::STATUS_STRING_MISSING) and exists $affectedExtentions{$extention}) {
+	push (@$files, lc($line->[0]));
+      }
+    }
+  }
+}
+
+sub DoFindFiles {
+  my $path = shift;
+  my $files = shift;
+  my $processFileSub = sub {
+    if (-f $File::Find::name) {
+      my $thisFile = lc($File::Find::name);
+      my $extention = Extention($thisFile);
+      if ($extention) {
+	if (exists $affectedExtentions{$extention}) {
+	  Utils::TidyFileName(\$thisFile);
+	  push (@$files, $thisFile);
+	}
+      }
+    }
+  };
+  if (-e $path) {
+    find($processFileSub, $path);
+  }
+}
+
+sub CopyFiles {
+  my $files = shift;
+  foreach my $thisFile (@$files) {
+    (my $path, my $name, my $ext) = Utils::SplitFileName($thisFile);
+    my $newExt = $affectedExtentions{$ext};
+    my $newName = Utils::ConcatenateDirNames($path, "$name$newExt");
+    CopyFile($thisFile, $newName);
+  }
+}
+
+sub CopyFile {
+  my $from = shift;
+  my $to = shift;
+
+  unless ($force) {
+    if (-e $to) {
+      (my $fromMtime, my $fromSize) = Utils::FileModifiedTimeAndSize($from);
+      (my $toMtime, my $toSize) = Utils::FileModifiedTimeAndSize($to);
+      if ($fromMtime == $toMtime) {
+	print "Last modified times of \"$from\" and \"$to\" are identical\n" if ($verbose > 2);
+	return;
+      }
+      if ($fromSize == $toSize) {
+	if (BinaryCompare($from, $to, $fromSize)) {
+	  print "Binary content of \"$from\" and \"$to\" are identical\n" if ($verbose > 2);
+	  return;
+	}
+	else {
+	  print "Binary content of \"$from\" and \"$to\" are different\n" if ($verbose > 1);
+	}
+      }
+      else {
+	print "Sizes of \"$from\" and \"$to\" are different\n" if ($verbose > 1);
+      }
+    }
+    else {
+      print "\"$to\" does not exist\n" if ($verbose > 1);
+    }
+  }
+
+  if ($interactive) {
+    print "Copy \"$from\" to \"$to\"? [y] ";
+    my $response = <STDIN>;
+    chomp $response;
+    unless ($response =~ /^y$/i or not $response) {
+      return;
+    }
+  }
+
+  if ($verbose) {
+    print "Copying \"$from\" to \"$to\"\n";
+  }
+  unless ($dummyRun) {
+    copy ($from, $to) or die "Error: Couldn't copy \"$from\" to \"$to\": $!\n";
+  }
+}
+
+sub BinaryCompare {
+  my $file1 = shift;
+  my $file2 = shift;
+  my $size = shift;
+  my $identical = 1;
+  open (FILE1, $file1) or die "Error: Couldn't open \"$file1\": $!\n";
+  open (FILE2, $file2) or die "Error: Couldn't open \"$file2\": $!\n";
+  binmode (FILE1);
+  binmode (FILE2);
+  my $bytesCompared = 0;
+  while ($bytesCompared < $size) {
+    my $buf1;
+    my $buf2;
+    my $bytesRead1 = read (FILE1, $buf1, $KBinCompareChunkSize);
+    my $bytesRead2 = read (FILE2, $buf2, $KBinCompareChunkSize);
+    unless ($bytesRead1 eq $bytesRead2) {
+      die "Error: Problem binary comparing \"$file1\" with \"$file2\": $!\n";
+    }
+    $bytesCompared += $bytesRead1;
+    if ($buf1 ne $buf2) {
+      $identical = 0;
+      last;
+    }
+  }
+  close (FILE1);
+  close (FILE2);
+  return $identical;
+}
+
+sub Extention {
+  my $fileName = shift;
+  (my $ext) = $fileName =~ /(\.[^\.]*)$/;
+  return $ext;
+}
+
+__END__
+
+=head1 NAME
+
+InstCol2 - A more controlled instcol.
+
+=head1 SYNOPSIS
+
+  instcol2 [options] cl | bw [<component>]
+
+options:
+
+  -h  help
+  -f  force a copy of everything (i.e. instcol behaviour)
+  -n  dummy run (list what would be done, but doesn't do anything)
+  -i  interactive mode (ask before copying each file)
+  -w  WINS emulator only
+  -c  WINCW emulator only
+  -d  UDEB builds only
+  -r  UREL builds only
+  -v  verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+Symbian tools C<instcol> may be used to configure the emulator to be either colour or monochrome. Files with the extentions F<.aif>, F<.ini>, F<.mbm> are often provided in both colour and monochrome variants. The last two characters of the extention are replaced with F<cl> for colour, or F<bw> for monochrome. To install a particular variant, C<instcol> simply copies files with the required colour variant extention to files with the emulator required extention. For example, F<eikon.mcl> would be copied to a file named F<eikon.mbm> if the emulator were to be configured for colour.
+
+This emulator configuration technique has the unfortunate side effect of making development environments dirty from the point of view of the release tools. It is hoped that this problem will eventually disappear, if support for multiple colour variants of the emulator is dropped. In the meantime, C<InstCol2> was written to provide a higher degree of control over changes made to development environments than that offered by C<instcol>.
+
+C<InstCol2> only copies files if it really has to. A copy will only occur if:
+
+=over 4
+
+=item *
+
+The emulator required extention (F<.aif>, F<.ini> or F<.mbm>) copy of a particular file does not exist.
+
+=item *
+
+The emulator required extention copy for a particular file has a last modified time of less than the required colour variant of the file.
+
+=item *
+
+The emulator required exetention copy for a particular file contains different binary data to the required colour varaint of the file.
+
+=back
+
+=head1 EXAMPLES
+
+ instcol2 -wd cl
+
+Installs the colour variants for the WINS UDEB emulator.
+
+ instcol2 -cr bw alaunch
+
+Installs the monochrome variants for the WINCW UREL emulator for the component C<alaunch>.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/InstCol2.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/InstallSnapShot	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,269 @@
+#!perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use CommandController;
+use CleanEnv;
+use GetEnv;
+
+
+#
+# Constants.
+#
+
+my $KMissingFileName = "__missing.txt";
+my $KCompsFileName = "__comps.txt";
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $reallyClean = 0;
+my $force = 0;
+my $snapShotFileName;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'InstallSnapShot');
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+InstallSnapShot();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ('bundling');
+  my $help;
+  GetOptions('h' => \$help, 'r' => \$reallyClean, 'f' => \$force, 'v+' => \$verbose);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $snapShotFileName = shift @ARGV;
+  defined $snapShotFileName or die Usage(1);
+  unless ($snapShotFileName =~ /\.zip$/i) {
+    $snapShotFileName .= '.zip';
+  }
+
+  unless ($snapShotFileName and scalar(@ARGV) == 0) {
+    print "Error: Invalid number of arguments\n";
+    Usage(1);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: installsnapshot [options] <snap_shot_file_name>
+
+options:
+
+  -h  help
+  -r  really clean
+  -f  force (don't prompt)
+  -v  verbose output (-vv very verbose)\n");
+}
+
+sub InstallSnapShot {
+  my $newEnv = ReadSnapShotEnv();
+  CheckEnvAvailable($newEnv);
+  unless (CleanEnv::CleanEnv($iniData, $reallyClean, $force, $verbose)) {
+    die "\nAborting because environment was not cleaned...\n";
+  }
+  print "Installing snapshot environment...\n";
+  GetEnv::GetEnv($iniData, $newEnv, 0, undef, 0, 0, $verbose, undef, 0);
+  print "Unpacking \"$snapShotFileName\"...\n";
+  Utils::Unzip($snapShotFileName, Utils::EpocRoot(), $verbose, 1);
+  my $problems = 0;
+  unlink (Utils::PrependEpocRoot($KMissingFileName)) or (++$problems and print "Warning: Couldn't delete \"$KMissingFileName\": $!\n");
+  unlink (Utils::PrependEpocRoot($KCompsFileName)) or (++$problems and print "Warning: Couldn't delete \"$KMissingFileName\": $!\n");
+  my $missingFiles = ReadSnapShotMissingFiles();
+  foreach my $thisMissingFile (@$missingFiles) {
+    print "Removing \"$thisMissingFile\"...\n";
+    unlink $thisMissingFile or (++$problems and print "Warning: Couldn't delete \"$thisMissingFile\": $!\n");
+  }
+  if ($problems) {
+    print "There were problems installing this snapshot\n";
+  }
+  else {
+    print "Snapshot \"$snapShotFileName\" successfully installed\n";
+  }
+}
+
+sub CheckEnvAvailable {
+  my $env = shift;
+  print "Checking that all the component releases referred to by snap shot \"$snapShotFileName\" are available...\n" if ($verbose);
+  my $pathData = $iniData->PathData();
+  my $errors = 0;
+  foreach my $thisComp (sort keys %$env) {
+    unless ($pathData->ReleaseExists($thisComp, $env->{$thisComp})) {
+      print "Error: $thisComp $env->{$thisComp} is referred to by snap shot \"$snapShotFileName\" but does not exist\n";
+      $errors = 1;
+    }
+  }
+  if ($errors) {
+    die "Aborting (environment not altered)...\n";
+  }
+}
+
+sub ReadSnapShotEnv {
+  print "Reading snap shot environment details from \"$KCompsFileName\" within \"$snapShotFileName\"...\n" if ($verbose);
+  Utils::InitialiseTempDir($iniData);
+  my %env;
+  eval {
+    Utils::UnzipSingleFile($snapShotFileName, $KCompsFileName, Utils::TempDir(), $verbose);
+    my $file = Utils::ConcatenateDirNames(Utils::TempDir(), $KCompsFileName);
+    open (COMPS, $file) or die "Couldn't open \"$file\": $!\n";
+    while (my $line = <COMPS>) {
+      (my $comp, my $ver) = $line =~ /^(\S+)\s+(\S+)$/;
+      unless ($comp and $ver) {
+	die "Invalid line in \"$file\"\n";
+      }
+      $env{$comp} = $ver;
+    }
+    close (COMPS);
+  };
+  Utils::RemoveTempDir();
+  if ($@) {
+    die "Error: Problem reading environment from snap shot \"$snapShotFileName\": $@";
+  }
+  return \%env;
+}
+
+sub ReadSnapShotMissingFiles {
+  print "Reading list of files missing from snap shot environment from \"$KMissingFileName\" within \"$snapShotFileName\"...\n" if ($verbose);
+  Utils::InitialiseTempDir($iniData);
+  my @missingFiles;
+  eval {
+    Utils::UnzipSingleFile($snapShotFileName, $KMissingFileName, Utils::TempDir(), $verbose);
+    my $file = Utils::ConcatenateDirNames(Utils::TempDir(), $KMissingFileName);
+    open (MISSING, $file) or die "Couldn't open \"$file\": $!\n";
+    while (my $line = <MISSING>) {
+      chomp $line;
+      $line = Utils::PrependEpocRoot($line);
+      push (@missingFiles, $line);
+    }
+    close (MISSING);
+  };
+  Utils::RemoveTempDir();
+  if ($@) {
+    die "Error: Problem reading missing files from snap shot \"$snapShotFileName\": $@";
+  }
+  return \@missingFiles;
+}
+
+__END__
+
+=head1 NAME
+
+InstallSnapShot - Installs a snap shot created with MakeSnapShot.
+
+=head1 SYNOPSIS
+
+  installsnapshot [options] <snap_shot_file_name>
+
+options:
+
+  -h  help
+  -r  really clean
+  -f  force (don't prompt)
+  -v  verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+The release tools exist to make it relatively straight forward to share binary files in a controlled way. In order to acheive a suitable level of control, a fair amount of rigor is imposed on users when they are making releases. There are times when this is inappropriate. For example, if a user wants to temporarily capture the current state of their environment. The commands C<MakeSnapShot> and C<InstallSnapShot> exist to make it easy to accurately capture the current state of an environment, and subsequently revert to it, without the overhead of doing a full environment release. Snap shots should only be used in preference to full environment releases when there is a B<temporary> need to capture an environment, because:
+
+=over 4
+
+=item 1
+
+No mechansims are provided for exporting or importing snap shots.
+
+=item 2
+
+No release notes are provided with snap shots.
+
+=item 3
+
+The contents of snap shots are inherently dirty - they consist of all the files that could not be accounted for with proper releases. Reliance on snap shots as a means of distributing software would therefore eventually become a self defeating activity since the snap shot files would get larger and larger over time.
+
+=back
+
+C<InstallSnapShot> uses a snap shot zip file generated by C<MakeSnapShot> to set the current environment state to that which the specified snap shot was made from. The following steps are performed:
+
+=over 4
+
+=item 1
+
+The environment is cleaned. If the C<-r> option is specified, files that are normally ignored (e.g. the contents of F<\epoc32\build>) are also removed. If the C<-f> option is specified, the cleaning process is carried out without warning the user before deleting files and reinstalling components.
+
+=item 2
+
+Component releases are installed, removed or upgraded in such a way as to set the current environment to that which was present when the snap shot was made.
+
+=item 3
+
+The contents of the snap shot zip file is installed, overwriting exisitng files, thereby restoring the snap shot, but at the same time making the environment dirty.
+
+=item 4
+
+Any files that were missing from the snap shot environment are removed from the current environment.
+
+=back
+
+C<MakeSnapShot> generates a zip file that contains all the dirty files currently present in the environment. It makes no attempt to understand which component own which files. It also creates some metadata that list the component versions currently installed. This can subsequently be used by C<InstallSnapShot> to revert to the snap shot state.
+
+=head1 STATUS
+
+Supported. If you find a problem, please report it to us.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/InstallSnapShot.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Installation	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,380 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+=head1 User Installation
+
+The configuration management team for the project you are working on will provide you with:
+
+=over 4
+
+=item 1
+
+A release tools distribution F<zip> file.
+
+=item 2
+
+A project specific configuration file (named F<reltools.ini>).
+
+=back
+
+To install the tools, do the following:
+
+=over 4
+
+=item 1
+
+Unpack a release tools distribution F<zip> file into a directory that is present in your path environment variable (or to a new directory and add this to your path).
+
+=item 2
+
+Set up a blank development area. Usually, this would be a substituted drive, but the EPOCROOT and SRCROOT environment variables are supported if you wish to use another mechanism. At this time, the @sdk syntax is not supported - you must explicitly set your EPOCROOT variable. The SRCROOT is assumed to be \ if it is not specified.
+
+=item 3
+
+Copy the F<reltools.ini> file into F<\epoc32\relinfo> in the drive you plan to do development for this project in. This drive should (prior to this) be completely empty. Note, if you are working on more than one project, each development drive must have its own configuration file.
+
+=item 4
+
+If you plan to use the C<DiffRel> command, you will need to add  a line to F<reltools.ini> that specifies the name of the differencing tool to use, e.g.:
+
+  diff_tool  windiff
+
+Note, the tool specifed must be capable of differencing the contents of a pair of directories given their names as command line arguments.
+
+=back
+
+=head1 Perl Versions
+
+The tools should work with Perl 5.005 or higher.
+
+Some tools, notably C<CheckBc>, require Perl version 5.6.1 or higher. This is avaialble from www.activestate.com. Any tools requiring this version of Perl will simply refuse to run: you need not worry about incorrect operation.
+
+At this time, Perl 5.8.0 has bugs and is not recommended.
+
+=head1 Full Configuration
+
+This section describes how to perform a full configuration of the release tools for a particular project. This task is generally undertaken by the project's configuration management team at the start of the project. However as the project evolves, its release structure is likely to evolve also, and so this section also provides the information necessary to maintain existing configuration files.
+
+=head2 reltools.ini
+
+The file F<reltools.ini> must be distributed in the same directory as the rest of the tools. In may contain the following configuration keyword / value pairs (note, the keywords are case sensitive).
+
+Text after # is assumed to be a comment, unless the comment is preceded by \ in which case the # is literal.
+
+=over 4
+
+=item * archive_path_file <file_name>
+
+=item * archive_path <project_name> <local_path> <remote_path>
+
+These keywords are used to inform the tools where to keep releases on the local and remote archives. See the section I<Archive Path> for full details. The first syntax (C<archive_path_file>) is the older style, and specifies where to find a file listing the exact location of each component. This may be a UNC style path to a file on a network share. The newer style lists several areas that the release tools should search to find a particular release.
+
+You must either have a single C<archive_path_file> line, or at least one C<archive_path> line. You cannot use both.
+
+=item * source_map <archive_source_directory> <local_source_directory>
+
+Defines source mappings which are to be applied to a release when using the release tools. A source mapping enables source directories to be extracted, from an archive, to specified locations on the working drive. Enables working on a release which has mapped source. Enables the user to make releases from a mapped location on the working drive to be stored with a specified directory structure in the archive.
+
+=item * export_data_file <file_name>
+
+Specifies the name of the project's export data file (see the section I<Export Data File>) path to a file on a network share. Use of this keyword is mandatory.
+
+=item * require_internal_versions
+
+Normally C<MakeRel> and C<MakeEnv> allow internal versions of releases to be optionally specified. If this keyword is present, they will insist that an internal version is specified.
+
+=item * ignore_source_filter_errors
+
+C<MakeRel> and C<MakeEnv> filter a releases source into C<zip> files corresponding to different categories. The tools can then be configured to restrict access to certain categories of source for each licensee/third party involved in the project. Currently the method for filtering source is to use C<iprtool>. By default, errors occuring during filtering will be stored in the releases C<reldata> file (and shown in the release notes). If this keyword is present, source filter errors will not be stored or shown.
+
+=item * disallow_unclassified_source
+
+By default, unclassified source (i.e. source directories that don't contain a F<distribution.policy> file detailing the source category) is classified as category 'X'. If this keyword is present, then unclassified source will generate an error when an attempt to release it is made (using either C<MakeRel> and C<MakeEnv>).
+
+=item * no_ini_location_warning
+
+By default the tools expect to find the F<reltools.ini> file in F<\epoc32\relinfo>. This is so a single installation of the tools can be used with multiple projects. However, if the file is not found there, it is looked for in the directory the tools are running from. If found, it will be used, but by default a warning is displayed to alert the user that they may be not using the configuration they had intended to use. To disable this warning, specify this keyword in the F<ini> file.
+
+=item * disable_win32_extensions
+
+By default the tools make use of various Win32 Perl modules. These have been found to be faulty on certain Perl releases and so this keyword can be used to disable functionality that depends on them. For the most part, disabling the functionality that uses Win32 will not result in reduced overall functionality, but certain operations may take longer to process. However, when they are disabled the tools will not be able to protect themselves against the user running commands concurrently in an unsafe way. It is therefore advisable to leave Win32 extensions enabled unless there is a good reason not to do so.
+
+=item * categorise_binaries
+
+By default component releases contain a single F<zip> file that holds all the released binaries. If this keyword is specified, the tools will categorise the binaries by build variant (e.g. C<wins udeb>, C<test thumb urel>, etc.). Having done this, the C<required_binaries> keyword can be used to choose a sub-set of the available binaries for a particular project. Note, this keyword can also be spelt C<categorize_binaries>. Note also, this keyword has only existed since release 2.50 of the tools. Any releases generated using categorised binaries must be installed using a version of the tools >= 2.50.
+
+=item * categorise_exports
+
+By default component exports (header files etc.) are included in the main binaries F<zip> file of each component release. This means that they are available to all parties that have access to the corresponding releases. If this keyword is specified, the tools will categorise exports according to the same rules as source code. This allows access to exports to be restricted in the same way as for source code (see the section F<Export Data File> below). Note, this keyword can also be spelt C<categorize_exports>. Note also, this keyword has only existed since release 2.59 of the tools. Any releases generated using categorised exports must be installed using a version of the tools >= 2.59.
+
+=item * required_binaries <component> <build_description>
+
+By default all available categories of binaries will be installed (when using C<GetRel> and C<GetEnv>) and exported (when using C<ExportRel> and C<ExportEnv>). This keyword can be used to choose a sub-set of the available binary categories (assuming that C<categorise_binaries> was used when the corresponding releases were made, if it wasn't then it will have no effect and you'll get everything). The C<component> argument may be either a valid component name or C<default> which applies to all components. This allows the general policy to be defined using C<default> and exceptions to be defined using specific component names. The C<build_description> argument must be a string made up from valid build commands, separated by underscore ('C<_>') characters. For example, to specify C<thumb> (both C<udeb> and C<urel>) and C<wins udeb> for all components, do:
+
+  required_binaries  default   thumb
+  required_binaries  default   wins_udeb
+
+To override the defaults for the component C<wserve> to C<armi urel> also, add:
+
+  required_binaries  wserv     thumb
+  required_binaries  wserv     wins_udeb
+  required_binaries  wserv     armi_urel
+
+To override the defaults for the component C<e32test> to just C<arm4> test code (both C<udeb> and C<urel>), add:
+
+  required_binaries  e32tools  test_arm4
+
+=item * html_notes
+
+Specifies the behaviour of the tools when displaying the release notes of components made with versions of the tools prior to v2.83.1014, whether to treat text as HTML (thereby allowing tags) or to render notes as plain text (in v2.nn.nn support for the <html> tags to specify whether text is HTML or not was added).
+
+=item * remote_site_type <server_type>
+
+Specifies the type of server hosting the projects remote archive used to share releases between different sites. Must be C<FTP> for an FTP server, C<proxy> for an FTP proxy server, C<NetDrive> for a network drive, C<MultiVolumeExport> to export multiple fixed size volumes, C<MultiVolumeImport> to import multiple volumes.
+
+=item * remote_host <host_name>
+
+Specifies host name of the remote site where the remote archive is stored. This will be a DNS or IP address if the remote site is an FTP site or a UNC path (ie \\server\share) if the remote site is a network drive.
+
+=item * remote_username <username>
+
+Specifies the username required to access the remote site. Not required if the remote site is a network drive.
+Also, not mandatory - if it is not specified in C<reltools.ini> then it will be prompted for when it is needed.
+
+=item * remote_password <password>
+
+Specifies the password required to access the remote site. Not required if the remote site is a network drive.
+Also, not mandatory - if it is not specified in C<reltools.ini> then it will be prompted for when it is needed.
+
+=item * remote_logs_dir <directory>
+
+An optional keyword which specifies a directory on the remote host in which to write a log of releases that have been successfully exported. The log is an empty file with a name composed of the component name and version.
+
+=item * pasv_transfer_mode
+
+If this keyword is specified and the remote site is an FTP server (or proxy) then the tools will connect to the server in passive mode. Passive mode is required to access some FTP sites (behind firewalls for example). If the export/import tools freeze after connecting then try using this keyword.
+
+=item * ftp_server_supports_resume
+
+If this keyword is specified and the remote site is an FTP server (or proxy) then the tools will attempt to reconnect and resume an export or import if the FTP connection is dropped during a file transfer. Some FTP servers may not support this feature so the default behaviour is to fail the export/import if the connection is dropped.
+
+=item * ftp_timeout
+
+Specifies the timeout (in seconds) for a connection to an FTP server. This should be set to higher values for poor connections. If not set a default value is chosen.
+
+=item * ftp_reconnect_attempts
+
+Specifies the number of attempts made to reconnect to an FTP server after the connection is dropped. This should be set to higher values for poor connections. If not set a default value is chosen.
+
+=item * proxy <host_name>
+
+Specifies the IP address or DNS name of an FTP proxy server used to access the FTP site containing the remote archive.
+
+=item * proxy_username <username>
+
+Specifies the username required to access the proxy server.
+Not mandatory - if it is not specified in C<reltools.ini> then it will be prompted for when it is needed.
+
+=item * proxy_password <password>
+
+Specifies the password required to access the proxy server.
+Not mandatory - if it is not specified in C<reltools.ini> then it will be prompted for when it is needed.
+
+=item * max_export_volume_size <size_in_bytes>
+
+This keyword relates to remote sites of type C<MultiVolumeExport>. It can be used to specify the maximum size an export volume may reach before then next one is started. By default a value of 670040064 (639 MB) is used, appropriate for volumes that will be transferred to CD.
+
+=item * pgp_tool <tool_name>
+
+The name of the command line PGP tool used to encrypt releases for export and decrypt imported releases. This must be set to either C<PGP> for Network Associates command line PGP (version 6 and 7) or C<GPG> for GNU Privacy Guard PGP tool (version 1.06).
+
+=item * pgp_encryption_key <keyid>
+
+Specifies the ID (an 8 digit hexadecimal number preceeded by C<0x> e.g C<0x8AF34E21>) of a PGP key which will be used to encrypt all release files before exporting to the remote site. This keyword may be used many times with each value being added to a list of key ids. Typically the value of this keyword will be set to the local teams project key id so that they may decrypt their own exported releases.
+
+=item * pgp_config_path <dir_name>
+
+Specifies the directory where the users PGP configuration and keyring files are stored. If not set the default value for the PGP tool will be used.
+
+=item * ignore_binary <wild_file_name>
+
+Specifies files in the F<\epoc32> tree that should be disregarded from the point of view of unknown origin status when an environment scan is performed (scans are done by C<EnvInfo>, C<MakeEnv> and C<CleanEnv>). As standard, the following are ignored (this keyword can be used to add to this list):
+
+ \epoc32\relinfo\*
+ \epoc32\build\*
+ \epoc32\wins\c\*
+ \epoc32\release\*.ilk
+ \epoc32\release\*.bsc
+ \epoc32\data\emulator\*.sys.ini
+
+Note, the only wild character supported is C<*>, and this is 'greedy'. For example, F<\epoc32\build\*> ignores everything in F<\epoc32\build> and all it's sub-directories. F<\epoc32\release\*.ilk> ignores any file ending in F<.ilk> in F<\epoc32\release> and all it's sub-directories.
+
+=item * diff_tool
+
+The tool that C<diffrel> should use to compare two releases.
+
+=item * table_format
+
+The format of the tables produced by the Release Tools. If omitted, text format is used. Tables are produced by many commands, such as C<envinfo>, C<bininfo>, C<latestver> and C<sourceinfo>. These can be difficult to view if the tables are too wide to fit in your terminal. Using this keyword selects an alternative table format. Use one of these options: text, CSV, HTML, Excel or Auto. "Auto" takes an extra argument, for example:
+
+  table_format auto excel
+
+It prompts the tools to show small tables as text, but to use Excel if they are too wide to fit, or have more than a certain number of rows. For normal usage, we recommend "auto excel" or "auto html" because they both auto-fit the column widths and produce easily legible tables.
+
+=back
+
+Here's an example F<reltools.ini> file:
+
+ require_internal_versions
+ disallow_unclassified_source
+ categorise_binaries
+ categorise_exports
+ diff_tool 			windiff
+ table_format                   auto excel
+ archive_path                   pixiework  \\pixieshare\config_man\archive\pixiestuff  /share/archive/pixiestuff
+ archive_path                   ourwork    \\pixieshare\config_man\archive\ourstuff  /share/archive/ourstuff
+ archive_path                   hurricane  \\pixieshare\config_man\archive\hurricane /share/archive/hurricane
+ export_data_file       	 \\pixieshare\config_man\reltools\export_data.csv
+ pgp_tool                       PGP
+ pgp_encryption_key             0x12345678
+ pgp_config_path                \\pixieshare\config_man\reltools\
+ remote_site_type               FTP
+ remote_host		 	ftp.pixie.com
+ remote_username		myusername
+ remote_password		mypassword
+ remote_logs_dir		/release_logs
+ proxy                          myproxyhost
+ proxy_username                 myproxyusername
+ proxy_password                 myproxypassword
+ pasv_transfer_mode
+ ftp_server_supports_resume
+ ftp_timeout                    60
+ ftp_reconnect_attempts         5
+ required_binaries              default wins_udeb
+ required_binaries              default thumb_urel
+
+=head2 Archive Path
+
+The release tools must know where to find (and put) a release, both on the local and remote archives. This information is used primarily whenever a release is made, exported or installed. There are two alternative mechanisms for supplying this information to the release tools. You should choose one or the other.
+
+=over 4
+
+=item Old-style Archive Path File
+
+Some licensees want a single file that lists the exact location of each component. The problem with this arrangement is that the file must be altered if a component moves from one place in the archive to another - which typically happens whenever a Symbian component is branched for the first time, or if responsibility for a component moves from one organisation to another.
+
+If you use a single archive path file, its location should be specified with the C<archive_path_file> keyword in the F<reltools.ini> file. It is recommended that a single copy of this file be placed on a network share, and referred to by the F<reltools.ini> file in the project's release tools distribution F<zip>. This will allow the file to be maintained without having to roll out a new distribution of the release tools. It is also advisable to restrict write access to the file to ensure it doesn't get changed in error.
+
+The archive path file exists to allow sites flexibility in the way their releases are archived. It also allows the maintainer of a remote host to allocate each site that will be delivering software their own directory with appropriate permissions.
+
+The file must contain lines in the following format:
+
+ <component_name> <local_archive_path> <remote_archive_path>
+
+It is also possible to specify a default path, to be used if the paths for a component have not been specified with the above syntax:
+
+ default <local_archive_path> <remote_archive_path>
+
+Here's an example archive path file:
+
+ # Miscellaneous components.
+ default \\pixieshare\release_archive\misc	/mycompany/pixie/misc
+
+ # Components delivered by our company.
+ comp1	\\pixieshare\release_archive\mycompany	/mycompany/pixie
+ comp2	\\pixieshare\release_archive\mycompany	/mycompany/pixie
+
+ # Components delivered by other companies.
+ comp3	\\pixieshare\release_archive\company_x	/company_x/pixie
+ comp4	\\pixieshare\release_archive\company_y	/company_y/pixie
+
+=item New-style Archive Paths
+
+The new mechanism fulfils the same purpose, but with additional flexibility. The release tools will search several areas for a particular release of a component. This allows components to be branched, or experimentally modified by several organisations, without the need to constantly adjust an F<archive_path.txt> file.
+
+With this mechanism, there is no F<archive_path.txt> file. Instead, statements in the F<reltools.ini> provide all the necessary information. These should appear as:
+
+ archive_path <project_name> <local_path> <remote_path>
+
+You would normally have several such lines, listing different areas to search. Each one should belong to one organisation, though an individual may even have their own repository. The project name is just a label, and is reported by various commands such as C<envinfo -f> depending on where the release is stored.
+
+ archive_path pixiework \\pixieshare\config_man\archive\pixiestuff /share/archive/pixiestuff
+ archive_path ourwork   \\pixieshare\config_man\archive\ourstuff   /share/archive/ourstuff
+ archive_path hurricane \\pixieshare\config_man\archive\hurricane  /share/archive/hurricane
+
+The directories are searched in the order they are listed; so if a gnome 002 exists in several places, the first one will be used. All releases are made into the first listed directory by default, though you can choose to place them into another project with the C<-w> switch to C<makerel> and C<makeenv>. When exporting, the release tools will put a release in the remote directory that corresponds to the relevant local directory. The same applies when importing.
+
+Ideally, all the local and remote paths will be different. However, if you're constained by an existing archive structure, you might want different projects to have different local archive paths, and the same remote archive path (or vice versa). In this case, when importing (for example) the release tools may have several possible local directories that they can put a release in. They always choose the one listed first in the F<reltools.ini>.
+
+=back
+
+=head2 Export Data File
+
+In order to use the commands C<ExportEnv> and C<ImportEnv> an export data file must be written and indicated in F<reltools.ini> with the C<export_data_file> keyword. A project's export data file contains a table detailing the source categories each site can have access to for each component. The raw data format of the file must be CSV (comma separated variables), but it is recommended that a spreadsheet such as Excel is used to prepare this to make sure data is in the correct columns. It is also recommended that a single copy of this file be placed on a network share, and referred to by the F<reltools.ini> file in the project's release tools distribution F<zip>. This will allow the file to be maintained without having to roll out a new distribution of the release tools. It is also advisable to restrict write access to the file to ensure it doesn't get changed in error.
+
+Here's an example layout:
+
+             | pgpkeyid_1 (recipient) | pgpkeyid_2 (recipient) | pgpkeyid_3 (recipient) |
+ ------------+------------------------+------------------------+------------------------+--
+ component_1 |          DE            |            E           |          CDE           |
+ ------------+------------------------+------------------------+------------------------+--
+ component_2 |          CDE           |                        |           DE           |
+ ------------+------------------------+------------------------+------------------------+--
+ component_3 |           DE           |            E           |        exclude         |
+ ------------+------------------------+------------------------+------------------------+--
+ component_4 |  exclude_bin DEFG      |       DEFG             |       DEFG             |
+
+
+
+The column headers must contain the recipients PGP key ID - an eight digit hexadecimal number preceeded by C<0x> (e.g C<0xD9A2CE15>). This public PGP key will be used to encrypt all files sent to the recipient. The name of the recipient may also be included in the column header although this is not mandatory.
+
+A cell contains a list of source categories available to the recipient of the component.
+ Each category must be a single letter or digit. Empty cells imply that the recipient
+ does not have access to any source for the corresponding component but can still receive
+binaries.
+
+To prevent a recipient from receiving both source and binaries for the corresponding component, use the keyword C<exclude>. This can be useful when certain recipients may receive releases of some but not all components.
+
+To prevent a recipient from receiving binaries for the corresponding component, use the keyword C<exclude_bin>. Unlike C<exclude>, this does not break any environment.
+
+Components which are not listed in the table but exist on the local site will not be exported to any recipients. However, a warning will be issued to alert the exporter of this situation.
+
+If a licensee or third party does not use C<DISTRIBUTION.POLICY> files to categorize source then all source will have the category X. In this case, putting X in a cell implies that all source for that component will be sent to the recipient, otherwise none will be sent.
+
+Lines starting with a C<#> are treated as comments and ignored.
+
+[NOTE: It is recommended that this file is created and maintained using a spreadsheet
+application (saving as a CSV file) rather than editing it directly.]
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/LatestVer	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,293 @@
+#!perl -w
+# Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'LatestVer');
+my $envDb; # this is only created when needed, by the EnvDb() function
+my $listAll;
+my $userComp;
+my $everyComponent;
+my $versionFilter;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+PrintLatestVersions();
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions('h' => \$help, 'a:i' => \$listAll, 'v+' => \$verbose, 'f=s' => \$versionFilter);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $userComp = shift @ARGV || undef;
+
+  unless ($#ARGV == -1) {
+    print "Error: Invalid arguments\n";
+    Usage(1);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: latestver [options] [component] 
+
+options:
+
+-h   help
+-a   lists all versions in descending date order
+-a 6 list the most recent six versions
+-v   verbose output (-vv very verbose, -vvv very very verbose)
+-f <version wildcard> only show versions whose version numbers match that text\n");
+}
+
+sub PrintLatestVersions {
+  # Convert the version number filter from glob-style to perl-style RE
+  if (defined $versionFilter) {
+		require Text::Glob;
+		# Surprisingly complicated to convert a glob-style to a perl-style RE
+		# Hence we use a module. Not entirely convinced that Text::Glob
+		# does a particularly good job (e.g. the pattern t_make*[0] doesn't work)
+		# but it's better than my attempts, and should suffice for most cases.
+		$versionFilter = Text::Glob::glob_to_regex($versionFilter);
+	}
+
+  # First work out what components we need to process
+  my @compsToProcess;
+  if ($userComp) {
+    @compsToProcess = ($userComp);
+  } else {
+    # Call listcomponents with remote flag set as 0 and continue flag set as 1
+    @compsToProcess = sort @{$iniData->PathData->ListComponents(0,1)};
+  }
+
+  # Second work out what versions we need to process
+  my @compVersions; # contains lots of [ comp_name, reldata ]
+  foreach my $compName (@compsToProcess) {
+    foreach (@{GetRelevantRelDataObjects($compName, $versionFilter)}) {
+      push @compVersions, [ $compName, $_ ];
+    }
+  }
+
+  die "No versions were found.\n" unless (@compVersions);
+
+  # Third work out how verbose to make the output, and do it!
+  if ($verbose) {
+    my @tableData;
+    InsertTableHeadings(\@tableData);
+    AddTableEntry($$_[0], \@tableData, $$_[1]) foreach (@compVersions);
+    print "\n";
+    $iniData->TableFormatter->PrintTable(\@tableData, 1);
+  } else {
+    PrintMinimalVerbosity($$_[0], $$_[1]) foreach (@compVersions);
+  }
+}
+
+sub PrintMinimalVerbosity {
+  my $comp = shift;
+  my $reldata = shift;
+
+  my $ver = $reldata->Version();
+  if ($userComp) {
+    print "$ver\n";
+  } else {
+    print "$comp: $ver\n";
+  }
+}
+
+sub GetRelevantRelDataObjects {
+  my $comp = shift;
+  my $ver = shift;
+
+  my $shownum = $listAll;
+  $shownum = 1 unless defined $listAll;
+
+  my $relDataObjects = RelData->OpenSet($iniData, $comp, $verbose, $ver);
+  $relDataObjects ||= [];
+  splice(@$relDataObjects, $shownum) unless (scalar @$relDataObjects == 0) || ($shownum==0) || ($shownum > @$relDataObjects); # if showNum==0, we got just -a so show all
+  
+  return $relDataObjects;
+}
+
+sub InsertTableHeadings {
+  my $tableData = shift;
+
+  my @headings;
+  @headings = ('Version', 'Internal version', 'Project', 'Releaser', 'Date');
+  if ($verbose > 1) {
+    @headings = ('', @headings);
+  }
+  if ($verbose > 2) {
+    @headings = (@headings, 'Local path', 'Remote path');
+  }
+  if (!$userComp) {
+    @headings = ('Component', @headings);
+  }
+  push @$tableData, \@headings;
+}
+
+sub AddTableEntry {
+  my $comp = shift;
+  my $tableData = shift;
+  my $relData = shift;
+
+  my @fields;
+
+  my $ver = $relData->Version();
+  my $releaser = $relData->NotesSource()->{releaser};
+  chomp $releaser;
+  my $project = $iniData->PathData->ComponentProject($comp, $ver);
+  @fields = ($ver, $relData->InternalVersion(), $project, $releaser, $relData->NotesSource()->{date});
+
+  # We're being very verbose, so add a 'status' field
+  if ($verbose > 1) {
+    my $status = "";
+    # "Installed" flag
+    #
+    my $installedversion = EnvDb()->Version($comp);
+    $status .= "I" if ($installedversion && $installedversion eq $ver);
+
+    # "Exported" flag
+    my $remotePath||="";
+    eval {
+      my $remoteSite = $iniData->RemoteSite(0); # 0 = not verbose
+      if ($remoteSite) {
+        $remotePath = $iniData->PathData->RemoteArchivePathForExistingComponent
+          ($comp, $ver, $remoteSite);
+        $status .= "E" if ($remotePath && $remoteSite->FileExists("$remotePath/$comp$ver.zip") );
+      }
+    };
+
+    unshift @fields, $status;
+
+    if ($verbose > 2) {
+      # We're being extravagently verbose, so add two 'location' fields which will 
+      # wrap off the end of the line - sigh.
+      my $localPath = '"'. $iniData->PathData->LocalArchivePathForExistingComponent
+        ($comp, $ver) .'"';
+      $remotePath = '"'.$remotePath.'"' if ($remotePath);
+      $remotePath ||= '';
+      $localPath ||= '';
+      @fields = (@fields, $localPath, $remotePath);
+    }
+  }
+
+  # If we're listing several components, stick a field on the front
+  # saying which component we're talking about in this case
+  if (!$userComp) {
+    unshift @fields, $comp;
+  }
+  push @$tableData, \@fields;
+}
+
+sub EnvDb {
+  $envDb ||= EnvDb->Open($iniData, $verbose);
+}
+
+__END__
+
+=head1 NAME
+
+LatestVer - Prints the latest version of a particular component.
+
+=head1 SYNOPSIS
+
+  latestver [options] [component]
+
+options:
+
+  -h   help
+  -a   lists all versions in descending date order
+  -a <n>  lists the most recent 'n' versions in descending date order
+  -v   verbose output (-vv very verbose, -vvv very very verbose)
+  -f <wildcard> filter the versions displayed
+
+=head1 DESCRIPTION
+
+Prints the latest version of a particular component, or all known components if the component name is omitted. Optionally prints all versions in descending date order.
+
+If verbose output is requested, the internal version number, storage area ("project"), releaser's name and release time is also displayed.
+
+If very verbose output is requested, and the remote site is set in the reltools.ini file, a "flags" column will be shown with two possible letters:
+
+=over 4
+
+=item I
+
+This version is installed on your machine.
+
+=item E
+
+This version is exported.
+
+=back
+
+Using the -vv option may significantly increase the time this tool takes to run.
+
+If very very verbose is requested the local path is also output to screen.
+
+If you specify a -f version string then only versions whose version numbers contain that wildcard will be shown. The wildcard should be a glob-style regular expression (for example "*chinese*"). It is case-insensitive.
+
+If very very verbose output is requested, two more fields will show the location of the release on the local and remote archives.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/LatestVer.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/MLDBM.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,510 @@
+# Copyright (c) 1995-98 Gurusamy Sarathy.  All rights reserved.
+#
+# Copyright (c) 1998 Raphael Manfredi.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+#
+# MLDBM.pm
+#
+# store multi-level hash structure in single level tied hash (read DBM)
+#
+# Documentation at the __END__
+#
+# Gurusamy Sarathy <gsar@umich.edu>
+# Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
+#
+
+require 5.004;
+use strict;
+
+####################################################################
+package MLDBM::Serializer;	## deferred
+
+use Carp;
+
+#
+# The serialization interface comprises of just three methods:
+# new(), serialize() and deserialize().  Only the last two are
+# _required_ to be implemented by any MLDBM serialization wrapper.
+#
+
+sub new { bless {}, shift };
+
+sub serialize { confess "deferred" };
+
+sub deserialize { confess "deferred" };
+
+
+#
+# Attributes:
+#
+#    dumpmeth:
+#	the preferred dumping method.
+#
+#    removetaint:
+#	untainting flag; when true, data will be untainted after
+#	extraction from the database.
+#
+#    key:
+#	the magic string used to recognize non-natively stored data.
+#
+# Attribute access methods:
+#
+#	These defaults allow readonly access. Sub-class may override
+#	them to allow write access if any of these attributes
+#	makes sense for it.
+#
+
+sub DumpMeth	{
+    my $s = shift;
+    confess "can't set dumpmeth with " . ref($s) if @_;
+    $s->_attrib('dumpmeth');
+}
+
+sub RemoveTaint	{
+    my $s = shift;
+    confess "can't set untaint with " . ref($s) if @_;
+    $s->_attrib('removetaint');
+}
+
+sub Key	{
+    my $s = shift;
+    confess "can't set key with " . ref($s) if @_;
+    $s->_attrib('key');
+}
+
+sub _attrib {
+    my ($s, $a, $v) = @_;
+    if (ref $s and @_ > 2) {
+	$s->{$a} = $v;
+	return $s;
+    }
+    $s->{$a};
+}
+
+####################################################################
+package MLDBM;
+
+$MLDBM::VERSION = $MLDBM::VERSION = '2.00';
+
+require Tie::Hash;
+@MLDBM::ISA = 'Tie::Hash';
+
+use Carp;
+
+#
+# the DB package to use (we default to SDBM since it comes with perl)
+# you might want to change this default to something more efficient
+# like DB_File (you can always override it in the use list)
+#
+$MLDBM::UseDB		= "SDBM_File"		unless $MLDBM::UseDB;
+$MLDBM::Serializer	= 'Data::Dumper'	unless $MLDBM::Serializer;
+$MLDBM::Key		= '$MlDbM'		unless $MLDBM::Key;
+$MLDBM::DumpMeth	= ""			unless $MLDBM::DumpMeth;
+$MLDBM::RemoveTaint	= 0			unless $MLDBM::RemoveTaint;
+
+#
+# A private way to load packages at runtime.
+my $loadpack = sub {
+    my $pack = shift;
+    $pack =~ s|::|/|g;
+    $pack .= ".pm";
+    eval { require $pack };
+    if ($@) {
+	carp "MLDBM error: " . 
+	  "Please make sure $pack is a properly installed package.\n" .
+	    "\tPerl says: \"$@\"";
+	return undef;
+    }
+    1;
+};
+
+
+#
+# TIEHASH interface methods
+#
+sub TIEHASH {
+    my $c = shift;
+    my $s = bless {}, $c;
+
+    #
+    # Create the right serializer object.
+    my $szr = $MLDBM::Serializer;
+    unless (ref $szr) {
+	$szr = "MLDBM::Serializer::$szr"	# allow convenient short names
+	  unless $szr =~ /^MLDBM::Serializer::/;
+	&$loadpack($szr) or return undef;
+	$szr = $szr->new($MLDBM::DumpMeth,
+			 $MLDBM::RemoveTaint,
+			 $MLDBM::Key);
+    }
+    $s->Serializer($szr);
+
+    #
+    # Create the right TIEHASH  object.
+    my $db = $MLDBM::UseDB;
+    unless (ref $db) {
+	&$loadpack($db) or return undef;
+	$db = $db->TIEHASH(@_)
+	  or carp "MLDBM error: Second level tie failed, \"$!\""
+	    and return undef;
+    }
+    $s->UseDB($db);
+
+    return $s;
+}
+
+sub FETCH {
+    my ($s, $k) = @_;
+    my $ret = $s->{DB}->FETCH($k);
+    $s->{SR}->deserialize($ret);
+}
+
+sub STORE {
+    my ($s, $k, $v) = @_;
+    $v = $s->{SR}->serialize($v);
+    $s->{DB}->STORE($k, $v);
+}
+
+sub DELETE	{ my $s = shift; $s->{DB}->DELETE(@_); }
+sub FIRSTKEY	{ my $s = shift; $s->{DB}->FIRSTKEY(@_); }
+sub NEXTKEY	{ my $s = shift; $s->{DB}->NEXTKEY(@_); }
+sub EXISTS	{ my $s = shift; $s->{DB}->EXISTS(@_); }
+sub CLEAR	{ my $s = shift; $s->{DB}->CLEAR(@_); }
+
+sub new		{ &TIEHASH }
+
+#
+# delegate messages to the underlying DBM
+#
+sub AUTOLOAD {
+    return if $MLDBM::AUTOLOAD =~ /::DESTROY$/;
+    my $s = shift;
+    if (ref $s) {			# twas a method call
+	my $dbname = ref($s->{DB});
+	# permit inheritance
+	$MLDBM::AUTOLOAD =~ s/^.*::([^:]+)$/$dbname\:\:$1/;
+	$s->{DB}->$MLDBM::AUTOLOAD(@_);
+    }
+}
+
+#
+# delegate messages to the underlying Serializer
+#
+sub DumpMeth	{ my $s = shift; $s->{SR}->DumpMeth(@_); }
+sub RemoveTaint	{ my $s = shift; $s->{SR}->RemoveTaint(@_); }
+sub Key		{ my $s = shift; $s->{SR}->Key(@_); }
+
+#
+# get/set the DB object
+#
+sub UseDB 	{ my $s = shift; @_ ? ($s->{DB} = shift) : $s->{DB}; }
+
+#
+# get/set the Serializer object
+#
+sub Serializer	{ my $s = shift; @_ ? ($s->{SR} = shift) : $s->{SR}; }
+
+#
+# stuff to do at 'use' time
+#
+sub import {
+    my ($pack, $dbpack, $szr, $dumpmeth, $removetaint, $key) = @_;
+    $MLDBM::UseDB = $dbpack if defined $dbpack and $dbpack;
+    $MLDBM::Serializer = $szr if defined $szr and $szr;
+    # undocumented, may change!
+    $MLDBM::DumpMeth = $dumpmeth if defined $dumpmeth;
+    $MLDBM::RemoveTaint = $removetaint if defined $removetaint;
+    $MLDBM::Key = $key if defined $key and $key;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+MLDBM - store multi-level hash structure in single level tied hash
+
+=head1 SYNOPSIS
+
+    use MLDBM;				# this gets the default, SDBM
+    #use MLDBM qw(DB_File FreezeThaw);	# use FreezeThaw for serializing
+    #use MLDBM qw(DB_File Storable);	# use Storable for serializing
+    
+    $dbm = tie %o, 'MLDBM' [..other DBM args..] or die $!;
+
+=head1 DESCRIPTION
+
+This module can serve as a transparent interface to any TIEHASH package
+that is required to store arbitrary perl data, including nested references.
+Thus, this module can be used for storing references and other arbitrary data
+within DBM databases.
+
+It works by serializing the references in the hash into a single string. In the
+underlying TIEHASH package (usually a DBM database), it is this string that
+gets stored.  When the value is fetched again, the string is deserialized to
+reconstruct the data structure into memory.
+
+For historical and practical reasons, it requires the B<Data::Dumper> package,
+available at any CPAN site. B<Data::Dumper> gives you really nice-looking dumps of
+your data structures, in case you wish to look at them on the screen, and
+it was the only serializing engine before version 2.00.  However, as of version
+2.00, you can use any of B<Data::Dumper>, B<FreezeThaw> or B<Storable> to
+perform the underlying serialization, as hinted at by the L<SYNOPSIS> overview
+above.  Using B<Storable> is usually much faster than the other methods.
+
+See the L<BUGS> section for important limitations.
+
+=head2 Changing the Defaults
+
+B<MLDBM> relies on an underlying TIEHASH implementation (usually a
+DBM package), and an underlying serialization package.  The respective
+defaults are B<SDBM_File> and D<Data::Dumper>.  Both of these defaults
+can be changed.  Changing the B<SDBM_File> default is strongly recommended.
+See L<WARNINGS> below.
+
+Three serialization wrappers are currently supported: B<Data::Dumper>,
+B<Storable>, and B<FreezeThaw>.  Additional serializers can be
+supported by writing a wrapper that implements the interface required by
+B<MLDBM::Serializer>.  See the supported wrappers and the B<MLDBM::Serializer>
+source for details.
+
+In the following, I<$OBJ> stands for the tied object, as in:
+
+	$obj = tie %o, ....
+	$obj = tied %o;
+
+=over 4
+
+=item $MLDBM::UseDB	I<or>	I<$OBJ>->UseDB(I<[TIEDOBJECT]>)
+
+The global C<$MLDBM::UseDB> can be set to default to something other than
+C<SDBM_File>, in case you have a more efficient DBM, or if you want to use
+this with some other TIEHASH implementation.  Alternatively, you can specify
+the name of the package at C<use> time, as the first "parameter".
+Nested module names can be specified as "Foo::Bar".
+
+The corresponding method call returns the underlying TIEHASH object when
+called without arguments.  It can be called with any object that
+implements Perl's TIEHASH interface, to set that value.
+
+=item $MLDBM::Serializer	I<or>	I<$OBJ>->Serializer(I<[SZROBJECT]>)
+
+The global C<$MLDBM::Serializer> can be set to the name of the serializing
+package to be used. Currently can be set to one of C<Data::Dumper>,
+C<Storable>, or C<FreezeThaw>. Defaults to C<Data::Dumper>.  Alternatively,
+you can specify the name of the serializer package at C<use> time, as the
+second "parameter".
+
+The corresponding method call returns the underlying MLDBM serializer object
+when called without arguments.  It can be called with an object that
+implements the MLDBM serializer interface, to set that value.
+
+=back
+
+=head2 Controlling Serializer Properties
+
+These methods are meant to supply an interface to the properties of the
+underlying serializer used.  Do B<not> call or set them without
+understanding the consequences in full.  The defaults are usually sensible.
+
+Not all of these necessarily apply to all the supplied serializers, so we
+specify when to apply them.  Failure to respect this will usually lead to
+an exception.
+
+=over 4
+
+=item $MLDBM::DumpMeth	I<or>  I<$OBJ>->DumpMeth(I<[METHNAME]>)
+
+If the serializer provides alternative serialization methods, this
+can be used to set them.
+
+With B<Data::Dumper> (which offers a pure Perl and an XS verion
+of its serializing routine), this is set to C<Dumpxs> by default if that
+is supported in your installation.  Otherwise, defaults to the slower
+C<Dump> method.
+
+With B<Storable>, a value of C<portable> requests that serialization be
+architecture neutral, i.e. the deserialization can later occur on another
+platform. Of course, this only makes sense if your database files are
+themselves architecture neutral.  By default, native format is used for
+greater serializing speed in B<Storable>.  Both B<Data::Dumper> and
+B<FreezeThaw> are always architecture neutral.
+
+B<FreezeThaw> does not honor this attribute.
+
+=item $MLDBM::Key  I<or>  I<$OBJ>->Key(I<[KEYSTRING]>)
+
+If the serializer only deals with part of the data (perhaps because
+the TIEHASH object can natively store some types of data), it may need
+a unique key string to recognize the data it handles.  This can be used
+to set that string.  Best left alone.
+
+Defaults to the magic string used to recognize MLDBM data. It is a six
+character wide, unique string. This is best left alone, unless you know
+what you are doing. 
+
+B<Storable> and B<FreezeThaw> do not honor this attribute.
+
+=item $MLDBM::RemoveTaint  I<or>  I<$OBJ>->RemoveTaint(I<[BOOL]>)
+
+If the serializer can optionally untaint any retrieved data subject to
+taint checks in Perl, this can be used to request that feature.  Data
+that comes from external sources (like disk-files) must always be
+viewed with caution, so use this only when you are sure that that is
+not an issue.
+
+B<Data::Dumper> uses C<eval()> to deserialize and is therefore subject to
+taint checks.  Can be set to a true value to make the B<Data::Dumper>
+serializer untaint the data retrieved. It is not enabled by default.
+Use with care.
+
+B<Storable> and B<FreezeThaw> do not honor this attribute.
+
+=back
+
+=head1 EXAMPLES
+
+Here is a simple example.  Note that does not depend upon the underlying
+serializing package--most real life examples should not, usually.
+
+    use MLDBM;				# this gets SDBM and Data::Dumper
+    #use MLDBM qw(SDBM_File Storable);	# SDBM and Storable
+    use Fcntl;				# to get 'em constants
+     
+    $dbm = tie %o, 'MLDBM', 'testmldbm', O_CREAT|O_RDWR, 0640 or die $!;
+    
+    $c = [\ 'c'];
+    $b = {};
+    $a = [1, $b, $c];
+    $b->{a} = $a;
+    $b->{b} = $a->[1];
+    $b->{c} = $a->[2];
+    @o{qw(a b c)} = ($a, $b, $c);
+    
+    #
+    # to see what was stored
+    #
+    use Data::Dumper;
+    print Data::Dumper->Dump([@o{qw(a b c)}], [qw(a b c)]);
+    
+    #
+    # to modify data in a substructure
+    #
+    $tmp = $o{a};
+    $tmp->[0] = 'foo';
+    $o{a} = $tmp;
+    
+    #
+    # can access the underlying DBM methods transparently
+    #
+    #print $dbm->fd, "\n";		# DB_File method
+
+Here is another small example using Storable, in a portable format:
+
+    use MLDBM qw(DB_File Storable);	# DB_File and Storable
+    
+    tie %o, 'MLDBM', 'testmldbm', O_CREAT|O_RDWR, 0640 or die $!;
+    
+    (tied %o)->DumpMeth('portable');	# Ask for portable binary
+    $o{'ENV'} = \%ENV;			# Stores the whole environment
+    
+
+=head1 BUGS
+
+=over 4
+
+=item 1.
+
+Adding or altering substructures to a hash value is not entirely transparent
+in current perl.  If you want to store a reference or modify an existing
+reference value in the DBM, it must first be retrieved and stored in a
+temporary variable for further modifications.  In particular, something like
+this will NOT work properly:
+
+	$mldb{key}{subkey}[3] = 'stuff';	# won't work
+
+Instead, that must be written as:
+
+	$tmp = $mldb{key};			# retrieve value
+	$tmp->{subkey}[3] = 'stuff';
+	$mldb{key} = $tmp;			# store value
+
+This limitation exists because the perl TIEHASH interface currently has no
+support for multidimensional ties.
+
+=item 2.
+
+The B<Data::Dumper> serializer uses eval().  A lot.  Try the B<Storable>
+serializer, which is generally the most efficient.
+
+=back
+
+=head1 WARNINGS
+
+=over 4
+
+=item 1.
+
+Many DBM implementations have arbitrary limits on the size of records
+that can be stored.  For example, SDBM and many ODBM or NDBM
+implementations have a default limit of 1024 bytes for the size of a
+record.  MLDBM can easily exceed these limits when storing large data
+structures, leading to mysterious failures.  Although SDBM_File is
+used by MLDBM by default, it is not a good choice if you're storing
+large data structures.  Berkeley DB and GDBM both do not have these
+limits, so I recommend using either of those instead.
+
+=item 2.
+
+MLDBM does well with data structures that are not too deep and not
+too wide.  You also need to be careful about how many C<FETCH>es your
+code actually ends up doing.  Meaning, you should get the most mileage
+out of a C<FETCH> by holding on to the highest level value for as long
+as you need it.  Remember that every toplevel access of the tied hash,
+for example C<$mldb{foo}>, translates to a MLDBM C<FETCH()> call.
+
+Too often, people end up writing something like this:
+
+        tie %h, 'MLDBM', ...;
+        for my $k (keys %{$h{something}}) {
+            print $h{something}{$k}[0]{foo}{bar};  # FETCH _every_ time!
+        }
+
+when it should be written this for efficiency:
+
+        tie %h, 'MLDBM', ...;
+        my $root = $h{something};                  # FETCH _once_
+        for my $k (keys %$root) {
+            print $k->[0]{foo}{bar};
+        }
+
+
+=back
+
+=head1 AUTHORS
+
+Gurusamy Sarathy <F<gsar@umich.edu>>.
+
+Support for multiple serializing packages by
+Raphael Manfredi <F<Raphael_Manfredi@grenoble.hp.com>>.
+
+Copyright (c) 1995-98 Gurusamy Sarathy.  All rights reserved.
+
+Copyright (c) 1998 Raphael Manfredi.
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=head1 VERSION
+
+Version 2.00	10 May 1998
+
+=head1 SEE ALSO
+
+perl(1), perltie(1), perlfunc(1), Data::Dumper(3), FreezeThaw(3), Storable(3).
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/MLDBM/Serializer/Data/Dumper.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,88 @@
+# Copyright (c) 1995-98 Gurusamy Sarathy.  All rights reserved.
+#
+# Copyright (c) 1998 Raphael Manfredi.
+# 
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package MLDBM::Serializer::Data::Dumper;
+BEGIN { @MLDBM::Serializer::Data::Dumper::ISA = qw(MLDBM::Serializer) }
+
+use Data::Dumper '2.08';		# Backward compatibility
+use Carp;
+
+#
+# Create a Data::Dumper serializer object.
+#
+sub new {
+    my $self = shift->SUPER::new();
+    my $meth = shift || "";
+    $meth = (defined(&Data::Dumper::Dumpxs) ? 'Dumpxs' : 'Dump')
+      unless $meth =~ /^Dump(xs)?$/;
+    $self->DumpMeth($meth);
+    $self->RemoveTaint(shift);
+    $self->Key(shift);
+    $self;
+}
+
+#
+# Serialize $val if it is a reference, or if it does begin with our magic
+# key string, since then at retrieval time we expect a Data::Dumper string.
+# Otherwise, return the scalar value.
+#
+sub serialize {
+    my $self = shift;
+    my ($val) = @_;
+    return undef unless defined $val;
+    return $val unless ref($val) or $val =~ m|^\Q$self->{'key'}|o;
+    my $dumpmeth = $self->{'dumpmeth'};
+    local $Data::Dumper::Indent = 0;
+    local $Data::Dumper::Purity = 1;
+    local $Data::Dumper::Terse = 1;
+    return $self->{'key'} . Data::Dumper->$dumpmeth([$val], ['M']);
+}
+
+#
+# If the value is undefined or does not begin with our magic key string,
+# return it as-is. Otherwise, we need to recover the underlying data structure.
+#
+sub deserialize {
+    my $self = shift;
+    my ($val) = @_;
+    return undef unless defined $val;
+    return $val unless $val =~ s|^\Q$self->{'key'}||o;
+    my $M = "";
+    ($val) = $val =~ /^(.*)$/s if $self->{'removetaint'};
+    # Disambiguate hashref (perl may treat it as a block)
+    my $N = eval($val =~ /^\{/ ? '+'.$val : $val);
+    return $M ? $M : $N unless $@;
+    carp "MLDBM error: $@\twhile evaluating:\n $val";
+}
+
+sub DumpMeth	{ my $s = shift; $s->_attrib('dumpmeth', @_); }
+sub RemoveTaint	{ my $s = shift; $s->_attrib('removetaint', @_); }
+sub Key		{ my $s = shift; $s->_attrib('key', @_); }
+
+# avoid used only once warnings
+{
+    local $Data::Dumper::Terse;
+}
+
+1;
+__END__
+
+=head1 AUTHORS
+
+Gurusamy Sarathy <F<gsar@umich.edu>>.
+
+Support for multiple serializing packages by
+Raphael Manfredi <F<Raphael_Manfredi@grenoble.hp.com>>.
+
+Copyright (c) 1995-98 Gurusamy Sarathy.  All rights reserved.
+
+Copyright (c) 1998 Raphael Manfredi.
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/MLDBM/Serializer/FreezeThaw.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,39 @@
+# Copyright (c) 1995-98 Gurusamy Sarathy.  All rights reserved.
+#
+# Copyright (c) 1998 Raphael Manfredi.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package MLDBM::Serializer::FreezeThaw;
+BEGIN { @MLDBM::Serializer::FreezeThaw::ISA = qw(MLDBM::Serializer) }
+
+use FreezeThaw;
+
+sub serialize {
+    return FreezeThaw::freeze($_[1]);
+}
+
+sub deserialize {
+    my ($obj) = FreezeThaw::thaw($_[1]);
+    return $obj;
+}
+
+1;
+__END__
+
+=head1 COPYRIGHT
+
+Gurusamy Sarathy <F<gsar@umich.edu>>.
+
+Support for multiple serializing packages by
+Raphael Manfredi <F<Raphael_Manfredi@grenoble.hp.com>>.
+
+Copyright (c) 1995-98 Gurusamy Sarathy.  All rights reserved.
+
+Copyright (c) 1998 Raphael Manfredi.
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/MLDBM/Serializer/Storable.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,64 @@
+# Copyright (c) 1995-98 Gurusamy Sarathy.  All rights reserved.
+#
+# Copyright (c) 1998 Raphael Manfredi.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package MLDBM::Serializer::Storable;
+BEGIN { @MLDBM::Serializer::Storable::ISA = qw(MLDBM::Serializer) }
+
+use Storable;
+
+sub new {
+    my $self = shift->SUPER::new();
+    $self->DumpMeth(shift);
+    # Storable doesn't honor other attributes
+    $self;
+}
+
+#
+# Serialize a reference to supplied value
+#
+sub serialize {
+    my $self = shift;
+    my $dumpmeth = $self->{'_dumpsub_'};
+    &$dumpmeth(\$_[0]);
+}
+
+#
+# Deserialize and de-reference
+#
+sub deserialize {
+    my $obj = Storable::thaw($_[1]);		# Does not care whether portable
+    defined($obj) ? $$obj : undef;
+}
+
+#
+# Change dump method when portability is requested
+#
+sub DumpMeth {
+    my $self = shift;
+    $self->{'_dumpsub_'} = 
+      ($_[0] && $_[0] eq 'portable' ? \&Storable::nfreeze : \&Storable::freeze);
+    $self->_attrib('dumpmeth', @_);
+}
+
+1;
+__END__
+
+=head1 AUTHORS
+
+Gurusamy Sarathy <F<gsar@umich.edu>>.
+
+Support for multiple serializing packages by
+Raphael Manfredi <F<Raphael_Manfredi@grenoble.hp.com>>.
+
+Copyright (c) 1995-98 Gurusamy Sarathy.  All rights reserved.
+
+Copyright (c) 1998 Raphael Manfredi.
+
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/MLDBM/Sync.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,596 @@
+# Copyright (c) 2001-2002 Joshua Chamas, Chamas Enterprises Inc.  All rights reserved.
+# Sponsored by development on NodeWorks http://www.nodeworks.com and Apache::ASP
+# http://www.apache-asp.org
+#
+# This program is free software; you can redistribute it
+# and/or modify it under the same terms as Perl itself.
+
+
+package MLDBM::Sync;
+$VERSION = '0.30';
+
+use MLDBM;
+use MLDBM::Sync::SDBM_File;
+use Data::Dumper;
+use Fcntl qw(:flock);
+use Digest::MD5 qw(md5_hex);
+use strict;
+use Carp qw(confess);
+no strict qw(refs);
+use vars qw($AUTOLOAD @EXT $CACHE_ERR $LOCK_SH $LOCK_EX $LOCK_UN);
+
+eval "use Tie::Cache;";
+if (($@)) {
+    $CACHE_ERR = $@;
+}
+
+$LOCK_SH = LOCK_SH;
+$LOCK_UN = LOCK_UN;
+$LOCK_EX = LOCK_EX;
+
+@EXT = ('.pag', '.dir', '');
+
+sub TIEHASH {
+    my($class, $file, @args) = @_;
+
+    $file =~ /^(.*)$/s;
+    $file = $1;
+    my $fh = $file.".lock";
+
+    my $self = bless {
+		      'file' => $file,
+		      'args' => [ $file, @args ],
+		      'lock_fh' => $fh,
+		      'lock_file' => $fh,
+		      'lock_num' => 0,
+		      'md5_keys' => 0,
+		      'pid' => $$,
+		      'keys' => [],
+		      'db_type' => $MLDBM::UseDB,
+		      'serializer' => $MLDBM::Serializer,
+		      'remove_taint' => $MLDBM::RemoveTaint,
+		     };
+
+    $self;
+}
+
+sub DESTROY { 
+    my $self = shift;
+    if($self->{lock_num}) {
+	$self->{lock_num} = 1;
+	$self->UnLock;
+    }
+}
+
+sub AUTOLOAD {
+    my($self, $key, $value) = @_;
+    $AUTOLOAD =~ /::([^:]+)$/;
+    my $func = $1;
+    grep($func eq $_, ('FETCH', 'STORE', 'EXISTS', 'DELETE'))
+      || die("$func not handled by object $self");
+
+    ## CHECKSUM KEYS
+    if(defined $key && $self->{md5_keys}) {
+	$key = $self->SyncChecksum($key);
+    }
+
+    # CACHE, short circuit if found in cache on FETCH/EXISTS
+    # after checksum, since that's what we store
+    my $cache = (defined $key) ? $self->{cache} : undef;
+    if($cache && ($func eq 'FETCH' or $func eq 'EXISTS')) {
+	my $rv = $cache->$func($key);
+	defined($rv) && return($rv);
+    }
+
+    my $rv;
+    if ($func eq 'FETCH' or $func eq 'EXISTS') {
+	$self->read_lock;
+    } else {
+	$self->lock;
+    }
+
+    {
+	local $MLDBM::RemoveTaint = $self->{remove_taint};
+	if (defined $value) {
+	    $rv = $self->{dbm}->$func($key, $value);
+	} else {
+	    $rv = $self->{dbm}->$func($key);
+	}
+    }
+
+    $self->unlock;
+
+    # do after lock critical section, no point taking 
+    # any extra time there
+    $cache && $cache->$func($key, $value);
+
+    $rv;
+}
+
+sub CLEAR { 
+    my $self = shift;
+    
+    $self->lock;
+    $self->{dbm}->CLEAR;
+    $self->{dbm} = undef;
+    # delete the files to free disk space
+    my $unlinked = 0;
+    for (@EXT) {
+	my $file = $self->{file}.$_;	
+	next if(! -e $file);
+	if(-d $file) {
+	    rmdir($file) || warn("can't unlink dir $file: $!");
+	} else {
+	    unlink($file) || die("can't unlink file $file: $!");
+	}
+
+	$unlinked++;
+    }
+    if($self->{lock_num} > 1) {
+	$self->SyncTie; # recreate, not done with it yet
+    }
+
+    $self->unlock;
+    if($self->{lock_num} == 0) {
+	# only unlink if we are clear of all the locks
+	unlink($self->{lock_file});
+    }
+    
+    $self->{cache} && $self->{cache}->CLEAR;
+
+    1;
+};
+
+# don't bother with cache for first/next key since it'll kill
+# the cache anyway likely
+sub FIRSTKEY {
+    my $self = shift;
+
+    if($self->{md5_keys}) {
+	confess("can't get keys() or each() on MLDBM::Sync database ".
+		"with SyncKeysChecksum(1) set");
+    }
+    
+    $self->read_lock;
+    my $key = $self->{dbm}->FIRSTKEY();
+    my @keys;
+    while(1) {
+	last if ! defined($key);
+	push(@keys, $key);
+	$key = $self->{dbm}->NEXTKEY($key);
+    }
+    $self->unlock;
+    $self->{'keys'} = \@keys;
+
+    $self->NEXTKEY;
+}
+
+sub NEXTKEY {
+    my $self = shift;
+
+    if($self->{md5_keys}) {
+	confess("can't get keys() or each() on MLDBM::Sync database ".
+		"with SyncKeysChecksum(1) set");
+    }
+    
+    my $rv = shift(@{$self->{'keys'}});
+}
+
+sub SyncChecksum {
+    my($self, $key) = @_;
+    if(ref $key) {
+	join('g', md5_hex($$key), sprintf("%07d",length($$key)));
+    } else {
+	join('g', md5_hex($key), sprintf("%07d", length($key)));
+    }
+}
+
+sub SyncCacheSize {
+    my($self, $size) = @_;
+    $CACHE_ERR && die("need Tie::Cache installed to use this feature: $@");
+
+    if ($size =~ /^(\d+)(M|K)$/) {
+	my($num, $type) = ($1, $2);
+	if (($type eq 'M')) {
+	    $size = $num * 1024 * 1024;
+	} elsif (($type eq 'K')) {
+	    $size = $num * 1024;
+	} else {
+	    die "$type symbol not understood for $size";
+	}
+    } else {
+	($size =~ /^\d+$/) or die("$size must be bytes size for cache");
+    }
+    
+    if ($self->{cache}) {
+	$self->{cache}->CLEAR(); # purge old cache, to free up RAM maybe for mem leaks
+    }
+    
+    my %cache;
+    my $cache = tie %cache, 'Tie::Cache', { MaxBytes => $size };
+    $self->{cache} = $cache; # use non tied interface, faster
+}
+
+sub SyncTie {
+    my $self = shift;
+    my %temp_hash;
+    my $args = $self->{args};
+    local $MLDBM::UseDB = $self->{db_type};
+    local $MLDBM::Serializer = $self->{serializer};
+    local $MLDBM::RemoveTaint = $self->{remove_taint};
+    $self->{dbm} = tie(%temp_hash, 'MLDBM', @$args) || die("can't tie to MLDBM with args: ".join(',', @$args)."; error: $!");
+
+    $self->{dbm};
+}
+
+#### DOCUMENTED API ################################################################
+
+sub SyncKeysChecksum {
+    my($self, $setting) = @_;
+    if(defined $setting) {
+	$self->{md5_keys} = $setting;
+    } else {
+	$self->{md5_keys};
+    }
+}
+
+*read_lock = *ReadLock;
+sub ReadLock { shift->Lock(1); }
+
+*lock = *SyncLock = *Lock;
+sub Lock {
+    my($self, $read_lock) = @_;
+
+    if($self->{lock_num}++ == 0) {
+	my $file = $self->{lock_file};
+	open($self->{lock_fh}, "+>$file") || die("can't open file $file: $!");
+	flock($self->{lock_fh}, ($read_lock ? $LOCK_SH : $LOCK_EX))
+	  || die("can't ". ($read_lock ? "read" : "write") ." lock $file: $!");
+	$self->{read_lock} = $read_lock;
+	$self->SyncTie;
+    } else {
+	if ($self->{read_lock} and ! $read_lock) {
+	    $self->{lock_num}--; # roll back lock count
+	    # confess here to help developer track this down
+	    confess("Can't upgrade lock type from LOCK_SH to LOCK_EX! ".
+		    "This could happen if you tried to write to the MLDBM ".
+		    "in a critical section locked by ReadLock(). ".
+		    "Also the read expression my \$v = \$db{'key1'}{'key2'} will trigger a write ".
+		    "if \$db{'key1'} does not already exist, so this will error in a ReadLock() section"
+		    );
+	}
+	1;
+    }
+}
+
+*unlock = *SyncUnLock = *UnLock;
+sub UnLock {
+    my $self = shift;
+
+    if($self->{lock_num} && $self->{lock_num}-- == 1) {
+	$self->{lock_num} = 0;
+	undef $self->{dbm};
+	flock($self->{'lock_fh'}, $LOCK_UN) || die("can't unlock $self->{'lock_file'}: $!");
+	close($self->{'lock_fh'}) || die("can't close $self->{'lock_file'}");
+	$self->{read_lock} = undef;
+	1;
+    } else {
+	1;
+    }
+}
+
+sub SyncSize {
+    my $self = shift;
+    my $size = 0;
+    for (@EXT) {
+	my $file = $self->{file}.$_;	
+	next unless -e $file;
+	$size += (stat($file))[7];
+
+	if(-d $file) {
+	    $size += (stat($file))[7];
+	    opendir(DIR, $file) || next;
+	    my @files = readdir(DIR);
+	    for my $dir_file (@files) {
+		next if $dir_file =~ /^\.\.?$/;
+		$size += (stat("$file/$dir_file"))[7];
+	    }
+	    closedir(DIR);
+	}
+    }
+
+    $size;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+  MLDBM::Sync - safe concurrent access to MLDBM databases
+
+=head1 SYNOPSIS
+
+  use MLDBM::Sync;                       # this gets the default, SDBM_File
+  use MLDBM qw(DB_File Storable);        # use Storable for serializing
+  use MLDBM qw(MLDBM::Sync::SDBM_File);  # use extended SDBM_File, handles values > 1024 bytes
+  use Fcntl qw(:DEFAULT);                # import symbols O_CREAT & O_RDWR for use with DBMs
+
+  # NORMAL PROTECTED read/write with implicit locks per i/o request
+  my $sync_dbm_obj = tie %cache, 'MLDBM::Sync' [..other DBM args..] or die $!;
+  $cache{"AAAA"} = "BBBB";
+  my $value = $cache{"AAAA"};
+
+  # SERIALIZED PROTECTED read/write with explicit lock for both i/o requests
+  my $sync_dbm_obj = tie %cache, 'MLDBM::Sync', '/tmp/syncdbm', O_CREAT|O_RDWR, 0640;
+  $sync_dbm_obj->Lock;
+  $cache{"AAAA"} = "BBBB";
+  my $value = $cache{"AAAA"};
+  $sync_dbm_obj->UnLock;
+
+  # SERIALIZED PROTECTED READ access with explicit read lock for both reads
+  $sync_dbm_obj->ReadLock;
+  my @keys = keys %cache;
+  my $value = $cache{'AAAA'};
+  $sync_dbm_obj->UnLock;
+
+  # MEMORY CACHE LAYER with Tie::Cache
+  $sync_dbm_obj->SyncCacheSize('100K');
+
+  # KEY CHECKSUMS, for lookups on MD5 checksums on large keys
+  my $sync_dbm_obj = tie %cache, 'MLDBM::Sync', '/tmp/syncdbm', O_CREAT|O_RDWR, 0640;
+  $sync_dbm_obj->SyncKeysChecksum(1);
+  my $large_key = "KEY" x 10000;
+  $sync{$large_key} = "LARGE";
+  my $value = $sync{$large_key};
+
+=head1 DESCRIPTION
+
+This module wraps around the MLDBM interface, by handling concurrent
+access to MLDBM databases with file locking, and flushes i/o explicity
+per lock/unlock.  The new [Read]Lock()/UnLock() API can be used to serialize
+requests logically and improve performance for bundled reads & writes.
+
+  my $sync_dbm_obj = tie %cache, 'MLDBM::Sync', '/tmp/syncdbm', O_CREAT|O_RDWR, 0640;
+
+  # Write locked critical section
+  $sync_dbm_obj->Lock;
+    ... all accesses to DBM LOCK_EX protected, and go to same tied file handles
+    $cache{'KEY'} = 'VALUE';
+  $sync_dbm_obj->UnLock;
+
+  # Read locked critical section
+  $sync_dbm_obj->ReadLock;
+    ... all read accesses to DBM LOCK_SH protected, and go to same tied files
+    ... WARNING, cannot write to DBM in ReadLock() section, will die()
+    ... WARNING, my $v = $cache{'KEY'}{'SUBKEY'} will trigger a write so not safe
+    ...   to use in ReadLock() section
+    my $value = $cache{'KEY'};
+  $sync_dbm_obj->UnLock;
+
+  # Normal access OK too, without explicity locking
+  $cache{'KEY'} = 'VALUE';
+  my $value = $cache{'KEY'};
+
+MLDBM continues to serve as the underlying OO layer that
+serializes complex data structures to be stored in the databases.
+See the MLDBM L<BUGS> section for important limitations.
+
+MLDBM::Sync also provides built in RAM caching with Tie::Cache
+md5 key checksum functionality.
+
+=head1 INSTALL
+
+Like any other CPAN module, either use CPAN.pm, or perl -MCPAN C<-e> shell,
+or get the file MLDBM-Sync-x.xx.tar.gz, unzip, untar and:
+
+  perl Makefile.PL
+  make
+  make test
+  make install
+
+=head1 LOCKING
+
+The MLDBM::Sync wrapper protects MLDBM databases by locking
+and unlocking around read and write requests to the databases.
+Also necessary is for each new lock to tie() to the database
+internally, untie()ing when unlocking.  This flushes any
+i/o for the dbm to the operating system, and allows for
+concurrent read/write access to the databases.
+
+Without any extra effort from the developer, an existing 
+MLDBM database will benefit from MLDBM::sync.
+
+  my $dbm_obj = tie %dbm, ...;
+  $dbm{"key"} = "value";
+
+As a write or STORE operation, the above will automatically
+cause the following:
+
+  $dbm_obj->Lock; # also ties
+  $dbm{"key"} = "value";
+  $dbm_obj->UnLock; # also unties
+
+Just so, a read or FETCH operation like:
+
+  my $value = $dbm{"key"};
+
+will really trigger:
+
+  $dbm_obj->ReadLock; # also ties
+  my $value = $dbm{"key"};
+  $dbm_obj->Lock; # also unties
+
+However, these lock operations are expensive because of the 
+underlying tie()/untie() that occurs for i/o flushing, so 
+when bundling reads & writes, a developer may explicitly
+use this API for greater performance:
+
+  # tie once to database, write 100 times
+  $dbm_obj->Lock;
+  for (1..100) {
+    $dbm{$_} = $_ * 100;
+    ...
+  }
+  $dbm_obj->UnLock;
+
+  # only tie once to database, and read 100 times
+  $dbm_obj->ReadLock;
+  for(1..100) {
+    my $value = $dbm{$_};  
+    ...
+  }
+  $dbm_obj->UnLock;
+
+=head1 CACHING
+
+I built MLDBM::Sync to serve as a fast and robust caching layer
+for use in multi-process environments like mod_perl.  In order
+to provide an additional speed boost when caching static data,
+I have added an RAM caching layer with Tie::Cache, which 
+regulates the size of the memory used with its MaxBytes setting.
+
+To activate this caching, just:
+
+  my $dbm = tie %cache, 'MLDBM::Sync', '/tmp/syncdbm', O_CREAT|O_RDWR, 0640;
+  $dbm->SyncCacheSize(100000);  # 100000 bytes max memory used
+  $dbm->SyncCacheSize('100K');  # 100 Kbytes max memory used
+  $dbm->SyncCacheSize('1M');    # 1 Megabyte max memory used
+
+The ./bench/bench_sync.pl, run like "bench_sync.pl C<-c>" will run 
+the tests with caching turned on creating a benchmark with 50%
+cache hits.
+
+One run without caching was:
+
+ === INSERT OF 50 BYTE RECORDS ===
+  Time for 100 writes + 100 reads for  SDBM_File                  0.16 seconds     12288 bytes
+  Time for 100 writes + 100 reads for  MLDBM::Sync::SDBM_File     0.17 seconds     12288 bytes
+  Time for 100 writes + 100 reads for  GDBM_File                  3.37 seconds     17980 bytes
+  Time for 100 writes + 100 reads for  DB_File                    4.45 seconds     20480 bytes
+
+And with caching, with 50% cache hits:
+
+ === INSERT OF 50 BYTE RECORDS ===
+  Time for 100 writes + 100 reads for  SDBM_File                  0.11 seconds     12288 bytes
+  Time for 100 writes + 100 reads for  MLDBM::Sync::SDBM_File     0.11 seconds     12288 bytes
+  Time for 100 writes + 100 reads for  GDBM_File                  2.49 seconds     17980 bytes
+  Time for 100 writes + 100 reads for  DB_File                    2.55 seconds     20480 bytes
+
+Even for SDBM_File, this speedup is near 33%.
+
+=head1 KEYS CHECKSUM
+
+A common operation on database lookups is checksumming
+the key, prior to the lookup, because the key could be
+very large, and all one really wants is the data it maps
+too.  To enable this functionality automatically with 
+MLDBM::Sync, just:
+
+  my $sync_dbm_obj = tie %cache, 'MLDBM::Sync', '/tmp/syncdbm', O_CREAT|O_RDWR, 0640;
+  $sync_dbm_obj->SyncKeysChecksum(1);
+
+ !! WARNING: keys() & each() do not work on these databases
+ !! as of v.03, so the developer will not be fooled into thinking
+ !! the stored key values are meaningful to the calling application 
+ !! and will die() if called.
+ !!
+ !! This behavior could be relaxed in the future.
+ 
+An example of this might be to cache a XSLT conversion,
+which are typically very expensive.  You have the 
+XML data and the XSLT data, so all you do is:
+
+  # $xml_data, $xsl_data are strings
+  my $xslt_output;
+  unless ($xslt_output = $cache{$xml_data.'&&&&'.$xsl_data}) {
+    ... do XSLT conversion here for $xslt_output ...
+    $cache{$xml_data.'&&&&'.xsl_data} = $xslt_output;
+  }
+
+What you save by doing this is having to create HUGE keys
+to lookup on, which no DBM is likely to do efficiently.
+This is the same method that File::Cache uses internally to 
+hash its file lookups in its directories.
+
+=head1 New MLDBM::Sync::SDBM_File
+
+SDBM_File, the default used for MLDBM and therefore MLDBM::Sync 
+has a limit of 1024 bytes for the size of a record.
+
+SDBM_File is also an order of magnitude faster for small records
+to use with MLDBM::Sync, than DB_File or GDBM_File, because the
+tie()/untie() to the dbm is much faster.  Therefore,
+bundled with MLDBM::Sync release is a MLDBM::Sync::SDBM_File
+layer which works around this 1024 byte limit.  To use, just:
+
+  use MLDBM qw(MLDBM::Sync::SDBM_File);
+
+It works by breaking up up the STORE() values into small 128 
+byte segments, and spreading those segments across many records,
+creating a virtual record layer.  It also uses Compress::Zlib
+to compress STORED data, reducing the number of these 128 byte 
+records. In benchmarks, 128 byte record segments seemed to be a
+sweet spot for space/time efficiency, as SDBM_File created
+very bloated *.pag files for 128+ byte records.
+
+=head1 BENCHMARKS
+
+In the distribution ./bench directory is a bench_sync.pl script
+that can benchmark using the various DBMs with MLDBM::Sync.
+
+The MLDBM::Sync::SDBM_File DBM is special because is uses 
+SDBM_File for fast small inserts, but slows down linearly
+with the size of the data being inserted and read.
+
+The results for a dual PIII-450 linux 2.4.7, with a ext3 file system 
+blocksize 4096 mounted async on a RAID-1 2xIDE 7200 RPM disk were as follows:
+
+ === INSERT OF 50 BYTE RECORDS ===
+  Time for 100 writes + 100 reads for  SDBM_File                  0.16 seconds     12288 bytes
+  Time for 100 writes + 100 reads for  MLDBM::Sync::SDBM_File     0.19 seconds     12288 bytes
+  Time for 100 writes + 100 reads for  GDBM_File                  1.09 seconds     18066 bytes
+  Time for 100 writes + 100 reads for  DB_File                    0.67 seconds     12288 bytes
+  Time for 100 writes + 100 reads for  Tie::TextDir .04           0.31 seconds     13192 bytes
+
+ === INSERT OF 500 BYTE RECORDS ===
+ (skipping test for SDBM_File 100 byte limit)
+  Time for 100 writes + 100 reads for  MLDBM::Sync::SDBM_File     0.52 seconds    110592 bytes
+  Time for 100 writes + 100 reads for  GDBM_File                  1.20 seconds     63472 bytes
+  Time for 100 writes + 100 reads for  DB_File                    0.66 seconds     86016 bytes
+  Time for 100 writes + 100 reads for  Tie::TextDir .04           0.32 seconds     58192 bytes
+
+ === INSERT OF 5000 BYTE RECORDS ===
+ (skipping test for SDBM_File 100 byte limit)
+  Time for 100 writes + 100 reads for  MLDBM::Sync::SDBM_File     1.41 seconds   1163264 bytes
+  Time for 100 writes + 100 reads for  GDBM_File                  1.38 seconds    832400 bytes
+  Time for 100 writes + 100 reads for  DB_File                    1.21 seconds    831488 bytes
+  Time for 100 writes + 100 reads for  Tie::TextDir .04           0.58 seconds    508192 bytes
+
+ === INSERT OF 20000 BYTE RECORDS ===
+ (skipping test for SDBM_File 100 byte limit)
+ (skipping test for MLDBM::Sync db size > 1M)
+  Time for 100 writes + 100 reads for  GDBM_File                  2.23 seconds   2063912 bytes
+  Time for 100 writes + 100 reads for  DB_File                    1.89 seconds   2060288 bytes
+  Time for 100 writes + 100 reads for  Tie::TextDir .04           1.26 seconds   2008192 bytes
+
+ === INSERT OF 50000 BYTE RECORDS ===
+ (skipping test for SDBM_File 100 byte limit)
+ (skipping test for MLDBM::Sync db size > 1M)
+  Time for 100 writes + 100 reads for  GDBM_File                  3.66 seconds   5337944 bytes
+  Time for 100 writes + 100 reads for  DB_File                    3.64 seconds   5337088 bytes
+  Time for 100 writes + 100 reads for  Tie::TextDir .04           2.80 seconds   5008192 bytes
+
+=head1 AUTHORS
+
+Copyright (c) 2001-2002 Joshua Chamas, Chamas Enterprises Inc.  All rights reserved.
+Sponsored by development on NodeWorks http://www.nodeworks.com and Apache::ASP
+http://www.apache-asp.org
+
+This program is free software; you can redistribute it
+and/or modify it under the same terms as Perl itself.
+
+=head1 SEE ALSO
+
+ MLDBM(3), SDBM_File(3), DB_File(3), GDBM_File(3)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/MLDBM/Sync/SDBM_File.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,163 @@
+# Copyright (c) 2001-2002 Joshua Chamas, Chamas Enterprises Inc.  All rights reserved.
+# Sponsored by development on NodeWorks http://www.nodeworks.com and Apache::ASP
+# http://www.apache-asp.org
+#
+# This program is free software; you can redistribute it
+# and/or modify it under the same terms as Perl itself.
+
+package MLDBM::Sync::SDBM_File;
+$VERSION = .17;
+
+use SDBM_File;
+use strict;
+use vars qw(@ISA  $MaxSegments $MaxSegmentLength %KEYS $Zlib $VERSION);
+
+@ISA = qw(SDBM_File);
+$MaxSegments   = 8192; # to a 1M limit
+# leave room for key index pad
+$MaxSegmentLength = 128;
+eval "use Compress::Zlib";
+$Zlib = $@ ? 0 : 1;
+
+sub FETCH {
+    my($self, $key) = @_;
+    my $segment_length = $MaxSegmentLength;
+
+    my $total_rv;
+    for(my $index = 0; $index < $MaxSegments; $index++) {
+	my $rv = $self->SUPER::FETCH(_index_key($key, $index));
+	if(defined $rv) {
+	    $total_rv ||= '';
+	    $total_rv .= $rv;
+	    last if length($rv) < $segment_length;
+	} else {
+	    last;
+	}
+    }
+
+    if(defined $total_rv) {
+	$total_rv =~ s/^(..)//s;
+	my $type = $1;
+	if($type eq 'G}') {
+	    $total_rv = uncompress($total_rv);
+	} elsif ($type eq 'N}') {
+	    # nothing
+	} else {
+	    # old SDBM_File ?
+	    $total_rv = $type . $total_rv;
+	}
+    }
+
+    $total_rv;
+}
+
+sub STORE {
+    my($self, $key, $value) = @_;
+    my $segment_length = $MaxSegmentLength;
+
+    # DELETE KEYS FIRST
+    for(my $index = 0; $index < $MaxSegments; $index++) {
+	my $index_key = _index_key($key, $index);
+	my $rv = $self->SUPER::FETCH($index_key);
+	if(defined $rv) {
+	    $self->SUPER::DELETE($index_key);
+	} else {
+	    last;
+	}
+	last if length($rv) < $segment_length;
+    }
+
+    # G - Gzip compression
+    # N - No compression
+    #
+    my $old_value = $value;
+    $value = ($Zlib && (length($value) >= $segment_length/2)) ? "G}".compress($value) : "N}".$value;
+
+    my($total_rv, $last_index);
+    for(my $index = 0; $index < $MaxSegments; $index++) {
+	if($index == $MaxSegments) {
+	    die("can't store more than $MaxSegments segments of $MaxSegmentLength bytes per key in ".__PACKAGE__);
+	}
+	$value =~ s/^(.{0,$segment_length})//so;
+	my $segment = $1;
+	
+	last if length($segment) == 0;
+#	print "STORING "._index_key($key, $index)." $segment\n";
+	my $rv = $self->SUPER::STORE(_index_key($key, $index), $segment);
+	$total_rv .= $segment;
+	$last_index = $index;
+    }
+
+#    use Time::HiRes;
+#    print "[".&Time::HiRes::time()."] STORED ".($last_index+1)." segments for length ".
+#      length($total_rv)." bytes for value ".length($old_value)."\n";
+
+    $old_value;
+}
+
+sub DELETE {
+    my($self, $key) = @_;
+    my $segment_length = $MaxSegmentLength;
+
+    my $total_rv;
+    for(my $index = 0; $index < $MaxSegments; $index++) {
+	my $index_key = _index_key($key, $index);
+	my $rv = $self->SUPER::FETCH($index_key) || '';
+	$self->SUPER::DELETE($index_key);
+	$total_rv ||= '';
+	$total_rv .= $rv;
+	last if length($rv) < $segment_length;
+    }
+
+    $total_rv =~ s/^(..)//s;
+    my $type = $1;
+    if($type eq 'G}') {
+	$total_rv = uncompress($total_rv);
+    } elsif ($type eq 'N}') {
+	# normal
+    } else {
+	# old SDBM_File
+	$total_rv = $type.$total_rv;
+    }
+
+    $total_rv;
+}
+
+sub FIRSTKEY {
+    my $self = shift;
+
+    my $key = $self->SUPER::FIRSTKEY();
+    my @keys = ();
+    if (defined $key) {
+	do {
+	    if($key !~ /\*\*\d+$/s) {
+		if(my $new_key = _decode_key($key)) {
+		    push(@keys, $new_key);
+		}
+	    }
+	} while($key = $self->SUPER::NEXTKEY($key));
+    }
+    $KEYS{$self} = \@keys;
+
+    $self->NEXTKEY;
+}
+
+sub NEXTKEY {
+    my $self = shift;
+    shift(@{$KEYS{$self}});
+}
+
+sub _index_key {
+    my($key, $index) = @_;
+    $key =~ s/([\%\*])/uc sprintf("%%%02x",ord($1))/esg;
+    $index ? $key.'**'.$index : $key;
+}
+
+sub _decode_key {
+    my $key = shift;
+    $key =~ s/%([0-9a-fA-F]{2})/pack("c",hex($1))/ge;
+    $key;
+}
+
+1;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/MakeEnv	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,189 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use File::Path;
+use IniData;
+use EnvDb;
+use MrpData;
+use NotesCompiler;
+use MakeRel;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $notesSrc;
+my $mrpData;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'MakeEnv');
+my $envDb;
+my $project;
+my $useCachedManifest;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+if (!CheckArchive()) {
+  exit 1;
+}
+CheckEnvironment();
+MakeRel::MakeReleases($iniData, $envDb, $mrpData, $notesSrc, 'MakeEnv', $verbose, $project, $useCachedManifest);
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions("h" => \$help, "v+" => \$verbose, "n=s" => \$notesSrc, "w=s" => \$project, "useCachedManifest" =>\$useCachedManifest);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  unless ($#ARGV == -1) {
+    print "Error: Invalid arguments\n";
+    Usage(1);
+  }
+
+  $envDb = EnvDb->Open($iniData, $verbose);
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: makeenv [options]
+
+options:
+
+-h                    help
+-n <notes_src_file>   compile all release notes using a single source file
+-v                    verbose output (-vv very verbose)
+-w <project>          make the release in given \"project\"\n");
+}
+
+sub CheckArchive {
+  my $self = shift;
+
+  my $env = $envDb->VersionInfo();
+  my @components = map([$_, $env->{$_}], keys(%$env));
+  my @pendingComps = grep($envDb->Status($_->[0]) == EnvDb::STATUS_PENDING_RELEASE, @components);
+
+  my $good = 1;
+  foreach my $comp (@pendingComps) {
+    my $relDir = $iniData->PathData->LocalArchivePathForExistingOrNewComponent($comp->[0],$comp->[1],$project);
+    if (-e $relDir) {
+      print STDERR "Error: $relDir already exists\n";
+      $good = 0;
+    }
+  }
+
+  return $good;
+}
+
+sub CheckEnvironment {
+  my $self = shift;
+
+  (my $status, $mrpData, my $dirtyComps, my $unaccountedFiles, my $duplicates) = $envDb->CheckEnv(1);
+  if (scalar (@$dirtyComps) > 0) {
+    foreach my $comp (@$dirtyComps) {
+      print "Error: $comp->{comp} $comp->{ver} is dirty\n"; 
+    }
+  }
+  if (scalar (@$unaccountedFiles) > 0) {
+    foreach my $line (@$unaccountedFiles) {
+      print "Error: $line has unknown origin\n"; 
+    }
+  }
+  if (scalar (@$duplicates) > 0) {
+    foreach my $args (@$duplicates) {
+      print "Error: $args->[1] attempting to release $args->[0] which has already been released by $args->[2]\n"; 
+    }
+  }
+  if ($status == EnvDb::STATUS_CLEAN) {
+    die "No components are pending release\n";
+  }
+  elsif ($status == EnvDb::STATUS_DIRTY) {
+    die "Error: Release environment is dirty\n";
+  }
+}
+
+
+__END__
+
+=head1 NAME
+
+MakeEnv - Make a release of an entire environment.
+
+=head1 SYNOPSIS
+
+  makeenv [options]
+
+options:
+
+  -h                    help
+  -n <notes_src_file>   compile all release notes using a single source file
+  -v                    verbose output (-vv  very verbose)
+  -w <project>          make the release in given "project"
+  --useCachedManifest   for internal use only *
+
+=head1 DESCRIPTION
+
+C<MakeEnv> is a tool that can generate one or more releases in such a way that the entire environment from which they were released can reliably be reproduced when doing a corresponding C<GetEnv> (not this is B<not> a guarantee that C<MakeRel> can make). The reliability of environment reproduction is achieved by scanning the F<\epoc32> tree before making a release to ensure that each file present has a known origin. This may be either within an existing release, or within releases that are about to be made. Releases that are about to be made must have their environment database status set to C<pending release> using either C<PrepRel> or C<PrepEnv>. C<MakeEnv> will not proceed until the overall status of the release environment is C<pending release>. The current overall status of an environment can be found using C<EnvInfo> with the C<-f> switch.
+
+Once the release environment is C<pending release>, C<MakeEnv> can be executed. If no arguments are provided, it will make releases of each component with C<pending release> status using the version information and F<mrp> file name store in the environment database. It is possible to override the release notes source file to be used for all releases via the C<-n> switch. This may be useful, for example, if the source in the components being released hasn't changed, but an underlying break in binary compatibility is being absorbed, as they can all be assigned the same release note.
+
+The C<-w> switch specifies the location to make the releases. If you use this argument, you should specify the name of an archive as specified in your F<reltools.ini> file. If you don't use this argument, the releases will go into the first archive listed in your F<reltools.ini>.
+
+See the document I<Making Releases> for more complete coverage of the process of making releases in general. See also the documentation on C<ValidateEnv> which can identify components that have not changed since the last time they were released, and so do not need to be released again.
+
+* When using the C<--useCachedManifest> switch C<MakeEnv> will check too see if a cached manifest file already exists for each component.  Cached manifest files are created by  C<ValidateRel>.  If a cached manifest file is found it will used for the component release.  If no manifest file is found, or the C<--useChachedManifest> switch has not been specified then a new manifest file will be generated from the component's MRP file.  This functionality is useful for automated build systems, as it avoids the process of duplicating manifest files.  Note that evalid checksums are not recalculated for cached manifest files.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/MakeEnv.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/MakeRel	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,251 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use MrpData;
+use MakeRel;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $fixLibs = 0;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'MakeRel');
+my $envDb;
+my $makeRel;
+my $notesSrc;
+my $project;
+my $reallyrun;
+my @mrpData;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+PrintHeinousWarning();
+MakeRel::MakeReleases($iniData, $envDb, \@mrpData, $notesSrc, 'MakeRel', $verbose, $project);
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  my $stdin;
+  GetOptions("h" => \$help, "v+" => \$verbose, "n=s" => \$notesSrc, "p" => \$stdin, "l" => \$fixLibs, "w=s" => \$project, "f" => \$reallyrun);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  # Create the MrpData objects. These will not write any files to disk, and so if any of
+  # them die, there is no need to perform any file system cleanup.
+  if ($#ARGV == -1 and $stdin) {
+    # Read input from STDIN.
+    MakeMrpData(\@mrpData, *STDIN);
+  }
+  elsif ($#ARGV == 0) {
+    # Read input from a file.
+    if (-f $ARGV[0]) {
+      open (IN, $ARGV[0]) or die "Error: Couldn't open $ARGV[0] for reading: $!\n";
+      MakeMrpData(\@mrpData, *IN);
+      close (IN);
+    }
+    else {
+      print "Error: $ARGV[0] is not a file\n";
+      Usage(1);
+    }
+  }
+  elsif ($#ARGV == 1) {
+    # Read input from a single set of command line arguments.
+    if ($iniData->RequireInternalVersions()) {
+      die "Error: Internal version number not specified\n";
+    }
+    else {
+      push (@mrpData, MrpData->New(shift @ARGV, shift @ARGV, '', $iniData, $verbose, $fixLibs));
+    }
+  }
+  elsif ($#ARGV == 2) {
+    # Read input from a single set of command line arguments.
+    push (@mrpData, MrpData->New(shift @ARGV, shift @ARGV, shift @ARGV, $iniData, $verbose, $fixLibs));
+  }
+  else {
+    print "Error: invalid number of arguments\n";
+    Usage(1);
+  }
+
+  $envDb = EnvDb->Open($iniData, $verbose);
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: makerel [options] [[<mrp_file> <version> [<internal_version>]] | [mrp_list_file]]
+
+options:
+
+-h                    help
+-v                    verbose output (-vv very verbose)
+-n <notes_src_file>   compile all release notes using a single source file
+-p                    read a piped mrp list from STDIN
+-l                    copy missing ARMI lib files from THUMB is possible
+-f                    force (no prompting)
+-w <project name>     make the release in this \"project\"
+
+Unsupported tool.\n");
+}
+
+sub PrintHeinousWarning {
+  Utils::QueryUnsupportedTool(<<GUILTY, $reallyrun);
+############################ WARNING ################################
+# Do not use MakeRel  under normal circumstances.   If you  wish to #
+# make a component release,   use the PrepRel and MakeEnv commands. #
+# ( PrepRel to specify the version numbers,  etc.,  then MakeEnv to #
+# actually make the release(s). )                                   #
+#####################################################################
+
+The problem with MakeRel is that it doesn't ensure your environment
+is clean before making the releases. Hence, component releases made
+using MakeRel are not subject to the normal guarantees, that ensure
+users of your release can precisely reproduce what you have on your
+development drive.
+
+Usually, releases made using MakeRel are unacceptable to licensee
+integration teams. Use with caution.
+
+GUILTY
+}
+
+sub MakeMrpData {
+  my $mrpData = shift;
+  local *IN = shift;
+  print "Gathering release info...\n";
+  my @failedReleases;
+  my @lines;
+  while (my $line = <IN>) {
+    # Remove line feed, white space and comments.
+    chomp $line;
+    $line =~ s/^\s*$//;
+    $line =~ s/#.*//;
+    if ($line eq '') {
+      # Nothing left.
+      next;
+    }
+    push @lines, $line;
+  }
+
+  # Reading in a separate loop due to Perl 5.8.0 defect # 21217, due to be fixed in 5.8.1.
+
+  my $lineNum = -1;
+  foreach my $line (@lines) {
+    $lineNum++;
+    eval {
+      (my $mrpName, my $extVer, my $intVer) = split (/\s+/, $line, 4);
+      unless (defined $mrpName and defined $extVer) {
+        die "Error: Invalid arguments at line $lineNum\n";
+      }
+      if (not defined $intVer) {
+        if ($iniData->RequireInternalVersions()) {
+          die "Error: Internal version number not specified\n";
+        }
+        else {
+          $intVer = '';
+        }
+      }
+      my $thisMrpData = MrpData->New($mrpName, $extVer, $intVer, $iniData, $verbose, $fixLibs);
+      push (@$mrpData, $thisMrpData);
+    };
+    if ($@) {
+      print $@;
+      push (@failedReleases, "$line - $@");
+    }
+  }
+
+  if ($#failedReleases >= 0) {
+    print "\nThere was an error making the following release(s):\n\n";
+    foreach my $rel (@failedReleases) {
+      print "$rel";
+    }
+    die "\n";
+  }
+}
+
+__END__
+
+=head1 NAME
+
+MakeRel - Make a single, or set of component releases.
+
+=head1 SYNOPSIS
+
+  makerel [options] [[<mrp_file> <version> [<internal_version>]] | [mrp_list_file]]
+
+options:
+
+  -h                    help
+  -v                    verbose output (-vv  very verbose)
+  -n <notes_src_file>   compile all release notes using a single source file
+  -p                    read a piped mrp list from STDIN
+  -l                    copy missing ARMI lib files from THUMB is possible
+  -f                    force (no prompting)
+  -w <project>          make the releases in this "project"
+
+=head1 DESCRIPTION
+
+C<MakeRel> is a tool that can generate one or more component releases. Where ever possible the tool C<MakeEnv> should be used instead of C<MakeRel> because this guarantees the ability to reproduce the entire environment from which a release was made, rather than just packaging up a particular set of source and binaries.
+
+See the document I<Making Releases> for more complete coverage of the process of making releases in general.
+
+=head1 STATUS
+
+Unsupported/experimental. If you find a problem, please send us a patch.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/MakeRel.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/MakeRel.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,342 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+package MakeRel;
+
+use strict;
+use File::Path;
+use File::Spec;
+use File::Basename;
+use IniData;
+use EnvDb;
+use MrpData;
+use RelData;
+use CatData;
+use Utils;
+use Symbian::CBR::Component::Manifest;
+use Cwd;
+
+#
+# Public.
+#
+
+sub MakeReleases {
+  my $self;
+  $self->{iniData} = shift;
+  $self->{envDb} = shift;
+  $self->{mrpData} = shift;
+  $self->{notesSrc} = shift;
+  $self->{toolName} = shift;
+  $self->{verbose} = shift;
+  $self->{project} = shift;
+  $self->{useCachedManifest} = shift;
+
+  bless $self, "MakeRel";
+
+  if (scalar(@{$self->{mrpData}}) == 0) { # Abort if there's nothing to do.
+    return;
+  }
+  if (!$self->CheckArchive()) { # Abort if any of the releases already exist
+    return;
+  }
+
+  my $versionInfo = $self->VersionInfo();
+  eval {
+    $self->GenerateReleaseFiles($versionInfo);
+  };
+  if ($@) {
+    print $@;
+
+    if($self->{toolName} =~ /MakeEnv/i){
+      print "\nError: Unable to create environment successfully, archive might be corrupted.\n";
+    }
+    else{
+      print "\nError: Unable to create component release successfully, archive might be corrupted.\n";
+    }
+
+    $self->Cleanup();
+    return;
+  }
+
+  # Now that we know all releases have been successfully made, update the environment database.
+  foreach my $thisMrpData (@{$self->{mrpData}}) {
+    my $comp = $thisMrpData->Component();
+    my $ver = $thisMrpData->ExternalVersion();
+    $self->{envDb}->SetVersion($comp, $ver);
+    $self->{envDb}->GenerateSignature($comp, $ver);
+    $self->{envDb}->SetMrpName($comp, $thisMrpData->MrpName());
+    $self->{envDb}->SetStatus($comp, EnvDb::STATUS_CLEAN);
+  }
+}
+
+
+#
+# Private.
+#
+
+sub VersionInfo {
+  my $self = shift;
+
+  # Get a copy of the current version information from the environment database and update it with the new versions.
+  my $versionInfo = $self->{envDb}->VersionInfo();
+  foreach my $thisMrpData (@{$self->{mrpData}}) {
+    $versionInfo->{lc($thisMrpData->Component())} = $thisMrpData->ExternalVersion();
+  }
+
+  return $versionInfo;
+}
+
+sub CheckArchive {
+  my $self = shift;
+  my $good = 1;
+  foreach my $thisMrpData (@{$self->{mrpData}}) {
+    if (!$self->CheckDirs($thisMrpData)) {
+      $good = 0; # Continue and check the rest
+    }
+  }
+  return $good;
+}
+
+sub GenerateReleaseFiles {
+  my $self = shift;
+  my $versionInfo = shift;
+  my $numMrps = scalar(@{$self->{mrpData}});
+  foreach my $thisMrpData (@{$self->{mrpData}}) {
+    $self->MakeDirs($thisMrpData);
+    $self->ZipSource($thisMrpData);
+    $self->ZipBinaries($thisMrpData);
+    $self->ZipExports($thisMrpData);
+    $self->WriteRelData($thisMrpData, $versionInfo);
+    $self->WriteManifest($thisMrpData);
+
+    # This line must come after the others, because with a project-based archive path configuration it relies on
+    # LocalArchivePathForNewOrExistingComponent finding the directories created above.
+    my $comp = $thisMrpData->Component();
+    my $extVer = $thisMrpData->ExternalVersion();
+    my $intVer = $thisMrpData->InternalVersion();
+    unless (defined $intVer) {
+      $intVer = '';
+    }
+    my $relDir = $self->LocalArchivePath($thisMrpData);
+    Utils::SetFileReadOnly($relDir);
+    print "Made $comp $extVer $intVer\n";
+  }
+}
+
+sub ComponentDir {
+  require Carp;
+  confess("Obsolete method called");
+}
+
+sub ReleaseDir {
+  require Carp;
+  confess("Obsolete method called");
+}
+
+sub CheckDirs {
+  my $self = shift;
+  my $mrpData = shift;
+  my $relDir = $self->LocalArchivePath($mrpData);
+  if (-e $relDir) {
+    print STDERR "Error: $relDir already exists\n";
+    return 0;
+  }
+  return 1;
+}
+
+sub MakeDirs {
+  my $self = shift;
+  my $mrpData = shift;
+  my $relDir = $self->LocalArchivePath($mrpData);
+  unless (-e $relDir) {
+    Utils::MakeDir($relDir);
+  }
+}
+
+sub ZipSource {
+  my $self = shift;
+  my $mrpData = shift;
+  my @categories = @{$mrpData->SourceCategories()};
+  my $zipName;
+
+  foreach my $category (@categories) {
+    my @sourceFiles = @{$mrpData->Source($category)};
+    if (@sourceFiles) {
+      $zipName = $self->LocalArchivePath($mrpData) . "\\source".uc($category).".zip";
+
+      Utils::ZipSourceList($zipName, \@sourceFiles, $self->{verbose}, Utils::SourceRoot(), $self->{iniData});
+
+      Utils::SetFileReadOnly($zipName);
+    }
+  }
+  if ($self->{verbose} > 1 and not defined $zipName) {
+    print "No source for " . $mrpData->Component() . "\n";
+  }
+}
+
+sub ZipBinaries {
+  my $self = shift;
+  my $mrpData = shift;
+  foreach my $thisBinCat (@{$mrpData->BinaryCategories()}) {
+    my $bins = $mrpData->Binaries($thisBinCat);
+    if ($bins and scalar(@$bins) > 0) {
+      my $zipName;
+      if ($thisBinCat eq 'unclassified') {
+        $zipName = $self->LocalArchivePath($mrpData) . "\\binaries.zip";
+      }
+      else {
+        $zipName = $self->LocalArchivePath($mrpData) . "\\binaries_$thisBinCat.zip";
+      }
+      Utils::ZipList($zipName, $bins, $self->{verbose}, 0, Utils::EpocRoot());
+      Utils::SetFileReadOnly($zipName);
+    }
+  }
+}
+
+sub ZipExports {
+  my $self = shift;
+  my $mrpData = shift;
+
+  foreach my $thisExportCat (@{$mrpData->ExportCategories()}) {
+    my $exports = $mrpData->Exports($thisExportCat);
+    if ($exports and scalar(@$exports) > 0) {
+      my $zipName = $self->LocalArchivePath($mrpData) . "\\exports".uc($thisExportCat).".zip";
+      Utils::ZipList($zipName, $exports, $self->{verbose}, 0, Utils::EpocRoot());
+      Utils::SetFileReadOnly($zipName);
+      # Need to create an exports<CAT>.txt file which details necessary info...
+      my $txtName = $self->LocalArchivePath($mrpData) . "\\exports".uc($thisExportCat).".txt";
+      CatData->New($self->{iniData}, $txtName, $mrpData, uc($thisExportCat));
+    }
+  }
+}
+
+sub WriteRelData {
+  my $self = shift;
+  my $mrpData = shift;
+  my $versionInfo = shift;
+
+  my $notesSource = $self->{notesSrc};
+  if (defined $notesSource) {
+    Utils::CheckExists($notesSource);
+    Utils::CheckIsFile($notesSource);
+  }
+  else {
+    $notesSource = Utils::PrependSourceRoot($mrpData->NotesSource());
+  }
+  my $relData = RelData->New($self->{iniData}, $mrpData, $notesSource, $versionInfo, $self->{toolName}, $self->{verbose}, undef, $self->{project}); # undef = dontPersist
+}
+
+sub WriteManifest {
+  my $self = shift;
+  my $mrpData = shift;
+  my $componentName = $mrpData->Component();
+  my $manifest = undef;
+  
+  
+  if ($self->{useCachedManifest}) {
+    #Check if manifest file is available in temp location
+    my $manifestTempFile = File::Spec->catfile( File::Spec->tmpdir(), "manifest_".$componentName.".xml" );
+    
+    if (-e $manifestTempFile ) {
+      #Construct manifest object from the manifest file
+      $manifest = Symbian::CBR::Component::Manifest->new( $manifestTempFile );
+      
+      #Delete the temp manifest file
+      my $unlinkCount = 100;
+      while(-e $manifestTempFile and $unlinkCount > 0){
+        unlink($manifestTempFile) or print "Warning: unlink $manifestTempFile failed[$unlinkCount].\n";
+        $unlinkCount--;
+      }
+      if ( $unlinkCount == 0 ) {
+        die "Error: unlink $manifestTempFile failed.\n";
+      }
+    }
+  }
+  
+  if (!defined $manifest) {
+    my $mrpName = Utils::RelativeToAbsolutePath( $mrpData->MrpName(), $mrpData->{iniData}, SOURCE_RELATIVE );
+    
+    #Construct manifest object from MRP file
+    $manifest = Symbian::CBR::Component::Manifest->new( $mrpName );
+  }
+  
+  #Save the manifest file to the archive release location for the component
+  $manifest->Save ( $self->LocalArchivePath($mrpData) );
+}
+
+sub Cleanup {
+  my $self = shift;
+  if ($self->{verbose}) { print "Cleaning up...\n"; }
+  foreach my $thisMrpData (@{$self->{mrpData}}) {
+    my $relDir = $self->LocalArchivePath($thisMrpData);
+    if (-e $relDir) {
+      if ($self->{verbose}) { print "Deleting $relDir...\n"; }
+      my $origDir = cwd();
+      
+      chdir(dirname($relDir)); #If you try to rmtree a UNC path the cwd must also be a UNC path
+      rmtree ($relDir);
+      chdir($origDir);
+    }
+  }
+}
+
+sub LocalArchivePath {
+  my $self = shift;
+  my $mrpData = shift;
+  my $name = $mrpData->Component();
+  my $ver = $mrpData->ExternalVersion();
+
+  if (not exists $self->{pathCache}->{$name}->{$ver}) {
+    $self->{pathCache}->{$name}->{$ver} = $self->{iniData}->PathData->LocalArchivePathForExistingOrNewComponent($name, $ver, $self->{project});
+  }
+
+  return $self->{pathCache}->{$name}->{$ver};
+}
+
+1;
+
+=head1 NAME
+
+MakeRel.pm - Provides an interface for making releases.
+
+=head1 INTERFACE
+
+=head2 MakeReleases
+
+Expects to be passed an C<IniData> reference, an C<EnvDb> reference, a reference to a list of C<MrpData> objects, the name of a notes source file, the name of the tool using C<MakeRel> and a verbosity level. Firstly, the binary files referred to by the C<MrpData> objects are cross checked to ensure that more than one component isn't attempting to release the same file. Dies if this is the case. Secondly, generates release directories and files for each C<MrpData> object. Thirdly, updates local signature files and the environment database.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/MakeSnapShot	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,215 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use CommandController;
+use Utils;
+
+#
+# Constants.
+#
+
+my $KMissingFileName = Utils::PrependEpocRoot("\\__missing.txt");
+my $KCompsFileName = Utils::PrependEpocRoot("\\__comps.txt");
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $noIgnores = 0;
+my $fileName;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'MakeSnapShot');
+my $force;
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+MakeSnapShot();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ('bundling');
+  my $help;
+  GetOptions('h' => \$help, 'i' => \$noIgnores, 'v+' => \$verbose, 'f' => \$force);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $fileName = shift @ARGV;
+
+  unless ($fileName and scalar(@ARGV) == 0) {
+    print "Error: Invalid number of arguments\n";
+    Usage(1);
+  }
+
+  unless ($fileName =~ /\.zip$/i) {
+    $fileName .= '.zip';
+  }
+  Utils::AbsoluteFileName(\$fileName);
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: makesnapshot [options] <snap_shot_file_name>
+
+options:
+
+  -h  help
+  -i  include files that are normally ignored (e.g. \\epoc32\\build\\...)
+  -f  (deprecated)
+  -v  verbose output (-vv very verbose)\n");
+}
+
+sub MakeSnapShot {
+  if (-e $fileName) {
+    die "Error: \"$fileName\" already exists\n";
+  }
+  my $envDb = EnvDb->Open($iniData, $verbose);
+  my $compsPendingRelease = $envDb->ComponentsPendingRelease();
+  if (scalar (keys %$compsPendingRelease) > 0) {
+    die "Error: Can't make a snap shot of an environment contains components that are pending release\n";
+  }
+  (my $overallStatus, undef, my $dirtyComps, my $unaccountedFiles, my $duplicates) = $envDb->CheckEnv(1, $noIgnores);
+  if ($overallStatus == EnvDb::STATUS_CLEAN) {
+    print "Environment clean, aborting snap shot creation\n";
+    return;
+  }
+  if (scalar (@$duplicates) > 0) {
+    die "Error: Unexpected duplicates\n";
+  }
+  my @dirtyFiles;
+  foreach my $thisUnaccountedFile (@$unaccountedFiles) {
+    push (@dirtyFiles, Utils::RemoveEpocRoot($thisUnaccountedFile));
+  }
+  my @missingFiles;
+  foreach my $thisComp (@$dirtyComps) {
+    my $binaryList = $envDb->ListBins($thisComp->{comp});
+    shift @$binaryList; # Throw away list header;
+    foreach my $thisFile (@$binaryList) {
+      if ($thisFile->[1] eq EnvDb::STATUS_STRING_FAILED) {
+	push (@dirtyFiles, Utils::RemoveEpocRoot($thisFile->[0]));
+      }
+      elsif ($thisFile->[1] eq EnvDb::STATUS_STRING_MISSING) {
+	push (@missingFiles, Utils::RemoveEpocRoot($thisFile->[0]));
+      }
+    }
+  }
+
+  open (MISSING, ">$KMissingFileName") or die "Error: Couldn't open \"$KMissingFileName\" for writing\n";
+  foreach my $thisFile (@missingFiles) {
+    print MISSING "$thisFile\n";
+  }
+  close (MISSING);
+  push (@dirtyFiles, Utils::RemoveEpocRoot($KMissingFileName));
+
+  my $versionInfo = $envDb->VersionInfo();
+  open (COMPS, ">$KCompsFileName") or die "Error: Couldn't open \"$KCompsFileName\" for writing\n";
+  foreach my $thisComp (sort keys %$versionInfo) {
+    print COMPS "$thisComp $versionInfo->{$thisComp}\n";
+  }
+  close (COMPS);
+  push (@dirtyFiles, Utils::RemoveEpocRoot($KCompsFileName));
+
+  Utils::ZipList($fileName, \@dirtyFiles, $verbose, 0, Utils::EpocRoot());
+  Utils::SetFileReadOnly($fileName);
+
+  unlink ($KMissingFileName) or die "Error: Couldn't delete \"$KMissingFileName\": $!\n";
+  unlink ($KCompsFileName) or die "Error: Couldn't delete \"$KMissingFileName\": $!\n";
+  
+  print "Snapshot \"$fileName\" successfully made\n";
+}
+
+__END__
+
+=head1 NAME
+
+MakeSnapShot - Captures all dirty files in an environment into a user specified zip file that can be used to reproduce the environment.
+
+=head1 SYNOPSIS
+
+  makesnapshot [options] <snap_shot_file_name>
+
+options:
+
+  -h  help
+  -i  include files that are normally ignored (e.g. \epoc32\build\...)
+  -v  verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+The release tools exist to make it relatively straight forward to share binary files in a controlled way. In order to acheive a suitable level of control, a fair amount of rigor is imposed on users when they are making releases. There are times when this is inappropriate. For example, if a user wants to temporarily capture the current state of their environment. The commands C<MakeSnapShot> and C<InstallSnapShot> exist to make it easy to accurately capture the current state of an environment, and subsequently revert to it, without the overhead of doing a full environment release. Snap shots should only be used in preference to full environment releases when there is a B<temporary> need to capture an environment, because:
+
+=over 4
+
+=item 1
+
+No mechansims are provided for exporting or importing snap shots.
+
+=item 2
+
+No release notes are provided with snap shots.
+
+=item 3
+
+The contents of snap shots are inherently dirty - they consist of all the files that could not be accounted for with proper releases. Reliance on snap shots as a means of distributing software would therefore eventually become a self defeating activity since the snap shot files would get larger and larger over time.
+
+=back
+
+C<MakeSnapShot> generates a zip file that contains all the dirty files currently present in the environment. It makes no attempt to understand which component own which files. It also stores some metadata in the zip file; a list of the component versions currently installed, and a list of files that are currently missing from the environment. This can subsequently be used by C<InstallSnapShot> to revert to the snap shot state.
+
+=head1 STATUS
+
+Supported. If you find a problem, please report it to us.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/MakeSnapShot.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/MakingReleases	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,221 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+=head1 Overview
+
+This document discusses the various techniques that can be used to make component releases. It describes the files that specify what comprises a component release (F<mrp> files), and then how these can be used to produce release packets. 
+
+=head1 Location
+
+Before you start, you should know where you want to store your release. The release tools support two structures of local archive - "component-based" and "project-based". If you're using the old-style, component-based structure, then skip this section since you have no choice where your release will be stored. (You can find out by seeing if you have an C<archive_path_file> line in your F<reltools.ini>.)
+
+If you are using the new-style, project-based, archive structure, then there may be several places you could store your release in the archive. These are called "projects", and may be something like "GT" or "LPD", or perhaps a licensee name. Any development you do should be stored in your own project, even if you've modified somebody else's component.
+
+For both C<makerel> and C<makeenv> commands, described later, you can optionally specify a project location with the C<-w> switch. If you don't, the release will be made to your default project which is the first one listed in your F<reltools.ini> file.
+
+=head1 Mrp Files
+
+Each component to be released must have a corresponding F<mrp> file. Normally this would be archived in the source code of the component. F<mrp> files can be automatically generated using the tool C<GenMrp>, but normally a certain amount of hand tuning will be required (to select the exact binary targets required, for example). The F<mrp> parser understands the following statements:
+
+=over 4
+
+=item * component <component_name>
+
+The name that will be used to refer to this component when using the release tools. Can be used only once per F<mrp>.
+
+=item * source (<source_file> | <source_directory>)
+
+Used to describe which source files should be put into a release. May be used more than once in a single F<.mrp> file (or not at all). If a directory is specified, all files in that directory and it's sub-directories will be included in the release.
+
+The specified paths may be absolute or relative. If they're relative, then they're relative to the location of the MRP. If they're absolute (start with a backslash) then they are assumed to be relative to the SRCROOT environment variable. If there's no SRCROOT environment variable, then a source root of \ is assumed.
+
+=item * [-]binary (<abld_path> <platform> [<variant> [<program>]]) | <binary_file> | <binary_directory>
+
+Used to describe which binary files should be put into a release. May be used more than once in a single F<.mrp> file (or not at all). The first argument structure (<abld_path> <platform> [<variant> <program>]) directs the Release Tools to enquire from the EPOC build tools which binaries should be included in the release. The <abld_path> argument should provide the full path to the directory where the component's <abld.bat> file lives. This will be the same directory as the component's <bld.inf> file. <platform> and <build_cmnd_1> ... <build_cmnd_n> must be valid for the corresponding <bld.inf> file (common choices would be C<wins udeb> and C<thumb urel>). You can also use the keyword all, which will read all the platforms supported by the <bld.inf> and include all of them (for both udeb and urel). Note, you can also specify the name of an individual F<mmp> file (or program), for example C<thumb urel mymmp>. 
+
+The second and third argument structures allow individual binary files and directories of binary files to be specified (as with the C<source> keyword, directories are recursively scanned). These forms of C<binary> statement should only be used if the first cannot be. However, with the EPOC build tool's support for custom make files, it is highly unlikely that this would ever be the case. If using a custom make file, be sure to provide a C<RELEASABLES> target, because this is how the release tools get the information they need.
+
+The C<binary> keyword can be preceded with a minus sign (C<->). This instructs the release tools to exclude the associated binaries from the release. You may therefore first use a C<binary> statement to specify more than you actually want to release, and and then a C<-binary> statement to refine the list. For example:
+
+ binary   \mycomp wins udeb
+ -binary  \mycomp wins udeb mymmp_to_exclude
+ -binary  \myfile_to_exclude
+
+Paths referring to <bld.inf> files are relative to SRCROOT, using the same rules as described in L<source>. Paths referring to binary files must be absolute, and are assumed to be within EPOCROOT.
+
+=item * [-]testbinary <abld_path> <platform> [<variant> [<program>]]
+
+Used to describe which test binary files should be put into a release. Identical to the first argument structure of the C<binary> keyword, except for use with test code. Also supports a preceeding minus sign (C<->) to allow the exclusion of certain programs.
+
+=item * exports <abld_path>
+
+Used to describe which exports (header files etc.) should be included. Note, by default exports are treated as though they are binary files unless the C<categorise_exports> keyword is specified in the F<reltools.ini>. This means that they are made available to all sites that are able to receive the binaries. If exports are categorised, they are given the same IPR category as the corresponding source file. See the F<Installation> section for details.
+
+This keyword can be used more than once. If the component's F<bld.inf> file lists more exports than are required, specific files may be removed from the export list using the C<-export_file> keyword. See below. Note, prior to release 2.59 of the tools, it was recommended that the keyword C<-binary> be used for this purpose. This is semantically identical when the C<categorise_exports> F<reltools.ini> keyword is B<not> used, however it has no effect when it is.
+
+=item * [-]export_file <source_export_file> <destination_export_file>
+
+Used to manually specify exported files. Note, both source and destination export file names must be specified. The source export file name is needed to assign the export's IPR category to that of the corresponding source file. The source file must therefore be present within the source tree specified using C<source> keywords. If this is not the case, an error will be thrown when the F<mrp> file is parsed.
+
+Note that the source and destination locations' arguments' relativity is the same as for the <source> keyword and the <binary file> keyword respectively. This is as you would expect.
+
+=item * notes_source <release_notes_source_path>
+
+Information regarding the content of a release should be provided in the form of a release notes source file. This will be stored with the release in a format that can be compiled in to HTML using the tool C<ViewNotes>. The C<notes_source> keywork is used to specify where this source file can be found. The location is assumed to be within the source code, and follows the same rules for relative and absolute paths as described above in L<source>. The following keywords are supported (the text beneath each keyword will be compiled into the release notes):
+
+=over 8
+
+=item * notesrc_releaser
+
+The name of the person making the release.
+
+=item * notesrc_release_reason
+
+A description of why the release was made (e.g. "Defect fix to alpha candidate").
+
+=item * notesrc_general_comments
+
+A summary of the release conent, including any information that it is particularly important others should read (e.g. "Interface X has been depricated in this release, please use Y instead. The reason for this was...").
+
+=item * notesrc_known_deviations
+
+A list of areas where this component is known to not conform to spec. (e.g. "Feature X is currently not working because defect Y needs to be fixed in component Z").
+
+=item * notesrc_bugs_fixed
+
+A list of defects fixed in this release (ideally including the defect reference code and description).
+
+=item * notesrc_bugs_remaining
+
+A list of known defects outstanding in this release (again, ideally including the defect reference code and description).
+
+=item * notesrc_other_changes
+
+A list of other changes made to the component (e.g. new features).
+
+=back
+
+=back
+
+Here's an example F<.mrp> file:
+
+  component      mycomp
+  source	 \mycomp
+  binary	 \mycomp\group wins udeb
+  binary	 \mycomp\group thumb urel
+  exports        \mycomp\group
+  notes_source	 \mycomp\group\release.src
+
+=head1 Making a Single Component Release
+
+The command C<MakeRel> can be used to create a single component release. It is assumed that the binaries to be released have already been built and tested. The following command...
+
+  makerel mycomp 001
+
+...instructs C<MakeRel> to read the F<mrp> file F<mycomp.mrp> (note, specifying the F<mrp> extension is optional) and generate a release packet with the version 001. If C<mycomp> version C<001> already exists, an error will be generated. Also, if any of the binaries referred to by the F<mrp> file do not exist, an error will be generated. The release will be put into the component's archive (specified in the project's archive path file, see the document I<Installation Guide> for details). Once a release has been made, the command C<GetRel> can be used to retrieve it.
+
+=head1 Making Multiple Component Releases
+
+C<MakeRel> can also be used to create more than one component release in one pass. The various F<mrp> file names and versions must be specified in a text file with lines in the following format:
+
+ <mrp_name> <version> [<internal_version>]
+
+C<MakeRel> can then be envoked as follows:
+
+ makerel mycomps.txt
+
+This technique can be useful when preparing the first set of releases for a project. However, where ever possible the command C<MakeEnv> should be used rather than C<MakeRel> because this performs a rigorous check of the environment to ensure it can be reliably reproduced in it's entirety.
+
+=head1 Making an Environment Release
+
+Releasing an environment involves releasing one or more components in a way that ensures the entire F<\epoc32> in which they currently reside can be reproduced. The command C<MakeEnv> is used to do this, which makes heavy use of the drive's environment database (this is a binary file stored on the current drive in F<\epoc32\relinfo>). Whenever a component is installed, upgraded or removed from an environment, the drive's environment database is updated. At any point in time, the environment database should contain an up to date list of versions of each component installed. The command C<EnvInfo> displays this information on the screen in a table. Using C<EnvInfo>'s C<-ff> switch, a fuller table can be displayed, for example:
+
+ Component   Version   Internal version                       Status   Mrp
+
+ mycomp1     026       //myproject/latest/mycomp1/...@10106   dirty    \mycomp1\mycomp1.mrp
+ mycomp2     057       //myproject/latest/mycomp1/...@10157   clean    \mycomp2\mycomp2.mrp
+
+ Overall status: dirty
+
+The status column shows the current status of each component currently installed. A status of C<clean> means that the component's binaries can be reproduced (this is determined by comparing the current time stamps of the files against as set that was stored when the component was installed (the component's I<signature>)). A status of C<dirty> means that the binaries cannot be reproduced. If any components have a status of C<dirty>, then the overall status of the environment will be C<dirty>. It is not possible to use C<MakeEnv> to release components whilst the environment is in a dirty state. In order to release the environment, all dirty components must have their status changed to C<pending release>. This may be done for a single component using the command C<PrepRel>:
+
+ preprel mycomp1 version [internal_version]
+
+Note, an internal version can be optionally specified. This will appear in the component's release notes, and may be of use for referrencing a configuration within a source control repository, for example. The command C<PrepEnv> can be used to prepare more than one component for release in one step.
+
+Even if all the components installed have a status of either C<clean> or C<pending release>, the overall status will be C<dirty> if there are files in the F<\epoc32> tree that are of unknown origin to the release tools, i.e. files that have not already been released by the C<clean> components, and will not be released by the C<pending release> components. In this situation one or more F<mrp> files will need to be changed to capture these files, or they will need to be removed from the environment before it can be released. Once C<EnvInfo> reports that the environment has an overall status of C<pending release>, the command C<MakeEnv> can be used to generate the releases. This command need not take any parameters, but using the C<-v> switch instructs it to be verbose about its activities.
+
+Once C<MakeEnv> has been run, other people in the same site may access the environment using C<GetEnv>. To provide remote sites access, the releases must first be encrypted and put on the project's FTP site. This is done using the command C<ExportEnv>. Other sites can then use the command C<ImportEnv> to bring the new releases into their local archive (see the document I<Installation Guide> for details of how to configure the release tools to do exporting and importing).
+
+=head1 Releasing the Output of a Build
+
+An individual site may have a build team whose role is to build and distribute the software being developed at that site. However, each time a build is performed, certain components may not have changed since the last time they were built. The command C<ValidateEnv> can be used to determine which components have changed and therefore need to be released. This is likely to significantly reduce the amount of data that must be transferred between sites (and ultimately down onto developer's workstations) compared to simply releasing everything each time. The following procedure is most commonly used:
+
+=over 4
+
+=item 1
+
+Install a reference environment using C<GetEnv> (this will be the environment against which C<ValidateEnv> will do its comparisons).
+
+=item 2
+
+Install the source to be built (normally from a source control system).
+
+=item 3
+
+Perform a clean build of the source, over writing the previously released binaries.
+
+=item 4
+
+Test the resultant binaries, repeating step 3 until all problems have been resolved.
+
+=item 5
+
+Run C<ValidateEnv> with no arguments. This will cause the binaries of each component currently installed to be unpacked into a temporary directory and compared with those in the current environment. The comparison is done by a tool that is able to ignore irrelevant differences between executables (such as data in headers). Any components that pass this comparison will have their signatures regenerated and their status set to C<clean>. Any component that fail this comparison will remain with a C<dirty> status. A list of components that failed will also be displayed at the end.
+
+=item 6
+
+Use C<PrepEnv> or C<PrepRel> to set the status of all C<dirty> components to C<pending release>, assigning a new version to each.
+
+=item 7
+
+Use C<MakeEnv> to release the environment.
+
+=back
+
+=head1 Trivia
+
+The file extension F<mrp> originates from the first version of the LPD release tools. It stood for B<M>C<ake>B<R>C<el> B<P>C<roject>, in keeping with the C<MakMake> file extension F<mmp>. Back then, the command C<MakeEnv> did not exist - C<MakeRel> was the only mechanism for making releases. The extension is retained now purely for historic reasons.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/ManagingEnvironments	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,70 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+=head1 Overview
+
+This document is intended to provide an overview of how to update and distribute environments.
+
+=head1 Receiving Releases
+
+
+
+
+ in one of three ways:
+
+=over 4
+
+=item *
+
+Via the local archive.
+
+=item *
+
+Via a remote archive.
+
+=item *
+
+Via a central FTP site.
+
+=item *
+
+
+
+=head1 Versioning
+
+=head1 Integration Clusters
+
+=head1 Branched Development
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/MergeEnvironments	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,219 @@
+#!perl -w
+# Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# MergeTwoEnvironments
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use RelData;
+use IniData;
+use MrpData;
+use EnvDb;
+use Getopt::Long;
+use Data::Dumper;
+use Utils;
+
+# Process command-line options
+Getopt::Long::Configure ("bundling");
+my ($help, $verbose, $project, $releasenotes, $dummyrun, $internalver, $force);
+GetOptions("h" => \$help, "v+" => \$verbose, "w=s" => \$project, "r=s" => \$releasenotes, "d" => \$dummyrun, "i=s" => \$internalver, 'f' => \$force);
+$verbose ||= 0;
+$internalver ||= "-";
+
+
+# Get the name and version of the new environment
+my ($newcomp, $newver, @argsleft) = @ARGV;
+print "Using \"$newcomp\" \"$newver\"\n" if ($verbose);
+
+# Eat up the environments to merge
+my @envstomerge;
+while (scalar @argsleft) {
+  my ($oldcomp, $oldver, $prefix);
+  ($oldcomp, $oldver, $prefix, @argsleft) = @argsleft;
+  print "Adding \"$oldcomp\" \"$oldver\" prefix \"$prefix\"\n" if ($verbose);
+  push @envstomerge, {
+    comp => $oldcomp,
+    ver => $oldver,
+    prefix => $prefix
+  };
+  die "You must provide a component, version and environment for each environment you want to merge" unless $oldcomp && $oldver && defined $prefix;
+    # In fact, a blank (but defined) prefix might be worth having so we'll let them get away with that
+}
+
+print <<ENDHELP and exit if $help;
+Merges several environments into a new release.
+Usage:
+MergeEnvironments <options> newcomp newver {oldcomp oldver prefix} ...
+
+The {oldcomp oldver prefix} section must be repeated at least twice
+
+Options:
+
+-r <release.src> the release.src file to use (mandatory)
+-h               show this help
+-w <project>     make the reldata in this project
+-v               verbose
+-f               (deprecated)
+-d               dummy run (just report the environment to be produced)
+-i <ver>         internal version number of the release we're creating
+ENDHELP
+
+die "You must specify a release notes file" unless $releasenotes;
+die "Release notes file \"$releasenotes\" doesn't exist" unless -e $releasenotes;
+
+##############################################################################
+
+# Create objects that the Release Tools need
+my $iniData = New IniData;
+my $envDb = Open EnvDb($iniData);
+
+# The final environment we're going to use
+my %newenv;
+
+foreach my $mergeenv (@envstomerge) {
+  my $env = ReadEnvironmentFromRelData($mergeenv->{comp}, $mergeenv->{ver});
+  my %copy = %$env;
+
+  # Delete things according to the prefix
+  foreach (keys %copy) {
+    my $prefix = $mergeenv->{prefix};
+    delete $copy{$_} if ($copy{$_} !~ m/^$prefix/i);
+  }
+
+  %newenv = (%copy, %newenv);
+}
+
+# Finally make sure our new component itself is in the environment
+$newenv{$newcomp} = $newver;
+
+if ($verbose || $dummyrun) {
+  print "Have combined the two environments. Results are:\n";
+  print Dumper(\%newenv);
+}
+
+CreateNewRelease($newcomp, $newver, \%newenv, $project) unless $dummyrun;
+
+exit;
+
+##############################################################################
+sub ReadEnvironmentFromRelData {
+  my $comp = shift;
+  my $ver = shift;
+  print "Reading environment from \"$comp\", \"$ver\"...\n" if ($verbose);
+  my $rd = Open RelData($iniData, $comp, $ver, 2) or die "Couldn't open reldata for \"$comp\" \"$ver\"";
+  return $rd->Environment;
+}
+
+sub CreateNewRelease {
+  my $comp = shift;
+  my $ver = shift;
+  my $env = shift;
+  my $project = shift;
+
+  my $fakeMrpName = Utils::PrependEpocRoot("\\__reltools_tmp_mrp");
+  WriteFakeMrp($fakeMrpName, $comp, $releasenotes);
+
+  my $mrpData = New MrpData($fakeMrpName,
+                          $ver, 
+                          $internalver, 
+                          $iniData, 
+                          $verbose,  # verbosity
+                          0); # fixLibs
+
+  unlink($fakeMrpName);
+
+  my $dir = $iniData->PathData->LocalArchivePathForNewComponent($comp, $ver, $project);
+  print "Making directory \"$dir\"\n" if ($verbose);
+  Utils::MakeDir($dir);
+  print "Writing out reldata\n";
+  my $relData = New RelData($iniData,
+                   $mrpData, 
+                   $releasenotes,
+                   $env, 
+                   "MergeTwoEnvironments", 
+                   $verbose, # verbosity
+                   undef, # dontPersist
+                   $project);
+  print "$comp $ver created.\n";
+}
+
+sub WriteFakeMrp {
+  my $name = shift;
+  my $comp = shift;
+  my $relnotes = shift;
+  open(FILE, ">$name") or die "Couldn't write to \"$name\" because $!";
+  print FILE "component $comp\nnotes_source $relnotes\n";
+  close FILE;
+}
+
+__END__
+
+=head1 NAME
+
+MergeEnvironments - Merge the environments of several existing releases into a new release
+
+=head1 SYNOPSIS
+
+MergeEnvironments <options> newcomp newver {oldcomp oldver prefix} ...
+
+The {oldcomp oldver prefix} section must be repeated at least twice.
+
+Options:
+
+  -r <release.src> the release.src file to use (mandatory)
+  -h               help
+  -w <project>     make the new release in this project (only applicable for new-style archive-path arrangements)
+  -v               verbose (-vv = very verbose)
+  -f		   (deprecated)
+  -d               dummy run (just report the environment to be produced)
+  -i <ver>         internal version number of the release we're creating
+
+=head1 DESCRIPTION
+
+This tool will merge several environments to produce a new one. It reads the environment from two existing components, and produces another one. This new component just contains an environment; it has no binaries nor source.
+
+It is expected that you will then use C<validateenv> to validate against that environment.
+
+=head1 KNOWN BUGS
+
+Not really a defect, but it's limiting that you can only merge the environments based on the prefix of the version number. It would be nice to have more flexible criteria.
+
+The command line syntax is not intuitive. This may be fixed one day.
+
+But much more likely, the whole issue will go away with Release Tools 3, when validation will be substantially changed.
+
+=head1 STATUS
+
+Supported. If you find a problem, please report it to us.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/MergeEnvironments.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/ModNotes	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,137 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use RelData;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'ModNotes');
+my $comp;
+my $notesSrc;
+my $ver;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+ModNotes();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions('h' => \$help, 'v+' => \$verbose);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $comp = shift @ARGV;
+  $notesSrc = shift @ARGV;
+  $ver = shift @ARGV;
+
+  unless (defined $comp and defined $notesSrc and $#ARGV == -1) {
+    print "Error: Invalid arguments\n";
+    Usage(1);
+  }
+
+  unless (defined $ver) {
+    my $envDb = EnvDb->Open($iniData, $verbose);
+    $ver = $envDb->Version($comp);
+    unless (defined $ver) {
+      die "Error: Version not specified and $comp not currently installed\n";
+    }
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: modnotes [options] <component> <notes_source_file> [<version>]
+
+options:
+
+-h  help
+-v  verbose output (-vv very verbose)\n");
+}
+
+sub ModNotes {
+  my $relData = RelData->Open($iniData, $comp, $ver, $verbose);
+  $relData->UpdateNotes($notesSrc);
+  print "Release notes for $comp $ver updated\n";
+}
+
+
+__END__
+
+=head1 NAME
+
+ModNotes - Modifies the release notes of a release that has already been made.
+
+=head1 SYNOPSIS
+
+  modnotes [options] <component> <notes_source_file> [<version>]
+
+options:
+
+  -h  help
+  -v  verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+Occasionally release are made using the wrong release notes source. Also, sometimes mistakes in the source are spotted after the release has been made. C<ModNotes> may be used to rectify these problems after a release has been made. Unless a version is explicitly specified, the release notes of the currently installed version will be modified.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/ModNotes.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/MrpComplexity	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,218 @@
+#!perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use Utils;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $iniData = IniData->New();
+my $force;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+Utils::QueryUnsupportedTool(undef, $force);
+my $ratings = ScanMrps();
+PrintReport($ratings);
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ('bundling');
+  my $help;
+  GetOptions('h' => \$help, 'v+' => \$verbose, 'f' => \$force);
+
+  if ($help) {
+    Usage(0);
+  }
+}
+
+sub ScanMrps {
+  my $envDb = EnvDb->Open($iniData, $verbose);
+  my @comps = keys %{$envDb->{db}}; # This should go through an EnvDb interface - needs adding.
+  my %ratings;
+  foreach my $thisComp (@comps) {
+    my $dbEntry = $envDb->{db}->{$thisComp};
+    if (-e $dbEntry->{mrpName}) {
+      $ratings{$thisComp} = RateMrpFile($dbEntry->{mrpName});
+    }
+    elsif ($verbose) {
+      print "Warning: $thisComp\'s mrp file (\"$dbEntry->{mrpName}\") does not exit\n";
+    }
+  }
+  return \%ratings;
+}
+
+sub PrintReport {
+  my $ratings = shift;
+  my $tableData = [["Component", "Complexity Rating"]];
+
+  foreach my $thisComp (sort { $ratings->{$b} <=> $ratings->{$a} } keys %$ratings) {
+    if ($ratings->{$thisComp} > 0) {
+      push (@$tableData, [$thisComp, $ratings->{$thisComp}]);
+    }
+  }
+
+  print "\n";
+  Utils::PrintTable($tableData, 1);
+}
+
+sub RateMrpFile {
+  my $file = shift;
+  my $rating = 0;
+  print "Rating \"$file\"...\n" if ($verbose);
+  open (MRP, $file) or die "Error: Couldn't open \"$file\": $!\n";
+  while (my $line = <MRP>) {
+    chomp $line;
+    $line =~ s/^\s*$//;
+    $line =~ s/\s*#.*//;
+    unless ($line) {
+      # Nothing left.
+      next;
+    }
+
+    my $keyWord;
+    my $operand;
+    if ($line =~ /(\S+)\s+(.*)/) {
+      $keyWord = $1;
+      $operand = $2;
+    }
+    else {
+      die "Error: Invalid mrp file \"$file\"";
+    }
+
+    if ($keyWord eq 'binary') {
+      if (-f $operand) {
+	print "binary <file> statement found in \"$file\"\n" if ($verbose);
+	++$rating;
+      }
+    }
+    elsif ($keyWord eq '-binary') {
+      print "-binary statement found in \"$file\"\n" if ($verbose);
+      ++$rating;
+    }
+    elsif ($keyWord eq 'source') {
+      if (-f $operand) {
+	print "source <file> statement found in \"$file\"\n" if ($verbose);
+	++$rating;
+      }
+    }
+    elsif ($keyWord eq 'export_file') {
+      print "export_file statement found in \"$file\"\n" if ($verbose);
+      ++$rating;
+    }
+    elsif ($keyWord eq '-export_file') {
+      print "-export_file statement found in \"$file\"\n" if ($verbose);
+      ++$rating;
+    }
+    elsif ($keyWord eq 'testbinary') {
+      print "testbinary statement found in \"$file\"\n" if ($verbose);
+      ++$rating;
+    }
+  }
+  close (MRP);
+  return $rating;
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: mrpcomplexity [options] <file_name>
+
+options:
+
+-h  help
+-v  verbose output (-vv very verbose)
+-f  force, skip warnings about unsupported-ness\n");
+}
+
+
+__END__
+
+=head1 NAME
+
+MrpComplexity - Reports information on undesirable mrp constructs.
+
+=head1 SYNOPSIS
+
+  MrpComplexity [options]
+
+options:
+
+  -h  help
+  -v  verbose output (-vv very verbose)
+  -f  force, skip warnings about unsupported-ness
+
+=head1 DESCRIPTION
+
+Under normal circumstances F<mrp> files should contain very little information regarding where to find binary files. This information is best placed within the build configuration files (F<bld.inf>s and F<.mmp>s), as doing so allows F<mrp> files to be relatively self-maintaining.
+
+However, F<mrp> files support a rich syntax. This was designed to make it possible to release a component even if is it not possible to change the build configuration files (perhaps due to ownership restraints). Under these conditions, F<mrp> files can often become complex and as a result time consuming to maintain.
+
+This command provides a report that can be used to identify overly complex F<mrp> files, so that the root cause of this complexity can be found and eliminated. For each component in the environment, if its F<mrp> file is available, it is parsed and rated. The rating each is assigned is determined from the number of the following constructs that are found:
+
+ binary <file_name>
+ -binary
+ source <file_name>
+ export_file
+ -export_file
+ testbinary
+
+The report is presented showing the components with the highest complexity rating first. Those with a rating of zero are not shown.
+
+=head1 STATUS
+
+Unsupported/experimental. If you find a problem, please send us a patch.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/MrpComplexity.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/MrpData.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2418 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+
+
+package MrpData;
+
+use strict;
+use base qw(Symbian::CBR::MRPInterface);
+use File::Find;
+use File::Copy;
+use File::Basename;
+use File::Spec;
+use Utils;
+use Cwd;
+use Symbian::CBR::MRP::Reader;
+use IniData;
+
+use Carp;
+
+use constant MAX_PATH_LENGTH => 245; #If a file name has a path > MAX_PATH_LENGTH an error will be produced.
+
+
+
+use File::Path;
+use XML::Simple;
+use POSIX qw(strftime);
+use Data::Dumper;
+
+
+our $cache = {}; # Persistent (private) cache
+
+sub New {
+  my $pkg = shift;
+  my $self = {};
+  bless $self, $pkg;
+  $self->{mrpName} = shift;
+  $self->{ver} = shift;
+  $self->{intVer} = shift;
+  $self->{iniData} = shift || IniData->New();
+  $self->{verbose} = shift || 0;
+  $self->{fixMissingLibs} = shift;
+  $self->ExpandMrpName();
+  
+  # This will be used by the IPR stuff, so that it can popultate the MrpData object without circular stuff
+  my $doNotRead = shift;
+  
+  #remove the / from mrpname
+  $self->{mrpName} =~ s/^[\\\/]//;
+  
+  # Lowercase the MRP name so that the case is consistent when checking the cache
+  my $lcMrpName = lc ($self->{mrpName});
+  
+  if ($cache->{$lcMrpName}) {
+    $cache->{$lcMrpName}->{ver} = $self->{ver} if ($self->{ver});
+    $cache->{$lcMrpName}->{intVer} = $self->{intVer} if ($self->{intVer});             
+    return $cache->{$lcMrpName};
+  }
+
+  $cache->{$lcMrpName} = $self;
+  
+  if (!$doNotRead) {
+    $self->ReadMrp();
+  }
+  
+  return $self;
+}
+
+sub Populated {
+  my $self = shift;
+  
+  return $self->{populated};
+}
+
+
+sub ExpandMrpName {
+  my $self = shift;
+
+  unless ($self->{mrpName} =~ /.mrp$/i) {
+    $self->{mrpName} .= '.mrp';
+  }
+}
+
+sub Component {
+  my $self = shift;
+  unless (exists $self->{comp}) {
+    die "Error: Component name not found in mrp\n";
+  }
+  return $self->{comp};
+}
+
+sub MrpName {
+  my $self = shift;
+  return $self->{mrpName};
+}
+
+sub ExternalVersion {
+  my $self = shift;
+  return $self->{ver};
+}
+
+sub InternalVersion {
+  my $self = shift;
+  return $self->{intVer};
+}
+
+sub NotesSource {
+  my $self = shift;
+  unless (exists $self->{notes_src}) {
+    die "Error: Notes source not found in mrp for $self->{comp}\n";
+  }
+  return $self->{notes_src};
+}
+
+sub ClassifySource {
+  my $self = shift;
+  return if defined $self->{src};
+
+  foreach my $item (keys %{$self->{srcitems}}) {
+    if (-d Utils::PrependSourceRoot($item)) {
+      $self->HandleSourceDir($item);
+    }
+    elsif (-f Utils::PrependSourceRoot($item)) {
+      $self->HandleSourceFile($item);
+    }
+    else {
+      die "Error: \"$item\" is not a file or directory in $self->{mrpName}\n";
+    }
+  }
+}
+
+sub SourceCategories {
+  my $self = shift;
+  $self->ClassifySource();
+  if (defined $self->{src}) {
+    my @categories = keys %{$self->{src}};
+    return \@categories;
+  }
+  return [];
+}
+
+sub Source {
+  my $self = shift;
+  my $category = uc(shift);
+  $self->ClassifySource();
+  unless (defined $category) {
+    $category = 'unfiltered';
+  }
+  if (defined $self->{src}->{$category}) {
+    return $self->{src}->{$category};
+  }
+  return [];
+}
+
+sub SourceFilterErrors {
+  my $self = shift;
+  $self->ClassifySource();
+  if (defined $self->{sourceFilterErrors}) {
+    return $self->{sourceFilterErrors};
+  }
+  return [];
+}
+
+sub BinaryCategories {
+  my $self = shift;
+
+  $self->ProcessBinaries();
+
+  if ($self->{bins}) {
+    my @categories = sort keys %{$self->{bins}};
+    return \@categories;
+  }
+  return [];
+}
+
+sub Binaries {
+  my $self = shift;
+  my $category = shift;
+
+  $self->ProcessBinaries();
+
+  my @binList = ();
+  if ($category) {
+    die unless (exists $self->{bins}->{$category});
+    foreach my $thisBin (sort keys %{$self->{bins}->{$category}}) {
+      push (@binList, $self->{bins}->{$category}->{$thisBin});
+    }
+  }
+  else {
+    foreach my $thisCategory (@{$self->BinaryCategories()}) {
+      push (@binList, @{$self->Binaries($thisCategory)});
+    }
+  }
+  return \@binList;
+}
+
+sub ExportCategories {
+  my $self = shift;
+  if ($self->{iniData}->CategoriseExports()) {
+    $self->ProcessExports();
+    if ($self->{exports}) {
+      my @categories = sort keys %{$self->{exports}};
+      return \@categories;
+    }
+  }
+  return [];
+}
+
+sub Exports {
+  my $self = shift;
+  my $category = uc(shift);
+
+  $self->ProcessExports();
+
+  my @exportList = ();
+  if ($self->{iniData}->CategoriseExports()) {
+    if ($category) {
+      die unless (exists $self->{exports}->{$category});
+      push (@exportList, @{$self->{exports}->{$category}});
+    }
+    else {
+        foreach my $thisCategory (@{$self->ExportCategories()}) {
+          push (@exportList, @{$self->Exports($thisCategory)});
+        }
+    }
+  }
+  elsif ($category) {
+    die; # There are never any export categories if export categorisation is not enabled. Caller didn't call ExportCategories prior to this.
+  }
+  return \@exportList;
+}
+
+
+sub ClassifyAutomaticExports {
+  # Classify exports that were specified using the 'exports' keyword.
+  #
+  # This is a bit ugly. The problem's root is that it's not possible to ask the build tools where exports originated
+  # from. This information is needed to be able to categorise exports. To get it, the release tools therefore have
+  # to go 'under the hood' of the build tools. Yuk!
+  #
+  # Implementation choices were a) Parse bld.inf files, and b) Parse the generated export makefiles. Option (b) was
+  # chosen because bld.infs are notoriously difficult to robustly parse.
+
+  my $self = shift;
+  if (exists $self->{exports}->{automatic}) { # Only perform the classification if we haven't already done it.
+    foreach my $thisAbldPath (@{$self->{exports}->{abldPaths}}) {
+      $thisAbldPath = Utils::PrependSourceRoot($thisAbldPath);
+      # Scan the makefile looking for the exports we're expecting (from invoking 'abld -w exports' in HandleExports).
+
+      my $exportMakeFile;
+      my $testExportMakeFile;
+      $self->ExportMakeFile($thisAbldPath, \$exportMakeFile, \$testExportMakeFile);
+
+      if ($exportMakeFile){
+        $self->ProcessExportMakeFile($exportMakeFile, $thisAbldPath);
+
+      }
+      if ($testExportMakeFile){
+        $self->ProcessExportMakeFile($testExportMakeFile, $thisAbldPath);
+      }
+    }
+
+  }
+
+  if (scalar(keys %{$self->{exports}->{automatic}}) > 0) {
+    foreach my $unprocessed_export (keys %{$self->{exports}->{automatic}})
+	{
+		print "UNPROCESSED EXPORT: $unprocessed_export\n";
+	}
+
+    die "Error: Problem extracting export IPR categories for \"$self->{mrpName}\"\n";
+  }
+
+  delete $self->{exports}->{automatic};
+  delete $self->{exports}->{abldPaths};
+}
+
+sub ProcessExportMakeFile {
+	my $self = shift;
+	my $exportMakeFile = shift;
+        my $abldPath = shift;
+        my $errors = 0;
+        open (MAKEFILE, $exportMakeFile) or die "Error: Couldn't open \"$exportMakeFile\": $!\n";
+        while (my $line = <MAKEFILE>) {
+          $line =~ s/\\ / /g; # Get rid of escaped spaces.
+          if ($line =~ /^(.*)\s+:\s+(.*)/) {
+            # Found a possibility - need to see if it's one of the exports we're looking for.
+            my $destination = $1;
+            my $source = $2;
+            if (Utils::WithinEpocRoot($destination)) {
+              $destination = Utils::RemoveEpocRoot($destination);
+            }
+            if (exists $self->{exports}->{automatic}->{lc($destination)}) {
+              $source = Utils::RemoveSourceRoot($source);
+              # Add to exports to be processed - source and destination
+              push @{$self->{exportsToBeProcessed}}, {source => $source,
+                                                      destination => $destination,
+                                                      abldPath => $abldPath};
+              
+              delete $self->{exports}->{automatic}->{lc($destination)};
+            }
+          }
+          elsif ($line =~ /unzip\s+-u\s+-o\s+(.*)\s+-d\s+\"(.*)\"/) {
+            # Looks like a zip file being exported - check contents.
+            my $zipFileName = $1;
+            my $destinationDir = $2;
+            my $zipContents = Utils::ListZip($zipFileName);
+            $zipFileName = Utils::RemoveSourceRoot($zipFileName);
+            foreach my $thisExport (@$zipContents) {
+              $thisExport = Utils::ConcatenateDirNames($destinationDir, $thisExport);
+              if (Utils::WithinEpocRoot($thisExport)) {
+                $thisExport = Utils::RemoveEpocRoot($thisExport);
+              }
+              if (exists $self->{exports}->{automatic}->{lc($thisExport)}) {
+                # Add to exports to be processed - source and destination
+                push @{$self->{exportsToBeProcessed}}, {source => $zipFileName,
+                                                        destination => $thisExport,
+                                                        abldPath => $abldPath};
+                
+                delete $self->{exports}->{automatic}->{lc($thisExport)};
+              }
+            }
+          }
+        }
+        close (MAKEFILE);
+}
+
+sub ExportMakeFile {
+  # Invoke 'bldmake bldfiles -v' to find the full path to the EXPORT.MAKE file.
+  my $self = shift;
+  my $abldPath = shift;
+  my $exportMakeFileRef = shift;
+  my $testExportMakeFileRef = shift;
+  my $cwd = cwd();
+  my $last = 0;
+  chdir $abldPath or die "Error: Couldn't change working directory to \"$abldPath\": $!\n";
+  open (BLDMAKE, 'bldmake bldfiles -v |') or die "Error: Couldn't run \"bldmake bldfiles -v |\" in \"abldPath\": $!\n";
+  my $exportMakeFile;
+  my $testExportMakeFile;
+  while (my $line = <BLDMAKE>) {
+    if ($line =~ /Creating \"(.*EXPORT.MAKE)\"/) {
+      $exportMakeFile = $1;
+      if ($last == 1){ # found both EXPORT.MAKE and EXPORTTEST.MAKE
+        last;
+      }
+      $last = 1;
+    }
+    elsif ($line =~ /Creating \"(.*EXPORTTEST.MAKE)\"/) {
+      $testExportMakeFile = $1;
+      if ($last == 1){ # found both EXPORT.MAKE and EXPORTTEST.MAKE
+        last;
+      }
+      $last = 1;
+    }
+  }
+  close (BLDMAKE);
+  chdir $cwd or die "Error: Couldn't change working directory to \"$cwd\": $!\n";
+  unless ($exportMakeFile || $testExportMakeFile) {
+    die "Error: Unable to find \"EXPORT.MAKE\" or \"EXPORTTEST.MAKE\" for \"$abldPath\"\n";
+  }
+  $$exportMakeFileRef = $exportMakeFile;
+  $$testExportMakeFileRef = $testExportMakeFile;
+}
+
+sub ClassifyManualExports {
+  my $self = shift;
+  if (exists $self->{exports}->{manual}) { # Only perform the classification if we haven't already done it.
+    foreach my $thisSource (keys %{$self->{exports}->{manual}}) {
+      push @{$self->{exportsToBeProcessed}}, {source => $thisSource,
+                                              destination => $self->{exports}->{manual}->{$thisSource}};
+    }
+    delete $self->{exports}->{manual};
+  }
+}
+
+sub ExportInfoForCat {
+  my $self = shift;
+  my $category = uc(shift);
+
+  $self->ProcessExports();
+
+  return $self->{exportinfo}->{$category};
+}
+
+sub ExportSourceFileInfoForCat {
+  my $self = shift;
+  my $category = uc(shift);
+  my $exportfile = shift;
+
+  # In AddExport $category is called $class and $exportfile is $destination
+  return $self->{exportinfo}->{$category}->{$exportfile};
+}
+
+sub AddExport {
+  my $self = shift;
+  my $source = shift;
+  my $destination = shift;
+  my $successfullyAdded = 0;
+
+  my ($class) = Utils::ClassifyPath($self->{iniData}, $source, $self->{verbose}, 0, $self->Component());
+  $class = uc($class);
+
+  if ($class) {
+    $successfullyAdded = 1;
+    push (@{$self->{exports}->{$class}}, $destination);
+  }
+  else {
+    print "Error: Can't find IPR category for export \"$destination\" in \"$self->{mrpName}\"
+       It should correspond to source file \"$source\"\n";
+  }
+
+  # Need to record the src paths.
+  $self->{exportinfo}->{$class}->{$destination} = $source;
+
+  return $successfullyAdded;
+}
+
+sub BinariesAndExports {
+  my $self = shift;
+  # Exports need to be processed first.  If exports are not to be categorised then
+  # they are treated as binary files.
+  my $list = $self->Exports();
+  push (@$list, @{$self->Binaries()});
+  return $list;
+}
+
+sub SourceItems {
+  my $self = shift;
+  return $self->{srcitems};
+}
+
+sub ReadMrp {
+  my $self = shift;
+  my $mrpName = $self->{mrpName};
+  my $cwd = cwd();
+  # If there are mappings and the source root is \\, perform mappings on filename. Otherwise prepend source root.
+  if($self->{iniData}->HasMappings() && Utils::SourceRoot() eq "\\") {
+    $mrpName = $self->{iniData}->PerformMapOnFileName($mrpName);
+  }
+  else{
+    $mrpName = Utils::PrependSourceRoot($mrpName);
+  }
+  
+  my $mrpDir = dirname($mrpName);
+  
+  chdir($mrpDir) or die "Error: Couldn't change working directory to \"$mrpDir\": $!\n";
+ 
+  my $reader = Symbian::CBR::MRP::Reader->instance();
+  $reader->SetVerbose() if ($self->{verbose});
+
+  $reader->ReadFile($mrpName, 'MRPDATA');
+  
+  chdir($cwd) or die "Error: Couldn't change working directory back to \"$cwd\": $!\n";
+  if ($@) {
+    die $@;
+  }
+}
+
+
+sub HandleSourceFile {
+  my $self = shift;
+  my $srcFile = shift;
+
+  my $logErrors = !$self->{iniData}->IgnoreSourceFilterErrors();
+  my ($cat, $errors) = Utils::ClassifyPath($self->{iniData}, $srcFile, $self->{verbose}, $logErrors, $self->Component());
+
+  if ($self->{verbose}) {
+    print "Handling source file $srcFile...\n";
+  }
+  
+  push @{$self->{sourceFilterErrors}}, @$errors if @$errors;
+  push @{$self->{src}->{uc($cat)}}, $srcFile;
+}
+
+sub HandleSourceDir {
+  my $self = shift;
+  my $srcDir = Utils::PrependSourceRoot(shift);
+
+  if ($self->{verbose}) {
+    print "Filtering source directory $srcDir into categories...\n";
+  }
+ 
+  # Create function to handle files in a directory ($File::Find::dir)
+  # Takes: List of items (files and dirs) in the directory 
+  my $dirhandler = sub {
+    my @entries = @_;
+    my $hasdistpol = scalar(grep(lc($_) eq "distribution.policy", @entries));
+    
+    @entries = grep(lc($_) ne "distribution.policy", @entries); # remove distribution.policy entries
+    
+    foreach my $entry (@entries) {
+      if (Utils::CheckForUnicodeCharacters($entry)) {
+          die "Error: \"$File::Find::dir\\$entry\" contains unicode characters, which are incompatible with the CBR Tools. This file can not be included in this release.\n"; 
+      }    
+    }
+    
+    my @files = grep(-f File::Spec->catfile($File::Find::dir,$_), @entries);
+    
+    # Remove the abld entries from the source
+    $self->RemoveAbldFromSource($File::Find::dir, \@files);
+    
+    if (scalar(@files) > 0) {    
+      
+      # Tag all the entries in this directory with that category
+      foreach my $entry (@files) {
+        next if $entry =~ /^\.\.?$/; # Skip . and ..
+        my $entry = File::Spec->catfile($File::Find::dir, $entry);
+        Utils::TidyFileName(\$entry);
+        
+        $entry = Utils::RemoveSourceRoot($entry); # remove source root path or it will be added twice!
+        my ($category, $errors) = Utils::ClassifyPath($self->{iniData}, $entry, $self->{verbose}, $self->{iniData}->IgnoreSourceFilterErrors(), $self->Component());
+        push @{$self->{sourceFilterErrors}}, @$errors; # There will be no errors in @$errors if IgnoreSourceFilterErrors was set
+        
+        # (Optionally) guard against unclassified source
+        if (lc($category) eq "x" and $self->{iniData}->DisallowUnclassifiedSource()) {
+          die "Error: \"$File::Find::dir\" contains unclassified source code\n";
+        }
+        
+        push @{$self->{src}->{uc($category)}}, $entry;
+      } 
+    } else {
+      # There are no files to categorise here
+      if (($hasdistpol) and (!($self->{iniData}->IgnoreSourceFilterErrors()))) {
+        push @{$self->{sourceFilterErrors}}, "Note: unnecessary policy file in $File::Find::dir\n";
+      }
+    }
+    
+    # Return full list of entries to continue scan
+    return @entries;
+  };
+
+  # Traverse the directory tree in $srcDir calling &$dirhandler on all directories
+  find({"wanted"=>sub{}, "preprocess"=>$dirhandler, "no_chdir" => 1}, $srcDir);
+}
+
+sub RemoveAbldFromSource {
+  my $self = shift;
+  my $dir = shift;
+  my $files = shift;
+  
+  $dir = File::Spec->canonpath($dir);
+
+  foreach my $entry (@{$self->{binaryStatements}}, @{$self->{exportsStatements}}) {
+    if ($entry->{abldPath} eq $dir) {
+      @$files = grep $_ !~ /abld.bat/i, @$files;
+      return;
+    }
+  }  
+}
+
+sub HandleBinDirOrFile {
+  my $self = shift;
+  my $remove = shift;
+  my $category = shift;
+  my $file = shift;
+  my $successRef = shift;
+
+  if (-d $file) {
+    $self->HandleBinDir($remove, $category, $file, $successRef);
+  }
+  elsif ($file) {
+    $self->HandleBinFile($remove, $category, $file, $successRef);
+  }
+}
+
+sub HandleBinFile {
+  my $self = shift;
+  my $remove = shift;
+  my $category = shift;
+  my $file = Utils::RemoveEpocRoot(shift);
+  my $successRef = shift;
+
+  my $lcFile = lc($file); # Note, duplicate check is performed on lower case file name. Original case is preserved within the hash.
+  Utils::TidyFileName(\$file);
+
+  die "No category was provided" unless $category;
+
+  if ($remove) {
+    foreach my $thisClassification (keys %{$self->{bins}}) {
+      if (exists $self->{bins}->{$thisClassification}->{$lcFile}) {
+        if ($self->{verbose} > 1) { print "Excluding binary file \"$file\" from $thisClassification...\n"; }
+        delete $self->{bins}->{$thisClassification}->{$lcFile};
+        $$successRef = 1;
+      }
+    }
+  }
+  else {
+    unless ($self->IsDuplicateBin($file)) {
+      if ($self->{verbose} > 1) { print "Adding binary file \"$file\" to category $category...\n"; }
+      $self->{bins}->{$category}->{$lcFile} = $file;
+      $$successRef = 1;
+    }
+  }
+
+  }
+
+
+sub HandleBinDir {
+  my $self = shift;
+  my $remove = shift;
+  my $category = shift;
+  my $binDir = shift;
+  my $successRef = shift;
+
+  find($self->ProcessBinFile($remove, $category, $successRef), $binDir);
+}
+
+sub ProcessBinFile {
+  my $self = shift;
+  my $remove = shift;
+  my $category = shift;
+  my $successRef = shift;
+  return sub {
+    my $file = $File::Find::name;
+    
+    if (Utils::CheckForUnicodeCharacters($file)) {
+      die "Error: \"$file\" contains unicode characters, which are incompatible with the CBR Tools. This file can not be included in this release.\n"; 
+    }    
+    
+    if (-f $file) {
+      Utils::TidyFileName(\$file);
+      $self->HandleBinFile($remove, $category, $file, $successRef);
+    }
+  }
+}
+
+sub IsDuplicateBin {
+  my $self = shift;
+  my $fileName = shift;
+  my $fileNameLc = lc ($fileName);
+
+  my $duplicate = 0;
+  foreach my $thisCategory (keys %{$self->{bins}}) {
+    if (exists $self->{bins}->{$thisCategory}->{$fileNameLc}) {
+      # This file has already been handled once, so it must be a duplicate.
+      # Therefore move it to the 'unclassified' category to ensure it doesn't get released twice.
+      if ($thisCategory ne 'unclassified') {
+	if ($self->{verbose} > 1) {
+	  print "Moving binary file \"$fileName\" to from category $thisCategory to 'unclassified'...\n";
+	}
+	$self->{bins}->{unclassified}->{$fileNameLc} = $fileName;
+	delete $self->{bins}->{$thisCategory}->{$fileNameLc};
+      }
+      $duplicate = 1;
+      last;
+    }
+  }
+
+  return $duplicate;
+}
+
+sub HandleBinSet {
+  my $self = shift;
+  my $remove = shift;
+  my $test = shift;
+  if ($test) {
+    $test = 'test';
+  }
+  else {
+    $test = '';
+  }
+  my $successRef = shift;
+  my $abldPath = shift;
+  $abldPath = SourceRootPath($abldPath);
+  my $plat = shift;
+  my $var = '';
+  if ($_[0] and $_[0] =~ /(u?(?:deb|rel))/i) {
+    $var = shift;
+  }
+  my $mmp = shift;
+  unless ($mmp) {
+    $mmp = '';
+  }
+  
+  $self->ProcessCache($abldPath, $test) if (!exists($self->{abldcache}->{loaded}->{$abldPath}));
+
+  my $plats = $self->ResolveAlias($abldPath, $plat);
+  my $vars;
+  foreach $plat (@$plats) {
+    if ($var) {
+      $vars = [$var];
+    } elsif ($plat =~ /^tools2?$/i) {
+      # Hard-coded and nasty
+      $vars = [ 'deb', 'rel' ];
+    } else {
+      $vars = [ 'udeb', 'urel' ];
+    }
+    foreach $var (@$vars) {
+      push @{$self->{binsets}}, {
+        path => Utils::RemoveSourceRoot($abldPath),
+        plat => $plat,
+        var => $var,
+        mmp => $mmp,
+        test => $test
+      } unless ($remove);
+
+      $self->ReadBinaries($abldPath, $test, $plat, $var, $mmp, $remove, $successRef);
+    }
+  }
+}
+
+
+sub ProcessCache {
+  my $self = shift;
+  my $abldPath = shift;
+  my $test = shift;
+  
+  $self->CheckBuildSystem($abldPath) if(!$self->{buildSystem});
+
+  if($self->{buildSystem} == 2){
+    print "current build system is Raptor...\n" if ($self->{verbose});
+    $self->ProcessRaptorCache($abldPath, $test);
+  }
+  else{
+    print "current build system is Abld...\n" if ($self->{verbose});
+    $self->ProcessAbldCache($abldPath);
+  }
+}
+
+#check which build system would be using
+sub CheckBuildSystem {
+  my $self = shift;
+  my $abldPath = shift;
+  my $buildSystem = $self->{iniData}->BuildSystemVersion($self->{verbose});
+
+  if($buildSystem eq "1") {
+    if ($self->AbldAvailable($abldPath)){
+      $self->{buildSystem} = 1;
+    }
+    else{
+      die "Abld build system isn't available.\n";
+    }
+  }
+  else{
+    if($buildSystem ne "2") {
+	    print "Warning: the value of build system is neither 1 nor 2 so we try to use Raptor.\n" if ($self->{verbose});
+    }
+    
+    if ($self->RaptorAvailable()){
+      $self->{buildSystem} = 2;
+    }
+    elsif($buildSystem ne "2") {
+      print "Warning: Raptor is not available and we try to use Abld.\n" if ($self->{verbose});
+	  	
+      if ($self->AbldAvailable($abldPath)){
+        $self->{buildSystem} = 1;
+      }
+      else{
+        die "Neither Abld nor Raptor is available.\n";
+      }
+    }
+    else{
+      die "Raptor build system is not available.\n";
+    }
+  }
+}
+
+sub ProcessAbldCache {
+  my $self = shift;
+  my $abldPath = shift;
+  if (exists $ENV{ABLDCACHE}) {
+    $self->{abldcache}->{loaded}->{$abldPath}= 1;
+    my $cachefile=File::Spec->catdir($ENV{ABLDCACHE},$abldPath,"cache");
+    if (-f $cachefile) {
+      print "Reading ABLD Cache from $cachefile\n" if ($self->{verbose});
+	
+      open(CACHE, $cachefile) or die "Couldn't open abld cache data file '$cachefile'\n";
+      my @cache = <CACHE>;
+      close(CACHE);
+      eval (join("",@cache)) or die "Error: Couldn't parse abld cache data in '$cachefile': $@\n";
+    }
+  }
+}
+
+sub ProcessRaptorCache {
+  my $self = shift;
+  my $abldPath = shift;
+  my $test = shift;
+
+  my $cwd = cwd();
+  my $driver = $cwd;
+  $driver =~ /^(.:)(.*)/;
+  $driver = $1."\\raptorcache";
+  my $logfile = File::Spec->catdir($driver.$abldPath,"info.xml");
+  if(! -f $logfile){
+    my $makefile = File::Spec->catdir($driver.$abldPath,"Makefile");
+    print "execute SBS to create Raptor XML log file: $logfile\n" if($self->{verbose});
+    chdir $abldPath or die "Error: Couldn't change working directory to \"$abldPath\": $!\n";
+    my $cmd = $self->RaptorLogCmd($abldPath, $logfile, $makefile, $test);
+    open (SBS, $cmd) or die "Error: Couldn't run \"$cmd\" in \"$abldPath\": $!\n";
+    my $foundLog;
+    my $errmsg;
+    while (my $line = <SBS>) {
+      $errmsg = $1 if ($line =~ /sbs : errors: (\d+)/ and $1 > 0);
+      $foundLog = 1 if ($line =~ /sbs: build log in (\w+)/);
+    }
+    close (SBS);
+			  
+    if($errmsg){
+      my $trycount = 50;
+      my $errtag = 0;
+      while($trycount > 0){
+        print "try to run sbs again: $trycount\n";
+        open (SBS, $cmd) or die "Error: Couldn't run \"$cmd\" in \"$abldPath\": $!\n";
+        $errtag = 0;
+        while (my $line = <SBS>) {
+          if ($line =~ /sbs : errors: (\d+)/ and $1 > 0){
+            $errtag = 1;
+            $trycount = $trycount - 1;
+          }
+          $foundLog = 1 if ($line =~ /sbs: build log in (\w+)/);
+        }
+        $trycount =0 if($errtag < 1);
+        close (SBS);
+      }
+      if($errtag == 1 and $trycount == 0) {
+      	die "SBS Error: Couldn't run \"$cmd\" in \"$abldPath\"\n";
+      }
+    }
+    chdir $cwd or die "Error: Couldn't change working directory to \"$cwd\": $!\n";
+    unless ($foundLog) {
+      die "Error: Unable to execute \"SBS\" in \"$abldPath\"\n";
+    }
+  }
+
+  $self->ParseRaptorXmlLog($logfile);
+  $self->PrintCache() if($self->{verbose});
+  $self->{abldcache}->{loaded}->{$abldPath}= 1;
+  print "cache is generated successfully\n" if($self->{verbose});
+}
+
+sub RaptorLogCmd {
+  my $self = shift;
+  my $abldPath = shift;
+  my $logfile = shift;
+  my $makefile = shift;
+  my $test = shift;
+  if ($test) {
+    $test = 'test';
+  }
+  else {
+    $test = '';
+  }
+
+  my $plat = "all";
+  my $iniAll = $self->{iniData}->TargetPlatforms($plat);
+  my $cmd = "SBS -b bld.inf -m $makefile -f $logfile -c default";
+  $cmd = $cmd." -c default.test" if ($test ne '');
+  foreach my $e (@$iniAll) {
+    $cmd = $cmd." -c tools_rel -c tools_deb" if ($e eq "TOOLS");
+    $cmd = $cmd." -c tools2_rel -c tools2_deb" if ($e eq "TOOLS2");
+    $cmd = $cmd." -c armv5.smp" if ($e eq "ARMV5SMP");
+  }
+  $cmd = $cmd." WHAT |";
+  print "Raptor command: $cmd\n";
+  return $cmd;
+}
+
+#check whether Abld build system is available
+sub AbldAvailable {
+  my $self = shift;
+  my $abldPath = shift;
+  my $path = File::Spec->catdir($abldPath,"");
+  my $foundPlats = 0;
+
+  my $cwd = cwd();
+  chdir $abldPath or die "Error: Couldn't change working directory to \"$abldPath\": $!\n";
+  open (BLDMAKE, "bldmake bldfiles |") or die "Error: Couldn't run \"bldmake bldfiles\" in \"$abldPath\": $!\n";
+  while (my $line = <BLDMAKE>) {
+    chomp $line;
+  }
+  close(BLDMAKE);
+	
+  open (ABLD, "abld help |") or die "Error: Couldn't run \"abld help\" in \"$abldPath\": $!\n";
+  while (my $line = <ABLD>) {
+    chomp $line;
+    $foundPlats = 1 if ($line =~ /project platforms:/);
+  }
+  close (ABLD);
+  chdir $cwd or die "Error: Couldn't change working directory to \"$cwd\": $!\n";
+  
+  return $foundPlats;
+}
+
+#check whether Raptor build system is available
+sub RaptorAvailable {
+  my $self = shift;
+  my $maxver = 0;
+  my $midver = 0;
+  my $minver = 0;
+  
+  return 0 if(!-f "\\epoc32\\data\\buildinfo.txt" and !-f "\\epoc32\\data\\kif.xml");
+
+  open (SBS, "sbs -version |") or die "Error: Couldn't run \"sbs -version\": $!\n";
+  while (my $line = <SBS>) {
+    chomp $line;
+    if ($line =~ /^sbs version (\d+)\.(\d+)\.(\d+)/){
+      $maxver = $1;
+      $midver = $2;
+      $minver = $3;
+    }
+  }
+  close (SBS);
+  if ($maxver == 0 and $midver == 0 and $minver == 0) {
+    return 0;
+  }
+  elsif ($maxver < 2 or ($maxver == 2 and $midver < 7)) {
+    die "Error: Raptor build system version must be 2.7.0 or higher.\n";
+  }
+  return 1;
+}
+
+sub ParseRaptorXmlLog {
+  my $self = shift;
+  my $xmlfile = shift;
+
+  my $xmldata;
+  my $trycount = 20;
+
+  while ($trycount > 0) {
+    eval {
+      $xmldata = XMLin($xmlfile);
+    };
+    if ($@) {
+      $trycount = $trycount - 1;
+      print "Try to open raptor log file [$trycount]: $xmlfile\n";
+    }
+    else{
+      $trycount = 0;
+    }
+  }
+
+  my $whatLogElements = $self->WrapVarToArray($xmldata->{whatlog});
+  foreach  my $whatLogElement (@$whatLogElements) {
+    $self->ProcessWhatLogElement($whatLogElement);
+  }
+  
+  foreach my $param (keys %{$self->{abldcache}->{exports}}) {
+    foreach my $destination (keys %{$self->{abldcache}->{exports}->{$param}}) {
+      push @{$self->{abldcache}->{$param}}, [$destination, $self->{abldcache}->{exports}->{$param}->{$destination}];
+    }
+  }
+  delete $self->{abldcache}->{exports};
+  
+  foreach my $param (keys %{$self->{abldcache}->{builds}}) {
+    foreach my $buildItem (keys %{$self->{abldcache}->{builds}->{$param}}) {
+      push @{$self->{abldcache}->{$param}}, $buildItem;
+    }
+  }
+  delete $self->{abldcache}->{builds};
+  
+  foreach my $platform (keys %{$self->{abldcache}->{platforms}}) {
+    push @{$self->{abldcache}->{plats}}, uc($platform);
+  }
+  delete $self->{abldcache}->{platforms};
+}
+
+sub ProcessWhatLogElement {
+  my $self = shift;
+  my $aWhatLogElement = shift;
+  
+  my $bldinf = $aWhatLogElement->{bldinf};
+  my $bldinfDir = $bldinf;
+  $bldinfDir =~ s/\//\\/g;
+  $bldinfDir =~ /^.:(.+)\\(.*)/;
+  $bldinfDir = $1;
+  
+  my $mmp = $aWhatLogElement->{mmp};
+  my $config = $aWhatLogElement->{config};
+  
+  my $platform = "";
+  my $variant = "";
+  my $test;
+  
+  if ($config =~ /^(\w+)_(\w+)\.test/){
+    $platform = $1;
+    $variant = $2;
+    $test = "test";
+  }
+  elsif ($config =~ /^(\w+)_(\w+)*/){
+    $platform = $1;
+    $variant = $2;
+  }
+
+  if($aWhatLogElement->{export}){
+    my $exports = $self->WrapVarToArray($aWhatLogElement->{export});
+    foreach  my $export (@$exports) {
+      $self->StoreExportItem ($bldinfDir, $export->{source}, $export->{destination}, $test);
+    }
+  }
+  if($aWhatLogElement->{archive}){
+    my $archives = $self->WrapVarToArray($aWhatLogElement->{archive});
+    foreach my $archive (@$archives){
+      foreach  my $member (@{$archive->{member}}) {
+        $self->StoreExportItem ($bldinfDir, $archive->{zipfile}, $member, $test);
+      }
+    }
+  }
+  if($aWhatLogElement->{build}){
+    my $buildItems = $self->WrapVarToArray($aWhatLogElement->{build});
+    foreach  my $buildItem (@$buildItems) {
+      $self->StoreBuildItem ($bldinfDir, $buildItem, $platform, $variant, $test);
+    }
+  }
+  if($aWhatLogElement->{resource}){
+    my $resources = $self->WrapVarToArray($aWhatLogElement->{resource});
+    foreach  my $buildItem (@$resources) {
+      if($buildItem =~ /[\\|\/]epoc32[\\|\/]release[\\|\/]winscw[\\|\/](urel|udeb)[\\|\/]/g){
+        $variant = $1;
+      }
+      else{
+        $variant = "ALL"; 
+      }
+      $self->StoreBuildItem ($bldinfDir, $buildItem, $platform, $variant, $test);
+    }
+  }
+  if($aWhatLogElement->{bitmap}){
+    my $bitmaps = $self->WrapVarToArray($aWhatLogElement->{bitmap});
+    foreach  my $buildItem (@$bitmaps) {
+      $self->StoreBuildItem ($bldinfDir, $buildItem, $platform, "ALL", $test);
+    }
+  }
+  if($aWhatLogElement->{stringtable}){
+    my $stringTables = $self->WrapVarToArray($aWhatLogElement->{stringtable});
+    foreach  my $buildItem (@$stringTables) {
+      $self->StoreBuildItem ($bldinfDir, $buildItem, $platform, $variant, $test);
+    }
+  }
+  
+  $self->{abldcache}->{platforms}->{$platform} = 1 if($platform ne "ALL");
+
+  my $param = "$bldinfDir ";
+  $param = $param."test " if ($test);
+  $param = $param."export -what";
+  if(!$self->{abldcache}->{$param}){
+    pop @{$self->{abldcache}->{$param}};
+  }
+}
+
+sub StoreExportItem {
+  my $self = shift;
+  my $bldinfDir = shift;
+  my $aSource = shift;
+  my $aDestination =shift;
+  my $test = shift;
+  $aSource = $self->ReleasableItem($aSource);
+  $aDestination = $self->ReleasableItem($aDestination);
+  my $param = "$bldinfDir ";
+  $param = $param."test " if ($test);
+  $param = $param."export -what";
+  $self->{abldcache}->{exports}->{$param}->{$aDestination} = $aSource;
+}
+
+sub StoreBuildItem {
+  my $self = shift;
+  my $bldinfDir = shift;
+  my $aBuildItem = shift;
+  my $aPlatform = shift;
+  my $aVariant = shift;
+  my $test = shift;
+	
+  if($aPlatform ne "ALL" and $aVariant eq "ALL"){
+    $self->StoreBuildItem($bldinfDir, $aBuildItem, $aPlatform, "urel", $test);
+    $self->StoreBuildItem($bldinfDir, $aBuildItem, $aPlatform, "udeb", $test);
+  }
+  else{
+    $aBuildItem = $self->ReleasableItem($aBuildItem);
+    my $param = "$bldinfDir ";
+    $param = $param."test " if ($test);
+    $param = $param."target $aPlatform $aVariant -what";
+    $self->{abldcache}->{builds}->{$param}->{$aBuildItem} = 1;
+    $self->{abldcache}->{platforms}->{$aPlatform} = 1 if($aPlatform ne "ALL");
+  }
+}
+
+sub ReleasableItem {
+  my $self = shift;
+  my $aBuildItem = shift;
+  $aBuildItem =~ s/\/\//\\/g;
+  $aBuildItem =~ s/\//\\/g;
+  $aBuildItem =~ s/\"//g;
+  $aBuildItem =~ /^.:(.+)/;
+  return $1;
+}
+
+
+sub WrapVarToArray {
+  my $self = shift;
+  my $var = shift;
+  my @result;
+  
+  if($var){
+    if($var =~/^ARRAY*/){
+      return $var;	
+    }
+    else{
+      push (@result, $var);
+    }
+  }
+  return \@result;
+}
+
+sub PrintCache {
+  my $self = shift;
+  print "print cache content\n" if($self->{verbose});
+  foreach my $item (keys %{$self->{abldcache}}) {
+    if($item ne "loaded"){
+      print "\$self->{abldcache}->{\'$item\'} =\n";
+      print " [\n";
+      my $first = 1;
+      
+      foreach my $cachedata (@{$self->{abldcache}->{$item}}) {
+      	print ",\n" if($first > 1);
+      	$first = $first+1;
+        if($cachedata=~/^ARRAY*/){
+    	    print " [\'@$cachedata[0]\', \'@$cachedata[1]\']";
+        }
+        else{
+    	    print " \'$cachedata\'";
+        } 
+      }
+      print "\n ];\n\n";
+    }
+  }
+}
+
+# Support for target alias file
+# If the MRP specifies 'ALL' then the intersection of the
+# definition of 'ALL' and the output of abld help is used
+# as the platform list
+sub ResolveAlias {
+  my $self = shift;
+  my $abldPath = shift;
+  my $plat = shift;
+  my @plats = ();
+
+  if (lc $plat eq 'all' || $self->{iniData}->HasTargetPlatforms($plat)) {
+    if ($self->{iniData}->HasTargetPlatforms($plat)) {
+      if (lc $plat eq 'all') {
+        # ALL and HasTargetPlatforms()
+        # Do the set intersection with the output of abld help
+        my $iniAll = $self->{iniData}->TargetPlatforms($plat);
+        my $abldHelp = $self->GetPlatforms($abldPath);
+        my %count;
+        foreach my $e (@$iniAll) {
+          $count{$e} = 1;
+        }
+        foreach my $e (@$abldHelp) {
+          if (exists $count{$e} and $count{$e} == 1) {
+            push @plats, $e;
+          }
+        }
+        $self->RemoveIDEPlatforms(\@plats);
+        if ($self->{verbose} > 1) {
+          print "Intersection of \"ALL\" alias and abld help is \"@plats\"\n";
+        }
+      } else {
+        # NOT ALL and HasTargetPlatforms()
+        # Use the list of platforms from the iniData and this alias
+        @plats = @{$self->{iniData}->TargetPlatforms($plat)};
+        if ($self->{verbose} > 1) {
+          print "Resolution of \"$plat\" alias is \"@plats\"\n";
+        }
+      }
+    } else {
+      # ALL and NOT HasTargetPlatforms() so just use
+      # the results of abld help
+      @plats = @{$self->GetPlatforms($abldPath)};
+      $self->RemoveIDEPlatforms(\@plats);
+      if ($self->{verbose} > 1) {
+        print "Resolution of \"ALL\" alias from abld help is \"@plats\"\n";
+      }
+    }
+  } else {
+    # NOT ALL and NOT HasTargetPlatforms() so use this as the platform
+    @plats = $plat;
+    if ($self->{verbose} > 1) {
+      print "Platform specified is \"@plats\"\n";
+    }
+  }
+  return \@plats;
+}
+
+sub RemoveIDEPlatforms {
+  my $self = shift;
+  my $plats = shift;
+
+  # Ugly hard-coded yukkiness
+  @$plats = grep { !m/^cw_ide$/i && !m/^vc\d/i } @$plats;
+}
+
+sub GetPlatforms {
+  my $self = shift;
+  my $bldInfDir = shift;
+
+  if (exists $self->{abldcache}->{"plats"}) {
+    return $self->{abldcache}->{"plats"};
+  }
+  $self->CallBldMakeIfNecessary($bldInfDir);
+
+ TRYAGAIN:
+  my $foundPlats = 0;
+  my @plats;
+  my @errorLines;
+
+  my @abldOutput = `($bldInfDir\\abld help | perl -pe "s/^/stdout: /") 2>&1`; # Adds 'stdout: ' to the beginning of each STDOUT line, nothing is added to output on STDERR.
+
+  foreach my $line (@abldOutput) {
+    chomp $line;
+      
+    if ($line =~ s/^stdout: //) { # Output from STDOUT
+      if ($foundPlats) {
+        if ($self->{verbose}) { print "Found platforms: $line\n"; }
+        $line =~ s/^\s*//; # Strip off leading whitespace.
+        # Force platforms to upper case to match IniData::TargetPlatforms()
+        $line = uc $line;
+        @plats = split /\s+/, $line;
+        last;
+      }
+      if ($line =~ /project platforms:/) {
+        $foundPlats = 1;
+      }
+    }
+ 
+    else { # Output from STDERR
+      if ($line =~ m/project bldmake directory.*does not exist/i) {
+        $self->CallBldMake($bldInfDir);
+        goto TRYAGAIN;
+      }  
+      elsif ($line =~ /Can't find ABLD.PL on PATH/i) {
+        push @errorLines, "Error: Couldn't run $bldInfDir\\abld: $line\n";      
+      }
+      else {
+        push @errorLines, "$line\n";
+      }
+    }
+  }
+
+  if (scalar @errorLines > 0) {
+    die @errorLines;
+  }
+
+  die "Error: didn't find any platforms\n" unless $foundPlats;
+
+  $self->{abldcache}->{"plats"} = \@plats;
+
+  return \@plats;
+}
+
+sub ReadBinaries {
+  my $self = shift;
+  my $abldPath = shift;
+  my $test = lc(shift);
+  my $plat = lc(shift);
+  my $var = lc(shift);
+  my $mmp = shift;
+  my $remove = shift;
+  my $successRef = shift;
+  my $command = "target";
+  my $opts = "-what";
+  $command = "$test $command" if $test;
+  $opts = "$mmp $opts" if $mmp;
+  if ($self->{verbose}) { print "Extracting target info from \"$abldPath\\abld.bat\" using \"$command $plat $var\"...\n";  }
+
+  my $bins = $self->GatherAbldOutput($abldPath, $plat, $command, $var, $test, $opts);
+  my $category = 'unclassified';
+  if ($self->{iniData}->CategoriseBinaries() and not $plat =~ /^tools2?$/i) {
+    $category = $plat . '_' . $var;
+    if ($test) {
+      $category = $test . '_' . $category;
+    }
+  }
+
+  $self->AddBins($remove, $category, $bins, $successRef);
+}
+
+sub HandleExports {
+  my $self = shift;
+  my $abldPath = shift;
+  my $test = shift;
+
+  $test = $test?"test ":"";
+
+  if ($self->{verbose}) {
+    print "Extracting ${test}export info from $abldPath\\abld.bat...\n";
+  }
+
+  my $exports = $self->GatherAbldOutput($abldPath, "", "${test}export", "", $test, "-what");
+  if ($self->{iniData}->CategoriseExports()) {
+    foreach my $thisExport (@$exports) {
+      if ($self->{verbose} > 1) { print "Found export \"$thisExport\"...\n"; }
+      if (Utils::WithinEpocRoot($thisExport)) {
+	$thisExport = Utils::RemoveEpocRoot($thisExport);
+      }
+      else {
+	print "Warning: Exported file \"$thisExport\" is not within EPOCROOT\n";
+      }
+
+      # Note, the hash key is case lowered to ensure duplicates are rejected.
+      # The original case is preserved in the hash values.
+      my $thisExportLc = lc($thisExport);
+      Utils::TidyFileName(\$thisExportLc);
+
+      # Note, the exports are not yet classified because this is done using the source code classifications.
+      # At this point we don't know if we've handled all the 'source' mrp keywords yet. Classification will
+      # occur when the exports are asked for.
+      $self->{exports}->{automatic}->{$thisExportLc} = $thisExport;
+    }
+    Utils::AbsolutePath(\$abldPath);
+    push (@{$self->{exports}->{abldPaths}}, Utils::RemoveSourceRoot($abldPath));
+  }
+  else {
+    # Handle exports treating them as binary files. Note, for a short while this code was changed to handle
+    # exported directories (not just files). This functionality has been removed because bldmake doesn't
+    # appear to cope with exported directories (it concatenates all the files in the specified directory into
+    # a single file due to weird use of the 'copy' command).
+    foreach my $thisExport (@$exports) {
+      $self->HandleBinFile(0, 'unclassified', $thisExport); # 0 = don't remove.
+    }
+  }
+}
+
+sub HandleExportFile {
+  my $self = shift;
+  my $source = shift;
+  my $destination = shift;
+  my $remove = shift;
+
+  if ($self->{iniData}->CategoriseExports()) {
+    if ($remove) {
+      my $destinationLc = lc(Utils::RemoveEpocRoot($destination));
+      Utils::TidyFileName(\$destinationLc);
+      if (exists $self->{exports}->{automatic}->{$destinationLc}) {
+	print "Excluding export \"$destination\"...\n" if ($self->{verbose});
+	delete $self->{exports}->{automatic}->{$destinationLc};
+      } else {
+        my $comp = $self->{comp} || "component name unknown";
+        print "Warning: ($comp) -export_file: could not remove $destination, as it hadn't been added. Perhaps the lines in your MRP are in the wrong order, or you meant -binary?\n";
+      }
+    }
+    else {
+      Utils::CheckExists($source);
+      Utils::CheckIsFile($source);
+      Utils::CheckExists($destination);
+      Utils::CheckIsFile($destination);
+      $self->{exports}->{manual}->{Utils::RemoveSourceRoot($source)} = Utils::RemoveEpocRoot($destination);
+    }
+  }
+  else {
+    $self->HandleBinFile($remove, 'unclassified', $destination);
+  }
+}
+
+sub AddBins {
+  my $self = shift;
+  my $remove = shift;
+  my $category = shift;
+  my $bins = shift;
+  my $successRef = shift;
+
+  foreach my $file (@$bins) {
+    $self->HandleBinDirOrFile($remove, $category, $file, $successRef);
+  }
+}
+
+sub EnsureDoesNotExist {
+  my $self = shift;
+
+  my $relDir = $self->{iniData}->PathData->LocalArchivePathForExistingOrNewComponent($self->{comp}, $self->{ver});
+  if (-e $relDir) {
+    die "Error: $self->{comp} $self->{ver} already exists\n";
+  }
+}
+
+sub Validate {
+  my $self = shift;
+  my $warnNotError = shift; # produce warnings instead of errors for some messages
+
+  return if $self->{validated};
+  $self->{validated} = 1;
+
+  $self->EnsureDoesNotExist;
+
+  unless (defined $self->{comp}) {
+    die "Error: No 'component' keyword specified in $self->{mrpName}\n";
+  }
+
+  $self->NotesSource(); # will die if we can't find a notes_source tag
+
+  my @errors;
+  my @warnings;
+  
+  foreach my $bin (@{$self->Binaries()}) {    
+    my $file = Utils::PrependEpocRoot(lc($bin));
+    
+    if (my $result = $self->CheckPathLength($file)) {
+      if ($warnNotError) {
+        push (@warnings, "Warning: $result\n");
+      } else { 
+        push (@errors, "Error: $result\n");
+      }
+    }
+    
+    if ($self->{fixMissingLibs}) {
+      unless (-e $file) {
+        if ($file =~ /$ENV{EPOCROOT}epoc32\\release\\armi\\(\S+)\\(\S+\.lib)/) {
+          my $fileToCopy = "$ENV{EPOCROOT}epoc32\\release\\thumb\\$1\\$2";
+          print "Copying $fileToCopy to $file...\n";
+          copy ($fileToCopy, $file) or push (@errors, "Error: Problem copying \"$fileToCopy\" to \"$file\": $!\n");
+        }
+        else {
+          push (@errors, "Error: \"$file\" does not exist\n");
+        }
+      }
+    }
+    else {
+      unless (-e $file) {
+        push (@errors, "Error: \"$file\" does not exist\n");
+      }
+    }
+  }
+
+  foreach my $thisCategory (@{$self->ExportCategories()}) {
+    foreach my $thisExport (@{$self->Exports($thisCategory)}) {
+      $thisExport = Utils::PrependEpocRoot($thisExport); 
+      
+      if (my $result = $self->CheckPathLength($thisExport)) {
+        if ($warnNotError) {
+          push (@warnings, "Warning:  $result\n");
+        } else { 
+          push (@errors, "Error:  $result\n");
+        }
+      }
+
+      unless (-e $thisExport) {
+        push (@errors, "Error: \"$thisExport\" does not exist\n");
+      }
+    }
+  }
+ 
+  foreach my $thisSourceCategory (@{$self->SourceCategories()}) {
+    foreach my $thisSourceFile (@{$self->Source($thisSourceCategory)}) {
+      if (my $result = $self->CheckPathLength($thisSourceFile)) {
+        if ($warnNotError) {
+          push (@warnings, "Warning:  $result\n");
+        } else { 
+          push (@errors, "Error:  $result\n");
+        }
+      }
+    }
+  }
+  
+  if (@warnings) {
+    print @warnings;
+  }
+  
+  if (@errors and $#errors != -1) {
+    if ($#errors == 0) {
+      die $errors[0];
+    }
+    else {
+      print @errors;
+      my $firstError = $errors[0];
+      chomp $firstError;
+      die "Multiple errors (first - $firstError)\n";
+    }
+  }
+}
+
+sub CallBldMakeIfNecessary {
+  my $self = shift;
+  my $abldPath = shift;
+  if (-e "$abldPath\\abld.bat") {
+    # Check to see if bld.inf has been modifed since bldmake was last run.
+    my $abldMTime = Utils::FileModifiedTime("$abldPath\\abld.bat");
+    my $bldInfMTime = Utils::FileModifiedTime("$abldPath\\bld.inf");
+    if ($bldInfMTime > $abldMTime) {
+      $self->CallBldMake($abldPath);
+    }
+  }
+  else {
+    $self->CallBldMake($abldPath);
+  }
+}
+
+sub GatherAbldOutput {
+  my $self = shift;
+  my $abldPath = shift;
+  my $plat = shift;
+  my $abldCmnd = shift;
+  my $var = shift;
+  my $test = shift;
+  my $opts = shift;
+  my @output;
+
+  my $abldParms = $abldCmnd;
+  $abldParms .= " $plat" if $plat;
+  $abldParms .= " $var" if $var;
+  $abldParms .= " $opts" if $opts;
+
+  $abldPath=~s/\//\\/s; # Normalise all slashes to backslashes
+
+  $self->ProcessCache($abldPath, $test) if (!exists($self->{abldcache}->{loaded}->{$abldPath}));
+  
+  if ($self->{abldcache}->{$abldPath." ".$abldParms}) {
+    # Why do we bother with a cache?
+    # Because you might see this in an MRP:
+    #   binary \blah all
+    #   -binary \blah mfrumpy
+    # The "all" will be expanded to multiple calls to GatherAbldOutput, if we've got CategoriseBinaries on
+    
+    # The codes below are added to make MakeCBR follow cachefiles created by Raptor
+    if($abldCmnd eq "export" and $opts eq "-what"){
+        my $exports = $self->{abldcache}->{$abldPath." ".$abldParms};
+        if(@$exports[0]){
+          my $firstExportFile = @$exports[0];
+          if($firstExportFile=~/^ARRAY*/){
+            foreach my $thisExport (@$exports) {
+                push (@output, @$thisExport[0]);
+                push @{$self->{exportsToBeProcessed}}, {source => @$thisExport[1],
+                                                        destination => @$thisExport[0],
+                                                        abldPath => Utils::PrependSourceRoot($abldPath)};
+            }
+            $self->{raptorcache} = 1;
+            return \@output;
+          }
+        }
+    }
+    
+    return $self->{abldcache}->{$abldPath." ".$abldParms};
+  }
+
+  # Remove repeat guards - these stop CallBldMake and CallMakMake from being called
+  #                        forever if a fatal error occurs with a build script.
+  delete $self->{bldMakeCalled};
+  delete $self->{"makMakeCalled_$plat"};
+
+  $self->CallBldMakeIfNecessary($abldPath);
+
+ TRYAGAIN:
+
+  my @errorLines; # Used to store the error
+
+  my $cmd = "$abldPath\\abld $abldParms";
+  print "Executing command: $cmd\n" if $self->{verbose} > 1;
+
+  my @abldOutput = `($cmd | perl -pe "s/^/stdout: /") 2>&1`;
+
+  foreach my $line (@abldOutput) {
+    chomp $line;
+
+    if ($line =~ s/^stdout: //) { # Output from STDOUT 
+      if ($self->{verbose} > 1) { print "ABLD: $line\n"; }    
+      
+      if ($line =~ /(^(make|make\[\d+\]): .*)/) {
+        print "Warning: $1\n";
+      }
+      elsif ($line =~ /given more than once in the same rule/) {
+        print "$line\n";      
+      }
+      elsif ($line =~ m/\.\./) {
+        my $oldpath = cwd();
+        eval {
+          chdir($abldPath);
+          Utils::AbsoluteFileName(\$line);
+        };
+        chdir($oldpath);
+        if ($@) {
+          print "Warning: could not convert path \"$line\" to an absolute path because: $@\n";
+          # Do nothing. We just can't convert it to an absolute path. We'll push it onto the
+          # output anyway because in some circumstances it will work out OK.
+        }
+        push (@output, $line);
+      } else {
+        # Lines without .. we don't bother making absolute, because it involves 4 chdir operations
+        # so is a bit heavyweight.
+        push (@output, $line);
+      }
+    }
+
+    else { # Output from STDERR
+      if ($self->{verbose} > 1) { print "ABLD: $line\n"; }    
+  
+      # Catch errors that look like the makefile isn't present.
+      # Note, different versions of the build tools produce different things, so the regular expression below is a bit evil.
+      if ($line =~ /^(U1052|make\[1\]: (?i:\Q$ENV{EPOCROOT}\EEPOC32\\BUILD\\.*): No such file or directory|make: \*\*\* \[.*\] Error 2)$/) {
+  
+        # Makefile not present, so generate it.
+  
+        $self->CallMakMake($abldPath, $plat, $test);
+  
+        goto TRYAGAIN;
+      }        
+      elsif ($line =~ /^ABLD ERROR: Project Bldmake directory .* does not exist$/
+          or $line =~ /^ABLD ERROR: .* not yet created$/
+          or $line =~ /abld\.bat does not exist/) {
+  
+        #BldMake needs to be run.
+        $self->CallBldMake($abldPath);
+        goto TRYAGAIN;
+      }
+      elsif ($line =~ /^This project does not support platform/) {
+        push @errorLines, "Error: Platform \"$plat\" not supported\n";
+      }
+      elsif ($line =~ /^MISSING:/) {
+        print "$line\n";
+      }
+      elsif ($line =~ /Can't find ABLD.PL on PATH/i) {
+        push @errorLines, "Error: Couldn't run abld $abldParms: $line\n";      
+      }
+      else {
+        push @errorLines, "$line\n";
+      }
+    }
+  }
+  
+  if (scalar @errorLines > 0) {
+    die @errorLines;
+  }
+  
+  $self->{abldcache}->{$abldPath." ".$abldParms} = \@output;
+
+  return \@output;
+}
+
+sub CallBldMake {
+  my $self = shift;
+  my $abldPath = shift;
+
+  if (exists $self->{bldMakeCalled}) {
+    die "Error: Problem calling bldmake in \"$abldPath\"\n";
+  }
+  else {
+    $self->{bldMakeCalled} = 1;
+  }
+
+  if ($self->{verbose}) {
+    print "Calling bldmake in $abldPath...\n";
+  }
+  my $cwd = cwd();
+  chdir $abldPath or die "Error: Couldn't change working directory to $abldPath: $!\n";
+  system "bldmake bldfiles";
+  chdir $cwd;
+  die "Error: \"bldmake bldfiles\" failed in \"$abldPath\" (exit status $?)\n" if ($?);
+}
+
+sub CallMakMake {
+  my $self = shift;
+  my $abldPath = shift;
+  my $plat = shift;
+  my $test = shift;
+
+  my $repeatGuard = "makMakeCalled_$plat";
+  if ($test) {
+    $test = 'test';
+    $repeatGuard .= '_test';
+  }
+  else {
+    $test = '';
+  }
+
+  if (exists $self->{$repeatGuard}) {
+    if ($test) {
+      die "Error: Problem generating makefile for $test $plat in \"$abldPath\"\n";
+    }
+    else {
+      die "Error: Problem generating makefile for $plat in \"$abldPath\"\n";
+    }
+  }
+  else {
+    $self->{$repeatGuard} = 1;
+  }
+
+  if ($self->{verbose}) {
+    if ($test) {
+      print "Generating makefile for $test $plat...\n";
+    }
+    else {
+      print "Generating makefile for $plat...\n";
+    }
+  }
+  system "$abldPath\\abld $test makefile $plat > NUL";
+}
+
+sub BinSets {
+  my $self = shift;
+  
+  $self->ProcessBinaries();
+  
+  return $self->{binsets};
+}
+
+sub SourceRootPath {
+  my $fileName = shift;
+  if (Utils::IsAbsolute($fileName)) {
+    $fileName = Utils::PrependSourceRoot($fileName);
+  }
+  else {
+    Utils::AbsoluteFileName(\$fileName);
+  }
+  Utils::CheckWithinSourceRoot($fileName);
+  $fileName =~ s/\\.$//;
+  return $fileName;
+}
+
+sub WarnRedundantMRPLine {
+  my $self = shift;
+  my $remove = shift;
+  my $line = shift;
+  my $comp = $self->{comp} || "component name unknown";
+  my $sign = "";
+  my $action = "add";
+
+  if($remove) {
+    $action = "remove";
+  }
+  print "Remark: ($comp) The MRP line \"$line\" does not $action any files. Therefore is this line necessary?\n";
+}
+
+sub CheckPathLength {
+  my $self = shift;
+  my $path = shift;
+  
+  if (length ($path) > MAX_PATH_LENGTH) {
+     return "The component \"$self->{comp}\" is pending release and contains a path which is " . length($path) . " characters long and will prevent the component from being released: \"$path\"."
+  }
+
+  return 0;
+}
+
+sub SetIPR {
+    my $self = shift;
+    my $category = shift;
+    my $path = shift || 'default';
+    my $exportRestricted = (shift) ? 1 : 0;
+    
+    if (!$category || shift) {
+      # caller(0))[3] gives the package and the method called, e.g. MrpData::SetIPR
+      croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";
+    }
+
+    $path = File::Spec->canonpath($path); # Normalise the path
+    
+    # remove trailing slashes
+    $path =~ s/[\\\/]$//;
+    
+    if ($path ne 'default') {
+      $path = SourceRootPath($path);
+    }
+
+    if($self->{iniData}->HasMappings()){
+      $path = $self->{iniData}->PerformMapOnFileName($path);
+    }
+    
+    $path = Utils::RemoveSourceRoot($path) if ($path ne 'default');
+    
+    if (exists $self->{unresolvedIPR}->{$path}) {
+      return 0;
+    }
+    
+    $self->{unresolvedIPR}->{$path} = {
+                    category => uc($category),
+                    exportRestricted => $exportRestricted};
+    
+    return 1;
+}
+
+sub SetComponent {
+    my $self = shift;
+    my $operand = shift;
+
+    croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n" if (shift);
+
+    if (exists $self->{comp}) {
+        return 0;
+    }
+    
+    $self->{comp} = $operand;
+    
+    return 1;
+}
+
+sub SetNotesSource {
+    my $self = shift;
+    my $operand = shift;
+   
+    if (!$operand || shift) {
+      croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";
+    }
+    
+    if (exists $self->{notes_src}) {
+        return 0;
+    }
+
+    $operand = File::Spec->canonpath($operand); # Normalise the path
+    
+    $operand = SourceRootPath($operand);
+    
+    if($self->{iniData}->HasMappings()){
+        $operand = $self->{iniData}->PerformMapOnFileName($operand);
+    }
+    
+    Utils::CheckExists($operand);
+    Utils::CheckIsFile($operand);
+    $self->{notes_src} = Utils::RemoveSourceRoot($operand);
+    
+    return 1;
+}
+
+sub SetSource {
+    my $self = shift;
+    my $operand = shift;
+    
+    croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n" if (shift);
+
+    if ($operand =~ /distribution\.policy$/i) {
+      print "\nREMARK: Distribution Policy file included as source in \"$self->{mrpName}\"\n";
+      return 1;
+    }
+
+    $operand = File::Spec->canonpath($operand); # Normalise the path
+        
+    #remove trailing slashes
+    $operand =~ s/[\\\/]$//;
+    
+    $operand = SourceRootPath($operand);
+
+    if($self->{iniData}->HasMappings()){
+      $operand = $self->{iniData}->PerformMapOnFileName($operand);
+    }
+    
+    Utils::CheckExists($operand);
+    $self->{srcitems}->{Utils::RemoveSourceRoot($operand)} = 1;
+    # No longer classify the source. We do this on-demand later.
+    
+    return 1;
+}
+
+sub SetBinary {
+    my $self = shift;
+    my @words =  @{shift()};
+    my $test = (shift) ? 1 : 0;
+    my $remove = (shift) ? 1 : 0;
+
+    croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n" if (shift);
+
+    my $path = shift @words;
+
+    $path = File::Spec->canonpath($path); # Normalise the path
+    
+    # tranfer to absolute path
+    $path = SourceRootPath($path);
+
+    if (scalar @words) {
+        if($self->{iniData}->HasMappings()){
+            $path = $self->{iniData}->PerformMapOnFileName($path);
+        }
+    }
+
+    push @{$self->{binaryStatements}}, {
+                        abldPath => $path,
+                        test     => $test,
+                        remove   => $remove,
+                        words    => [@words]};
+}
+
+sub SetExports {
+    my $self = shift;
+    my $abldPath = shift;
+    my $test = (shift) ? 1 : 0;
+    my $dependantComponent = shift;
+
+    if (!$abldPath || shift) {
+        croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";
+    }
+    
+    if ($dependantComponent) {
+    	push (@{$self->{_dependantComponents}->{$dependantComponent}}, $abldPath);
+    }
+
+    $abldPath = File::Spec->canonpath($abldPath); # Normalise the path
+        
+    $abldPath = SourceRootPath($abldPath);
+
+    if($self->{iniData}->HasMappings()){
+      $abldPath = $self->{iniData}->PerformMapOnFileName($abldPath);
+    }
+
+    Utils::CheckExists($abldPath);
+    
+    push @{$self->{exportsStatements}}, { abldPath => $abldPath,
+                                           test => $test};
+}
+
+sub SetExportFile {
+    my $self = shift;
+    my $source = shift;
+    my $destination = shift;
+    my $remove = (shift) ? 1 : 0;
+    my $dependantComponent = shift;
+ 
+    croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n" if (shift);
+        
+    unless ($source and $destination) {
+	croak "Error: Incorrect syntax to 'export_file' keyword in \"$self->{mrpName}\"\n";
+    }
+
+    if ($dependantComponent) {
+    	push (@{$self->{_dependantComponents}->{$dependantComponent}}, $source);
+    }
+    
+    $source = File::Spec->canonpath($source); # Normalise the path
+    $destination = File::Spec->canonpath($destination);
+        
+    $source = SourceRootPath($source);
+
+    if($self->{iniData}->HasMappings()){
+      $source = $self->{iniData}->PerformMapOnFileName($source);
+      $destination = $self->{iniData}->PerformMapOnFileName($destination);
+    }
+
+    $destination = Utils::PrependEpocRoot($destination);
+    
+    push @{$self->{unprocessedExportFiles}}, { source => $source,
+                                           destination => $destination,
+                                           remove => $remove};
+}
+
+sub GetIPRInformation {
+    my $self = shift;
+    
+    if (exists $self->{IPR}) {
+        return $self->{IPR};
+    }
+    else {
+        return {};
+    }
+}
+
+sub GetExportComponentDependencies {
+    my $self = shift;	
+
+    if (defined $self->{_dependantComponents}) {
+            return (keys %{$self->{_dependantComponents}}); # Return an array of the dependencies
+    }
+    
+    return undef;
+}
+
+sub ValidateParsing {
+    my $self = shift;
+    
+    # This flag stops the reader from trying to populate the object more than once
+    $self->{populated} = 1;
+    
+    if (exists $self->{srcitems} && !exists $self->{unresolvedIPR}) {
+        # If no IPR information exists in the MRP file then we set the IPR category
+        # for each source item to undef.  This is so that incorrect IPR information is
+        # not returned.  A flag is also set to indicate that IPR information exists.  The
+        # flag will be used to ensure other parts other parts of validation should will
+        # not be performed (e.g. validating exports).
+        
+        $self->{noIprInformation} = 1;
+        
+        foreach my $sourceItem (keys %{$self->{srcitems}}) {
+            $self->{IPR}->{$sourceItem} = {
+                                           category => undef,
+                                           exportRestricted => undef,
+                                           };
+        }
+    }
+    else {
+        # Reconcile the IPR information here so that any warnings are produced sooner...
+        # IPR information can only be included if it matches a source line in the MRP file
+        # All other IPR lines will be ignored.  The reconciliation is done here as IPR
+        # lines may appear before source lines in the MRP file.
+
+        if (!defined $self->{srcitems} && exists $self->{unresolvedIPR}->{default}) {
+            carp "Warning: The default IPR entry does not apply to any source statements in \"$self->{mrpName}\"\n";
+        }
+       
+        # Match IPR against source statement by using the length...
+        foreach my $sourceItem (keys %{$self->{srcitems}}) {
+            # The sort below sorts by longest line first, not shortest line first. Note $b <=> $a, not $a <=> $b...
+            # This allows us to match the most relevant line first, based on longest length/best match 
+            foreach my $iprItem (sort {length($b) <=> length($a)} keys %{$self->{unresolvedIPR}}) {
+                next if ($iprItem eq 'default');
+                # If the source item contains the IPR path then it is a match 
+                if ($sourceItem =~ m/^\Q$iprItem\E([\\\/]|$)/i) {
+                    $self->{IPR}->{$sourceItem} = $self->{unresolvedIPR}->{$iprItem};
+                    
+                    last;   
+                }
+            }
+                 
+            # If it didn't match an IPR then we assign the default
+            if (!exists $self->{IPR}->{$sourceItem}) {
+                $self->{IPR}->{$sourceItem} = $self->{unresolvedIPR}->{default};
+            }
+        }
+
+        delete $self->{unresolvedIPR}->{default};
+	    
+        # Find IPR entries which do live under a source folder...
+        foreach my $iprItem (keys %{$self->{unresolvedIPR}}) {
+            next if (exists $self->{IPR}->{$iprItem});
+	    
+            foreach my $sourceItem (keys %{$self->{srcitems}}) {
+                if ($iprItem =~ /^\Q$sourceItem\E/i) {
+                    $self->{IPR}->{$iprItem} = $self->{unresolvedIPR}->{$iprItem};
+                    last;
+                }
+            }
+	    
+            if (!grep /\Q$iprItem\E/i, (keys %{$self->{IPR}})) {
+                # Otherwise this IPR statement does not apply to this MRP file...
+                carp "Warning: The IPR entry for \"$iprItem\" does not apply to any source statements in \"$self->{mrpName}\"\n";
+            }
+        }    
+    }
+  
+    delete $self->{unresolvedIPR};
+}
+
+
+sub ProcessExports {
+  my $self = shift;
+  my $confirmExportIprInformation = shift;
+  
+  return if ($self->{exportsProcessed});
+  
+  $self->{exportsProcessed} = 1;
+  
+  foreach my $export (@{$self->{exportsStatements}}) {
+    $self->HandleExports($export->{abldPath}, $export->{test});
+  }
+  
+  foreach my $exportFile (@{$self->{unprocessedExportFiles}}) {    
+    if($self->{raptorcache}){
+      my $isHandle = 0;
+      foreach my $export (@{$self->{exportsToBeProcessed}}) {
+        if($export->{source} eq $exportFile->{source}){
+          if (exists $self->{exports}->{automatic}->{lc(Utils::RemoveEpocRoot($export->{destination}))}) {
+            $self->HandleExportFile($export->{source}, $export->{destination}, $exportFile->{remove});
+            $isHandle = 1;
+          }
+        }
+      }
+      if($isHandle == 0){
+        foreach my $export (@{$self->{exportsToBeProcessed}}) {
+          if(lc($export->{destination}) eq lc($exportFile->{destination})){
+            foreach my $tempExport (@{$self->{exportsToBeProcessed}}) {
+              if($export->{source} eq $tempExport->{source}){
+                if (exists $self->{exports}->{automatic}->{lc(Utils::RemoveEpocRoot($tempExport->{destination}))}) {
+                  $self->HandleExportFile($tempExport->{source}, $tempExport->{destination}, $exportFile->{remove});
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+    else{
+      $self->HandleExportFile($exportFile->{source}, $exportFile->{destination}, $exportFile->{remove});
+    } 
+  }
+  
+  delete $self->{unprocessedExportFiles};
+  
+  # If exports are to be classified, or the caller wants to confirm the IPR information for exports is correct...
+  if ($self->{iniData}->CategoriseExports() || $confirmExportIprInformation) {
+      $self->ClassifyManualExports();
+      
+      # The codes below are changed to make MakeCBR follow cachefiles created by Raptor
+      if(!$self->{raptorcache}){
+        $self->ClassifyAutomaticExports();
+      }
+      else{
+        my @tempExports;
+        foreach my $export (@{$self->{exportsToBeProcessed}}) {
+          if (exists $self->{exports}->{automatic}->{lc(Utils::RemoveEpocRoot($export->{destination}))}) {
+            push @tempExports, $export;
+          }
+        }
+        @{$self->{exportsToBeProcessed}} = @tempExports;
+		
+        delete $self->{exports}->{automatic};
+        delete $self->{exports}->{abldPaths};
+      }
+      delete $self->{raptorcache};
+      
+      # If no IPR information exists in the MRP file then we do not validate the exports as we don't care about if
+      # we need dependant components
+      if (!$self->{noIprInformation}) {
+        # Check to see if the exports are owned by the component, or dependant components have been specified...
+        foreach my $export (@{$self->{exportsToBeProcessed}}) {
+          # check if the exports are included as source in this component
+          if (!grep keys %{$self->{srcitems}}, $export->{source}) {
+            # If not then check if another dependant component for the export has been specified
+            
+            # A dependant component is specified for either the export source or the exports abld path
+            my $whatToTest = 'source';
+            $whatToTest = 'abldPath' if (exists $export->{abldPath});
+       
+            my $dependencyExists = 0;
+  
+            foreach my $dependantComponent (keys %{$self->{_dependantComponents}}) {
+              if (grep /\Q$export->{$whatToTest}\E/i, (@{$self->{_dependantComponents}->{$dependantComponent}})) {
+                $dependencyExists = 1;
+              }            
+            }
+            
+            if (!$dependencyExists) {
+              # If no dependency exists...
+              warn "Warning: ".$self->Component()." contains an export '". $export->{source} ."' which is not included as source for this component, and does not contain dependencies on another component\n";
+            }
+          }
+        }
+      }
+      
+      # If we only processed exports to that we can confirm the IPR information, but
+      # we don't actually want to categorise exports then we delete them
+      if (!$self->{iniData}->CategoriseExports() && $confirmExportIprInformation) {
+        delete $self->{exportsToBeProcessed};
+      }
+  }
+
+  my $errors;
+  
+  foreach my $export (@{$self->{exportsToBeProcessed}}) {
+    if (!$self->AddExport($export->{source}, $self->RemoveRoot($export->{destination}))) {
+      $errors = 1;
+    }        
+  }
+  if ($errors) {
+    die "Aborting due to above error(s)\n";
+  }  
+
+  delete $self->{exportsToBeProcessed};
+
+  if ($self->{binariesProcessed}) {
+    # if binaries and exports have been processed then we delete the abldcach as
+    # it is no longer required and takes up a lot of memory
+    delete $self->{abldcache};
+  }
+}
+
+sub RemoveRoot {
+  my $self = shift;
+  my $path = shift;
+  return $1 if($path =~ /^\\(.+)/);
+  return $path;
+}
+
+sub ProcessBinaries {
+  my $self = shift;
+  
+  return if ($self->{binariesProcessed});
+  
+  $self->{binariesProcessed} = 1;  
+  
+  foreach my $binary (@{$self->{binaryStatements}}) {
+  
+    my $success = 0;
+
+    if (!scalar(@{$binary->{words}})) {
+        $binary->{abldPath} = Utils::PrependEpocRoot($binary->{abldPath});
+        # Pass a reference of $success to HandleBinDirOrFile which can only be changed in HandleBinFile if the operation is successful.
+        $self->HandleBinDirOrFile($binary->{remove}, "unclassified", $binary->{abldPath}, \$success);
+        if ($success == 0 )
+        {
+            my $line;
+            $line = 'test' if ($binary->{test});
+            $line .=  'binary ' . join ' ', @{$binary->{words}};
+            $self->WarnRedundantMRPLine($binary->{remove}, $line);
+        }
+    }
+    else {
+        # Pass a reference of $success to HandleBinSet which can only be changed in HandleBinFile if the operation is successful.
+        $self->HandleBinSet($binary->{remove}, $binary->{test}, \$success, $binary->{abldPath}, @{$binary->{words}});
+        if ($success == 0 )
+        {
+            my $line;
+            $line = 'test' if ($binary->{test});
+            $line .=  'binary ' . join ' ', @{$binary->{words}};
+            $self->WarnRedundantMRPLine($binary->{remove}, $line);
+        }
+    }
+  }
+  
+  if ($self->{exportsProcessed}) {
+    # if binaries and exports have been processed then we delete the abldcache as
+    # it is no longer required and takes up a lot of memory
+    delete $self->{abldcache};
+  }
+}
+
+
+1;
+
+__END__
+
+=head1 NAME
+
+MrpData.pm - Provides an interface to the contents of a component's MakeRel project (mrp) file.
+
+=head1 DESCRIPTION
+
+Once a C<MrpData> object has been created using the C<New> method, the remaining methods can be used to access the F<.mrp> data.
+
+=head1 INTERFACE
+
+=head2 New
+
+Expects to be passed the name of the mrp file. This doesn't necessarily have to have a F<.mrp> extension. The parser supports the following keyword / value pairs:
+
+  component    <component_name>
+  source       <source_file|source_directory>
+  binary       [<abld_path> <platform> [<variant> <program>]] | [<binary_file>] | [<binary_directory>]
+  -binary      [<abld_path> <platform> [<variant> <program>]] | [<binary_file>] | [<binary_directory>]
+  testbinary   <abld_path> <platform> [<variant> <program>]
+  -testbinary  <abld_path> <platform> [<variant> <program>]
+  exports      <abld_path>
+  notes_source <release_notes_source_path>
+  ipr          [<export-restricted>] type [<directory>]
+
+=head2 Component
+
+Returns a string containing the name of the component.
+
+=head2 MrpName
+
+Returns a string containing the full path name of the component's F<mrp> file.
+
+=head2 ExternalVersion
+
+Returns a string containing the external version of the component to be released.
+
+=head2 InternalVersion
+
+Returns a string containing the internal version of the component to be released.
+
+=head2 SourceCategories
+
+Returns a reference to a list of source IPR categories present in the component. Each of these may be used as an input to C<Source>. These categories are defined in 'distribution.policy' files.
+
+=head2 Source
+
+Expects to be passed a scalar containing the required source category. Returns a reference to a list of source files corresponding to the specified category for this component.
+
+=head2 SourceItems
+
+Expects no arguments. Returns a list of the operands of all the "source" statements found in the MRP file. This is then stored in the RelData file and is later used by validation to work out which director(y|ies) to check for added files.
+
+=head2 BinaryCategories
+
+Returns a reference to a list of binary categories present in the component. Each of these may be used as an input to C<Binaries>. The binary categories are determined by the structure of the F<mrp> file. For example, the statement C<binary \mycomp thumb urel> will result in the associated binaries being classified and C<thumb_urel>. The statement C<testbinary \mycomp arm4> will generate two categories - C<test_arm4_udeb> and C<test_arm4_urel>. Any binary files or directories that are explictly referenced (e.g. C<binary \epoc32\myfile.txt> or C<binary \epoc32\mydir>) are categorised as C<unclassified>. Also, any binary files that are found to be common between any two categories and re-categorised as C<unclassified>. This is to ensure that each binary F<zip> file contains a unique set of files.
+
+If the C<categorise_binaries> keyword has not been specified in the user's F<reltools.ini> file, this interface will always return a reference to a list with a single entry in it - C<unclassified>.
+
+=head2 Binaries
+
+Returns a reference to a list of binary files for this component. May optionally be passed a scalar containing the required binary category, in which case it returns a list of just the binaries in the specified category. Dies if the requested category is not present.
+
+=head2 ExportCategories
+
+Returns a reference to a list of export categories present in the component. If the C<categorise_exports> keyword has not been specified in the user's F<reltools.ini> file, this list will contain a single entry - C<unclassified>. Otherwise, each exported file will be categorised according to the rules used for categorising source code. The returned list will in this case contain the set of exported source categories present in the component. Elements in this list may be used as inputs to the method below (C<Exports>).
+
+=head2 Exports
+
+Returns a reference to a list of exported file for this component. May optionally be passed a scalar containing the required export category, in which case it returns a list of just the exports in the specified category. Dies if the requested category is not present.
+
+=head2 ExportInfoForCat
+
+Expects a category to be passed. Returns the exportinfo for the category.
+
+=head2 BinariesAndExports
+
+Returns a reference to a list of all the binaries and exports of this component. Note, unlike the methods C<Binaries> and C<Exports>, this method does not allow a category to be specified. This is because binaries are categorised according to build type and exports are categorised according to source intellectual property rights rules. They two types of categorisation are incompatible.
+
+=head2 NotesSource
+
+Returns a string containing the path and name of the release notes source file for this component.
+
+=head2 BinSets
+
+Returns a reference to an array of hashes, representing each "binary <path> <platform> <variant>" line. The hashes have these fields: path, plat, var, mmp (often ''), and test (a Boolean). This method is used by C<MakeRel> and C<MakeEnv> to build the component before release.
+
+=head2 EnsureDoesNotExist
+
+Checks that the version given does not already exist in an archive.
+
+=head2 Validate
+
+Checks that all the files shown in the MRP do actually exist.
+
+=head2 ClassifyAutomaticExports
+
+Classify exports that were specified using the 'exports' or 'testexports' keyword in the mrp file.
+
+=head2 ProcessExportMakeFile
+
+Expect EXPORT.MAKE/EXPORTTEST.MAKE file, classify exports that were specified using the 'exports'/'testexports' keyword in the mrp file.
+
+=head2 WarnRedundantMRPLine
+
+Output warnings about redundant MRP lines (full redundancy).
+
+=head2 GetIPRInformation()
+
+Returns a hash containing the IPR information for the component.
+
+The format is the returned data is a hash:
+
+    Path = (
+                    category = char,
+                    exportRestricted = boolean
+            )
+
+=head2 SetBinary(@arguments, test, remove)
+
+Sets the binary information.  @arguments is an array containing the arguments
+from the MRP line, in the order in which they appeared.  
+
+=head2 SetComponent(componentName)
+
+Sets the name of the component to componentName.
+
+=head2 SetExportFile(source, destination, remove, dependantComponent)
+
+Sets the export file information.  The source and destination arguments are both
+required, if they are not specified a fatal error will be produced.  The source
+file will also be checked to see if it exists and that it has not already been
+specified as an export file.
+
+If the export file is not included as source for the current MRP component then
+the dependant component will also need to be specified.
+
+=head2 SetExports(path, test, dependantComponent)
+
+Sets the location of the bld.inf from where the export information can be derived.
+The location will be checked to see if it exists and that it has not already been
+specified.
+
+If the exports are not included as source for the current MRP component then
+the dependant component will also need to be specified.
+
+=head2 SetIPR(category, path, exportRestricted)
+
+Sets the IPR information for the component.  If no path is specified then the
+IPR category is set to be the default category for the component.  The
+exportRestricted argument is boolean.
+
+If the same path is specified more than once a fatal error will be produced.
+
+=head2 SetNotesSource(noteSourcePath)
+
+Sets the notes source to the notesSourcePath specified.  If the notes source has
+already been set, or the path does not exist, a fatal error will be produced.
+
+=head2 SetSource(sourcePath)
+
+Adds the sourcePath to the list of included source entries for the component.
+If the source path does not exist or the path has already been added then a
+fatal error will be produced.
+
+=head2 ValidateParsing()
+
+This method needs to be called once the parser has finished setting all the
+information.  Currently this method reconciles IPR statements against the
+components source, and also checks that required dependant components have
+been set.
+
+If this method is not run then IPR information will be unavailable.
+
+=head2 GetExportComponentDependencies()
+
+Returns an array containing the any components which the current component has
+dependencies on.
+
+=head2 Populated()
+
+The MRP file is parsed by a reader, which then populates this MRP object.  The
+Populated method returns a boolean value indicating if the object has been
+populated.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Net/Cmd.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,763 @@
+# Net::Cmd.pm $Id: //depot/libnet/Net/Cmd.pm#33 $
+#
+# Copyright (c) 1995-1997 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package Net::Cmd;
+
+require 5.001;
+require Exporter;
+
+use strict;
+use vars qw(@ISA @EXPORT $VERSION);
+use Carp;
+use Symbol 'gensym';
+
+BEGIN {
+  if ($^O eq 'os390') {
+    require Convert::EBCDIC;
+  }
+}
+
+$VERSION = "2.24";
+@ISA     = qw(Exporter);
+@EXPORT  = qw(CMD_INFO CMD_OK CMD_MORE CMD_REJECT CMD_ERROR CMD_PENDING);
+
+sub CMD_INFO	{ 1 }
+sub CMD_OK	{ 2 }
+sub CMD_MORE	{ 3 }
+sub CMD_REJECT	{ 4 }
+sub CMD_ERROR	{ 5 }
+sub CMD_PENDING { 0 }
+
+my %debug = ();
+
+my $tr = $^O eq 'os390' ? Convert::EBCDIC->new() : undef;
+
+sub toebcdic
+{
+ my $cmd = shift;
+
+ unless (exists ${*$cmd}{'net_cmd_asciipeer'})
+  {
+   my $string = $_[0];
+   my $ebcdicstr = $tr->toebcdic($string);
+   ${*$cmd}{'net_cmd_asciipeer'} = $string !~ /^\d+/ && $ebcdicstr =~ /^\d+/;
+  }
+
+  ${*$cmd}{'net_cmd_asciipeer'}
+    ? $tr->toebcdic($_[0])
+    : $_[0];
+}
+
+sub toascii
+{
+  my $cmd = shift;
+  ${*$cmd}{'net_cmd_asciipeer'}
+    ? $tr->toascii($_[0])
+    : $_[0];
+}
+
+sub _print_isa
+{
+ no strict qw(refs);
+
+ my $pkg = shift;
+ my $cmd = $pkg;
+
+ $debug{$pkg} ||= 0;
+
+ my %done = ();
+ my @do   = ($pkg);
+ my %spc = ( $pkg , "");
+
+ while ($pkg = shift @do)
+  {
+   next if defined $done{$pkg};
+
+   $done{$pkg} = 1;
+
+   my $v = defined ${"${pkg}::VERSION"}
+                ? "(" . ${"${pkg}::VERSION"} . ")"
+                : "";
+
+   my $spc = $spc{$pkg};
+   $cmd->debug_print(1,"${spc}${pkg}${v}\n");
+
+   if(@{"${pkg}::ISA"})
+    {
+     @spc{@{"${pkg}::ISA"}} = ("  " . $spc{$pkg}) x @{"${pkg}::ISA"};
+     unshift(@do, @{"${pkg}::ISA"});
+    }
+  }
+}
+
+sub debug
+{
+ @_ == 1 or @_ == 2 or croak 'usage: $obj->debug([LEVEL])';
+
+ my($cmd,$level) = @_;
+ my $pkg = ref($cmd) || $cmd;
+ my $oldval = 0;
+
+ if(ref($cmd))
+  {
+   $oldval = ${*$cmd}{'net_cmd_debug'} || 0;
+  }
+ else
+  {
+   $oldval = $debug{$pkg} || 0;
+  }
+
+ return $oldval
+    unless @_ == 2;
+
+ $level = $debug{$pkg} || 0
+    unless defined $level;
+
+ _print_isa($pkg)
+    if($level && !exists $debug{$pkg});
+
+ if(ref($cmd))
+  {
+   ${*$cmd}{'net_cmd_debug'} = $level;
+  }
+ else
+  {
+   $debug{$pkg} = $level;
+  }
+
+ $oldval;
+}
+
+sub message
+{
+ @_ == 1 or croak 'usage: $obj->message()';
+
+ my $cmd = shift;
+
+ wantarray ? @{${*$cmd}{'net_cmd_resp'}}
+    	   : join("", @{${*$cmd}{'net_cmd_resp'}});
+}
+
+sub debug_text { $_[2] }
+
+sub debug_print
+{
+ my($cmd,$out,$text) = @_;
+ print STDERR $cmd,($out ? '>>> ' : '<<< '), $cmd->debug_text($out,$text);
+}
+
+sub code
+{
+ @_ == 1 or croak 'usage: $obj->code()';
+
+ my $cmd = shift;
+
+ ${*$cmd}{'net_cmd_code'} = "000"
+	unless exists ${*$cmd}{'net_cmd_code'};
+
+ ${*$cmd}{'net_cmd_code'};
+}
+
+sub status
+{
+ @_ == 1 or croak 'usage: $obj->status()';
+
+ my $cmd = shift;
+
+ substr(${*$cmd}{'net_cmd_code'},0,1);
+}
+
+sub set_status
+{
+ @_ == 3 or croak 'usage: $obj->set_status(CODE, MESSAGE)';
+
+ my $cmd = shift;
+ my($code,$resp) = @_;
+
+ $resp = [ $resp ]
+	unless ref($resp);
+
+ (${*$cmd}{'net_cmd_code'},${*$cmd}{'net_cmd_resp'}) = ($code, $resp);
+
+ 1;
+}
+
+sub command
+{
+ my $cmd = shift;
+
+ unless (defined fileno($cmd))
+  {
+    $cmd->set_status("599", "Connection closed");
+    return $cmd;
+  }
+
+
+ $cmd->dataend()
+    if(exists ${*$cmd}{'net_cmd_need_crlf'});
+
+ if (scalar(@_))
+  {
+   local $SIG{PIPE} = 'IGNORE' unless $^O eq 'MacOS';
+
+   my $str =  join(" ", map { /\n/ ? do { my $n = $_; $n =~ tr/\n/ /; $n } : $_; } @_);
+   $str = $cmd->toascii($str) if $tr;
+   $str .= "\015\012";
+
+   my $len = length $str;
+   my $swlen;
+
+   $cmd->close
+	unless (defined($swlen = syswrite($cmd,$str,$len)) && $swlen == $len);
+
+   $cmd->debug_print(1,$str)
+	if($cmd->debug);
+
+   ${*$cmd}{'net_cmd_resp'} = [];      # the response
+   ${*$cmd}{'net_cmd_code'} = "000";	# Made this one up :-)
+  }
+
+ $cmd;
+}
+
+sub ok
+{
+ @_ == 1 or croak 'usage: $obj->ok()';
+
+ my $code = $_[0]->code;
+ 0 < $code && $code < 400;
+}
+
+sub unsupported
+{
+ my $cmd = shift;
+
+ ${*$cmd}{'net_cmd_resp'} = [ 'Unsupported command' ];
+ ${*$cmd}{'net_cmd_code'} = 580;
+ 0;
+}
+
+sub getline
+{
+ my $cmd = shift;
+
+ ${*$cmd}{'net_cmd_lines'} ||= [];
+
+ return shift @{${*$cmd}{'net_cmd_lines'}}
+    if scalar(@{${*$cmd}{'net_cmd_lines'}});
+
+ my $partial = defined(${*$cmd}{'net_cmd_partial'})
+		? ${*$cmd}{'net_cmd_partial'} : "";
+ my $fd = fileno($cmd);
+
+ return undef
+	unless defined $fd;
+
+ my $rin = "";
+ vec($rin,$fd,1) = 1;
+
+ my $buf;
+
+ until(scalar(@{${*$cmd}{'net_cmd_lines'}}))
+  {
+   my $timeout = $cmd->timeout || undef;
+   my $rout;
+   if (select($rout=$rin, undef, undef, $timeout))
+    {
+     unless (sysread($cmd, $buf="", 1024))
+      {
+       carp(ref($cmd) . ": Unexpected EOF on command channel")
+		if $cmd->debug;
+       $cmd->close;
+       return undef;
+      } 
+
+     substr($buf,0,0) = $partial;	## prepend from last sysread
+
+     my @buf = split(/\015?\012/, $buf, -1);	## break into lines
+
+     $partial = pop @buf;
+
+     push(@{${*$cmd}{'net_cmd_lines'}}, map { "$_\n" } @buf);
+
+    }
+   else
+    {
+     carp("$cmd: Timeout") if($cmd->debug);
+     return undef;
+    }
+  }
+
+ ${*$cmd}{'net_cmd_partial'} = $partial;
+
+ if ($tr) 
+  {
+   foreach my $ln (@{${*$cmd}{'net_cmd_lines'}}) 
+    {
+     $ln = $cmd->toebcdic($ln);
+    }
+  }
+
+ shift @{${*$cmd}{'net_cmd_lines'}};
+}
+
+sub ungetline
+{
+ my($cmd,$str) = @_;
+
+ ${*$cmd}{'net_cmd_lines'} ||= [];
+ unshift(@{${*$cmd}{'net_cmd_lines'}}, $str);
+}
+
+sub parse_response
+{
+ return ()
+    unless $_[1] =~ s/^(\d\d\d)(.?)//o;
+ ($1, $2 eq "-");
+}
+
+sub response
+{
+ my $cmd = shift;
+ my($code,$more) = (undef) x 2;
+
+ ${*$cmd}{'net_cmd_resp'} ||= [];
+
+ while(1)
+  {
+   my $str = $cmd->getline();
+
+   return CMD_ERROR
+	unless defined($str);
+
+   $cmd->debug_print(0,$str)
+     if ($cmd->debug);
+
+   ($code,$more) = $cmd->parse_response($str);
+   unless(defined $code)
+    {
+     $cmd->ungetline($str);
+     last;
+    }
+
+   ${*$cmd}{'net_cmd_code'} = $code;
+
+   push(@{${*$cmd}{'net_cmd_resp'}},$str);
+
+   last unless($more);
+  } 
+
+ substr($code,0,1);
+}
+
+sub read_until_dot
+{
+ my $cmd = shift;
+ my $fh  = shift;
+ my $arr = [];
+
+ while(1)
+  {
+   my $str = $cmd->getline() or return undef;
+
+   $cmd->debug_print(0,$str)
+     if ($cmd->debug & 4);
+
+   last if($str =~ /^\.\r?\n/o);
+
+   $str =~ s/^\.\././o;
+
+   if (defined $fh)
+    {
+     print $fh $str;
+    }
+   else
+    {
+     push(@$arr,$str);
+    }
+  }
+
+ $arr;
+}
+
+sub datasend
+{
+ my $cmd = shift;
+ my $arr = @_ == 1 && ref($_[0]) ? $_[0] : \@_;
+ my $line = join("" ,@$arr);
+
+ return 0 unless defined(fileno($cmd));
+
+ unless (length $line) {
+   # Even though we are not sending anything, the fact we were
+   # called means that dataend needs to be called before the next
+   # command, which happens of net_cmd_need_crlf exists
+   ${*$cmd}{'net_cmd_need_crlf'} ||= 0;
+   return 1;
+ }
+
+ if($cmd->debug) {
+   foreach my $b (split(/\n/,$line)) {
+     $cmd->debug_print(1, "$b\n");
+   }
+  }
+
+ $line =~ s/\r?\n/\r\n/sg;
+ $line =~ tr/\r\n/\015\012/ unless "\r" eq "\015";
+
+ $line =~ s/(\012\.)/$1./sog;
+ $line =~ s/^\./../ unless ${*$cmd}{'net_cmd_need_crlf'};
+
+ ${*$cmd}{'net_cmd_need_crlf'} = substr($line,-1,1) ne "\012";
+
+ my $len = length($line);
+ my $offset = 0;
+ my $win = "";
+ vec($win,fileno($cmd),1) = 1;
+ my $timeout = $cmd->timeout || undef;
+
+ local $SIG{PIPE} = 'IGNORE' unless $^O eq 'MacOS';
+
+ while($len)
+  {
+   my $wout;
+   if (select(undef,$wout=$win, undef, $timeout) > 0)
+    {
+     my $w = syswrite($cmd, $line, $len, $offset);
+     unless (defined($w))
+      {
+       carp("$cmd: $!") if $cmd->debug;
+       return undef;
+      }
+     $len -= $w;
+     $offset += $w;
+    }
+   else
+    {
+     carp("$cmd: Timeout") if($cmd->debug);
+     return undef;
+    }
+  }
+
+ 1;
+}
+
+sub rawdatasend
+{
+ my $cmd = shift;
+ my $arr = @_ == 1 && ref($_[0]) ? $_[0] : \@_;
+ my $line = join("" ,@$arr);
+
+ return 0 unless defined(fileno($cmd));
+
+ return 1
+    unless length($line);
+
+ if($cmd->debug)
+  {
+   my $b = "$cmd>>> ";
+   print STDERR $b,join("\n$b",split(/\n/,$line)),"\n";
+  }
+
+ my $len = length($line);
+ my $offset = 0;
+ my $win = "";
+ vec($win,fileno($cmd),1) = 1;
+ my $timeout = $cmd->timeout || undef;
+
+ local $SIG{PIPE} = 'IGNORE' unless $^O eq 'MacOS';
+ while($len)
+  {
+   my $wout;
+   if (select(undef,$wout=$win, undef, $timeout) > 0)
+    {
+     my $w = syswrite($cmd, $line, $len, $offset);
+     unless (defined($w))
+      {
+       carp("$cmd: $!") if $cmd->debug;
+       return undef;
+      }
+     $len -= $w;
+     $offset += $w;
+    }
+   else
+    {
+     carp("$cmd: Timeout") if($cmd->debug);
+     return undef;
+    }
+  }
+
+ 1;
+}
+
+sub dataend
+{
+ my $cmd = shift;
+
+ return 0 unless defined(fileno($cmd));
+
+ return 1
+    unless(exists ${*$cmd}{'net_cmd_need_crlf'});
+
+ local $SIG{PIPE} = 'IGNORE' unless $^O eq 'MacOS';
+ syswrite($cmd,"\015\012",2)
+    if ${*$cmd}{'net_cmd_need_crlf'};
+
+ $cmd->debug_print(1, ".\n")
+    if($cmd->debug);
+
+ syswrite($cmd,".\015\012",3);
+
+ delete ${*$cmd}{'net_cmd_need_crlf'};
+
+ $cmd->response() == CMD_OK;
+}
+
+# read and write to tied filehandle
+sub tied_fh {
+  my $cmd = shift;
+  ${*$cmd}{'net_cmd_readbuf'} = '';
+  my $fh = gensym();
+  tie *$fh,ref($cmd),$cmd;
+  return $fh;
+}
+
+# tie to myself
+sub TIEHANDLE {
+  my $class = shift;
+  my $cmd = shift;
+  return $cmd;
+}
+
+# Tied filehandle read.  Reads requested data length, returning
+# end-of-file when the dot is encountered.
+sub READ {
+  my $cmd = shift;
+  my ($len,$offset) = @_[1,2];
+  return unless exists ${*$cmd}{'net_cmd_readbuf'};
+  my $done = 0;
+  while (!$done and length(${*$cmd}{'net_cmd_readbuf'}) < $len) {
+     ${*$cmd}{'net_cmd_readbuf'} .= $cmd->getline() or return;
+     $done++ if ${*$cmd}{'net_cmd_readbuf'} =~ s/^\.\r?\n\Z//m;
+  }
+
+  $_[0] = '';
+  substr($_[0],$offset+0) = substr(${*$cmd}{'net_cmd_readbuf'},0,$len);
+  substr(${*$cmd}{'net_cmd_readbuf'},0,$len) = '';
+  delete ${*$cmd}{'net_cmd_readbuf'} if $done;
+
+  return length $_[0];
+}
+
+sub READLINE {
+  my $cmd = shift;
+  # in this context, we use the presence of readbuf to
+  # indicate that we have not yet reached the eof
+  return unless exists ${*$cmd}{'net_cmd_readbuf'};
+  my $line = $cmd->getline;
+  return if $line =~ /^\.\r?\n/;
+  $line;
+}
+
+sub PRINT {
+  my $cmd = shift;
+  my ($buf,$len,$offset) = @_;
+  $len    ||= length ($buf);
+  $offset += 0;
+  return unless $cmd->datasend(substr($buf,$offset,$len));
+  ${*$cmd}{'net_cmd_sending'}++;  # flag that we should call dataend()
+  return $len;
+}
+
+sub CLOSE {
+  my $cmd = shift;
+  my $r = exists(${*$cmd}{'net_cmd_sending'}) ? $cmd->dataend : 1; 
+  delete ${*$cmd}{'net_cmd_readbuf'};
+  delete ${*$cmd}{'net_cmd_sending'};
+  $r;
+}
+
+1;
+
+__END__
+
+
+=head1 NAME
+
+Net::Cmd - Network Command class (as used by FTP, SMTP etc)
+
+=head1 SYNOPSIS
+
+    use Net::Cmd;
+
+    @ISA = qw(Net::Cmd);
+
+=head1 DESCRIPTION
+
+C<Net::Cmd> is a collection of methods that can be inherited by a sub class
+of C<IO::Handle>. These methods implement the functionality required for a
+command based protocol, for example FTP and SMTP.
+
+=head1 USER METHODS
+
+These methods provide a user interface to the C<Net::Cmd> object.
+
+=over 4
+
+=item debug ( VALUE )
+
+Set the level of debug information for this object. If C<VALUE> is not given
+then the current state is returned. Otherwise the state is changed to 
+C<VALUE> and the previous state returned. 
+
+Different packages
+may implement different levels of debug but a non-zero value results in 
+copies of all commands and responses also being sent to STDERR.
+
+If C<VALUE> is C<undef> then the debug level will be set to the default
+debug level for the class.
+
+This method can also be called as a I<static> method to set/get the default
+debug level for a given class.
+
+=item message ()
+
+Returns the text message returned from the last command
+
+=item code ()
+
+Returns the 3-digit code from the last command. If a command is pending
+then the value 0 is returned
+
+=item ok ()
+
+Returns non-zero if the last code value was greater than zero and
+less than 400. This holds true for most command servers. Servers
+where this does not hold may override this method.
+
+=item status ()
+
+Returns the most significant digit of the current status code. If a command
+is pending then C<CMD_PENDING> is returned.
+
+=item datasend ( DATA )
+
+Send data to the remote server, converting LF to CRLF. Any line starting
+with a '.' will be prefixed with another '.'.
+C<DATA> may be an array or a reference to an array.
+
+=item dataend ()
+
+End the sending of data to the remote server. This is done by ensuring that
+the data already sent ends with CRLF then sending '.CRLF' to end the
+transmission. Once this data has been sent C<dataend> calls C<response> and
+returns true if C<response> returns CMD_OK.
+
+=back
+
+=head1 CLASS METHODS
+
+These methods are not intended to be called by the user, but used or 
+over-ridden by a sub-class of C<Net::Cmd>
+
+=over 4
+
+=item debug_print ( DIR, TEXT )
+
+Print debugging information. C<DIR> denotes the direction I<true> being
+data being sent to the server. Calls C<debug_text> before printing to
+STDERR.
+
+=item debug_text ( TEXT )
+
+This method is called to print debugging information. TEXT is
+the text being sent. The method should return the text to be printed
+
+This is primarily meant for the use of modules such as FTP where passwords
+are sent, but we do not want to display them in the debugging information.
+
+=item command ( CMD [, ARGS, ... ])
+
+Send a command to the command server. All arguments a first joined with
+a space character and CRLF is appended, this string is then sent to the
+command server.
+
+Returns undef upon failure
+
+=item unsupported ()
+
+Sets the status code to 580 and the response text to 'Unsupported command'.
+Returns zero.
+
+=item response ()
+
+Obtain a response from the server. Upon success the most significant digit
+of the status code is returned. Upon failure, timeout etc., I<undef> is
+returned.
+
+=item parse_response ( TEXT )
+
+This method is called by C<response> as a method with one argument. It should
+return an array of 2 values, the 3-digit status code and a flag which is true
+when this is part of a multi-line response and this line is not the list.
+
+=item getline ()
+
+Retrieve one line, delimited by CRLF, from the remote server. Returns I<undef>
+upon failure.
+
+B<NOTE>: If you do use this method for any reason, please remember to add
+some C<debug_print> calls into your method.
+
+=item ungetline ( TEXT )
+
+Unget a line of text from the server.
+
+=item rawdatasend ( DATA )
+
+Send data to the remote server without performing any conversions. C<DATA>
+is a scalar.
+
+=item read_until_dot ()
+
+Read data from the remote server until a line consisting of a single '.'.
+Any lines starting with '..' will have one of the '.'s removed.
+
+Returns a reference to a list containing the lines, or I<undef> upon failure.
+
+=item tied_fh ()
+
+Returns a filehandle tied to the Net::Cmd object.  After issuing a
+command, you may read from this filehandle using read() or <>.  The
+filehandle will return EOF when the final dot is encountered.
+Similarly, you may write to the filehandle in order to send data to
+the server after issuing a commmand that expects data to be written.
+
+See the Net::POP3 and Net::SMTP modules for examples of this.
+
+=back
+
+=head1 EXPORTS
+
+C<Net::Cmd> exports six subroutines, five of these, C<CMD_INFO>, C<CMD_OK>,
+C<CMD_MORE>, C<CMD_REJECT> and C<CMD_ERROR>, correspond to possible results
+of C<response> and C<status>. The sixth is C<CMD_PENDING>.
+
+=head1 AUTHOR
+
+Graham Barr <gbarr@pobox.com>
+
+=head1 COPYRIGHT
+
+Copyright (c) 1995-1997 Graham Barr. All rights reserved.
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=for html <hr>
+
+I<$Id: //depot/libnet/Net/Cmd.pm#33 $>
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Net/Config.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,320 @@
+# Net::Config.pm
+#
+# Copyright (c) 2000 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package Net::Config;
+
+require Exporter;
+use vars qw(@ISA @EXPORT %NetConfig $VERSION $CONFIGURE $LIBNET_CFG);
+use Socket qw(inet_aton inet_ntoa);
+use strict;
+
+@EXPORT  = qw(%NetConfig);
+@ISA     = qw(Net::LocalCfg Exporter);
+$VERSION = "1.10"; # $Id: //depot/libnet/Net/Config.pm#17 $
+
+eval { local $SIG{__DIE__}; require Net::LocalCfg };
+
+%NetConfig = (
+    nntp_hosts => [],
+    snpp_hosts => [],
+    pop3_hosts => [],
+    smtp_hosts => [],
+    ph_hosts => [],
+    daytime_hosts => [],
+    time_hosts => [],
+    inet_domain => undef,
+    ftp_firewall => undef,
+    ftp_ext_passive => 0,
+    ftp_int_passive => 0,
+    test_hosts => 1,
+    test_exist => 1,
+);
+
+#
+# Try to get as much configuration info as possible from InternetConfig
+#
+$^O eq 'MacOS' and eval <<TRY_INTERNET_CONFIG;
+use Mac::InternetConfig;
+
+{
+my %nc = (
+    nntp_hosts      => [ \$InternetConfig{ kICNNTPHost() } ],
+    pop3_hosts      => [ \$InternetConfig{ kICMailAccount() } =~ /\@(.*)/ ],
+    smtp_hosts      => [ \$InternetConfig{ kICSMTPHost() } ],
+    ftp_testhost    => \$InternetConfig{ kICFTPHost() } ? \$InternetConfig{ kICFTPHost()} : undef,
+    ph_hosts        => [ \$InternetConfig{ kICPhHost() }   ],
+    ftp_ext_passive => \$InternetConfig{"646F676F\xA5UsePassiveMode"} || 0,
+    ftp_int_passive => \$InternetConfig{"646F676F\xA5UsePassiveMode"} || 0,
+    socks_hosts     => 
+    	\$InternetConfig{ kICUseSocks() }    ? [ \$InternetConfig{ kICSocksHost() }    ] : [],
+    ftp_firewall    => 
+    	\$InternetConfig{ kICUseFTPProxy() } ? [ \$InternetConfig{ kICFTPProxyHost() } ] : [],
+);
+\@NetConfig{keys %nc} = values %nc;
+}
+TRY_INTERNET_CONFIG
+
+my $file = __FILE__;
+my $ref;
+$file =~ s/Config.pm/libnet.cfg/;
+if ( -f $file ) {
+    $ref = eval { local $SIG{__DIE__}; do $file };
+    if (ref($ref) eq 'HASH') {
+	%NetConfig = (%NetConfig, %{ $ref });
+	$LIBNET_CFG = $file;
+    }
+}
+if ($< == $> and !$CONFIGURE)  {
+    my $home = eval { local $SIG{__DIE__}; (getpwuid($>))[7] } || $ENV{HOME};
+    $home ||= $ENV{HOMEDRIVE} . ($ENV{HOMEPATH}||'') if defined $ENV{HOMEDRIVE};
+    if (defined $home) {
+	$file = $home . "/.libnetrc";
+	$ref = eval { local $SIG{__DIE__}; do $file } if -f $file;
+	%NetConfig = (%NetConfig, %{ $ref })
+	    if ref($ref) eq 'HASH';	
+    }
+}
+my ($k,$v);
+while(($k,$v) = each %NetConfig) {
+	$NetConfig{$k} = [ $v ]
+		if($k =~ /_hosts$/ and $k ne "test_hosts" and defined($v) and !ref($v));
+}
+
+# Take a hostname and determine if it is inside the firewall
+
+sub requires_firewall {
+    shift; # ignore package
+    my $host = shift;
+
+    return 0 unless defined $NetConfig{'ftp_firewall'};
+
+    $host = inet_aton($host) or return -1;
+    $host = inet_ntoa($host);
+
+    if(exists $NetConfig{'local_netmask'}) {
+	my $quad = unpack("N",pack("C*",split(/\./,$host)));
+	my $list = $NetConfig{'local_netmask'};
+	$list = [$list] unless ref($list);
+	foreach (@$list) {
+	    my($net,$bits) = (m#^(\d+\.\d+\.\d+\.\d+)/(\d+)$#) or next;
+	    my $mask = ~0 << (32 - $bits);
+	    my $addr = unpack("N",pack("C*",split(/\./,$net)));
+
+	    return 0 if (($addr & $mask) == ($quad & $mask));
+	}
+	return 1;
+    }
+
+    return 0;
+}
+
+use vars qw(*is_external);
+*is_external = \&requires_firewall;
+
+1;
+
+__END__
+
+=head1 NAME
+
+Net::Config - Local configuration data for libnet
+
+=head1 SYNOPSYS
+
+    use Net::Config qw(%NetConfig);
+
+=head1 DESCRIPTION
+
+C<Net::Config> holds configuration data for the modules in the libnet
+distribuion. During installation you will be asked for these values.
+
+The configuration data is held globally in a file in the perl installation
+tree, but a user may override any of these values by providing their own. This
+can be done by having a C<.libnetrc> file in their home directory. This file
+should return a reference to a HASH containing the keys described below.
+For example
+
+    # .libnetrc
+    {
+        nntp_hosts => [ "my_prefered_host" ],
+	ph_hosts   => [ "my_ph_server" ],
+    }
+    __END__
+
+=head1 METHODS
+
+C<Net::Config> defines the following methods. They are methods as they are
+invoked as class methods. This is because C<Net::Config> inherits from
+C<Net::LocalCfg> so you can override these methods if you want.
+
+=over 4
+
+=item requires_firewall HOST
+
+Attempts to determine if a given host is outside your firewall. Possible
+return values are.
+
+  -1  Cannot lookup hostname
+   0  Host is inside firewall (or there is no ftp_firewall entry)
+   1  Host is outside the firewall
+
+This is done by using hostname lookup and the C<local_netmask> entry in
+the configuration data.
+
+=back
+
+=head1 NetConfig VALUES
+
+=over 4
+
+=item nntp_hosts
+
+=item snpp_hosts
+
+=item pop3_hosts
+
+=item smtp_hosts
+
+=item ph_hosts
+
+=item daytime_hosts
+
+=item time_hosts
+
+Each is a reference to an array of hostnames (in order of preference),
+which should be used for the given protocol
+
+=item inet_domain
+
+Your internet domain name
+
+=item ftp_firewall
+
+If you have an FTP proxy firewall (B<NOT> an HTTP or SOCKS firewall)
+then this value should be set to the firewall hostname. If your firewall
+does not listen to port 21, then this value should be set to
+C<"hostname:port"> (eg C<"hostname:99">)
+
+=item ftp_firewall_type
+
+There are many different ftp firewall products available. But unfortunately
+there is no standard for how to traverse a firewall.  The list below shows the
+sequence of commands that Net::FTP will use
+
+  user        Username for remote host
+  pass        Password for remote host
+  fwuser      Username for firewall
+  fwpass      Password for firewall
+  remote.host The hostname of the remote ftp server
+
+=over 4
+
+=item 0
+
+There is no firewall
+
+=item 1
+
+     USER user@remote.host
+     PASS pass
+
+=item 2
+
+     USER fwuser
+     PASS fwpass
+     USER user@remote.host
+     PASS pass
+
+=item 3
+
+     USER fwuser
+     PASS fwpass
+     SITE remote.site
+     USER user
+     PASS pass
+
+=item 4
+
+     USER fwuser
+     PASS fwpass
+     OPEN remote.site
+     USER user
+     PASS pass
+
+=item 5
+
+     USER user@fwuser@remote.site
+     PASS pass@fwpass
+
+=item 6
+
+     USER fwuser@remote.site
+     PASS fwpass
+     USER user
+     PASS pass
+
+=item 7
+
+     USER user@remote.host
+     PASS pass
+     AUTH fwuser
+     RESP fwpass
+
+=back
+
+=item ftp_ext_passive
+
+=item ftp_int_pasive
+
+FTP servers normally work on a non-passive mode. That is when you want to
+transfer data you have to tell the server the address and port to
+connect to.
+
+With some firewalls this does not work as the server cannot
+connect to your machine (because you are behind a firewall) and the firewall
+does not re-write the command. In this case you should set C<ftp_ext_passive>
+to a I<true> value.
+
+Some servers are configured to only work in passive mode. If you have
+one of these you can force C<Net::FTP> to always transfer in passive
+mode; when not going via a firewall, by setting C<ftp_int_passive> to
+a I<true> value.
+
+=item local_netmask
+
+A reference to a list of netmask strings in the form C<"134.99.4.0/24">.
+These are used by the C<requires_firewall> function to determine if a given
+host is inside or outside your firewall.
+
+=back
+
+The following entries are used during installation & testing on the
+libnet package
+
+=over 4
+
+=item test_hosts
+
+If true then C<make test> may attempt to connect to hosts given in the
+configuration.
+
+=item test_exists
+
+If true then C<Configure> will check each hostname given that it exists
+
+=back
+
+=for html <hr>
+
+I<$Id: //depot/libnet/Net/Config.pm#17 $>
+
+=head1 COPYRIGHT
+
+Copyright (c) 2000 Graham Barr <gbarr@pobox.com>. All rights reserved.
+This program is free software; you can redistribute it and/or 
+modify it under the same terms as Perl itself.
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Net/Domain.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,342 @@
+# Net::Domain.pm
+#
+# Copyright (c) 1995-1998 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package Net::Domain;
+
+require Exporter;
+
+use Carp;
+use strict;
+use vars qw($VERSION @ISA @EXPORT_OK);
+use Net::Config;
+
+@ISA = qw(Exporter);
+@EXPORT_OK = qw(hostname hostdomain hostfqdn domainname);
+
+$VERSION = "2.19"; # $Id: //depot/libnet/Net/Domain.pm#21 $
+
+my($host,$domain,$fqdn) = (undef,undef,undef);
+
+# Try every conceivable way to get hostname.
+
+sub _hostname {
+
+    # we already know it
+    return $host
+    	if(defined $host);
+
+    if ($^O eq 'MSWin32') {
+        require Socket;
+        my ($name,$alias,$type,$len,@addr) =  gethostbyname($ENV{'COMPUTERNAME'}||'localhost');
+        while (@addr)
+         {
+          my $a = shift(@addr);
+          $host = gethostbyaddr($a,Socket::AF_INET());
+          last if defined $host;
+         }
+        if (defined($host) && index($host,'.') > 0) {
+           $fqdn = $host;
+           ($host,$domain) = $fqdn =~ /^([^\.]+)\.(.*)$/;
+         }
+        return $host;
+    }
+    elsif ($^O eq 'MacOS') {
+	chomp ($host = `hostname`);
+    }
+    elsif ($^O eq 'VMS') {   ## multiple varieties of net s/w makes this hard
+        $host = $ENV{'UCX$INET_HOST'} if defined($ENV{'UCX$INET_HOST'});
+        $host = $ENV{'MULTINET_HOST_NAME'} if defined($ENV{'MULTINET_HOST_NAME'});
+        if (index($host,'.') > 0) {
+           $fqdn = $host;
+           ($host,$domain) = $fqdn =~ /^([^\.]+)\.(.*)$/;
+        }
+        return $host;
+    }
+    else {
+	local $SIG{'__DIE__'};
+
+	# syscall is preferred since it avoids tainting problems
+	eval {
+    	    my $tmp = "\0" x 256; ## preload scalar
+    	    eval {
+    		package main;
+     		require "syscall.ph";
+		defined(&main::SYS_gethostname);
+    	    }
+    	    || eval {
+    		package main;
+     		require "sys/syscall.ph";
+		defined(&main::SYS_gethostname);
+    	    }
+            and $host = (syscall(&main::SYS_gethostname, $tmp, 256) == 0)
+		    ? $tmp
+		    : undef;
+	}
+
+	# POSIX
+	|| eval {
+	    require POSIX;
+	    $host = (POSIX::uname())[1];
+	}
+
+	# trusty old hostname command
+	|| eval {
+    	    chop($host = `(hostname) 2>/dev/null`); # BSD'ish
+	}
+
+	# sysV/POSIX uname command (may truncate)
+	|| eval {
+    	    chop($host = `uname -n 2>/dev/null`); ## SYSV'ish && POSIX'ish
+	}
+
+	# Apollo pre-SR10
+	|| eval {
+    	    $host = (split(/[:\. ]/,`/com/host`,6))[0];
+	}
+
+	|| eval {
+    	    $host = "";
+	};
+    }
+
+    # remove garbage
+    $host =~ s/[\0\r\n]+//go;
+    $host =~ s/(\A\.+|\.+\Z)//go;
+    $host =~ s/\.\.+/\./go;
+
+    $host;
+}
+
+sub _hostdomain {
+
+    # we already know it
+    return $domain
+    	if(defined $domain);
+
+    local $SIG{'__DIE__'};
+
+    return $domain = $NetConfig{'inet_domain'}
+	if defined $NetConfig{'inet_domain'};
+
+    # try looking in /etc/resolv.conf
+    # putting this here and assuming that it is correct, eliminates
+    # calls to gethostbyname, and therefore DNS lookups. This helps
+    # those on dialup systems.
+
+    local *RES;
+    local($_);
+
+    if(open(RES,"/etc/resolv.conf")) {
+    	while(<RES>) {
+    	    $domain = $1
+    	    	if(/\A\s*(?:domain|search)\s+(\S+)/);
+    	}
+    	close(RES);
+
+    	return $domain
+    	    if(defined $domain);
+    }
+
+    # just try hostname and system calls
+
+    my $host = _hostname();
+    my(@hosts);
+
+    @hosts = ($host,"localhost");
+
+    unless (defined($host) && $host =~ /\./) {
+	my $dom = undef;
+        eval {
+    	    my $tmp = "\0" x 256; ## preload scalar
+    	    eval {
+    	        package main;
+     	        require "syscall.ph";
+    	    }
+    	    || eval {
+    	        package main;
+     	        require "sys/syscall.ph";
+    	    }
+            and $dom = (syscall(&main::SYS_getdomainname, $tmp, 256) == 0)
+		    ? $tmp
+		    : undef;
+        };
+
+	if ( $^O eq 'VMS' ) {
+	    $dom ||= $ENV{'TCPIP$INET_DOMAIN'}
+		 || $ENV{'UCX$INET_DOMAIN'};
+	}
+
+	chop($dom = `domainname 2>/dev/null`)
+		unless(defined $dom || $^O =~ /^(?:cygwin|MSWin32)/);
+
+	if(defined $dom) {
+	    my @h = ();
+	    $dom =~ s/^\.+//;
+	    while(length($dom)) {
+		push(@h, "$host.$dom");
+		$dom =~ s/^[^.]+.+// or last;
+	    }
+	    unshift(@hosts,@h);
+    	}
+    }
+
+    # Attempt to locate FQDN
+
+    foreach (grep {defined $_} @hosts) {
+    	my @info = gethostbyname($_);
+
+    	next unless @info;
+
+    	# look at real name & aliases
+    	my $site;
+    	foreach $site ($info[0], split(/ /,$info[1])) {
+    	    if(rindex($site,".") > 0) {
+
+    	    	# Extract domain from FQDN
+
+     	    	($domain = $site) =~ s/\A[^\.]+\.//;
+     	        return $domain;
+    	    }
+    	}
+    }
+
+    # Look for environment variable
+
+    $domain ||= $ENV{LOCALDOMAIN} || $ENV{DOMAIN};
+
+    if(defined $domain) {
+    	$domain =~ s/[\r\n\0]+//g;
+    	$domain =~ s/(\A\.+|\.+\Z)//g;
+    	$domain =~ s/\.\.+/\./g;
+    }
+
+    $domain;
+}
+
+sub domainname {
+
+    return $fqdn
+    	if(defined $fqdn);
+
+    _hostname();
+    _hostdomain();
+
+    # Assumption: If the host name does not contain a period
+    # and the domain name does, then assume that they are correct
+    # this helps to eliminate calls to gethostbyname, and therefore
+    # eleminate DNS lookups
+
+    return $fqdn = $host . "." . $domain
+	if(defined $host and defined $domain
+		and $host !~ /\./ and $domain =~ /\./);
+
+    # For hosts that have no name, just an IP address
+    return $fqdn = $host if defined $host and $host =~ /^\d+(\.\d+){3}$/;
+
+    my @host   = defined $host   ? split(/\./, $host)   : ('localhost');
+    my @domain = defined $domain ? split(/\./, $domain) : ();
+    my @fqdn   = ();
+
+    # Determine from @host & @domain the FQDN
+
+    my @d = @domain;
+
+LOOP:
+    while(1) {
+    	my @h = @host;
+    	while(@h) {
+    	    my $tmp = join(".",@h,@d);
+    	    if((gethostbyname($tmp))[0]) {
+     	        @fqdn = (@h,@d);
+     	        $fqdn = $tmp;
+     	      last LOOP;
+    	    }
+    	    pop @h;
+    	}
+    	last unless shift @d;
+    }
+
+    if(@fqdn) {
+    	$host = shift @fqdn;
+    	until((gethostbyname($host))[0]) {
+    	    $host .= "." . shift @fqdn;
+    	}
+    	$domain = join(".", @fqdn);
+    }
+    else {
+    	undef $host;
+    	undef $domain;
+    	undef $fqdn;
+    }
+
+    $fqdn;
+}
+
+sub hostfqdn { domainname() }
+
+sub hostname {
+    domainname()
+    	unless(defined $host);
+    return $host;
+}
+
+sub hostdomain {
+    domainname()
+    	unless(defined $domain);
+    return $domain;
+}
+
+1; # Keep require happy
+
+__END__
+
+=head1 NAME
+
+Net::Domain - Attempt to evaluate the current host's internet name and domain
+
+=head1 SYNOPSIS
+
+    use Net::Domain qw(hostname hostfqdn hostdomain);
+
+=head1 DESCRIPTION
+
+Using various methods B<attempt> to find the Fully Qualified Domain Name (FQDN)
+of the current host. From this determine the host-name and the host-domain.
+
+Each of the functions will return I<undef> if the FQDN cannot be determined.
+
+=over 4
+
+=item hostfqdn ()
+
+Identify and return the FQDN of the current host.
+
+=item hostname ()
+
+Returns the smallest part of the FQDN which can be used to identify the host.
+
+=item hostdomain ()
+
+Returns the remainder of the FQDN after the I<hostname> has been removed.
+
+=back
+
+=head1 AUTHOR
+
+Graham Barr <gbarr@pobox.com>.
+Adapted from Sys::Hostname by David Sundstrom <sunds@asictest.sc.ti.com>
+
+=head1 COPYRIGHT
+
+Copyright (c) 1995-1998 Graham Barr. All rights reserved.
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=for html <hr>
+
+I<$Id: //depot/libnet/Net/Domain.pm#21 $>
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Net/DummyInetd.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,148 @@
+# Net::DummyInetd.pm
+#
+# Copyright (c) 1995-1997 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package Net::DummyInetd;
+
+require 5.002;
+
+use IO::Handle;
+use IO::Socket;
+use strict;
+use vars qw($VERSION);
+use Carp;
+
+$VERSION = do { my @r=(q$Revision: 1.6 $=~/\d+/g); sprintf "%d."."%02d"x$#r,@r};
+
+
+sub _process
+{
+ my $listen = shift;
+ my @cmd = @_;
+ my $vec = '';
+ my $r;
+
+ vec($vec,fileno($listen),1) = 1;
+
+ while(select($r=$vec,undef,undef,undef))
+  {
+   my $sock = $listen->accept;
+   my $pid;
+
+   if($pid = fork())
+    {
+     sleep 1;
+     close($sock);
+    }
+   elsif(defined $pid)
+    {
+     my $x =  IO::Handle->new_from_fd($sock,"r");
+     open(STDIN,"<&=".fileno($x)) || die "$! $@";
+     close($x);
+
+     my $y = IO::Handle->new_from_fd($sock,"w");
+     open(STDOUT,">&=".fileno($y)) || die "$! $@";
+     close($y);
+
+     close($sock);
+     exec(@cmd) || carp "$! $@";
+    }
+   else
+    {
+     close($sock);
+     carp $!;
+    }
+  }
+ exit -1; 
+}
+
+sub new
+{
+ my $self = shift;
+ my $type = ref($self) || $self;
+
+ my $listen = IO::Socket::INET->new(Listen => 5, Proto => 'tcp');
+ my $pid;
+
+ return bless [ $listen->sockport, $pid ]
+	if($pid = fork());
+
+ _process($listen,@_);
+}
+
+sub port
+{
+ my $self = shift;
+ $self->[0];
+}
+
+sub DESTROY
+{
+ my $self = shift;
+ kill 9, $self->[1];
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Net::DummyInetd - A dummy Inetd server
+
+=head1 SYNOPSIS
+
+    use Net::DummyInetd;
+    use Net::SMTP;
+    
+    $inetd = new Net::DummyInetd qw(/usr/lib/sendmail -ba -bs);
+    
+    $smtp  = Net::SMTP->new('localhost', Port => $inetd->port);
+
+=head1 DESCRIPTION
+
+C<Net::DummyInetd> is just what it's name says, it is a dummy inetd server.
+Creation of a C<Net::DummyInetd> will cause a child process to be spawned off
+which will listen to a socket. When a connection arrives on this socket
+the specified command is fork'd and exec'd with STDIN and STDOUT file
+descriptors duplicated to the new socket.
+
+This package was added as an example of how to use C<Net::SMTP> to connect
+to a C<sendmail> process, which is not the default, via SIDIN and STDOUT.
+A C<Net::Inetd> package will be available in the next release of C<libnet>
+
+=head1 CONSTRUCTOR
+
+=over 4
+
+=item new ( CMD )
+
+Creates a new object and spawns a child process which listens to a socket.
+C<CMD> is a list, which will be passed to C<exec> when a new process needs
+to be created.
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item port
+
+Returns the port number on which the I<DummyInetd> object is listening
+
+=back
+
+=head1 AUTHOR
+
+Graham Barr <gbarr@pobox.com>
+
+=head1 COPYRIGHT
+
+Copyright (c) 1995-1997 Graham Barr. All rights reserved.
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Net/FTP.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1770 @@
+# Net::FTP.pm
+#
+# Copyright (c) 1995-8 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+#
+# Documentation (at end) improved 1996 by Nathan Torkington <gnat@frii.com>.
+
+package Net::FTP;
+
+require 5.001;
+
+use strict;
+use vars qw(@ISA $VERSION);
+use Carp;
+
+use Socket 1.3;
+use IO::Socket;
+use Time::Local;
+use Net::Cmd;
+use Net::Config;
+use Fcntl qw(O_WRONLY O_RDONLY O_APPEND O_CREAT O_TRUNC);
+
+$VERSION = "2.72"; # $Id: //depot/libnet/Net/FTP.pm#80 $
+@ISA     = qw(Exporter Net::Cmd IO::Socket::INET);
+
+# Someday I will "use constant", when I am not bothered to much about
+# compatability with older releases of perl
+
+use vars qw($TELNET_IAC $TELNET_IP $TELNET_DM);
+($TELNET_IAC,$TELNET_IP,$TELNET_DM) = (255,244,242);
+
+# Name is too long for AutoLoad, it clashes with pasv_xfer
+sub pasv_xfer_unique {
+    my($sftp,$sfile,$dftp,$dfile) = @_;
+    $sftp->pasv_xfer($sfile,$dftp,$dfile,1);
+}
+
+BEGIN {
+  # make a constant so code is fast'ish
+  my $is_os390 = $^O eq 'os390';
+  *trEBCDIC = sub () { $is_os390 }
+}
+
+1;
+# Having problems with AutoLoader
+#__END__
+
+sub new
+{
+ my $pkg  = shift;
+ my $peer = shift;
+ my %arg  = @_; 
+
+ my $host = $peer;
+ my $fire = undef;
+ my $fire_type = undef;
+
+ if(exists($arg{Firewall}) || Net::Config->requires_firewall($peer))
+  {
+   $fire = $arg{Firewall}
+	|| $ENV{FTP_FIREWALL}
+	|| $NetConfig{ftp_firewall}
+	|| undef;
+
+   if(defined $fire)
+    {
+     $peer = $fire;
+     delete $arg{Port};
+	 $fire_type = $arg{FirewallType}
+	 || $ENV{FTP_FIREWALL_TYPE}
+	 || $NetConfig{firewall_type}
+	 || undef;
+    }
+  }
+
+ my $ftp = $pkg->SUPER::new(PeerAddr => $peer, 
+			    PeerPort => $arg{Port} || 'ftp(21)',
+			    LocalAddr => $arg{'LocalAddr'},
+			    Proto    => 'tcp',
+			    Timeout  => defined $arg{Timeout}
+						? $arg{Timeout}
+						: 120
+			   ) or return undef;
+
+ ${*$ftp}{'net_ftp_host'}     = $host;		# Remote hostname
+ ${*$ftp}{'net_ftp_type'}     = 'A';		# ASCII/binary/etc mode
+ ${*$ftp}{'net_ftp_blksize'}  = abs($arg{'BlockSize'} || 10240);
+
+ ${*$ftp}{'net_ftp_localaddr'} = $arg{'LocalAddr'};
+
+ ${*$ftp}{'net_ftp_firewall'} = $fire
+	if(defined $fire);
+ ${*$ftp}{'net_ftp_firewall_type'} = $fire_type
+	if(defined $fire_type);
+
+ ${*$ftp}{'net_ftp_passive'} = int
+	exists $arg{Passive}
+	    ? $arg{Passive}
+	    : exists $ENV{FTP_PASSIVE}
+		? $ENV{FTP_PASSIVE}
+		: defined $fire
+		    ? $NetConfig{ftp_ext_passive}
+		    : $NetConfig{ftp_int_passive};	# Whew! :-)
+
+ $ftp->hash(exists $arg{Hash} ? $arg{Hash} : 0, 1024);
+
+ $ftp->autoflush(1);
+
+ $ftp->debug(exists $arg{Debug} ? $arg{Debug} : undef);
+
+ unless ($ftp->response() == CMD_OK)
+  {
+   $ftp->close();
+   $@ = $ftp->message;
+   undef $ftp;
+  }
+
+ $ftp;
+}
+
+##
+## User interface methods
+##
+
+sub hash {
+    my $ftp = shift;		# self
+
+    my($h,$b) = @_;
+    unless($h) {
+      delete ${*$ftp}{'net_ftp_hash'};
+      return [\*STDERR,0];
+    }
+    ($h,$b) = (ref($h)? $h : \*STDERR, $b || 1024);
+    select((select($h), $|=1)[0]);
+    $b = 512 if $b < 512;
+    ${*$ftp}{'net_ftp_hash'} = [$h, $b];
+}        
+
+sub quit
+{
+ my $ftp = shift;
+
+ $ftp->_QUIT;
+ $ftp->close;
+}
+
+sub DESTROY {}
+
+sub ascii  { shift->type('A',@_); }
+sub binary { shift->type('I',@_); }
+
+sub ebcdic
+{
+ carp "TYPE E is unsupported, shall default to I";
+ shift->type('E',@_);
+}
+
+sub byte
+{
+ carp "TYPE L is unsupported, shall default to I";
+ shift->type('L',@_);
+}
+
+# Allow the user to send a command directly, BE CAREFUL !!
+
+sub quot
+{ 
+ my $ftp = shift;
+ my $cmd = shift;
+
+ $ftp->command( uc $cmd, @_);
+ $ftp->response();
+}
+
+sub site
+{
+ my $ftp = shift;
+
+ $ftp->command("SITE", @_);
+ $ftp->response();
+}
+
+sub mdtm
+{
+ my $ftp  = shift;
+ my $file = shift;
+
+ # Server Y2K defect workaround
+ #
+ # sigh; some idiotic FTP servers use ("19%d",tm.tm_year) instead of 
+ # ("%d",tm.tm_year+1900).  This results in an extra digit in the
+ # string returned. To account for this we allow an optional extra
+ # digit in the year. Then if the first two digits are 19 we use the
+ # remainder, otherwise we subtract 1900 from the whole year.
+
+ $ftp->_MDTM($file) && $ftp->message =~ /((\d\d)(\d\d\d?))(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/
+    ? timegm($8,$7,$6,$5,$4-1,$2 eq '19' ? $3 : ($1-1900))
+    : undef;
+}
+
+sub size {
+  my $ftp  = shift;
+  my $file = shift;
+  my $io;
+  if($ftp->supported("SIZE")) {
+    return $ftp->_SIZE($file)
+	? ($ftp->message =~ /(\d+)\s*$/)[0]
+	: undef;
+ }
+ elsif($ftp->supported("STAT")) {
+   my @msg;
+   return undef
+       unless $ftp->_STAT($file) && (@msg = $ftp->message) == 3;
+   my $line;
+   foreach $line (@msg) {
+     return (split(/\s+/,$line))[4]
+	 if $line =~ /^[-rwxSsTt]{10}/
+   }
+ }
+ else {
+   my @files = $ftp->dir($file);
+   if(@files) {
+     return (split(/\s+/,$1))[4]
+	 if $files[0] =~ /^([-rwxSsTt]{10}.*)$/;
+   }
+ }
+ undef;
+}
+
+sub login {
+  my($ftp,$user,$pass,$acct) = @_;
+  my($ok,$ruser,$fwtype);
+
+  unless (defined $user) {
+    require Net::Netrc;
+
+    my $rc = Net::Netrc->lookup(${*$ftp}{'net_ftp_host'});
+
+    ($user,$pass,$acct) = $rc->lpa()
+	 if ($rc);
+   }
+
+  $user ||= "anonymous";
+  $ruser = $user;
+
+  $fwtype = ${*$ftp}{'net_ftp_firewall_type'}
+  || $NetConfig{'ftp_firewall_type'}
+  || 0;
+
+  if ($fwtype && defined ${*$ftp}{'net_ftp_firewall'}) {
+    if ($fwtype == 1 || $fwtype == 7) {
+      $user .= '@' . ${*$ftp}{'net_ftp_host'};
+    }
+    else {
+      require Net::Netrc;
+
+      my $rc = Net::Netrc->lookup(${*$ftp}{'net_ftp_firewall'});
+
+      my($fwuser,$fwpass,$fwacct) = $rc ? $rc->lpa() : ();
+
+      if ($fwtype == 5) {
+	$user = join('@',$user,$fwuser,${*$ftp}{'net_ftp_host'});
+	$pass = $pass . '@' . $fwpass;
+      }
+      else {
+	if ($fwtype == 2) {
+	  $user .= '@' . ${*$ftp}{'net_ftp_host'};
+	}
+	elsif ($fwtype == 6) {
+	  $fwuser .= '@' . ${*$ftp}{'net_ftp_host'};
+	}
+
+	$ok = $ftp->_USER($fwuser);
+
+	return 0 unless $ok == CMD_OK || $ok == CMD_MORE;
+
+	$ok = $ftp->_PASS($fwpass || "");
+
+	return 0 unless $ok == CMD_OK || $ok == CMD_MORE;
+
+	$ok = $ftp->_ACCT($fwacct)
+	  if defined($fwacct);
+
+	if ($fwtype == 3) {
+          $ok = $ftp->command("SITE",${*$ftp}{'net_ftp_host'})->response;
+	}
+	elsif ($fwtype == 4) {
+          $ok = $ftp->command("OPEN",${*$ftp}{'net_ftp_host'})->response;
+	}
+
+	return 0 unless $ok == CMD_OK || $ok == CMD_MORE;
+      }
+    }
+  }
+
+  $ok = $ftp->_USER($user);
+
+  # Some dumb firewalls don't prefix the connection messages
+  $ok = $ftp->response()
+	 if ($ok == CMD_OK && $ftp->code == 220 && $user =~ /\@/);
+
+  if ($ok == CMD_MORE) {
+    unless(defined $pass) {
+      require Net::Netrc;
+
+      my $rc = Net::Netrc->lookup(${*$ftp}{'net_ftp_host'}, $ruser);
+
+      ($ruser,$pass,$acct) = $rc->lpa()
+	 if ($rc);
+
+      $pass = '-anonymous@'
+         if (!defined $pass && (!defined($ruser) || $ruser =~ /^anonymous/o));
+    }
+
+    $ok = $ftp->_PASS($pass || "");
+  }
+
+  $ok = $ftp->_ACCT($acct)
+	 if (defined($acct) && ($ok == CMD_MORE || $ok == CMD_OK));
+
+  if ($fwtype == 7 && $ok == CMD_OK && defined ${*$ftp}{'net_ftp_firewall'}) {
+    my($f,$auth,$resp) = _auth_id($ftp);
+    $ftp->authorize($auth,$resp) if defined($resp);
+  }
+
+  $ok == CMD_OK;
+}
+
+sub account
+{
+ @_ == 2 or croak 'usage: $ftp->account( ACCT )';
+ my $ftp = shift;
+ my $acct = shift;
+ $ftp->_ACCT($acct) == CMD_OK;
+}
+
+sub _auth_id {
+ my($ftp,$auth,$resp) = @_;
+
+ unless(defined $resp)
+  {
+   require Net::Netrc;
+
+   $auth ||= eval { (getpwuid($>))[0] } || $ENV{NAME};
+
+   my $rc = Net::Netrc->lookup(${*$ftp}{'net_ftp_firewall'}, $auth)
+        || Net::Netrc->lookup(${*$ftp}{'net_ftp_firewall'});
+
+   ($auth,$resp) = $rc->lpa()
+     if ($rc);
+  }
+  ($ftp,$auth,$resp);
+}
+
+sub authorize
+{
+ @_ >= 1 || @_ <= 3 or croak 'usage: $ftp->authorize( [AUTH [, RESP]])';
+
+ my($ftp,$auth,$resp) = &_auth_id;
+
+ my $ok = $ftp->_AUTH($auth || "");
+
+ $ok = $ftp->_RESP($resp || "")
+	if ($ok == CMD_MORE);
+
+ $ok == CMD_OK;
+}
+
+sub rename
+{
+ @_ == 3 or croak 'usage: $ftp->rename(FROM, TO)';
+
+ my($ftp,$from,$to) = @_;
+
+ $ftp->_RNFR($from)
+    && $ftp->_RNTO($to);
+}
+
+sub type
+{
+ my $ftp = shift;
+ my $type = shift;
+ my $oldval = ${*$ftp}{'net_ftp_type'};
+
+ return $oldval
+	unless (defined $type);
+
+ return undef
+	unless ($ftp->_TYPE($type,@_));
+
+ ${*$ftp}{'net_ftp_type'} = join(" ",$type,@_);
+
+ $oldval;
+}
+
+sub alloc
+{
+ my $ftp = shift;
+ my $size = shift;
+ my $oldval = ${*$ftp}{'net_ftp_allo'};
+
+ return $oldval
+	unless (defined $size);
+
+ return undef
+	unless ($ftp->_ALLO($size,@_));
+
+ ${*$ftp}{'net_ftp_allo'} = join(" ",$size,@_);
+
+ $oldval;
+}
+
+sub abort
+{
+ my $ftp = shift;
+
+ send($ftp,pack("CCC", $TELNET_IAC, $TELNET_IP, $TELNET_IAC),MSG_OOB);
+
+ $ftp->command(pack("C",$TELNET_DM) . "ABOR");
+
+ ${*$ftp}{'net_ftp_dataconn'}->close()
+    if defined ${*$ftp}{'net_ftp_dataconn'};
+
+ $ftp->response();
+
+ $ftp->status == CMD_OK;
+}
+
+sub get
+{
+ my($ftp,$remote,$local,$where) = @_;
+
+ my($loc,$len,$buf,$resp,$data);
+ local *FD;
+
+ my $localfd = ref($local) || ref(\$local) eq "GLOB";
+
+ ($local = $remote) =~ s#^.*/##
+	unless(defined $local);
+
+ croak("Bad remote filename '$remote'\n")
+	if $remote =~ /[\r\n]/s;
+
+ ${*$ftp}{'net_ftp_rest'} = $where
+	if ($where);
+
+ delete ${*$ftp}{'net_ftp_port'};
+ delete ${*$ftp}{'net_ftp_pasv'};
+
+ $data = $ftp->retr($remote) or
+	return undef;
+
+ if($localfd)
+  {
+   $loc = $local;
+  }
+ else
+  {
+   $loc = \*FD;
+
+   unless(sysopen($loc, $local, O_CREAT | O_WRONLY | ($where ? O_APPEND : O_TRUNC)))
+    {
+     carp "Cannot open Local file $local: $!\n";
+     $data->abort;
+     return undef;
+    }
+  }
+
+ if($ftp->type eq 'I' && !binmode($loc))
+  {
+   carp "Cannot binmode Local file $local: $!\n";
+   $data->abort;
+   close($loc) unless $localfd;
+   return undef;
+  }
+
+ $buf = '';
+ my($count,$hashh,$hashb,$ref) = (0);
+
+ ($hashh,$hashb) = @$ref
+   if($ref = ${*$ftp}{'net_ftp_hash'});
+
+ my $blksize = ${*$ftp}{'net_ftp_blksize'};
+ local $\; # Just in case
+
+ while(1)
+  {
+   last unless $len = $data->read($buf,$blksize);
+
+   if (trEBCDIC && $ftp->type ne 'I')
+    {
+     $buf = $ftp->toebcdic($buf);
+     $len = length($buf);
+    }
+
+   if($hashh) {
+    $count += $len;
+    print $hashh "#" x (int($count / $hashb));
+    $count %= $hashb;
+   }
+   unless(print $loc $buf)
+    {
+     carp "Cannot write to Local file $local: $!\n";
+     $data->abort;
+     close($loc)
+        unless $localfd;
+     return undef;
+    }
+  }
+
+ print $hashh "\n" if $hashh;
+
+ unless ($localfd)
+  {
+   unless (close($loc))
+    {
+     carp "Cannot close file $local (perhaps disk space) $!\n";
+     return undef;
+    }
+  }
+
+ unless ($data->close()) # implied $ftp->response
+  {
+   carp "Unable to close datastream";
+   return undef;
+  }
+
+ return $local;
+}
+
+sub cwd
+{
+ @_ == 1 || @_ == 2 or croak 'usage: $ftp->cwd( [ DIR ] )';
+
+ my($ftp,$dir) = @_;
+
+ $dir = "/" unless defined($dir) && $dir =~ /\S/;
+
+ $dir eq ".."
+    ? $ftp->_CDUP()
+    : $ftp->_CWD($dir);
+}
+
+sub cdup
+{
+ @_ == 1 or croak 'usage: $ftp->cdup()';
+ $_[0]->_CDUP;
+}
+
+sub pwd
+{
+ @_ == 1 || croak 'usage: $ftp->pwd()';
+ my $ftp = shift;
+
+ $ftp->_PWD();
+ $ftp->_extract_path;
+}
+
+# rmdir( $ftp, $dir, [ $recurse ] )
+#
+# Removes $dir on remote host via FTP.
+# $ftp is handle for remote host
+#
+# If $recurse is TRUE, the directory and deleted recursively.
+# This means all of its contents and subdirectories.
+#
+# Initial version contributed by Dinkum Software
+#
+sub rmdir
+{
+    @_ == 2 || @_ == 3 or croak('usage: $ftp->rmdir( DIR [, RECURSE ] )');
+
+    # Pick off the args
+    my ($ftp, $dir, $recurse) = @_ ;
+    my $ok;
+
+    return $ok
+	if $ok = $ftp->_RMD( $dir ) or !$recurse;
+
+    # Try to delete the contents
+    # Get a list of all the files in the directory
+    my $filelist = $ftp->ls($dir);
+
+    return undef
+	unless $filelist && @$filelist; # failed, it is probably not a directory
+
+    # Go thru and delete each file or the directory
+    my $file;
+    foreach $file (map { m,/, ? $_ : "$dir/$_" } @$filelist)
+    {
+	next  # successfully deleted the file
+	    if $ftp->delete($file);
+
+	# Failed to delete it, assume its a directory
+	# Recurse and ignore errors, the final rmdir() will
+	# fail on any errors here
+	return $ok
+	    unless $ok = $ftp->rmdir($file, 1) ;
+    }
+
+    # Directory should be empty
+    # Try to remove the directory again
+    # Pass results directly to caller
+    # If any of the prior deletes failed, this
+    # rmdir() will fail because directory is not empty
+    return $ftp->_RMD($dir) ;
+}
+
+sub restart
+{
+  @_ == 2 || croak 'usage: $ftp->restart( BYTE_OFFSET )';
+
+  my($ftp,$where) = @_;
+
+  ${*$ftp}{'net_ftp_rest'} = $where;
+
+  return undef;
+}
+
+
+sub mkdir
+{
+ @_ == 2 || @_ == 3 or croak 'usage: $ftp->mkdir( DIR [, RECURSE ] )';
+
+ my($ftp,$dir,$recurse) = @_;
+
+ $ftp->_MKD($dir) || $recurse or
+    return undef;
+
+ my $path = $dir;
+
+ unless($ftp->ok)
+  {
+   my @path = split(m#(?=/+)#, $dir);
+
+   $path = "";
+
+   while(@path)
+    {
+     $path .= shift @path;
+
+     $ftp->_MKD($path);
+
+     $path = $ftp->_extract_path($path);
+    }
+
+   # If the creation of the last element was not successful, see if we
+   # can cd to it, if so then return path
+
+   unless($ftp->ok)
+    {
+     my($status,$message) = ($ftp->status,$ftp->message);
+     my $pwd = $ftp->pwd;
+
+     if($pwd && $ftp->cwd($dir))
+      {
+       $path = $dir;
+       $ftp->cwd($pwd);
+      }
+     else
+      {
+       undef $path;
+      }
+     $ftp->set_status($status,$message);
+    }
+  }
+
+ $path;
+}
+
+sub delete
+{
+ @_ == 2 || croak 'usage: $ftp->delete( FILENAME )';
+
+ $_[0]->_DELE($_[1]);
+}
+
+sub put        { shift->_store_cmd("stor",@_) }
+sub put_unique { shift->_store_cmd("stou",@_) }
+sub append     { shift->_store_cmd("appe",@_) }
+
+sub nlst { shift->_data_cmd("NLST",@_) }
+sub list { shift->_data_cmd("LIST",@_) }
+sub retr { shift->_data_cmd("RETR",@_) }
+sub stor { shift->_data_cmd("STOR",@_) }
+sub stou { shift->_data_cmd("STOU",@_) }
+sub appe { shift->_data_cmd("APPE",@_) }
+
+sub _store_cmd 
+{
+ my($ftp,$cmd,$local,$remote) = @_;
+ my($loc,$sock,$len,$buf);
+ local *FD;
+
+ my $localfd = ref($local) || ref(\$local) eq "GLOB";
+
+ unless(defined $remote)
+  {
+   croak 'Must specify remote filename with stream input'
+	if $localfd;
+
+   require File::Basename;
+   $remote = File::Basename::basename($local);
+  }
+ if( defined ${*$ftp}{'net_ftp_allo'} ) 
+  {
+   delete ${*$ftp}{'net_ftp_allo'};
+  } else 
+  {
+   # if the user hasn't already invoked the alloc method since the last 
+   # _store_cmd call, figure out if the local file is a regular file(not
+   # a pipe, or device) and if so get the file size from stat, and send
+   # an ALLO command before sending the STOR, STOU, or APPE command.
+   my $size = -f $local && -s _; # no ALLO if sending data from a pipe
+   $ftp->_ALLO($size) if $size;
+  }
+ croak("Bad remote filename '$remote'\n")
+	if $remote =~ /[\r\n]/s;
+
+ if($localfd)
+  {
+   $loc = $local;
+  }
+ else
+  {
+   $loc = \*FD;
+
+   unless(sysopen($loc, $local, O_RDONLY))
+    {
+     carp "Cannot open Local file $local: $!\n";
+     return undef;
+    }
+  }
+
+ if($ftp->type eq 'I' && !binmode($loc))
+  {
+   carp "Cannot binmode Local file $local: $!\n";
+   return undef;
+  }
+
+ delete ${*$ftp}{'net_ftp_port'};
+ delete ${*$ftp}{'net_ftp_pasv'};
+
+ $sock = $ftp->_data_cmd($cmd, $remote) or 
+	return undef;
+
+ $remote = ($ftp->message =~ /FILE:\s*(.*)/)[0]
+   if 'STOU' eq uc $cmd;
+
+ my $blksize = ${*$ftp}{'net_ftp_blksize'};
+
+ my($count,$hashh,$hashb,$ref) = (0);
+
+ ($hashh,$hashb) = @$ref
+   if($ref = ${*$ftp}{'net_ftp_hash'});
+
+ while(1)
+  {
+   last unless $len = read($loc,$buf="",$blksize);
+
+   if (trEBCDIC && $ftp->type ne 'I')
+    {
+     $buf = $ftp->toascii($buf); 
+     $len = length($buf);
+    }
+
+   if($hashh) {
+    $count += $len;
+    print $hashh "#" x (int($count / $hashb));
+    $count %= $hashb;
+   }
+
+   my $wlen;
+   unless(defined($wlen = $sock->write($buf,$len)) && $wlen == $len)
+    {
+     $sock->abort;
+     close($loc)
+	unless $localfd;
+     print $hashh "\n" if $hashh;
+     return undef;
+    }
+  }
+
+ print $hashh "\n" if $hashh;
+
+ close($loc)
+	unless $localfd;
+
+ $sock->close() or
+	return undef;
+
+ if ('STOU' eq uc $cmd and $ftp->message =~ m/unique\s+file\s*name\s*:\s*(.*)\)|"(.*)"/)
+  {
+   require File::Basename;
+   $remote = File::Basename::basename($+) 
+  }
+
+ return $remote;
+}
+
+sub port
+{
+ @_ == 1 || @_ == 2 or croak 'usage: $ftp->port([PORT])';
+
+ my($ftp,$port) = @_;
+ my $ok;
+
+ delete ${*$ftp}{'net_ftp_intern_port'};
+
+ unless(defined $port)
+  {
+   # create a Listen socket at same address as the command socket
+
+   ${*$ftp}{'net_ftp_listen'} ||= IO::Socket::INET->new(Listen    => 5,
+				    	    	        Proto     => 'tcp',
+							Timeout   => $ftp->timeout,
+							LocalAddr => $ftp->sockhost,
+				    	    	       );
+
+   my $listen = ${*$ftp}{'net_ftp_listen'};
+
+   my($myport, @myaddr) = ($listen->sockport, split(/\./,$listen->sockhost));
+
+   $port = join(',', @myaddr, $myport >> 8, $myport & 0xff);
+
+   ${*$ftp}{'net_ftp_intern_port'} = 1;
+  }
+
+ $ok = $ftp->_PORT($port);
+
+ ${*$ftp}{'net_ftp_port'} = $port;
+
+ $ok;
+}
+
+sub ls  { shift->_list_cmd("NLST",@_); }
+sub dir { shift->_list_cmd("LIST",@_); }
+
+sub pasv
+{
+ @_ == 1 or croak 'usage: $ftp->pasv()';
+
+ my $ftp = shift;
+
+ delete ${*$ftp}{'net_ftp_intern_port'};
+
+ $ftp->_PASV && $ftp->message =~ /(\d+(,\d+)+)/
+    ? ${*$ftp}{'net_ftp_pasv'} = $1
+    : undef;    
+}
+
+sub unique_name
+{
+ my $ftp = shift;
+ ${*$ftp}{'net_ftp_unique'} || undef;
+}
+
+sub supported {
+    @_ == 2 or croak 'usage: $ftp->supported( CMD )';
+    my $ftp = shift;
+    my $cmd = uc shift;
+    my $hash = ${*$ftp}{'net_ftp_supported'} ||= {};
+
+    return $hash->{$cmd}
+        if exists $hash->{$cmd};
+
+    return $hash->{$cmd} = 0
+	unless $ftp->_HELP($cmd);
+
+    my $text = $ftp->message;
+    if($text =~ /following\s+commands/i) {
+	$text =~ s/^.*\n//;
+        while($text =~ /(\*?)(\w+)(\*?)/sg) {
+            $hash->{"\U$2"} = !length("$1$3");
+        }
+    }
+    else {
+	$hash->{$cmd} = $text !~ /unimplemented/i;
+    }
+
+    $hash->{$cmd} ||= 0;
+}
+
+##
+## Deprecated methods
+##
+
+sub lsl
+{
+ carp "Use of Net::FTP::lsl deprecated, use 'dir'"
+    if $^W;
+ goto &dir;
+}
+
+sub authorise
+{
+ carp "Use of Net::FTP::authorise deprecated, use 'authorize'"
+    if $^W;
+ goto &authorize;
+}
+
+
+##
+## Private methods
+##
+
+sub _extract_path
+{
+ my($ftp, $path) = @_;
+
+ # This tries to work both with and without the quote doubling
+ # convention (RFC 959 requires it, but the first 3 servers I checked
+ # didn't implement it).  It will fail on a server which uses a quote in
+ # the message which isn't a part of or surrounding the path.
+ $ftp->ok &&
+    $ftp->message =~ /(?:^|\s)\"(.*)\"(?:$|\s)/ &&
+    ($path = $1) =~ s/\"\"/\"/g;
+
+ $path;
+}
+
+##
+## Communication methods
+##
+
+sub _dataconn
+{
+ my $ftp = shift;
+ my $data = undef;
+ my $pkg = "Net::FTP::" . $ftp->type;
+
+ eval "require " . $pkg;
+
+ $pkg =~ s/ /_/g;
+
+ delete ${*$ftp}{'net_ftp_dataconn'};
+
+ if(defined ${*$ftp}{'net_ftp_pasv'})
+  {
+   my @port = split(/,/,${*$ftp}{'net_ftp_pasv'});
+
+   $data = $pkg->new(PeerAddr => join(".",@port[0..3]),
+    	    	     PeerPort => $port[4] * 256 + $port[5],
+		     LocalAddr => ${*$ftp}{'net_ftp_localaddr'},
+    	    	     Proto    => 'tcp'
+    	    	    );
+  }
+ elsif(defined ${*$ftp}{'net_ftp_listen'})
+  {
+   $data = ${*$ftp}{'net_ftp_listen'}->accept($pkg);
+   close(delete ${*$ftp}{'net_ftp_listen'});
+  }
+
+ if($data)
+  {
+   ${*$data} = "";
+   $data->timeout($ftp->timeout);
+   ${*$ftp}{'net_ftp_dataconn'} = $data;
+   ${*$data}{'net_ftp_cmd'} = $ftp;
+   ${*$data}{'net_ftp_blksize'} = ${*$ftp}{'net_ftp_blksize'};
+  }
+
+ $data;
+}
+
+sub _list_cmd
+{
+ my $ftp = shift;
+ my $cmd = uc shift;
+
+ delete ${*$ftp}{'net_ftp_port'};
+ delete ${*$ftp}{'net_ftp_pasv'};
+
+ my $data = $ftp->_data_cmd($cmd,@_);
+
+ return
+	unless(defined $data);
+
+ require Net::FTP::A;
+ bless $data, "Net::FTP::A"; # Force ASCII mode
+
+ my $databuf = '';
+ my $buf = '';
+ my $blksize = ${*$ftp}{'net_ftp_blksize'};
+
+ while($data->read($databuf,$blksize)) {
+   $buf .= $databuf;
+ }
+
+ my $list = [ split(/\n/,$buf) ];
+
+ $data->close();
+
+ if (trEBCDIC)
+  {
+   for (@$list) { $_ = $ftp->toebcdic($_) }
+  }
+
+ wantarray ? @{$list}
+           : $list;
+}
+
+sub _data_cmd
+{
+ my $ftp = shift;
+ my $cmd = uc shift;
+ my $ok = 1;
+ my $where = delete ${*$ftp}{'net_ftp_rest'} || 0;
+ my $arg;
+
+ for $arg (@_) {
+   croak("Bad argument '$arg'\n")
+	if $arg =~ /[\r\n]/s;
+ }
+
+ if(${*$ftp}{'net_ftp_passive'} &&
+     !defined ${*$ftp}{'net_ftp_pasv'} &&
+     !defined ${*$ftp}{'net_ftp_port'})
+  {
+   my $data = undef;
+
+   $ok = defined $ftp->pasv;
+   $ok = $ftp->_REST($where)
+	if $ok && $where;
+
+   if($ok)
+    {
+     $ftp->command($cmd,@_);
+     $data = $ftp->_dataconn();
+     $ok = CMD_INFO == $ftp->response();
+     if($ok) 
+      {
+       $data->reading
+         if $data && $cmd =~ /RETR|LIST|NLST/;
+       return $data
+      }
+     $data->_close
+	if $data;
+    }
+   return undef;
+  }
+
+ $ok = $ftp->port
+    unless (defined ${*$ftp}{'net_ftp_port'} ||
+            defined ${*$ftp}{'net_ftp_pasv'});
+
+ $ok = $ftp->_REST($where)
+    if $ok && $where;
+
+ return undef
+    unless $ok;
+
+ $ftp->command($cmd,@_);
+
+ return 1
+    if(defined ${*$ftp}{'net_ftp_pasv'});
+
+ $ok = CMD_INFO == $ftp->response();
+
+ return $ok 
+    unless exists ${*$ftp}{'net_ftp_intern_port'};
+
+ if($ok) {
+   my $data = $ftp->_dataconn();
+
+   $data->reading
+         if $data && $cmd =~ /RETR|LIST|NLST/;
+
+   return $data;
+ }
+
+
+ close(delete ${*$ftp}{'net_ftp_listen'});
+
+ return undef;
+}
+
+##
+## Over-ride methods (Net::Cmd)
+##
+
+sub debug_text { $_[2] =~ /^(pass|resp|acct)/i ? "$1 ....\n" : $_[2]; }
+
+sub command
+{
+ my $ftp = shift;
+
+ delete ${*$ftp}{'net_ftp_port'};
+ $ftp->SUPER::command(@_);
+}
+
+sub response
+{
+ my $ftp = shift;
+ my $code = $ftp->SUPER::response();
+
+ delete ${*$ftp}{'net_ftp_pasv'}
+    if ($code != CMD_MORE && $code != CMD_INFO);
+
+ $code;
+}
+
+sub parse_response
+{
+ return ($1, $2 eq "-")
+    if $_[1] =~ s/^(\d\d\d)(.?)//o;
+
+ my $ftp = shift;
+
+ return ()
+	unless ${*$ftp}{'net_cmd_code'} + 0;
+
+ (${*$ftp}{'net_cmd_code'},1);
+}
+
+##
+## Allow 2 servers to talk directly
+##
+
+sub pasv_xfer {
+    my($sftp,$sfile,$dftp,$dfile,$unique) = @_;
+
+    ($dfile = $sfile) =~ s#.*/##
+	unless(defined $dfile);
+
+    my $port = $sftp->pasv or
+	return undef;
+
+    $dftp->port($port) or
+	return undef;
+
+    return undef
+	unless($unique ? $dftp->stou($dfile) : $dftp->stor($dfile));
+
+    unless($sftp->retr($sfile) && $sftp->response == CMD_INFO) {
+	$sftp->retr($sfile);
+	$dftp->abort;
+	$dftp->response();
+	return undef;
+    }
+
+    $dftp->pasv_wait($sftp);
+}
+
+sub pasv_wait
+{
+ @_ == 2 or croak 'usage: $ftp->pasv_wait(NON_PASV_FTP)';
+
+ my($ftp, $non_pasv) = @_;
+ my($file,$rin,$rout);
+
+ vec($rin='',fileno($ftp),1) = 1;
+ select($rout=$rin, undef, undef, undef);
+
+ $ftp->response();
+ $non_pasv->response();
+
+ return undef
+	unless $ftp->ok() && $non_pasv->ok();
+
+ return $1
+	if $ftp->message =~ /unique file name:\s*(\S*)\s*\)/;
+
+ return $1
+	if $non_pasv->message =~ /unique file name:\s*(\S*)\s*\)/;
+
+ return 1;
+}
+
+sub cmd { shift->command(@_)->response() }
+
+########################################
+#
+# RFC959 commands
+#
+
+sub _ABOR { shift->command("ABOR")->response()	 == CMD_OK }
+sub _ALLO { shift->command("ALLO",@_)->response() == CMD_OK}
+sub _CDUP { shift->command("CDUP")->response()	 == CMD_OK }
+sub _NOOP { shift->command("NOOP")->response()	 == CMD_OK }
+sub _PASV { shift->command("PASV")->response()	 == CMD_OK }
+sub _QUIT { shift->command("QUIT")->response()	 == CMD_OK }
+sub _DELE { shift->command("DELE",@_)->response() == CMD_OK }
+sub _CWD  { shift->command("CWD", @_)->response() == CMD_OK }
+sub _PORT { shift->command("PORT",@_)->response() == CMD_OK }
+sub _RMD  { shift->command("RMD", @_)->response() == CMD_OK }
+sub _MKD  { shift->command("MKD", @_)->response() == CMD_OK }
+sub _PWD  { shift->command("PWD", @_)->response() == CMD_OK }
+sub _TYPE { shift->command("TYPE",@_)->response() == CMD_OK }
+sub _RNTO { shift->command("RNTO",@_)->response() == CMD_OK }
+sub _RESP { shift->command("RESP",@_)->response() == CMD_OK }
+sub _MDTM { shift->command("MDTM",@_)->response() == CMD_OK }
+sub _SIZE { shift->command("SIZE",@_)->response() == CMD_OK }
+sub _HELP { shift->command("HELP",@_)->response() == CMD_OK }
+sub _STAT { shift->command("STAT",@_)->response() == CMD_OK }
+sub _APPE { shift->command("APPE",@_)->response() == CMD_INFO }
+sub _LIST { shift->command("LIST",@_)->response() == CMD_INFO }
+sub _NLST { shift->command("NLST",@_)->response() == CMD_INFO }
+sub _RETR { shift->command("RETR",@_)->response() == CMD_INFO }
+sub _STOR { shift->command("STOR",@_)->response() == CMD_INFO }
+sub _STOU { shift->command("STOU",@_)->response() == CMD_INFO }
+sub _RNFR { shift->command("RNFR",@_)->response() == CMD_MORE }
+sub _REST { shift->command("REST",@_)->response() == CMD_MORE }
+sub _USER { shift->command("user",@_)->response() } # A certain brain dead firewall :-)
+sub _PASS { shift->command("PASS",@_)->response() }
+sub _ACCT { shift->command("ACCT",@_)->response() }
+sub _AUTH { shift->command("AUTH",@_)->response() }
+
+sub _SMNT { shift->unsupported(@_) }
+sub _MODE { shift->unsupported(@_) }
+sub _SYST { shift->unsupported(@_) }
+sub _STRU { shift->unsupported(@_) }
+sub _REIN { shift->unsupported(@_) }
+
+1;
+
+__END__
+
+=head1 NAME
+
+Net::FTP - FTP Client class
+
+=head1 SYNOPSIS
+
+    use Net::FTP;
+
+    $ftp = Net::FTP->new("some.host.name", Debug => 0)
+      or die "Cannot connect to some.host.name: $@";
+
+    $ftp->login("anonymous",'-anonymous@')
+      or die "Cannot login ", $ftp->message;
+
+    $ftp->cwd("/pub")
+      or die "Cannot change working directory ", $ftp->message;
+
+    $ftp->get("that.file")
+      or die "get failed ", $ftp->message;
+
+    $ftp->quit;
+
+=head1 DESCRIPTION
+
+C<Net::FTP> is a class implementing a simple FTP client in Perl as
+described in RFC959.  It provides wrappers for a subset of the RFC959
+commands.
+
+=head1 OVERVIEW
+
+FTP stands for File Transfer Protocol.  It is a way of transferring
+files between networked machines.  The protocol defines a client
+(whose commands are provided by this module) and a server (not
+implemented in this module).  Communication is always initiated by the
+client, and the server responds with a message and a status code (and
+sometimes with data).
+
+The FTP protocol allows files to be sent to or fetched from the
+server.  Each transfer involves a B<local file> (on the client) and a
+B<remote file> (on the server).  In this module, the same file name
+will be used for both local and remote if only one is specified.  This
+means that transferring remote file C</path/to/file> will try to put
+that file in C</path/to/file> locally, unless you specify a local file
+name.
+
+The protocol also defines several standard B<translations> which the
+file can undergo during transfer.  These are ASCII, EBCDIC, binary,
+and byte.  ASCII is the default type, and indicates that the sender of
+files will translate the ends of lines to a standard representation
+which the receiver will then translate back into their local
+representation.  EBCDIC indicates the file being transferred is in
+EBCDIC format.  Binary (also known as image) format sends the data as
+a contiguous bit stream.  Byte format transfers the data as bytes, the
+values of which remain the same regardless of differences in byte size
+between the two machines (in theory - in practice you should only use
+this if you really know what you're doing).
+
+=head1 CONSTRUCTOR
+
+=over 4
+
+=item new (HOST [,OPTIONS])
+
+This is the constructor for a new Net::FTP object. C<HOST> is the
+name of the remote host to which an FTP connection is required.
+
+C<OPTIONS> are passed in a hash like fashion, using key and value pairs.
+Possible options are:
+
+B<Firewall> - The name of a machine which acts as an FTP firewall. This can be
+overridden by an environment variable C<FTP_FIREWALL>. If specified, and the
+given host cannot be directly connected to, then the
+connection is made to the firewall machine and the string C<@hostname> is
+appended to the login identifier. This kind of setup is also refered to
+as an ftp proxy.
+
+B<FirewallType> - The type of firewall running on the machine indicated by
+B<Firewall>. This can be overridden by an environment variable
+C<FTP_FIREWALL_TYPE>. For a list of permissible types, see the description of
+ftp_firewall_type in L<Net::Config>.
+
+B<BlockSize> - This is the block size that Net::FTP will use when doing
+transfers. (defaults to 10240)
+
+B<Port> - The port number to connect to on the remote machine for the
+FTP connection
+
+B<Timeout> - Set a timeout value (defaults to 120)
+
+B<Debug> - debug level (see the debug method in L<Net::Cmd>)
+
+B<Passive> - If set to a non-zero value then all data transfers will be done
+using passive mode. This is not usually required except for some I<dumb>
+servers, and some firewall configurations. This can also be set by the
+environment variable C<FTP_PASSIVE>.
+
+B<Hash> - If given a reference to a file handle (e.g., C<\*STDERR>),
+print hash marks (#) on that filehandle every 1024 bytes.  This
+simply invokes the C<hash()> method for you, so that hash marks
+are displayed for all transfers.  You can, of course, call C<hash()>
+explicitly whenever you'd like.
+
+B<LocalAddr> - Local address to use for all socket connections, this
+argument will be passed to L<IO::Socket::INET>
+
+If the constructor fails undef will be returned and an error message will
+be in $@
+
+=back
+
+=head1 METHODS
+
+Unless otherwise stated all methods return either a I<true> or I<false>
+value, with I<true> meaning that the operation was a success. When a method
+states that it returns a value, failure will be returned as I<undef> or an
+empty list.
+
+=over 4
+
+=item login ([LOGIN [,PASSWORD [, ACCOUNT] ] ])
+
+Log into the remote FTP server with the given login information. If
+no arguments are given then the C<Net::FTP> uses the C<Net::Netrc>
+package to lookup the login information for the connected host.
+If no information is found then a login of I<anonymous> is used.
+If no password is given and the login is I<anonymous> then I<anonymous@>
+will be used for password.
+
+If the connection is via a firewall then the C<authorize> method will
+be called with no arguments.
+
+=item authorize ( [AUTH [, RESP]])
+
+This is a protocol used by some firewall ftp proxies. It is used
+to authorise the user to send data out.  If both arguments are not specified
+then C<authorize> uses C<Net::Netrc> to do a lookup.
+
+=item site (ARGS)
+
+Send a SITE command to the remote server and wait for a response.
+
+Returns most significant digit of the response code.
+
+=item ascii
+
+Transfer file in ASCII. CRLF translation will be done if required
+
+=item binary
+
+Transfer file in binary mode. No transformation will be done.
+
+B<Hint>: If both server and client machines use the same line ending for
+text files, then it will be faster to transfer all files in binary mode.
+
+=item rename ( OLDNAME, NEWNAME )
+
+Rename a file on the remote FTP server from C<OLDNAME> to C<NEWNAME>. This
+is done by sending the RNFR and RNTO commands.
+
+=item delete ( FILENAME )
+
+Send a request to the server to delete C<FILENAME>.
+
+=item cwd ( [ DIR ] )
+
+Attempt to change directory to the directory given in C<$dir>.  If
+C<$dir> is C<"..">, the FTP C<CDUP> command is used to attempt to
+move up one directory. If no directory is given then an attempt is made
+to change the directory to the root directory.
+
+=item cdup ()
+
+Change directory to the parent of the current directory.
+
+=item pwd ()
+
+Returns the full pathname of the current directory.
+
+=item restart ( WHERE )
+
+Set the byte offset at which to begin the next data transfer. Net::FTP simply
+records this value and uses it when during the next data transfer. For this
+reason this method will not return an error, but setting it may cause
+a subsequent data transfer to fail.
+
+=item rmdir ( DIR [, RECURSE ])
+
+Remove the directory with the name C<DIR>. If C<RECURSE> is I<true> then
+C<rmdir> will attempt to delete everything inside the directory.
+
+=item mkdir ( DIR [, RECURSE ])
+
+Create a new directory with the name C<DIR>. If C<RECURSE> is I<true> then
+C<mkdir> will attempt to create all the directories in the given path.
+
+Returns the full pathname to the new directory.
+
+=item ls ( [ DIR ] )
+
+=item alloc ( SIZE [, RECORD_SIZE] )
+
+The alloc command allows you to give the ftp server a hint about the size
+of the file about to be transfered using the ALLO ftp command. Some storage
+systems use this to make intelligent decisions about how to store the file.
+The C<SIZE> argument represents the size of the file in bytes. The
+C<RECORD_SIZE> argument indicates a mazimum record or page size for files
+sent with a record or page structure.
+
+The size of the file will be determined, and sent to the server
+automatically for normal files so that this method need only be called if
+you are transfering data from a socket, named pipe, or other stream not
+associated with a normal file.
+
+Get a directory listing of C<DIR>, or the current directory.
+
+In an array context, returns a list of lines returned from the server. In
+a scalar context, returns a reference to a list.
+
+=item dir ( [ DIR ] )
+
+Get a directory listing of C<DIR>, or the current directory in long format.
+
+In an array context, returns a list of lines returned from the server. In
+a scalar context, returns a reference to a list.
+
+=item get ( REMOTE_FILE [, LOCAL_FILE [, WHERE]] )
+
+Get C<REMOTE_FILE> from the server and store locally. C<LOCAL_FILE> may be
+a filename or a filehandle. If not specified, the file will be stored in
+the current directory with the same leafname as the remote file.
+
+If C<WHERE> is given then the first C<WHERE> bytes of the file will
+not be transfered, and the remaining bytes will be appended to
+the local file if it already exists.
+
+Returns C<LOCAL_FILE>, or the generated local file name if C<LOCAL_FILE>
+is not given. If an error was encountered undef is returned.
+
+=item put ( LOCAL_FILE [, REMOTE_FILE ] )
+
+Put a file on the remote server. C<LOCAL_FILE> may be a name or a filehandle.
+If C<LOCAL_FILE> is a filehandle then C<REMOTE_FILE> must be specified. If
+C<REMOTE_FILE> is not specified then the file will be stored in the current
+directory with the same leafname as C<LOCAL_FILE>.
+
+Returns C<REMOTE_FILE>, or the generated remote filename if C<REMOTE_FILE>
+is not given.
+
+B<NOTE>: If for some reason the transfer does not complete and an error is
+returned then the contents that had been transfered will not be remove
+automatically.
+
+=item put_unique ( LOCAL_FILE [, REMOTE_FILE ] )
+
+Same as put but uses the C<STOU> command.
+
+Returns the name of the file on the server.
+
+=item append ( LOCAL_FILE [, REMOTE_FILE ] )
+
+Same as put but appends to the file on the remote server.
+
+Returns C<REMOTE_FILE>, or the generated remote filename if C<REMOTE_FILE>
+is not given.
+
+=item unique_name ()
+
+Returns the name of the last file stored on the server using the
+C<STOU> command.
+
+=item mdtm ( FILE )
+
+Returns the I<modification time> of the given file
+
+=item size ( FILE )
+
+Returns the size in bytes for the given file as stored on the remote server.
+
+B<NOTE>: The size reported is the size of the stored file on the remote server.
+If the file is subsequently transfered from the server in ASCII mode
+and the remote server and local machine have different ideas about
+"End Of Line" then the size of file on the local machine after transfer
+may be different.
+
+=item supported ( CMD )
+
+Returns TRUE if the remote server supports the given command.
+
+=item hash ( [FILEHANDLE_GLOB_REF],[ BYTES_PER_HASH_MARK] )
+
+Called without parameters, or with the first argument false, hash marks
+are suppressed.  If the first argument is true but not a reference to a 
+file handle glob, then \*STDERR is used.  The second argument is the number
+of bytes per hash mark printed, and defaults to 1024.  In all cases the
+return value is a reference to an array of two:  the filehandle glob reference
+and the bytes per hash mark.
+
+=back
+
+The following methods can return different results depending on
+how they are called. If the user explicitly calls either
+of the C<pasv> or C<port> methods then these methods will
+return a I<true> or I<false> value. If the user does not
+call either of these methods then the result will be a
+reference to a C<Net::FTP::dataconn> based object.
+
+=over 4
+
+=item nlst ( [ DIR ] )
+
+Send an C<NLST> command to the server, with an optional parameter.
+
+=item list ( [ DIR ] )
+
+Same as C<nlst> but using the C<LIST> command
+
+=item retr ( FILE )
+
+Begin the retrieval of a file called C<FILE> from the remote server.
+
+=item stor ( FILE )
+
+Tell the server that you wish to store a file. C<FILE> is the
+name of the new file that should be created.
+
+=item stou ( FILE )
+
+Same as C<stor> but using the C<STOU> command. The name of the unique
+file which was created on the server will be available via the C<unique_name>
+method after the data connection has been closed.
+
+=item appe ( FILE )
+
+Tell the server that we want to append some data to the end of a file
+called C<FILE>. If this file does not exist then create it.
+
+=back
+
+If for some reason you want to have complete control over the data connection,
+this includes generating it and calling the C<response> method when required,
+then the user can use these methods to do so.
+
+However calling these methods only affects the use of the methods above that
+can return a data connection. They have no effect on methods C<get>, C<put>,
+C<put_unique> and those that do not require data connections.
+
+=over 4
+
+=item port ( [ PORT ] )
+
+Send a C<PORT> command to the server. If C<PORT> is specified then it is sent
+to the server. If not, then a listen socket is created and the correct information
+sent to the server.
+
+=item pasv ()
+
+Tell the server to go into passive mode. Returns the text that represents the
+port on which the server is listening, this text is in a suitable form to
+sent to another ftp server using the C<port> method.
+
+=back
+
+The following methods can be used to transfer files between two remote
+servers, providing that these two servers can connect directly to each other.
+
+=over 4
+
+=item pasv_xfer ( SRC_FILE, DEST_SERVER [, DEST_FILE ] )
+
+This method will do a file transfer between two remote ftp servers. If
+C<DEST_FILE> is omitted then the leaf name of C<SRC_FILE> will be used.
+
+=item pasv_xfer_unique ( SRC_FILE, DEST_SERVER [, DEST_FILE ] )
+
+Like C<pasv_xfer> but the file is stored on the remote server using
+the STOU command.
+
+=item pasv_wait ( NON_PASV_SERVER )
+
+This method can be used to wait for a transfer to complete between a passive
+server and a non-passive server. The method should be called on the passive
+server with the C<Net::FTP> object for the non-passive server passed as an
+argument.
+
+=item abort ()
+
+Abort the current data transfer.
+
+=item quit ()
+
+Send the QUIT command to the remote FTP server and close the socket connection.
+
+=back
+
+=head2 Methods for the adventurous
+
+C<Net::FTP> inherits from C<Net::Cmd> so methods defined in C<Net::Cmd> may
+be used to send commands to the remote FTP server.
+
+=over 4
+
+=item quot (CMD [,ARGS])
+
+Send a command, that Net::FTP does not directly support, to the remote
+server and wait for a response.
+
+Returns most significant digit of the response code.
+
+B<WARNING> This call should only be used on commands that do not require
+data connections. Misuse of this method can hang the connection.
+
+=back
+
+=head1 THE dataconn CLASS
+
+Some of the methods defined in C<Net::FTP> return an object which will
+be derived from this class.The dataconn class itself is derived from
+the C<IO::Socket::INET> class, so any normal IO operations can be performed.
+However the following methods are defined in the dataconn class and IO should
+be performed using these.
+
+=over 4
+
+=item read ( BUFFER, SIZE [, TIMEOUT ] )
+
+Read C<SIZE> bytes of data from the server and place it into C<BUFFER>, also
+performing any <CRLF> translation necessary. C<TIMEOUT> is optional, if not
+given, the timeout value from the command connection will be used.
+
+Returns the number of bytes read before any <CRLF> translation.
+
+=item write ( BUFFER, SIZE [, TIMEOUT ] )
+
+Write C<SIZE> bytes of data from C<BUFFER> to the server, also
+performing any <CRLF> translation necessary. C<TIMEOUT> is optional, if not
+given, the timeout value from the command connection will be used.
+
+Returns the number of bytes written before any <CRLF> translation.
+
+=item bytes_read ()
+
+Returns the number of bytes read so far.
+
+=item abort ()
+
+Abort the current data transfer.
+
+=item close ()
+
+Close the data connection and get a response from the FTP server. Returns
+I<true> if the connection was closed successfully and the first digit of
+the response from the server was a '2'.
+
+=back
+
+=head1 UNIMPLEMENTED
+
+The following RFC959 commands have not been implemented:
+
+=over 4
+
+=item B<SMNT>
+
+Mount a different file system structure without changing login or
+accounting information.
+
+=item B<HELP>
+
+Ask the server for "helpful information" (that's what the RFC says) on
+the commands it accepts.
+
+=item B<MODE>
+
+Specifies transfer mode (stream, block or compressed) for file to be
+transferred.
+
+=item B<SYST>
+
+Request remote server system identification.
+
+=item B<STAT>
+
+Request remote server status.
+
+=item B<STRU>
+
+Specifies file structure for file to be transferred.
+
+=item B<REIN>
+
+Reinitialize the connection, flushing all I/O and account information.
+
+=back
+
+=head1 REPORTING BUGS
+
+When reporting bugs/problems please include as much information as possible.
+It may be difficult for me to reproduce the problem as almost every setup
+is different.
+
+A small script which yields the problem will probably be of help. It would
+also be useful if this script was run with the extra options C<Debug => 1>
+passed to the constructor, and the output sent with the defect report. If you
+cannot include a small script then please include a Debug trace from a
+run of your program which does yield the problem.
+
+=head1 AUTHOR
+
+Graham Barr <gbarr@pobox.com>
+
+=head1 SEE ALSO
+
+L<Net::Netrc>
+L<Net::Cmd>
+
+ftp(1), ftpd(8), RFC 959
+http://www.cis.ohio-state.edu/htbin/rfc/rfc959.html
+
+=head1 USE EXAMPLES
+
+For an example of the use of Net::FTP see
+
+=over 4
+
+=item http://www.csh.rit.edu/~adam/Progs/
+
+C<autoftp> is a program that can retrieve, send, or list files via
+the FTP protocol in a non-interactive manner.
+
+=back
+
+=head1 CREDITS
+
+Henry Gabryjelski <henryg@WPI.EDU> - for the suggestion of creating directories
+recursively.
+
+Nathan Torkington <gnat@frii.com> - for some input on the documentation.
+
+Roderick Schertler <roderick@gate.net> - for various inputs
+
+=head1 COPYRIGHT
+
+Copyright (c) 1995-1998 Graham Barr. All rights reserved.
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+=for html <hr>
+
+I<$Id: //depot/libnet/Net/FTP.pm#80 $>
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Net/FTP/A.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,118 @@
+# COPYRIGHT 1996-2000 Graham Barr. All rights reserved.
+#
+# This library is free software; you can redistribute it and/or modify
+# it under the same terms as Perl itself.
+
+## $Id: //depot/libnet/Net/FTP/A.pm#17 $
+## Package to read/write on ASCII data connections
+##
+
+package Net::FTP::A;
+use strict;
+use vars qw(@ISA $buf $VERSION);
+use Carp;
+
+require Net::FTP::dataconn;
+
+@ISA = qw(Net::FTP::dataconn);
+$VERSION = "1.16";
+
+sub read {
+  my    $data 	 = shift;
+  local *buf 	 = \$_[0]; shift;
+  my    $size 	 = shift || croak 'read($buf,$size,[$offset])';
+  my    $timeout = @_ ? shift : $data->timeout;
+
+  if (length(${*$data}) < $size && !${*$data}{'net_ftp_eof'}) {
+    my $blksize = ${*$data}{'net_ftp_blksize'};
+    $blksize = $size if $size > $blksize;
+
+    my $l = 0;
+    my $n;
+
+    READ:
+    {
+      my $readbuf = defined(${*$data}{'net_ftp_cr'}) ? "\015" : '';
+
+      $data->can_read($timeout) or
+	   croak "Timeout";
+
+      if ($n = sysread($data, $readbuf, $blksize, length $readbuf)) {
+        ${*$data}{'net_ftp_bytesread'} += $n;
+	${*$data}{'net_ftp_cr'} = substr($readbuf,-1) eq "\015"
+					? chop($readbuf)
+					: undef;
+      }
+      else {
+        return undef
+	  unless defined $n;
+
+        ${*$data}{'net_ftp_eof'} = 1;
+      }
+
+      $readbuf =~ s/\015\012/\n/sgo;
+      ${*$data} .= $readbuf;
+
+      unless (length(${*$data})) {
+
+        redo READ
+	  if($n > 0);
+
+        $size = length(${*$data})
+          if($n == 0);
+      }
+    }
+  }
+
+  $buf = substr(${*$data},0,$size);
+  substr(${*$data},0,$size) = '';
+
+  length $buf;
+}
+
+sub write {
+  my    $data 	= shift;
+  local *buf 	= \$_[0]; shift;
+  my    $size 	= shift || croak 'write($buf,$size,[$timeout])';
+  my    $timeout = @_ ? shift : $data->timeout;
+
+  (my $tmp = substr($buf,0,$size)) =~ s/\r?\n/\015\012/sg;
+
+  # If the remote server has closed the connection we will be signal'd
+  # when we write. This can happen if the disk on the remote server fills up
+
+  local $SIG{PIPE} = 'IGNORE' unless $^O eq 'MacOS';
+
+  my $len = length($tmp);
+  my $off = 0;
+  my $wrote = 0;
+
+  my $blksize = ${*$data}{'net_ftp_blksize'};
+
+  while($len) {
+    $data->can_write($timeout) or
+	 croak "Timeout";
+
+    $off += $wrote;
+    $wrote = syswrite($data, substr($tmp,$off), $len > $blksize ? $blksize : $len);
+    return undef
+      unless defined($wrote);
+    $len -= $wrote;
+  }
+
+  $size;
+}
+
+1;
+__END__
+
+=head1 COPYRIGHT
+
+COPYRIGHT
+
+  © 1996-2000 Graham Barr. All rights reserved.
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Net/FTP/E.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+# COPYRIGHT 1996-2000 Graham Barr. All rights reserved.
+#
+# This library is free software; you can redistribute it and/or modify
+# it under the same terms as Perl itself.
+
+package Net::FTP::E;
+
+require Net::FTP::I;
+
+@ISA = qw(Net::FTP::I);
+$VERSION = "0.01";
+
+1;
+__END__
+
+=head1 COPYRIGHT
+
+COPYRIGHT
+
+  © 1996-2000 Graham Barr. All rights reserved.
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Net/FTP/I.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,91 @@
+# COPYRIGHT 1996-2000 Graham Barr. All rights reserved.
+#
+# This library is free software; you can redistribute it and/or modify
+# it under the same terms as Perl itself.
+
+## $Id: //depot/libnet/Net/FTP/I.pm#13 $
+## Package to read/write on BINARY data connections
+##
+
+package Net::FTP::I;
+
+use vars qw(@ISA $buf $VERSION);
+use Carp;
+
+require Net::FTP::dataconn;
+
+@ISA = qw(Net::FTP::dataconn);
+$VERSION = "1.12"; 
+
+sub read {
+  my    $data 	 = shift;
+  local *buf 	 = \$_[0]; shift;
+  my    $size    = shift || croak 'read($buf,$size,[$timeout])';
+  my    $timeout = @_ ? shift : $data->timeout;
+
+  my $n;
+
+  if ($size > length ${*$data} and !${*$data}{'net_ftp_eof'}) {
+    $data->can_read($timeout) or
+	   croak "Timeout";
+
+    my $blksize = ${*$data}{'net_ftp_blksize'};
+    $blksize = $size if $size > $blksize;
+
+    unless ($n = sysread($data, ${*$data}, $blksize, length ${*$data})) {
+      return undef unless defined $n;
+      ${*$data}{'net_ftp_eof'} = 1;
+    }
+  }
+
+  $buf = substr(${*$data},0,$size);
+
+  $n = length($buf);
+
+  substr(${*$data},0,$n) = '';
+
+  ${*$data}{'net_ftp_bytesread'} += $n;
+
+  $n;
+}
+
+sub write {
+  my    $data    = shift;
+  local *buf     = \$_[0]; shift;
+  my    $size    = shift || croak 'write($buf,$size,[$timeout])';
+  my    $timeout = @_ ? shift : $data->timeout;
+
+  # If the remote server has closed the connection we will be signal'd
+  # when we write. This can happen if the disk on the remote server fills up
+
+  local $SIG{PIPE} = 'IGNORE' unless $^O eq 'MacOS';
+  my $sent = $size;
+  my $off = 0;
+
+  my $blksize = ${*$data}{'net_ftp_blksize'};
+  while($sent > 0) {
+    $data->can_write($timeout) or
+	 croak "Timeout";
+
+    my $n = syswrite($data, $buf, $sent > $blksize ? $blksize : $sent ,$off);
+    return undef unless defined($n);
+    $sent -= $n;
+    $off += $n;
+  }
+
+  $size;
+}
+
+1;
+__END__
+
+=head1 COPYRIGHT
+
+COPYRIGHT
+
+  © 1996-2000 Graham Barr. All rights reserved.
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Net/FTP/L.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+# COPYRIGHT 1996-2000 Graham Barr. All rights reserved.
+#
+# This library is free software; you can redistribute it and/or modify
+# it under the same terms as Perl itself.
+
+package Net::FTP::L;
+
+require Net::FTP::I;
+
+@ISA = qw(Net::FTP::I);
+$VERSION = "0.01";
+
+1;
+__END__
+
+=head1 COPYRIGHT
+
+COPYRIGHT
+
+  © 1996-2000 Graham Barr. All rights reserved.
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Net/FTP/dataconn.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,140 @@
+# COPYRIGHT 1996-2000 Graham Barr. All rights reserved.
+# 
+# This library is free software; you can redistribute it and/or modify
+# it under the same terms as Perl itself.
+
+
+
+##
+## Generic data connection package
+##
+
+package Net::FTP::dataconn;
+
+use Carp;
+use vars qw(@ISA $timeout $VERSION);
+use Net::Cmd;
+use Errno;
+
+$VERSION = '0.11';
+@ISA = qw(IO::Socket::INET);
+
+sub reading
+{
+ my $data = shift;
+ ${*$data}{'net_ftp_bytesread'} = 0;
+}
+
+sub abort
+{
+ my $data = shift;
+ my $ftp  = ${*$data}{'net_ftp_cmd'};
+
+ # no need to abort if we have finished the xfer
+ return $data->close
+    if ${*$data}{'net_ftp_eof'};
+
+ # for some reason if we continously open RETR connections and not
+ # read a single byte, then abort them after a while the server will
+ # close our connection, this prevents the unexpected EOF on the
+ # command channel -- GMB
+ if(exists ${*$data}{'net_ftp_bytesread'}
+	&& (${*$data}{'net_ftp_bytesread'} == 0)) {
+   my $buf="";
+   my $timeout = $data->timeout;
+   $data->can_read($timeout) && sysread($data,$buf,1);
+ }
+
+ ${*$data}{'net_ftp_eof'} = 1; # fake
+
+ $ftp->abort; # this will close me
+}
+
+sub _close
+{
+ my $data = shift;
+ my $ftp  = ${*$data}{'net_ftp_cmd'};
+
+ $data->SUPER::close();
+
+ delete ${*$ftp}{'net_ftp_dataconn'}
+    if exists ${*$ftp}{'net_ftp_dataconn'} &&
+        $data == ${*$ftp}{'net_ftp_dataconn'};
+}
+
+sub close
+{
+ my $data = shift;
+ my $ftp  = ${*$data}{'net_ftp_cmd'};
+
+ if(exists ${*$data}{'net_ftp_bytesread'} && !${*$data}{'net_ftp_eof'}) {
+   my $junk;
+   $data->read($junk,1,0);
+   return $data->abort unless ${*$data}{'net_ftp_eof'};
+ }
+
+ $data->_close;
+
+ $ftp->response() == CMD_OK &&
+    $ftp->message =~ /unique file name:\s*(\S*)\s*\)/ &&
+    (${*$ftp}{'net_ftp_unique'} = $1);
+
+ $ftp->status == CMD_OK;
+}
+
+sub _select {
+ my ($data, $timeout, $do_read) = @_;
+ my ($rin,$rout,$win,$wout,$tout,$nfound);
+
+ vec($rin='',fileno($data),1) = 1;
+
+ ($win, $rin) = ($rin, $win) unless $do_read;
+
+ while (1) {
+   $nfound = select($rout=$rin, $wout=$win, undef, $tout=$timeout);
+
+   last if $nfound >= 0;
+   
+   croak "select: $!"
+     unless $!{EINTR};
+ }
+
+ $nfound;
+}
+
+sub can_read
+{
+ _select(@_[0,1],1);
+}
+
+sub can_write
+{
+ _select(@_[0,1],0);
+}
+
+sub cmd
+{
+ my $ftp = shift;
+
+ ${*$ftp}{'net_ftp_cmd'};
+}
+
+sub bytes_read {
+ my $ftp = shift;
+
+ ${*$ftp}{'net_ftp_bytesread'} || 0;
+}
+
+1;
+__END__
+
+=head1 COPYRIGHT
+
+COPYRIGHT
+
+  © 1996-2000 Graham Barr. All rights reserved.
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Net/NNTP.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1122 @@
+# Net::NNTP.pm
+#
+# Copyright (c) 1995-1997 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package Net::NNTP;
+
+use strict;
+use vars qw(@ISA $VERSION $debug);
+use IO::Socket;
+use Net::Cmd;
+use Carp;
+use Time::Local;
+use Net::Config;
+
+$VERSION = "2.22"; # $Id: //depot/libnet/Net/NNTP.pm#18 $
+@ISA     = qw(Net::Cmd IO::Socket::INET);
+
+sub new
+{
+ my $self = shift;
+ my $type = ref($self) || $self;
+ my $host = shift if @_ % 2;
+ my %arg  = @_;
+ my $obj;
+
+ $host ||= $ENV{NNTPSERVER} || $ENV{NEWSHOST};
+
+ my $hosts = defined $host ? [ $host ] : $NetConfig{nntp_hosts};
+
+ @{$hosts} = qw(news)
+	unless @{$hosts};
+
+ my $h;
+ foreach $h (@{$hosts})
+  {
+   $obj = $type->SUPER::new(PeerAddr => ($host = $h), 
+			    PeerPort => $arg{Port} || 'nntp(119)',
+			    Proto    => 'tcp',
+			    Timeout  => defined $arg{Timeout}
+						? $arg{Timeout}
+						: 120
+			   ) and last;
+  }
+
+ return undef
+	unless defined $obj;
+
+ ${*$obj}{'net_nntp_host'} = $host;
+
+ $obj->autoflush(1);
+ $obj->debug(exists $arg{Debug} ? $arg{Debug} : undef);
+
+ unless ($obj->response() == CMD_OK)
+  {
+   $obj->close;
+   return undef;
+  }
+
+ my $c = $obj->code;
+ my @m = $obj->message;
+
+ unless(exists $arg{Reader} && $arg{Reader} == 0) {
+   # if server is INN and we have transfer rights the we are currently
+   # talking to innd not nnrpd
+   if($obj->reader)
+    {
+     # If reader suceeds the we need to consider this code to determine postok
+     $c = $obj->code;
+    }
+   else
+    {
+     # I want to ignore this failure, so restore the previous status.
+     $obj->set_status($c,\@m);
+    }
+ }
+
+ ${*$obj}{'net_nntp_post'} = $c == 200 ? 1 : 0;
+
+ $obj;
+}
+
+sub debug_text
+{
+ my $nntp = shift;
+ my $inout = shift;
+ my $text = shift;
+
+ if((ref($nntp) and $nntp->code == 350 and $text =~ /^(\S+)/)
+    || ($text =~ /^(authinfo\s+pass)/io)) 
+  {
+   $text = "$1 ....\n"
+  }
+
+ $text;
+}
+
+sub postok
+{
+ @_ == 1 or croak 'usage: $nntp->postok()';
+ my $nntp = shift;
+ ${*$nntp}{'net_nntp_post'} || 0;
+}
+
+sub article
+{
+ @_ >= 1 && @_ <= 3 or croak 'usage: $nntp->article( [ MSGID ], [ FH ] )';
+ my $nntp = shift;
+ my @fh;
+
+ @fh = (pop) if @_ == 2 || (@_ && ref($_[0]) || ref(\$_[0]) eq 'GLOB');
+
+ $nntp->_ARTICLE(@_)
+    ? $nntp->read_until_dot(@fh)
+    : undef;
+}
+
+sub articlefh {
+ @_ >= 1 && @_ <= 2 or croak 'usage: $nntp->articlefh( [ MSGID ] )';
+ my $nntp = shift;
+
+ return unless $nntp->_ARTICLE(@_);
+ return $nntp->tied_fh;
+}
+
+sub authinfo
+{
+ @_ == 3 or croak 'usage: $nntp->authinfo( USER, PASS )';
+ my($nntp,$user,$pass) = @_;
+
+ $nntp->_AUTHINFO("USER",$user) == CMD_MORE 
+    && $nntp->_AUTHINFO("PASS",$pass) == CMD_OK;
+}
+
+sub authinfo_simple
+{
+ @_ == 3 or croak 'usage: $nntp->authinfo( USER, PASS )';
+ my($nntp,$user,$pass) = @_;
+
+ $nntp->_AUTHINFO('SIMPLE') == CMD_MORE 
+    && $nntp->command($user,$pass)->response == CMD_OK;
+}
+
+sub body
+{
+ @_ >= 1 && @_ <= 3 or croak 'usage: $nntp->body( [ MSGID ], [ FH ] )';
+ my $nntp = shift;
+ my @fh;
+
+ @fh = (pop) if @_ == 2 || (@_ && ref($_[0]) || ref(\$_[0]) eq 'GLOB');
+
+ $nntp->_BODY(@_)
+    ? $nntp->read_until_dot(@fh)
+    : undef;
+}
+
+sub bodyfh
+{
+ @_ >= 1 && @_ <= 2 or croak 'usage: $nntp->bodyfh( [ MSGID ] )';
+ my $nntp = shift;
+ return unless $nntp->_BODY(@_);
+ return $nntp->tied_fh;
+}
+
+sub head
+{
+ @_ >= 1 && @_ <= 3 or croak 'usage: $nntp->head( [ MSGID ], [ FH ] )';
+ my $nntp = shift;
+ my @fh;
+
+ @fh = (pop) if @_ == 2 || (@_ && ref($_[0]) || ref(\$_[0]) eq 'GLOB');
+
+ $nntp->_HEAD(@_)
+    ? $nntp->read_until_dot(@fh)
+    : undef;
+}
+
+sub headfh
+{
+ @_ >= 1 && @_ <= 2 or croak 'usage: $nntp->headfh( [ MSGID ] )';
+ my $nntp = shift;
+ return unless $nntp->_HEAD(@_);
+ return $nntp->tied_fh;
+}
+
+sub nntpstat
+{
+ @_ == 1 || @_ == 2 or croak 'usage: $nntp->nntpstat( [ MSGID ] )';
+ my $nntp = shift;
+
+ $nntp->_STAT(@_) && $nntp->message =~ /(<[^>]+>)/o
+    ? $1
+    : undef;
+}
+
+
+sub group
+{
+ @_ == 1 || @_ == 2 or croak 'usage: $nntp->group( [ GROUP ] )';
+ my $nntp = shift;
+ my $grp = ${*$nntp}{'net_nntp_group'} || undef;
+
+ return $grp
+    unless(@_ || wantarray);
+
+ my $newgrp = shift;
+
+ return wantarray ? () : undef
+	unless $nntp->_GROUP($newgrp || $grp || "")
+		&& $nntp->message =~ /(\d+)\s+(\d+)\s+(\d+)\s+(\S+)/;
+
+ my($count,$first,$last,$group) = ($1,$2,$3,$4);
+
+ # group may be replied as '(current group)'
+ $group = ${*$nntp}{'net_nntp_group'}
+    if $group =~ /\(/;
+
+ ${*$nntp}{'net_nntp_group'} = $group;
+
+ wantarray
+    ? ($count,$first,$last,$group)
+    : $group;
+}
+
+sub help
+{
+ @_ == 1 or croak 'usage: $nntp->help()';
+ my $nntp = shift;
+
+ $nntp->_HELP
+    ? $nntp->read_until_dot
+    : undef;
+}
+
+sub ihave
+{
+ @_ >= 2 or croak 'usage: $nntp->ihave( MESSAGE-ID [, MESSAGE ])';
+ my $nntp = shift;
+ my $mid = shift;
+
+ $nntp->_IHAVE($mid) && $nntp->datasend(@_)
+    ? @_ == 0 || $nntp->dataend
+    : undef;
+}
+
+sub last
+{
+ @_ == 1 or croak 'usage: $nntp->last()';
+ my $nntp = shift;
+
+ $nntp->_LAST && $nntp->message =~ /(<[^>]+>)/o
+    ? $1
+    : undef;
+}
+
+sub list
+{
+ @_ == 1 or croak 'usage: $nntp->list()';
+ my $nntp = shift;
+
+ $nntp->_LIST
+    ? $nntp->_grouplist
+    : undef;
+}
+
+sub newgroups
+{
+ @_ >= 2 or croak 'usage: $nntp->newgroups( SINCE [, DISTRIBUTIONS ])';
+ my $nntp = shift;
+ my $time = _timestr(shift);
+ my $dist = shift || "";
+
+ $dist = join(",", @{$dist})
+    if ref($dist);
+
+ $nntp->_NEWGROUPS($time,$dist)
+    ? $nntp->_grouplist
+    : undef;
+}
+
+sub newnews
+{
+ @_ >= 2 && @_ <= 4 or
+	croak 'usage: $nntp->newnews( SINCE [, GROUPS [, DISTRIBUTIONS ]])';
+ my $nntp = shift;
+ my $time = _timestr(shift);
+ my $grp  = @_ ? shift : $nntp->group;
+ my $dist = shift || "";
+
+ $grp ||= "*";
+ $grp = join(",", @{$grp})
+    if ref($grp);
+
+ $dist = join(",", @{$dist})
+    if ref($dist);
+
+ $nntp->_NEWNEWS($grp,$time,$dist)
+    ? $nntp->_articlelist
+    : undef;
+}
+
+sub next
+{
+ @_ == 1 or croak 'usage: $nntp->next()';
+ my $nntp = shift;
+
+ $nntp->_NEXT && $nntp->message =~ /(<[^>]+>)/o
+    ? $1
+    : undef;
+}
+
+sub post
+{
+ @_ >= 1 or croak 'usage: $nntp->post( [ MESSAGE ] )';
+ my $nntp = shift;
+
+ $nntp->_POST() && $nntp->datasend(@_)
+    ? @_ == 0 || $nntp->dataend
+    : undef;
+}
+
+sub postfh {
+  my $nntp = shift;
+  return unless $nntp->_POST();
+  return $nntp->tied_fh;
+}
+
+sub quit
+{
+ @_ == 1 or croak 'usage: $nntp->quit()';
+ my $nntp = shift;
+
+ $nntp->_QUIT;
+ $nntp->close;
+}
+
+sub slave
+{
+ @_ == 1 or croak 'usage: $nntp->slave()';
+ my $nntp = shift;
+
+ $nntp->_SLAVE;
+}
+
+##
+## The following methods are not implemented by all servers
+##
+
+sub active
+{
+ @_ == 1 || @_ == 2 or croak 'usage: $nntp->active( [ PATTERN ] )';
+ my $nntp = shift;
+
+ $nntp->_LIST('ACTIVE',@_)
+    ? $nntp->_grouplist
+    : undef;
+}
+
+sub active_times
+{
+ @_ == 1 or croak 'usage: $nntp->active_times()';
+ my $nntp = shift;
+
+ $nntp->_LIST('ACTIVE.TIMES')
+    ? $nntp->_grouplist
+    : undef;
+}
+
+sub distributions
+{
+ @_ == 1 or croak 'usage: $nntp->distributions()';
+ my $nntp = shift;
+
+ $nntp->_LIST('DISTRIBUTIONS')
+    ? $nntp->_description
+    : undef;
+}
+
+sub distribution_patterns
+{
+ @_ == 1 or croak 'usage: $nntp->distributions()';
+ my $nntp = shift;
+
+ my $arr;
+ local $_;
+
+ $nntp->_LIST('DISTRIB.PATS') && ($arr = $nntp->read_until_dot)
+    ? [grep { /^\d/ && (chomp, $_ = [ split /:/ ]) } @$arr]
+    : undef;
+}
+
+sub newsgroups
+{
+ @_ == 1 || @_ == 2 or croak 'usage: $nntp->newsgroups( [ PATTERN ] )';
+ my $nntp = shift;
+
+ $nntp->_LIST('NEWSGROUPS',@_)
+    ? $nntp->_description
+    : undef;
+}
+
+sub overview_fmt
+{
+ @_ == 1 or croak 'usage: $nntp->overview_fmt()';
+ my $nntp = shift;
+
+ $nntp->_LIST('OVERVIEW.FMT')
+     ? $nntp->_articlelist
+     : undef;
+}
+
+sub subscriptions
+{
+ @_ == 1 or croak 'usage: $nntp->subscriptions()';
+ my $nntp = shift;
+
+ $nntp->_LIST('SUBSCRIPTIONS')
+    ? $nntp->_articlelist
+    : undef;
+}
+
+sub listgroup
+{
+ @_ == 1 || @_ == 2 or croak 'usage: $nntp->listgroup( [ GROUP ] )';
+ my $nntp = shift;
+
+ $nntp->_LISTGROUP(@_)
+    ? $nntp->_articlelist
+    : undef;
+}
+
+sub reader
+{
+ @_ == 1 or croak 'usage: $nntp->reader()';
+ my $nntp = shift;
+
+ $nntp->_MODE('READER');
+}
+
+sub xgtitle
+{
+ @_ == 1 || @_ == 2 or croak 'usage: $nntp->xgtitle( [ PATTERN ] )';
+ my $nntp = shift;
+
+ $nntp->_XGTITLE(@_)
+    ? $nntp->_description
+    : undef;
+}
+
+sub xhdr
+{
+ @_ >= 2 && @_ <= 4 or croak 'usage: $nntp->xhdr( HEADER, [ MESSAGE-SPEC ] )';
+ my $nntp = shift;
+ my $hdr = shift;
+ my $arg = _msg_arg(@_);
+
+ $nntp->_XHDR($hdr, $arg)
+	? $nntp->_description
+	: undef;
+}
+
+sub xover
+{
+ @_ == 2 || @_ == 3 or croak 'usage: $nntp->xover( MESSAGE-SPEC )';
+ my $nntp = shift;
+ my $arg = _msg_arg(@_);
+
+ $nntp->_XOVER($arg)
+	? $nntp->_fieldlist
+	: undef;
+}
+
+sub xpat
+{
+ @_ == 4 || @_ == 5 or croak '$nntp->xpat( HEADER, PATTERN, MESSAGE-SPEC )';
+ my $nntp = shift;
+ my $hdr = shift;
+ my $pat = shift;
+ my $arg = _msg_arg(@_);
+
+ $pat = join(" ", @$pat)
+    if ref($pat);
+
+ $nntp->_XPAT($hdr,$arg,$pat)
+	? $nntp->_description
+	: undef;
+}
+
+sub xpath
+{
+ @_ == 2 or croak 'usage: $nntp->xpath( MESSAGE-ID )';
+ my($nntp,$mid) = @_;
+
+ return undef
+	unless $nntp->_XPATH($mid);
+
+ my $m; ($m = $nntp->message) =~ s/^\d+\s+//o;
+ my @p = split /\s+/, $m;
+
+ wantarray ? @p : $p[0];
+}
+
+sub xrover
+{
+ @_ == 2 || @_ == 3 or croak 'usage: $nntp->xrover( MESSAGE-SPEC )';
+ my $nntp = shift;
+ my $arg = _msg_arg(@_);
+
+ $nntp->_XROVER($arg)
+	? $nntp->_description
+	: undef;
+}
+
+sub date
+{
+ @_ == 1 or croak 'usage: $nntp->date()';
+ my $nntp = shift;
+
+ $nntp->_DATE && $nntp->message =~ /(\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)/
+    ? timegm($6,$5,$4,$3,$2-1,$1 - 1900)
+    : undef;
+}
+
+
+##
+## Private subroutines
+##
+
+sub _msg_arg
+{
+ my $spec = shift;
+ my $arg = "";
+
+ if(@_)
+  {
+   carp "Depriciated passing of two message numbers, "
+      . "pass a reference"
+	if $^W;
+   $spec = [ $spec, $_[0] ];
+  }
+
+ if(defined $spec)
+  {
+   if(ref($spec))
+    {
+     $arg = $spec->[0];
+     if(defined $spec->[1])
+      {
+       $arg .= "-"
+	  if $spec->[1] != $spec->[0];
+       $arg .= $spec->[1]
+	  if $spec->[1] > $spec->[0];
+      }
+    }
+   else
+    {
+     $arg = $spec;
+    }
+  }
+
+ $arg;
+}
+
+sub _timestr
+{
+ my $time = shift;
+ my @g = reverse((gmtime($time))[0..5]);
+ $g[1] += 1;
+ $g[0] %= 100;
+ sprintf "%02d%02d%02d %02d%02d%02d GMT", @g;
+}
+
+sub _grouplist
+{
+ my $nntp = shift;
+ my $arr = $nntp->read_until_dot or
+    return undef;
+
+ my $hash = {};
+ my $ln;
+
+ foreach $ln (@$arr)
+  {
+   my @a = split(/[\s\n]+/,$ln);
+   $hash->{$a[0]} = [ @a[1,2,3] ];
+  }
+
+ $hash;
+}
+
+sub _fieldlist
+{
+ my $nntp = shift;
+ my $arr = $nntp->read_until_dot or
+    return undef;
+
+ my $hash = {};
+ my $ln;
+
+ foreach $ln (@$arr)
+  {
+   my @a = split(/[\t\n]/,$ln);
+   my $m = shift @a;
+   $hash->{$m} = [ @a ];
+  }
+
+ $hash;
+}
+
+sub _articlelist
+{
+ my $nntp = shift;
+ my $arr = $nntp->read_until_dot;
+
+ chomp(@$arr)
+    if $arr;
+
+ $arr;
+}
+
+sub _description
+{
+ my $nntp = shift;
+ my $arr = $nntp->read_until_dot or
+    return undef;
+
+ my $hash = {};
+ my $ln;
+
+ foreach $ln (@$arr)
+  {
+   chomp($ln);
+
+   $hash->{$1} = $ln
+    if $ln =~ s/^\s*(\S+)\s*//o;
+  }
+
+ $hash;
+
+}
+
+##
+## The commands
+##
+
+sub _ARTICLE   { shift->command('ARTICLE',@_)->response == CMD_OK }
+sub _AUTHINFO  { shift->command('AUTHINFO',@_)->response }
+sub _BODY      { shift->command('BODY',@_)->response == CMD_OK }
+sub _DATE      { shift->command('DATE')->response == CMD_INFO }
+sub _GROUP     { shift->command('GROUP',@_)->response == CMD_OK }
+sub _HEAD      { shift->command('HEAD',@_)->response == CMD_OK }
+sub _HELP      { shift->command('HELP',@_)->response == CMD_INFO }
+sub _IHAVE     { shift->command('IHAVE',@_)->response == CMD_MORE }
+sub _LAST      { shift->command('LAST')->response == CMD_OK }
+sub _LIST      { shift->command('LIST',@_)->response == CMD_OK }
+sub _LISTGROUP { shift->command('LISTGROUP',@_)->response == CMD_OK }
+sub _NEWGROUPS { shift->command('NEWGROUPS',@_)->response == CMD_OK }
+sub _NEWNEWS   { shift->command('NEWNEWS',@_)->response == CMD_OK }
+sub _NEXT      { shift->command('NEXT')->response == CMD_OK }
+sub _POST      { shift->command('POST',@_)->response == CMD_MORE }
+sub _QUIT      { shift->command('QUIT',@_)->response == CMD_OK }
+sub _SLAVE     { shift->command('SLAVE',@_)->response == CMD_OK }
+sub _STAT      { shift->command('STAT',@_)->response == CMD_OK }
+sub _MODE      { shift->command('MODE',@_)->response == CMD_OK }
+sub _XGTITLE   { shift->command('XGTITLE',@_)->response == CMD_OK }
+sub _XHDR      { shift->command('XHDR',@_)->response == CMD_OK }
+sub _XPAT      { shift->command('XPAT',@_)->response == CMD_OK }
+sub _XPATH     { shift->command('XPATH',@_)->response == CMD_OK }
+sub _XOVER     { shift->command('XOVER',@_)->response == CMD_OK }
+sub _XROVER    { shift->command('XROVER',@_)->response == CMD_OK }
+sub _XTHREAD   { shift->unsupported }
+sub _XSEARCH   { shift->unsupported }
+sub _XINDEX    { shift->unsupported }
+
+##
+## IO/perl methods
+##
+
+sub DESTROY
+{
+ my $nntp = shift;
+ defined(fileno($nntp)) && $nntp->quit
+}
+
+
+1;
+
+__END__
+
+=head1 NAME
+
+Net::NNTP - NNTP Client class
+
+=head1 SYNOPSIS
+
+    use Net::NNTP;
+
+    $nntp = Net::NNTP->new("some.host.name");
+    $nntp->quit;
+
+=head1 DESCRIPTION
+
+C<Net::NNTP> is a class implementing a simple NNTP client in Perl as described
+in RFC977. C<Net::NNTP> inherits its communication methods from C<Net::Cmd>
+
+=head1 CONSTRUCTOR
+
+=over 4
+
+=item new ( [ HOST ] [, OPTIONS ])
+
+This is the constructor for a new Net::NNTP object. C<HOST> is the
+name of the remote host to which a NNTP connection is required. If not
+given two environment variables are checked, first C<NNTPSERVER> then
+C<NEWSHOST>, then C<Net::Config> is checked, and if a host is not found
+then C<news> is used.
+
+C<OPTIONS> are passed in a hash like fashion, using key and value pairs.
+Possible options are:
+
+B<Timeout> - Maximum time, in seconds, to wait for a response from the
+NNTP server, a value of zero will cause all IO operations to block.
+(default: 120)
+
+B<Debug> - Enable the printing of debugging information to STDERR
+
+B<Reader> - If the remote server is INN then initially the connection
+will be to nnrpd, by default C<Net::NNTP> will issue a C<MODE READER> command
+so that the remote server becomes innd. If the C<Reader> option is given
+with a value of zero, then this command will not be sent and the
+connection will be left talking to nnrpd.
+
+=back
+
+=head1 METHODS
+
+Unless otherwise stated all methods return either a I<true> or I<false>
+value, with I<true> meaning that the operation was a success. When a method
+states that it returns a value, failure will be returned as I<undef> or an
+empty list.
+
+=over 4
+
+=item article ( [ MSGID|MSGNUM ], [FH] )
+
+Retrieve the header, a blank line, then the body (text) of the
+specified article. 
+
+If C<FH> is specified then it is expected to be a valid filehandle
+and the result will be printed to it, on success a true value will be
+returned. If C<FH> is not specified then the return value, on success,
+will be a reference to an array containg the article requested, each
+entry in the array will contain one line of the article.
+
+If no arguments are passed then the current article in the currently
+selected newsgroup is fetched.
+
+C<MSGNUM> is a numeric id of an article in the current newsgroup, and
+will change the current article pointer.  C<MSGID> is the message id of
+an article as shown in that article's header.  It is anticipated that the
+client will obtain the C<MSGID> from a list provided by the C<newnews>
+command, from references contained within another article, or from the
+message-id provided in the response to some other commands.
+
+If there is an error then C<undef> will be returned.
+
+=item body ( [ MSGID|MSGNUM ], [FH] )
+
+Like C<article> but only fetches the body of the article.
+
+=item head ( [ MSGID|MSGNUM ], [FH] )
+
+Like C<article> but only fetches the headers for the article.
+
+=item articlefh ( [ MSGID|MSGNUM ] )
+
+=item bodyfh ( [ MSGID|MSGNUM ] )
+
+=item headfh ( [ MSGID|MSGNUM ] )
+
+These are similar to article(), body() and head(), but rather than
+returning the requested data directly, they return a tied filehandle
+from which to read the article.
+
+=item nntpstat ( [ MSGID|MSGNUM ] )
+
+The C<nntpstat> command is similar to the C<article> command except that no
+text is returned.  When selecting by message number within a group,
+the C<nntpstat> command serves to set the "current article pointer" without
+sending text.
+
+Using the C<nntpstat> command to
+select by message-id is valid but of questionable value, since a
+selection by message-id does B<not> alter the "current article pointer".
+
+Returns the message-id of the "current article".
+
+=item group ( [ GROUP ] )
+
+Set and/or get the current group. If C<GROUP> is not given then information
+is returned on the current group.
+
+In a scalar context it returns the group name.
+
+In an array context the return value is a list containing, the number
+of articles in the group, the number of the first article, the number
+of the last article and the group name.
+
+=item ihave ( MSGID [, MESSAGE ])
+
+The C<ihave> command informs the server that the client has an article
+whose id is C<MSGID>.  If the server desires a copy of that
+article, and C<MESSAGE> has been given the it will be sent.
+
+Returns I<true> if the server desires the article and C<MESSAGE> was
+successfully sent,if specified.
+
+If C<MESSAGE> is not specified then the message must be sent using the
+C<datasend> and C<dataend> methods from L<Net::Cmd>
+
+C<MESSAGE> can be either an array of lines or a reference to an array.
+
+=item last ()
+
+Set the "current article pointer" to the previous article in the current
+newsgroup.
+
+Returns the message-id of the article.
+
+=item date ()
+
+Returns the date on the remote server. This date will be in a UNIX time
+format (seconds since 1970)
+
+=item postok ()
+
+C<postok> will return I<true> if the servers initial response indicated
+that it will allow posting.
+
+=item authinfo ( USER, PASS )
+
+=item list ()
+
+Obtain information about all the active newsgroups. The results is a reference
+to a hash where the key is a group name and each value is a reference to an
+array. The elements in this array are:- the last article number in the group,
+the first article number in the group and any information flags about the group.
+
+=item newgroups ( SINCE [, DISTRIBUTIONS ])
+
+C<SINCE> is a time value and C<DISTRIBUTIONS> is either a distribution
+pattern or a reference to a list of distribution patterns.
+The result is the same as C<list>, but the
+groups return will be limited to those created after C<SINCE> and, if
+specified, in one of the distribution areas in C<DISTRIBUTIONS>. 
+
+=item newnews ( SINCE [, GROUPS [, DISTRIBUTIONS ]])
+
+C<SINCE> is a time value. C<GROUPS> is either a group pattern or a reference
+to a list of group patterns. C<DISTRIBUTIONS> is either a distribution
+pattern or a reference to a list of distribution patterns.
+
+Returns a reference to a list which contains the message-ids of all news posted
+after C<SINCE>, that are in a groups which matched C<GROUPS> and a
+distribution which matches C<DISTRIBUTIONS>.
+
+=item next ()
+
+Set the "current article pointer" to the next article in the current
+newsgroup.
+
+Returns the message-id of the article.
+
+=item post ( [ MESSAGE ] )
+
+Post a new article to the news server. If C<MESSAGE> is specified and posting
+is allowed then the message will be sent.
+
+If C<MESSAGE> is not specified then the message must be sent using the
+C<datasend> and C<dataend> methods from L<Net::Cmd>
+
+C<MESSAGE> can be either an array of lines or a reference to an array.
+
+The message, either sent via C<datasend> or as the C<MESSAGE>
+parameter, must be in the format as described by RFC822 and must
+contain From:, Newsgroups: and Subject: headers.
+
+=item postfh ()
+
+Post a new article to the news server using a tied filehandle.  If
+posting is allowed, this method will return a tied filehandle that you
+can print() the contents of the article to be posted.  You must
+explicitly close() the filehandle when you are finished posting the
+article, and the return value from the close() call will indicate
+whether the message was successfully posted.
+
+=item slave ()
+
+Tell the remote server that I am not a user client, but probably another
+news server.
+
+=item quit ()
+
+Quit the remote server and close the socket connection.
+
+=back
+
+=head2 Extension methods
+
+These methods use commands that are not part of the RFC977 documentation. Some
+servers may not support all of them.
+
+=over 4
+
+=item newsgroups ( [ PATTERN ] )
+
+Returns a reference to a hash where the keys are all the group names which
+match C<PATTERN>, or all of the groups if no pattern is specified, and
+each value contains the description text for the group.
+
+=item distributions ()
+
+Returns a reference to a hash where the keys are all the possible
+distribution names and the values are the distribution descriptions.
+
+=item subscriptions ()
+
+Returns a reference to a list which contains a list of groups which
+are recommended for a new user to subscribe to.
+
+=item overview_fmt ()
+
+Returns a reference to an array which contain the names of the fields returned
+by C<xover>.
+
+=item active_times ()
+
+Returns a reference to a hash where the keys are the group names and each
+value is a reference to an array containing the time the groups was created
+and an identifier, possibly an Email address, of the creator.
+
+=item active ( [ PATTERN ] )
+
+Similar to C<list> but only active groups that match the pattern are returned.
+C<PATTERN> can be a group pattern.
+
+=item xgtitle ( PATTERN )
+
+Returns a reference to a hash where the keys are all the group names which
+match C<PATTERN> and each value is the description text for the group.
+
+=item xhdr ( HEADER, MESSAGE-SPEC )
+
+Obtain the header field C<HEADER> for all the messages specified. 
+
+The return value will be a reference
+to a hash where the keys are the message numbers and each value contains
+the text of the requested header for that message.
+
+=item xover ( MESSAGE-SPEC )
+
+The return value will be a reference
+to a hash where the keys are the message numbers and each value contains
+a reference to an array which contains the overview fields for that
+message.
+
+The names of the fields can be obtained by calling C<overview_fmt>.
+
+=item xpath ( MESSAGE-ID )
+
+Returns the path name to the file on the server which contains the specified
+message.
+
+=item xpat ( HEADER, PATTERN, MESSAGE-SPEC)
+
+The result is the same as C<xhdr> except the is will be restricted to
+headers where the text of the header matches C<PATTERN>
+
+=item xrover
+
+The XROVER command returns reference information for the article(s)
+specified.
+
+Returns a reference to a HASH where the keys are the message numbers and the
+values are the References: lines from the articles
+
+=item listgroup ( [ GROUP ] )
+
+Returns a reference to a list of all the active messages in C<GROUP>, or
+the current group if C<GROUP> is not specified.
+
+=item reader
+
+Tell the server that you are a reader and not another server.
+
+This is required by some servers. For example if you are connecting to
+an INN server and you have transfer permission your connection will
+be connected to the transfer daemon, not the NNTP daemon. Issuing
+this command will cause the transfer daemon to hand over control
+to the NNTP daemon.
+
+Some servers do not understand this command, but issuing it and ignoring
+the response is harmless.
+
+=back
+
+=head1 UNSUPPORTED
+
+The following NNTP command are unsupported by the package, and there are
+no plans to do so.
+
+    AUTHINFO GENERIC
+    XTHREAD
+    XSEARCH
+    XINDEX
+
+=head1 DEFINITIONS
+
+=over 4
+
+=item MESSAGE-SPEC
+
+C<MESSAGE-SPEC> is either a single message-id, a single message number, or
+a reference to a list of two message numbers.
+
+If C<MESSAGE-SPEC> is a reference to a list of two message numbers and the
+second number in a range is less than or equal to the first then the range
+represents all messages in the group after the first message number.
+
+B<NOTE> For compatibility reasons only with earlier versions of Net::NNTP
+a message spec can be passed as a list of two numbers, this is deprecated
+and a reference to the list should now be passed
+
+=item PATTERN
+
+The C<NNTP> protocol uses the C<WILDMAT> format for patterns.
+The WILDMAT format was first developed by Rich Salz based on
+the format used in the UNIX "find" command to articulate
+file names. It was developed to provide a uniform mechanism
+for matching patterns in the same manner that the UNIX shell
+matches filenames.
+
+Patterns are implicitly anchored at the
+beginning and end of each string when testing for a match.
+
+There are five pattern matching operations other than a strict
+one-to-one match between the pattern and the source to be
+checked for a match.
+
+The first is an asterisk C<*> to match any sequence of zero or more
+characters.
+
+The second is a question mark C<?> to match any single character. The
+third specifies a specific set of characters.
+
+The set is specified as a list of characters, or as a range of characters
+where the beginning and end of the range are separated by a minus (or dash)
+character, or as any combination of lists and ranges. The dash can
+also be included in the set as a character it if is the beginning
+or end of the set. This set is enclosed in square brackets. The
+close square bracket C<]> may be used in a set if it is the first
+character in the set.
+
+The fourth operation is the same as the
+logical not of the third operation and is specified the same
+way as the third with the addition of a caret character C<^> at
+the beginning of the test string just inside the open square
+bracket.
+
+The final operation uses the backslash character to
+invalidate the special meaning of an open square bracket C<[>,
+the asterisk, backslash or the question mark. Two backslashes in
+sequence will result in the evaluation of the backslash as a
+character with no special meaning.
+
+=over 4
+
+=item Examples
+
+=item C<[^]-]>
+
+matches any single character other than a close square
+bracket or a minus sign/dash.
+
+=item C<*bdc>
+
+matches any string that ends with the string "bdc"
+including the string "bdc" (without quotes).
+
+=item C<[0-9a-zA-Z]>
+
+matches any single printable alphanumeric ASCII character.
+
+=item C<a??d>
+
+matches any four character string which begins
+with a and ends with d.
+
+=back
+
+=back
+
+=head1 SEE ALSO
+
+L<Net::Cmd>
+
+=head1 AUTHOR
+
+Graham Barr <gbarr@pobox.com>
+
+=head1 COPYRIGHT
+
+Copyright (c) 1995-1997 Graham Barr. All rights reserved.
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=for html <hr>
+
+I<$Id: //depot/libnet/Net/NNTP.pm#18 $>
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Net/Netrc.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,340 @@
+# Net::Netrc.pm
+#
+# Copyright (c) 1995-1998 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package Net::Netrc;
+
+use Carp;
+use strict;
+use FileHandle;
+use vars qw($VERSION);
+
+$VERSION = "2.12"; # $Id: //depot/libnet/Net/Netrc.pm#13 $
+
+my %netrc = ();
+
+sub _readrc
+{
+ my $host = shift;
+ my($home,$file);
+
+ if($^O eq "MacOS") {
+   $home = $ENV{HOME} || `pwd`;
+   chomp($home);
+   $file = ($home =~ /:$/ ? $home . "netrc" : $home . ":netrc");
+ } else {
+   # Some OS's don't have `getpwuid', so we default to $ENV{HOME}
+   $home = eval { (getpwuid($>))[7] } || $ENV{HOME};
+   $home ||= $ENV{HOMEDRIVE} . ($ENV{HOMEPATH}||'') if defined $ENV{HOMEDRIVE};
+   $file = $home . "/.netrc";
+ }
+
+ my($login,$pass,$acct) = (undef,undef,undef);
+ my $fh;
+ local $_;
+
+ $netrc{default} = undef;
+
+ # OS/2 and Win32 do not handle stat in a way compatable with this check :-(
+ unless($^O eq 'os2'
+     || $^O eq 'MSWin32'
+     || $^O eq 'MacOS'
+     || $^O =~ /^cygwin/)
+  { 
+   my @stat = stat($file);
+
+   if(@stat)
+    {
+     if($stat[2] & 077)
+      {
+       carp "Bad permissions: $file";
+       return;
+      }
+     if($stat[4] != $<)
+      {
+       carp "Not owner: $file";
+       return;
+      }
+    }
+  }
+
+ if($fh = FileHandle->new($file,"r"))
+  {
+   my($mach,$macdef,$tok,@tok) = (0,0);
+
+   while(<$fh>)
+    {
+     undef $macdef if /\A\n\Z/;
+
+     if($macdef)
+      {
+       push(@$macdef,$_);
+       next;
+      }
+
+     s/^\s*//;
+     chomp;
+
+     while(length && s/^("((?:[^"]+|\\.)*)"|((?:[^\\\s]+|\\.)*))\s*//) {
+       (my $tok = $+) =~ s/\\(.)/$1/g;
+       push(@tok, $tok);
+     }
+
+TOKEN:
+     while(@tok)
+      {
+       if($tok[0] eq "default")
+        {
+         shift(@tok);
+         $mach = bless {};
+   	 $netrc{default} = [$mach];
+
+         next TOKEN;
+        }
+
+       last TOKEN
+            unless @tok > 1;
+
+       $tok = shift(@tok);
+
+       if($tok eq "machine")
+        {
+         my $host = shift @tok;
+         $mach = bless {machine => $host};
+
+         $netrc{$host} = []
+            unless exists($netrc{$host});
+         push(@{$netrc{$host}}, $mach);
+        }
+       elsif($tok =~ /^(login|password|account)$/)
+        {
+         next TOKEN unless $mach;
+         my $value = shift @tok;
+         # Following line added by rmerrell to remove '/' escape char in .netrc
+         $value =~ s/\/\\/\\/g;
+         $mach->{$1} = $value;
+        }
+       elsif($tok eq "macdef")
+        {
+         next TOKEN unless $mach;
+         my $value = shift @tok;
+         $mach->{macdef} = {}
+            unless exists $mach->{macdef};
+         $macdef = $mach->{machdef}{$value} = [];
+        }
+      }
+    }
+   $fh->close();
+  }
+}
+
+sub lookup
+{
+ my($pkg,$mach,$login) = @_;
+
+ _readrc()
+    unless exists $netrc{default};
+
+ $mach ||= 'default';
+ undef $login
+    if $mach eq 'default';
+
+ if(exists $netrc{$mach})
+  {
+   if(defined $login)
+    {
+     my $m;
+     foreach $m (@{$netrc{$mach}})
+      {
+       return $m
+            if(exists $m->{login} && $m->{login} eq $login);
+      }
+     return undef;
+    }
+   return $netrc{$mach}->[0]
+  }
+
+ return $netrc{default}->[0]
+    if defined $netrc{default};
+
+ return undef;
+}
+
+sub login
+{
+ my $me = shift;
+
+ exists $me->{login}
+    ? $me->{login}
+    : undef;
+}
+
+sub account
+{
+ my $me = shift;
+
+ exists $me->{account}
+    ? $me->{account}
+    : undef;
+}
+
+sub password
+{
+ my $me = shift;
+
+ exists $me->{password}
+    ? $me->{password}
+    : undef;
+}
+
+sub lpa
+{
+ my $me = shift;
+ ($me->login, $me->password, $me->account);
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Net::Netrc - OO interface to users netrc file
+
+=head1 SYNOPSIS
+
+    use Net::Netrc;
+
+    $mach = Net::Netrc->lookup('some.machine');
+    $login = $mach->login;
+    ($login, $password, $account) = $mach->lpa;
+
+=head1 DESCRIPTION
+
+C<Net::Netrc> is a class implementing a simple interface to the .netrc file
+used as by the ftp program.
+
+C<Net::Netrc> also implements security checks just like the ftp program,
+these checks are, first that the .netrc file must be owned by the user and 
+second the ownership permissions should be such that only the owner has
+read and write access. If these conditions are not met then a warning is
+output and the .netrc file is not read.
+
+=head1 THE .netrc FILE
+
+The .netrc file contains login and initialization information used by the
+auto-login process.  It resides in the user's home directory.  The following
+tokens are recognized; they may be separated by spaces, tabs, or new-lines:
+
+=over 4
+
+=item machine name
+
+Identify a remote machine name. The auto-login process searches
+the .netrc file for a machine token that matches the remote machine
+specified.  Once a match is made, the subsequent .netrc tokens
+are processed, stopping when the end of file is reached or an-
+other machine or a default token is encountered.
+
+=item default
+
+This is the same as machine name except that default matches
+any name.  There can be only one default token, and it must be
+after all machine tokens.  This is normally used as:
+
+    default login anonymous password user@site
+
+thereby giving the user automatic anonymous login to machines
+not specified in .netrc.
+
+=item login name
+
+Identify a user on the remote machine.  If this token is present,
+the auto-login process will initiate a login using the
+specified name.
+
+=item password string
+
+Supply a password.  If this token is present, the auto-login
+process will supply the specified string if the remote server
+requires a password as part of the login process.
+
+=item account string
+
+Supply an additional account password.  If this token is present,
+the auto-login process will supply the specified string
+if the remote server requires an additional account password.
+
+=item macdef name
+
+Define a macro. C<Net::Netrc> only parses this field to be compatible
+with I<ftp>.
+
+=back
+
+=head1 CONSTRUCTOR
+
+The constructor for a C<Net::Netrc> object is not called new as it does not
+really create a new object. But instead is called C<lookup> as this is
+essentially what it does.
+
+=over 4
+
+=item lookup ( MACHINE [, LOGIN ])
+
+Lookup and return a reference to the entry for C<MACHINE>. If C<LOGIN> is given
+then the entry returned will have the given login. If C<LOGIN> is not given then
+the first entry in the .netrc file for C<MACHINE> will be returned.
+
+If a matching entry cannot be found, and a default entry exists, then a
+reference to the default entry is returned.
+
+If there is no matching entry found and there is no default defined, or
+no .netrc file is found, then C<undef> is returned.
+
+=back
+
+=head1 METHODS
+
+=over 4
+
+=item login ()
+
+Return the login id for the netrc entry
+
+=item password ()
+
+Return the password for the netrc entry
+
+=item account ()
+
+Return the account information for the netrc entry
+
+=item lpa ()
+
+Return a list of login, password and account information fir the netrc entry
+
+=back
+
+=head1 AUTHOR
+
+Graham Barr <gbarr@pobox.com>
+
+=head1 SEE ALSO
+
+L<Net::Netrc>
+L<Net::Cmd>
+
+=head1 COPYRIGHT
+
+Copyright (c) 1995-1998 Graham Barr. All rights reserved.
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=for html <hr>
+
+$Id: //depot/libnet/Net/Netrc.pm#13 $
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Net/PH.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,784 @@
+#
+# Copyright (c) 1995-1997 Graham Barr <gbarr@pobox.com> and
+# Alex Hristov <hristov@slb.com>. All rights reserved. This program is free
+# software; you can redistribute it and/or modify it under the same terms
+# as Perl itself.
+
+package Net::PH;
+
+require 5.001;
+
+use strict;
+use vars qw(@ISA $VERSION);
+use Carp;
+
+use Socket 1.3;
+use IO::Socket;
+use Net::Cmd;
+use Net::Config;
+
+$VERSION = "2.20"; # $Id: //depot/libnet/Net/PH.pm#7$
+@ISA     = qw(Exporter Net::Cmd IO::Socket::INET);
+
+sub new
+{
+ my $pkg  = shift;
+ my $host = shift if @_ % 2;
+ my %arg  = @_; 
+ my $hosts = defined $host ? [ $host ] : $NetConfig{ph_hosts};
+ my $ph;
+
+ my $h;
+ foreach $h (@{$hosts})
+  {
+   $ph = $pkg->SUPER::new(PeerAddr => ($host = $h), 
+			  PeerPort => $arg{Port} || 'csnet-ns(105)',
+			  Proto    => 'tcp',
+			  Timeout  => defined $arg{Timeout}
+					? $arg{Timeout}
+					: 120
+			 ) and last;
+  }
+
+ return undef
+	unless defined $ph;
+
+ ${*$ph}{'net_ph_host'} = $host;
+
+ $ph->autoflush(1);
+
+ $ph->debug(exists $arg{Debug} ? $arg{Debug} : undef);
+
+ $ph;
+}
+
+sub status
+{
+ my $ph = shift;
+
+ $ph->command('status')->response;
+ $ph->code;
+}
+
+sub login
+{
+ my $ph = shift;
+ my($user,$pass,$encrypted) = @_;
+ my $resp;
+
+ $resp = $ph->command("login",$user)->response;
+
+ if(defined($pass) && $resp == CMD_MORE)
+  {
+   if($encrypted)
+    {
+     my $challenge_str = $ph->message;
+     chomp($challenge_str);
+     Net::PH::crypt::crypt_start($pass);
+     my $cryptstr = Net::PH::crypt::encryptit($challenge_str);
+
+     $ph->command("answer", $cryptstr);
+    }
+   else
+    {
+     $ph->command("clear", $pass);
+    }
+   $resp = $ph->response;
+  }
+
+ $resp == CMD_OK;
+}
+
+sub logout
+{
+ my $ph = shift;
+
+ $ph->command("logout")->response == CMD_OK;
+}
+
+sub id
+{
+ my $ph = shift;
+ my $id = @_ ? shift : $<;
+
+ $ph->command("id",$id)->response == CMD_OK;
+}
+
+sub siteinfo
+{
+ my $ph = shift;
+
+ $ph->command("siteinfo");
+
+ my $ln;
+ my %resp;
+ my $cur_num = 0;
+
+ while(defined($ln = $ph->getline))
+  {
+   $ph->debug_print(0,$ln)
+     if ($ph->debug & 2);
+   chomp($ln);
+   my($code,$num,$tag,$data);
+
+   if($ln =~ /^-(\d+):(\d+):(?:\s*([^:]+):)?\s*(.*)/o)
+    {
+     ($code,$num,$tag,$data) = ($1, $2, $3 || "",$4);
+     $resp{$tag} = bless [$code, $num, $tag, $data], "Net::PH::Result";
+    }
+   else
+    {
+     $ph->set_status($ph->parse_response($ln));
+     return \%resp;
+    }
+  }
+
+ return undef;
+}
+
+sub query
+{
+ my $ph = shift;
+ my $search = shift;
+
+ my($k,$v);
+
+ my @args = ('query', _arg_hash($search));
+
+ push(@args,'return',_arg_list( shift ))
+	if @_;
+
+ unless($ph->command(@args)->response == CMD_INFO)
+  {
+   return $ph->code == 501
+	? []
+	: undef;
+  }
+
+ my $ln;
+ my @resp;
+ my $cur_num = 0;
+
+ my($last_tag);
+
+ while(defined($ln = $ph->getline))
+  {
+   $ph->debug_print(0,$ln)
+     if ($ph->debug & 2);
+   chomp($ln);
+   my($code,$idx,$num,$tag,$data);
+
+   if($ln =~ /^-(\d+):(\d+):\s*([^:]*):\s*(.*)/o)
+    {
+     ($code,$idx,$tag,$data) = ($1,$2,$3,$4);
+     my $num = $idx - 1;
+
+     $resp[$num] ||= {};
+
+     $tag = $last_tag
+	unless(length($tag));
+
+     $last_tag = $tag;
+
+     if(exists($resp[$num]->{$tag}))
+      {
+       $resp[$num]->{$tag}->[3] .= "\n" . $data;
+      }
+     else
+      {
+       $resp[$num]->{$tag} = bless [$code, $idx, $tag, $data], "Net::PH::Result";
+      }
+    }
+   else
+    {
+     $ph->set_status($ph->parse_response($ln));
+     return \@resp;
+    }
+  }
+
+ return undef;
+}
+
+sub change
+{
+ my $ph = shift;
+ my $search = shift;
+ my $make = shift;
+
+ $ph->command(
+	"change", _arg_hash($search),
+	"make",   _arg_hash($make)
+ )->response == CMD_OK;
+}
+
+sub _arg_hash
+{
+ my $hash = shift;
+
+ return $hash
+	unless(ref($hash));
+
+ my($k,$v);
+ my @r;
+
+ while(($k,$v) = each %$hash)
+  {
+   my $a = $v;
+   $a =~ s/\n/\\n/sog;
+   $a =~ s/\t/\\t/sog;
+   $a = '"' . $a . '"'
+	if $a =~ /\W/;
+   $a = '""'
+	unless length $a;
+
+   push(@r, "$k=$a");   
+  }
+ join(" ", @r);
+}
+
+sub _arg_list
+{
+ my $arr = shift;
+
+ return $arr
+	unless(ref($arr));
+
+ my $v;
+ my @r;
+
+ foreach $v (@$arr)
+  {
+   my $a = $v;
+   $a =~ s/\n/\\n/sog;
+   $a =~ s/\t/\\t/sog;
+   $a = '"' . $a . '"'
+	if $a =~ /\W/;
+   push(@r, $a);   
+  }
+
+ join(" ",@r);
+}
+
+sub add
+{
+ my $ph = shift;
+ my $arg = @_ > 1 ? { @_ } : shift;
+
+ $ph->command('add', _arg_hash($arg))->response == CMD_OK;
+}
+
+sub delete
+{
+ my $ph = shift;
+ my $arg = @_ > 1 ? { @_ } : shift;
+
+ $ph->command('delete', _arg_hash($arg))->response == CMD_OK;
+}
+
+sub force
+{
+ my $ph = shift; 
+ my $search = shift;
+ my $force = shift;
+
+ $ph->command(
+	"change", _arg_hash($search),
+	"force",  _arg_hash($force)
+ )->response == CMD_OK;
+}
+
+
+sub fields
+{
+ my $ph = shift;
+
+ $ph->command("fields", _arg_list(\@_));
+
+ my $ln;
+ my %resp;
+ my $cur_num = 0;
+ my @tags = ();
+ 
+ while(defined($ln = $ph->getline))
+  {
+   $ph->debug_print(0,$ln)
+     if ($ph->debug & 2);
+   chomp($ln);
+
+   my($code,$num,$tag,$data,$last_tag);
+
+   if($ln =~ /^-(\d+):(\d+):\s*([^:]*):\s*(.*)/o)
+    {
+     ($code,$num,$tag,$data) = ($1,$2,$3,$4);
+
+     $tag = $last_tag
+	unless(length($tag));
+
+     $last_tag = $tag;
+
+     if(exists $resp{$tag})
+      {
+       $resp{$tag}->[3] .= "\n" . $data;
+      }
+     else
+      {
+       $resp{$tag} = bless [$code, $num, $tag, $data], "Net::PH::Result";
+       push @tags, $tag;
+      }
+    }
+   else
+    {
+     $ph->set_status($ph->parse_response($ln));
+     return wantarray ? (\%resp, \@tags) : \%resp;
+    }
+  }
+
+ return;
+}
+
+sub quit
+{
+ my $ph = shift;
+
+ $ph->close
+	if $ph->command("quit")->response == CMD_OK;
+}
+
+##
+## Net::Cmd overrides
+##
+
+sub parse_response
+{
+ return ()
+    unless $_[1] =~ s/^(-?)(\d\d\d):?//o;
+ ($2, $1 eq "-");
+}
+
+sub debug_text { $_[2] =~ /^(clear)/i ? "$1 ....\n" : $_[2]; }
+
+package Net::PH::Result;
+
+sub code  { shift->[0] }
+sub value { shift->[1] }
+sub field { shift->[2] }
+sub text  { shift->[3] }
+
+package Net::PH::crypt;
+
+#  The code in this package is based upon 'cryptit.c', Copyright (C) 1988 by
+#  Steven Dorner, and Paul Pomes, and the University of Illinois Board
+#  of Trustees, and by CSNET.
+
+use integer;
+use strict;
+ 
+sub ROTORSZ () { 256 }
+sub MASK () { 255 }
+
+my(@t1,@t2,@t3,$n1,$n2);
+
+sub crypt_start {
+    my $pass = shift;
+    $n1 = 0;
+    $n2 = 0;
+    crypt_init($pass);
+}
+
+sub crypt_init {
+    my $pw = shift;
+    my $i;
+
+    @t2 = @t3 = (0) x ROTORSZ;
+
+    my $buf = crypt($pw,$pw);
+    return -1 unless length($buf) > 0;
+    $buf = substr($buf . "\0" x 13,0,13);
+    my @buf = map { ord $_ } split(//, $buf);
+
+
+    my $seed = 123;
+    for($i = 0 ; $i < 13 ; $i++) {
+	$seed = $seed * $buf[$i] + $i;
+    }
+    @t1 = (0 .. ROTORSZ-1);
+    
+    for($i = 0 ; $i < ROTORSZ ; $i++) {
+	$seed = 5 * $seed + $buf[$i % 13];
+	my $random = $seed % 65521;
+	my $k = ROTORSZ - 1 - $i;
+	my $ic = ($random & MASK) % ($k + 1);
+	$random >>= 8;
+	@t1[$k,$ic] = @t1[$ic,$k];
+	next if $t3[$k] != 0;
+	$ic = ($random & MASK) % $k;
+	while($t3[$ic] != 0) {
+	    $ic = ($ic + 1) % $k;
+	}
+	$t3[$k] = $ic;
+	$t3[$ic] = $k;
+    }
+    for($i = 0 ; $i < ROTORSZ ; $i++) {
+	$t2[$t1[$i] & MASK] = $i
+    }
+}
+
+sub encode {
+    my $sp = shift;
+    my $ch;
+    my $n = scalar(@$sp);
+    my @out = ($n);
+    my $i;
+
+    for($i = 0 ; $i < $n ; ) {
+	my($f0,$f1,$f2) = splice(@$sp,0,3);
+	push(@out,
+	    $f0 >> 2,
+	    ($f0 << 4) & 060 | ($f1 >> 4) & 017,
+	    ($f1 << 2) & 074 | ($f2 >> 6) & 03,
+	    $f2 & 077);
+	$i += 3;
+   }
+   join("", map { chr((($_ & 077) + 35) & 0xff) } @out);  # ord('#') == 35
+}
+
+sub encryptit {
+    my $from = shift;
+    my @from = map { ord $_ } split(//, $from);
+    my @sp = ();
+    my $ch;
+    while(defined($ch = shift @from)) {
+	push(@sp,
+	    $t2[($t3[($t1[($ch + $n1) & MASK] + $n2) & MASK] - $n2) & MASK] - $n1);
+
+	$n1++;
+	if($n1 == ROTORSZ) {
+	    $n1 = 0;
+	    $n2++;
+	    $n2 = 0 if $n2 == ROTORSZ;
+	}
+    }
+    encode(\@sp);
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Net::PH - CCSO Nameserver Client class
+
+=head1 SYNOPSIS
+
+    use Net::PH;
+    
+    $ph = Net::PH->new("some.host.name",
+                       Port    => 105,
+                       Timeout => 120,
+                       Debug   => 0);
+
+    if($ph) {
+        $q = $ph->query({ field1 => "value1" },
+                        [qw(name address pobox)]);
+    
+        if($q) {
+        }
+    }
+    
+    # Alternative syntax
+    
+    if($ph) {
+        $q = $ph->query('field1=value1',
+                        'name address pobox');
+    
+        if($q) {
+        }
+    }
+
+=head1 DESCRIPTION
+
+C<Net::PH> is a class implementing a simple Nameserver/PH client in Perl
+as described in the CCSO Nameserver -- Server-Client Protocol. Like other
+modules in the Net:: family the C<Net::PH> object inherits methods from
+C<Net::Cmd>.
+
+=head1 CONSTRUCTOR
+
+=over 4
+
+=item new ( [ HOST ] [, OPTIONS ])
+
+    $ph = Net::PH->new("some.host.name",
+                       Port    => 105,
+                       Timeout => 120,
+                       Debug   => 0
+                      );
+
+This is the constructor for a new Net::PH object. C<HOST> is the
+name of the remote host to which a PH connection is required.
+
+If C<HOST> is not given, then the C<SNPP_Host> specified in C<Net::Config>
+will be used.
+
+C<OPTIONS> is an optional list of named options which are passed in
+a hash like fashion, using key and value pairs. Possible options are:-
+
+B<Port> - Port number to connect to on remote host.
+
+B<Timeout> - Maximum time, in seconds, to wait for a response from the
+Nameserver, a value of zero will cause all IO operations to block.
+(default: 120)
+
+B<Debug> - Enable the printing of debugging information to STDERR
+
+=back
+
+=head1 METHODS
+
+Unless otherwise stated all methods return either a I<true> or I<false>
+value, with I<true> meaning that the operation was a success. When a method
+states that it returns a value, failure will be returned as I<undef> or an
+empty list.
+
+=over 4
+
+=item query( SEARCH [, RETURN ] )
+
+    $q = $ph->query({ name => $myname },
+		    [qw(name email schedule)]);
+    
+    foreach $handle (@{$q}) {
+	foreach $field (keys %{$handle}) {
+            $c = ${$handle}{$field}->code;
+            $v = ${$handle}{$field}->value;
+            $f = ${$handle}{$field}->field;
+            $t = ${$handle}{$field}->text;
+            print "field:[$field] [$c][$v][$f][$t]\n" ;
+	}
+    }
+
+    
+
+Search the database and return fields from all matching entries.
+
+The C<SEARCH> argument is a reference to a HASH which contains field/value
+pairs which will be passed to the Nameserver as the search criteria.
+
+C<RETURN> is optional, but if given it should be a reference to a list which
+contains field names to be returned.
+
+The alternative syntax is to pass strings instead of references, for example
+
+    $q = $ph->query('name=myname',
+		    'name email schedule');
+
+The C<SEARCH> argument is a string that is passed to the Nameserver as the 
+search criteria. The strings being passed should B<not> contain any carriage
+returns, or else the query command might fail or return invalid data.
+
+C<RETURN> is optional, but if given it should be a string which will
+contain field names to be returned.
+
+Each match from the server will be returned as a HASH where the keys are the
+field names and the values are C<Net::PH:Result> objects (I<code>, I<value>, 
+I<field>, I<text>).
+
+Returns a reference to an ARRAY which contains references to HASHs, one
+per match from the server.
+
+=item change( SEARCH , MAKE )
+
+    $r = $ph->change({ email => "*.domain.name" },
+                     { schedule => "busy");
+
+Change field values for matching entries.
+
+The C<SEARCH> argument is a reference to a HASH which contains field/value
+pairs which will be passed to the Nameserver as the search criteria.
+
+The C<MAKE> argument is a reference to a HASH which contains field/value
+pairs which will be passed to the Nameserver that
+will set new values to designated fields.
+
+The alternative syntax is to pass strings instead of references, for example
+
+    $r = $ph->change('email="*.domain.name"',
+                     'schedule="busy"');
+
+The C<SEARCH> argument is a string to be passed to the Nameserver as the 
+search criteria. The strings being passed should B<not> contain any carriage
+returns, or else the query command might fail or return invalid data.
+
+
+The C<MAKE> argument is a string to be passed to the Nameserver that
+will set new values to designated fields.
+
+Upon success all entries that match the search criteria will have
+the field values, given in the Make argument, changed.
+
+=item login( USER, PASS [, ENCRYPT ])
+
+    $r = $ph->login('username','password',1);
+
+Enter login mode using C<USER> and C<PASS>. If C<ENCRYPT> is given and
+is I<true> then the password will be used to encrypt a challenge text 
+string provided by the server, and the encrypted string will be sent back
+to the server. If C<ENCRYPT> is not given, or I<false> then the password 
+will be sent in clear text (I<this is not recommended>)
+
+=item logout()
+
+    $r = $ph->logout();
+
+Exit login mode and return to anonymous mode.
+
+=item fields( [ FIELD_LIST ] )
+
+    $fields = $ph->fields();
+    foreach $field (keys %{$fields}) {
+        $c = ${$fields}{$field}->code;
+        $v = ${$fields}{$field}->value;
+        $f = ${$fields}{$field}->field;
+        $t = ${$fields}{$field}->text;
+        print "field:[$field] [$c][$v][$f][$t]\n";
+    }
+
+In a scalar context, returns a reference to a HASH. The keys of the HASH are
+the field names and the values are C<Net::PH:Result> objects (I<code>,
+I<value>, I<field>, I<text>).
+
+In an array context, returns a two element array. The first element is a
+reference to a HASH as above, the second element is a reference to an array
+which contains the tag names in the order that they were returned from the
+server.
+
+C<FIELD_LIST> is a string that lists the fields for which info will be
+returned.
+
+=item add( FIELD_VALUES )
+
+    $r = $ph->add( { name => $name, phone => $phone });
+
+This method is used to add new entries to the Nameserver database. You
+must successfully call L<login> before this method can be used.
+
+B<Note> that this method adds new entries to the database. To modify
+an existing entry use L<change>.
+
+C<FIELD_VALUES> is a reference to a HASH which contains field/value
+pairs which will be passed to the Nameserver and will be used to 
+initialize the new entry.
+
+The alternative syntax is to pass a string instead of a reference, for example
+
+    $r = $ph->add('name=myname phone=myphone');
+
+C<FIELD_VALUES> is a string that consists of field/value pairs which the
+new entry will contain. The strings being passed should B<not> contain any
+carriage returns, or else the query command might fail or return invalid data.
+
+
+=item delete( FIELD_VALUES )
+
+    $r = $ph->delete('name=myname phone=myphone');
+
+This method is used to delete existing entries from the Nameserver database.
+You must successfully call L<login> before this method can be used.
+
+B<Note> that this method deletes entries to the database. To modify
+an existing entry use L<change>.
+
+C<FIELD_VALUES> is a string that serves as the search criteria for the
+records to be deleted. Any entry in the database which matches this search 
+criteria will be deleted.
+
+=item id( [ ID ] )
+
+    $r = $ph->id('709');
+
+Sends C<ID> to the Nameserver, which will enter this into its
+logs. If C<ID> is not given then the UID of the user running the
+process will be sent.
+
+=item status()
+
+Returns the current status of the Nameserver.
+
+=item siteinfo()
+
+    $siteinfo = $ph->siteinfo();
+    foreach $field (keys %{$siteinfo}) {
+        $c = ${$siteinfo}{$field}->code;
+        $v = ${$siteinfo}{$field}->value;
+        $f = ${$siteinfo}{$field}->field;
+        $t = ${$siteinfo}{$field}->text;
+        print "field:[$field] [$c][$v][$f][$t]\n";
+    }
+
+Returns a reference to a HASH containing information about the server's 
+site. The keys of the HASH are the field names and values are
+C<Net::PH:Result> objects (I<code>, I<value>, I<field>, I<text>).
+
+=item quit()
+
+    $r = $ph->quit();
+
+Quit the connection
+
+=back
+
+=head1 Q&A
+
+How do I get the values of a Net::PH::Result object?
+
+    foreach $handle (@{$q}) {
+        foreach $field (keys %{$handle}) {
+            $my_code  = ${$q}{$field}->code;
+            $my_value = ${$q}{$field}->value;
+            $my_field = ${$q}{$field}->field;
+            $my_text  = ${$q}{$field}->text;
+        }
+    }
+
+How do I get a count of the returned matches to my query?
+
+    $my_count = scalar(@{$query_result});
+
+How do I get the status code and message of the last C<$ph> command?
+
+    $status_code    = $ph->code;
+    $status_message = $ph->message;
+
+=head1 SEE ALSO
+
+L<Net::Cmd>
+
+=head1 AUTHORS
+
+Graham Barr <gbarr@pobox.com>
+Alex Hristov <hristov@slb.com>
+
+=head1 ACKNOWLEDGMENTS
+
+Password encryption code ported to perl by Broc Seib <bseib@purdue.edu>,
+Purdue University Computing Center.
+
+Otis Gospodnetic <otisg@panther.middlebury.edu> suggested
+passing parameters as string constants. Some queries cannot be 
+executed when passing parameters as string references.
+
+        Example: query first_name last_name email="*.domain"
+
+=head1 COPYRIGHT
+
+The encryption code is based upon cryptit.c, Copyright (C) 1988 by
+Steven Dorner, and Paul Pomes, and the University of Illinois Board
+of Trustees, and by CSNET.
+
+All other code is Copyright (c) 1996-1997 Graham Barr <gbarr@pobox.com>
+and Alex Hristov <hristov@slb.com>. All rights reserved. This program is
+free software; you can redistribute it and/or modify it under the same
+terms as Perl itself.
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Net/POP3.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,552 @@
+# Net::POP3.pm
+#
+# Copyright (c) 1995-1997 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package Net::POP3;
+
+use strict;
+use IO::Socket;
+use vars qw(@ISA $VERSION $debug);
+use Net::Cmd;
+use Carp;
+use Net::Config;
+
+$VERSION = "2.24"; # $Id: //depot/libnet/Net/POP3.pm#24 $
+
+@ISA = qw(Net::Cmd IO::Socket::INET);
+
+sub new
+{
+ my $self = shift;
+ my $type = ref($self) || $self;
+ my $host = shift if @_ % 2;
+ my %arg  = @_; 
+ my $hosts = defined $host ? [ $host ] : $NetConfig{pop3_hosts};
+ my $obj;
+ my @localport = exists $arg{ResvPort} ? ( LocalPort => $arg{ResvPort} ): ();
+
+ my $h;
+ foreach $h (@{$hosts})
+  {
+   $obj = $type->SUPER::new(PeerAddr => ($host = $h), 
+			    PeerPort => $arg{Port} || 'pop3(110)',
+			    Proto    => 'tcp',
+			    @localport,
+			    Timeout  => defined $arg{Timeout}
+						? $arg{Timeout}
+						: 120
+			   ) and last;
+  }
+
+ return undef
+	unless defined $obj;
+
+ ${*$obj}{'net_pop3_host'} = $host;
+
+ $obj->autoflush(1);
+ $obj->debug(exists $arg{Debug} ? $arg{Debug} : undef);
+
+ unless ($obj->response() == CMD_OK)
+  {
+   $obj->close();
+   return undef;
+  }
+
+ ${*$obj}{'net_pop3_banner'} = $obj->message;
+
+ $obj;
+}
+
+##
+## We don't want people sending me their passwords when they report problems
+## now do we :-)
+##
+
+sub debug_text { $_[2] =~ /^(pass|rpop)/i ? "$1 ....\n" : $_[2]; }
+
+sub login
+{
+ @_ >= 1 && @_ <= 3 or croak 'usage: $pop3->login( USER, PASS )';
+ my($me,$user,$pass) = @_;
+
+ if (@_ <= 2) {
+   ($user, $pass) = $me->_lookup_credentials($user);
+ }
+
+ $me->user($user) and
+    $me->pass($pass);
+}
+
+sub apop
+{
+ @_ >= 1 && @_ <= 3 or croak 'usage: $pop3->apop( USER, PASS )';
+ my($me,$user,$pass) = @_;
+ my $banner;
+ my $md;
+
+ if (eval { local $SIG{__DIE__}; require Digest::MD5 }) {
+   $md = Digest::MD5->new();
+ } elsif (eval { local $SIG{__DIE__}; require MD5 }) {
+   $md = MD5->new();
+ } else {
+   carp "You need to install Digest::MD5 or MD5 to use the APOP command";
+   return undef;
+ }
+
+ return undef
+   unless ( $banner = (${*$me}{'net_pop3_banner'} =~ /(<.*>)/)[0] );
+
+ if (@_ <= 2) {
+   ($user, $pass) = $me->_lookup_credentials($user);
+ }
+
+ $md->add($banner,$pass);
+
+ return undef
+    unless($me->_APOP($user,$md->hexdigest));
+
+ $me->_get_mailbox_count();
+}
+
+sub user
+{
+ @_ == 2 or croak 'usage: $pop3->user( USER )';
+ $_[0]->_USER($_[1]) ? 1 : undef;
+}
+
+sub pass
+{
+ @_ == 2 or croak 'usage: $pop3->pass( PASS )';
+
+ my($me,$pass) = @_;
+
+ return undef
+   unless($me->_PASS($pass));
+
+ $me->_get_mailbox_count();
+}
+
+sub reset
+{
+ @_ == 1 or croak 'usage: $obj->reset()';
+
+ my $me = shift;
+
+ return 0 
+   unless($me->_RSET);
+
+ if(defined ${*$me}{'net_pop3_mail'})
+  {
+   local $_;
+   foreach (@{${*$me}{'net_pop3_mail'}})
+    {
+     delete $_->{'net_pop3_deleted'};
+    }
+  }
+}
+
+sub last
+{
+ @_ == 1 or croak 'usage: $obj->last()';
+
+ return undef
+    unless $_[0]->_LAST && $_[0]->message =~ /(\d+)/;
+
+ return $1;
+}
+
+sub top
+{
+ @_ == 2 || @_ == 3 or croak 'usage: $pop3->top( MSGNUM [, NUMLINES ])';
+ my $me = shift;
+
+ return undef
+    unless $me->_TOP($_[0], $_[1] || 0);
+
+ $me->read_until_dot;
+}
+
+sub popstat
+{
+ @_ == 1 or croak 'usage: $pop3->popstat()';
+ my $me = shift;
+
+ return ()
+    unless $me->_STAT && $me->message =~ /(\d+)\D+(\d+)/;
+
+ ($1 || 0, $2 || 0);
+}
+
+sub list
+{
+ @_ == 1 || @_ == 2 or croak 'usage: $pop3->list( [ MSGNUM ] )';
+ my $me = shift;
+
+ return undef
+    unless $me->_LIST(@_);
+
+ if(@_)
+  {
+   $me->message =~ /\d+\D+(\d+)/;
+   return $1 || undef;
+  }
+
+ my $info = $me->read_until_dot
+	or return undef;
+
+ my %hash = map { (/(\d+)\D+(\d+)/) } @$info;
+
+ return \%hash;
+}
+
+sub get
+{
+ @_ == 2 or @_ == 3 or croak 'usage: $pop3->get( MSGNUM [, FH ])';
+ my $me = shift;
+
+ return undef
+    unless $me->_RETR(shift);
+
+ $me->read_until_dot(@_);
+}
+
+sub getfh
+{
+ @_ == 2 or croak 'usage: $pop3->getfh( MSGNUM )';
+ my $me = shift;
+
+ return unless $me->_RETR(shift);
+ return        $me->tied_fh;
+}
+
+
+
+sub delete
+{
+ @_ == 2 or croak 'usage: $pop3->delete( MSGNUM )';
+ $_[0]->_DELE($_[1]);
+}
+
+sub uidl
+{
+ @_ == 1 || @_ == 2 or croak 'usage: $pop3->uidl( [ MSGNUM ] )';
+ my $me = shift;
+ my $uidl;
+
+ $me->_UIDL(@_) or
+    return undef;
+ if(@_)
+  {
+   $uidl = ($me->message =~ /\d+\s+([\041-\176]+)/)[0];
+  }
+ else
+  {
+   my $ref = $me->read_until_dot
+	or return undef;
+   my $ln;
+   $uidl = {};
+   foreach $ln (@$ref) {
+     my($msg,$uid) = $ln =~ /^\s*(\d+)\s+([\041-\176]+)/;
+     $uidl->{$msg} = $uid;
+   }
+  }
+ return $uidl;
+}
+
+sub ping
+{
+ @_ == 2 or croak 'usage: $pop3->ping( USER )';
+ my $me = shift;
+
+ return () unless $me->_PING(@_) && $me->message =~ /(\d+)\D+(\d+)/;
+
+ ($1 || 0, $2 || 0);
+}
+
+sub _lookup_credentials
+{
+  my ($me, $user) = @_;
+
+  require Net::Netrc;
+
+  $user ||= eval { local $SIG{__DIE__}; (getpwuid($>))[0] } ||
+    $ENV{NAME} || $ENV{USER} || $ENV{LOGNAME};
+
+  my $m = Net::Netrc->lookup(${*$me}{'net_pop3_host'},$user);
+  $m ||= Net::Netrc->lookup(${*$me}{'net_pop3_host'});
+
+  my $pass = $m ? $m->password || ""
+                : "";
+
+  ($user, $pass);
+}
+
+sub _get_mailbox_count
+{
+  my ($me) = @_;
+  my $ret = ${*$me}{'net_pop3_count'} = ($me->message =~ /(\d+)\s+message/io)
+	  ? $1 : ($me->popstat)[0];
+
+  $ret ? $ret : "0E0";
+}
+
+
+sub _STAT { shift->command('STAT')->response() == CMD_OK }
+sub _LIST { shift->command('LIST',@_)->response() == CMD_OK }
+sub _RETR { shift->command('RETR',$_[0])->response() == CMD_OK }
+sub _DELE { shift->command('DELE',$_[0])->response() == CMD_OK }
+sub _NOOP { shift->command('NOOP')->response() == CMD_OK }
+sub _RSET { shift->command('RSET')->response() == CMD_OK }
+sub _QUIT { shift->command('QUIT')->response() == CMD_OK }
+sub _TOP  { shift->command('TOP', @_)->response() == CMD_OK }
+sub _UIDL { shift->command('UIDL',@_)->response() == CMD_OK }
+sub _USER { shift->command('USER',$_[0])->response() == CMD_OK }
+sub _PASS { shift->command('PASS',$_[0])->response() == CMD_OK }
+sub _APOP { shift->command('APOP',@_)->response() == CMD_OK }
+sub _PING { shift->command('PING',$_[0])->response() == CMD_OK }
+
+sub _RPOP { shift->command('RPOP',$_[0])->response() == CMD_OK }
+sub _LAST { shift->command('LAST')->response() == CMD_OK }
+
+sub quit
+{
+ my $me = shift;
+
+ $me->_QUIT;
+ $me->close;
+}
+
+sub DESTROY
+{
+ my $me = shift;
+
+ if(defined fileno($me))
+  {
+   $me->reset;
+   $me->quit;
+  }
+}
+
+##
+## POP3 has weird responses, so we emulate them to look the same :-)
+##
+
+sub response
+{
+ my $cmd = shift;
+ my $str = $cmd->getline() || return undef;
+ my $code = "500";
+
+ $cmd->debug_print(0,$str)
+   if ($cmd->debug);
+
+ if($str =~ s/^\+OK\s*//io)
+  {
+   $code = "200"
+  }
+ else
+  {
+   $str =~ s/^-ERR\s*//io;
+  }
+
+ ${*$cmd}{'net_cmd_resp'} = [ $str ];
+ ${*$cmd}{'net_cmd_code'} = $code;
+
+ substr($code,0,1);
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Net::POP3 - Post Office Protocol 3 Client class (RFC1939)
+
+=head1 SYNOPSIS
+
+    use Net::POP3;
+
+    # Constructors
+    $pop = Net::POP3->new('pop3host');
+    $pop = Net::POP3->new('pop3host', Timeout => 60);
+
+    if ($pop->login($username, $password) > 0) {
+      my $msgnums = $pop->list; # hashref of msgnum => size
+      foreach my $msgnum (keys %$msgnums) {
+        my $msg = $pop->get($msgnum);
+        print @$msg;
+        $pop->delete($msgnum);
+      }
+    }
+
+    $pop->quit;
+
+=head1 DESCRIPTION
+
+This module implements a client interface to the POP3 protocol, enabling
+a perl5 application to talk to POP3 servers. This documentation assumes
+that you are familiar with the POP3 protocol described in RFC1939.
+
+A new Net::POP3 object must be created with the I<new> method. Once
+this has been done, all POP3 commands are accessed via method calls
+on the object.
+
+=head1 CONSTRUCTOR
+
+=over 4
+
+=item new ( [ HOST, ] [ OPTIONS ] )
+
+This is the constructor for a new Net::POP3 object. C<HOST> is the
+name of the remote host to which a POP3 connection is required.
+
+If C<HOST> is not given, then the C<POP3_Host> specified in C<Net::Config>
+will be used.
+
+C<OPTIONS> are passed in a hash like fashion, using key and value pairs.
+Possible options are:
+
+B<ResvPort> - If given then the socket for the C<Net::POP3> object
+will be bound to the local port given using C<bind> when the socket is
+created.
+
+B<Timeout> - Maximum time, in seconds, to wait for a response from the
+POP3 server (default: 120)
+
+B<Debug> - Enable debugging information
+
+=back
+
+=head1 METHODS
+
+Unless otherwise stated all methods return either a I<true> or I<false>
+value, with I<true> meaning that the operation was a success. When a method
+states that it returns a value, failure will be returned as I<undef> or an
+empty list.
+
+=over 4
+
+=item user ( USER )
+
+Send the USER command.
+
+=item pass ( PASS )
+
+Send the PASS command. Returns the number of messages in the mailbox.
+
+=item login ( [ USER [, PASS ]] )
+
+Send both the USER and PASS commands. If C<PASS> is not given the
+C<Net::POP3> uses C<Net::Netrc> to lookup the password using the host
+and username. If the username is not specified then the current user name
+will be used.
+
+Returns the number of messages in the mailbox. However if there are no
+messages on the server the string C<"0E0"> will be returned. This is
+will give a true value in a boolean context, but zero in a numeric context.
+
+If there was an error authenticating the user then I<undef> will be returned.
+
+=item apop ( [ USER [, PASS ]] )
+
+Authenticate with the server identifying as C<USER> with password C<PASS>.
+Similar to L</login>, but the password is not sent in clear text.
+
+To use this method you must have the Digest::MD5 or the MD5 module installed,
+otherwise this method will return I<undef>.
+
+=item top ( MSGNUM [, NUMLINES ] )
+
+Get the header and the first C<NUMLINES> of the body for the message
+C<MSGNUM>. Returns a reference to an array which contains the lines of text
+read from the server.
+
+=item list ( [ MSGNUM ] )
+
+If called with an argument the C<list> returns the size of the message
+in octets.
+
+If called without arguments a reference to a hash is returned. The
+keys will be the C<MSGNUM>'s of all undeleted messages and the values will
+be their size in octets.
+
+=item get ( MSGNUM [, FH ] )
+
+Get the message C<MSGNUM> from the remote mailbox. If C<FH> is not given
+then get returns a reference to an array which contains the lines of
+text read from the server. If C<FH> is given then the lines returned
+from the server are printed to the filehandle C<FH>.
+
+=item getfh ( MSGNUM )
+
+As per get(), but returns a tied filehandle.  Reading from this
+filehandle returns the requested message.  The filehandle will return
+EOF at the end of the message and should not be reused.
+
+=item last ()
+
+Returns the highest C<MSGNUM> of all the messages accessed.
+
+=item popstat ()
+
+Returns a list of two elements. These are the number of undeleted
+elements and the size of the mbox in octets.
+
+=item ping ( USER )
+
+Returns a list of two elements. These are the number of new messages
+and the total number of messages for C<USER>.
+
+=item uidl ( [ MSGNUM ] )
+
+Returns a unique identifier for C<MSGNUM> if given. If C<MSGNUM> is not
+given C<uidl> returns a reference to a hash where the keys are the
+message numbers and the values are the unique identifiers.
+
+=item delete ( MSGNUM )
+
+Mark message C<MSGNUM> to be deleted from the remote mailbox. All messages
+that are marked to be deleted will be removed from the remote mailbox
+when the server connection closed.
+
+=item reset ()
+
+Reset the status of the remote POP3 server. This includes reseting the
+status of all messages to not be deleted.
+
+=item quit ()
+
+Quit and close the connection to the remote POP3 server. Any messages marked
+as deleted will be deleted from the remote mailbox.
+
+=back
+
+=head1 NOTES
+
+If a C<Net::POP3> object goes out of scope before C<quit> method is called
+then the C<reset> method will called before the connection is closed. This
+means that any messages marked to be deleted will not be.
+
+=head1 SEE ALSO
+
+L<Net::Netrc>,
+L<Net::Cmd>
+
+=head1 AUTHOR
+
+Graham Barr <gbarr@pobox.com>
+
+=head1 COPYRIGHT
+
+Copyright (c) 1995-1997 Graham Barr. All rights reserved.
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=for html <hr>
+
+I<$Id: //depot/libnet/Net/POP3.pm#24 $>
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Net/SMTP.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,770 @@
+# Net::SMTP.pm
+#
+# Copyright (c) 1995-1997 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package Net::SMTP;
+
+require 5.001;
+
+use strict;
+use vars qw($VERSION @ISA);
+use Socket 1.3;
+use Carp;
+use IO::Socket;
+use Net::Cmd;
+use Net::Config;
+
+$VERSION = "2.26"; # $Id: //depot/libnet/Net/SMTP.pm#31 $
+
+@ISA = qw(Net::Cmd IO::Socket::INET);
+
+sub new
+{
+ my $self = shift;
+ my $type = ref($self) || $self;
+ my $host = shift if @_ % 2;
+ my %arg  = @_; 
+ my $hosts = defined $host ? $host : $NetConfig{smtp_hosts};
+ my $obj;
+
+ my $h;
+ foreach $h (@{ref($hosts) ? $hosts : [ $hosts ]})
+  {
+   $obj = $type->SUPER::new(PeerAddr => ($host = $h), 
+			    PeerPort => $arg{Port} || 'smtp(25)',
+			    LocalAddr => $arg{LocalAddr},
+			    LocalPort => $arg{LocalPort},
+			    Proto    => 'tcp',
+			    Timeout  => defined $arg{Timeout}
+						? $arg{Timeout}
+						: 120
+			   ) and last;
+  }
+
+ return undef
+	unless defined $obj;
+
+ $obj->autoflush(1);
+
+ $obj->debug(exists $arg{Debug} ? $arg{Debug} : undef);
+
+ unless ($obj->response() == CMD_OK)
+  {
+   $obj->close();
+   return undef;
+  }
+
+ ${*$obj}{'net_smtp_exact_addr'} = $arg{ExactAddresses};
+ ${*$obj}{'net_smtp_host'} = $host;
+
+ (${*$obj}{'net_smtp_banner'}) = $obj->message;
+ (${*$obj}{'net_smtp_domain'}) = $obj->message =~ /\A\s*(\S+)/;
+
+ unless($obj->hello($arg{Hello} || ""))
+  {
+   $obj->close();
+   return undef;
+  }
+
+ $obj;
+}
+
+##
+## User interface methods
+##
+
+sub banner
+{
+ my $me = shift;
+
+ return ${*$me}{'net_smtp_banner'} || undef;
+}
+
+sub domain
+{
+ my $me = shift;
+
+ return ${*$me}{'net_smtp_domain'} || undef;
+}
+
+sub etrn {
+    my $self = shift;
+    defined($self->supports('ETRN',500,["Command unknown: 'ETRN'"])) &&
+	$self->_ETRN(@_);
+}
+
+sub auth {
+    my ($self, $username, $password) = @_;
+
+    require MIME::Base64;
+    require Authen::SASL;
+
+    my $mechanisms = $self->supports('AUTH',500,["Command unknown: 'AUTH'"]);
+    return unless defined $mechanisms;
+
+    my $sasl;
+
+    if (ref($username) and UNIVERSAL::isa($username,'Authen::SASL')) {
+      $sasl = $username;
+      $sasl->mechanism($mechanisms);
+    }
+    else {
+      die "auth(username, password)" if not length $username;
+      $sasl = Authen::SASL->new(mechanism=> $mechanisms,
+				callback => { user => $username,
+                                              pass => $password,
+					      authname => $username,
+                                            });
+    }
+
+    # We should probably allow the user to pass the host, but I don't
+    # currently know and SASL mechanisms that are used by smtp that need it
+    my $client = $sasl->client_new('smtp',${*$self}{'net_smtp_host'},0);
+    my $str    = $client->client_start;
+    # We dont support sasl mechanisms that encrypt the socket traffic.
+    # todo that we would really need to change the ISA hierarchy
+    # so we dont inherit from IO::Socket, but instead hold it in an attribute
+
+    my @cmd = ("AUTH", $client->mechanism);
+    my $code;
+
+    push @cmd, MIME::Base64::encode_base64($str,'')
+      if defined $str and length $str;
+
+    while (($code = $self->command(@cmd)->response()) == CMD_MORE) {
+      @cmd = (MIME::Base64::encode_base64(
+	$client->client_step(
+	  MIME::Base64::decode_base64(
+	    ($self->message)[0]
+	  )
+	), ''
+      ));
+    }
+
+    $code == CMD_OK;
+}
+
+sub hello
+{
+ my $me = shift;
+ my $domain = shift || "localhost.localdomain";
+ my $ok = $me->_EHLO($domain);
+ my @msg = $me->message;
+
+ if($ok)
+  {
+   my $h = ${*$me}{'net_smtp_esmtp'} = {};
+   my $ln;
+   foreach $ln (@msg) {
+     $h->{uc $1} = $2
+	if $ln =~ /(\w+)\b[= \t]*([^\n]*)/;
+    }
+  }
+ elsif($me->status == CMD_ERROR) 
+  {
+   @msg = $me->message
+	if $ok = $me->_HELO($domain);
+  }
+
+ return undef unless $ok;
+
+ $msg[0] =~ /\A\s*(\S+)/;
+ return ($1 || " ");
+}
+
+sub supports {
+    my $self = shift;
+    my $cmd = uc shift;
+    return ${*$self}{'net_smtp_esmtp'}->{$cmd}
+	if exists ${*$self}{'net_smtp_esmtp'}->{$cmd};
+    $self->set_status(@_)
+	if @_;
+    return;
+}
+
+sub _addr {
+  my $self = shift;
+  my $addr = shift;
+  $addr = "" unless defined $addr;
+
+  if (${*$self}{'net_smtp_exact_addr'}) {
+    return $1 if $addr =~ /^\s*(<.*>)\s*$/s;
+  }
+  else {
+    return $1 if $addr =~ /(<[^>]*>)/;
+    $addr =~ s/^\s+|\s+$//sg;
+  }
+
+  "<$addr>";
+}
+
+sub mail
+{
+ my $me = shift;
+ my $addr = _addr($me, shift);
+ my $opts = "";
+
+ if(@_)
+  {
+   my %opt = @_;
+   my($k,$v);
+
+   if(exists ${*$me}{'net_smtp_esmtp'})
+    {
+     my $esmtp = ${*$me}{'net_smtp_esmtp'};
+
+     if(defined($v = delete $opt{Size}))
+      {
+       if(exists $esmtp->{SIZE})
+        {
+         $opts .= sprintf " SIZE=%d", $v + 0
+        }
+       else
+        {
+	 carp 'Net::SMTP::mail: SIZE option not supported by host';
+        }
+      }
+
+     if(defined($v = delete $opt{Return}))
+      {
+       if(exists $esmtp->{DSN})
+        {
+	 $opts .= " RET=" . ((uc($v) eq "FULL") ? "FULL" : "HDRS");
+        }
+       else
+        {
+	 carp 'Net::SMTP::mail: DSN option not supported by host';
+        }
+      }
+
+     if(defined($v = delete $opt{Bits}))
+      {
+       if($v eq "8")
+        {
+         if(exists $esmtp->{'8BITMIME'})
+          {
+	 $opts .= " BODY=8BITMIME";
+          }
+         else
+          {
+	 carp 'Net::SMTP::mail: 8BITMIME option not supported by host';
+          }
+        }
+       elsif($v eq "binary")
+        {
+         if(exists $esmtp->{'BINARYMIME'} && exists $esmtp->{'CHUNKING'})
+          {
+   $opts .= " BODY=BINARYMIME";
+   ${*$me}{'net_smtp_chunking'} = 1;
+          }
+         else
+          {
+   carp 'Net::SMTP::mail: BINARYMIME option not supported by host';
+          }
+        }
+       elsif(exists $esmtp->{'8BITMIME'} or exists $esmtp->{'BINARYMIME'})
+        {
+   $opts .= " BODY=7BIT";
+        }
+       else
+        {
+   carp 'Net::SMTP::mail: 8BITMIME and BINARYMIME options not supported by host';
+        }
+      }
+
+     if(defined($v = delete $opt{Transaction}))
+      {
+       if(exists $esmtp->{CHECKPOINT})
+        {
+	 $opts .= " TRANSID=" . _addr($me, $v);
+        }
+       else
+        {
+	 carp 'Net::SMTP::mail: CHECKPOINT option not supported by host';
+        }
+      }
+
+     if(defined($v = delete $opt{Envelope}))
+      {
+       if(exists $esmtp->{DSN})
+        {
+	 $v =~ s/([^\041-\176]|=|\+)/sprintf "+%02x", ord($1)/sge;
+	 $opts .= " ENVID=$v"
+        }
+       else
+        {
+	 carp 'Net::SMTP::mail: DSN option not supported by host';
+        }
+      }
+
+     carp 'Net::SMTP::recipient: unknown option(s) '
+		. join(" ", keys %opt)
+		. ' - ignored'
+	if scalar keys %opt;
+    }
+   else
+    {
+     carp 'Net::SMTP::mail: ESMTP not supported by host - options discarded :-(';
+    }
+  }
+
+ $me->_MAIL("FROM:".$addr.$opts);
+}
+
+sub send	  { my $me = shift; $me->_SEND("FROM:" . _addr($me, $_[0])) }
+sub send_or_mail  { my $me = shift; $me->_SOML("FROM:" . _addr($me, $_[0])) }
+sub send_and_mail { my $me = shift; $me->_SAML("FROM:" . _addr($me, $_[0])) }
+
+sub reset
+{
+ my $me = shift;
+
+ $me->dataend()
+	if(exists ${*$me}{'net_smtp_lastch'});
+
+ $me->_RSET();
+}
+
+
+sub recipient
+{
+ my $smtp = shift;
+ my $opts = "";
+ my $skip_bad = 0;
+
+ if(@_ && ref($_[-1]))
+  {
+   my %opt = %{pop(@_)};
+   my $v;
+
+   $skip_bad = delete $opt{'SkipBad'};
+
+   if(exists ${*$smtp}{'net_smtp_esmtp'})
+    {
+     my $esmtp = ${*$smtp}{'net_smtp_esmtp'};
+
+     if(defined($v = delete $opt{Notify}))
+      {
+       if(exists $esmtp->{DSN})
+        {
+	 $opts .= " NOTIFY=" . join(",",map { uc $_ } @$v)
+        }
+       else
+        {
+	 carp 'Net::SMTP::recipient: DSN option not supported by host';
+        }
+      }
+
+     carp 'Net::SMTP::recipient: unknown option(s) '
+		. join(" ", keys %opt)
+		. ' - ignored'
+	if scalar keys %opt;
+    }
+   elsif(%opt)
+    {
+     carp 'Net::SMTP::recipient: ESMTP not supported by host - options discarded :-(';
+    }
+  }
+
+ my @ok;
+ my $addr;
+ foreach $addr (@_) 
+  {
+    if($smtp->_RCPT("TO:" . _addr($smtp, $addr) . $opts)) {
+      push(@ok,$addr) if $skip_bad;
+    }
+    elsif(!$skip_bad) {
+      return 0;
+    }
+  }
+
+ return $skip_bad ? @ok : 1;
+}
+
+BEGIN {
+  *to  = \&recipient;
+  *cc  = \&recipient;
+  *bcc = \&recipient;
+}
+
+sub data
+{
+ my $me = shift;
+
+ if(exists ${*$me}{'net_smtp_chunking'})
+  {
+   carp 'Net::SMTP::data: CHUNKING extension in use, must call bdat instead';
+  }
+ else
+  {
+   my $ok = $me->_DATA() && $me->datasend(@_);
+
+   $ok && @_ ? $me->dataend
+	     : $ok;
+  }
+}
+
+sub bdat
+{
+ my $me = shift;
+
+ if(exists ${*$me}{'net_smtp_chunking'})
+  {
+   my $data = shift;
+
+   $me->_BDAT(length $data) && $me->rawdatasend($data) &&
+     $me->response() == CMD_OK;
+  }
+ else
+  {
+   carp 'Net::SMTP::bdat: CHUNKING extension is not in use, call data instead';
+  }
+}
+
+sub bdatlast
+{
+ my $me = shift;
+
+ if(exists ${*$me}{'net_smtp_chunking'})
+  {
+   my $data = shift;
+
+   $me->_BDAT(length $data, "LAST") && $me->rawdatasend($data) &&
+     $me->response() == CMD_OK;
+  }
+ else
+  {
+   carp 'Net::SMTP::bdat: CHUNKING extension is not in use, call data instead';
+  }
+}
+
+sub datafh {
+  my $me = shift;
+  return unless $me->_DATA();
+  return $me->tied_fh;
+}
+
+sub expand
+{
+ my $me = shift;
+
+ $me->_EXPN(@_) ? ($me->message)
+		: ();
+}
+
+
+sub verify { shift->_VRFY(@_) }
+
+sub help
+{
+ my $me = shift;
+
+ $me->_HELP(@_) ? scalar $me->message
+	        : undef;
+}
+
+sub quit
+{
+ my $me = shift;
+
+ $me->_QUIT;
+ $me->close;
+}
+
+sub DESTROY
+{
+# ignore
+}
+
+##
+## RFC821 commands
+##
+
+sub _EHLO { shift->command("EHLO", @_)->response()  == CMD_OK }   
+sub _HELO { shift->command("HELO", @_)->response()  == CMD_OK }   
+sub _MAIL { shift->command("MAIL", @_)->response()  == CMD_OK }   
+sub _RCPT { shift->command("RCPT", @_)->response()  == CMD_OK }   
+sub _SEND { shift->command("SEND", @_)->response()  == CMD_OK }   
+sub _SAML { shift->command("SAML", @_)->response()  == CMD_OK }   
+sub _SOML { shift->command("SOML", @_)->response()  == CMD_OK }   
+sub _VRFY { shift->command("VRFY", @_)->response()  == CMD_OK }   
+sub _EXPN { shift->command("EXPN", @_)->response()  == CMD_OK }   
+sub _HELP { shift->command("HELP", @_)->response()  == CMD_OK }   
+sub _RSET { shift->command("RSET")->response()	    == CMD_OK }   
+sub _NOOP { shift->command("NOOP")->response()	    == CMD_OK }   
+sub _QUIT { shift->command("QUIT")->response()	    == CMD_OK }   
+sub _DATA { shift->command("DATA")->response()	    == CMD_MORE } 
+sub _BDAT { shift->command("BDAT", @_) }
+sub _TURN { shift->unsupported(@_); } 			   	  
+sub _ETRN { shift->command("ETRN", @_)->response()  == CMD_OK }
+sub _AUTH { shift->command("AUTH", @_)->response()  == CMD_OK }   
+
+1;
+
+__END__
+
+=head1 NAME
+
+Net::SMTP - Simple Mail Transfer Protocol Client
+
+=head1 SYNOPSIS
+
+    use Net::SMTP;
+
+    # Constructors
+    $smtp = Net::SMTP->new('mailhost');
+    $smtp = Net::SMTP->new('mailhost', Timeout => 60);
+
+=head1 DESCRIPTION
+
+This module implements a client interface to the SMTP and ESMTP
+protocol, enabling a perl5 application to talk to SMTP servers. This
+documentation assumes that you are familiar with the concepts of the
+SMTP protocol described in RFC821.
+
+A new Net::SMTP object must be created with the I<new> method. Once
+this has been done, all SMTP commands are accessed through this object.
+
+The Net::SMTP class is a subclass of Net::Cmd and IO::Socket::INET.
+
+=head1 EXAMPLES
+
+This example prints the mail domain name of the SMTP server known as mailhost:
+
+    #!/usr/local/bin/perl -w
+
+    use Net::SMTP;
+
+    $smtp = Net::SMTP->new('mailhost');
+    print $smtp->domain,"\n";
+    $smtp->quit;
+
+This example sends a small message to the postmaster at the SMTP server
+known as mailhost:
+
+    #!/usr/local/bin/perl -w
+
+    use Net::SMTP;
+
+    $smtp = Net::SMTP->new('mailhost');
+
+    $smtp->mail($ENV{USER});
+    $smtp->to('postmaster');
+
+    $smtp->data();
+    $smtp->datasend("To: postmaster\n");
+    $smtp->datasend("\n");
+    $smtp->datasend("A simple test message\n");
+    $smtp->dataend();
+
+    $smtp->quit;
+
+=head1 CONSTRUCTOR
+
+=over 4
+
+=item new Net::SMTP [ HOST, ] [ OPTIONS ]
+
+This is the constructor for a new Net::SMTP object. C<HOST> is the
+name of the remote host to which an SMTP connection is required.
+
+If C<HOST> is an array reference then each value will be attempted
+in turn until a connection is made.
+
+If C<HOST> is not given, then the C<SMTP_Host> specified in C<Net::Config>
+will be used.
+
+C<OPTIONS> are passed in a hash like fashion, using key and value pairs.
+Possible options are:
+
+B<Hello> - SMTP requires that you identify yourself. This option
+specifies a string to pass as your mail domain. If not
+given a guess will be taken.
+
+B<LocalAddr> and B<LocalPort> - These parameters are passed directly
+to IO::Socket to allow binding the socket to a local port.
+
+B<Timeout> - Maximum time, in seconds, to wait for a response from the
+SMTP server (default: 120)
+
+B<ExactAddresses> - If true the all ADDRESS arguments must be as
+defined by C<addr-spec> in RFC2822. If not given, or false, then
+Net::SMTP will attempt to extract the address from the value passed.
+
+B<Debug> - Enable debugging information
+
+
+Example:
+
+
+    $smtp = Net::SMTP->new('mailhost',
+			   Hello => 'my.mail.domain'
+			   Timeout => 30,
+                           Debug   => 1,
+			  );
+
+=back
+
+=head1 METHODS
+
+Unless otherwise stated all methods return either a I<true> or I<false>
+value, with I<true> meaning that the operation was a success. When a method
+states that it returns a value, failure will be returned as I<undef> or an
+empty list.
+
+=over 4
+
+=item banner ()
+
+Returns the banner message which the server replied with when the
+initial connection was made.
+
+=item domain ()
+
+Returns the domain that the remote SMTP server identified itself as during
+connection.
+
+=item hello ( DOMAIN )
+
+Tell the remote server the mail domain which you are in using the EHLO
+command (or HELO if EHLO fails).  Since this method is invoked
+automatically when the Net::SMTP object is constructed the user should
+normally not have to call it manually.
+
+=item etrn ( DOMAIN )
+
+Request a queue run for the DOMAIN given.
+
+=item auth ( USERNAME, PASSWORD )
+
+Attempt SASL authentication.
+
+=item mail ( ADDRESS [, OPTIONS] )
+
+=item send ( ADDRESS )
+
+=item send_or_mail ( ADDRESS )
+
+=item send_and_mail ( ADDRESS )
+
+Send the appropriate command to the server MAIL, SEND, SOML or SAML. C<ADDRESS>
+is the address of the sender. This initiates the sending of a message. The
+method C<recipient> should be called for each address that the message is to
+be sent to.
+
+The C<mail> method can some additional ESMTP OPTIONS which is passed
+in hash like fashion, using key and value pairs.  Possible options are:
+
+ Size        => <bytes>
+ Return      => "FULL" | "HDRS"
+ Bits        => "7" | "8" | "binary"
+ Transaction => <ADDRESS>
+ Envelope    => <ENVID>
+
+The C<Return> and C<Envelope> parameters are used for DSN (Delivery
+Status Notification).
+
+=item reset ()
+
+Reset the status of the server. This may be called after a message has been 
+initiated, but before any data has been sent, to cancel the sending of the
+message.
+
+=item recipient ( ADDRESS [, ADDRESS [ ...]] [, OPTIONS ] )
+
+Notify the server that the current message should be sent to all of the
+addresses given. Each address is sent as a separate command to the server.
+Should the sending of any address result in a failure then the
+process is aborted and a I<false> value is returned. It is up to the
+user to call C<reset> if they so desire.
+
+The C<recipient> method can some additional OPTIONS which is passed
+in hash like fashion, using key and value pairs.  Possible options are:
+
+ Notify    =>
+ SkipBad   => ignore bad addresses
+
+If C<SkipBad> is true the C<recipient> will not return an error when a
+bad address is encountered and it will return an array of addresses
+that did succeed.
+
+  $smtp->recipient($recipient1,$recipient2);  # Good
+  $smtp->recipient($recipient1,$recipient2, { SkipBad => 1 });  # Good
+  $smtp->recipient("$recipient,$recipient2"); # BAD   
+
+=item to ( ADDRESS [, ADDRESS [...]] )
+
+=item cc ( ADDRESS [, ADDRESS [...]] )
+
+=item bcc ( ADDRESS [, ADDRESS [...]] )
+
+Synonyms for C<recipient>.
+
+=item data ( [ DATA ] )
+
+Initiate the sending of the data from the current message. 
+
+C<DATA> may be a reference to a list or a list. If specified the contents
+of C<DATA> and a termination string C<".\r\n"> is sent to the server. And the
+result will be true if the data was accepted.
+
+If C<DATA> is not specified then the result will indicate that the server
+wishes the data to be sent. The data must then be sent using the C<datasend>
+and C<dataend> methods described in L<Net::Cmd>.
+
+=item expand ( ADDRESS )
+
+Request the server to expand the given address Returns an array
+which contains the text read from the server.
+
+=item verify ( ADDRESS )
+
+Verify that C<ADDRESS> is a legitimate mailing address.
+
+=item help ( [ $subject ] )
+
+Request help text from the server. Returns the text or undef upon failure
+
+=item quit ()
+
+Send the QUIT command to the remote SMTP server and close the socket connection.
+
+=back
+
+=head1 ADDRESSES
+
+Net::SMTP attempts to DWIM with addresses that are passed. For
+example an application might extract The From: line from an email
+and pass that to mail(). While this may work, it is not reccomended.
+The application should really use a module like L<Mail::Address>
+to extract the mail address and pass that.
+
+If C<ExactAddresses> is passed to the contructor, then addresses
+should be a valid rfc2821-quoted address, although Net::SMTP will
+accept accept the address surrounded by angle brackets.
+
+ funny user@domain      WRONG
+ "funny user"@domain    RIGHT, recommended
+ <"funny user"@domain>  OK
+
+=head1 SEE ALSO
+
+L<Net::Cmd>
+
+=head1 AUTHOR
+
+Graham Barr <gbarr@pobox.com>
+
+=head1 COPYRIGHT
+
+Copyright (c) 1995-1997 Graham Barr. All rights reserved.
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=for html <hr>
+
+I<$Id: //depot/libnet/Net/SMTP.pm#31 $>
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Net/SNPP.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,414 @@
+# Net::SNPP.pm
+#
+# Copyright (c) 1995-1997 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package Net::SNPP;
+
+require 5.001;
+
+use strict;
+use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
+use Socket 1.3;
+use Carp;
+use IO::Socket;
+use Net::Cmd;
+use Net::Config;
+
+$VERSION = "1.11"; # $Id:$
+@ISA     = qw(Net::Cmd IO::Socket::INET);
+@EXPORT  = (qw(CMD_2WAYERROR CMD_2WAYOK CMD_2WAYQUEUED), @Net::Cmd::EXPORT);
+
+sub CMD_2WAYERROR  () { 7 }
+sub CMD_2WAYOK     () { 8 }
+sub CMD_2WAYQUEUED () { 9 }
+
+sub new
+{
+ my $self = shift;
+ my $type = ref($self) || $self;
+ my $host = shift if @_ % 2;
+ my %arg  = @_; 
+ my $hosts = defined $host ? [ $host ] : $NetConfig{snpp_hosts};
+ my $obj;
+
+ my $h;
+ foreach $h (@{$hosts})
+  {
+   $obj = $type->SUPER::new(PeerAddr => ($host = $h), 
+			    PeerPort => $arg{Port} || 'snpp(444)',
+			    Proto    => 'tcp',
+			    Timeout  => defined $arg{Timeout}
+						? $arg{Timeout}
+						: 120
+			    ) and last;
+  }
+
+ return undef
+	unless defined $obj;
+
+ ${*$obj}{'net_snpp_host'} = $host;
+
+ $obj->autoflush(1);
+
+ $obj->debug(exists $arg{Debug} ? $arg{Debug} : undef);
+
+ unless ($obj->response() == CMD_OK)
+  {
+   $obj->close();
+   return undef;
+  }
+
+ $obj;
+}
+
+##
+## User interface methods
+##
+
+sub pager_id
+{
+ @_ == 2 or croak 'usage: $snpp->pager_id( PAGER_ID )';
+ shift->_PAGE(@_);
+}
+
+sub content
+{
+ @_ == 2 or croak 'usage: $snpp->content( MESSAGE )';
+ shift->_MESS(@_);
+}
+
+sub send
+{
+ my $me = shift;
+
+ if(@_)
+  {
+   my %arg = @_;
+
+   if(exists $arg{Pager})
+    {
+     my $pagers = ref($arg{Pager}) ? $arg{Pager} : [ $arg{Pager} ];
+     my $pager;
+     foreach $pager (@$pagers)
+      {
+       $me->_PAGE($pager) || return 0
+      }
+    }
+
+   $me->_MESS($arg{Message}) || return 0
+	if(exists $arg{Message});
+
+   $me->hold($arg{Hold}) || return 0
+	if(exists $arg{Hold});
+
+   $me->hold($arg{HoldLocal},1) || return 0
+	if(exists $arg{HoldLocal});
+
+   $me->_COVE($arg{Coverage}) || return 0
+	if(exists $arg{Coverage});
+
+   $me->_ALER($arg{Alert} ? 1 : 0) || return 0
+	if(exists $arg{Alert});
+
+   $me->service_level($arg{ServiceLevel}) || return 0
+	if(exists $arg{ServiceLevel});
+  }
+
+ $me->_SEND();
+}
+
+sub data
+{
+ my $me = shift;
+
+ my $ok = $me->_DATA() && $me->datasend(@_);
+
+ return $ok
+	unless($ok && @_);
+
+ $me->dataend;
+}
+
+sub login
+{
+ @_ == 2 || @_ == 3 or croak 'usage: $snpp->login( USER [, PASSWORD ])';
+ shift->_LOGI(@_);
+}
+
+sub help
+{
+ @_ == 1 or croak 'usage: $snpp->help()';
+ my $me = shift;
+
+ return $me->_HELP() ? $me->message
+		     : undef;
+}
+
+sub xwho
+{
+ @_ == 1 or croak 'usage: $snpp->xwho()';
+ my $me = shift;
+
+ $me->_XWHO or return undef;
+
+ my(%hash,$line);
+ my @msg = $me->message;
+ pop @msg; # Remove command complete line
+
+ foreach $line (@msg) {
+   $line =~ /^\s*(\S+)\s*(.*)/ and $hash{$1} = $2;
+ }
+
+ \%hash;
+}
+
+sub service_level
+{
+ @_ == 2 or croak 'usage: $snpp->service_level( LEVEL )';
+ my $me = shift;
+ my $level = int(shift);
+
+ if($level < 0 || $level > 11)
+  {
+   $me->set_status(550,"Invalid Service Level");
+   return 0;
+  }
+
+ $me->_LEVE($level);
+}
+
+sub alert
+{
+ @_ == 1 || @_ == 2 or croak 'usage: $snpp->alert( VALUE )';
+ my $me = shift;
+ my $value  = (@_ == 1 || shift) ? 1 : 0;
+
+ $me->_ALER($value);
+}
+
+sub coverage
+{
+ @_ == 1 or croak 'usage: $snpp->coverage( AREA )';
+ shift->_COVE(@_);
+}
+
+sub hold
+{
+ @_ == 2 || @_ == 3 or croak 'usage: $snpp->hold( TIME [, LOCAL ] )';
+ my $me = shift;
+ my $time = shift;
+ my $local = (shift) ? "" : " +0000";
+
+ my @g = reverse((gmtime($time))[0..5]);
+ $g[1] += 1;
+ $g[0] %= 100;
+
+ $me->_HOLD( sprintf("%02d%02d%02d%02d%02d%02d%s",@g,$local));
+}
+
+sub caller_id
+{
+ @_ == 2 or croak 'usage: $snpp->caller_id( CALLER_ID )';
+ shift->_CALL(@_);
+}
+
+sub subject
+{
+ @_ == 2 or croak 'usage: $snpp->subject( SUBJECT )';
+ shift->_SUBJ(@_);
+}
+
+sub two_way
+{
+ @_ == 1 or croak 'usage: $snpp->two_way()';
+ shift->_2WAY();
+}
+
+sub quit
+{
+ @_ == 1 or croak 'usage: $snpp->quit()';
+ my $snpp = shift;
+
+ $snpp->_QUIT;
+ $snpp->close;
+}
+
+##
+## IO/perl methods
+##
+
+sub DESTROY
+{
+ my $snpp = shift;
+ defined(fileno($snpp)) && $snpp->quit
+}
+
+##
+## Over-ride methods (Net::Cmd)
+##
+
+sub debug_text
+{
+ $_[2] =~ s/^((logi|page)\s+\S+\s+)\S+/$1 xxxx/io;
+ $_[2];
+}
+
+sub parse_response
+{
+ return ()
+    unless $_[1] =~ s/^(\d\d\d)(.?)//o;
+ my($code,$more) = ($1, $2 eq "-");
+
+ $more ||= $code == 214;
+
+ ($code,$more);
+}
+
+##
+## RFC1861 commands
+##
+
+# Level 1
+
+sub _PAGE { shift->command("PAGE", @_)->response()  == CMD_OK }   
+sub _MESS { shift->command("MESS", @_)->response()  == CMD_OK }   
+sub _RESE { shift->command("RESE")->response()  == CMD_OK }   
+sub _SEND { shift->command("SEND")->response()  == CMD_OK }   
+sub _QUIT { shift->command("QUIT")->response()  == CMD_OK }   
+sub _HELP { shift->command("HELP")->response()  == CMD_OK }   
+sub _DATA { shift->command("DATA")->response()  == CMD_MORE }   
+sub _SITE { shift->command("SITE",@_) }   
+
+# Level 2
+
+sub _LOGI { shift->command("LOGI", @_)->response()  == CMD_OK }   
+sub _LEVE { shift->command("LEVE", @_)->response()  == CMD_OK }   
+sub _ALER { shift->command("ALER", @_)->response()  == CMD_OK }   
+sub _COVE { shift->command("COVE", @_)->response()  == CMD_OK }   
+sub _HOLD { shift->command("HOLD", @_)->response()  == CMD_OK }   
+sub _CALL { shift->command("CALL", @_)->response()  == CMD_OK }   
+sub _SUBJ { shift->command("SUBJ", @_)->response()  == CMD_OK }   
+
+# NonStandard
+
+sub _XWHO { shift->command("XWHO")->response()  == CMD_OK }   
+
+1;
+__END__
+
+=head1 NAME
+
+Net::SNPP - Simple Network Pager Protocol Client
+
+=head1 SYNOPSIS
+
+    use Net::SNPP;
+    
+    # Constructors
+    $snpp = Net::SNPP->new('snpphost');
+    $snpp = Net::SNPP->new('snpphost', Timeout => 60);
+
+=head1 NOTE
+
+This module is not complete, yet !
+
+=head1 DESCRIPTION
+
+This module implements a client interface to the SNPP protocol, enabling
+a perl5 application to talk to SNPP servers. This documentation assumes
+that you are familiar with the SNPP protocol described in RFC1861.
+
+A new Net::SNPP object must be created with the I<new> method. Once
+this has been done, all SNPP commands are accessed through this object.
+
+=head1 EXAMPLES
+
+This example will send a pager message in one hour saying "Your lunch is ready"
+
+    #!/usr/local/bin/perl -w
+    
+    use Net::SNPP;
+    
+    $snpp = Net::SNPP->new('snpphost');
+    
+    $snpp->send( Pager   => $some_pager_number,
+	         Message => "Your lunch is ready",
+	         Alert   => 1,
+	         Hold    => time + 3600, # lunch ready in 1 hour :-)
+	       ) || die $snpp->message;
+    
+    $snpp->quit;
+
+=head1 CONSTRUCTOR
+
+=over 4
+
+=item new ( [ HOST, ] [ OPTIONS ] )
+
+This is the constructor for a new Net::SNPP object. C<HOST> is the
+name of the remote host to which a SNPP connection is required.
+
+If C<HOST> is not given, then the C<SNPP_Host> specified in C<Net::Config>
+will be used.
+
+C<OPTIONS> are passed in a hash like fashion, using key and value pairs.
+Possible options are:
+
+B<Timeout> - Maximum time, in seconds, to wait for a response from the
+SNPP server (default: 120)
+
+B<Debug> - Enable debugging information
+
+
+Example:
+
+
+    $snpp = Net::SNPP->new('snpphost',
+			   Debug => 1,
+			  );
+
+=head1 METHODS
+
+Unless otherwise stated all methods return either a I<true> or I<false>
+value, with I<true> meaning that the operation was a success. When a method
+states that it returns a value, failure will be returned as I<undef> or an
+empty list.
+
+=over 4
+
+=item reset ()
+
+=item help ()
+
+Request help text from the server. Returns the text or undef upon failure
+
+=item quit ()
+
+Send the QUIT command to the remote SNPP server and close the socket connection.
+
+=back
+
+=head1 EXPORTS
+
+C<Net::SNPP> exports all that C<Net::CMD> exports, plus three more subroutines
+that can bu used to compare against the result of C<status>. These are :-
+C<CMD_2WAYERROR>, C<CMD_2WAYOK>, and C<CMD_2WAYQUEUED>.
+
+=head1 SEE ALSO
+
+L<Net::Cmd>
+RFC1861
+
+=head1 AUTHOR
+
+Graham Barr <gbarr@pobox.com>
+
+=head1 COPYRIGHT
+
+Copyright (c) 1995-1997 Graham Barr. All rights reserved.
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Net/Time.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,151 @@
+# Net::Time.pm
+#
+# Copyright (c) 1995-1998 Graham Barr <gbarr@pobox.com>. All rights reserved.
+# This program is free software; you can redistribute it and/or
+# modify it under the same terms as Perl itself.
+
+package Net::Time;
+
+use strict;
+use vars qw($VERSION @ISA @EXPORT_OK $TIMEOUT);
+use Carp;
+use IO::Socket;
+require Exporter;
+use Net::Config;
+use IO::Select;
+
+@ISA = qw(Exporter);
+@EXPORT_OK = qw(inet_time inet_daytime);
+
+$VERSION = "2.09"; # $Id: //depot/libnet/Net/Time.pm#9 $
+
+$TIMEOUT = 120;
+
+sub _socket
+{
+ my($pname,$pnum,$host,$proto,$timeout) = @_;
+
+ $proto ||= 'udp';
+
+ my $port = (getservbyname($pname, $proto))[2] || $pnum;
+
+ my $hosts = defined $host ? [ $host ] : $NetConfig{$pname . '_hosts'};
+
+ my $me;
+
+ foreach $host (@$hosts)
+  {
+   $me = IO::Socket::INET->new(PeerAddr => $host,
+    	    	    	       PeerPort => $port,
+    	    	    	       Proto    => $proto
+    	    	    	      ) and last;
+  }
+
+ return unless $me;
+
+ $me->send("\n")
+	if $proto eq 'udp';
+
+ $timeout = $TIMEOUT
+	unless defined $timeout;
+
+ IO::Select->new($me)->can_read($timeout)
+	? $me
+	: undef;
+}
+
+sub inet_time
+{
+ my $s = _socket('time',37,@_) || return undef;
+ my $buf = '';
+ my $offset = 0 | 0;
+
+ return undef
+	unless $s->recv($buf, length(pack("N",0)));
+
+ # unpack, we | 0 to ensure we have an unsigned
+ my $time = (unpack("N",$buf))[0] | 0;
+
+ # the time protocol return time in seconds since 1900, convert
+ # it to a the required format
+
+ if($^O eq "MacOS") {
+   # MacOS return seconds since 1904, 1900 was not a leap year.
+   $offset = (4 * 31536000) | 0;
+ }
+ else {
+   # otherwise return seconds since 1972, there were 17 leap years between
+   # 1900 and 1972
+   $offset =  (70 * 31536000 + 17 * 86400) | 0;
+ }
+
+ $time - $offset;
+}
+
+sub inet_daytime
+{
+ my $s = _socket('daytime',13,@_) || return undef;
+ my $buf = '';
+
+ $s->recv($buf, 1024) ? $buf
+    	              : undef;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Net::Time - time and daytime network client interface
+
+=head1 SYNOPSIS
+
+    use Net::Time qw(inet_time inet_daytime);
+
+    print inet_time();		# use default host from Net::Config
+    print inet_time('localhost');
+    print inet_time('localhost', 'tcp');
+
+    print inet_daytime();	# use default host from Net::Config
+    print inet_daytime('localhost');
+    print inet_daytime('localhost', 'tcp');
+
+=head1 DESCRIPTION
+
+C<Net::Time> provides subroutines that obtain the time on a remote machine.
+
+=over 4
+
+=item inet_time ( [HOST [, PROTOCOL [, TIMEOUT]]])
+
+Obtain the time on C<HOST>, or some default host if C<HOST> is not given
+or not defined, using the protocol as defined in RFC868. The optional
+argument C<PROTOCOL> should define the protocol to use, either C<tcp> or
+C<udp>. The result will be a time value in the same units as returned
+by time() or I<undef> upon failure.
+
+=item inet_daytime ( [HOST [, PROTOCOL [, TIMEOUT]]])
+
+Obtain the time on C<HOST>, or some default host if C<HOST> is not given
+or not defined, using the protocol as defined in RFC867. The optional
+argument C<PROTOCOL> should define the protocol to use, either C<tcp> or
+C<udp>. The result will be an ASCII string or I<undef> upon failure.
+
+=back
+
+=head1 AUTHOR
+
+Graham Barr <gbarr@pobox.com>
+
+=head1 COPYRIGHT
+
+Copyright (c) 1995-1998 Graham Barr. All rights reserved.
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+
+=for html <hr>
+
+I<$Id: //depot/libnet/Net/Time.pm#9 $>
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Net/libnetFAQ.pod	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,310 @@
+# Copyright (c) 1997 Graham Barr.
+# All rights reserved.
+
+=head1 NAME
+
+libnetFAQ - libnet Frequently Asked Questions
+
+=head1 DESCRIPTION
+
+=head2 Where to get this document
+
+This document is distributed with the libnet distribution, and is also
+available on the libnet web page at
+
+    http://search.cpan.org/~gbarr/libnet/
+
+=head2 How to contribute to this document
+
+You may mail corrections, additions, and suggestions to me
+gbarr@pobox.com.
+
+=head1 Author and Copyright Information
+
+Copyright (c) 1997-1998 Graham Barr. All rights reserved.
+This document is free; you can redistribute it and/or modify it
+under the terms of the Artistic License.
+
+=head2 Disclaimer
+
+This information is offered in good faith and in the hope that it may
+be of use, but is not guaranteed to be correct, up to date, or suitable
+for any particular purpose whatsoever.  The authors accept no liability
+in respect of this information or its use.
+
+
+=head1 Obtaining and installing libnet
+
+=head2 What is libnet ?
+
+libnet is a collection of perl5 modules which all related to network
+programming. The majority of the modules available provided the
+client side of popular server-client protocols that are used in
+the internet community.
+
+=head2 Which version of perl do I need ?
+
+libnet has been know to work with versions of perl from 5.002 onwards. However
+if your release of perl is prior to perl5.004 then you will need to
+obtain and install the IO distribution from CPAN. If you have perl5.004
+or later then you will have the IO modules in your installation already,
+but CPAN may contain updates.
+
+=head2 What other modules do I need ?
+
+The only modules you will need installed are the modules from the IO
+distribution. If you have perl5.004 or later you will already have
+these modules.
+
+=head2 What machines support libnet ?
+
+libnet itself is an entirely perl-code distribution so it should work
+on any machine that perl runs on. However IO may not work
+with some machines and earlier releases of perl. But this
+should not be the case with perl version 5.004 or later.
+
+=head2 Where can I get the latest libnet release
+
+The latest libnet release is always on CPAN, you will find it
+in 
+
+ http://www.cpan.org/modules/by-module/Net/
+
+The latest release and information is also available on the libnet web page
+at
+
+ http://search.cpan.org/~gbarr/libnet/
+
+=head1 Using Net::FTP
+
+=head2 How do I download files from an FTP server ?
+
+An example taken from an article posted to comp.lang.perl.misc
+
+    #!/your/path/to/perl
+
+    # a module making life easier
+
+    use Net::FTP;
+
+    # for debuging: $ftp = Net::FTP->new('site','Debug',10);
+    # open a connection and log in!
+
+    $ftp = Net::FTP->new('target_site.somewhere.xxx');
+    $ftp->login('username','password');
+
+    # set transfer mode to binary
+
+    $ftp->binary();
+
+    # change the directory on the ftp site
+
+    $ftp->cwd('/some/path/to/somewhere/');
+
+    foreach $name ('file1', 'file2', 'file3') {
+
+    # get's arguments are in the following order:
+    # ftp server's filename
+    # filename to save the transfer to on the local machine
+    # can be simply used as get($name) if you want the same name
+
+      $ftp->get($name,$name);
+    }
+
+    # ftp done!
+
+    $ftp->quit;
+
+=head2 How do I transfer files in binary mode ?
+
+To transfer files without <LF><CR> translation Net::FTP provides
+the C<binary> method
+
+    $ftp->binary;
+
+=head2 How can I get the size of a file on a remote FTP server ?
+
+=head2 How can I get the modification time of a file on a remote FTP server ?
+
+=head2 How can I change the permissions of a file on a remote server ?
+
+The FTP protocol does not have a command for changing the permissions
+of a file on the remote server. But some ftp servers may allow a chmod
+command to be issued via a SITE command, eg
+
+    $ftp->quot('site chmod 0777',$filename);
+
+But this is not guaranteed to work.
+
+=head2 Can I do a reget operation like the ftp command ?
+
+=head2 How do I get a directory listing from an FTP server ?
+
+=head2 Changing directory to "" does not fail ?
+
+Passing an argument of "" to ->cwd() has the same affect of calling ->cwd()
+without any arguments. Turn on Debug (I<See below>) and you will see what is
+happening
+
+    $ftp = Net::FTP->new($host, Debug => 1);
+    $ftp->login;
+    $ftp->cwd("");
+
+gives
+
+    Net::FTP=GLOB(0x82196d8)>>> CWD /
+    Net::FTP=GLOB(0x82196d8)<<< 250 CWD command successful.
+
+=head2 I am behind a SOCKS firewall, but the Firewall option does not work ?
+
+The Firewall option is only for support of one type of firewall. The type
+supported is an ftp proxy.
+
+To use Net::FTP, or any other module in the libnet distribution,
+through a SOCKS firewall you must create a socks-ified perl executable
+by compiling perl with the socks library.
+
+=head2 I am behind an FTP proxy firewall, but cannot access machines outside ?
+
+Net::FTP implements the most popular ftp proxy firewall approach. The scheme
+implemented is that where you log in to the firewall with C<user@hostname>
+
+I have heard of one other type of firewall which requires a login to the
+firewall with an account, then a second login with C<user@hostname>. You can
+still use Net::FTP to traverse these firewalls, but a more manual approach
+must be taken, eg
+
+    $ftp = Net::FTP->new($firewall) or die $@;
+    $ftp->login($firewall_user, $firewall_passwd) or die $ftp->message;
+    $ftp->login($ext_user . '@' . $ext_host, $ext_passwd) or die $ftp->message.
+
+=head2 My ftp proxy firewall does not listen on port 21
+
+FTP servers usually listen on the same port number, port 21, as any other
+FTP server. But there is no reason why this has to be the case.
+
+If you pass a port number to Net::FTP then it assumes this is the port
+number of the final destination. By default Net::FTP will always try
+to connect to the firewall on port 21.
+
+Net::FTP uses IO::Socket to open the connection and IO::Socket allows
+the port number to be specified as part of the hostname. So this problem
+can be resolved by either passing a Firewall option like C<"hostname:1234">
+or by setting the C<ftp_firewall> option in Net::Config to be a string
+in in the same form.
+
+=head2 Is it possible to change the file permissions of a file on an FTP server ?
+
+The answer to this is "maybe". The FTP protocol does not specify a command to change
+file permissions on a remote host. However many servers do allow you to run the
+chmod command via the C<SITE> command. This can be done with
+
+  $ftp->site('chmod','0775',$file);
+
+=head2 I have seen scripts call a method message, but cannot find it documented ?
+
+Net::FTP, like several other packages in libnet, inherits from Net::Cmd, so
+all the methods described in Net::Cmd are also available on Net::FTP
+objects.
+
+=head2 Why does Net::FTP not implement mput and mget methods
+
+The quick answer is because they are easy to implement yourself. The long
+answer is that to write these in such a way that multiple platforms are
+supported correctly would just require too much code. Below are
+some examples how you can implement these yourself.
+
+sub mput {
+  my($ftp,$pattern) = @_;
+  foreach my $file (glob($pattern)) {
+    $ftp->put($file) or warn $ftp->message;
+  }
+}
+
+sub mget {
+  my($ftp,$pattern) = @_;
+  foreach my $file ($ftp->ls($pattern)) {
+    $ftp->get($file) or warn $ftp->message;
+  }
+}
+
+
+=head1 Using Net::SMTP
+
+=head2 Why can't the part of an Email address after the @ be used as the hostname ?
+
+The part of an Email address which follows the @ is not necessarily a hostname,
+it is a mail domain. To find the name of a host to connect for a mail domain
+you need to do a DNS MX lookup
+
+=head2 Why does Net::SMTP not do DNS MX lookups ?
+
+Net::SMTP implements the SMTP protocol. The DNS MX lookup is not part
+of this protocol.
+
+=head2 The verify method always returns true ?
+
+Well it may seem that way, but it does not. The verify method returns true
+if the command succeeded. If you pass verify an address which the
+server would normally have to forward to another machine, the command
+will succeed with something like
+
+    252 Couldn't verify <someone@there> but will attempt delivery anyway
+
+This command will fail only if you pass it an address in a domain
+the server directly delivers for, and that address does not exist.
+
+=head1 Debugging scripts
+
+=head2 How can I debug my scripts that use Net::* modules ?
+
+Most of the libnet client classes allow options to be passed to the
+constructor, in most cases one option is called C<Debug>. Passing
+this option with a non-zero value will turn on a protocol trace, which
+will be sent to STDERR. This trace can be useful to see what commands
+are being sent to the remote server and what responses are being
+received back.
+
+    #!/your/path/to/perl
+
+    use Net::FTP;
+
+    my $ftp = new Net::FTP($host, Debug => 1);
+    $ftp->login('gbarr','password');
+    $ftp->quit;
+
+this script would output something like
+
+ Net::FTP: Net::FTP(2.22)
+ Net::FTP:   Exporter
+ Net::FTP:   Net::Cmd(2.0801)
+ Net::FTP:   IO::Socket::INET
+ Net::FTP:     IO::Socket(1.1603)
+ Net::FTP:       IO::Handle(1.1504)
+
+ Net::FTP=GLOB(0x8152974)<<< 220 imagine FTP server (Version wu-2.4(5) Tue Jul 29 11:17:18 CDT 1997) ready.
+ Net::FTP=GLOB(0x8152974)>>> user gbarr
+ Net::FTP=GLOB(0x8152974)<<< 331 Password required for gbarr.
+ Net::FTP=GLOB(0x8152974)>>> PASS ....
+ Net::FTP=GLOB(0x8152974)<<< 230 User gbarr logged in.  Access restrictions apply.
+ Net::FTP=GLOB(0x8152974)>>> QUIT
+ Net::FTP=GLOB(0x8152974)<<< 221 Goodbye.
+
+The first few lines tell you the modules that Net::FTP uses and their versions,
+this is useful data to me when a user reports a defect. The last seven lines
+show the communication with the server. Each line has three parts. The first
+part is the object itself, this is useful for separating the output
+if you are using multiple objects. The second part is either C<<<<<> to
+show data coming from the server or C<&gt&gt&gt&gt> to show data
+going to the server. The remainder of the line is the command
+being sent or response being received.
+
+=head1 AUTHOR AND COPYRIGHT
+
+Copyright (c) 1997 Graham Barr.
+All rights reserved.
+
+=for html <hr>
+
+I<$Id: //depot/libnet/Net/libnetFAQ.pod#6 $>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/NotesCompiler.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,712 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+package NotesCompiler;
+
+use strict;
+use CGI qw(-no_debug :standard start_ul);
+use IniData;
+use RelData;
+use EnvDb;
+use MrpData;
+use IO::File;
+use File::Basename;
+
+
+#
+# Constants.
+#
+
+use constant NOTES_DIREXTENSION => '.RelNotes';
+
+#
+# Public.
+#
+
+sub New {
+  my $pkg = shift;
+  my $self = {};
+  bless $self, $pkg;
+  $self->{iniData} = shift;
+  $self->{comp} = shift;
+  $self->{ver} = shift;
+  $self->{verbose} = shift;
+  $self->{htmlMainFile} = shift;
+  $self->{outputSTDOUTonly} = shift;
+  $self->{htmlNotes} = shift; # flag to render old notes as html or plain text
+  $self->{fh} = undef; # filehandle to write to
+  $self->{envDb} = EnvDb->Open($self->{iniData}, $self->{verbose});
+  # Not using 'use constant' because that requires Utils::PrependEpocRoot to be called at compile-time
+  $self->{notes_store} = Utils::PrependEpocRoot('\\epoc32\\relinfo\\notes'); # constant
+  return $self;
+}
+
+sub DoStandardNotes {
+  my $self = shift;
+  if( !defined ($self->{htmlMainFile} )) {
+    my $filename = $self->{comp}.".".$self->{ver};
+    if ($self->{htmlNotes}) {
+      $filename.=".htmlnotes";
+    } else {
+      $filename.=".textnotes";
+    }
+    $self->{htmlName} = $self->{notes_store} . "\\$filename.html";
+  }
+  else {
+    $self->{htmlName} = $self->{htmlMainFile};
+  }
+  
+  if(!defined ($self->{outputSTDOUTonly})){
+    $self->WriteUnlessAlreadyCompiled(\&PrepareStandardNotes, undef, 1); # sub, filename, cache
+  }
+  else{
+    $self->WriteUnlessAlreadyCompiled(\&PrepareStandardNotes, undef, 0); # sub, filename, cache
+  }
+}
+
+sub DoCompSummary {
+  my $self = shift;
+  if( !defined ($self->{htmlMainFile} )) {
+    $self->{htmlName} = $self->{notes_store} . "\\$self->{comp}.summary.html";
+  }
+  else {
+    $self->{htmlName} = $self->{htmlMainFile};
+  }
+  my $relDataObjects = RelData->OpenSet($self->{iniData}, $self->{comp}, $self->{verbose});
+  @$relDataObjects = grep { $self->PassesFilter($_) } @$relDataObjects;
+  foreach my $thisRelData (@$relDataObjects) {
+    my $ver = $thisRelData->Version();
+    my $htmlName;
+    my $filename = $self->{comp}.".".$ver;
+    if ($self->{htmlNotes}) {
+      $filename.=".htmlnotes";
+    } else {
+      $filename.=".textnotes";
+    }
+    if( !defined ($self->{htmlMainFile}) ) {
+      $htmlName = $self->{notes_store} . "\\$filename.html";
+    }
+    else {
+      $htmlName = $self->{htmlMainFile} . NOTES_DIREXTENSION . "\\$filename.html";
+    }
+    $self->WriteUnlessAlreadyCompiled(\&PrepareStandardNotes, $htmlName, 1, $thisRelData); # sub, filename, cache, @args
+  }
+  $self->WriteUnlessAlreadyCompiled(\&PrepareSummary, undef, 0, $relDataObjects, 1); # sub, filename, cache, @args
+  return $self;
+}
+
+sub DoEnvSummary {
+  my $self = shift;
+  if( !defined ($self->{htmlMainFile} )) {
+    if ($self->{comp} and $self->{ver}) {
+      $self->{htmlName} = $self->{notes_store} . "\\$self->{comp}.$self->{ver}.summary.html";
+    }
+    else {
+      $self->{htmlName} = $self->{notes_store} . "\\current_env_summary.html";
+    }
+  }
+  else {
+    $self->{htmlName} = $self->{htmlMainFile};
+  }
+
+  my $versionInfo;
+  if ($self->{comp} and $self->{ver}) {
+    my $relData = RelData->Open($self->{iniData}, $self->{comp}, $self->{ver}, $self->{verbose});
+    $versionInfo = $relData->Environment();
+  }
+  else {
+    $versionInfo = $self->{envDb}->VersionInfo();
+  }
+
+  my @relData;
+  foreach my $thisComp (sort keys %$versionInfo) {
+    my $thisVer = $versionInfo->{$thisComp};
+    (my $relData, my $preview) = $self->CreateRelData($thisComp, $thisVer);
+    next unless $self->PassesFilter($relData);
+    push (@relData, $relData);
+    my $htmlName;
+    my $filename = $thisComp.".".$thisVer;
+    if ($self->{htmlNotes}) {
+      $filename.=".htmlnotes";
+    } else {
+      $filename.=".textnotes";
+    }
+    if( !defined ($self->{htmlMainFile} )) {
+      $htmlName = $self->{notes_store} . "\\$filename.html";
+    }
+    else {
+      $htmlName = $self->{htmlMainFile} . NOTES_DIREXTENSION . "\\$filename.html";
+    }
+    $self->WriteUnlessAlreadyCompiled(\&PrepareStandardNotes, $htmlName, 1, $relData, $preview); # sub, filename, cache, @args
+  }
+  $self->WriteUnlessAlreadyCompiled(\&PrepareSummary, undef, 0, \@relData); # sub, filename, cache, @args
+  return $self;
+}
+
+sub DoDiffEnvSummary {
+  my $self = shift;
+  my $comp2 = shift;
+  my $ver2 = shift;
+
+  require EnvDifferencer;
+
+  my $comp1 = $self->{comp};
+  my $ver1 = $self->{ver};
+  $comp2 ||= $comp1;
+  $ver2 ||=  $self->{envDb}->VersionInfo()->{$comp2};
+  unless ($ver2) {
+    die "Error: $comp2 not installed in current environment\n";
+  }
+  if( !defined ($self->{htmlMainFile} )) {
+    my $filename = $comp1.".".$ver1.".".$comp2.".".$ver2."-full";
+    if ($self->{htmlNotes}) {
+      $filename.=".htmlnotes";
+    } else {
+      $filename.=".textnotes";
+    }
+    $self->{htmlName} = $self->{notes_store} . "\\$filename.html";
+  }
+  else {
+    $self->{htmlName} = $self->{htmlMainFile};
+  }
+  if(!defined ($self->{outputSTDOUTonly})){
+    $self->WriteUnlessAlreadyCompiled(\&PrepareDiffEnvReport, undef, 1, $comp2, $ver2); # sub, filename, cache, @args
+  }
+  else{
+    $self->WriteUnlessAlreadyCompiled(\&PrepareDiffEnvReport, undef, 0, $comp2, $ver2); # sub, filename, cache, @args
+  }
+}
+
+sub HtmlFileName {
+  my $self = shift;
+  return $self->{htmlName};
+}
+
+sub HtmlMainFile {
+  my $self = shift;
+  return $self->{htmlMainFile};
+}
+
+sub SetProjectFilter {
+  my $self = shift;
+  $self->{filter}->{project} = shift;
+}
+
+sub SetVersionNumberFilter {
+  my $self = shift;
+  $self->{filter}->{versionregex} = shift;
+}
+
+#
+# Private.
+#
+
+sub WriteUnlessAlreadyCompiled {
+  my $self = shift;
+  my $sub = shift;
+  my $filename = shift || $self->{htmlName};
+  my $cache = shift;
+  my @args = @_;
+
+  if ($cache) {
+    return if $self->NotesFileAlreadyCompiled($filename, $self->{comp}, $self->{ver});
+  }
+
+  my $output = $sub->($self, @args);
+ 
+  if (!defined ($self->{outputSTDOUTonly})) {
+    my $fh = $self->OpenFileForWriting($filename);
+    print "FILE LOCATION: $filename\n" if ($self->{verbose});
+    print $fh $output;
+    $fh = undef; # close file
+  }
+  else {
+    print $output;
+  }
+}
+
+sub OpenFileForWriting {
+  my $self = shift;
+  my $filename = shift;
+  Utils::MakeDir(dirname($filename));
+  return new IO::File($filename, "w") or die "Couldn't open file \"$filename\" for writing: $!";
+}
+
+sub PrepareDiffEnvReport {
+  my $self = shift;
+  my $endcomp = shift;
+  my $endver = shift;
+  my $startcomp = $self->{comp};
+  my $startver = $self->{ver};
+
+  $self->{envDb} = EnvDb->Open($self->{iniData}, $self->{verbose});
+
+  my $envDifferencer = EnvDifferencer->New($self->{iniData}, $self->{verbose});
+  $envDifferencer->SetStartCompVer($startcomp, $startver);
+  $envDifferencer->SetEndCompVer($endcomp, $endver);
+
+  my @contentsrows;
+  my $bodies;
+  
+  my $changedcomps = $envDifferencer->ChangedComps();
+  my $i=0;
+  foreach my $comp (sort @$changedcomps) {
+    $i++; # counter for debug output only
+    my $endReldata = $envDifferencer->EndReldata($comp);
+    my $intermediateReldatas = $envDifferencer->IntermediateReldatas($comp);
+    
+    my @allreldatas = (@$intermediateReldatas, $endReldata);
+    @allreldatas = grep { $self->PassesFilter($_) } @allreldatas;
+    print "Processing $comp ($i/".(scalar @$changedcomps)."): ".(scalar @allreldatas)." releases to process\n" if $self->{verbose};
+    next unless @allreldatas;
+
+    my @versions;
+
+    $bodies .= hr . h2(a({name=>$comp},$comp));
+
+    my $firstver;
+    foreach my $reldata (sort { $b->ReleaseTime() <=> $a->ReleaseTime() } @allreldatas) {
+      my $ver = $reldata->Version();
+      my $link = "$comp$ver";
+      if(defined $self->{htmlMainFile})
+        {
+        $link = $self->{htmlMainFile} . NOTES_DIREXTENSION . "/" . $link;
+        }
+      # First add an entry to our contents table
+      push @versions, td(a{href=>"#$link"}, $ver);
+
+      # Now prepare the body itself
+      $bodies .= a({name=>$link}, h3($ver));
+      $bodies .= ul($self->MainBody($reldata, 1)); # 1 = concise
+    }
+    push @contentsrows, Tr(th(a({href=>"#$comp"},$comp)), @versions);
+  }
+
+  my $output = "";
+  $output .= h1("Differences between $startcomp $startver and $endcomp $endver");
+  $output .= h1("Contents");
+  $output .= p("Newer releases are on the left.");
+  $output .= table({border=>1},@contentsrows);
+
+  if(defined $bodies){
+    $output .= $bodies;
+  }
+  
+  return $output;
+}
+
+sub PrepareStandardNotes {
+  my $self = shift;
+  my $relData = shift;
+  my $preview;
+  my $comp;
+  my $ver;
+  if ($relData) {
+    $comp = $relData->Component();
+    $ver = $relData->Version();
+  } else {
+    $comp = $self->{comp};
+    $ver = $self->{ver};
+    ($relData, $preview) = $self->CreateRelData($comp, $ver);
+  }
+  my $output = "";
+
+  if ($self->{verbose}) { print "Compiling release notes for $comp $ver...\n"; }
+
+  if ($preview) {
+    $output .= start_html({-title => "$comp $ver release notes PREVIEW"})
+      .h1({-style=>'Color: red;'}, 'Release Notes Preview'). hr
+      .h1("$comp")
+      .hr;
+  }
+  else {
+    $output .= start_html({-title => "$comp $ver release notes"})
+      .h1("$comp")
+      .hr;
+  }
+
+  $output .= $self->MainBody($relData);
+  $output .= $self->EnvDetails($relData, $preview);
+  $output .= $self->SrcFilterErrors($relData, $preview);
+
+  $output .= end_html();
+ 
+  return $output;
+}
+
+sub PrepareSummary {
+  my $self = shift;
+  my $relDataObjects = shift;
+  my $compSummary = shift;
+
+  my $output = "";
+
+  if ($compSummary) {
+    if ($self->{verbose}) { print "Writing component summary for $self->{comp}...\n"; }
+    $output .= (start_html({-title => "Release note summary for component $self->{comp}"})
+      .h1("Release note summary for component $self->{comp}")
+      .hr);
+  }
+  else {
+    if ($self->{comp} and $self->{ver}) {
+      if ($self->{verbose}) { print "Writing environment summary for $self->{comp} $self->{ver}...\n"; }
+      $output .= (start_html({-title => "Release note summary for environment $self->{comp} $self->{ver}"})
+      .h1("Release note summary for environment $self->{comp} $self->{ver}")
+      .hr);
+    }
+    else {
+      if ($self->{verbose}) { print "Writing environment summary for current environment...\n"; }
+      $output .= (start_html({-title => "Release note summary for the current environment"})
+        .h1("Release note summary for the current environment")
+        .hr);
+    }
+  }
+
+  foreach my $thisRelData (@$relDataObjects) {
+    my $thisVer = $thisRelData->Version();
+    my $thisComp = $thisRelData->Component();
+    my $thisIntVer = $thisRelData->InternalVersion();
+
+    my $link;
+    if ($compSummary) {
+      my $filename = $self->{comp}.".".$thisVer;
+      if ($self->{htmlNotes}) {
+        $filename.=".htmlnotes";
+      } else {
+        $filename.=".textnotes";
+      }
+      $link = "$filename.html";
+    }
+    else {
+      my $filename = $thisComp.".".$thisVer;
+      if ($self->{htmlNotes}) {
+        $filename.=".htmlnotes";
+      } else {
+        $filename.=".textnotes";
+      }
+      $link = "$filename.html";
+    }
+
+    if(defined $self->{htmlMainFile})
+      {
+      $link = $self->{htmlMainFile} . NOTES_DIREXTENSION . "/" . $link;
+      }
+
+    my $caption = $thisVer;
+    if ($thisIntVer) {
+      $caption .= " [$thisIntVer]";
+    }
+    unless ($compSummary) {
+      $caption = "$thisComp $caption";
+    }
+    my $notesSrc = $thisRelData->NotesSource();
+    $output .= a({ -href => $link }, $caption). ' - ';
+    $output .= ("Made by $notesSrc->{releaser} on $notesSrc->{date}");
+    $output .= (p(""));
+  }
+
+  $output .= (end_html());
+  return $output;
+}
+
+sub CreateRelData {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+
+  my $installedVer = $self->{envDb}->Version($comp);
+  my $preview = 0;
+  my $relData;
+  if (defined $installedVer) {
+    if ($ver eq $installedVer) {
+      if ($self->{envDb}->Status($comp) == EnvDb::STATUS_PENDING_RELEASE) {
+        # This release has not yet been made, so preview the notes.
+        $preview = 1;
+        my $intVer = $self->{envDb}->InternalVersion($comp);
+        unless (defined $intVer) {
+          $intVer = ' ';
+        }
+        my $mrpData = MrpData->New($self->{envDb}->MrpName($comp),
+          $ver, $intVer, $self->{iniData}, $self->{verbose});
+          $relData = RelData->New($self->{iniData}, $mrpData,
+          Utils::PrependSourceRoot($mrpData->NotesSource()), $self->{envDb}->VersionInfo(), 'viewnotes', $self->{verbose}, 1);
+      }
+    }
+  }
+  unless (defined $relData) {
+    # This release has already been made, so we can read it's reldata.
+    $relData = RelData->Open($self->{iniData}, $comp, $ver, $self->{verbose});
+  }
+
+  return ($relData, $preview);
+}
+
+sub MainBody {
+  my $self = shift;
+  my $relData = shift;
+  my $concise = shift;
+
+  my $output = "";
+
+  if ($self->{verbose} > 1) {
+    print "Compiling release notes main body for ".$relData->Component()." ".$relData->Version()."...\n";
+  }
+
+  my $notesSrc = $relData->NotesSource();
+  
+  my $release_version = $relData->MadeWithVersion();
+
+  foreach my $key (keys %{$notesSrc}) {
+    my $html_markers;
+    my $note = $notesSrc->{$key};
+    if (ref $note eq 'ARRAY') {
+      $html_markers = $self->CheckHtmlMarkers(join("",@$note));
+    } else {
+      $html_markers = $self->CheckHtmlMarkers($note);
+    }
+    if (!$html_markers) {
+      if (Utils::CompareVers($release_version, "2.83.1013") > 0) {
+        # 'Recent' release: escape html chars
+        $notesSrc->{$key} = $self->EscapeHtmlChars($note);
+      } else {
+        # Old release
+        if (!($self->{htmlNotes})) {
+          # User hasn't set html_notes: escape html chars
+          $notesSrc->{$key} = $self->EscapeHtmlChars($note);
+        }
+      }
+    }
+  }
+  
+  unless ($concise) {
+    my $comp = $relData->Component();
+    my $ver = $relData->Version();
+    my $intVer = $relData->InternalVersion();
+    my $toolsver = $relData->MadeWith();
+    my $sourcecode = $relData->SourceIncluded();
+    my $mrpName = $relData->MrpName();
+    my $project = $self->ComponentProject($comp, $ver);
+    my $envUserName = $relData->EnvUserName() || "";
+    my $firstCompatibleVersion = $relData->FirstCompatibleVersion() || "&lt;unknown&gt;";
+    my $zipsize;
+    eval {
+      $zipsize = $self->{envDb}->GetReleaseSize($relData->Component(), $relData->Version());
+    };
+    $zipsize ||= "-"; # for example, if we're pending release...
+
+    $output .= table({-border=>0}, Tr({-align =>'left'},
+               [td([b('Version'), $ver]),
+          td([b('Internal version'), ($intVer || "&lt;none&gt;")]),
+          td([b('Made by'), $notesSrc->{releaser}]),
+          td([b('Date'), $notesSrc->{date}]),
+          td([b('Made with'), $toolsver]),
+          td([b('Earliest compatible tools'), $firstCompatibleVersion]),
+          td([b('Source included'), tt($sourcecode)]),
+          td([b('Size of release zips'), tt($zipsize)]),
+          td([b('Project storage archive'), $project]),
+          td([b('MRP file used'), tt($mrpName)]),
+          td([b('Environment username'), $envUserName])
+               ]));
+  }
+
+  $output .= hr;
+  $output .= h2("Release Summary");
+  $output .= h3("Reason for release");
+  foreach my $line (@{$notesSrc->{releaseReason}}) {
+    $output .= tt($line). br;
+  }
+  $output .= h3("General release comments");
+  foreach my $line (@{$notesSrc->{generalComments}}) {
+      $output .= tt($line). br;
+  }
+  $output .= h3("Known omissions, deviations and discrepancies");
+  foreach my $line (@{$notesSrc->{knownDeviations}}) {
+      $output .= tt($line). br;
+  }
+  
+  @{$notesSrc->{bugsFixed}} = map tt($_), @{$notesSrc->{bugsFixed}};
+  @{$notesSrc->{bugsRemaining}} = map tt($_), @{$notesSrc->{bugsRemaining}}; 
+  @{$notesSrc->{otherChanges}} = map tt($_), @{$notesSrc->{otherChanges}};
+   
+  $output .= hr;
+  $output .= h2("Bugs fixed");
+  $output .= ul(li($notesSrc->{bugsFixed}));
+  $output .= hr;
+  $output .= h2("Known bugs remaining");
+  $output .= ul(li($notesSrc->{bugsRemaining}));
+  $output .= hr;
+  $output .= h2("Other changes");
+  $output .= ul(li($notesSrc->{otherChanges}));
+  $output .= hr;
+
+  return $output;
+}
+
+sub EscapeHtmlChars {
+  my $self = shift;
+  my $note = shift;
+  
+  my $newnote;
+  if (ref $note eq 'ARRAY') {
+    $newnote = [];
+    foreach my $line (@$note) {
+      my $newline = $line;
+      $newline =~ s/&/&amp;/g;
+      $newline =~ s/</&lt;/g;
+      $newline =~ s/>/&gt;/g;
+      push @$newnote, $newline;
+    }
+  } else {
+    $newnote = $note;
+    $newnote =~ s/&/&amp;/g;
+    $newnote =~ s/</&lt;/g;
+    $newnote =~ s/>/&gt;/g;
+  }
+  return $newnote;
+}
+
+sub CheckHtmlMarkers {
+  my $self = shift;
+  my $note = shift;
+  if ($note =~ /^\s*<\s*html\s*>.*<\s*[\/\\]\s*html\s*>\s*$/i) {
+    # Note begins with <html> and ends with </html> or something along those lines
+    return 1;
+  } else {
+    return 0;
+  }
+}
+
+sub EnvDetails {
+  my $self = shift;
+  my $relData = shift;
+  my $preview = shift;
+
+  my $contents = "";
+
+  if ($preview) {
+    $contents .= h2("Release environment");
+    $contents .= span({-style=>'Color: red;'}, '[not yet known]');
+    $contents .= br();
+  }
+  else {
+    my $env = $relData->Environment();
+    if (defined $env) {
+      $contents .= h2("Release environment");
+      my $tableData;
+      $contents .= p("Number of components: ".(scalar keys %$env));
+      foreach my $comp (sort keys %{$env}) {
+  push (@$tableData, td([b($comp), $env->{$comp}]));
+      }
+      $contents .= table({-border=>0}, Tr({-align =>'left'}, $tableData));
+    }
+  }
+  return $contents;
+}
+
+sub SrcFilterErrors {
+  my $self = shift;
+  my $relData = shift;
+  my $preview = shift;
+  my $notesSrc = $relData->NotesSource();
+
+  my $contents = "";
+
+  if (defined $notesSrc->{srcFilterErrors} and scalar(@{$notesSrc->{srcFilterErrors}}) > 0) {
+    $contents .= hr, h2("Source filter errors");
+    foreach my $errorLine (@{$notesSrc->{srcFilterErrors}}) {
+      $contents .= $errorLine, br();
+    }
+  }
+  return $contents;
+}
+
+sub NotesFileAlreadyCompiled {
+  my $self = shift;
+  my $fileName = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $alreadyCompiled = 0;
+
+  if(!(defined $self->{htmlMainFile})) {
+    if (-e $fileName && $comp && $ver) {
+      my $reldata = $self->{iniData}->PathData->LocalArchivePathForExistingOrNewComponent($comp, $ver) . '\\reldata';
+      if (-e $reldata and Utils::FileModifiedTime($reldata) < Utils::FileModifiedTime($fileName)) {
+        $alreadyCompiled = 1;
+      }
+    }
+  }
+  return $alreadyCompiled;
+}
+
+sub PassesFilter {
+  my $self = shift;
+  my $rd = shift;
+  my $comp = $rd->Component();
+  my $ver = $rd->Version();
+  if ($self->{filter}->{project}) {
+    return 0 unless $self->ComponentProject($comp, $ver) eq $self->{filter}->{project};
+  }
+  if ($self->{filter}->{versionregex}) {
+    my $re = $self->{filter}->{versionregex};
+    return 0 unless $ver =~ m/$re/i;
+  }
+  return 1;
+}
+
+sub ComponentProject {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+
+  return $self->{iniData}->PathData->ComponentProject($comp, $ver);
+}
+
+1;
+  
+__END__
+
+=head1 NAME
+
+NotesCompiler.pm - Compiles a set of release notes into HTML.
+
+=head1 INTERFACE
+
+=head2 New
+
+Expects to be passed an C<IniData> reference, a component name, a version, a verbosity level, an output HTML file name and an output STDOUT only flag. Creates a C<RelData> object for the component release and uses the information contained within it to compile the output HTML file.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Optimisation	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,97 @@
+#!perl
+# Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+=head1 Overview
+
+This document is intended to make suggestions about how the tools can be made to operate quicker.
+
+=head1 Getting releases and baselines
+
+=over 4
+
+=item *
+
+Use the C<required_binaries> directive in your F<reltools.ini> to limit the selection of binaries that are installed.
+
+=item *
+
+Don't use the -s switch on C<GetEnv> to install source code. Use C<GetSource> subsequently to fetch source code for the components you want.
+
+=item *
+
+If you are working over a slow network link, create a local archive on your own PC using the C<PullEnv> commands. List this local cache first in your F<reltools.ini> and the tools will automatically search that archive first, to find any releases you need. This is also useful if you need to work offline.
+
+=back
+
+=head1 Making baselines
+
+=over 4
+
+=item *
+
+If you are making several baselines (for example, one with strong cryptography and one without) or you make a succession of baselines over a period (for example, fortnightly baselines) try to keep releases common to both. For example, if I<viewsrv> has not changed over the course of a fortnight then the new baseline should contain the same component release of viewsrv. Use the C<ValidateEnv> command to check which components you need to release afresh.
+
+=item *
+
+Try to make components as small as possible. Then, on average, fewer parts of the system will need to be transferred/installed for each new baseline. Having said that, small components gives no advantage if they are so interlinked that they always need to be released together.
+
+=back
+
+=head1 Transferring Releases
+
+=over 4
+
+=item *
+
+Again, use C<required_binaries> to restrict which binary platforms are transferred.
+
+=item *
+
+In the export table (F<exportdata.csv>) don't deliver more source code than you have to.
+
+=item *
+
+If you are delivering the same thing to several parties, don't do multiple C<ExportEnv>s. Instead use a single F<exportdata.csv> with everyone's PGP key listed along the top. Then do a single C<ExportEnv>; the files will be encrypted to each PGP key.
+
+=item *
+
+If you have to deliver something to several FTP sites, use the above method and export to a local drive (or a network share). Then, transfer things to each of the FTP sites. This saves on the encryption time and ensures you deliver the same stuff to each party.
+
+=item *
+
+If you have a secure network connection to a third party, then use C<PushEnv> instead of C<ExportEnv>. This eliminates the encryption/decryption stage. But be aware that it does not do source code filtering, so the recipient will be able to see all the source code.
+
+=back
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/PathData.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,289 @@
+# Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+package PathData;
+
+use strict;
+
+#
+# Constructor
+#
+
+sub New {
+  my $pkg = shift;
+  my $verbose = shift;
+  my $self = {};
+  bless $self, $pkg;
+  $self->{verbose} = $verbose;
+  return $self;
+}
+
+#
+# Public
+#
+#
+
+# This function is called by IniData when it comes across an archive_path*
+# line. It will only be called once, because the first thing it does
+# is reclassify this object as a PathData::ComponentBased or a
+# PathData::ProjectBased. Subsequent calls to ProcessLine will therefore
+# call the derived class methods.
+sub ProcessLine {
+  my $self = shift;
+  my $keywordref = shift;
+  my $lineref = shift;
+
+  $self->SubclassifyMyselfByKeyword($keywordref); # make myself a subclass
+  $self->ProcessLine($keywordref, $lineref); 
+      # now ask the subclass to process the line
+}
+
+sub LocalArchivePathForExistingOrNewComponent {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $project = shift;
+  my $result = $self->LocalArchivePathForExistingComponent($comp, $ver, $project);
+  $result ||=  $self->LocalArchivePathForNewComponent($comp, $ver, $project);
+  return $result;
+}
+
+sub LocalArchivePathForNewOrExistingComponent {
+  die "You meant LocalArchivePathForExistingOrNewComponent... teehee";
+}
+
+# These methods must all be reimplemented by the subclass
+sub LocalArchivePathForNewComponent {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $project = shift;
+  die "No path data found in reldata.ini. Cannot provide local archive path for new component.\n";
+}
+
+sub LocalArchivePathForExistingComponent {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  die "No archive found in reldata.ini. Cannot provide local archive path for existing component.\n";
+}
+
+sub LocalArchivePathForImportingComponent {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $remotepath = shift;
+  die "No path data found in reldata.ini. Cannot provide local archive path for importing component.\n";
+}
+
+sub RemoteArchivePathForExistingComponent {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  die "No path data found in reldata.ini. Cannot provide remote archive path for existing component.\n";
+}
+
+sub RemoteArchivePathForExportingComponent {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $localpath = shift;
+  die "No path data found in reldata.ini. Cannot provide remote archive path for exporting component.\n";
+}
+
+sub ListComponents {
+  my $self = shift;
+  die "No path data found in reldata.ini. Cannot return list of components.\n";
+}
+
+sub ListVersions {
+  my $self = shift;
+  my $comp = shift;
+  my $filter = shift;
+  die "No path data found in reldata.ini. Cannot return a list of versions.\n";
+}
+
+sub ListProjects {
+  my $self = shift;
+  die "No path data found in reltools.ini. Cannot return list of projects.\n";
+}
+
+sub ComponentProjects {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  die "No path data found in reldata.ini. Cannot return which project a component belongs to.\n";
+}
+
+sub ComponentProject {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  die "No path data found in reldata.ini. Cannot return which project a component belongs to.";
+}
+
+sub ReleaseExists {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+
+  my $relDir = $self->LocalArchivePathForExistingComponent($comp, $ver);
+  if ($relDir && -e $relDir) {
+    return 1;
+  }
+  return 0;
+}
+
+sub CheckReleaseExists {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+
+  unless ($self->ReleaseExists($comp, $ver)) {
+    die "Error: $comp $ver not found\n";
+  }
+}
+
+
+#
+# Private
+#
+#
+
+sub SubclassifyMyselfByKeyword {
+  my $self = shift;
+  my $keywordref = shift;
+
+  if ($$keywordref =~ m/archive_path_file/i) {
+    require PathData::ComponentBased;
+    bless ($self, "PathData::ComponentBased");
+  } elsif ($$keywordref =~ m/archive_path/i) {
+    require PathData::ProjectBased;
+    bless ($self, "PathData::ProjectBased");
+  } else {
+    die "Unknown archive_path related keyword: ".$$keywordref."\n";
+  }
+  print "Using ".(ref $self)." type of archive path arrangement. Keyword was $$keywordref\n" if ($self->{verbose});
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+PathData.pm - Provides the location of archived releases.
+
+=head1 DESCRIPTION
+
+Provides a class to represent knowledge of the archive structure. The class is mostly abstract; however, an object of this class may exist temporarily before it converts itself to a subclass.
+
+=head1 INTERFACE
+
+=head2 New
+
+Expects to be passed a verbosity flag.
+
+=head2 ProcessLine
+
+Processes a line from the C<reltools.ini> file. This will cause the object to bless itself into a subclass, depending on the keyword, then it will ask the subclass to process the line.
+
+=head2 LocalArchivePathForExistingOrNewComponent
+
+This method returns C<LocalArchivePathForExistingComponent>, or failing that, C<LocalArchivePathForNewComponent>.
+
+=head2 ComponentProject
+
+This returns the first item returned by the subclass method C<ComponentProjects>.
+
+=head2 Methods to be implemented by the subclass
+
+All the remaining methods should be implemented by the subclass of the C<PathData>. All of these methods are expected to return the full location where the files should be stored; i.e. local archive paths should end in "\component\version" and remote archive paths should end in "/component".
+
+=head2 LocalArchivePathForNewComponent
+
+This takes a component and a version and (optionally) the name of the project to store the component in.
+
+=head2 LocalArchivePathForExistingComponent
+
+This takes a component and a version.
+
+=head2 LocalArchivePathForImportingComponent
+
+This takes a component, a version, and the remote path where the component was found.
+
+=head2 RemoteArchivePathForExistingComponent
+
+This takes a component, a version and a C<RemoteSite> object.
+
+=head2 RemoteArchivePathForExportingComponent
+
+This takes a component, a version, and the local path where the component was found.
+
+=head2 ListComponents
+
+This may take "1" to indicate that it should list the components stored remotely, not locally.
+
+=head2 ListVersions
+
+This takes a component. It may optionally take a "1" to indicate that it should list the versions stored remotely, not locally. The third parameter is also optional; a regular expression that can be applied to filter the list of versions that is returned.
+
+=head2 ListProjects
+
+=head2 ComponentProjects
+
+This takes a component and a version and returns the project name of all archives where the release is found.
+
+=head2 ComponentProject
+
+This takes a component name and a version and returns the project name of the first archive where the release is found.  It gives the corresponding project name to the path that LocalArchivePathForExistingComponent gives for the same arguments.
+
+=head2 ReleaseExists
+
+Takes a component name and a version number. Return true if the component release is present in the local archive, false otherwise.
+
+=head2 CheckReleaseExists
+
+Takes a component name and a version number. Dies if the component release is not present in the local archive.
+
+=head1 IMPLEMENTATION
+
+=head2 SubclassifyMyselfByKeyword
+
+This will convert the object to either a C<PathData::ProjectBased> or C<PathData::ComponentBased> depending on the keyword passed in.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/PathData/ComponentBased.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,344 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# PathData/ComponentBased.pm
+#
+
+package PathData::ComponentBased;
+use strict;
+
+BEGIN {
+  @PathData::ComponentBased::ISA=('PathData');
+};
+
+#
+# Public
+#
+#
+
+sub ProcessLine {
+  my $self = shift;
+  my $keywordref = shift;
+  my $lineref = shift;
+
+  die "Unknown keyword $$keywordref for component-based path data" unless ($$keywordref =~ m/archive_path_file/i);
+  print "Warning: Deprecated keyword 'archive_path_file' found.  Support for component-based archives is planned for removal - please see documention for the 'archive_path' keyword for how to use project-based archives.\n"; 
+
+  die "Can't have multiple archive_path_file keywords in reltools.ini." if ($self->{archive_path_file});
+
+  $self->{archive_path_file} = $$lineref; # store the filename, just in case anybody wants to debug us - it might be useful.
+  $self->ParsePathData();
+}
+
+sub LocalArchivePathForNewComponent {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $project = shift;
+  die "Project $project does not make any sense when we are using an archive_path_data.txt file";
+  return $self->LocalArchivePath($comp, $ver);
+}
+
+sub LocalArchivePathForExistingComponent {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  return $self->LocalArchivePath($comp, $ver);
+}
+
+sub LocalArchivePathForImportingComponent {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $remotepath = shift;
+  return $self->LocalArchivePath($comp, $ver);
+}
+
+sub RemoteArchivePathForExistingComponent {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  return $self->RemoteArchivePath($comp, $ver);
+}
+
+sub RemoteArchivePathForExportingComponent {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $localpath = shift;
+  return $self->RemoteArchivePath($comp, $ver);
+}
+
+sub ListComponents {
+  my $self = shift;
+  my $remote = shift || 0;
+  my @comps;
+  if ($remote) { # list those in the remote archive
+    die "Must pass a remote site object to ListComponents if you want a list of the components on the remote site" unless ref $remote;
+    foreach my $location (values %{$self->{remote_archive_path}}) {
+      my $list = $remote->DirList($location);
+      $location =~ s/\\/\//g;
+      foreach (@$list) {
+        s/^$location\/?//i;
+        push @comps, $_;
+      }
+    }
+  } else { # list those in the local archive
+    foreach my $location (values %{$self->{local_archive_path}}) {
+      push @comps, @{Utils::ReadDir($location)} if (-d $location);
+    }
+  }
+  return \@comps;
+}
+
+sub ListProjects {
+  my $self = shift;
+  die "Cannot give a list of projects because we are using the component-based style of archive path data.";
+}
+
+sub ListVersions {
+  my $self = shift;
+  my $comp = shift;
+  my $remote = shift;
+  my $filter = shift;
+  my $found;
+  if ($remote) { # list those in the remote archive
+    die "Must pass a remote site object to ListVersions if you want a list of the versions on the remote site" unless ref $remote;
+    my $compDir = $self->GetArchivePath($comp, "remote_archive_path")."/$comp";
+    my $files = $remote->DirList($compDir);
+    my @results = map { m/\Q$comp\E([^\\\/]*)\.zip/i; $1 } @$files;
+    $found = \@results;
+  } else { # list those in the local archive
+    my $compDir = $self->GetArchivePath($comp, "local_archive_path")."\\$comp";
+    return [] unless (-d $compDir);
+    $found = Utils::ReadDir($compDir);
+  }
+  @$found = grep { m/$filter/i } @$found if ($filter);
+  return @$found if wantarray;
+  return $found;
+}
+
+sub ComponentProjects {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  return ("<n/a>");
+}
+
+sub ComponentProject {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  return ("<n/a>");
+}
+
+#
+# Private
+#
+#
+#
+
+sub GetArchivePath {
+  my $self = shift;
+  my $component = lc(shift);
+  my $type = shift;
+
+  die "Couldn't get archive path for undefined component" unless defined $component;
+  die unless defined $type;
+
+  if ($self->{$type}->{$component}) {
+    return $self->{$type}->{$component};
+  }
+  elsif ($self->{$type}->{default}) {
+    return $self->{$type}->{default};
+  }
+  else {
+    die "Error: archive path not specified for $component\n";
+  }
+}
+
+sub LocalArchivePath {
+  my $self = shift;
+  my $component = shift;
+  my $ver = shift;
+
+  return $self->GetArchivePath($component, "local_archive_path")."\\$component\\$ver";
+}
+
+sub RemoteArchivePath {
+  my $self = shift;
+  my $component = shift;
+  my $ver = shift;
+
+  return $self->GetArchivePath($component, "remote_archive_path")."/$component";
+}
+
+sub ParsePathData {
+  my $self = shift;
+
+  my $path_file = $self->{archive_path_file};
+  
+  unless (-f $path_file) {
+    die "Error: $path_file not found\n";
+  }    
+  
+  open PATH, "$path_file" or die "Unable to open $path_file for reading\n";
+
+  while (my $line = <PATH>) {
+    # Remove line feed, white space and comments.	   
+    chomp $line;
+    $line =~ s/^\s*$//;
+    $line =~ s/#.*//;
+    if ($line eq '') {
+      # Nothing left.
+      next;
+    }
+    my ($component, $local, $remote) = split (/\s+/, $line, 4);
+    $component = lc($component);
+    unless ($local and $remote) {
+      die "Error: Path not defined for \"$component\" in \"$path_file\"\n";
+    }
+    if (exists $self->{local_archive_path}->{$component}) {
+      die "Error: \"$component\" specified more than once in \"$path_file\"\n";
+    }
+    $self->{local_archive_path}->{$component} = $local;
+    $self->{remote_archive_path}->{$component} = $remote;   
+  }  
+  close PATH;
+}
+
+
+1;
+
+__END__
+
+=head1 NAME
+
+PathData/ComponentBased.pm - Provides the location of archived releases with an old-style archive arrangement.
+
+=head1 DESCRIPTION
+
+Parses a file containing paths to component release packets on both the local and remote archives.
+
+=head1 INTERFACE
+
+=head2 ProcessLine
+
+This interprets an C<archive_path_file> line from your F<reltools.ini>, and goes away to parse the F<archive_path.txt> file (which it does using the internal method C<ParsePathData>).
+
+The parser expects each line in the file to have the following form: 
+ 
+ <component_name>  <local_archive_path>  <remote_archive_path>
+
+So an example file might have the following structure:
+
+ #
+ # App Engines
+ #
+ agnmodel     X:\ProjectX\appeng      \ProjectX\appeng
+ cntmodel     X:\ProjectX\appeng      \ProjectX\appeng
+ damodel      X:\ProjectX\appeng      \ProjectX\appeng
+ ...
+ ...
+ #
+ # App Framework
+ #
+ apparc       X:\ProjectX\appframework      \ProjectX\appframework
+ eikstd       X:\ProjectX\appframework      \ProjectX\appframework
+ etext        X:\ProjectX\appframework      \ProjectX\appframework
+ ...
+ ...
+ #
+ # Default path
+ #
+ default      X:\ProjectX\misc       \ProjectX\misc
+
+The C<default> line is optional (and there should be only one in the file). The C<default> value is the path given to all component releases which are not explicity listed in the file.
+
+[Note: text following a # is treated as a comment]   
+
+=head2 Methods that return paths
+
+All of these methods are expected to return the full location where the files should be stored; i.e. local archive paths should end in "\component\version" and remote archive paths should end in "/component".
+
+=head2 LocalArchivePathForNewComponent
+
+This takes a component and a version and (optionally) the name of the project to store the component in.
+
+=head2 LocalArchivePathForExistingComponent
+
+This takes a component and a version.
+
+=head2 LocalArchivePathForImportingComponent
+
+This takes a component, a version, and the remote path where the component was found.
+
+=head2 RemoteArchivePathForExistingComponent
+
+This takes a component and a version.
+
+=head2 RemoteArchivePathForExportingComponent
+
+This takes a component, a version, and the local path where the component was found.
+
+=head2 ListComponents
+
+This may take "1" to indicate that it should list the components stored remotely, not locally. 
+
+=head2 ListVersions
+
+This takes a component. It may optionally take a "1" to indicate that it should list the versions stored remotely, not locally.
+
+=head2 ListProjects
+
+=head2 ComponentProjects
+
+=head2 ComponentProject
+
+These methods all throw an error, since projects aren't a relevant concept in this type of archive structure.
+
+=head1 IMPLEMENTATION
+
+=head2 LocalArchivePath
+
+Takes a component name. Returns the path of the component release packet on the local archive. Dies if not found.
+
+=head2 RemoteArchivePath
+
+Takes a component name. Returns the path of the component release packet on the remote archive (either an FTP site or a network drive). Dies if not found.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/PathData/ProjectBased.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,485 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# PathData/ProjectBased.pm
+#
+
+package PathData::ProjectBased;
+use Utils;
+use Carp;
+use File::Spec;
+use strict;
+
+BEGIN {
+  @PathData::ProjectBased::ISA=('PathData');
+};
+
+#
+# Public
+#
+#
+
+sub ProcessLine {
+  my $self = shift;
+  my $keywordref = shift;
+  my $lineref = shift;
+
+  die "Unknown keyword $$keywordref for project-based path data" unless ($$keywordref =~ m/archive_path/i);
+  $$lineref =~ m/(\S+)\s+(\S+)(?:\s+(\S*))?/ or die "Error: Couldn't cope with archive path arguments \"$$lineref\": possibly the wrong number of arguments?\n";
+  my $entry = {
+    'name' => lc $1,
+    'local' => $2,
+    'remote' => $3
+  };
+ 
+
+  $self->{project_paths} ||= []; # I know this line is redundant, but I prefer explicitness :-)
+  die "You cannot have multiple archive_path lines with the same project name (".$entry->{name}.")" if (grep { $_->{name} eq $entry->{'name'} } @{$self->{project_paths}});
+  # You are allowed to have multiple lines with the same local and/or remote path lines,
+  # but it ain't necessarily a good plan.
+  push @{$self->{project_paths}}, $entry;
+}
+
+sub LocalArchivePath {
+  my $self = shift;
+  my $project = shift;
+  my $result;
+  $self->BasicChecks();
+
+  if(defined $project){
+    $self->CheckProject($project);
+    $result = $self->FindEntry("name", $project);
+  }
+  else{
+    $result = $self->FindEntryWithSub(sub { -d ($_->{'local'})});
+  }
+  
+  return undef unless $result;
+  print "Existing component stored at $result\n" if ($self->{verbose});
+  return $result->{'local'};
+}
+
+sub LocalArchivePathForNewComponent {
+  my $self = shift;
+  my $comp = shift || confess "No component provided";
+  my $ver = shift || confess "No version provided";
+  my $project = shift;
+  $self->BasicChecks();
+
+  my $result;
+  if (defined $project) {
+    $self->CheckProject($project);
+    $result = $self->FindEntry("name", $project);
+  } else {
+    $result = $self->{project_paths}->[0];
+  }
+  die "Error: No archive paths found\n" unless $result; # should never happen due to BasicChecks
+  $self->CreateLocalDirectory($result);
+  $result = $result->{'local'};
+  print "New component being stored at $result\n" if ($self->{verbose});
+  return $result . "\\$comp\\$ver";
+}
+
+sub LocalArchivePathForExistingComponent {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $project = shift;
+  
+  my $result;
+  
+  $self->BasicChecks();
+  confess "Component name undefined" unless defined $comp;
+  confess "Version number undefined" unless defined $ver;
+
+  if(defined $project){
+    $self->CheckProject($project);
+    $result = $self->FindEntry("name", $project);
+  }
+  else{
+    $result = $self->FindEntryWithSub(sub { -d ($_->{'local'}.'\\'.$comp.'\\'.$ver)});
+  }
+  
+  return undef unless $result;
+  print "Existing component stored at $result\n" if ($self->{verbose});
+  return $result->{'local'} . "\\$comp\\$ver";
+}
+
+sub LocalArchivePathForImportingComponent {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $remotepath = shift; 
+  $self->BasicChecks();
+  confess "Component name undefined" unless defined $comp;
+  confess "Version number undefined" unless defined $ver;
+  $remotepath =~ s/(.*)\/.*/$1/;
+  my $result = $self->FindEntry("remote", $remotepath);
+  $self->CreateLocalDirectory($result);
+  die "Couldn't find the remote project directory $remotepath where component $comp is being imported from." unless defined $result;
+  return $result->{'local'} . "\\$comp\\$ver";
+}
+
+sub RemoteArchivePathForExistingComponent {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $remotesite = shift; # we must get passed a remote site object
+
+  $self->CheckRemoteSites();
+
+  $self->BasicChecks();
+  confess "Component name undefined" unless defined $comp;
+  confess "Version number undefined" unless defined $ver;
+  confess "No remote site object was provided" unless (ref $remotesite);
+  die "Component name undefined" unless defined $comp;
+  my %checked;
+  my $result = $self->FindEntryWithSub(sub {
+     return undef unless $_->{'remote'}; # skip those with no remote path
+     return undef if $checked{$_->{'remote'}}; # already checked this remote path
+     $checked{$_->{'remote'}} = 1;
+     $remotesite->FileExists($_->{'remote'}."/$comp/$comp$ver.zip"
+   )});
+  return undef unless defined $result;
+  $result = $result->{remote};
+  return $result . "/$comp";
+}
+
+sub RemoteArchivePathForExportingComponent {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $localpath = shift;
+
+  $self->CheckRemoteSites();
+
+  $localpath =~ s/(.*)[\/\\].*?[\/\\].*?$/$1/; # remove last two path segments
+  $self->BasicChecks();
+  confess "Component name undefined" unless defined $comp;
+  my $result = $self->FindEntry("local", $localpath);
+  die "Couldn't find the local project directory $localpath where component $comp is being exported from." unless (defined $result);
+  die "Error: The archive ".$result->{name}." does not have a remote path listed in reltools.ini" unless (defined $result->{remote});
+  return $result->{remote} . "/$comp";
+}
+
+sub ListComponents {
+  my $self = shift;
+  my $remote = shift || 0;
+  my $continue = shift || 0;
+  # This returns a list of the components we have locally or remotely.
+  
+  my $archiveExists;
+  
+  $self->BasicChecks();
+  my @list;
+  if ($remote) { # list remote archive
+    $self->CheckRemoteSites();
+    die "Need a remote site object" unless (ref $remote);
+    foreach (map { $_->{'remote'} } @{$self->{project_paths}}) {
+      next unless $remote->DirExists($_);
+      $archiveExists = 1;
+      my $rawlist = $remote->DirList($_);
+      if ($rawlist) {
+        push @list, grep { !m/^\./ } map { s/.*[\\\/]//; $_ } @$rawlist;
+      }
+    }
+  } else { # list local archive
+    foreach (map { $_->{'local'} } @{$self->{project_paths}}) {
+      if (!-d $_) {
+        if ($continue) {
+          next;
+        }		
+        die "Project path $_ does not correspond to a real directory" ;
+      }
+      
+      $archiveExists = 1;
+      
+      opendir LISTHANDLE, $_;
+      push @list, grep { !/^\./ } readdir LISTHANDLE;
+      closedir LISTHANDLE;
+    }
+  }
+  
+  if (!$archiveExists) {
+    warn "Warning: The archive path locations specified in your reltools.ini do not exist\n";
+  }
+    
+  # Now unique-ify list as per Perl Cookbook recipe
+  my %seen;
+  @list = grep { ! $seen{$_} ++ } @list;
+
+  return @list if wantarray;
+  return \@list;
+}
+
+sub ListProjects {
+  my $self = shift;
+  $self->BasicChecks();
+  my @results = map { $_->{name} } @{$self->{project_paths}};
+  return @results if wantarray;
+  return \@results;
+}
+
+sub ListVersions {
+  my $self = shift;
+  my $comp = shift;
+  my $remote = shift || 0;
+  my $filter = shift;
+  my $latestverFilter = shift;
+  $self->BasicChecks();
+
+  my $archiveExists;
+
+  confess "Component name undefined" unless defined $comp;
+  my @found;
+  if ($remote) {
+    $self->CheckRemoteSites();
+    die "Need a remote site object" unless (ref $remote);
+    foreach (map { $_->{'remote'} } @{$self->{project_paths}}) {
+      my $dir = "$_/$comp";
+      next unless $remote->DirExists($dir);
+      $archiveExists = 1;
+      my $files = $remote->DirList($dir);
+      push @found, grep { $_ } map { m/.*(?:^|\\|\/)\Q$comp\E[\\\/]\Q$comp\E(.*?)\.zip$/i; $1 } @$files;
+    }
+  } else {
+    foreach (map { $_->{'local'} } @{$self->{project_paths}}) {
+      if (-e $_) {
+        $archiveExists = 1;
+      }
+      
+      my $dir = "$_\\$comp";
+      if (-d $dir) {
+        foreach my $entry (@{Utils::ReadDir($dir)}) {
+          if (-d File::Spec->catdir($dir, $entry)) {
+            push @found, $entry;
+          }
+        }
+      }
+    }
+  }
+  
+  if (!$archiveExists) {
+    warn "Warning: The archive path locations specified in your reltools.ini do not exist\n";
+  }
+  
+  # Now unique-ify list as per Perl Cookbook recipe
+  my %seen;
+  @found = grep { ! $seen{$_} ++ } @found;
+
+  # The filter regexes may have been compiled, here we uncompile them
+  $latestverFilter =~ s/^\(\?[-imsx]*:(.*)\)$/$1/i if ($latestverFilter);
+  $filter =~ s/^\(\?[-imsx]*:(.*)\)$/$1/i if ($filter);
+           
+  # Now apply a filter to the list
+  @found = grep { ! m/$latestverFilter/i } @found if ($latestverFilter);
+  @found = grep { m/$filter/i } @found if ($filter);
+  return @found if wantarray;
+  return \@found;
+}
+
+sub ComponentProjects {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+
+  confess "Component name undefined" unless defined $comp;
+  confess "Version number undefined" unless defined $ver;
+  $self->BasicChecks();
+  my @results = $self->FindEntriesWithSub(sub {
+    -d ($_->{local}."\\$comp\\$ver")
+  });
+  return map {$_->{name}} @results; 
+}
+
+sub ComponentProject {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+
+  confess "Component name undefined" unless defined $comp;
+  confess "Version number undefined" unless defined $ver;
+  $self->BasicChecks();
+  my $archive = $self->FindEntryWithSub(sub {
+    -d ($_->{local}."\\$comp\\$ver")
+  });
+
+  if (defined $archive) {
+    return $archive->{name};
+  } else {
+    return "<none>";
+  }
+}
+
+#
+# Private
+#
+
+sub BasicChecks {
+  my $self = shift;
+  die "No project paths are defined" unless ($self->{project_paths});
+}
+
+sub CheckProject {
+  my $self = shift;
+  my $project = shift;
+
+  die "Project \"$project\" unknown" unless $self->FindEntry("name", $project);
+}
+
+sub FindEntry {
+  my $self = shift;
+  my $type = shift;
+  my $what = shift;
+
+  return ($self->FindEntries($type, $what))[0];
+}
+
+sub FindEntries {
+  my $self = shift;
+  my $type = shift;
+  my $what = shift;
+
+  return $self->FindEntriesWithSub(sub { lc $_->{$type} eq lc $what });
+}
+
+sub CreateLocalDirectory {
+  my $self = shift;
+  my $entry = shift;
+  if (-e $entry->{'local'}) {
+    die "Error: Local archive path ".$entry->{'local'}." is not a directory\n" unless (-d _);
+  } else {
+    print "Warning: creating local archive path ".$entry->{local}."\n";
+    Utils::MakeDir($entry->{'local'});
+  }
+}
+
+sub FindEntryWithSub {
+  my $self = shift;
+  my $checksub = shift;
+  my $projectPath;
+  
+  foreach (@{$self->{project_paths}}) {
+    if (&$checksub) {
+      $projectPath = $_;
+      last;
+    }
+  }
+
+  return $projectPath;
+} 
+
+sub FindEntriesWithSub {
+  my $self = shift;
+  my $checksub = shift;
+
+  return grep { &$checksub } @{$self->{project_paths}};
+}
+
+sub CheckRemoteSites {
+  my $self = shift;
+  my $hasRemoteSite = 0;
+  
+  foreach my $project (@{$self->{project_paths}}) {
+    $hasRemoteSite = 1 if ($project->{remote}); 
+  }
+  
+  die "Error: No remote sites are defined in your reltools.ini\n" if (!$hasRemoteSite);
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+PathData/ProjectBased.pm - Provides the location of archived releases with a new-style archive structure.
+
+=head1 DESCRIPTION
+
+A subclass of C<PathData>, provides the understanding of the new-style archive path structure and returns information on where to store releases, and where existing releases are stored.
+
+=head1 INTERFACE
+
+The abstract methods of C<PathData> are implemented.
+
+=head2 LocalArchivePathForNewComponent
+
+This takes a component and a version and (optionally) the name of the project to store the component in.
+
+=head2 LocalArchivePathForExistingComponent
+
+This takes a component, version and optionally a project. 
+
+=head2 LocalArchivePathForImportingComponent
+
+This takes a component, a version, and the remote path where the component was found.
+
+=head2 RemoteArchivePathForExistingComponent
+
+This takes a component, a version and a C<RemoteSite> object.
+
+=head2 RemoteArchivePathForExportingComponent
+
+This takes a component, a version, and the local path where the component was found.
+
+=head2 ListComponents
+
+This takes a remote and continue flag. The remote flag when set as "1" is used to indicate that it should list the components stored remotely, not locally. The continue flag when set as "1" is used to indicate that the script should continue regardless of any problems found with regards to the paths set.
+
+=head2 ListVersions
+
+This takes a component. It may optionally take a "1" to indicate that it should list the versions stored remotely, not locally. The third parameter is also optional; it's a Perl-syntax pattern match for the versions.
+
+=head2 ListProjects
+
+=head2 ComponentProjects
+
+This takes a component and a version and returns the project name of all archives where the release is found.
+
+=head2 ComponentProject
+
+This takes a component name and a version and returns the project name of the first archive where the release is found.  It gives the corresponding project name to the path that LocalArchivePathForExistingComponent gives for the same arguments.
+=head2 ProcessLine
+
+This processes a line from the F<reltools.ini>.
+
+=head1 IMPLEMENTATION
+
+This object has a data member, C<project_paths>, which is an array of the project descriptions found in the F<reltools.ini>. Each line is stored as a hash struct, with keys "name", "local" and "remote". It's filled in by C<ProcessLine>, and used by all the other methods via a variety of subroutines which check the contents of this array.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/PrepEnv	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,366 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use Utils;
+use PrepRel;
+use CommandController;
+
+
+#
+# Constants.
+#
+
+use constant UPDATED => 0;
+use constant UNCHANGED => 1;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $newMrpName;
+my $inputFile;
+my $comp;
+my $ver;
+my $intVer;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'PrepEnv');
+my $envDb;
+my $mode;
+my $samemrps;
+my $fixedIntVer;
+my $printlatestversion;
+my $skipPendingRelease;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+PrepEnv();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions("h" => \$help, "v+" => \$verbose, "m" => \$samemrps, "i=s" => \$fixedIntVer, "l" => \$printlatestversion, "p" => \$skipPendingRelease);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $inputFile = shift @ARGV;
+
+  unless ($#ARGV == -1) {
+    print "Error: Invalid number of arguments\n";
+    Usage(1);
+  }
+  if ($printlatestversion && $inputFile) {
+    print "Error: can't use -l with an input file\n";
+    Usage(1);
+  }
+  if ($skipPendingRelease && $inputFile) {
+    print "Error: can't use -p with an input file\n";
+    Usage(1);
+  }
+
+  $envDb = EnvDb->Open($iniData, $verbose);
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: prepenv [options] [<input_file_name>]
+
+options:
+
+-h  help
+-v  verbose output (-vv very verbose)
+-m          don't query for MRP location (assume same as previously)
+-i <number> use this internal version number for each component
+
+Options only valid in interactive mode:
+-l          print latest version number
+-p          skip those components that are pending release
+
+Note: if prepenv is failing to recognise some components are dirty,
+run 'envinfo -f' then run 'prepenv' again.\n");
+}
+
+sub PrepEnv {
+  if (defined $inputFile) {
+    HandleInputFile();
+  }
+  else {
+    HandleInteractive();
+  }
+}
+
+sub HandleInputFile {
+  open (IN, $inputFile) or die "Error: Couldn't open $inputFile: $!\n";
+  my $numEntriesUpdated = 0;
+  my $numEntriesAdded = 0;
+  my $numErrors = 0;
+  my $lineNum = 0;
+  while (my $line = <IN>) {
+    ++$lineNum;
+    # Remove line feed, white space and comments.
+    chomp $line;
+    $line =~ s/^\s*$//;
+    $line =~ s/#.*//;
+    if ($line eq '') {
+      # Nothing left.
+      next;
+    }
+
+    local @ARGV;
+    @ARGV = split (/\s+/, $line);
+    my $mrpName;
+    GetOptions("m=s" => \$mrpName);
+    (my $comp, my $ver, my $intVer) = @ARGV;
+    unless (defined $comp and defined $ver and $#ARGV <= 2) {
+      die "Error: Line $lineNum contains invalid arguments in \"$inputFile\"\n";
+    }
+    $intVer ||= undef;
+    $mrpName ||= undef;
+    if (!defined $mrpName && $samemrps) {
+      eval {
+        $mrpName = $envDb->MrpName($comp);
+      };
+      if ($@) {
+        die "Error: Could not get MRP location for \"$comp\", because $@\n";
+      }
+    }
+    if (!defined $intVer && $fixedIntVer) {
+      $intVer = $fixedIntVer;
+    }
+    my $updating = $envDb->Version($comp);
+    if ($verbose) {
+      if (defined $updating) {
+	print "Updating $comp $ver...\n";
+      }
+      else {
+	print "Adding $comp $ver...\n";
+      }
+    }
+    eval {
+      PrepRel::PrepRel($iniData, $envDb, $comp, $ver, $intVer, $mrpName);
+    };
+    if ($@) {
+      print $@;
+      ++$numErrors;
+    }
+    elsif (defined $updating) {
+      ++$numEntriesUpdated;
+    }
+    else {
+      ++$numEntriesAdded;
+    }
+  }
+  close (IN);
+  print "$numEntriesAdded component(s) added, $numEntriesUpdated component(s) updated, $numErrors error(s)\n";
+}
+
+sub HandleInteractive {
+  my $verInfo = $envDb->VersionInfo();
+  my $numUpdatedEntries = 0;
+  my $numUnchangedEntries = 0;
+  foreach my $thisComp (sort keys %{$verInfo}) {
+    my $thisStatus = $envDb->Status($thisComp);
+    if ($thisStatus == EnvDb::STATUS_DIRTY or $thisStatus == EnvDb::STATUS_DIRTY_SOURCE or ($thisStatus == EnvDb::STATUS_PENDING_RELEASE && !$skipPendingRelease)) {
+      my $action = DoInteraction($thisComp, $verInfo->{$thisComp});
+      if ($action == UPDATED) {
+        ++$numUpdatedEntries;
+      }
+      else {
+        ++$numUnchangedEntries;
+      }
+    }
+  }
+  print "$numUpdatedEntries component(s) updated, $numUnchangedEntries component(s) unchanged\n";
+  if ($numUpdatedEntries + $numUnchangedEntries == 0) {
+    my $pendingReleaseString = $skipPendingRelease?"":" or pending release";
+    print <<ENDGIBBER;
+No components appeared dirty$pendingReleaseString. If you were expecting to see more dirty 
+components, run 'envinfo -f' then run prepenv again.
+ENDGIBBER
+  }
+}
+
+sub DoInteraction {
+  my $comp = shift;
+  my $ver = shift;
+  my $modified = 0;
+
+  ShowLatestVer($comp) if $printlatestversion;
+
+  print "$comp version [$ver] ";
+
+  my $newVer = <STDIN>;
+  chomp $newVer;
+  if ($newVer) {
+    $modified = 1;
+  }
+  else {
+    undef $newVer;
+  }
+
+  my $newIntVer;
+  if ($fixedIntVer) {
+    $newIntVer = $fixedIntVer;
+  } else {
+    my $intVer = $envDb->InternalVersion($comp);
+    print "$comp internal version ";
+    if (defined $intVer and !defined $newVer) {
+      print "[$intVer] ";
+    }
+    $newIntVer = <STDIN>;
+    chomp $newIntVer;
+    if ($newIntVer) {
+      $modified = 1;
+    }
+    else {
+      undef $newIntVer;
+    }
+  }
+
+  my $mrpName = $envDb->MrpName($comp);
+  my $newMrpName;
+  if ($samemrps) {
+    $newMrpName = $mrpName;
+  } else {
+    print "$comp mrp name [$mrpName] ";
+    $newMrpName = <STDIN>;
+    chomp $newMrpName;
+    if ($newMrpName) {
+      $modified = 1;
+    }
+    else {
+      undef $newMrpName;
+    }
+  }
+
+  my $return = UNCHANGED;
+  if ($modified) {
+    eval {
+      PrepRel::PrepRel($iniData, $envDb, $comp, $newVer, $newIntVer, $newMrpName);
+    };
+    if ($@) {
+      print $@;
+    }
+    else {
+      $return = UPDATED;
+    }
+  }
+
+  print "\n";
+  return $return;
+}
+
+sub ShowLatestVer {
+  my $comp = shift;
+  my $reldata = RelData->OpenSet($iniData, $comp, $verbose);
+  if ($reldata) {
+    my $reldatum = $reldata->[0];
+    if ($reldatum) {
+      print "$comp: Latest version: ".$reldatum->Version . " (internal version ".$reldatum->InternalVersion.")\n";
+      return;
+    }
+  }
+  print "No previous versions.\n";
+}
+
+__END__
+
+=head1 NAME
+
+PrepEnv - Prepares an environment for release.
+
+=head1 SYNOPSIS
+
+  prepenv [options] [<input_file_name>]
+
+options:
+
+  -h  help
+  -v  verbose output (-vv very verbose)
+  -i  <internal> use this internal version number instead of prompting
+  -m  don't prompt for MRP location
+
+Options valid only in interactive mode:
+
+  -l  show latest version number
+  -p  skip those components that are pending release
+
+=head1 DESCRIPTION
+
+Before an environment can be released, the status of each component that needs to be released must be set to I<pending release> and the new versions and F<mrp> names must be specified. C<PrepEnv> provides two ways of manipulating this information in the environment database:
+
+=over 4
+
+=item 1 Interactively
+
+If no arguments are given to C<PrepEnv>, it will enter an interactive mode asking for version, internal version and mrp name for each component in the database with a status of I<dirty> or I<binaries clean, source dirty> (or I<pending release> unless -p is specified). It won't ask for internal version or MRP name if you have used the -i or -m respectively. The current value of each will be presented in square brackets. Hitting I<return> will preserve the current value. If all the current values are selected for a particular component, it's environment database entry will not be changed, otherwise the values will be updated and its status will be set to I<pending release>.
+
+=item 3 Via an input file
+
+The name of an input file may be specified as an argument. The structure of each line in the file must be as follows:
+
+ <component_name> <version> [<internal_version>] [-m <mrp_name>]
+
+Note, you can optionally specify internal version (assuming the F<reltools.ini> keyword C<require_internal_versions> has not been specified) and F<mrp> name. You can also optionally specify a new F<mrp> name, but to distinguish this from an internal version you much precede it with '-m'.
+
+=back
+
+Note, C<PrepEnv> (and its counterpart C<PrepRel>) do nothing more than update your the environment database. You can execute these commands as many times as you like before running C<MakeEnv> to actually release the environment.
+
+C<PrepEnv> does not always identify dirty components correctly. If you've just made a component dirty, then run C<prepenv> immediately afterwards, it will not notice that dirty component. To solve this you should run C<EnvInfo -f> before running C<PrepEnv>. C<PrepEnv> will then ask you about components correctly. This is a deliberate design decision: otherwise, C<PrepEnv> would have to do a slow environment scan before prompting you. Normally, you'll have run C<envinfo -f> first, so the environment scan is redundant.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/PrepEnv.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/PrepRel	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,148 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use Utils;
+use PrepRel;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $mrpName;
+my $comp;
+my $ver;
+my $intVer;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'PrepRel');
+my $envDb;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+PrepRel();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions("h" => \$help, "m=s" => \$mrpName, "v+" => \$verbose);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $comp = shift @ARGV;
+  $ver = shift @ARGV;
+  $intVer = shift @ARGV;
+
+  unless (defined $comp and $#ARGV == -1) {
+    print "Error: Invalid number of arguments\n";
+    Usage(1);
+  }
+
+  $envDb = EnvDb->Open($iniData, $verbose);
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: preprel [options] <component> [<version>] [<internal_version>]
+
+options:
+
+-h             help
+-m <mrp_name>  specify a new mrp file name
+-v             verbose output (-vv very verbose)\n");
+}
+
+sub PrepRel {
+  my $updating = $envDb->Version($comp);
+  PrepRel::PrepRel($iniData, $envDb, $comp, $ver, $intVer, $mrpName);
+  if (not $ver and not $mrpName) {
+    print "$comp removed\n";
+  }
+  elsif (not $ver and $mrpName) {
+    print "$comp mrp updated\n";
+  }
+  elsif ($updating) {
+    print "$comp updated\n";
+  }
+  else {
+    print "$comp added\n";
+  }
+}
+
+__END__
+
+=head1 NAME
+
+PrepRel - Prepares a component for release.
+
+=head1 SYNOPSIS
+
+  preprel [options] <component> [<version>] [<internal_version>]
+
+options:
+
+  -h             help
+  -m <mrp_name>  specify a new mrp file name
+  -v             verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+Before a component can be released, it's environment database status must be set to I<pending release>. Also, a new version (and optionally internal version - note, if the C<reltools.ini> keyword C<require_internal_versions> has be set, an internal version is manatory) must be specifed. C<PrepRel> provides a means of editing this information in the environment database. To check that the values have been correctly updated, use C<EnvInfo>. Note, this will now take longer to run because the information in the F<mrp> files of the components pending release will need to be gathered. To remove the environment database entry for a component altogether, execute C<PrepRel> with no version.
+
+Note, C<PrepRel> (and its counterpart C<PrepEnv>) do nothing more than update your the environment database. You can execute these commands as many times as you like before running C<MakeEnv> to actually release the environment.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/PrepRel.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/PrepRel.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,171 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+package PrepRel;
+
+use strict;
+use IniData;
+use MrpData;
+use Utils;
+
+
+#
+# Public.
+#
+
+sub PrepRel {
+  my $iniData = shift;
+  my $envDb = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $intVer = shift;
+  my $mrpName = shift;
+
+  $envDb->CheckCompName($comp);
+  die "Error: $ver is not a valid version number\n" if (defined $ver && !$ver);
+  die "Error: $intVer is not a valid internal version number\n" 
+    if (defined $intVer && !$intVer);
+
+  if (not defined $ver and not defined $intVer and not defined $mrpName) {
+    RemoveDbEntry($envDb, $comp);
+    return;
+  }
+
+  my $updating = 0;
+  if (not defined $ver) {
+    $ver = $envDb->Version($comp);
+    if (not defined $ver) {
+      die "Error: $comp not installed; could not work out what version to use. Please specify a version number.\n";
+    }
+    elsif ($envDb->Status($comp) != EnvDb::STATUS_PENDING_RELEASE) {
+      die "Error: New version not specified\n";
+    }
+    else {
+      $updating = 1;
+    }
+  }
+  else {
+    my $currentVer = $envDb->Version($comp);
+    if (defined $currentVer) {
+      if (lc($ver) eq $currentVer) {
+	$updating = 1;
+      }
+    }
+    my $relDir = $iniData->PathData->LocalArchivePathForExistingOrNewComponent($comp,$ver);
+    if (-e $relDir) {
+      die "Error: $comp $ver already exists\n";
+    }
+  }
+
+  if (not defined $intVer and $iniData->RequireInternalVersions() and not $updating) {
+    die "Error: Internal version number not specified for $comp $ver\n";
+  }
+
+  if (defined $mrpName) {
+    Utils::CheckExists($mrpName);
+    Utils::AbsoluteFileName(\$mrpName);
+    
+    if($iniData->HasMappings()) {
+      $mrpName = $iniData->PerformReverseMapOnFileName($mrpName);
+    }
+    
+    $mrpName = Utils::RemoveSourceRoot($mrpName);
+  }
+  else {
+    my $currentVersion = $envDb->Version($comp);
+    unless (defined $currentVersion) {
+      die "Error: Mrp name not specified for $comp $ver\n";
+    }
+  }
+
+  $envDb->SetVersion($comp, $ver);
+  $envDb->SetStatus($comp, EnvDb::STATUS_PENDING_RELEASE);
+  if (defined $mrpName) {
+    $envDb->SetMrpName($comp, $mrpName);
+  }
+  if (defined $intVer) {
+    $envDb->SetInternalVersion($comp, $intVer);
+  }
+  $envDb->GenerateEmptySignature($comp, $ver);
+}
+
+
+#
+# Private.
+#
+
+sub RemoveDbEntry {
+  my $envDb = shift;
+  my $comp = shift;
+  my $ver = $envDb->Version($comp);
+  if (defined $ver) {
+    print "Remove environment database entry for $comp? [y/n] ";
+    my $response = <STDIN>;
+    chomp $response;
+    if ($response =~ /^y$/i) {
+      $envDb->DeleteSignature($comp, $ver);
+      $envDb->SetVersion($comp, undef);
+    }
+    else {
+      die "Remove aborted\n";
+    }
+  }
+  else {
+    die "Error: $comp not installed\n";
+  }
+}
+
+
+1;
+
+=head1 NAME
+
+PrepRel.pm - Provides an interface to edit the environment database to prepare a component for release.
+
+=head1 WARNING!
+
+This is NOT the documentation for the command C<PrepRel>. This documentation refers to the internal release tools module called F<PrepRel.pm>. 
+
+For the PrepRel command documentation, you'll need to explicitly specify the path to the C<PrepRel> command,
+
+=head1 INTERFACE
+
+=head2 PrepRel
+
+Expects to be passed an C<IniData> reference, an C<EnvDb> reference, a component name. May optionally be passed in addition a version, an internal version and an F<mrp> file name. If no version parameter is specified, the component's database entry is removed. Otherwise the component's database entry is updates with the information provided, and its status set to C<STATUS_PENDING_RELEASE>.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/PullEnv	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,147 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use File::Copy;
+use File::Path;
+use IniData;
+use RelData;
+use PathData;
+use CommandController;
+use PushPullRel;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $force = 0;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'PullEnv');
+my $comp;
+my $ver;
+my $externalIniDataFile;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+PullEnv();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions('h' => \$help, 'f' => \$force, 'v+' => \$verbose);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $comp = shift @ARGV;
+  $ver = shift @ARGV;
+  $externalIniDataFile = shift @ARGV;
+
+  unless (defined $comp and defined $ver and defined $externalIniDataFile and $#ARGV == -1) {
+    print "Error: Invalid arguments\n";
+    Usage(1);
+  }
+
+  unless (-e $externalIniDataFile) {
+    die "Error: $externalIniDataFile does not exist\n";
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: pullenv [options] <component> <version> <remote-reltools-ini-file>
+
+options:
+
+-h  help
+-f  if check fails, overwrite local copy
+-v  verbose output (-vv very verbose)\n");
+}
+
+sub PullEnv {
+  my $ppr = new PushPullRel(
+    $iniData,
+    $externalIniDataFile,
+    0, # pushing
+    $verbose,
+    $force
+  );
+  $ppr->TransferEnv($comp,$ver);
+  $ppr->SummariseErrors;
+}
+
+
+__END__
+
+=head1 NAME
+
+PullEnv - Copies a released environment from another archive.
+
+=head1 SYNOPSIS
+
+  pullenv [options] <component> <version> <remote-reltools-ini-file>
+
+options:
+
+  -h  help
+  -f  if check fails, overwrite local copy
+  -v  verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+If two sites that share a common WAN want to have separate local archives, the commands C<PushEnv> and C<PullEnv> can be used to keep them in sync. They are similar is spirit to C<ExportEnv> and C<ImportEnv>, however the files are copied directly rather than being encrypted and placed on a shared repository.
+
+For each component in the specified external environment, checks to see if the corresponding release directory exists in the local archive. If it does, each if is checked to ensure its modified time and size is that same as in the external archive. If the check fails an error is thrown (by default, unless the C<-f> switch is used). If is does not, the directory is created and the component is copied into it.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/PullEnv.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/PushEnv	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,145 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use File::Copy;
+use IniData;
+use RelData;
+use PathData;
+use CommandController;
+use PushPullRel;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $force = 0;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'PushEnv');
+my $comp;
+my $ver;
+my $externalIniDataFile;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+PushEnv();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions('h' => \$help, 'f' => \$force, 'v+' => \$verbose);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $comp = shift @ARGV;
+  $ver = shift @ARGV;
+  $externalIniDataFile = shift @ARGV;
+
+  unless (defined $comp and defined $ver and defined $externalIniDataFile and $#ARGV == -1) {
+    print "Error: Invalid arguments\n";
+    Usage(1);
+  }
+
+  unless (-e $externalIniDataFile) {
+    die "Error: $externalIniDataFile does not exist\n";
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: pushenv [options] <component> <version> <remote-site-reltools-ini-file>
+
+options:
+
+-h  help
+-f  if check fails, overwrite external copy
+-v  verbose output (-vv very verbose)\n");
+}
+
+sub PushEnv {
+  my $ppr = new PushPullRel(
+    $iniData,
+    $externalIniDataFile,
+    1, # pushing
+    $verbose,
+    $force
+  );
+  $ppr->TransferEnv($comp,$ver);
+  $ppr->SummariseErrors;
+}
+
+__END__
+
+=head1 NAME
+
+PushEnv - Copies a released environment to another archive.
+
+=head1 SYNOPSIS
+
+  pushenv [options] <component> <version> <remote-site-reltools-ini-file>
+
+options:
+
+  -h  help
+  -f  if check fails, overwrite external copy
+  -v  verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+If two sites that share a common WAN want to have separate local archives, the commands C<PushEnv> and C<PullEnv> can be used to keep them in sync. They are similar is spirit to C<ExportEnv> and C<ImportEnv>, however the files are copied directly rather than being encrypted and placed on a shared repository.
+
+For each component in the specified local environment, checks to see if the corresponding release directory exists on the remote site. If it does, each if is checked to ensure its modified time and size is that same as in the local archive. If the check fails an error is thrown (by default, unless the C<-f> switch is used). If is does not, the directory is created and the component is copied into it.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/PushEnv.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/PushPullRel.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,253 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# PushPullRel - abstracts out common parts of PushEnv, PullEnv, PushRel, PullRel
+#
+
+package PushPullRel;
+
+use strict;
+use File::Copy;
+use IniData;
+use RelData;
+use PathData;
+use CommandController;
+
+sub new {
+  my $class = shift;
+  my $localinidata = shift;
+  my $foreigninifile = shift; # can be an ini file location or an IniData object
+  my $pushing = shift; # flag, whether we're pushing a release or pulling it
+  my $verbose = shift;
+  my $force = shift;
+
+  my $self = bless {}, (ref $class || $class);
+
+  $self->{localinidata} = $localinidata;
+  if (ref $foreigninifile) {
+    $self->{foreigninidata} = $foreigninifile;
+  } else{ 
+    $self->{foreigninidata} = IniData->New($foreigninifile);
+  }
+
+  $self->{pushing} = $pushing || 0;
+  if ($self->{pushing}) {
+    $self->{frominidata} = $self->{localinidata};
+    $self->{toinidata} = $self->{foreigninidata};
+  } else {
+    $self->{toinidata} = $self->{localinidata};
+    $self->{frominidata} = $self->{foreigninidata};
+  }
+  $self->{errors} = [];
+  $self->{verbose} = $verbose;
+  $self->{force} = $force;
+
+  return $self;
+}
+
+sub TransferRel {
+  my $self = shift;
+  my $thisComp = shift;
+  my $thisVer = shift;
+  eval {
+    my $toRelDir = $self->{toinidata}->PathData->LocalArchivePathForExistingOrNewComponent($thisComp, $thisVer);
+    my $fromRelDir = $self->{frominidata}->PathData->LocalArchivePathForExistingComponent($thisComp, $thisVer);
+    die "Error: Couldn't find component \"$thisComp\" \"$thisVer\"\n" unless defined $fromRelDir;
+    $self->PerformCopying($thisComp, $thisVer, $toRelDir, $fromRelDir);
+  };
+
+  if ($@) {
+    print "$@";
+    $self->_AddError($@);
+  }
+}
+
+sub PerformCopying {
+  my $self = shift;
+  my $thisComp = shift;
+  my $thisVer = shift;
+  my $toRelDir = shift;
+  my $fromRelDir = shift;
+  
+  if (-e $toRelDir and Utils::CrossCheckDirs($toRelDir, $fromRelDir)) {
+    print "$thisComp $thisVer already present\n";
+  }
+  elsif (-e $toRelDir) {
+    if ($self->{force}) {
+      print "Overwriting \"$toRelDir\" with \"$fromRelDir\"...\n";
+      $self->_DoCopying($fromRelDir, $toRelDir);
+    }
+    else {
+      die "\"$toRelDir\" present, but doesn't match \"$fromRelDir\". Use -f to force copy.\n";
+    }
+  }
+  else {
+    # Directory not present, so create an copy release files.
+    print "Copying $thisComp $thisVer to \"$toRelDir\"...\n";
+    $self->_DoCopying($fromRelDir, $toRelDir);
+  }
+}
+
+sub TransferEnv {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+
+  my $relData = RelData->Open($self->{frominidata}, $comp, $ver, $self->{verbose});
+  my $env = $relData->Environment();
+
+  my @errors;
+  foreach my $thisComp (sort keys %{$env}) {
+    my $thisVer = $env->{$thisComp};
+    $self->TransferRel($thisComp, $thisVer);
+  }
+}
+
+sub Errors {
+  my $self = shift;
+  return @{$self->{errors}} if wantarray;
+  return $self->{errors};
+}
+
+sub SummariseErrors {
+  my $self = shift;
+  my $copyRel = shift || 0;
+  
+  my $errors = $self->Errors;
+  if ($#$errors >= 0) {
+    print "\nSummary of errors:\n\n";
+    foreach my $thisError (@$errors) {
+      print $thisError;
+    }
+    
+    if($copyRel){
+      print "\nError: Unable to copy release successfully\n";
+    }
+    else{
+      print "\nError: Unable to push/pull release successfully\n";
+    }
+  }
+}
+
+sub _DoCopying {
+  my $self = shift;
+  my $localRelDir = shift;
+  my $externalRelDir = shift;
+  die "Local release directory not provided" unless $localRelDir;
+  die "External release dir was undefined" unless defined $externalRelDir;
+  opendir(DIR, $localRelDir) or die "Error: Couldn't open directory \"$localRelDir\": $!\n";
+  Utils::MakeDir($externalRelDir);
+  
+  while (defined(my $file = readdir(DIR))) {
+    next if ($file eq '.' or $file eq '..');
+    my $localFile = "$localRelDir\\$file";
+    my $externalFile = "$externalRelDir\\$file";
+    if (-f $localFile) {
+      if (-e "$externalRelDir\\$file" and $self->{force}) {
+        if ($self->{verbose}) { print "\tMaking \"$externalRelDir\\$file\" writable...\n"; }
+        Utils::SetFileWritable("$externalRelDir\\$file");
+      }
+      elsif (-e "$externalRelDir\\$file") {
+        die;
+      }
+      if ($self->{verbose}) { print "\tCopying \"$localFile\" to \"$externalRelDir\"...\n"; }
+      
+      unless (copy ($localFile, $externalFile)){
+         my $errormessage = $!;
+         
+         if($errormessage =~ /No such file or directory/i) {
+           $errormessage = "Unknown Error - Check disk space or missing file/directory";
+         }
+
+         die "Error: Couldn't copy \"$localFile\" to \"$externalFile\": $errormessage";
+      }
+    }
+    else {
+      die "Error: \"$file\" is not a file\n";
+    }
+  }
+}
+
+sub _AddError {
+  my $self = shift;
+  my $error = shift;
+  push @{$self->{errors}}, $error;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+PushPullRel.pm - class for moving releases between two local archives
+
+=head1 DESCRIPTION
+
+Provides an API to transfer releases between two local archives. (That is, non-encrypted archives,
+accessible as standard disk drives from the PC). Used by C<pushenv>, C<pullenv>, C<pushrel>,
+C<pullrel>.
+
+=head1 INTERFACE
+
+=head2 new
+
+Creates a new object of this class. Takes five parameters. 1) An IniData object corresponding
+to your local repository. 2) A foreign IniData object (or just a filename) describing the 
+remote repository. 3) A boolean, saying whether you're pushing to the remote site. If false,
+assumes you're pulling from the remote site. 4) Verbose. 5) Force (overwrites).
+
+=head2 TransferRel
+
+Takes a component name and version. Transfers that component.
+
+=head2 TransferEnv
+   
+Takes a component name and version. Transfers the environment of that component.
+
+=head2 PerformCopying
+
+Takes a component name, version, to release and from release directory. Performs initial checks on the release directories passed and then calls _DoCopying.
+
+=head2 Errors
+
+Returns an arrayref of all the errors encountered during TransferEnv.
+
+=head2 SummariseErrors
+
+Optional input copyRel flag which indicates whether to this summary is for a copyrel or not. Prints all the errors encountered.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/QuickStart	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,162 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+=head1 Overview
+
+This document is intended to familiarise the reader with basic release tool commands. It covers topics such as installing and upgrading a development environment, and viewing details about particular releases within that environment. It does not cover the process of preparing new environments or making releases (see the document I<Making Releases> for material on that topic).
+
+=head1 Glossary
+
+=over 4
+
+=item *
+
+B<Component> - A deliverable piece of software.
+
+=item *
+
+B<Release> - A delivery of a component (may contain source or binaries or both).
+
+=item *
+
+B<Version> - The name of a specific component release (must be unique).
+
+=item *
+
+B<Baseline> - A set of component releases (referred to by their version) that are known to work together.
+
+=item *
+
+B<Environment> - A development drive that contains an F<\epoc32> tree generated from the binaries in a set of component releases.
+
+=back
+
+=head1 Getting an Environment
+
+When ever a component release is made, the release tools make note of the entire environment from which it was made. To install the environment from which the component C<mycomp> version C<059> was made, use the command C<GetEnv>:
+
+  getenv mycomp 059
+
+This will install into the root of the current drive all the binaries that were present when C<mycomp 059> was released. It is possible therefore to reproduce the environment from which any component release has been made. Normally, however, each project will have official environments that are prepared by a build / integration team. They will release a dummy component (normally the name of the project) that can be used to reproduce these official environments. The dummy component will probably not contain any binaries, but should contain a set of release notes (see the section I<Viewing a Component's Release Notes>).
+
+=head1 Upgrading a Single Component
+
+Single components can be installed into an environment using the command C<GetRel>, for example:
+
+  getrel mycomp 060
+
+If a version of C<mycomp> is already installed in the current environment, it's binaries will be removed before those from C<060> are installed.
+
+=head1 Upgrading to a New Environment
+
+The command C<GetEnv> can be used to upgrade an existing environment, for example:
+
+  getenv myproject 030
+
+As with C<GetRel>, old component versions are removed before the new are installed. If environment already contains something similar to C<myproject 030>, the process of upgrading it should be fairly quick.
+
+=head1 Viewing the State of an Environment
+
+The component versions that are currently installed in an environment can be listed with the following command:
+
+  envinfo
+
+Which will display something like:
+
+ Component   Version
+
+ mycomp1     032
+ mycomp2     036
+
+=head1 Getting the Source Code for a Component
+
+By default, the commands C<GetEnv> and C<GetRel> do not install the source code contained within component releases. If you want to get the source for a single component, use the command C<GetSource>:
+
+  getsource mycomp
+
+This will unpack the source for the currently installed version of C<mycomp> into the root of the current drive. Note, the commands C<GetEnv> and C<GetRel> both have a C<-s> switch that instructs them to unpack source code as well as binaries. Note also that the release tools make no attempt to keep track of source files that have been unpacked into a drive (unlike binary files, which they do keep track of). This means that any existing files of the same name will be over written.
+
+There's also a C<RemoveSource> command.
+
+=head1 Viewing a Component's Release Notes
+
+The release notes for a component can be compiled on the fly using the command C<ViewNotes>. This will compile the release notes into a temporary file and then launch your default web browser to view. For example:
+
+  viewnotes mycomp 032
+
+If the version is ommitted, then the notes for the version that is currently installed will be displayed. Note, C<ViewNotes> assumes that a web browser is already installed, and than there is an association between it and the file extension F<.html>.
+
+C<ViewNotes> can also be used to display a summary of all releases that have been made to date using the C<-s> switch. For example:
+
+  viewnotes -s mycomp 032
+
+This can be useful if you want to look back through old release notes.
+
+=head1 Other information commands
+
+C<BinInfo> lists all the binary files belonging to a component, or to which component a given binary file belongs. C<SourceInfo> does exactly the same with source code directories.
+
+C<EnvMembership> and C<DiffEnv> show you information about the contents of different environments. C<ListComponents>, C<LatestVer> and C<EnvSize> report the contents of the local archive.
+
+=head1 Recovering your Environment to a Known State
+
+If you have forgotten what's on your development drive, and you want to get it back to a clean baseline, you could use C<EnvInfo -f> to examine it, then reinstall all the dirty components and delete any loose files. But C<CleanEnv> does this automatically.
+
+=head1 Viewing the Source Differences between Two Component Releases
+
+The command C<DiffRel> can be used to compare the source of two releases using a differencing tool of your choice (this must be specified in the release tools configuration file C<reltools.ini> - see the installation guide for details). For example...
+
+  diffrel mycomp 031 032
+
+...will diff C<mycomp> version C<031> against version C<032>. Alternatively...
+
+  diffrel mycomp 031 \mycomp
+
+...will diff C<mycomp 031> against the source in the directory F<\mycomp>.
+
+=head1 Making Releases
+
+See the separate Making Releases document.
+
+=head1 Importing and Exporting Releases
+
+This is the process of transferring a release from one site to another. It involves encryption, and typically FTP sites. See the separate Exporting and Importing Releases document.
+
+=head1 "Validation"
+
+If you have two releases that you believe to be the same, you can use the commands C<ValidateRel> and C<ValidateEnv> to compare them. The comparison is intelligent and ignores differences in the timestamps in DLL headers (it uses the standard Symbian utility 'evalid').
+
+In particular, if you have constructed a baseline of many individual component releases, we recommend that you occasionally do a 'full build' of all the source code. You can then use 'validateenv' to ensure that the full build has produced the same results as all the individual components.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/RelData.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,567 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+package RelData;
+
+use strict;
+use Data::Dumper;
+use MrpData;
+use PathData;
+
+#
+# Data version history.
+#
+# 1 - Original release.
+# 2 - Added 'relToolsVer' tag.
+#
+
+
+#
+# Public.
+#
+
+sub New {
+  my $pkg = shift;
+  my $self = {};
+  bless $self, $pkg;
+  $self->{iniData} = shift;
+  $self->{mrpData} = shift;
+  $self->{notesSrc} = shift;
+  $self->{data}->{env} = shift;
+  $self->{data}->{toolName} = shift;
+  $self->{verbose} = shift;
+  $self->{dontPersist} = shift;
+  $self->{project} = shift;
+
+  $self->{comp} = $self->{mrpData}->Component();
+  $self->{ver} = $self->{mrpData}->ExternalVersion();
+  $self->{data}->{dataFormatVer} = 2;
+  $self->{data}->{intVer} = $self->{mrpData}->InternalVersion();
+  $self->{data}->{mrpName} = $self->{mrpData}->MrpName();
+  $self->{data}->{relToolsVer} = Utils::ToolsVersion();
+  $self->{data}->{notesSrc}->{srcFilterErrors} = $self->{mrpData}->SourceFilterErrors();
+  $self->{data}->{notesSrc}->{date} = localtime;
+  
+  foreach my $srcitem (keys %{$self->{mrpData}->SourceItems()}) {
+    if($self->{iniData}->HasMappings()){
+      $srcitem = $self->{iniData}->PerformReverseMapOnFileName($srcitem);
+      $srcitem = Utils::RemoveSourceRoot($srcitem);
+    }
+
+    $self->{data}->{srcitems}->{$srcitem} = 1;
+  }
+
+  unless(defined $self->{data}->{srcitems}){
+    $self->{data}->{srcitems} = $self->{mrpData}->SourceItems();
+  }
+  
+  $self->{data}->{envUserName} = ($ENV{FirstName} || '') . " " . ($ENV{LastName} || '');
+  $self->ParseNotesSource();
+  $self->WorkOutFirstCompatibleVersion();
+  unless (defined $self->{dontPersist}) {
+    $self->WriteToFile();
+  }
+  return $self;
+}
+
+sub Open {
+  my $pkg = shift;
+  my $self = {};
+  bless $self, $pkg;
+  $self->{iniData} = shift;
+  $self->{comp} = shift;
+  $self->{ver} = shift;
+  $self->{verbose} = shift;
+  $self->ReadFromFile();
+  return $self;
+}
+
+sub OpenExternal {
+  my $pkg = shift;
+  my $externalArchive = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $self = {};
+  $self->{comp} = $comp;
+  $self->{ver} = $ver;
+  my $externalFile = File::Spec->catdir($externalArchive, $comp, $ver);
+  bless $self, $pkg;
+  $self->ReadFromSpecificFile($externalFile);
+  return $self;
+}
+
+
+sub OpenSet {
+  my $pkg = shift;
+  my $iniData = shift;
+  my $comp = shift;
+  my $verbose = shift;
+  my $versionfilter = shift;
+  
+  my @relDataObjects;
+  foreach my $ver (@{$iniData->PathData->ListVersions($comp, 0, $versionfilter, $iniData->LatestVerFilter)}) {
+    my $thisRelData = {};
+    bless $thisRelData, $pkg;
+    eval {
+      # ReadFromFile may die, if the file is corrupt.
+      # In which case we do not add it to the set.
+      $thisRelData->{iniData} = $iniData;
+      $thisRelData->{comp} = $comp;
+      $thisRelData->{ver} = $ver;
+      $thisRelData->{verbose} = $verbose;
+      $thisRelData->ReadFromFile();
+      push (@relDataObjects, $thisRelData);
+    };
+    print "Warning: could not examine \"$comp\" \"$ver\" because $@" if ($@);
+  }
+  
+  @relDataObjects = sort { $b->ReleaseTime() <=> $a->ReleaseTime() } @relDataObjects;
+
+  return \@relDataObjects;;
+}
+
+sub Component {
+  my $self = shift;
+  die unless exists $self->{comp};
+  return $self->{comp};
+}
+
+sub MadeWith {
+  my $self = shift;
+  my $ver = $self->{data}->{relToolsVer} || "(unknown version)";
+  my $tool = $self->{data}->{toolName} || "(unknown tool)";
+  return "$tool $ver";
+}
+
+sub MadeWithVersion {
+  my $self = shift;
+  return "".$self->{data}->{relToolsVer};
+}
+
+sub SourceIncluded {
+  my $self = shift;
+  my $items;
+  eval {
+    $items = $self->SourceItems();
+  };
+  return "(unknown)" if $@;
+  return join (", ", keys %$items);
+}
+
+sub Version {
+  my $self = shift;
+  die unless exists $self->{ver};
+  return $self->{ver};
+}
+
+sub InternalVersion {
+  my $self = shift;
+  die unless exists $self->{data};
+  return $self->{data}->{intVer};
+}
+
+sub MrpName {
+  my $self = shift;
+  die unless exists $self->{data};
+  return $self->{data}->{mrpName};
+}
+
+sub FirstCompatibleVersion {
+  my $self = shift;
+  die unless exists $self->{data};
+  return $self->{data}->{firstCompatibleVersion};
+}
+
+sub Environment {
+  my $self = shift;
+  die unless exists $self->{data};
+  return $self->{data}->{env};
+}
+
+sub NotesSource {
+  my $self = shift;
+  die unless exists $self->{data};
+  return $self->{data}->{notesSrc};
+}
+
+sub UpdateProject {
+  my $self = shift;
+  $self->{project} = shift;
+  $self->WriteToFile();
+}
+
+sub UpdateNotes {
+  my $self = shift;
+  $self->{notesSrc} = shift;
+  $self->DeleteNotesSource();
+  $self->ParseNotesSource();
+  $self->WriteToFile();
+}
+
+sub UpdateInternalVersion {
+  my $self = shift;
+  $self->{data}->{intVer} = shift;
+  $self->WriteToFile();
+}
+
+sub UpdateEnv {
+  my $self = shift;
+  $self->{data}->{env} = shift;
+  $self->WriteToFile();
+}
+
+sub ReleaseTime {
+  my $self = shift;
+  unless (exists $self->{releaseTime}) {
+    $self->{releaseTime} = Utils::TextTimeToEpochSeconds($self->{data}->{notesSrc}->{date});
+  }
+  return $self->{releaseTime};
+}
+
+sub SourceItems {
+  my $self = shift;
+  unless (defined $self->{data}->{srcitems}) {
+    my $createdver = $self->{data}->{relToolsVer} || 0;
+    if (Utils::CompareVers($createdver,2.54)<0) {
+      die "this release was created with Release Tools $createdver, and the necessary information is only present in releases created with 2.54 or later.\n";
+    }
+    die "Could not return the list of \"source\" statements used in the MRP file." 
+  }
+  return $self->{data}->{srcitems};
+}
+
+sub EnvUserName {
+  my $self = shift;
+  return $self->{data}->{envUserName};
+  }
+
+#
+# Private.
+#
+
+sub WriteToFile {
+  my $self = shift;
+  my $relDir = $self->{iniData}->PathData->LocalArchivePathForExistingOrNewComponent($self->{comp}, $self->{ver}, $self->{project});
+
+  my $file = "$relDir\\reldata";  
+  
+  if (-e $file) {
+    Utils::SetFileWritable($file);
+  }
+  open (OUT, ">$file") or die "Error: Couldn't open \"$file\" for writing: $!\n";
+  print OUT Data::Dumper->Dump([$self->{data}], ['self->{data}']);
+  close (OUT);
+  Utils::SetFileReadOnly($file);
+}
+
+sub ReadFromFile {
+  my $self = shift;
+  my $pathData = shift || $self->{iniData}->PathData;
+
+  my $comp = $self->{comp};
+  my $ver = $self->{ver};
+
+  my $relDir = $pathData->LocalArchivePathForExistingComponent($comp, $ver);
+  die "Error: \"$comp $ver\" does not exist\n" unless $relDir;
+  die "Error: \"$comp $ver\" was not a valid release (can't find \"$relDir\\reldata\")\n" unless -e "$relDir\\reldata";
+  $self->{project} = $pathData->ComponentProject($comp, $ver);
+  $self->ReadFromSpecificFile($relDir);
+}
+
+sub ReadFromSpecificFile {
+  my $self = shift;
+  my $relDir = shift;
+  unless (-e $relDir) {
+    die "Error: $self->{comp} $self->{ver} does not exist\n";
+  }
+  my $file = "$relDir\\reldata";
+  open (IN, $file) or die "Error: Couldn't open \"$file\" for reading: $!\n";
+  local $/ = undef;
+  my $data = <IN>;
+  die "Error: Reldata in \"$relDir\" is blank" unless $data =~ (m/\S/);
+  eval ($data) or die "Error: Couldn't parse reldata in \"$relDir\"\n";
+  close (IN);
+}
+
+sub ParseNotesSource {
+  my $self = shift;
+
+  if ($self->{verbose} > 1) { print "Parsing notes source...\n"; }
+
+  open(SRC,"$self->{notesSrc}") or die "Unable to open $self->{notesSrc} for reading: $!\n";
+
+  my $thisTag;
+  while (<SRC>) {
+    if (m/^NOTESRC/i) {
+      chomp;
+      $thisTag = $_;
+    }
+    elsif (m/^\s*$/) {
+      next;
+    }
+    elsif (defined $thisTag) {
+      $self->AddLine($thisTag, $_);
+    }
+  }
+  close SRC;
+
+  $self->ValidateSource();
+}
+
+sub AddLine {
+  my $self = shift;
+  my $thisTag = shift;
+  my $thisLine = shift;
+  chomp $thisLine;
+
+  if ($thisTag =~ m/^NOTESRC_RELEASER$/i) {
+    $self->{data}->{notesSrc}->{releaser} = $thisLine;		
+  }
+  elsif ($thisTag =~ m/^NOTESRC_RELEASE_REASON$/i) {
+    push @{$self->{data}->{notesSrc}->{releaseReason}}, $thisLine;
+  }
+  elsif ($thisTag =~ m/^NOTESRC_GENERAL_COMMENTS$/i) {
+    push @{$self->{data}->{notesSrc}->{generalComments}}, $thisLine;
+  }
+  elsif ($thisTag =~ m/^NOTESRC_KNOWN_DEVIATIONS$/i) {
+    push @{$self->{data}->{notesSrc}->{knownDeviations}}, $thisLine;
+  }
+  elsif ($thisTag =~ m/^NOTESRC_BUGS_FIXED$/i) {
+    push @{$self->{data}->{notesSrc}->{bugsFixed}}, $thisLine;
+  }
+  elsif ($thisTag =~ m/^NOTESRC_BUGS_REMAINING$/i) {
+    push @{$self->{data}->{notesSrc}->{bugsRemaining}}, $thisLine;
+  }
+  elsif ($thisTag =~ m/^NOTESRC_OTHER_CHANGES$/i) {
+    push @{$self->{data}->{notesSrc}->{otherChanges}}, $thisLine;
+  }
+  else {
+    die "Error: Unknown tag \"$thisTag\" in $self->{notesSrc}\n";
+  }
+}
+
+sub ValidateSource {
+  my $self = shift;
+
+  if ($self->{verbose} > 1) { print "Validating notes source...\n"; }
+
+  unless (exists $self->{data}->{notesSrc}->{releaser}) {
+    die "Error <NOTESRC_RELEASER> not specified in $self->{notesSrc}\n";
+  } 
+  unless (exists $self->{data}->{notesSrc}->{releaseReason}) {
+    die "Error <NOTESRC_RELEASE_REASON> not specified in $self->{notesSrc}\n";
+  } 
+  unless (exists $self->{data}->{notesSrc}->{generalComments}) {
+    push @{$self->{data}->{notesSrc}->{generalComments}}, "<unspecified>";
+  } 
+  unless (exists $self->{data}->{notesSrc}->{knownDeviations}) {
+    push @{$self->{data}->{notesSrc}->{knownDeviations}}, "<unspecified>";
+  }
+  unless (exists $self->{data}->{notesSrc}->{bugsFixed}) {
+    push @{$self->{data}->{notesSrc}->{bugsFixed}}, "<unspecified>";
+  }
+  unless (exists $self->{data}->{notesSrc}->{bugsRemaining}) {
+    push @{$self->{data}->{notesSrc}->{bugsRemaining}}, "<unspecified>";
+  }
+  unless (exists $self->{data}->{notesSrc}->{otherChanges}) {
+    push @{$self->{data}->{notesSrc}->{otherChanges}}, "<unspecified>";
+  }
+}
+
+sub DeleteNotesSource {
+  my $self = shift;
+  delete $self->{data}->{notesSrc}->{releaser};		
+  delete $self->{data}->{notesSrc}->{releaseReason};
+  delete $self->{data}->{notesSrc}->{generalComments};
+  delete $self->{data}->{notesSrc}->{knownDeviations};
+  delete $self->{data}->{notesSrc}->{bugsFixed};
+  delete $self->{data}->{notesSrc}->{bugsRemaining};
+  delete $self->{data}->{notesSrc}->{otherChanges};
+}
+
+sub WorkOutFirstCompatibleVersion {
+  my $self = shift;
+
+  my $version = "2.00";
+  $version = "2.50" if ($self->{iniData}->CategoriseBinaries());
+  $version = "2.59" if ($self->{iniData}->CategoriseExports());
+  $version = "2.80.1000" if grep /[^A-GX]/, @{$self->{mrpData}->SourceCategories()}; 
+  # Add to this when extra features are added which break
+  # backward compatibility of release formats.
+  $self->{data}->{firstCompatibleVersion} = $version;
+}
+
+sub WarnIfReleaseTooNew {
+  my $self = shift;
+  # Called from EnvDb::InstallComponent
+  my $relversion = $self->FirstCompatibleVersion();
+  return unless defined $relversion;
+  my $toolsver = Utils::ToolsVersion;
+  if (Utils::CompareVers($relversion,$toolsver)>0) {
+    my $thisComp = $self->{comp};
+    print "Warning: $thisComp requires Release Tools version $relversion or later. You have $toolsver.\n";
+    print "         It's recommended you stop and upgrade your tools before continuing, as\n";
+    print "         the release probably won't install correctly.\n";
+    print "         Continue? [y/n] ";
+    my $response = <STDIN>;
+    chomp $response;
+    if (lc $response eq 'y') {
+      return;
+    }
+    die "Aborting operation.\n";
+  }
+}
+
+1;
+
+=head1 NAME
+
+RelData.pm - Provides an interface to data associated with a release.
+
+=head1 DESCRIPTION
+
+Along with the source and binaries of a component release, the following information is also stored:
+
+=over 4
+
+=item *
+
+The name of the F<mrp> file used to create the release.
+
+=item *
+
+The release's internal version.
+
+=item *
+
+The name and version of every component in the environment used to create the release.
+
+=item *
+
+The time and date the release was made.
+
+=item *
+
+The release notes source, which can subsequently be used to compile the release notes.
+
+=back
+
+All this information is stored in a single file named F<reldata> within the release directory using the module Data::Dumper.
+
+=head1 INTERFACE
+
+=head2 New
+
+Creates a new C<RelData> object and corresponding data file. Expects to be passed an C<IniData> reference, a component name, a version, an internal version,  an F<mrp> file name, release notes source file name, a reference to a list of components in the release environment and a verbosity level. This information is assembled into an in-memory data structure, and then written into F<reldata> in the component's release directory. You may optionally pass a "project" name to this function, to specify where the F<reldata> should be written.
+
+=head2 Open
+
+Creates a C<RelData> object from an already existing data file. Expects to be passed an C<IniData> reference, a component name, a version, and a verbosity level.
+
+=head2 OpenExternal
+
+As C<New> except expects to be explicitly passed an archive path file name, rather than an C<IniData> object. Effectively creates a C<RelData> object from an external archive.
+
+=head2 OpenSet
+
+Expects to be passed an C<IniData> reference, a component name, and a verbosity level. Opens C<RelData> objects for all of the releases of the specified component made to date and returns a reference to an array of references to them in descending date order.
+
+Optionally takes a regular expression to limit the versions that are returned.
+
+=head2 Component
+
+Returns the component name.
+
+=head2 Version
+
+Returns the component's version.
+
+=head2 InternalVersion
+
+Returns the component's internal version.
+
+=head2 MrpName
+
+Returns the component's F<mrp> file name.
+
+=head2 Environment
+
+Returns a reference to a hash containing component name / version pairs for the components that were in the release environment.
+
+=head2 NotesSource
+
+Returns a reference to a hash containing all the data needed to compile a set of release notes.
+
+=head1 SourceItems
+
+Returns a reference to a hash of all the "source" lines that were in the MRP file used to create this component. This function will die if no such information was found; this means it will die for releases created with Release Tools versions prior to 2.54.
+
+Note that a hash is used just to ensure uniqueness. Only the keys of the hash have value; the values of the hash currently have no meaning.
+
+=head2 SourceIncluded
+
+Returns a string version of the output of SourceItems.
+
+=head2 UpdateProject
+
+Expects to be passed a project. The project passed is then set as the project for the reldata.pm object, which is used when writing the reldata file.
+
+=head2 UpdateNotes
+
+Expects to be passed the name of a notes source file. Parses this and replaces the persisted version of the release notes.
+
+=head2 UpdateInternalVersion
+
+Expects to be passed an internal version. The internal version is then set as internal version for the reldata.pm object, which is used when writing the reldata file.
+
+=head2 UpdateEnv
+
+Expects to be passed an environment. The environment is then set as environment for the reldata.pm object, which is used when writing the reldata file.
+
+=head2 ReleaseTime
+
+Returns the time (in epoch seconds) at which the release was made.
+
+=head2 MadeWith
+
+Returns a string describing which tool this was made with, including the version number.
+
+=head2 EnvUserName
+
+Returns the full name of the user who made this release, according to environment variables FirstName and LastName.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/RelTransfer.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,199 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+package RelTransfer;
+
+use strict;
+use Utils;
+
+#
+# Constructor
+#
+
+sub New {
+  my $invocant = shift;
+  my $class = ref($invocant) || $invocant;
+  my %args = @_;
+  my $self = {iniData => $args{ini_data},
+	      verbose => $args{verbose},
+	      force => $args{force},
+        dummy => $args{dummy},
+	excludeSource => $args{excludeSource},
+        pgpPassPhrase => $args{passphrase}
+	     };
+  
+  if($self->{excludeSource}){
+    PrintHeinousWarning();
+  }
+  
+  $self->{verbose} ||= 1 if $self->{dummy};
+  bless $self, $class;
+  $self->Initialize();
+  return $self;
+}
+
+sub Initialize {
+  my $self = shift;
+  
+  Utils::InitialiseTempDir($self->{iniData});   #create and initialize temp dir
+  $self->{crypt} = $self->CreateCrypt();            #create a Crypt:: object
+  $self->{remoteSite} = $self->CreateRemoteSite();  #create a RemoteSite:: object
+}
+
+sub PrintHeinousWarning {
+  Utils::QueryUnsupportedTool(<<GUILTY, 0);  # Set $reallyrun as 0
+Warning: The use of the -e flag is for internal use only. Using the -e flag can corrupt an export archive if used incorrectly. Please ensure that the target export archive is specifically for non source releases. Export archives should not contain releases which contain both source and non source.
+
+Do you want to continue? (y/n)
+GUILTY
+}
+
+sub CreateCrypt {
+  my $self = shift;
+
+  my $module = 'Crypt::'.$self->{iniData}->PgpTool;
+  eval "require $module";
+  my $crypt = $module->New(default_path => $self->{iniData}->PgpConfigPath(),
+			   verbose => $self->{verbose});
+  return $crypt;
+}
+
+sub CreateRemoteSite {
+  my $self = shift;
+
+  my $module = 'RemoteSite::'.$self->{iniData}->RemoteSiteType();
+  eval "require $module";  
+  my $remote = $module->New(host => $self->{iniData}->RemoteHost(),
+			    username => $self->{iniData}->RemoteUsername(),
+			    password => $self->{iniData}->RemotePassword(),
+			    passive_mode => $self->{iniData}->PasvTransferMode(),
+			    resume_mode => $self->{iniData}->FtpServerSupportsResume(),
+			    proxy => $self->{iniData}->Proxy(),
+			    proxy_username => $self->{iniData}->ProxyUsername(),
+			    proxy_password => $self->{iniData}->ProxyPassword(),
+			    timeout => $self->{iniData}->FtpTimeout(),
+			    reconnects => $self->{reconnects},
+			    max_export_volume_size => $self->{iniData}->MaxExportVolumeSize(),
+			    verbose => $self->{verbose});
+  return $remote;
+}
+
+#
+# Abstract methods
+#
+
+sub TransferRelease {
+  my $self = shift;
+  $self->HandleError("Call to abstract method ".ref($_[0])."::TransferRelease");
+}
+
+#
+# Private
+#
+
+sub PathData {
+  my $self = shift;
+  return $self->{iniData}->PathData;
+}
+
+sub ReleaseExistsInLocalArchive {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+
+  my $path = $self->PathData->LocalArchivePathForExistingComponent($comp, $ver); # undef if component doesn't exist
+  return ($path && -d $path);
+}
+
+sub ReleaseExistsOnRemoteSite {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  
+  my $relDir = $self->PathData->RemoteArchivePathForExistingComponent($comp, $ver, $self->{remoteSite});
+  return 0 unless $relDir;
+  return 1; # if RemoteArchivePathForExistingComponent returns a true value, then it exists
+}
+
+sub CleanupTempDir {
+  my $self = shift;
+  my $tempDir = Utils::TempDir();
+
+  print "Cleaning \"$tempDir\"...\n" if ($self->{verbose} > 1);
+
+  opendir(DIR, $tempDir) or die "Error: cannot open $tempDir\n";
+  my @allFiles = grep {$_ ne '.' and $_ ne '..'} map {"$tempDir/$_"} readdir DIR;
+  closedir(DIR);
+  unlink @allFiles;
+}
+
+sub HandleError {
+  my $self = shift;
+  my $errorString = shift;
+  
+  die "Error: $errorString\n";
+}
+
+#
+# Destructor
+#
+
+sub DESTROY {
+  my $self = shift;
+
+  if (-e Utils::TempDir()) {
+    Utils::RemoveTempDir();
+  }
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+RelTransfer.pm - Base class for modules used to export and import releases
+
+=head1 DESCRIPTION
+
+A typical project involves many development teams working at different locations. To share releases between the various sites a central repositry (e.g typically an FTP server) is setup with each team transferring releases to and from this remote site.
+
+This module is the base class for modules used to export and import single releases between the local archive and the remote site.
+
+The export and import subclass modules must implement the abstract method C<TransferRelease> to perform the actual export/import of the release. 
+
+=head1 KNOWN BUGS
+
+None
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/RelTransfer/Export.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,458 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# RelTransfer::Export.pm
+#
+
+package RelTransfer::Export;
+
+use strict;
+use ExportData;
+use Utils;
+use Cwd;
+
+use RelTransfer;
+use vars qw(@ISA);
+@ISA=("RelTransfer");
+
+#
+# Constructor
+#
+
+sub Initialize {
+  my $self = shift;
+
+  $self->SUPER::Initialize();
+  $self->{exportData} = ExportData->New(exports_file => $self->{iniData}->ExportDataFile(),
+					verbose => $self->{verbose});
+
+  #check to see if all the pgp keys used for exporting exist on the public keyring
+  my @pgpKeys = @{$self->{iniData}->PgpEncryptionKeys};
+  unless (@pgpKeys) {
+    die "Error: No PGP encrypting keys defined in reltools.ini\n";
+  }
+  push @pgpKeys, @{$self->{exportData}->AllPgpKeys};
+  foreach my $pgpKey (@pgpKeys) {
+    unless ($self->{crypt}->PublicKeyExists($pgpKey)) {
+      die "Error: PGP key $pgpKey is required for exporting but does not exist on public keyring\n";
+    }
+  }	
+}
+
+#
+# Public methods
+#
+
+sub CheckExportable {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+
+  unless ($self->ReleaseExistsInLocalArchive($comp, $ver)) {
+    die "Error: $comp $ver does not exist in local archive\n";
+  }
+  unless ($self->{exportData}->ComponentIsExportable($comp)) {
+    print "Warning: component \"$comp\" is not defined in export table.\n";
+  }
+}
+
+sub TransferRelease {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+
+  if ($self->{verbose}) {
+    print "\nExporting $comp $ver...\n";
+  }
+
+  #check to see if ok to export
+  unless ($self->ReleaseExistsInLocalArchive($comp, $ver)) {
+    die "Error: $comp $ver does not exist in local archive\n";
+  }
+
+  my $releaseExists = $self->ReleaseExistsOnRemoteSite($comp, $ver);
+  unless ($self->{exportData}->ComponentIsExportable($comp)) {
+    if (not $releaseExists or $self->{force}) {
+      die "Error: cannot export $comp: not defined in export table\n";
+    }
+    else {
+      if ($self->{verbose}) {
+	print "$comp $ver already exported to remote site\n";
+      }	
+      return 0;
+    }
+  }
+  else {
+    if ($releaseExists and not $self->{force}) {
+      if ($self->{verbose}) {
+	print "$comp $ver already exported to remote site\n";
+      }	
+      return 0;
+    }
+  }
+
+  #encrypt, zip and then send release to remote site
+  eval {
+    my $localdir = $self->PathData->LocalArchivePathForExistingComponent($comp, $ver);
+    print "Local directory for \"$comp\" \"$ver\" is \"$localdir\"\n" if ($self->{verbose});
+    $self->EncryptReleaseFiles($comp, $ver, $localdir);
+    $self->ZipEncryptedReleaseFiles($comp, $ver);
+    $self->SendZippedReleaseFile($comp, $ver, $localdir);
+    return 1 if ($self->{dummy});
+    my $localsize = $self->SizeOfNewlyZippedFile($comp, $ver);
+    my $remotesize = $self->SizeOfRemoteFile($comp, $ver);
+    $self->CompareSizes($localsize, $remotesize, $comp, $ver);
+  };
+  if ($@) {
+    my $error = $@;
+    $self->CleanupTempDir();
+    die $error;
+  }
+
+  #optionally send a log file to the remote site
+  if (defined $self->{iniData}->RemoteLogsDir) {
+    eval {
+      $self->SendLogFile($comp, $ver);
+    };
+    if ($@) {
+      print "Warning: Export of log file failed. $@\n";
+    }
+  }
+
+  #delete all the files in the temporary directory
+  $self->CleanupTempDir();
+
+  if ($self->{verbose}) {
+    print "$comp $ver successfully exported to remote site.\n";
+  }
+  return 1;
+}
+
+sub ExamineExportedRelease {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+
+  unless ($self->ReleaseExistsInLocalArchive($comp, $ver)) {
+    die "Error: $comp $ver does not exist in local archive\n";
+  }
+
+  eval {
+    my $localdir = $self->PathData->LocalArchivePathForExistingComponent($comp, $ver);
+    my $remotesize = $self->SizeOfRemoteFile($comp, $ver);
+    $self->EncryptReleaseFiles($comp, $ver, $localdir);
+    $self->ZipEncryptedReleaseFiles($comp, $ver);
+    my $localsize = $self->SizeOfNewlyZippedFile($comp, $ver);
+    $self->CompareSizes($localsize, $remotesize, $comp, $ver);
+  };
+  if ($@) {
+    my $error = $@;
+    $self->CleanupTempDir();
+    die $error;
+  }
+
+  $self->CleanupTempDir();
+}
+
+#
+# Private methods
+#
+
+sub CompareSizes {
+  my $self = shift;
+  my $localsize = shift;
+  my $remotesize = shift;
+  my $comp = shift; # comp and ver are just used for error messages
+  my $ver = shift;
+
+  my $diff = abs ($remotesize - $localsize);
+  if ($diff == 0) {
+    return; # disappointingly rare
+  } elsif ($diff <=8) {
+    print "Warning: the size of the exported $comp $ver is slightly different ($remotesize) to the local copy ($localsize): difference $diff. This may be due to the way the remote site reports sizes, or the randomness of PGP encryption.\n" if ($self->{verbose});
+  } else {
+    die "Error: $comp $ver exported file size ($remotesize) differs from local copy ($localsize)\n";
+  }
+}
+
+sub SizeOfNewlyZippedFile {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+
+  my $tempDir = Utils::TempDir();
+  my $zipName = "$tempDir/$comp$ver.zip";
+  die "Error: newly zipped file \"$zipName\" for $comp $ver didn't exist\n" unless -e $zipName;
+  return -s $zipName;
+}
+
+sub SizeOfRemoteFile {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+
+  die "No component name provided to SizeOfRemoteFile" unless $comp;
+  die "No version for $comp provided to SizeOfRemoteFile" unless $ver;
+
+  my $remoteFile = $self->PathData->RemoteArchivePathForExistingComponent($comp, $ver, $self->{remoteSite})."/$comp$ver.zip";
+  die "Error: $comp $ver didn't exist on the remote site\n" unless $remoteFile;
+  return $self->{remoteSite}->FileSize($remoteFile);
+}
+
+sub EncryptReleaseFiles {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $relDir = shift;
+  my $tempDir = Utils::TempDir();
+  
+  my %excludedKeys;
+  @excludedKeys{@{$self->{exportData}->AllPgpKeys()}} = ();
+
+  #encrypt release files using pgp keys from export table and reltools.ini
+  opendir(RELDIR, $relDir) or die "Error: Cannot open $relDir\n";
+  while (defined(my $file = readdir RELDIR)) {
+    my @pgpKeys;
+    next if ($file =~ /^\.\.?$/);
+    
+    if ($file =~ /^(exports)([a-z])\.zip$/i or $file =~ /^(exports)([a-z])\.txt$/i) {
+      @pgpKeys = @{$self->{exportData}->PgpKeysForExports($comp, $2)};
+    }
+    elsif ($file =~ /^(source)([a-z])\.zip$/i or $file =~ /^(source)([a-z])\.txt$/i) {
+      if($self->{excludeSource}) {
+        print "Skipping the encryption of source file $file (in directory \"$relDir\")\n" if ($self->{verbose});	
+        next;
+      }
+      @pgpKeys = @{$self->{exportData}->PgpKeysForSource($comp, $2)};
+    }
+    elsif ( $file =~ /^reldata$/i ){
+      @pgpKeys = @{$self->{exportData}->PgpKeysForRelData($comp)};
+    }
+    elsif ($file =~ /^binaries.zip$/i or $self->IsBinaryZipRequired($comp, $ver, $file)) {
+      @pgpKeys = @{$self->{exportData}->PgpKeysForBinaries($comp)};
+    } 
+    else { 
+      die "Error: Unexpected release file \"$file\" in $comp $ver\n";
+    }
+
+    #do the encryption
+    if (@pgpKeys) {
+      push @pgpKeys, @{$self->{iniData}->PgpEncryptionKeys}; #encrypt with users keys aswell
+      print "Encrypting \"$file\" (in directory \"$relDir\") to keys @pgpKeys\n" if ($self->{verbose});
+        # Warning: productisation scripts may depend on the format of the above line.
+      $self->{crypt}->Encrypt("$relDir/$file", "$tempDir/$file.pgp", \@pgpKeys) unless ($self->{dummy});
+    
+      #Remove the keys that have been used from the list of keys which have been excluded for this release
+      delete @excludedKeys{@pgpKeys};
+    }
+  }
+  closedir(RELDIR);
+  
+  # DEF104279 The exclude keyword in the CBR export table breaks the exported archive.
+  # All keys which are not used for this release will be used to encrypt a file called exclude.txt
+  # When the release is imported it will not give the unable to decrypt any part error
+  # as it can decrypt the exclude.txt file.
+
+  if (keys %excludedKeys) {
+    # Create an exclude.txt in the reldir  
+    open (EXCLUDE, ">$tempDir/exclude.txt");
+    print EXCLUDE "If you can decrypt this file then this release has been excluded for you based on your PGP key\n";
+    close EXCLUDE;    
+    
+    $self->{crypt}->Encrypt("$tempDir/exclude.txt", "$tempDir/exclude.txt.pgp", \@{[keys %excludedKeys]}) unless ($self->{dummy});
+  }
+}
+
+sub IsBinaryZipRequired {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $zip = shift;
+
+  # If the required_binaries keyword isn't used, we need all builds
+  return 1 unless defined $self->{iniData}->RequiredBinaries($comp);
+
+  unless ($zip =~ /^binaries_(.*)\.zip$/) {
+    die "Error: Unexpected file \"$zip\" in $comp $ver\n";
+  }
+  my $category = $1;
+  foreach my $requiredBinary (@{$self->{iniData}->RequiredBinaries($comp)}) {
+    if ($category =~ /^$requiredBinary/) {
+      return 1;
+    }
+  }
+  return 0;
+}
+
+sub ZipEncryptedReleaseFiles {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+
+  if ($self->{verbose}) {
+    print "Zipping encrypted files to $comp$ver.zip ...\n";
+  }
+	
+  #build up list of pgp encrypted files in TEMP_DIR 
+  my $tempDir = Utils::TempDir();  
+  opendir(TEMPDIR, $tempDir);
+  my @encryptedFiles = grep {/\.pgp$/} readdir TEMPDIR;
+  closedir(TEMPDIR);
+
+  unless (@encryptedFiles || $self->{dummy}) {
+    die "Error: No encrypted files exist in $tempDir\n";
+  }	
+
+  #zip list of pgp encrypted files (archive only, no compression)
+  my $origDir = getcwd();
+  chdir($tempDir);
+  my $zipName = "$tempDir/$comp$ver.zip";
+  print "Zipping @encryptedFiles to \"$zipName\"\n";
+  eval {
+    Utils::ZipList($zipName, \@encryptedFiles, $self->{verbose} > 1, 1) unless ($self->{dummy});
+  };
+  chdir ($origDir);
+  if ($@) {
+    die $@;
+  }	 
+}
+
+sub SendZippedReleaseFile {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $localdir = shift;
+  
+  my $localFile = Utils::TempDir()."/$comp$ver.zip";
+  my $remoteFile = $self->PathData->RemoteArchivePathForExportingComponent($comp, $ver, $localdir, $self->{remoteSite})."/$comp$ver.zip";
+
+  print "Sending \"$localFile\" to \"$remoteFile\"\n" if ($self->{verbose});
+  $self->{remoteSite}->SendFile($localFile, $remoteFile) unless ($self->{dummy});
+}
+
+sub SendLogFile {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+
+  
+  my $localLogFile = Utils::TempDir()."/$comp$ver.log";
+  my $remoteLogFile = $self->{iniData}->RemoteLogsDir($comp)."/$comp$ver.log";
+
+  if ($self->{verbose}) {
+    print "Sending $comp $ver log file to remote site \"$remoteLogFile\"\n";
+  }
+
+  return if ($self->{dummy});
+
+  #create empty log file
+  open LOG, ">$localLogFile"  or die "Error: Cannot open $localLogFile for writing\n";
+  close LOG;
+
+  #send log file to the remote site
+  $self->{remoteSite}->SendFile($localLogFile, $remoteLogFile);
+
+  unlink $localLogFile;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+RelTransfer::Export.pm - Export releases to the remote site
+
+=head1 SYNOPSIS
+
+ use RelTransfer::Export;
+
+ $exporter = RelTransfer::Export->New(ini_data => $iniData,
+				      force => 1;
+				      verbose => 1);
+
+ $exporter->TransferRelease('componentname', 'componentversion');
+
+=head1 DESCRIPTION
+
+Implements the abstract TransferRelease method from the C<RelTransfer> base class module which transfers a release from the local archive to the remote site.
+
+=head1 INTERFACE
+
+=head2 New
+
+Passed an argument list in the form of hash key value pairs. The supported arguments are...
+
+ ini_data    =>  $iniData_object
+ force       =>  $force_integer
+ verbose     =>  $verbosity_integer
+
+Returns a reference to a C<RelTransfer::Export> object.
+
+=head2 TransferRelease
+
+Passed a component name and version number. Performs the following steps:
+
+=over 4
+
+=item *
+
+Check to see if the release can or needs to be exported. If the component does not exist in the users export table no attempt will be made to export it. If the component is listed in the export table but the release already exists on the remote site then, again, no attempt will be made to export it (unless the C<force> member variable is set to a nonzero value)
+
+=item *
+
+Encrypt the release files (ie source zips, binaries zip and reldata file). The keys used to encrypt the files depend on the data stored in the users export table 
+
+=item *
+
+Create a zip archive (without compression) of the encrypted files 
+
+=item *
+
+Send the release zip file to the remote site
+
+=item *
+
+If a remote logs dir is defined in the F<reltools.ini> file send an empty log file to the remote site 
+
+=back
+
+=head2 ExamineExportedRelease
+
+This goes through most of the same stages above, but instead of actually transferring the zip file, it will ensure that the size of the existing file on the remote site matches that which is expected.
+
+=head1 KNOWN BUGS
+
+None
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/RelTransfer/Import.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,344 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# RelTransfer::Import.pm
+#
+
+package RelTransfer::Import;
+
+use strict;
+use Utils;
+use File::Copy;
+use File::Basename;
+use File::Path;
+use Cwd;
+use RelTransfer;
+use vars qw(@ISA);
+@ISA=("RelTransfer");
+
+#
+# Constructor
+#
+
+sub Initialize {
+  my $self = shift;
+
+  $self->SUPER::Initialize();
+
+  #set the passphrase for decryption
+  $self->SetPgpPassPhrase();
+}
+
+#
+# Public methods
+#
+
+sub TransferRelease {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $noPassphraseRetry = shift;
+
+  print "\nImporting $comp $ver...\n" if ($self->{verbose});
+
+  #check to see if ok to import
+  if ($self->ReleaseExistsInLocalArchive($comp, $ver) and not $self->{force}) {
+    my $localReleaseDir = $self->PathData->LocalArchivePathForExistingComponent($comp, $ver);
+    my $reldatafile = File::Spec->catfile( $localReleaseDir,"reldata");
+    if (-f $reldatafile) {
+      print "$comp $ver already exists in local archive\n" if ($self->{verbose});
+      return 0;
+    }
+    print "$comp $ver is corrupted - attempting to remove and re-import.\n";
+    my $origDir = cwd();
+
+    chdir(dirname($localReleaseDir)); #If you try to rmtree a UNC path the cwd must also be a UNC path
+    rmtree ($localReleaseDir) or die "$localReleaseDir can't be deleted\n";
+    chdir($origDir);
+  }
+  unless ($self->ReleaseExistsOnRemoteSite($comp, $ver)) {
+    die "Error: $comp $ver does not exist on remote site\n";
+  }
+
+  my $excludeRelease = 0;
+
+  #Get remote release file, unzip, decrypt and move to local archive
+  # We pass around the remote archive path because with the project-based
+  # PathData scheme, the remote location might affect which local location
+  # to put it in.
+  my $remoteDir = $self->PathData->RemoteArchivePathForExistingComponent($comp, $ver, $self->{remoteSite});
+  eval {
+    $self->GetZippedReleaseFile($comp, $ver, $remoteDir);
+    select STDOUT;$|=1;
+    $self->UnzipReleaseFile($comp, $ver);
+    select STDOUT;$|=1;
+    $self->DecryptReleaseFiles($comp, $ver, $noPassphraseRetry);
+    
+    # DEF104279 - If the users key can decrypt the exclude.txt then the user is not able to recieve this release.  
+    opendir(DIR, Utils::TempDir()) or die "Error: cannot open Utils::TempDir()\n";
+    $excludeRelease = 1 if (grep /exclude.txt$/, readdir DIR);
+    closedir(DIR);
+    
+    $self->MoveDecryptedFilesToArchive($comp, $ver, $remoteDir) if (!$excludeRelease);
+  };
+  if ($@) {
+    my $error = $@;
+    $self->CleanupTempDir();
+    my $localReleaseDir = $self->PathData->LocalArchivePathForImportingComponent($comp, $ver, $remoteDir);
+    if (-d $localReleaseDir) {
+      my $origDir = cwd();
+
+      chdir(dirname($localReleaseDir)); #If you try to rmtree a UNC path the cwd must also be a UNC path
+      rmtree ($localReleaseDir) or die "$localReleaseDir can't be deleted\n";
+      chdir($origDir);
+    }
+    die $error;
+  }
+  $self->CleanupTempDir();
+
+  print "$comp $ver successfully imported from remote site.\n" if ($self->{verbose} && !$excludeRelease);
+  return 1;
+}
+
+#
+# Private methods
+#
+
+sub GetZippedReleaseFile {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $remoteDir = shift;
+
+  my $localFile = Utils::TempDir()."/$comp$ver.zip";
+  my $remoteFile = "$remoteDir/$comp$ver.zip";
+
+  $self->{remoteSite}->GetFile($remoteFile, $localFile);
+}
+
+sub UnzipReleaseFile {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+
+  if ($self->{verbose}) {
+    print "Unzipping $comp$ver.zip ...\n";
+  }	
+  my $tempDir = Utils::TempDir();
+  $tempDir =~ s/[\/\\]$//;
+  $tempDir .= "/";
+  my $zipName = File::Spec->catfile("$tempDir","$comp$ver.zip");
+
+  my $zip = Archive::Zip->new($zipName);
+  foreach my $member ($zip->members()) {
+    my $filename=$member->fileName();
+    eval {Utils::ExtractFile($tempDir, $filename,$member, 0, 1, $self->{verbose})};  # 0 is being passed in because we are not validating 1 = Overwrite.
+    die "$@\n" if ($@); 
+  }
+  unlink $zipName;
+}
+
+sub DecryptReleaseFiles {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $noPassphraseRetry = shift;
+
+  #build up list of pgp encrypted files in TEMP_DIR 
+  my $tempDir = Utils::TempDir();
+  opendir(TEMPDIR, $tempDir);
+  my @encryptedFiles = grep {/\.pgp$/} readdir TEMPDIR;
+  closedir(TEMPDIR);
+
+  my $noFilesDecrypted = 1;
+ TRYAGAIN:
+  foreach my $encryptedFile (@encryptedFiles) {
+    my ($decryptedFile) = ($encryptedFile =~ /(.+).pgp$/);
+
+    #set the passphrase for decryption
+    $self->SetPgpPassPhrase();
+    # returns if it's already set
+
+    if ($self->{verbose}) {
+      print "Decrypting $encryptedFile ... \n";
+    }
+    eval {
+      $self->{crypt}->Decrypt("$tempDir/$encryptedFile", "$tempDir/$decryptedFile", $self->{pgpPassPhrase});
+    };
+    if ($@) {
+      if ($@ =~ /BAD_PASSPHRASE/i) {
+	$@ =~ s/BAD_PASSPHRASE//;
+	print "Incorrect PGP passphrase\n";
+
+        if ($noPassphraseRetry) {
+          die "\n";
+        }
+
+	$self->{pgpPassPhrase} = undef;
+	redo TRYAGAIN;
+      }
+      elsif ($@ =~ /NO_SECKEY/i) {
+	# Do nothing - it's perfectly possible that we don't have access to certain release files, particularly
+	# since the addition of 'exclude' keyword to ExportData.
+      }	
+      else {
+	die $@;
+      }	
+    }
+    else {
+      $noFilesDecrypted = 0;
+    }
+    unlink "$tempDir/$encryptedFile";
+  }
+
+  if ($noFilesDecrypted) {
+    die "Error: Unable to decrypt any part of $comp $ver (see FAQ for more detail)\n";
+  }
+}
+
+sub MoveDecryptedFilesToArchive {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = shift;
+  my $remotedir = shift;
+
+  if ($self->{verbose}) {
+    print "Moving release files to local archive ... \n";
+  }
+  my $tempDir = Utils::TempDir(); 
+  opendir(DIR, $tempDir) or die "Error: cannot open $tempDir\n";
+  my @releaseFiles = grep {$_ ne '.' and $_ ne '..'} readdir DIR;
+  closedir(DIR);
+  if (grep(lc($_) eq "reldata", @releaseFiles)) {
+    # Move the 'reldata' entry to the end
+    @releaseFiles = grep(lc($_) ne "reldata", @releaseFiles);
+    push @releaseFiles, "reldata";
+  }
+  unless (@releaseFiles) {
+    die; # If we've got this far, there should have been some files decyrpted.
+  }
+
+  #create release directory if doesnot exist
+  my $localReleaseDir = $self->PathData->LocalArchivePathForImportingComponent($comp, $ver, $remotedir);
+  unless (-e $localReleaseDir) {
+    Utils::MakeDir($localReleaseDir);
+  }
+  else {
+    #clean the local release directory if it already exists
+    opendir(DIR, $localReleaseDir) or die "Error: cannot open $localReleaseDir\n";
+    my @allFiles = grep {$_ ne '.' and $_ ne '..'} map {"$localReleaseDir/$_"} readdir DIR;
+    closedir(DIR);
+    unlink @allFiles;
+  }
+  foreach my $releaseFile (@releaseFiles) {
+    move("$tempDir/$releaseFile", "$localReleaseDir/$releaseFile") or die "Error: Unable to move $tempDir/$releaseFile to $localReleaseDir/$releaseFile: $!";
+
+    Utils::SetFileReadOnly("$localReleaseDir/$releaseFile");
+  }
+}
+
+sub SetPgpPassPhrase {
+  my $self = shift;
+
+  return if ($self->{pgpPassPhrase});
+  print "PGP passphrase: \n";
+  $self->{pgpPassPhrase} = Utils::QueryPassword();
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+RelTransfer::Import.pm - Import releases from the remote site
+
+=head1 SYNOPSIS
+
+ use RelTransfer::Import;
+
+ $importer = RelTransfer::Import->New(ini_data => $iniData,
+				      force => 1,
+				      verbose => 1);
+
+ $importer->TransferRelease('componentname', 'componentversion');
+
+=head1 DESCRIPTION
+
+Implements the abstract TransferRelease method from the C<RelTransfer> base class module which transfers a release from the remote site to the local archive.
+
+=head1 INTERFACE
+
+=head2 New
+
+Passed an argument list in the form of hash key value pairs. The supported arguments are...
+
+ ini_data    =>  $iniData_object
+ force       =>  $force_integer
+ verbose     =>  $verbosity_integer
+
+Returns a reference to a C<RelTransfer::Import> object.
+
+=head2 TransferRelease
+
+Passed a component name and version number. Performs the following steps:
+
+=over 4
+
+=item *
+
+Check to see if the release can or needs to be imported. If the release already exists on the local archive or does not exist on the remote site then do not attempt to import 
+
+=item *
+
+Get the release zip from the remote site
+
+=item *
+
+Unzip the release zip
+
+=item *
+
+Decrypt the release files (ie the reldata, source and binary zips)
+
+=item *
+
+Move the release files to the local archive
+
+=back
+
+=head1 KNOWN BUGS
+
+None
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/RemoteSite.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,159 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+package RemoteSite;
+
+use strict;
+use File::Basename;
+use Utils;
+
+#
+# Constructor
+#
+
+sub New {
+  my $invocant = shift;
+  my $class = ref($invocant) || $invocant;
+  my $self = {
+	      host => undef,
+	      verbose => 0
+	     };
+  bless $self, $class;
+  $self->Initialize(@_);
+  return $self;
+}
+
+sub Initialize {
+  my $self = shift;
+
+  my %args = @_;
+  $self->{host} = $args{host};
+  $self->{verbose} = $args{verbose};
+}
+
+#
+# Public getters/setters
+#
+
+sub Host {
+  my $self = shift;
+  if (defined $_[0]) {$self->{host} = shift;}
+  return $self->{host};
+}
+
+#
+# Private Methods
+#
+
+sub HandleError {
+  my $self = shift;
+  my $errorString = shift;
+
+  die "Error: $errorString\n";
+}
+
+#
+# Abstract methods (must be implemented in a subclass)
+#
+
+sub SendFile {
+  die "Error: Call to unimplemented abstract method ".ref($_[0])."::SendFile.\n";
+}
+
+sub GetFile {
+  die "Error: Call to unimplemented abstract method ".ref($_[0])."::GetFile.\n";
+}
+
+sub FileExists {
+  die "Error: Call to unimplemented abstract method ".ref($_[0])."::FileExists.\n"; 
+}
+
+sub DirList {
+  die "Error: Call to unimplemented abstract method ".ref($_[0])."::DirList.\n";
+}
+
+sub MakeDir {
+  die "Error: Call to unimplemented abstract method ".ref($_[0])."::MakeDir.\n";
+}
+
+sub FileSize {
+  die "Error: Call to unimplemented abstract method ".ref($_[0])."::FileSize.\n";
+}
+
+sub DeleteFile {
+  die "Error: Call to unimplemented abstract method ".ref($_[0])."::DeleteFile.\n";
+}
+
+sub MoveFile {
+  die "Error: Call to unimplemented abstract method ".ref($_[0])."::MoveFile.\n";
+}
+
+sub FileModifiedTime {
+  die "Error: Call to unimplemented abstract method ".ref($_[0])."::FileModifiedTime.\n";
+}
+
+
+
+1;
+
+=head1 NAME
+
+RemoteSite.pm - Abstract base module for remote site access
+
+=head1 DESCRIPTION
+
+C<RemoteSite> is the abstract base module to a family of modules of the form C<RemoteSite::>F<HostType> which are used to transfer files to and from a remote site. Each module in the C<RemoteSite> directory must implement the following abstract interface...
+
+=over 4
+
+=item * SendFile($localFile, $remoteFile)
+
+Should copy C<$localFile> from the local drive to C<$remoteFile> on the remote site.
+
+=item * GetFile($remoteFile, $localFile)
+
+Should copy C<$remoteFile> from the remote site to C<$localFile> on the local drive.
+
+=item * bool FileExists($remoteFile)
+
+Should return a non zero value if C<$remoteFile> exists or zero if not.
+
+=back
+
+If no connection can be made to the remote site then the module must throw an error containing the words C<"cannot connect">
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/RemoteSite/FTP.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,867 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# RemoteSite::FTP.pm
+#
+
+package RemoteSite::FTP;
+
+use strict;
+use Net::FTP;
+use File::Basename;
+use IO::File;
+
+use RemoteSite;
+use vars qw(@ISA);
+@ISA=("RemoteSite");
+
+#
+# Constants
+#
+
+use constant DEFAULTRECONNECTS => 5;
+use constant DEFAULTTIMEOUT => 30;
+use constant BLOCKSIZE => 32768;
+
+#
+# Initialization
+#
+
+sub Initialize {
+  my $self = shift;
+
+  my %args = @_;
+  $self->{username} = $args{username};
+  $self->{password} = $args{password};
+  $self->{passiveMode} = $args{passive_mode};
+  $self->{resumeMode} = $args{resume_mode};
+  $self->{timeout} = $args{timeout};
+  $self->{reconnects} = $args{reconnects};
+
+  #call base class initialization
+  $self->SUPER::Initialize(@_);
+
+  #if username or password not defined ask for them interactively
+  unless ($self->Username()) {
+    $self->HandleError("No remote host defined.") unless $self->Host();
+    print 'FTP username: ';
+    my $userName = <STDIN>;
+    if ($userName) {
+      chomp ($userName);
+      $self->Username($userName);
+    }
+  }
+  unless ($self->Password()) {
+    print 'FTP password: ';
+    $self->Password(Utils::QueryPassword());
+  }
+
+  #set timeout to default value if not set or not a positive integer
+  unless (defined $self->{timeout} and $self->{timeout} =~ /^\d+$/) {
+    $self->{timeout} = DEFAULTTIMEOUT;
+  }
+
+  #set reconnects to default value if not set or not a positive integer
+  unless (defined $self->{reconnects} and $self->{reconnects} =~ /^\d+$/) {
+    $self->{reconnects} = DEFAULTRECONNECTS;
+  }
+
+  #connect to FTP site, login and set to binary mode
+  $self->Connect();
+}
+
+#
+# Public getters/setters
+#
+
+sub Username {
+  my $self = shift;
+  if (defined $_[0]) {$self->{username} = shift;}
+  return $self->{username};
+}
+
+sub Password {
+  my $self = shift;
+  if (defined $_[0]) {$self->{password} = shift;}
+  return $self->{password};
+}
+
+sub PassiveMode {
+  my $self = shift;
+  if (defined $_[0]) {$self->{passiveMode} = shift;}
+  return $self->{passiveMode};
+}
+
+sub ResumeMode {
+  my $self = shift;
+  if (defined $_[0]) {$self->{resumeMode} = shift;}
+  return $self->{resumeMode};
+}
+
+sub Timeout {
+  my $self = shift;
+  return $self->{timeout};
+}
+
+sub Reconnects {
+  my $self = shift;
+  return $self->{reconnects};
+}
+
+#
+# Public (from RemoteSite)
+#
+
+sub SendFile {
+  my $self = shift;
+  my $localFile = shift;
+  my $remoteFile = shift;
+
+  unless (defined $localFile and defined $remoteFile) {
+    $self->HandleError("Incorrect args passed to ".ref($self)."::SendFile");
+  }
+  $remoteFile =~ s{\\}{\/}g;   #convert back slashes to forward slashes
+
+  my $localFileSize = Utils::FileSize($localFile);
+
+  if ($self->{verbose}) {
+    print 'Uploading '.basename($localFile).' to FTP site '.$self->Host()." ...\n";
+  }
+  elsif ($localFileSize) {
+    print 'Uploading '.basename($localFile).':    ';
+  }
+
+  #check the file to upload exists
+  unless (-e $localFile) {
+    $self->HandleError("Local file $localFile does not exist");
+  }
+
+  #check remote dir exists and create it if it doesn't
+  my $remoteDir = dirname($remoteFile);
+  unless ($self->DirExists($remoteDir)) {
+    $self->MakeDir($remoteDir);
+  }
+
+  #if a file with same name as the remote file already exists delete it (even if it has different case)
+  if (my $actualFileName = $self->FileExists($remoteFile)) {
+    $self->DeleteFile($actualFileName);
+  }
+
+  #create a temporary file name in the remote directory for uploading to
+  my $tmpFile = $self->CreateTemporaryFile($remoteDir);
+
+  #send the file
+  if ($self->ResumeMode()) {
+    $self->SendFileWithResume($localFile, $tmpFile);
+  }
+  else {
+    if ($self->{verbose} and $localFileSize) {
+      print "Upload progress: ";
+    }
+    $self->DisplayProgress($localFileSize);
+    $self->SendFileWithoutResume($localFile, $tmpFile);
+  }
+
+  #rename the temporary file to the final remote file name
+  $self->MoveFile($tmpFile, $remoteFile);
+
+  if ($self->{verbose} > 1) {
+    print "Upload successful. Stored as $remoteFile on FTP site.\n";
+  }
+}
+
+sub GetFile {
+  my $self = shift;
+  my $remoteFile = shift;
+  my $localFile = shift;
+
+  unless (defined $localFile and defined $remoteFile) {
+    $self->HandleError("Incorrect args passed to ".ref($self)."::GetFile");
+  }
+
+  $remoteFile =~ s{\\}{\/}g;     #convert back slashes to forward slashes
+
+  if ($self->{verbose}) {
+    print "Downloading ".$remoteFile." from FTP site ".$self->Host()." ...\n";
+  }
+  else {
+    print "Downloading ".basename($remoteFile).":    ";
+  }
+
+  #check that the file to download exists
+  my $actualFileName;
+  unless ($actualFileName = $self->FileExists($remoteFile)) {
+    $self->HandleError("Remote file $remoteFile does not exist");
+  }
+
+  $remoteFile = $actualFileName;  #handles case sensitivity correctly
+
+
+  #check local dir exists and create it if it doesn't
+  my $localDir = dirname($localFile);
+  unless (-e $localDir) {
+    Utils::MakeDir($localDir);
+    if ($self->{verbose}) {
+      print "Created directory $localDir on local drive\n";
+    }
+  }
+
+  my $remoteFileSize = $self->FileSize($remoteFile);
+
+  if ($self->{verbose} and $remoteFileSize) {
+    print "Download progress: ";
+  }
+
+  #get the file
+  if ($self->ResumeMode()) {
+    $self->DisplayProgress($remoteFileSize);
+    $self->GetFileWithResume($remoteFile, $localFile);
+  }
+  else {
+    $self->DisplayProgress($remoteFileSize);
+    $self->GetFileWithoutResume($remoteFile, $localFile);
+  }
+
+  if ($self->{verbose} > 1) {
+    print "Download successful. Stored as $localFile on local site.\n";
+  }
+}
+
+sub FileExists {
+  my $self = shift;
+  my $remoteFile = shift;
+
+  unless (defined $remoteFile) {
+    return 0;
+  }
+
+  #use Carp qw/cluck/;
+  #cluck "Called FileExists";
+
+  # List the directory the file is in, and see if the file name is in it.
+  $remoteFile =~ s{\/}{\\}g;     #convert forward slashes to back slashes
+  (my $path, my $baseName, my $ext) = Utils::SplitFileName($remoteFile);
+  my $fileName = $baseName . $ext;
+  $path =~ s/\\$//;       #remove trailing slash
+  $path =~ s/\\/\//g;     #convert back slashes to forward slashes
+  my $ls = $self->DirList($path);
+  print "Checking for existence of remote file \"$remoteFile\" by looking for \"$fileName\" in \"$path\".\n" if ($self->{verbose} && $ls);
+  return 0 unless $ls; # definitely doesn't exist if nothing in the directory
+
+  my @present = grep /(\/|\\|^\s*)\Q$fileName\E\s*$/i, @$ls;
+  if (@present) {
+    print "Have found file: YES\n" if ($self->{verbose});
+    $present[0] = $path."/".$present[0] if ( $present[0] !~ /\// );
+    return $present[0];
+  }
+  else {
+    print "Have found file: NO\n" if ($self->{verbose});
+    return 0;
+  }
+}
+
+sub DirList {
+  my $self = shift;
+  my $remoteDir = shift;
+
+  print "Listing FTP directory $remoteDir\n" if ($self->{verbose});
+
+  my $dirlist_retries = 3;
+
+  $remoteDir =~ s{\\}{\/}g;   #convert back slashes to forward slashes
+
+  my $retry;
+  for ($retry = 0; $retry < $dirlist_retries; $retry++) {
+
+    unless ($self->Connected()) {
+      $self->Connect();
+    }
+
+    # The Net::FTP module that we're using here has two options for listing the contents
+    # of a directory. They are the 'ls' and 'dir' calls.
+    # The 'ls' call is great, and just returns a list of the items. But, irritatingly, it
+    # misses out directories: the returned list just contains names of *files*.
+    # dir is better, in some ways, as it lists directories too, but its output format
+    # varies from one FTP site to the next. So we have to stick with ls.
+    print "About to call dir(\"$remoteDir\")\n" if ($self->{verbose});
+    my $ls = $self->{ftp}->ls($remoteDir);
+    my $resp = $self->{ftp}->message;
+    print "FTP response to list command was \"$resp\"\n" if ($self->{verbose});
+    if (ref $ls) {
+      print "FTP dir returned \"$ls\" which is a ".(ref $ls)." containing ".(scalar @$ls)." items\n" if ($self->{verbose});
+      $ls = undef if ($resp eq ""); # if we didn't get "Opening BINARY mode connection..." or something similar, then we've
+        # come across the problem where Net::FTP says Net::FTP: Unexpected EOF on command channel at d:/reltools/2.6x/personal/bin/Net
+        # /FTP/dataconn.pm line 73. Unfortunately, it doesn't die, and it returns an empty array, so the only way to find out this has
+        # happened is to check message.
+      $ls = undef if ($resp =~ m/^connection closed/i);
+    }
+    # $ls might now be undef
+    if (ref($ls)) {
+      return $ls;
+    }
+    else {
+      if ($self->Connected()) {
+        return undef;
+      }
+      else {
+        print "Warning: Listing of \"$remoteDir\" failed due to an FTP site problem: " . $self->{ftp}->message . ". ";
+        if ($self->PassiveMode()) {
+          print "PASV mode FTP is currently enabled. This can cause connectivity issues under certain circumstances. ",
+            "To disable, remove the pasv_transfer_mode directive from your reltools.ini file.\n";
+        }
+        else {
+          print "PASV mode FTP is currently disabled. Enabling it can prevent connectivity issues under certain circumstances. ",
+            "To enable, add the pasv_transfer_mode directive to your reltools.ini file.\n";
+        }
+        # Fall through to next loop iteration
+      }
+    }
+  }
+  die "Error: have tried to list \"$remoteDir\" $retry times with no success - giving up\n";
+}
+
+sub MakeDir {
+  my $self = shift;
+  my $remoteDir = shift;
+
+  $remoteDir =~ s{\\}{\/}g;   #convert back slashes to forward slashes
+
+  unless ($self->Connected()) {
+    $self->Connect();
+  }
+
+  if ($self->{ftp}->mkdir($remoteDir, 1)) {
+    if ($self->{verbose}) {
+      print "Created directory $remoteDir on FTP site\n";
+    }
+  }
+  else {
+    if ($self->Connected()) {
+      $self->HandleError("Cannot make directory $remoteDir on FTP site");
+    }
+    else {
+      $self->MakeDir($remoteDir);
+    }
+  }
+}
+
+sub FileSize {
+  my $self = shift;
+  my $file = shift;
+
+  $file =~ s{\\}{\/}g;   #convert back slashes to forward slashes
+
+  unless ($self->Connected()) {
+    $self->Connect();
+  }
+
+  my $size;
+  if (defined($size = $self->{ftp}->size($file))) {
+    return $size;
+  }
+  else {
+    if ($self->Connected()) {
+      return 0;
+    }
+    else {
+      $self->FileSize($file);  #try to get the size again after reconnecting
+    }
+  }
+}
+
+sub DeleteFile {
+  my $self = shift;
+  my $file = shift;
+
+  $file =~ s{\\}{\/}g;   #convert back slashes to forward slashes
+
+  unless ($self->Connected()) {
+    $self->Connect();
+  }
+
+  if ($self->{ftp}->delete($file)) {
+    return;
+  }
+  elsif ($self->{ftp}->rmdir($file)) {
+    return;
+  }
+  else {
+    if ($self->Connected()) {
+      $self->HandleError("Cannot delete $file on FTP site");
+    }
+    else {
+      $self->DeleteFile($file);
+    }
+  }
+}
+
+sub MoveFile {
+  my $self = shift;
+  my $oldFile = shift;
+  my $newFile = shift;
+
+  $oldFile =~ s{\\}{\/}g;   #convert back slashes to forward slashes
+  $newFile =~ s{\\}{\/}g;   #convert back slashes to forward slashes
+
+  unless ($self->Connected()) {
+    $self->Connect();
+  }
+
+  if ($self->{ftp}->rename($oldFile, $newFile)) {
+    return;
+  }
+  else {
+    if ($self->Connected()) {
+      $self->HandleError("Cannot move $oldFile to $newFile on FTP site");
+    }
+    else {
+      $self->MoveFile($oldFile, $newFile);
+    }
+  }
+}
+
+sub FileModifiedTime {
+  my $self = shift;
+  my $file = shift;
+
+  $file =~ s{\\}{\/}g;   #convert back slashes to forward slashes
+
+  unless ($self->Connected()) {
+    $self->Connect();
+  }
+
+  my $modifiedTime;
+  if (defined($modifiedTime = $self->{ftp}->mdtm($file))) {
+    return $modifiedTime;
+  }
+  else {
+    if ($self->Connected()) {
+      print "Warning: failed to find modified time for file \"$file\"\n";
+      return undef;
+    }
+    else {
+      $self->FileModifiedTime($file);
+    }
+  }
+}
+
+#
+# Private
+#
+
+sub Connect {
+  my $self = shift;
+
+  unless ($self->Host()) {
+    $self->HandleError("Cannot connect FTP host name not defined");
+  }
+  my $debug = (($self->{verbose} && $self->{verbose} > 1) ? 1 : 0);
+
+  #Attempt to connect (or reconnect if connection fails)
+  for (1..$self->Reconnects()) {
+    $self->{ftp} = undef;
+    if ($self->{verbose}) {
+      print "Connecting to FTP site ".$self->Host()."...\n";
+    }
+    $self->{ftp} = Net::FTP->new($self->Host(),
+				 Passive => $self->PassiveMode(),
+				 Debug => $debug,
+				 Timeout => $self->Timeout());
+    if (defined $self->{ftp}) {
+      #login to FTP site
+      $self->{ftp}->login($self->Username(), $self->Password())
+	or $self->HandleError("FTP login failed");
+
+      #change transfer mode to binary
+      $self->{ftp}->binary()
+	or $self->HandleError("Failed to set FTP server to binary transfer mode");
+      return;
+    }
+  }
+  $self->HandleError("Cannot connect to FTP site ".$self->Host());
+}
+
+sub Connected {
+  my $self = shift;
+  return (defined $self->{ftp} and defined $self->{ftp}->pwd);
+}
+
+sub SendFileWithResume {
+  my $self = shift;
+  my $localFile = shift;
+  my $remoteFile = shift;
+
+  #open the local file for reading
+  $self->{localfh} = IO::File->new("< $localFile");
+  binmode($self->{localfh});
+
+  my $localFileSize = Utils::FileSize($localFile);
+
+  my $buffer;
+  my $bytesSent;
+  my $totalBytesSent = 0;
+
+ RESUME:
+  #Open the temporary file on the FTP site for writing/appending
+  $self->{dataconn} = $self->OpenRemoteFileForAppending($remoteFile);
+
+  if ($self->{verbose} and $localFileSize) {
+    print "Upload progress:    ";
+  }
+
+  #upload temporary file in blocks
+  while ($self->{localfh}->read($buffer, BLOCKSIZE)) {
+    eval {
+      $bytesSent = $self->{dataconn}->write($buffer, length($buffer));
+    };
+    unless ($bytesSent) {
+      if (my $ftpResponse = $self->{ftp}->getline()) {
+        $self->{ftp}->ungetline($ftpResponse);
+        next if ($ftpResponse !~ m/^(3|4|5)/);
+        chomp $ftpResponse;
+        print "\nError: The FTP server returned \'$ftpResponse\'\n";
+      }
+      
+      if ($self->Connected()) {
+	$self->HandleError("Cannot append to remote file $remoteFile");
+      }
+      else {
+	#connection dropped. Reconnect and resume upload
+	if ($self->{verbose}) {print "\n"}
+	$self->Connect();
+	$totalBytesSent = $self->FileSize($remoteFile);
+	seek($self->{localfh}, $totalBytesSent, 0);
+	goto RESUME;
+      }
+    }
+    else {
+      $totalBytesSent += $bytesSent;
+      $self->UpdateProgress($totalBytesSent, $localFileSize);
+    }
+  }
+
+  #close the remote and local files now the transfer has finished
+  $self->CloseAllOpenFiles();
+}
+
+sub SendFileWithoutResume {
+  my $self = shift;
+  my $localFile = shift;
+  my $remoteFile = shift;
+
+  my $putSuccess;
+  eval {
+    $putSuccess = $self->{ftp}->put($localFile, $remoteFile);
+  };
+  unless ($putSuccess) {
+    $self->HandleError("Problem occurred during FTP upload of $localFile");
+  }
+}
+
+sub GetFileWithResume {
+  my $self = shift;
+  my $remoteFile = shift;
+  my $localFile = shift;
+
+  my $totalBytesReceived = 0;
+  my $getSuccess;
+
+ RESUME:
+  unless ($self->Connected()) {
+    $self->Connect();
+  }
+
+  eval {
+    $getSuccess = $self->{ftp}->get($remoteFile, $localFile, $totalBytesReceived);
+  };
+
+  unless ($getSuccess or !$@) {
+    if ($self->Connected()) {
+      $self->HandleError("Problem occurred during FTP download of $remoteFile");
+    }
+    else {
+      $totalBytesReceived = Utils::FileSize($localFile);
+      goto RESUME;
+    }
+  }
+}
+
+sub GetFileWithoutResume {
+  my $self = shift;
+  my $remoteFile = shift;
+  my $localFile = shift;
+
+  unless ($self->Connected()) {
+    $self->Connect();
+  }
+
+  my $getSuccess;
+  eval {
+    $getSuccess = $self->{ftp}->get($remoteFile, $localFile);
+  };
+  unless ($getSuccess) {
+    $self->HandleError("Problem occurred during FTP download of $remoteFile");
+  }
+}
+
+sub DirExists {
+  my $self = shift;
+  my $remoteDir = shift;
+
+  $remoteDir =~ s{\\}{\/}g;     #convert back slashes to forward slashes
+
+  unless ($self->Connected()) {
+    $self->Connect();
+  }
+
+  my $pwd = $self->{ftp}->pwd() or $self->HandleError("Problem reading current working directory on FTP site\n");
+  my $exists = 0;
+  if ($self->{ftp}->cwd($remoteDir)) {
+    $exists = 1;
+    $self->{ftp}->cwd($pwd) or $self->HandleError("Problem changing current working directory back to $pwd on FTP site\n");
+  }
+
+  return $exists;
+}
+
+
+sub OpenRemoteFileForAppending {
+  my $self = shift;
+  my $remoteFile = shift;
+
+  unless ($self->Connected()) {
+    $self->Connect();
+  }
+
+  my $dataconn;
+  if (defined($dataconn = $self->{ftp}->appe($remoteFile))) {
+    return $dataconn;
+  }
+  else {
+    if ($self->Connected()) {
+      $self->HandleError("Cannot open $remoteFile for appending on FTP site");
+    }
+    else {
+      $self->OpenRemoteFileForAppending($remoteFile);
+    }
+  }
+}
+
+sub CloseAllOpenFiles {
+   my $self = shift;
+
+  if ($self->{localfh}) {
+    $self->{localfh}->close;
+    $self->{localfh} = undef;
+  }
+  if ($self->{dataconn}) {
+    $self->{dataconn}->close();
+    $self->{dataconn} = undef;
+  }
+}
+
+sub DisplayProgress {
+  my $self = shift;
+  my $total = shift;
+
+  my $numHashes = 50;
+  my $bytesPerHash = int $total / $numHashes;
+  if ($total) {
+    $self->{ftp}->hash(\*STDERR, $bytesPerHash);
+  }
+}
+
+sub UpdateProgress {
+  my $self = shift;
+  my $current = shift;
+  my $total = shift;
+
+  my $bytesPerPercent = int $total/100;
+  if ($current == $total) {
+    print "\b\b\b100%\n";
+  }
+  elsif ($bytesPerPercent == 0) {
+    print "\b\b0%";
+  }
+  else {
+    my $percentComplete = int $current/$bytesPerPercent;
+    if ($percentComplete < 10) {
+      print "\b\b$percentComplete%";
+    }
+    else {
+      print "\b\b\b$percentComplete%";
+    }
+  }
+}
+
+sub HandleError {
+  my $self = shift;
+  my $errorString = shift;
+
+  if (defined $self->{ftp}) {
+    $self->{ftp}->quit();
+    $self->{ftp} = undef;
+  }
+  $self->CloseAllOpenFiles();
+
+  #call the super class error handler
+  $self->SUPER::HandleError($errorString);
+}
+
+sub CreateTemporaryFile {
+  my $self = shift;
+  my $remoteDir = shift;
+
+  my $fileNum = 10000;
+  my $tmpFile = $remoteDir.'/lpdrt'.$fileNum.'.tmp';
+  while ($self->FileExists($tmpFile)) {
+    ++$fileNum;
+    $tmpFile = $remoteDir.'/lpdrt'.$fileNum.'.tmp';
+  }
+  return $tmpFile;
+}
+
+
+#
+# Destructor
+#
+
+sub DESTROY {
+  my $self = shift;
+
+  $self->CloseAllOpenFiles();
+
+  if (defined $self->{ftp}) {
+    if ($self->{verbose}) {
+      print "Dropping connection to FTP site ".$self->Host()."\n";
+    }
+    $self->{ftp}->quit();
+    $self->{ftp} = undef;
+  }
+}
+
+1;
+
+=head1 NAME
+
+RemoteSite::FTP.pm - Access a remote FTP site.
+
+=head1 SYNOPSIS
+
+ use RemoteSite::FTP;
+
+ $ftp = RemoteSite::FTP->New(host => 'ftp.somehost.com',
+	         	     username => 'myusername',
+			     password => 'mypassword',
+			     verbose => 1);
+
+ if ($ftp->FileExists('/somedir/someremotefile')) {
+   do something...
+ }
+ $ftp->SendFile('somelocalfile', 'someremotefile');
+ $ftp->GetFile('someremotefile', 'somelocalfile');
+
+=head1 DESCRIPTION
+
+C<RemoteSite::FTP> is inherited from the abstract base class C<RemoteSite>, implementing the abstract methods required for transfer of files to and from a remote site when the remote site is an FTP server.
+
+=head1 INTERFACE
+
+=head2 New
+
+Passed an argument list in the form of hash key value pairs. The supported arguments are...
+
+  host             => $host_address_string
+  username         => $user_name_string
+  password         => $pass_word_string
+  passiveMode      => $passive_mode_bool
+  resumeTransfers  => $resume_transfers_bool
+  timeout          => $timeout_integer
+  reconnects       => $reconnects_integer
+  verbose          => $verbosity_integer
+
+Returns a reference to a C<RemoteSite::FTP> object
+
+=head2 Host
+
+Returns the current value of the C<host> attribute which contains the host FTP address. If passed an argument sets the attribute to this new value.
+
+=head2 Username
+
+Returns the current value of the C<username> attribute which stores the user name required to access the FTP site. If passed an argument sets the attribute to this new value.
+
+=head2 Password
+
+Returns the current value of the C<password> attribute which stores the password required to access the FTP site. If passed an argument sets the attribute to this new value.
+
+=head2 SendFile
+
+Passed a local and a remote file name. Uploads the local file to the FTP site. Dies if upload fails
+
+=head2 GetFile
+
+Passed a remote and local file name. Downloads the remote file from the FTP site and stores it on the local drive. Dies if download fails.
+
+=head2 FileExists
+
+Passed a filename (with full path) on the FTP site. Returns a non zero value if the file exists.
+
+=head2 DirList
+
+Passed a directory name. Returns a list of files contained in the directory or undef if fails to read directory
+
+=head2 MakeDir
+
+Passed a directory name. Creates the directory on the FTP site
+
+=head2 DeleteFile
+
+Passed a file name. Deletes the file on the FTP site. Dies if fails
+
+=head2 FileSize
+
+Passed a file name. Returns the size of the file. Returns 0 if fails.
+
+=head2 FileModifiedTime
+
+Passed a file name. Returns the last modified time stamp of the file. Returns undef if fails
+
+=head2 MoveFile
+
+Passed two file names. Renames the first file to the second file name. Dies if fails.
+
+=head1 KNOWN BUGS
+
+None
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/RemoteSite/FTP/Experimental.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,120 @@
+# RemoteSite::FTP.pm
+#
+#Copyright (c) 2000-2006, The Perl Foundation. All rights reserved.
+#This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
+#
+
+package RemoteSite::FTP::Experimental;
+
+use strict;
+
+use RemoteSite::FTP;
+use vars qw(@ISA);
+@ISA=("RemoteSite::FTP");
+
+sub DirList {
+  my $self = shift;
+  my $remoteDir = shift;
+
+  print "Listing FTP directory $remoteDir\n" if ($self->{verbose});
+
+  my $dirlist_retries = 3;
+  
+  $remoteDir =~ s{\\}{\/}g;   #convert back slashes to forward slashes
+  
+  my $retry;
+  for ($retry = 0; $retry < $dirlist_retries; $retry++) {
+
+    unless ($self->Connected()) {
+      $self->Connect();
+    }
+
+    # The Net::FTP module that we're using here has two options for listing the contents 
+    # of a directory. They are the 'ls' and 'dir' calls.
+    # The 'ls' call is great, and just returns a list of the items. But, irritatingly, it
+    # misses out directories: the returned list just contains names of *files*.
+    # dir is better, in some ways, as it lists directories too, but its output format
+    # varies from one FTP site to the next. So we have to stick with ls.
+    print "About to call dir(\"$remoteDir\")\n" if ($self->{verbose});
+    my %hash = $self->dir($remoteDir);
+    my @items = keys %hash;
+    @items = grep { $_ ne "." && $_ ne ".." } @items;
+    @items = map { "$remoteDir/$_" } @items; # prepend the path as that's the output format
+      # that is expected of this function
+    return \@items;
+  }
+  die "Error: have tried to list \"$remoteDir\" $retry times with no success - giving up\n";
+}
+
+# Code from Net::FTP::Common v 4.0a
+sub dir {       
+  my ($self, $directory) = @_;
+
+  my $ftp = $self->{ftp};
+
+  my $dir = $ftp->dir($directory);
+  if (!defined($dir)) {
+    return ();
+  } else
+  {
+    my %HoH;
+
+    # Comments were made on this code in this thread:
+    # http://perlmonks.org/index.pl?node_id=287552
+
+    foreach (@{$dir})
+        {
+	      $_ = m#([a-z-]*)\s*([0-9]*)\s*([0-9a-zA-Z]*)\s*([0-9a-zA-Z]*)\s*([0-9]*)\s*([A-Za-z]*)\s*([0-9]*)\s*([0-9A-Za-z:]*)\s*([\w*\W*\s*\S*]*)#;
+
+        my $perm = $1;
+        my $inode = $2;
+        my $owner = $3;
+        my $group = $4;
+        my $size = $5;
+        my $month = $6;
+        my $day = $7;
+        my $yearOrTime = $8;
+        my $name = $9;
+        my $linkTarget;
+
+        if ( $' =~ m#\s*->\s*([A-Za-z0-9.-/]*)# )       # it's a symlink
+                { $linkTarget = $1; }
+
+        $HoH{$name}{perm} = $perm;
+        $HoH{$name}{inode} = $inode;
+        $HoH{$name}{owner} = $owner;
+        $HoH{$name}{group} = $group;
+        $HoH{$name}{size} = $size;
+        $HoH{$name}{month} = $month;
+        $HoH{$name}{day} = $day;
+        $HoH{$name}{yearOrTime} =  $yearOrTime;
+        $HoH{$name}{linkTarget} = $linkTarget;
+
+        }
+  return(%HoH);
+  }
+}
+
+
+1;
+
+=head1 NAME
+
+RemoteSite::FTP::Experimental.pm - Access a remote FTP site.
+
+=head1 DESCRIPTION
+
+C<RemoteSite::FTP::Experimental> is inherited from the abstract base class C<RemoteSite>, implementing the abstract methods required for transfer of files to and from a remote site when the remote site is an FTP server.
+
+This class differs from C<RemoteSite::FTP> only in using a different mechanism for listing the contents of directories on FTP sites.
+
+=head1 KNOWN BUGS
+
+None
+
+=head1 COPYRIGHT
+
+Copyright (c) 2000-2006, The Perl Foundation. All rights reserved.
+This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/RemoteSite/FTP/Proxy.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,212 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# RemoteSite::FTP::Proxy.pm
+#
+
+package RemoteSite::FTP::Proxy;
+
+use strict;
+use Net::FTP;
+
+use RemoteSite::FTP;
+use vars qw(@ISA);
+@ISA=("RemoteSite::FTP");
+
+#
+# Initialization 
+#
+
+sub Initialize {
+  my $self = shift;
+
+  my %args = @_;
+  $self->{proxy} = $args{proxy};
+  $self->{proxyUsername} = $args{proxy_username};
+  $self->{proxyPassword} = $args{proxy_password};
+
+  #if proxy username or password not defined ask for them interactively
+  unless ($self->ProxyUsername()) {
+    print 'Proxy FTP username: ';
+    my $userName = <STDIN>;
+    if ($userName) {
+      chomp ($userName);
+      $self->ProxyUsername($userName);
+    }
+  }
+  unless ($self->ProxyPassword()) {
+    print 'Proxy FTP password: ';
+    $self->ProxyPassword(Utils::QueryPassword());
+  }
+  
+  #call base class initialization
+  $self->SUPER::Initialize(@_);
+}
+
+#
+# Public getters/setters
+#
+
+sub Proxy {
+  my $self = shift;
+  if (defined $_[0]) {$self->{proxy} = shift;}
+  return $self->{proxy};
+}
+
+sub ProxyUsername {
+  my $self = shift;
+  if (defined $_[0]) {$self->{proxyUsername} = shift;}
+  return $self->{proxyUsername};
+}
+
+sub ProxyPassword {
+  my $self = shift;
+  if (defined $_[0]) {$self->{proxyPassword} = shift;}
+  return $self->{proxyPassword};
+}
+
+#
+# Private
+#
+
+sub Connect {
+  my $self = shift;
+
+  unless ($self->Proxy()) {
+    $self->HandleError("Cannot connect to proxy, host name not defined");
+  }
+  unless ($self->Host()) {
+    $self->HandleError("Cannot connect to FTP site from proxy, host name not defined");
+  } 
+
+  my $debug = (($self->{verbose} > 1) ? 1 : 0);
+
+  #Attempt to connect (or reconnect of connection fails)
+  for (1..$self->Reconnects()) {
+    $self->{ftp} = undef;    
+    if ($self->{verbose}) {
+      print "Connecting to proxy server ".$self->Proxy()."...\n";
+    }
+    $self->{ftp} = Net::FTP->new($self->Proxy(),
+				 Passive => $self->PassiveMode(),
+				 Debug => $debug,
+				 Timeout => $self->Timeout());
+    if (defined $self->{ftp}) {
+      # code to support Blue Coat proxy ftp server
+
+      if ($self->{ftp}->message =~ /Blue Coat Ftp Service/) {
+      # do BC login
+      $self->{ftp}->login($self->Username().'@'.$self->Host()." ".$self->ProxyUsername(),
+        $self->Password(),
+        $self->ProxyPassword())
+        or $self->HandleError("FTP via Blue Coat proxy login failed");
+      }
+      else {
+        #login to proxy server
+        $self->{ftp}->login($self->ProxyUsername(), $self->ProxyPassword())
+          or $self->HandleError("Proxy server login failed");
+
+        #login to ftp site from proxy server
+        $self->{ftp}->login($self->Username().'@'.$self->Host(), $self->Password())
+          or $self->HandleError("FTP login failed");
+        }
+      #change transfer mode to binary
+      $self->{ftp}->binary()
+        or $self->HandleError("Failed to set FTP server to binary transfer mode");
+      return; 
+    }
+  }
+  $self->HandleError("Cannot connect to proxy server ".$self->Proxy());
+}  
+
+1;
+
+=head1 NAME
+
+RemoteSite::FTP::Proxy.pm - Access a remote FTP site via a proxy.
+
+=head1 SYNOPSIS
+
+ use RemoteSite::FTP::Proxy;
+
+ $ftp = RemoteSite::FTP::Proxy->New(host => 'ftp.somehost.com',
+				    username => 'myusername',
+				    password => 'mypassword',
+				    proxy => 'ftp.proxyhost.com',
+				    proxy_username => 'myproxyuser',
+				    proxy_password => 'myproxypass',
+				    verbose => 1);
+
+ if ($ftp->FileExists('/somedir/someremotefile')) {
+   do something...
+ }
+ $ftp->SendFile('somelocalfile', 'someremotefile');
+ $ftp->GetFile('someremotefile', 'somelocalfile'); 
+
+=head1 DESCRIPTION
+
+C<RemoteSite::FTP::Proxy> is inherited from C<RemoteSite::FTP>, it modifies base module methods to implement accessing an FTP site via a proxy server
+
+=head1 INTERFACE
+
+=head2 New
+
+Passed an argument list in the form of hash key value pairs. The supported arguments are...
+
+  host           => $host_address_string
+  username       => $user_name_string
+  password       => $pass_word_string
+  proxy          => $proxy_address_string
+  proxy_username => $proxy_username_string
+  proxy_password => $proxy_password_string
+  verbose        => $verbosity_integer
+
+Returns a reference to a C<RemoteSite::FTP::Proxy> object
+
+=head2 Proxy
+
+Returns the current value of the C<proxy> attribute which contains the proxy FTP address. If passed an argument sets the attribute to this new value.
+
+=head2 ProxyUsername
+
+Returns the current value of the C<proxyUsername> attribute which stores the user name required to access the proxy FTP site. If passed an argument sets the attribute to this new value.
+
+=head2 ProxyPassword
+
+Returns the current value of the C<proxyPassword> attribute which stores the password required to access the proxy FTP site. If passed an argument sets the attribute to this new value.
+
+=head1 KNOWN BUGS
+
+None
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/RemoteSite/FTP/Proxy/Experimental.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,70 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# RemoteSite::FTP::Proxy::Experimental.pm
+#
+
+package RemoteSite::FTP::Proxy::Experimental;
+
+use strict;
+
+use RemoteSite::FTP::Experimental;
+use RemoteSite::FTP::Proxy;
+use vars qw(@ISA);
+@ISA=("RemoteSite::FTP::Experimental", "RemoteSite::FTP::Proxy");
+
+sub Connect {
+	my $self = shift;
+	$self->RemoteSite::FTP::Proxy::Connect();
+}
+
+sub DirList {
+	my $self = shift;
+	$self->RemoteSite::FTP::Experimental::DirList();
+}
+
+1;
+
+=head1 NAME
+
+RemoteSite::FTP::Experimental::Proxy.pm - Access a remote FTP site.
+
+=head1 DESCRIPTION
+
+This class differs from C<RemoteSite::FTP::Proxy> only in using a different mechanism for listing the contents of directories on FTP sites.
+
+=head1 KNOWN BUGS
+
+None
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/RemoteSite/NetDrive.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,343 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# RemoteSite::NetDrive.pm
+#
+
+package RemoteSite::NetDrive;
+
+use strict;
+use File::Copy;
+use File::Basename;
+
+use RemoteSite;
+use vars qw(@ISA);
+@ISA=("RemoteSite");
+
+#
+# Initialization 
+#
+
+sub Initialize {
+  my $self = shift;
+  $self->SUPER::Initialize(@_);
+
+  #connect to network drive
+  $self->Connect();	
+}
+
+#
+# Public (from RemoteSite)
+#
+
+sub SendFile {
+  my $self = shift;
+  my $localFile = shift;
+  my $remoteFile = shift;
+
+  unless (defined $localFile and defined $remoteFile) {
+    $self->HandleError("Incorrect args passed to ".ref($self)."::SendFile");
+  }
+
+  $remoteFile = Utils::ConcatenateDirNames($self->Host(), $remoteFile);
+  $remoteFile =~ s{\\}{\/}g;
+
+  if ($self->{verbose}) {
+    print "Copying ".basename($localFile)." to network drive ".$self->Host()."...\n";
+  }
+  elsif (Utils::FileSize($localFile)) {
+    print "Copying ".basename($localFile)."...\n";
+  }
+
+  unless (-e $localFile) {
+    $self->HandleError("Local file $localFile does not exist");
+  }
+
+  $self->Connect();
+
+  my $remoteDir = dirname($remoteFile);
+  unless (-e $remoteDir) {
+    eval {
+      Utils::MakeDir($remoteDir);
+    };
+    if ($@) {
+      $self->HandleError("Cannot make directory $remoteDir on network drive ".$self->Host());
+    }
+    if ($self->{verbose}) {
+      print "Created directory $remoteDir on network drive\n";
+    }
+  } 	
+ 
+  #use a temporary file during uploads
+  my $tmpFile = $remoteDir.'/TMP_'.basename($remoteFile);
+
+  unless (copy($localFile, $tmpFile)){
+    my $flag = 0;
+    my $errormessage = $!;
+    
+    if(-e $tmpFile) { 
+      unlink $tmpFile or $flag=1;
+    }
+
+    if($errormessage =~ /No such file or directory/i) {
+      $errormessage = "Unknown Error - Check disk space or missing file/directory";
+    }
+    
+    if($flag) {
+      $self->HandleError("Unable to cleanup $tmpFile, after the copy of $localFile failed : $errormessage");
+    }
+    $self->HandleError("Unable to copy $localFile to $tmpFile : $errormessage");
+  }
+  
+  unless (move($tmpFile, $remoteFile)){
+    unlink $tmpFile;    
+    $self->HandleError("Unable to move $tmpFile to $remoteFile : $!");
+  }
+  
+  if ($self->{verbose} > 1) {
+    print "Copy successful. Stored as $remoteFile on network drive.\n";
+  }  
+}
+
+sub GetFile {
+  my $self = shift;
+  my $remoteFile = shift;
+  my $localFile = shift;
+
+  unless (defined $localFile and defined $remoteFile) {
+    $self->HandleError("Incorrect args passed to ".ref($self)."::GetFile");
+  }
+
+  my $host = $self->Host();
+  $host =~ s{\\}{\/}g;
+  $remoteFile =~ s{\\}{\/}g;
+
+  if ($self->{verbose}) {
+    print "Copying ".basename($remoteFile)." from network drive $host...\n";
+  }
+  else {
+    print "Copying ".basename($remoteFile)."...\n";
+  }
+
+  $self->Connect();
+
+  if ($self->{verbose}) {
+    print "Checking whether \"$remoteFile\" exists...\n";
+  }
+  unless ($self->FileExists($remoteFile)) {
+    $self->HandleError("Remote file $remoteFile does not exist on $host");
+  }
+
+  #check local dir exists and create it if it doesn't
+  my $localDir = dirname($localFile);
+  unless (-e $localDir) {
+    Utils::MakeDir($localDir);
+    if ($self->{verbose}) {
+      print "Created directory $localDir on local drive\n";
+    }
+  }
+
+  unless (copy($host.$remoteFile, $localFile)) {
+    unlink $localFile;
+    $self->HandleError("Transfer of $remoteFile from $host to local drive failed");
+  }
+  if ($self->{verbose} > 1) {
+    print "Copy successful. Stored as $localFile on local drive.\n";
+  }
+}
+
+sub FileExists {
+  my $self = shift;
+  my $remoteFile = shift;
+
+  unless (defined $remoteFile) {
+    return 0;
+  }
+
+  $self->Connect();
+
+  $remoteFile = Utils::ConcatenateDirNames($self->Host(), $remoteFile);
+  $remoteFile =~ s{\\}{\/}g; 
+  return (-e $remoteFile);
+}
+
+sub DirExists {
+  my $self = shift;
+  my $remoteDir = shift;
+  return $self->FileExists($remoteDir);
+}
+
+sub DirList {
+  my $self = shift;
+  my $remoteDir = shift;
+
+  my $host = $self->Host();
+  $host =~ s{\\}{\/}g;
+  $remoteDir =~ s{\\}{\/}g;
+
+  opendir(DIR, Utils::ConcatenateDirNames($host, $remoteDir)) or $self->HandleError("Cannot open $remoteDir on network drive ".$self->Host());
+  my @dir = map {"$remoteDir/$_"} grep {$_ ne '.' and $_ ne '..'} readdir DIR;
+  closedir(DIR);
+  return \@dir;
+}
+
+sub MakeDir {
+  my $self = shift;
+  my $remoteDir = shift;
+
+  $remoteDir = $self->Host().$remoteDir;
+  $remoteDir =~ s{\\}{\/}g;
+
+  eval {
+    Utils::MakeDir($remoteDir);
+  };
+  if ($@) {
+    $self->HandleError("Cannot make directory $remoteDir on network drive ".$self->Host());
+  }
+}
+
+sub FileSize {
+  my $self = shift;
+  my $remoteFile = shift;
+
+  $remoteFile = Utils::ConcatenateDirNames($self->Host(), $remoteFile);
+  $remoteFile =~ s{\\}{\/}g; 
+
+  return Utils::FileSize($remoteFile);
+}
+
+sub DeleteFile {
+  my $self = shift;
+  my $remoteFile = shift;
+
+  $remoteFile = Utils::ConcatenateDirNames($self->Host(), $remoteFile);
+  $remoteFile =~ s{\\}{\/}g; 
+  
+  rmdir $remoteFile or unlink $remoteFile or $self->HandleError("Cannot delete $remoteFile on network dirve ($!)");
+}
+
+sub MoveFile {
+  my $self = shift;
+  my $oldFile = shift;
+  my $newFile = shift;
+
+  $oldFile = Utils::ConcatenateDirNames($self->Host(), $oldFile);
+  $oldFile =~ s{\\}{\/}g;
+  $newFile = Utils::ConcatenateDirNames($self->Host(), $newFile);
+  $newFile =~ s{\\}{\/}g;
+
+  move($oldFile, $newFile) or $self->HandleError("Cannot move $oldFile to $newFile on network drive");
+}
+
+sub FileModifiedTime {
+  my $self = shift;
+  my $remoteFile = shift;
+
+  $remoteFile = Utils::ConcatenateDirNames($self->Host(), $remoteFile);
+  $remoteFile =~ s{\\}{\/}g; 
+
+  return Utils::FileModifiedTime($remoteFile);
+}
+
+
+#
+# Private
+#
+
+sub Connect {
+  my $self = shift;
+
+  unless ($self->Host()) {
+    $self->HandleError("Network drive host name not defined");
+  }
+  my $hostName = $self->Host();
+  unless (-e $hostName) {
+    $self->HandleError("Cannot connect to network drive $hostName");
+  }
+}
+
+1;
+
+=head1 NAME
+
+RemoteSite::NetDrive.pm - Access a remote network drive
+
+=head1 SYNOPSIS
+
+ use RemoteSite::NetDrive;
+
+ $drive = RemoteSite::NetDrive->New(host => '\\server\share',
+			            verbose => 1);
+
+ if ($drive->FileExists('/somedir/someremotefile')) {
+   do something...
+ }
+ $drive->SendFile('somelocalfile', 'someremotefile');
+ $drive->GetFile('someremotefile', 'somelocalfile');
+
+=head1 DESCRIPTION
+
+C<RemoteSite::NetDrive> is inherited from the abstract base class C<RemoteSite>, implementing the abstract methods required for transfer of files to and from a remote site when the remote site is a network drive.
+
+=head1 INTERFACE
+
+=head2 New
+
+Passed an argument list in the form of hash key value pairs. The supported arguments are...
+
+  host      => $host_address_string
+  verbose   => $verbosity_integer
+
+Returns a reference to a C<RemoteSite::NetDrive> object
+
+=head2 Host
+
+Returns the current value of the C<host> attribute which contains the UNC path of the network drive. If passed an argument sets the attribute to this new value.
+
+=head2 SendFile
+
+Passed a local and a remote file name. Uploads the local file to the network drive.
+
+=head2 GetFile
+
+Passed a remote and local file name. Downloads the remote file from the network drive and stores it on the local drive.
+
+=head2 FileExists
+
+Passed a filename (with full path) on the network drive. Returns a non zero value if the file exists.
+
+=head1 KNOWN BUGS
+
+None
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/RemoteSite/NetDrive/MultiVolumeExport.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,300 @@
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# RemoteSite::NetDrive::MultiVolumeExport.pm
+#
+
+package RemoteSite::NetDrive::MultiVolumeExport;
+
+use strict;
+use File::Copy;
+use File::Basename;
+
+use RemoteSite;
+use RemoteSite::NetDrive;
+use vars qw(@ISA);
+@ISA=("RemoteSite::NetDrive");
+
+
+#
+# Constants,
+#
+
+use constant KLogDirName => '\sent_log';
+
+
+#
+# Initialization
+#
+
+sub Initialize {
+  my $self = shift;
+  my %args = @_;
+  $self->{maxExportVolumeSize} = $args{max_export_volume_size};
+  $self->SUPER::Initialize(@_);
+  $self->Connect();
+  $self->InitNextExportVolume();
+}
+
+
+#
+# Public (from RemoteSite)
+#
+
+sub SendFile {
+  my $self = shift;
+  my $localFile = shift;
+  my $remoteFile = shift;
+
+  unless ($localFile and $remoteFile) {
+    $self->HandleError("Incorrect args passed to ".ref($self)."::SendFile");
+  }
+  unless (-e $localFile) {
+    $self->HandleError("Local file $localFile does not exist");
+  }
+
+  my $fileSize = Utils::FileSize($localFile);
+  if ($fileSize > $self->{maxExportVolumeSize}) {
+    die "Error: \"$localFile\" is larger than the maximum export volume size ($self->{maxExportVolumeSize})\n";
+  }
+  $self->{currentExportVolumeSize} += $fileSize;
+  if ($self->{currentExportVolumeSize} > $self->{maxExportVolumeSize}) {
+    $self->InitNextExportVolume();
+    $self->{currentExportVolumeSize} = $fileSize;
+  }
+  $self->SUPER::SendFile($localFile, Utils::ConcatenateDirNames($self->CurrentExportVolumeName(), $remoteFile));
+  $self->WriteIndexEntry($remoteFile);
+}
+
+sub GetFile {
+  my $self = shift;
+  $self->HandleError("Function 'GetFile' not supported by ".ref($self)."\n");
+}
+
+sub FileExists {
+  my $self = shift;
+  my $remoteFile = shift;
+  unless (defined $remoteFile) {
+    return 0;
+  }
+  $self->Connect();
+  $remoteFile = Utils::ConcatenateDirNames($self->LogDir(), $remoteFile);
+  return (-e $remoteFile);
+}
+
+sub DirList {
+  my $self = shift;
+  $self->HandleError("Function 'DirList' not supported by ".ref($self)."\n");
+}
+
+sub MakeDir {
+  my $self = shift;
+  $self->HandleError("Function 'MakeDir' not supported by ".ref($self)."\n");
+}
+
+sub FileSize {
+  my $self = shift;
+  my $file = shift;
+  my $volume = $self->LookupIndexEntry($file);
+  my $fullName = Utils::ConcatenateDirNames($self->Host(), $self->ExportVolumeName($volume));
+  $fullName = Utils::ConcatenateDirNames($fullName, $file);
+  return Utils::FileSize($fullName);
+}
+
+sub DeleteFile {
+  my $self = shift;
+  $self->HandleError("Function 'DeleteFile' not supported by ".ref($self)."\n");
+}
+
+sub MoveFile {
+  my $self = shift;
+  $self->HandleError("Function 'MoveFile' not supported by ".ref($self)."\n");
+}
+
+sub FileModifiedTime {
+  my $self = shift;
+  $self->HandleError("Function 'FileModifiedTime' not supported by ".ref($self)."\n");
+}
+
+
+#
+# Private.
+#
+
+sub SetExportVolumePrefix {
+  my $self = shift;
+  $self->{exportVolumePrefex} = time . '__#';
+}
+
+sub CurrentExportVolumeName {
+  my $self = shift;
+  return $self->ExportVolumeName($self->{currentExportVolume});
+}
+
+sub ExportVolumeName {
+  my $self = shift;
+  my $volume = shift;
+  my $name = "$self->{exportVolumePrefex}$volume";
+  Utils::TidyFileName(\$name);
+  return $name;
+}
+
+sub LookupIndexEntry {
+  my $self = shift;
+  my $file = lc(shift);
+  Utils::TidyFileName(\$file);
+  if (exists $self->{index}->{$file}) {
+    return $self->{index}->{$file};
+  }
+  return undef;
+}
+
+sub WriteIndexEntry {
+  # Index entries keep track of which volume of a set a particular release may be found in.
+  my $self = shift;
+  my $file = lc(shift);
+  Utils::TidyFileName(\$file);
+  $self->WriteLogEntry($file);
+  $self->{index}->{$file} = $self->{currentExportVolume};
+}
+
+sub WriteLogEntry {
+  # Log entries keep track of what has been sent. KLogDirName should not be deleted between exports.
+  my $self = shift;
+  my $file = shift;
+  $file = Utils::ConcatenateDirNames($self->LogDir(), $file);
+  Utils::MakeDir(dirname($file));
+  $self->WriteLogReadMe();
+  open (LOG, ">$file") or die "Error: Unable to write log entry \"$file\": $!\n";
+  close (LOG);
+}
+
+sub WriteLogReadMe {
+  my $self = shift;
+  my $readMe = Utils::ConcatenateDirNames($self->LogDir(), 'readme.txt');
+  unless (-e $readMe) {
+    open (README, ">$readMe") or die "Error: Couldn't open \"$readMe\" for writing: $!\n";
+    print README "This directory contains a log automatically written by the LPD Release Tools as a result of one
+or more exports being performed to a remote site of type 'multi-volume'. It's purpose is to keep track of which
+component releases have already been exported, so they don't get sent again. If you delete this directory, on next
+export, all component releases will need to be sent.";
+    close (README);
+  }
+}
+
+sub ExternaliseIndex {
+  # The index will later be interalised by MultiVolumeExport.
+  my $self = shift;
+  for (my $i = 0; $i <= $self->{currentExportVolume}; ++$i) {
+    my $dir = Utils::ConcatenateDirNames($self->Host(), $self->ExportVolumeName($i));
+    Utils::MakeDir($dir);
+    open (INDEX, ">$dir/index") or die "Error: Couldn't open \"$dir/index\" for writing: $!\n";
+    foreach my $file (sort keys %{$self->{index}}) {
+      print INDEX "$file\t$self->{index}->{$file}\n";
+    }
+    close (INDEX);
+  }
+}
+
+sub InitNextExportVolume {
+  my $self = shift;
+  $self->{currentExportVolumeSize} = 0;
+  if (exists $self->{currentExportVolume}) {
+    ++$self->{currentExportVolume};
+  }
+  else {
+    $self->{currentExportVolume} = 0;
+    $self->SetExportVolumePrefix();
+  }
+  my $exportVol = Utils::ConcatenateDirNames($self->Host(), $self->CurrentExportVolumeName());
+  Utils::MakeDir($exportVol);
+}
+
+sub LogDir {
+  my $self = shift;
+  return Utils::ConcatenateDirNames($self->Host(), KLogDirName);
+}
+
+sub DESTROY {
+  my $self = shift;
+  if ($self->{currentExportVolume} == 0 and not exists $self->{index}) {
+    # Nothing was exported, so cleanup.
+    my $dir = Utils::ConcatenateDirNames($self->Host(), $self->CurrentExportVolumeName());
+    rmdir ($dir) or die "Error: Couldn't remove directory \"$dir\": $!\n";
+  }
+  else {
+    $self->ExternaliseIndex();
+  }
+}
+
+1;
+
+=head1 NAME
+
+RemoteSite::NetDrive::MultiVolumeExport.pm - Export encyrpted releases to multiple fixed size volumes
+
+=head1 DESCRIPTION
+
+The purpose of this remote site module is to allow releases to be exported to directories to be stored on removable media such as writable CD ROMs. It is derived from C<RemoteSite::NetDrive> since a lot of the basic file manipulation is identical.
+
+The maximum size of each export volume can be specified using the C<IniData> keyword C<max_export_volume_size>. This is used to determine when to start a new volume. At the end of the export process a set of uniquely named directories (the export volumes) will have been created in C<host> directory (specified using the C<IniData> keyword C<remote_host>). There will also be a directory called F<sent_log>, which should be retain between exports so the tools can work out which release have already been exported. Once the export volumes have been archived, they may be deleted.
+
+=head1 INTERFACE
+
+=head2 New
+
+Passed an argument list in the form of hash key value pairs. The supported arguments are...
+
+  host                   => $host_address_string
+  max_export_volume_size => $max_export_volume_size_integer
+  verbose                => $verbosity_integer
+
+Returns a reference to a C<RemoteSite::NetDrive::MultiVolumeExport> object.
+
+=head2 SendFile
+
+Passed a local and a remote file name. Checks the file will fit in the current volume, if not creates a new volume. Logs the file and then differs to C<RemoteSite::NetDrive> to perform the copy.
+
+=head2 GetFile
+
+Not suppored, since this module may only be used for exporting.
+
+=head2 FileExists
+
+Passed a filename (with full path). Checks the F<sent_log> to see is this has already been exported. Returns true if it has, false otherwise.
+
+=head1 KNOWN BUGS
+
+None
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/RemoteSite/NetDrive/MultiVolumeImport.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,227 @@
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# RemoteSite::NetDrive::MultiVolumeImport.pm
+#
+
+package RemoteSite::NetDrive::MultiVolumeImport;
+
+use strict;
+use File::Copy;
+use File::Basename;
+
+use RemoteSite;
+use RemoteSite::NetDrive;
+use vars qw(@ISA);
+@ISA=("RemoteSite::NetDrive");
+
+
+#
+# Initialization
+#
+
+sub Initialize {
+  my $self = shift;
+  $self->SUPER::Initialize(@_);
+  $self->Connect();	
+}
+
+
+#
+# Public (from RemoteSite)
+#
+
+sub SendFile {
+  my $self = shift;
+  $self->HandleError("Function 'SendFile' not supported by ".ref($self)."\n");
+}
+
+sub GetFile {
+  my $self = shift;
+  my $remoteFile = shift;
+  my $localFile = shift;
+
+  unless (defined $localFile and defined $remoteFile) {
+    $self->HandleError("Incorrect args passed to ".ref($self)."::GetFile");
+  }
+
+  $self->InitAppropriateImportVolume($remoteFile);
+  $self->SUPER::GetFile($remoteFile, $localFile);
+}
+
+sub FileExists {
+  my $self = shift;
+  my $remoteFile = shift;
+  unless (defined $remoteFile) {
+    return 0;
+  }
+  $self->Connect();
+  return (defined $self->LookupIndexEntry($remoteFile));
+}
+
+sub DirList {
+  my $self = shift;
+  $self->HandleError("Function 'DirList' not supported by ".ref($self)."\n");
+}
+
+sub MakeDir {
+  my $self = shift;
+  $self->HandleError("Function 'MakeDir' not supported by ".ref($self)."\n");
+}
+
+sub FileSize {
+  my $self = shift;
+  $self->HandleError("Function 'FileSize' not supported by ".ref($self)."\n");
+}
+
+sub DeleteFile {
+  my $self = shift;
+  $self->HandleError("Function 'DeleteFile' not supported by ".ref($self)."\n");
+}
+
+sub MoveFile {
+  my $self = shift;
+  $self->HandleError("Function 'MoveFile' not supported by ".ref($self)."\n");
+}
+
+sub FileModifiedTime {
+  my $self = shift;
+  $self->HandleError("Function 'FileModifiedTime' not supported by ".ref($self)."\n");
+}
+
+
+#
+# Private.
+#
+
+sub LookupIndexEntry {
+  my $self = shift;
+  my $file = lc(shift);
+  Utils::TidyFileName(\$file);
+  unless (exists $self->{index}) {
+    $self->InternaliseIndex();
+  }
+  if (exists $self->{index}->{$file}) {
+    return $self->{index}->{$file};
+  }
+  return undef;
+}
+
+sub InternaliseIndex {
+  # Read the index created by MultiVolumeExport.
+  my $self = shift;
+  my $index = $self->Host(). '/index';
+  unless (-e $index) {
+    $self->ChangeImportVolume(0);
+  }
+  open (INDEX, $index) or die "Error: Couldn't open \"$index\": $!\n";
+  while (my $line = <INDEX>) {
+    (my $file, my $volume) = $line =~ /(.*)\t(.*)/;
+    $self->{index}->{$file} = $volume;
+  }
+  close (INDEX);
+}
+
+sub InitAppropriateImportVolume {
+  my $self = shift;
+  my $file = shift;
+  my $requiredVolume = $self->LookupIndexEntry($file);
+  unless (defined $requiredVolume) {
+    die "Error: \"$file\" not found in any volumes\n";
+  }
+  if ($requiredVolume == $self->{currentImportVolume}) {
+    return;
+  }
+  else {
+    $file = Utils::ConcatenateDirNames($self->Host(), $file);
+  AGAIN:
+    $self->ChangeImportVolume($requiredVolume);
+    unless (-e $file) {
+      print "Error: \"$file\" not found
+       Try again? [y/n] ";
+      my $response = <STDIN>;
+      chomp $response;
+      if ($response =~ /^y$/i) {
+	goto AGAIN;
+      }
+      die "Aborting...\n";
+    }
+  }
+}
+
+sub ChangeImportVolume {
+  my $self = shift;
+  my $volume = shift;
+  print "Insert import volume #$volume and hit return...\n";
+  <STDIN>;
+  $self->{currentImportVolume} = $volume;
+}
+
+1;
+
+=head1 NAME
+
+RemoteSite::NetDrive::MultiVolumeImport.pm - Import releases that were exported using RemoteSite::NetDrive::MultiVolumeExport
+
+=head1 DESCRIPTION
+
+The purpose of this remote site module is to allow releases that were exported using C<RemoteSite::NetDrive::MultiVolumeExport> to be imported. The export process writes a complete index into each volume. This is read to determine which volumes contain which files. The user is prompted to change volumes are necessary. Location of the import volume is specified using the C<IniData> keyword C<remote_host>.
+
+=head1 INTERFACE
+
+=head2 New
+
+Passed an argument list in the form of hash key value pairs. The supported arguments are...
+
+  host      => $host_address_string
+  verbose   => $verbosity_integer
+
+Returns a reference to a C<RemoteSite::NetDrive::MultiVolumeImport> object
+
+=head2 SendFile
+
+Not suppored, since this module may only be used for importing.
+
+=head2 GetFile
+
+Passed a remote and local file name. Finds out which volume the file lives on, and requests that the user changes volumes if necessary. Then differs to C<RemoteSite::NetDrive> to perform the copy.
+
+=head2 FileExists
+
+Passed a filename (with full path). Returns true if the file exists in the volume index, false otherwise.
+
+=head1 KNOWN BUGS
+
+None
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/RemoveRel	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,142 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'RemoveRel');
+my $comp;
+my $source;
+my $force;
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+RemoveRel();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  
+  GetOptions("h" => \$help, "v+" => \$verbose, "s" => \$source, "f" => \$force);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $comp = shift @ARGV;
+
+  unless (defined $comp and $#ARGV == -1) {
+    print "Error: Invalid number of arguments\n";
+    Usage(1);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: removerel [options] <component>
+
+options:
+
+-h  help
+-s  remove source also
+-f  (deprecated)
+-v  verbose output (-vv very verbose)\n");
+}
+
+sub RemoveRel {
+  my $envDb = EnvDb->Open($iniData, $verbose);
+  
+  if (!$envDb->ComponentExistsInDatabase($comp)) {
+    die "Error: $comp not currently installed\n";
+  }
+  
+  eval {
+    if($source) {
+      $envDb->DeleteSource($comp, undef, 1);
+    }
+  };
+  if ($@) {
+    print "$@";
+  }
+  
+  $envDb->RemoveComponent($comp);
+}
+
+
+__END__
+
+=head1 NAME
+
+RemoveRel - Removes the binaries of a component release from the current environment.
+
+=head1 SYNOPSIS
+
+  removerel [options] <component>
+
+options:
+
+  -h  help
+  -f  (deprecated)
+  -v  verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+When the binaries from a component release are installed into an environment using either C<GetRel> or C<GetEnv>, a file is stored in F<\epoc32\relinfo> containing details of the files that were unpacked. This information is used by C<RemoveRel> to remove the installed binaries. C<RemoveRel> also updates the environment database to reflect this change. Note, C<RemoveRel> makes no attempt to the remove the release's source code.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/RemoveRel.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/SourceInfo	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,862 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use CommandController;
+use DirHandle;
+use Utils;
+
+
+# Globals.
+#
+
+my $verbose = 0;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'SourceInfo');
+my $envDb;
+my $file;
+my $comp;
+my $listindividualfiles;
+my $includeignores;
+my $includebinaries;
+my $summary;
+my $expandepoc32;
+my $countfiles;
+my $skipWarnings;
+
+$envDb = EnvDb->Open($iniData, $verbose);
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+SourceInfo();
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions('h' => \$help, 'v+' => \$verbose, 'f' => \$listindividualfiles, 'i' => \$includeignores, 'b' => \$includebinaries, 's' => \$summary, 'c' => \$countfiles, 'force' => \$skipWarnings);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  if (!$ARGV[0]) {
+    $comp = undef; # it already is, but let's be explicit...
+  } else {
+    if ($envDb->Version($ARGV[0])) {
+      $comp = shift @ARGV;
+    } else {
+      $file = shift @ARGV;
+      Utils::AbsoluteFileName(\$file);
+    }
+  }
+
+  unless ($#ARGV == -1) {
+    print "Error: Invalid arguments\n";
+    Usage(1);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: sourceinfo [options] [ component | file ]
+
+options:
+
+-h  help
+-v  verbose output (-vv very verbose)
+-f  list individual files, not just directories
+-c  count the files in each directory (can be slow)
+-b  include binary files in report
+-i  include 'ignored' files in report
+--force (deprecated)
+-s  print summary report (don't specify a component or a file)\n");
+}
+
+sub SourceInfo {
+  $expandepoc32 = WorkOutWhetherExpandEpoc32();
+  if ($file) {
+    die "Error: can't do summary report about a particular file.\n" if ($summary);
+    DoFileReport($file);
+  } elsif ($comp) {
+    die "Error: can't do summary report about a particular component.\n" if ($summary);
+    DoComponentReport($comp);
+  } elsif ($summary) {
+    DoSummaryReport();
+  } else {
+    DoFullReport();
+  }
+}
+
+##############################################################################################
+# Implementation notes
+#
+# This script is very complex. Here is a guide to what's going on.
+# First look at the main SourceInfo function, above. You'll see there's four different
+# types of report, corresponding to the four ways the command line can be used. (-s is
+# treated as its own type of report).
+# Each one of these creates and uses a similar set of objects in different ways.
+#
+# The objects used are:
+#   SourceInfo::OwnerFinder::xxxx - these classes are factories for SourceInfo::Owners.
+#   SourceInfo::Owner - these objects represent each way a directory or file can be owned.
+#                       A single component may produce many 'owners' - for example,
+#                       one for each of its binary files and one for each of the 'source'
+#                       items in its MRP.
+#   SourceInfo::Item - this class is the heart of this script. It represents each item
+#                      on disk (whether a directory or file). It may contain a link
+#                      to one or more owners, if that directory or file is owned.
+#
+# Each of the reports work like this:
+#  1- build up (partial) tree of all the files/directories on disk made of SourceInfo::Items.
+#  2- create a load of SourceInfo::Owners.
+#  3- tell the owners to attach themselves to the relevant items in the tree of Items.
+#  4- tell the items to make themselves shown/hidden depending on various settings.
+#  5- gather the shown items into a list which can be made into a table.
+# 
+# The only exception is the -s option, which doesn't really stick to this pattern for
+# stage 5. But it does for the rest.
+#
+# The different reports work on this in different ways. For example, if a component is 
+# specified on the command line, OwnerFinders (and therefore owners) are only created for 
+# that component.
+#
+# The tree created in Stage 1 starts out small. (In fact, it's just the root). It grows
+# items under many circumstances:
+#  -- an owner item requests an item deep in the tree which hasn't been expanded that
+#     far yet.
+#  -- ExpandAll is called, corresponding to the -f option.
+#  -- ExpandUnownedDirs is called, which will list all the items inside each directory
+#     that isn't owned. This ensures that all unowned files and directories are listed
+#     in the tree.
+#  -- we're a sourceinfo <file> and we have to expand the tree to include the file.
+#  
+#  It's worth noting that the -b flag has two effects. Firstly, binary OwnerFinders
+#  and Owners are not created. Secondly, (more importantly?) neither ExpandAll
+#  nor ExpandUnownedDirs will do any expansion inside \epoc32. So you'll never
+#  see items inside that tree, and 'binary' items outside that tree won't appear
+#  either. (In fact, they'll be reported as having no owner).
+#  \epoc32 is not included if -i is specified, either.
+#
+############################################################################
+
+sub WorkOutWhetherExpandEpoc32 {
+  return 1 if $includebinaries && $includeignores;
+  return 0;
+}
+  
+# The four following methods are the different types of report that can
+# be done.
+
+sub DoFileReport {
+  my $file = shift;
+
+  print "Warning: \"$file\" is not a file and is not a component that is currently installed. The following report assumes it is a file which you could install with \"getsource\"\n" unless -e $file;
+
+  my $owners = FindOwners(); # we have to create all possible owners
+  my $root = new SourceInfo::Item("", undef);
+  $root->FindItem($file, 1); # expand the tree to include our file
+
+  print "Finding owned items\n" if $verbose;
+  FindOwnedItems($owners, $root, 0); # mark the Items as having Owners
+
+  my $items = $root->GetAll;
+  $root->DecideVisibility;
+
+  $iniData->TableFormatter->PrintTable(MakeTable($items), 1); 
+}
+
+sub DoSummaryReport {
+  my $root = CreateRoot();
+  $root->ExpandAll() if ($listindividualfiles);
+  my $owners = FindOwners();
+  FindOwnedItems($owners, $root, 1);
+  $root->ExpandUnownedDirs();
+
+  $root->DecideVisibility;
+
+  my @noowners;
+  my @multiowners;
+  foreach my $item (@{$root->GetAllVisible}) {
+    my $count = $item->NumOwners;
+    if ($count == 0) {
+      push @noowners, $item;
+    } elsif ($count > 1) {
+      push @multiowners, $item;
+    } else {
+      # This has exactly one ownership. Joy!
+    }
+  }
+
+  print "Files/areas without ownership:\n";
+  foreach (@noowners) {
+    print "  ".$_->Path . "\n";
+  }
+ 
+  print "Files/areas with multiple ownership:\n";
+  foreach (@multiowners) {
+    print "  ".$_->Path . "\n";
+  }
+}
+
+sub DoFullReport {
+  print "Doing full report\n" if $verbose;
+  my $root = CreateRoot();
+  $root->ExpandAll() if ($listindividualfiles);
+  my $owners = FindOwners();
+  FindOwnedItems($owners, $root, 1);
+  $root->ExpandUnownedDirs() unless $listindividualfiles; # might have already done it
+
+  my $items = $root->GetAll;
+  if ($listindividualfiles) {
+    $root->ShowAll();
+  } else {
+    $root->DecideVisibility();
+  }
+
+  $iniData->TableFormatter->PrintTable(MakeTable($items), 1); 
+}
+
+sub DoComponentReport {
+  my $component = shift;
+
+  my $root = CreateRoot();
+  my $owners = FindOwners($component);
+  FindOwnedItems($owners, $root, 1);
+  $root->ExpandOwnedDirs() if ($listindividualfiles);
+
+  my $items = $root->GetAll;
+  if ($listindividualfiles) {
+    $root->ShowAll();
+  } else {
+    $root->DecideVisibility();
+  }
+
+  $iniData->TableFormatter->PrintTable(MakeTable($items), 1); 
+}
+
+# The following global functions are used by all the above types of report.
+
+sub CreateRoot {
+  return new SourceInfo::Item("",undef);
+}
+
+sub LimitRelevantOwners {
+  my $ownername = shift;
+  my $owners = shift;
+
+  my @owners = grep { $_->Component =~ m/^\Q$ownername\E$/i } @$owners;
+  return \@owners;
+}
+
+# This takes a load of Items and makes a nice table. Mostly, it
+# just tells each item to produce some relevant rows.
+
+sub MakeTable {
+  my $items = shift;
+
+  my @header = ( "Area" );
+  push @header, "Files" if $countfiles;
+  push @header, ( "Component", "Element", "Status", "Notes" );
+  my @rows = (\@header);
+  foreach my $item (sort { $a->Path cmp $b->Path } @$items) {
+    next unless $item->{show};
+    push @rows, @{$item->MakeRows()};
+  }
+  return \@rows;
+}
+
+# This tells each owner to attach itself to the right place
+# in the tree of Items.
+
+sub FindOwnedItems {
+  my $owners = shift;
+  my $root = shift;
+  my $createnew = shift;
+
+  foreach my $owner (@$owners) {
+    $owner->FindOwnedItem($root, $createnew);
+  }
+}
+
+# This produces all the Owner objects, by way of creating some
+# ephemeral OwnerFinder objects. This is the only place
+# OwnerFinders are used.
+
+sub FindOwners {
+  my $component = shift; # may be undefined
+  my @owners;
+
+  my @ownerfinders = (new SourceInfo::OwnerFinder::Source);
+  push @ownerfinders, new SourceInfo::OwnerFinder::Ignores if $includeignores;
+  push @ownerfinders, new SourceInfo::OwnerFinder::Binaries if $includebinaries;
+
+  @owners = map { @{ $_->FindOwners($component) } } @ownerfinders;
+
+  return \@owners;
+}
+
+##########################################################################################
+##########################################################################################
+package SourceInfo::Item;
+
+sub new {
+  my $class = shift;
+  my $name = shift;
+  my $parent = shift;
+  my $status = shift;
+  die "No name provided" unless (defined $name);
+  return bless {
+    name => $name, # '' if root. NOT '\'
+    children => undef,
+    parent => $parent, # undef if root
+    category => undef,
+    owners => [], # links to any Owner objects.
+    fullpath => undef,
+    status => $status,
+    children => {}, # yes, there are circular references and the whole tree won't die until global cleanup
+    show => 0 # whether to show in the results
+  }, (ref $class || $class);
+}
+
+# Produce rows relevant to put into the results tables
+
+sub MakeRows {
+  my $self = shift;
+
+  my $owners = $self->Owners();
+
+  my @rows;
+  foreach my $owner (@$owners) { # for each owner...
+    push @rows, $self->MakeARow($owner);
+  }
+  if ($self->NumOwners == 0) { # or, if we don't have an owner :-(
+    push @rows, $self->MakeARow();
+  }
+  return \@rows;
+}
+
+sub MakeARow {
+  my $self = shift;
+  my $owner = shift;
+
+  my @row = ($self->Path());
+  push @row, $self->NumFiles() if ($countfiles);
+  if ($owner) {
+    push @row, $owner->Component();
+    push @row, $owner->Element();
+    push @row, $self->Category() || $owner->Status() || "-";
+  } else {
+    push @row, ("-", "-");
+    push @row, $self->Category() || "-";
+  }
+  push @row, $self->Notes();
+  return \@row;
+}
+
+sub NumOwners {
+  my $self = shift;
+  return scalar @{$self->Owners()};
+}
+
+# Will later be used for IPR category.
+# This currently isn't used.
+
+sub Category {
+  my $self = shift;
+  return undef;
+}
+
+# These two methods are alternatives for making some or all of the
+# items visible, depending on their ownership.
+
+sub ShowAll {
+  my $self = shift;
+  $self->{show} = 1;
+  $self->ExecuteChildren(sub {$_->ShowAll});
+}
+
+sub DecideVisibility {
+  my $self = shift;
+  print "Deciding visibility for ".$self->Path.". Is directory: ".$self->IsDirectory.", owners: ".@{$self->{owners}}.", children: ".%{$self->{children}}."\n" if $verbose > 3;
+  if ( $self->IsFile() || @{$self->{owners}} || !%{$self->{children}} ) {
+    $self->{show} = 1;
+  }
+  $self->ExecuteChildren(sub { $_->DecideVisibility } );
+}
+
+sub NumFiles {
+  my $self = shift;
+
+  $self->ExpandAll;
+  my $files = ($self->IsDirectory)?0:1;
+  foreach (values %{$self->{children}}) {
+    $files += $_->NumFiles;
+  }
+  
+  return $files;
+}
+
+sub Notes {
+  my $self = shift;
+  my $numowners = $self->NumOwners;
+  if ($numowners == 0) {
+    return "NONE";
+  } elsif ($numowners > 1) {
+    return "MULTIPLE";
+  } elsif ($self->Owners()->[0]->Type() eq "ignore") {
+    return "IGNORED";
+  }
+}
+ 
+sub IsDirectory {
+  my $self = shift;
+  return -d ($self->Path || "\\");
+}
+
+sub IsFile {
+  my $self = shift;
+  return -f ($self->Path || "\\");
+}
+
+# Destructor. Not currently used - just in case we want to delete
+# a tree full of circular references.
+
+sub DeleteAll {
+  my $self = shift;
+  $self->{parent} = undef;
+  $self->ExecuteChildren( sub { $_->DeleteAll } );
+}
+
+# Returns a list of each item
+
+sub GetAll {
+  my $self = shift;
+  my @items = ($self);
+  $self->ExecuteChildren(sub { push @items, @{$_->GetAll} } );
+  return \@items;
+}
+
+# Returns a list of each item that's visible
+
+sub GetAllVisible {
+  my $self = shift;
+  my @items = grep { $_->{show} } @{$self->GetAll};
+  return \@items;
+}
+
+sub ExpandAll {
+  my $self = shift;
+  print "." if $verbose;
+  $self->FindChildren;
+  $self->ExecuteChildren( sub { $_->ExpandAll } );
+}
+
+# This expands any directories which don't have owners, but some
+# of the subdirectories are owned.
+
+sub ExpandUnownedDirs {
+  my $self = shift;
+  print "Expanding unowned for ".$self->Path."\n" if $verbose>1;
+  return unless $self->IsDirectory;
+  return if $self->NumOwners;
+  # We also return if NONE of the children are owned, 
+  # i.e. we're a totally unowned directory.
+  return unless $self->{childownersfound};
+  $self->FindChildren;
+  $self->ExecuteChildren (sub { $_->ExpandUnownedDirs } );
+}
+
+sub ExpandOwnedDirs {
+  my $self = shift;
+
+  $self->ExpandAll() if (@{$self->{owners}});
+  $self->ExecuteChildren (sub { $_->ExpandOwnedDirs } );
+}
+
+# Recursively applies a function to each item
+
+sub ExecuteChildren {
+  my $self = shift;
+  my $sub = shift;
+  &$sub($_) foreach (values %{$self->{children}});
+}
+
+sub FindChildren {
+  my $self = shift;
+  print "Finding children for ".$self->Path."\n" if $verbose>1;
+  return if defined $self->{foundchildren};
+  return if ($self->Path eq "\\epoc32" && !$expandepoc32);
+  $self->{foundchildren} = 1;
+  $self->ReadDir();
+  my %kids = map { (lc $_, new SourceInfo::Item($_, $self)) } @{$self->{dirlisting}};
+  print "Currently has these children: ".(join (', ', map { "$_->{name} ".$_->NumOwners } values %{$self->{children}}))."\n" if $verbose>2;
+  $self->{children} ||= {};
+  $self->{children} = { %kids, %{$self->{children}} };
+}
+
+sub NumChildren {
+  my $self = shift;
+  $self->ReadDir;
+  return @{$self->{dirlisting}};
+}
+
+sub ReadDir {
+  my $self = shift;
+  return if $self->{dirlisting};
+  $self->{dirlisting} = [] and return unless $self->IsDirectory();
+  print "Reading directory for ".$self->Path."\n" if $verbose > 1;
+  my $dh = new DirHandle($self->Path() || "\\") or die "Couldn't open directory handle for \"".$self->Path()||"\\"."\" because $!";
+  $self->{dirlisting} = [ grep { ! m/^\./ } $dh->read ];
+  $dh = undef; # I know this is OBVIOUSLY going to happen at the end of this function but
+               # I am getting strange out-of-file-descriptor errors.
+}
+
+sub Path {
+  my $self = shift;
+  unless (defined $self->{fullpath}) {
+    if (defined $self->{parent}) {
+      $self->{fullpath} = $self->{parent}->Path() . "\\" . $self->{name};
+    } else {
+      $self->{fullpath} = $self->{name};
+    }
+  }
+  return $self->{fullpath};
+}
+
+# This is used to find a particular item in the tree,
+# given a path. (It's used when searching for something
+# that is owned, for example). The 'createnew' flag
+# specifies whether it should create new files and directories
+# if necessary.
+
+sub FindItem {
+  my $self = shift;
+  my $path = shift;
+  my $createnew = shift;
+
+  print "Asked to find \"$path\"...\n" if ($verbose > 3);
+  
+  my @segments = split (/\\/, $path);
+  unshift @segments, "" unless $segments[0] eq ""; # root segment has no name
+  $self->FindItemBySegments($createnew, @segments);
+}
+
+sub FindItemBySegments {
+  my ($self, $createnew, $firstseg, @othersegs) = @_;
+
+  print "\n$self->{name} (path ".$self->Path().") (createnew $createnew):--\n" if ($verbose > 3);
+  print "First segment $firstseg, others @othersegs\n" if ($verbose > 3);
+
+  die "No path provided" unless defined $firstseg;
+
+  if (lc $firstseg eq lc $self->{name}) {
+    if (@othersegs) {
+      foreach (values %{$self->{children}}) {
+        my $found = $_->FindItemBySegments($createnew, @othersegs);
+        return $found if $found;
+      }
+      return undef unless $createnew;
+      return $self->CreateNewSegment(@othersegs);
+    } else {
+      return $self;
+    }
+  } else {
+    return undef;
+  }
+}
+
+sub CreateNewSegment {
+  my ($self, $firstseg, @othersegs) = @_;
+  print "Creating new segment for $firstseg (others @othersegs) within ".$self->Path."\n" if $verbose>1;
+
+  my $kid = new SourceInfo::Item($firstseg, $self);
+  $self->{children}->{lc $firstseg} = $kid;
+  $self->{childownersfound} = 1;
+  return $kid->FindItemBySegments(1, $firstseg, @othersegs);
+}
+
+sub Owners {
+  my $self = shift;
+  my @allowners = @{$self->{owners}};
+  return \@allowners unless ($self->{parent});
+  push @allowners, @{$self->{parent}->Owners};
+  return \@allowners;
+}
+
+sub AddOwner {
+  my $self = shift;
+  my $owner = shift;
+  push @{$self->{owners}}, $owner;
+}
+
+##########################################################################################
+##########################################################################################
+package SourceInfo::Owner;
+
+sub new {
+  my $class = shift;
+  my $type = shift;
+  my $component = shift;
+  my $element = shift;
+  my $status = shift;
+
+  return bless {
+    type => $type, # ignore, binary or source
+    component => $component,
+    element => $element,
+    status => $status
+  }, (ref $class || $class);
+}
+
+sub FindOwnedItem {
+  my $self = shift;
+  my $root = shift;
+  my $createnew = shift;
+  
+  print "About to find the owned item for \"$self->{element}\" ($createnew)\n" if ($verbose > 3);
+  my $item = $root->FindItem($self->{element}, $createnew);
+  die "Failed to create new item" if (!$item && $createnew);
+  $item->AddOwner($self) if $item;
+}
+
+sub Component {
+  my $self = shift;
+  return "-" if ($self->Type() eq "ignore");
+  return $self->{component};
+}
+
+sub Element {
+  my $self = shift;
+  return "<binary>" if ($self->{type} eq "binary");
+  return "<ignore>" if ($self->Type() eq "ignore");
+  return $self->{element} || "-";
+}
+
+sub Type {
+  my $self = shift;
+  return $self->{type};
+}
+
+sub Status {
+  my $self = shift;
+  return $self->{status};
+}
+
+##########################################################################################
+##########################################################################################
+package SourceInfo::OwnerFinder;
+
+sub new {
+  my $class = shift;
+  return bless {}, (ref $class || $class);
+}
+
+sub Components {
+  my $self = shift;
+  my $versionInfo = $envDb->VersionInfo();
+  return sort keys %$versionInfo;
+}
+
+package SourceInfo::OwnerFinder::Ignores;
+BEGIN { @SourceInfo::OwnerFinder::Ignores::ISA = qw(SourceInfo::OwnerFinder); };
+
+sub FindOwners {
+  my $self = shift;
+  my @owners;
+  # First, the ignored items
+  print "Finding ignored binaries.\n" if $verbose;
+  my $ignoreList = $iniData->BinariesToIgnore();
+  push (@$ignoreList, '\\epoc32\\relinfo\\*');
+  foreach my $ignore (@$ignoreList) {
+    my @found = glob $ignore;
+    if (@found) {
+      push @owners, new SourceInfo::Owner("ignore", undef, $_, undef) foreach (@found);
+    } elsif ($ignore =~ s/\\\*$//) {
+      push @owners, new SourceInfo::Owner("ignore", undef, $ignore, undef);
+    }
+  }
+  return \@owners;
+}
+
+package SourceInfo::OwnerFinder::Source;
+BEGIN { @SourceInfo::OwnerFinder::Source::ISA = qw(SourceInfo::OwnerFinder); };
+
+sub FindOwners {
+  my $self = shift;
+  my $component = shift;
+  print "Finding source directories owned.\n" if $verbose;
+  my @owners;
+  my @comps_to_examine;
+  if ($component) {
+    @comps_to_examine = ($component);
+  } else {
+    @comps_to_examine = $self->Components();
+  }
+
+  foreach my $comp (@comps_to_examine) {
+    eval {
+      foreach my $element (keys %{$self->GetSourceInfo($comp)}) {
+        
+        if($iniData->HasMappings()){
+          $element = $iniData->PerformMapOnFileName($element);
+          $element = Utils::RemoveSourceRoot($element);
+        }
+	      
+        push @owners, new SourceInfo::Owner("source", $comp, $element, undef);
+      }
+    };
+    if ($@) {
+      print "Warning: could not find owner information for \"$comp\" because $@";
+    }
+  }
+  return \@owners;
+}
+
+sub GetSourceInfo {
+  my $self = shift;
+  my $comp = shift;
+  my $ver = $envDb->Version($comp);
+  my $relData = RelData->Open($iniData, $comp, $ver, $verbose);
+  return $relData->SourceItems();
+}
+
+package SourceInfo::OwnerFinder::Binaries;
+BEGIN { @SourceInfo::OwnerFinder::Binaries::ISA = qw(SourceInfo::OwnerFinder); };
+
+sub FindOwners {
+  my $self = shift;
+  my $component = shift;
+  my @owners;
+  print "Finding binaries owned.\n" if $verbose;
+  my @comps_to_examine;
+  if ($component) {
+    @comps_to_examine = ($component);
+  } else {
+    @comps_to_examine = $self->Components();
+  }
+  foreach my $comp (@comps_to_examine) {
+    my $bfowned = $envDb->ListBins($comp);
+    shift @$bfowned; # get rid of the header row
+    foreach my $binfile (@$bfowned) {
+      my $file = $binfile->[0];
+      my $status = $binfile->[1];
+      push @owners, new SourceInfo::Owner("binary", $comp, $file, $status);
+    }
+  }
+  return \@owners;
+}
+
+
+__END__
+
+=head1 NAME
+
+SourceInfo - Displays information about the source code associated with components.
+
+=head1 SYNOPSIS
+
+  sourceinfo [options] [any file | component]
+
+options:
+
+  -h  help
+  -v  verbose output (-vv very verbose)
+  -f  list individual files, not just directories
+  -b  include binary files
+  -i  include 'ignored' files
+  -s  print summary report (don't specify a component or a file)
+  --force (deprecated)
+  -c  show a count of the files in each directory (and its subdirectories) -- can be slow
+
+=head1 DESCRIPTION
+
+If given a filename, prints information about what component(s) release the source directory(ies) containing that file.
+
+  Area                     Files   Component   Element     Status   Notes
+  \aardvark                6       aardvark    \aardvark   -
+  \aardvark\aardvark.mrp   1       aardvark    \aardvark   -
+
+The confusing 'element' column lists what MRP 'source' statement owns that item of source code. 
+
+If given a component name, prints information about what directories that component releases.
+
+  Area        Files   Component   Element     Status   Notes
+  \aardvark   6       aardvark    \aardvark   -
+
+If no component name is specified, then a full report will be provided for each component.  This will also report any files or directories that are not owned by any component, as well as any file or directories which are owned by more than one component.
+
+  Area             Files   Component   Element       Status Notes
+  \aardvark        6       aardvark    \aardvark     -
+  \albatross       6       albatross   \albatross    -
+  \anteater        6       anteater    \anteater     -
+  \buffalo         6       buffalo     \buffalo      -
+
+If the -s flag is provided, then only the information about files/directories with zero or multiple ownership is shown.
+
+  Files/areas without ownership:
+    \prepenv-input.txt
+    \reltools-tmp-cleanremote-conf.txt
+  Files/areas with multiple ownership:
+
+The F<\epoc32> tree is not normally included in reports. Similarly, files owned as "binary" files by components aren't included in reports - so, if a component releases binary files outside of F<\epoc32> then they will be shown as having no ownership.
+
+For completeness, you can include binary ownership in the report using C<-b>. A similar option is C<-i>. This turns on the scanning of 'ignored' areas, such as F<\epoc32\wins\c>. 
+
+The final option is C<-f>. If a directory is uniformly owned, then normally the files inside that directory will not be listed. Adding C<-f> prompts the tool to list every file.
+
+Note that the output of this may NOT be suitable for distributing to licensees, because it may include directory structures of bits of IPR they are not licensed to see.
+
+=head1 STATUS
+
+Supported. If you find a problem, please report it to us.
+
+=head1 KNOWN BUGS
+
+None, but this tool is still rather experimental so please treat the output with caution.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/SourceInfo.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Symbian/CBR/ApplyDelta.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,415 @@
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# Symbian::CBR::ApplyDelta.pm
+#
+
+package Symbian::CBR::ApplyDelta;
+
+use strict;
+use File::Basename;
+use FindBin qw($Bin);
+use File::Spec;
+use Symbian::CBR::Component::Manifest;
+use Symbian::CBR::DeltaRelease::Manifest qw(META_FILES DELTA_MANIFEST_FILE);
+use ExportData;
+use EnvDb;
+use Utils;
+use File::Path;
+use File::Temp;
+use XML::Simple;
+use File::Copy;
+use Carp;
+use Cwd;
+
+
+sub new {
+  my $pkg = shift;
+  my $iniData = shift;
+  my $verbose = shift;
+  my $self;
+  $self->{iniData} = $iniData;
+  $self->{verbose} = $verbose;
+  bless $self, $pkg;
+  return $self;
+}
+
+
+sub ReconstructEnv {
+  my $self = shift;
+  my $zipFile = shift;
+  my $overwrite = shift;
+
+  $self->{deltaManifest} = Symbian::CBR::DeltaRelease::Manifest->new($self->{verbose});
+  Utils::InitialiseTempDir($self->{iniData});
+  $self->{deltaDir} = Utils::TempDir();
+
+  my $deltaManifestFile = File::Spec->catfile($self->{deltaDir}, DELTA_MANIFEST_FILE );
+  print "Extracting delta release package.\n";
+  eval {Utils::Unzip($zipFile,$self->{deltaDir},0,1);};
+  croak "Error: Couldn't Extract File $zipFile $@\n" if($@);
+  #Read delta manifest file.
+
+  $self->{deltaManifest}->LoadManifest($deltaManifestFile);
+  my $referenceBaseline = $self->{deltaManifest}->GetReferenceBaselineComp();
+  my $referenceVersion = $self->{deltaManifest}->GetReferenceBaselineVer();
+  my $destination =  $self->{iniData}->PathData->LocalArchivePathForExistingComponent($referenceBaseline, $referenceVersion);
+  croak "Error: Reference baseline $referenceBaseline $referenceVersion does not exist.\n" unless (defined $destination);
+  my $index = index($destination, $referenceBaseline);
+  $destination = substr($destination, 0, ($index));
+  foreach  my $comp (sort keys %{$self->{deltaManifest}->ListAllComponents()}) {
+    my $compStatus = $self->{deltaManifest}->GetCompStatus($comp);
+    my $hasError;
+    if ($compStatus eq "modified") {
+      $hasError = $self->ReconstructComp($comp, $destination, $overwrite); #Reconstruct modified component.
+    }
+    elsif ($compStatus eq "added") {
+      $hasError = $self->CopyCompToBaseline($comp, $destination, $overwrite); #Directly copy component to baseline.
+    }
+    
+    if ($hasError) {
+      my $version = $self->{deltaManifest}->GetCompNominatedVer($comp);
+      print "Error: Can't reconstruct component $comp, version $version\n";
+      next;
+    }
+  }
+  rmtree($self->{deltaDir}) or print "Warning: Couldn't delete temp directory ".$self->{deltaDir}.".\n";
+}
+
+sub CopyCompToBaseline {
+  my $self = shift;
+  my $comp = shift;
+  my $destination = shift;
+  my $overwrite = shift;
+
+  print "$comp is newly added to the baseline.\n";
+  my $tempNewCompPath = File::Spec->catfile($self->{deltaDir},"new", $comp);
+  my $nomVersion = $self->{deltaManifest}->GetCompNominatedVer($comp);
+  my $archiveCompPath = File::Spec->catdir($destination, $comp, $nomVersion);
+  if (-d $archiveCompPath and !$overwrite) {
+    print "Error: $comp already exists. Please use -o option to overwrite.\n";
+    return 1;
+  }
+  mkpath($archiveCompPath) unless (-d $archiveCompPath);
+  foreach my $thisFile (@{Utils::ReadDir($tempNewCompPath)}) {
+    my $thisTempFile = File::Spec->catfile($tempNewCompPath, $thisFile);
+    my $thisArchivepFile = File::Spec->catfile($archiveCompPath, $thisFile);
+    if (-e $thisArchivepFile) {
+      print "Overwriting $thisFile.\n " if ($self->{verbose});	
+      unless (unlink($thisArchivepFile)) {
+        print "Error: Couldn't delete $thisArchivepFile : $!\n";
+	return 1;
+      }
+    }	  
+    unless (copy($thisTempFile, $thisArchivepFile)) {
+      print "Error: Couldn't copy file from $thisTempFile to $thisArchivepFile.\n";
+      return 1;
+    }
+  }
+  return 0;
+}
+
+sub ReconstructComp {
+  my $self = shift;
+  my $comp = shift;
+  my $destination = shift;
+  my $overwrite = shift;
+
+  my $refVersion =  $self->{deltaManifest}->GetCompReferenceVer($comp);
+  my $nomVersion = $self->{deltaManifest}->GetCompNominatedVer($comp);
+  print "Reconstructing $comp component.\n";
+  my $refCompVer = File::Spec->catdir($destination, $comp, $refVersion);
+  my $nomCompVer = File::Spec->catdir($destination, $comp, $nomVersion);
+  if (-d $nomCompVer and !$overwrite) {
+    print "Error: $comp of $nomVersion version already exists. Please use -o option to overwrite.\n";
+    return 1;
+  }
+  if (-d $nomCompVer) {
+    print "Overwriting $comp\n" if($self->{verbose});
+    my $origDir = cwd();
+
+    chdir(dirname($nomCompVer)); #If you try to rmtree a UNC path the cwd must also be a UNC path
+    unless (rmtree($nomCompVer)) {
+      print "Error: Couldn't delete $nomCompVer directory\n";
+      return 1;
+    }
+    chdir($origDir);
+  }
+  mkpath($nomCompVer);
+  #Make copy of reference version.
+  foreach my $thisFile (@{Utils::ReadDir($refCompVer)}) {
+    my $thisRefFile = File::Spec->catfile($refCompVer, $thisFile);
+    my $thisNomFile = File::Spec->catfile($nomCompVer, $thisFile);
+    unless (copy($thisRefFile, $thisNomFile)) {
+      print "Error: Couldn't copy file from $thisRefFile to $thisNomFile. $!\n";
+      return 1;
+    }
+  }
+
+  #Reconstruct modified zip files, copy newly added zip files and delete deleted zip files.
+  foreach  my $zipfile (keys  %{$self->{deltaManifest}->GetZipFilesForComp($comp)}) {
+    my $zipStatus = $self->{deltaManifest}->GetZipStatus($comp, $zipfile);
+    my $nomZipFile = File::Spec->catfile($nomCompVer, $zipfile);
+    if ($zipStatus eq "modified") {
+      my $hasError = $self->ReconstructZipFile($comp, $zipfile, $nomCompVer); #If zip file is modified, then reconstruct it.
+      return $hasError if($hasError);
+    }
+    
+    elsif ($zipStatus eq "added") {
+      my $tempZipFile = File::Spec->catfile(Utils::TempDir(),"modified","addedZips",$comp,$zipfile);
+      if (-e $nomZipFile) {
+        print "Overwriting $nomZipFile.\n " if ($self->{verbose});
+        unless (unlink($nomZipFile)) {
+          print "Error: Couldn't delete $nomZipFile : $!\n";
+	  return 1;
+	}
+      }
+      unless (copy($tempZipFile, $nomZipFile)) {
+        print "Error: Couldn't copy $tempZipFile to $nomZipFile. $!\n";
+	return 1;
+      }
+    }
+    elsif ($zipStatus eq "deleted") {
+      if (-e $nomZipFile) {
+        unless (unlink($nomZipFile)) {
+          print "Error: Couldn't delete $nomZipFile : $!\n";
+	  return 1;
+        }
+      }
+    }
+    elsif ($zipStatus eq "identical") {
+      print "$zipfile is not modified.\n" if($self->{verbose} > 1);
+    }
+    else {
+      print "Error: Unknown zip file status \"$zipStatus\" for $zipfile of $comp component in delta manifest file.\n";
+      return 1;
+    }
+  }
+  #Reconstruct reldata, manifest.xml and exports.txt files.
+  my $deltaFilePath = File::Spec->catdir($self->{deltaDir}, META_FILES);
+  foreach my $metafile (keys %{$self->{deltaManifest}->GetMetaFiles($comp)}) {
+    my $nomFile = File::Spec->catfile($nomCompVer, $metafile);
+    my $deltaFile = $comp."_".$metafile;
+    $deltaFile = File::Spec->catfile($deltaFilePath, $deltaFile);
+    #retry 10 times
+    my $retries = 10;
+    while ($retries > 0) {
+      if (-e $nomFile) {
+        unlink($nomFile) or print "Warning: delete file $nomFile failed. $?, $!\n";
+      }
+      print "Copying $metafile.\n" if( -e $metafile and $self->{verbose});
+      if (copy($deltaFile, $nomFile) == 0) {
+        #copy failed, warning and try again
+        print "Warning: Couldn't copy file from $deltaFile to $nomFile. $!\n";
+        $retries--;
+      }
+      else {
+        #copy successfully, jump out of the loop
+        last;
+      }
+    }
+    if ($retries<=0) {
+      print "Error: Couldn't copy file $deltaFile to $nomFile. $!\n";
+      return 1;
+    }
+  }
+  
+  return 0;
+}
+
+
+sub ReconstructZipFile {
+  my $self = shift;
+  my $comp = shift;
+  my $zipfile = shift;
+  my $releaseFolder = shift;
+  
+  my $nomZipFile = File::Spec->catfile($releaseFolder, $zipfile);
+  my $tempCompPath = mkdtemp($self->{iniData}->TempDir().'\_XXXX');
+  mkpath ($tempCompPath) unless(-d $tempCompPath);
+  my $tempCompZips = File::Spec->catdir($self->{deltaDir}, "TempZips");
+  mkpath($tempCompZips) unless(-d $tempCompZips);
+  my $tempCompZipFile = File::Spec->catdir($tempCompZips, $zipfile);
+  #Move zip file to temporary location.
+  unless (move($nomZipFile, $tempCompZipFile)) {
+    print "Error: Couldn't move $zipfile to temp directory. $!\n";
+    return 1;
+  }
+  print "Extracting $zipfile file.\n" if($self->{verbose} > 1);
+  Utils::Unzip($tempCompZipFile,$tempCompPath,0,1);
+  unless (unlink($tempCompZipFile)) {
+    print "Error: Couldn't delete $tempCompZipFile : $!\n";
+    return 1;
+  }
+
+  foreach my $file (keys %{$self->{deltaManifest}->GetFilesForZip($comp, $zipfile)}) {
+    my $deltaFilePath = File::Spec->catfile($self->{deltaDir},"modified",$file);
+    my $tempCompFilePath = File::Spec->catfile($tempCompPath,$file);
+    my $fileStatus = $self->{deltaManifest}->GetFileStatus($comp, $zipfile, $file);
+    my $type = $self->{deltaManifest}->GetFileType($comp, $zipfile, $file );
+
+    if ($fileStatus eq "added") {
+      print "Copying $file\n" if($self->{verbose});
+      my $tempFilePath = dirname ($tempCompFilePath);
+      unless (-e $tempFilePath) {
+        unless (mkpath ($tempFilePath)) {
+          print "Error: Unable to create $tempFilePath path.\n";
+	  return 1;
+	}
+      }
+      unless (-e $deltaFilePath) {
+        print "Error: $deltaFilePath file doesn't exists.\n";
+	return 1;
+      }
+      unless (copy($deltaFilePath, $tempCompFilePath)) {
+        print "Error: Couldn't copy file from $deltaFilePath to $tempCompFilePath\n";
+	return 1;
+      }
+    }
+    elsif ($fileStatus eq "modified") {
+      if ($type eq "file") {
+        if (-e $tempCompFilePath) {
+          unless (unlink($tempCompFilePath)) {
+            print "Error: Couldn't delete $tempCompFilePath : $!\n";
+	    return 1;
+	  }
+        }
+        my $tempFilePath = dirname ($tempCompFilePath);
+        unless (-e $tempFilePath) {
+          mkpath ($tempFilePath) or croak "Error: Unable to create $tempFilePath path.\n";
+        }		  
+        unless (-e $deltaFilePath) {
+          print "Error: $deltaFilePath file doesn't exist.\n";
+	  return 1;
+	}
+        unless (copy ($deltaFilePath, $tempCompFilePath)) {
+          print "Error: Couldn't copy file from $deltaFilePath to $tempCompFilePath\n";
+	  return 1;
+	}
+      }
+      elsif ($type eq "delta") {
+        my $deltaFile = $deltaFilePath.".delta";
+        $self->ReconstructFile($tempCompFilePath, $deltaFile, $tempCompFilePath);
+      }
+      else {
+        print "Error: Unknown file type \"$type\" in delta manifest file.\n";
+	return 1;
+      }
+    }
+    elsif ($fileStatus eq "deleted") {
+      if (unlink($tempCompFilePath) == 0) {
+        if (-e $tempCompFilePath) {
+          print "Error: Couldn't delete $tempCompFilePath : $!\n";
+	  return 1;
+        }
+        else {
+          print "Warning: Expecting to delete $tempCompFilePath, but it does not exist.\n";
+        }
+      }
+    }
+    else {
+      print "Error: Unknown file status \"$fileStatus\" for \"$file\" file.\n";
+      return 1;
+    }
+  }
+  #Pack all files of a zipfile to form a category.zip file.
+  my @allFiles;
+  my @filesToBeZipped;
+  Utils::ListAllFiles($tempCompPath, \@allFiles);
+  foreach  my $thisFile (@allFiles) {
+    my $file = substr($thisFile, (length($tempCompPath)+1));
+    push @filesToBeZipped, $file;
+  }
+  Utils::ZipList( $nomZipFile, \@filesToBeZipped, $self->{verbose}, undef,$tempCompPath);
+  unless (rmtree ($tempCompPath)) {
+    print "Error: Couldn't delete $tempCompPath directory.\n"; 
+    return 1;
+  }
+  
+  return 0;
+}
+
+sub ReconstructFile {
+  my $self = shift;
+  my $referenceFile = shift;
+  my $deltaFilePath = shift;
+  my $destination = shift;
+
+  my $destinationDir = dirname($destination);
+  mkpath($destinationDir) unless(-d $destinationDir);
+  print "Reconstructing ".basename($referenceFile)." file.\n" if($self->{verbose} > 1);
+  my $status = system "zdu \"$referenceFile\" \"$deltaFilePath\"  \"$destination\"" ;
+  if( $status != 0 ) {
+    $status = system "zdu" ;
+    $! = $? >> 8;
+    if( $status != 0 ) {
+      print "Error: The zdelta tool is not installed. Please install zdelta.\n";
+      croak;
+    }
+    else {
+      print "Error: The zdelta tool is not installed properly. Please install zdelta once again.\n";
+      croak;
+    }
+  }
+}
+
+1;
+
+__END__
+
+
+=head1 NAME
+
+Symbian::CBR::ApplyDelta.pm - Reconstructs the nominated baseline using deltas and reference version of baseline.
+
+=head2 new
+
+Expects to be passed an C<IniData> reference and verbosity level. Creates an ApplyDelta object. 
+
+=head2 ReconstructEnv
+
+Expects to be passed a delta zip file path, a destination archive where the environment is to be created, and an overwrite flag specifying whether existing components should be overwritten or not. It makes use of the delta zip file and a reference baseline (specified by the delta manifest file) and reconstructs the originally nominated baseline.
+
+=head2 ReconstructComp
+
+Expects to be passed a component name, a destination and an overwrite flag specifying whether existing component should be overwritten or not. It makes use of the delta for a component and a reference version of a component (specified by the delta manifest file) and reconstructs the originally nominated version of a component.
+
+=head2 ReconstructFile
+
+Expects to be passed a reference file, path to a delta file and a destination path. Makes use of the zdelta third party tool to reconstruct the originally nominated version of the file from the inputs.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Symbian/CBR/Component/Manifest.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,686 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+package Symbian::CBR::Component::Manifest;
+use base qw(Exporter);
+use EnvDb;
+use strict;
+use IniData;
+use MrpData;
+use XML::Simple;
+use POSIX qw(strftime);
+use Utils;
+use Carp;
+use File::Spec;
+use File::Basename;
+use CatData;
+use IniData;
+
+eval { push @INC, Utils::PrependEpocRoot('\epoc32\tools') };
+
+#
+#Constants
+#
+
+use constant CONTENTTYPE_SOURCE => 'source';
+use constant CONTENTTYPE_BINARY => 'binary';
+use constant CONTENTTYPE_EXPORT => 'export';
+use constant CONTENT_TYPE       => 'content-type';
+use constant IPR_CATEGORY       => 'ipr-category';
+use constant BINARY_PLATFORM    => 'platform';
+use constant EVALID_MD5         => 'evalid-checksum';
+use constant MODIFIED_TIME      => 'modified-timestamp';
+use constant MANIFEST_FILE      => 'manifest.xml';
+use constant STATUS_CLEAN       => 0;
+use constant STATUS_DIRTY       => 1;
+use constant STATUS_DIRTY_SOURCE=> 4;
+our @EXPORT = qw(MANIFEST_FILE CONTENT_TYPE IPR_CATEGORY);
+
+#
+#Public Interfaces
+#
+
+sub new {
+    my $class = shift;
+    my $file  = shift;
+    my $verbose = shift;
+
+    croak "Error: $file does not exist\n" if !-e $file;
+
+    my $self = bless {}, $class;
+    $self->{verbose} = $verbose;
+    if ( $file =~ /.mrp$/i ) { #check if file is a mrp file
+        $self->PopulateDataFromMRP($file);
+    }
+    elsif ( basename($file) =~ /.xml$/i ) { #check if file is a manifest file
+        $self->LoadManifestFile($file);
+    }
+    else { #cannot proceed if file is neither MRP nor manifest file
+        croak "Error: File is neither an MRP file nor a manifest file.\n";
+    }
+    return $self;
+}
+
+sub Save {
+    my $self             = shift;
+    my $manifestLocation = shift;
+    my $myManifestFileBasename = shift;
+    my $manifestFile = undef;
+    
+    if (defined $myManifestFileBasename) {
+        print "-----> Use user defined manifest file basename: $myManifestFileBasename \n";
+        $manifestFile = File::Spec->catfile( $manifestLocation, $myManifestFileBasename);
+    }
+    else {
+        print "---- > Use default manifest file basename\n";
+        $manifestFile = File::Spec->catfile($manifestLocation, MANIFEST_FILE);
+    }
+
+    #Die, if the directory path doesn't exist
+    croak "Error: Directory path does not exist : $manifestLocation\n" if !-d $manifestLocation;
+
+    #Create an EnvDb object to retrieve component versions
+    my $iniData = IniData->New();
+    my $envDb = EnvDb->Open($iniData, 0);
+
+    #Hash structure to be provided as input for XML::Simple->XMLout()
+    my $component = {
+        name       => $self->{componentName},
+        meta    => {
+            'cbr-version'    => { 'content' => $self->{cbrVersion} },
+            'created-time'   => { 'content' => strftime( '%Y-%m-%dT%H:%M:%S', localtime()) },
+            'mrp-path'       => { 'content' => $self->{mrpFilePath} },
+        },
+        manifest => { files => [] }
+    };
+
+    if (defined $envDb->Version($self->{componentName})) {
+        $component->{version} = $envDb->Version($self->{componentName});
+    }
+    
+    if (defined $envDb->InternalVersion($self->{componentName})) {
+        $component->{'internal-version'} = $envDb->InternalVersion($self->{componentName});
+    }
+
+    if (defined $self->{evalidVersion}) {
+        $component->{meta}{'evalid-version'}{content} = $self->{evalidVersion};
+    }
+
+    #Construct the file group structure hierarchy
+    my $groups = {};
+
+    foreach my $path (keys %{$self->{files}}) {
+        # make file representation
+        my $file = { path => $path };
+    
+        for $_ (qw(evalid-checksum modified-timestamp)) {
+            next if !defined $self->{files}{$path}{$_}; # skip undef
+            $file->{$_} = $self->{files}{$path}{$_};
+        }
+    
+        # pick file group
+    
+        my $groupid = join(',', grep defined, (
+            $self->{files}{$path}{'content-type'},
+            $self->{files}{$path}{'ipr-category'},
+            $self->{files}{$path}{'platform'}));
+    
+        # make new group if it doesn't exist
+    
+        if (!defined $groups->{$groupid}) {
+            $groups->{$groupid} = { file => [] }; # make ref
+            for $_ (qw(content-type ipr-category platform)) {
+                next if !defined $self->{files}{$path}{$_}; # skip undef
+                $groups->{$groupid}{$_} = $self->{files}{$path}{$_};
+            }
+            push @{$component->{manifest}{files}}, $groups->{$groupid};
+        }
+    
+        # add file to correct group
+    
+        push @{$groups->{$groupid}{file}}, $file;
+    }
+
+    #Use the hash structure for calling the XMLout() to write the manifest file
+    eval {XMLout(
+        $component,
+        xmldecl     => '<?xml version="1.0" encoding="ISO-8859-1"?>',
+        rootname    => 'component',
+        outputfile  => $manifestFile )};
+
+    croak "Error: Can't write manifest file: $@\n" if $@;
+
+    return $manifestFile;
+}
+
+sub Compare {
+    my $self           = shift;
+    my $manifestObj    = shift;
+    my $validatesource = shift;
+    my $keepGoing      = shift;
+    my $callback       = shift;
+    
+    my $status = STATUS_CLEAN;
+
+    #Check for similarity of component names
+    croak "Error: Component names does not match between manifest versions\n" if lc($self->{componentName}) ne lc($manifestObj->{componentName});
+
+    #Check for presence of evalid md5 in both versions of the component
+    croak "Error: MD5 info incomplete\n" if !defined $self->{evalidVersion} or !defined $manifestObj->{evalidVersion};
+
+    #Check for similarity of evalid versions used in both versions of components
+    croak "Error: Incompatible evalid versions\n" if $self->{evalidVersion} ne $manifestObj->{evalidVersion};
+   
+    #Get list of files in MRP and manifest file
+    #do not include source if validate source not specified
+    my $filesFromThisComponent   = $self->GetFiles(!$validatesource);
+    my $filesFromBaselineComponent = $manifestObj->GetFiles(!$validatesource);
+    if ( @$filesFromThisComponent != @$filesFromBaselineComponent ) { #Check if counts of files in both versions are same
+        print "File counts differ\n";
+        $status = STATUS_DIRTY;
+    }
+    %{$self->{compareFiles}} = (); # Hash to store all zip files, files for zipfile and their status.
+    my @noChecksumFiles;
+
+    foreach my $file ( @{$filesFromThisComponent} ) { #Iterate through each files listed in mrp
+        my $zipname = $self->GetZipName($file);
+        my $fileContentType = $self->GetFileInfo($file, CONTENT_TYPE);
+
+        next if !$validatesource and $fileContentType eq 'source'; #Skip comparison source files if $validatesource is not set
+        if ( !$manifestObj->FileExists($file) ) { #Check if a corresponding entry for the file exist in manifest file
+            print "File added in the new environment : $file\n";
+            $self->{compareFiles}{$zipname}{files}{$file} = "added";
+            if ( $fileContentType eq 'source' && $status != STATUS_DIRTY) {
+                $status = STATUS_DIRTY_SOURCE;
+            }
+            else {
+                $status = STATUS_DIRTY;
+                return $status unless $keepGoing; #If $keepGoing is set, continue the iteration. Else, stop the comparison and return back to the caller
+            }
+            next;
+        }
+
+        #Check evalid md5 checksums of all files
+        if (not defined $manifestObj->GetFileInfo( $file, EVALID_MD5 ) or not defined $self->GetFileInfo($file, EVALID_MD5)) {
+            push @noChecksumFiles,$file;
+        }
+        elsif ( $manifestObj->GetFileInfo( $file, EVALID_MD5 ) ne $self->GetFileInfo($file, EVALID_MD5) ) { #comparison of Evalid checksum of both verisons
+            print "The evalid checksum does not match for the file : $file\n";  
+            $self->{compareFiles}{$zipname}{files}{$file} = "modified";
+            if ( $fileContentType eq 'source' && $status != STATUS_DIRTY) {
+                $status = STATUS_DIRTY_SOURCE;
+            }
+            else {
+                $status = STATUS_DIRTY;
+                return $status unless $keepGoing; #If $keepGoing is set, continue the iteration. Else, stop the comparison and return back to the caller
+            }
+        }
+
+        #Check for mismatches in ipr-categories for source and export files
+        if ($validatesource && ($fileContentType eq 'source' or $fileContentType eq 'export')) {
+            if ($self->GetFileInfo($file, IPR_CATEGORY) ne $manifestObj->GetFileInfo($file, IPR_CATEGORY)) {
+                print "Content-type mismatch between version : $file\n";
+                
+                $self->{compareFiles}{$zipname}{files}{$file} = "added";
+                
+                my $zipnameOriginal = $manifestObj->GetZipName($file);
+                $self->{compareFiles}{$zipnameOriginal}{files}{$file} = "deleted";
+                
+                if ( $fileContentType eq 'source' && $status != STATUS_DIRTY) {
+                    $status = STATUS_DIRTY_SOURCE;
+                }
+                else {
+                    $status = STATUS_DIRTY;
+                    return $status unless $keepGoing; #If $keepGoing is set, continue the iteration. Else, stop the comparison and return back to the caller            
+                }
+            }
+        }
+        
+        #Check for moving some files from one zip file to another
+        my $ref_zipname = $manifestObj->GetZipName($file);
+        if ($zipname ne $ref_zipname) {
+        	   #The file is moved from $ref_zipname to $zipname
+            $self->{compareFiles}{$zipname}{files}{$file} = "added";
+            if ($manifestObj->FileExists($file))  {
+                $self->{compareFiles}{$ref_zipname}{files}{$file} = "deleted";
+            }
+        }
+    }
+    
+    if (scalar @noChecksumFiles > 0) {
+        if (defined $callback) {
+            unless (&$callback(\@noChecksumFiles,$self,$keepGoing)) {
+                $status = STATUS_DIRTY if ($status  == STATUS_CLEAN);
+            }
+        }
+        
+        foreach my $file (@noChecksumFiles) {
+            my $zipname = $self->GetZipName($file);
+            $self->{compareFiles}{$zipname}{files}{$file} = "modified"; #set to modified as don't have a method to compare no-checksum files
+        }
+    }
+    
+    foreach my $file ( @{$filesFromBaselineComponent } ) { 
+        my $zipname = $manifestObj->GetZipName($file);
+        if ( !$self->FileExists($file) ) {
+            $self->{compareFiles}{$zipname}{files}{$file} = "deleted";
+        }
+        else {
+            #Check for moving some files from one zip file to another
+            my $ref_zipname = $self->GetZipName($file);
+            if ($zipname ne $ref_zipname) {
+                #The file is moved from $zipname to $ref_zipname
+                $self->{compareFiles}{$zipname}{files}{$file} = "deleted";
+                $self->{compareFiles}{$ref_zipname}{files}{$file} = "added";
+           }
+        }
+    }
+   
+    return $status;
+}
+
+sub GetDiffZipFiles {
+  my $self = shift;
+  return $self->{compareFiles};
+}
+
+sub GetDiffFilesForZip {
+  my $self = shift;
+  my $zipfile = shift;
+  return $self->{compareFiles}{$zipfile}{files};
+}
+
+sub GetFileStatus {
+  my $self = shift;
+  my $zipfile = shift;
+  my $file = shift;
+  return $self->{compareFiles}{$zipfile}{files}{$file};
+}
+
+
+#
+#Private Methods
+#
+
+sub PopulateDataFromMRP {
+    my $self    = shift;
+    my $mrpFile = shift;
+
+    #Check if EvalidCompare is installed
+    if (eval { require EvalidCompare }) {
+        $self->{evalidInstalled} = 1;
+    } else {
+        print "Remark: Evalid is not available ($@)\n";
+    }
+
+    #Create a mrpData object to retrieve files list that define the component
+    my $iniData = IniData->New();
+    
+    #need to remove SRCROOT from MRP file
+    $mrpFile = Utils::RemoveSourceRoot($mrpFile);
+    
+    my $mrpData = MrpData->New( $mrpFile, undef, undef, $iniData, 0, 0 );
+
+    #Set the evalid version only if EValidCompare is installed
+    if ( $self->{evalidInstalled} ) {
+        $self->{evalidVersion}      = $EvalidCompare::VERSION;
+    }
+    #Set rest of meta data information
+    $self->{cbrVersion}         = Utils::ToolsVersion();
+    $self->{componentName}      = $mrpData->Component();
+    $self->{mrpFilePath}        = $mrpData->MrpName();
+    if ( Utils::WithinSourceRoot( $self->{mrpFilePath} ) ) {
+        $self->{mrpFilePath} = Utils::RemoveSourceRoot( $self->{mrpFilePath} );
+    }
+
+    #Iterate through list of files list returned by mrpData and calculate the manifest informations
+    #Make calls to SetFileInfo and save the manifest informations of the file to a common file hash
+    foreach my $sourcecategory ( @{ $mrpData->SourceCategories() } ) {
+        foreach my $file ( @{ $mrpData->Source( $sourcecategory ) }) {
+            my $absFilePath = Utils::RelativeToAbsolutePath( $file, $mrpData->{iniData}, SOURCE_RELATIVE );
+            
+            # Reverse any source mappings as we don't want them in the manifest...
+            $file = $iniData->PerformReverseMapOnFileName($file);
+            
+            # We also want to remove the SRCROOT from the file name
+            if (Utils::WithinSourceRoot($file)){
+                $file = Utils::RemoveSourceRoot($file);
+            }
+            if (-f $absFilePath) {
+                $self->SetFileInfo( $file, CONTENT_TYPE, CONTENTTYPE_SOURCE );
+                $self->SetFileInfo( $file, IPR_CATEGORY, $sourcecategory );
+                $self->SetFileInfo( $file, MODIFIED_TIME, Utils::FileModifiedTime( $absFilePath ) );
+                if ($self->{evalidInstalled}) {
+                    $self->GenerateEvalidSignature($file, $absFilePath);
+                }
+            }
+        }
+    }    
+
+    #List of binary files, their manifest calculations and saving to the file hash
+    foreach my $binarycategory ( @{ $mrpData->BinaryCategories() } ) {
+        foreach my $file ( @{ $mrpData->Binaries($binarycategory) } ) {
+            my $absFilePath = Utils::RelativeToAbsolutePath( $file, $mrpData->{iniData}, EPOC_RELATIVE );
+            if (-f $absFilePath) {
+                $self->SetFileInfo( $file, CONTENT_TYPE, CONTENTTYPE_BINARY );
+                if ( $binarycategory ne 'unclassified') {
+                    $self->SetFileInfo( $file, BINARY_PLATFORM, $binarycategory );
+                }
+                $self->SetFileInfo( $file, MODIFIED_TIME, Utils::FileModifiedTime( $absFilePath ) );
+                if ($self->{evalidInstalled}) {
+                    $self->GenerateEvalidSignature($file, $absFilePath);
+                }
+            }
+        }
+    }
+
+    #List of export files, their manifest calculations and saving to the file hash
+    foreach my $exportcategory ( @{ $mrpData->ExportCategories() } ) {
+        foreach my $file ( @{ $mrpData->Exports($exportcategory) } ) {
+            my $absFilePath = Utils::RelativeToAbsolutePath( $file, $mrpData->{iniData}, EPOC_RELATIVE );
+            if (-f $absFilePath) {
+                $self->SetFileInfo( $file, CONTENT_TYPE, CONTENTTYPE_EXPORT );
+                $self->SetFileInfo( $file, IPR_CATEGORY, $exportcategory );
+                $self->SetFileInfo( $file, MODIFIED_TIME, Utils::FileModifiedTime( $absFilePath ) );
+                if ($self->{evalidInstalled}) {
+                    $self->GenerateEvalidSignature($file, $absFilePath);
+                }
+            }
+        }
+    }
+}
+
+sub LoadManifestFile {
+    my $self         = shift;
+    my $manifestFile = shift;
+
+    my $iniData = IniData->New();
+
+    #Generate the hash structure from manifest file
+    my $component   = eval{XMLin(
+                    $manifestFile,
+                    forcearray => [ qw(files file) ])};
+
+    croak "Error: Can't read manifest file '$manifestFile': $@\n" if $@;
+
+    #Extract meta data informations from the generated structure
+    $self->{componentName}      = $component->{name};
+    $self->{evalidVersion}      = $component->{meta}{'evalid-version'}{content};
+    $self->{cbrVersion}         = $component->{meta}{'cbr-version'}{content};
+    $self->{mrpFilePath}        = $component->{meta}{'mrp-path'}{content};
+    $self->{createdTimeString}  = $component->{meta}{'created-time'}{content};
+
+    #Extract the manifest information of files from the generated structure
+    foreach my $category ( @{ $component->{manifest}{files} } ) {
+        foreach my $file ( @{ $category->{file} } ) {
+            
+            # DEF107988	Source mapping breaks manifest
+            # Manifest files created with CBR Tools < 2.82.1003 may contain source
+            # mapping information, which needs to be removed if present
+            my $fileName = $iniData->PerformReverseMapOnFileName($file->{path});
+            
+            # We also want to remove the SRCROOT from the file name
+            if (Utils::WithinSourceRoot($fileName)){
+                $fileName = Utils::RemoveSourceRoot($fileName);
+            }elsif (Utils::SourceRoot() ne "\\"){
+                $fileName =~ s!^[\\\/]!!;
+            }
+            
+            $self->{files}{$fileName}{'content-type'} = $category->{'content-type'};
+            $self->{files}{$fileName}{'modified-timestamp'} = $file->{'modified-timestamp'};
+            $self->{files}{$fileName}{'ipr-category'} = $category->{'ipr-category'};
+            $self->{files}{$fileName}{'platform'} = $category->{'platform'};
+            $self->{files}{$fileName}{'evalid-checksum'} = $file->{'evalid-checksum'};
+        }
+    }
+}
+
+sub RefreshMetaData {
+    my $self = shift;
+    my $comp = shift;
+    my $ver  = shift;
+
+    if (eval { require EvalidCompare }) {
+        $self->{evalidInstalled} = 1;
+    } else {
+        print "Remark: Evalid is not available ($@)\n";
+    }
+
+    my $iniData = IniData->New();
+    my %catdata;
+    my %categories;
+    
+    foreach my $file (keys %{$self->{files}}) {
+        if ($self->{files}->{$file}->{'content-type'} =~ m/export/i && !$categories{$self->{files}->{$file}->{'ipr-category'}}) {        
+        my $tempcatdata = CatData->Open($iniData, $comp, $ver, $self->{files}->{$file}->{'ipr-category'});        
+        %catdata = (%catdata, %{$tempcatdata->{data}->{exportinfo}});        
+        $categories{$self->{files}->{$file}->{'ipr-category'}} = 1;
+        }
+    }
+
+    $self->{createdTimeString} = strftime( '%Y-%m-%dT%H:%M:%S', localtime());
+    $self->{cbrVersion} = Utils::ToolsVersion();
+
+    foreach my $file (keys  %{$self->{files}}) {
+        my $type = $self->{files}->{$file}->{'content-type'};
+        my $absFilePath;
+
+        if ($type eq CONTENTTYPE_EXPORT or $type eq CONTENTTYPE_BINARY) {
+            $absFilePath = Utils::RelativeToAbsolutePath($file, $iniData, EPOC_RELATIVE);
+        } else {
+            $absFilePath = Utils::RelativeToAbsolutePath($file, $iniData, SOURCE_RELATIVE);
+        }
+        
+        if (!-e $absFilePath) {
+            delete $self->{files}->{$file};
+            next;
+        }
+        
+        $self->SetFileInfo($file, MODIFIED_TIME, Utils::FileModifiedTime($absFilePath));
+        $self->GenerateEvalidSignature($file, $absFilePath) if ($self->{evalidInstalled});
+        
+        my $policy;
+        
+        if ($self->{files}->{$file}->{'content-type'} =~ /source/i) {
+            my ($category) = Utils::ClassifyPath($iniData, $absFilePath, 0, 0, $comp);        
+            $self->SetFileInfo($file, IPR_CATEGORY, $category);
+        } elsif ($self->{files}->{$file}->{'content-type'} =~ /export/i) {
+            my $sourcefile = Utils::RelativeToAbsolutePath($catdata{$file}, $iniData, SOURCE_RELATIVE);
+            my ($category) = Utils::ClassifyPath($iniData, $sourcefile, 0, 0, $comp);     
+            $self->SetFileInfo($file, IPR_CATEGORY, $category);
+        }
+    }
+}
+
+sub SetFileInfo {
+    my $self       = shift;
+    my $file       = shift;
+    my $infoType   = shift;
+    my $valueToSet = shift;
+    $self->{files}{$file}{$infoType} = $valueToSet;
+}
+
+sub UnsetFileInfo {
+    my $self       = shift;
+    my $file       = shift;
+    my $infoType   = shift;
+    delete $self->{files}{$file}{$infoType} if exists $self->{files}{$file}{$infoType};
+}
+
+sub GetFiles {
+    my $self = shift;
+    my $excludesource = shift;
+    
+    if (!$excludesource) {
+        my @fileList = keys %{$self->{files}};
+        return \@fileList;
+    }
+    
+    my @fileList = grep (($self->GetFileInfo($_, CONTENT_TYPE) ne 'source'), keys %{$self->{files}});
+    return \@fileList;
+}
+
+sub GetFileInfo {
+    my $self     = shift;
+    my $file     = shift;
+    my $infoType = shift;
+    my $fileInfo = $self->{files}{$file}{$infoType};
+    unless (defined $fileInfo) {
+    	  $file = lc $file;
+    	  $fileInfo = $self->{files}{$file}{$infoType};
+    }
+    return $fileInfo;
+}
+
+sub FileExists {
+  my $self = shift;
+  my $file = shift;
+  my $isExists = exists $self->{files}{$file};
+  if (!$isExists) {
+    foreach my $ff (keys %{$self->{files}}) {
+      return 1 if(lc($ff) eq lc($file));
+    }
+  }
+  return $isExists;
+}
+
+sub GenerateEvalidSignature {
+    my $self = shift;
+    my $file = shift;
+    my $absFilePath = shift;
+    
+    my $error=0;
+    # Reroute STDOUT via our error handler
+    tie *STDOUT, 'Symbian::CBR::Component::Manifest::EvalidErrorHandler', \$error;
+    my ($md5Checksum, $type) = EvalidCompare::GenerateSignature($absFilePath);
+    untie *STDOUT;
+    
+    if ($error == 0) {
+        $self->SetFileInfo($file, EVALID_MD5, $md5Checksum);
+        return 1;
+    } else {
+        print "Warning: Unable to generate checksum for file $file\n" if $error == 2;
+        $self->UnsetFileInfo($file, EVALID_MD5);
+        return 0;
+    }
+}
+sub GetZipName {
+  my $self = shift;
+  my $file = shift;
+  my $fileContentType = $self->GetFileInfo($file, CONTENT_TYPE);
+  my $zipname;
+  
+  $fileContentType =~ s/export/exports/i;
+
+  if ($fileContentType eq 'binary') {
+    my $platform = $self->GetFileInfo($file, 'platform');
+    if (defined $platform) {
+      $zipname = "binaries_".$platform.".zip";
+    }
+    else {
+      $zipname = "binaries".".zip";
+    }
+  }
+  else {
+    my $cat = $self->GetFileInfo($file, 'ipr-category');
+    $zipname = $fileContentType.$cat.".zip";
+  }
+  
+  return $zipname;
+}
+
+package Symbian::CBR::Component::Manifest::EvalidErrorHandler;
+
+sub TIEHANDLE {
+    my $self = {};
+    bless $self, shift;
+    my $errorflag = shift;
+    $self->{errorflag} = $errorflag;
+    return $self;
+}
+
+sub PRINT {
+    my $self = shift;
+    my $message = shift;
+    my $errorflag = $self->{errorflag};
+
+    # Untie STDOUT
+    my $handle = tied *STDOUT;
+    untie *STDOUT;
+
+    # Check for evalidcompare dependency failures
+    if (
+      $message =~ /^Error: (.*) failed \(\d+\) on file .* - not retrying as raw binary/ or
+      $message =~ /^Error: (.*) failed again \(\d+\) on .* - reporting failure/
+    ) {
+        # Failure: checksum will be corrupt
+
+        if ($1 =~ /dumpbin/i) {
+            # Suppress known error
+            $$errorflag = 1;
+        } else {
+            $message =~ s/^Error:\s*//;
+            print "Warning: Tool dependency 'evalidcompare' failed with message: ".$message;
+            $$errorflag = 2;
+        }
+    } else {
+        # Output wasn't an error message
+        print $message;
+    }
+
+    # Re-tie the handle
+    tie *STDOUT, ref($handle), $errorflag;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Manifest.pm - A module that helps the construction of manifest objects for inclusion during component release process and for validation of component release
+
+=head1 DESCRIPTION
+
+The module is used for constructing manifest objects for individual components from either a mrp file or a manifest file. The objects obtained from either processes include informations on the environment and the files that define the component.
+
+The file properties include useful informations that can be used for validating components during the release processes like the ipr-category of sources and export files, content-type, platform in which binary files are built, evalid md5 checksum and modified timestamp.
+
+=head1 INTERFACE
+
+=head2 Object Management
+
+=head3 new
+
+Expects a full file path of a mrp file or a manifest file path. A valid manifest xml file should be available in the path. Responsible for constructing the manifest object with a list of files that define the component along with useful manifest informations and metadata information regarding the environment
+
+=head2 Data Management
+
+=head3 Compare
+
+Expects a manifest object reference as parameter. Performs a comparison of the manifest informations available in the two manifest objects returns a status of the comparison.
+
+The comparison is mainly done between the evalid md5 checksums of the both components along with basic environment check on similarity of evalid version being used for generating the checksum on the files.
+
+The comparison results in a status being returned as CLEAN (integer equivalent of 0), if the manifest object informations are the same between versions and returns DIRTY (integer equivalent of 1), if the versions differ.
+
+=head3 Save
+
+Expects a directory path as parameter. The path should be a valid existing directory path and is used by the object to save the manifest informations of the component in the form of a manifest.xml file.
+
+The manifest file will not be saved if the path mentioned for the function does not exist.
+
+The manifest file contains manifest information of all the files that define the component and are segregated based on filegroups. The filegroups are listed based on basic attributes of the files like the ipr-category, content-type and binary-platform.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Symbian/CBR/CreateDelta.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,639 @@
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# Symbian::CBR::CreateDelta.pm
+#
+
+package Symbian::CBR::CreateDelta;
+
+use File::Basename;
+use File::Spec;
+use File::Path;
+use File::Copy;
+use XML::Simple;
+use Carp;
+use Digest::Md5;
+use ExportData;
+use EnvDb;
+use Utils;
+use Symbian::CBR::DeltaRelease::Manifest qw(ADDED_ZIPS META_FILES);
+use Symbian::CBR::Component::Manifest;
+
+
+sub new {
+  my $pkg = shift;
+  my $iniData = shift;
+  my $pgpkey = shift;
+  my $releaseManifest = shift;
+  my $verbose = shift;
+  my $noevalid = shift;
+  my $nodelta = shift;
+  my $maxdelta = shift;
+
+  my $self;
+  $self->{iniData} = $iniData;
+  $self->{pgpKey} = $pgpkey;
+  $self->{releaseManifest} = $releaseManifest;
+  $self->{verbose} = $verbose;
+  $self->{noevalid} = $noevalid;
+  $self->{nodelta} = $nodelta;
+  $self->{maxdelta} = $maxdelta;
+  bless $self, $pkg;
+  return $self;
+}
+
+sub compareEnvironments {
+  my $self = shift;
+  my $referenceComp = shift;
+  my $referenceVer = shift;
+  my $nominatedComp = shift;
+  my $nominatedVer = shift;
+
+  print "Comparing reldata files\n" if($self->{verbose});
+  my $referenceRelData = RelData->Open($self->{iniData}, $referenceComp, $referenceVer, $self->{verbose});
+  my $nominatedRelData = RelData->Open($self->{iniData}, $nominatedComp, $nominatedVer, $self->{verbose});
+
+  my $referenceEnv = $referenceRelData->Environment();
+  my $nominatedEnv = $nominatedRelData->Environment();
+
+  foreach my $thisComp ( sort keys %{$nominatedEnv}){
+    if (defined $referenceEnv->{$thisComp}) {
+      if ($referenceEnv->{$thisComp} ne $nominatedEnv->{$thisComp}) {
+        $self->{diffComps}{modified}{$thisComp}{$referenceEnv->{$thisComp}} = $nominatedEnv->{$thisComp};
+      }
+      else {
+        $self->{diffComps}{identical}{$thisComp} = $nominatedEnv->{$thisComp};
+      }
+    }
+    else {
+      $self->{diffComps}{added}{$thisComp} = $nominatedEnv->{$thisComp};
+    }
+  }
+  foreach my $thisComp( sort keys %{$referenceEnv}){
+    unless (defined $nominatedEnv->{$thisComp}) {
+      $self->{diffComps}{deleted}{$thisComp} = $referenceEnv->{$thisComp};
+    }
+  }
+}
+
+sub compareFiles {
+  my $self = shift;
+  my $comp = shift;
+  my $referenceVersion = shift;
+  my $nominatedVersion = shift;
+  my $diffFiles;
+  my $referenceComp = $self->{iniData}->PathData->LocalArchivePathForExistingOrNewComponent($comp, $referenceVersion);
+  my $nominatedComp = $self->{iniData}->PathData->LocalArchivePathForExistingOrNewComponent($comp, $nominatedVersion);
+  my $referenceManifest = File::Spec->catdir($referenceComp,MANIFEST_FILE);
+  my $nominatedManifest = File::Spec->catdir($nominatedComp,MANIFEST_FILE);
+  if (-e $referenceManifest and -e $nominatedManifest) {
+    $diffFiles =   $self->compareManifestFiles($referenceManifest,$nominatedManifest);
+  }
+  else {
+    $diffFiles =   $self->compareAllZipFiles($comp, $nominatedComp, $referenceComp);
+  }
+  #List meta files (reldata, manifest and exports.txt files).
+  foreach my $thisFile (@{Utils::ReadDir($nominatedComp)}) {
+    unless ($thisFile =~ /\.zip$/) {
+      $diffFiles->{$comp}{files}{$thisFile} = 1;
+    }
+  }
+  return $diffFiles;
+}
+
+sub compareAllZipFiles {
+  my $self = shift;
+  my $comp = shift;
+  my $nominatedComp = shift;
+  my $referenceComp = shift;
+  my $tempRefPath = File::Spec->catdir($self->{tempDir},"ref");
+  my $tempNomPath = File::Spec->catdir($self->{tempDir},"nom");
+  print "Manifest file is not available for $comp\n";
+  my $nominatedCompFiles = Utils::ReadDir($nominatedComp);
+  my $referenceCompFiles = Utils::ReadDir($referenceComp);
+  my $nominatedZipFiles ;
+  my $referenceZipFiles ;
+  my %diffFiles;
+  foreach  my $thisFile (@{$nominatedCompFiles}) {
+    $nominatedZipFiles->{$thisFile} = 1 if ($thisFile =~ /\.zip$/) ;
+  }
+  foreach  my $thisFile (@{$referenceCompFiles}) {
+    $referenceZipFiles->{$thisFile} = 1 if ($thisFile =~ /\.zip$/) ;
+  }
+  foreach  my $thisZip (keys %{$nominatedZipFiles}) {
+    next unless ( $self->isExportableCat($comp, $thisZip) );
+    if (defined $referenceZipFiles->{$thisZip}) {
+      #Modified zip file
+      my $refZipFile = File::Spec->catdir($referenceComp, $thisZip);
+      my $nomZipFile = File::Spec->catdir($nominatedComp, $thisZip);
+      print "Extracting $thisZip.\n" if($self->{verbose});
+      Utils::Unzip($refZipFile ,$tempNomPath,0,1); # 0 = verbose, 1 = overwrite.
+      Utils::Unzip($nomZipFile,$tempRefPath,0,1);
+      my @referenceFiles;
+      my @nominatedFiles;
+      Utils::ListAllFiles($tempRefPath, \@referenceFiles);
+      Utils::ListAllFiles($tempNomPath, \@nominatedFiles);
+      foreach my $thisnomFile (@nominatedFiles) {
+        my $file1 = $thisnomFile;
+        $thisnomFile = substr($thisnomFile, (length( $tempNomPath)+1));
+        my $file2 = File::Spec->catfile($tempRefPath,$thisnomFile);
+        if (-e $file2) {
+          unless ($self->compareFile($file1 ,$file2)) {
+            $diffFiles->{$comp}{zips}{$thisZip}{modified}{$thisnomFile} = 1; #modified file.
+            unlink($file1) or print "Warning: Couldn't delete $file1 : $!\n";
+            unlink($file2) or print "Warning: Couldn't delete $file2 : $!\n";
+          }
+        }
+        else {
+          $diffFiles{$comp}{zips}{$thisZip}{added}{$thisnomFile} = 1; #added file.
+          unlink($file1) or print "Warning: Couldn't delete $file1 : $!\n";
+        }
+      }
+      foreach my $thisFile (@referenceFiles) {
+        my $file1 = substr($thisFile, (length( $tempRefPath)+1));
+        $file1  = File::Spec->catfile($tempNomPath,$file1);
+        unless (-e $file1) {
+          $diffFiles{$comp}{zips}{$thisZip}{deleted}{$file1} = 1 ; #deleted file for zip file.
+          unlink($thisFile) or print "Warning: Couldn't delete $thisFile : $!\n";
+        }
+      }
+    }
+    else {
+      #Newly added zip file.
+      my $nomZipFile = File::Spec->catdir($nominatedComp, $thisZip);
+      print "Extracting $thisZip.\n" if($self->{verbose});
+      Utils::Unzip($nomZipFile,$tempNomPath,0,1); # 0 = verbose, 1 = overwrite.
+      my @nominatedCompFiles;
+      Utils::ListAllFiles($tempNomPath, \@nominatedCompFiles);
+      foreach my $thisFile (@nominatedCompFiles) {
+        my $file = substr($thisFile, (length( $tempNomPath)+1));
+        $diffFiles{$comp}{zips}{$thisZip}{added}{$thisFile} = 1;
+        unlink($thisFile) or print "Warning: Couldn't delete $thisFile : $!\n";
+      }
+    }
+  }
+  #check for deleted zip files.
+  foreach  my $thisZip (keys %{$referenceZipFiles}) {
+    unless (defined $nominatedZipFiles->{$thisZip}) {
+      my @referenceCompFiles;
+      my $refZipFile = File::Spec->catdir($referenceComp, $thisZip);
+      print "Extracting $thisZip.\n" if($self->{verbose});
+      Utils::Unzip($refZipFile ,$tempRefPath,0,1); # 0 =  verbose, 1 = overwrite.
+      Utils::ListAllFiles($tempRefPath, \@referenceCompFiles);
+      foreach my $thisFile (@referenceCompFiles) {
+        my $file = substr($thisFile , (length( $tempRefPath)+1));
+        $diffFiles{$comp}{zips}{$thisZip}{deleted}{$file} = 1;
+        unlink($thisFile) or print "Warning: Couldn't delete $thisFile : $!\n";
+      }
+    }
+  }
+  return \%diffFiles;
+}
+
+sub compareFile {
+  my $self = shift;
+  my $file1 = shift;
+  my $file2 = shift;
+  my $Checksum1;
+  my $Checksum2;
+  unless ($self->{noevalid}) {
+    my $type1;
+    my $type2;
+    ($Checksum1, $type1) = EvalidCompare::GenerateSignature($file1);
+    ($Checksum2, $type2) = EvalidCompare::GenerateSignature($file2);
+  }
+  else {
+    open(FILEHANDLE1,"$file1");
+    open(FILEHANDLE2,"$file2");
+    my $ctx1 = Digest::MD5->new;
+    my $ctx2 = Digest::MD5->new;
+    $ctx1->addfile(FILEHANDLE1);
+    $ctx2->addfile(FILEHANDLE2);
+    $Checksum1 = $ctx1->hexdigest;
+    $Checksum2 = $ctx2->hexdigest;
+    close FILEHANDLE1;
+    close FILEHANDLE2;
+  }
+  return 1 if ($Checksum1 eq $Checksum2);
+  return 0;
+}
+
+
+sub compareManifestFiles {
+  my $self = shift ;
+  my $referenceManifest = shift;
+  my $nominatedManifest = shift;
+  my %diffFiles;
+  my $referenceManifestObj = Symbian::CBR::Component::Manifest->new($referenceManifest);
+  my $nominatedManifestObj = Symbian::CBR::Component::Manifest->new($nominatedManifest);
+  my $comp = lc($referenceManifestObj->{componentName});
+  $nominatedManifestObj->Compare($referenceManifestObj,1,1); # 1 = validatesource, 1 = keepgoing
+  foreach my $zipName (keys %{$nominatedManifestObj->GetDiffZipFiles()}) {
+    foreach my $thisFile (keys %{$nominatedManifestObj->GetDiffFilesForZip($zipName)}) {
+      my $fileStatus = $nominatedManifestObj->GetFileStatus($zipName, $thisFile);
+      $diffFiles{$comp}{zips}{$zipName}{$fileStatus}{$thisFile} = 1;
+    }
+  }
+  return  \%diffFiles;
+}
+
+sub isExportableCat {
+  my $self = shift;
+  my $comp = shift;
+  my $zipFile = shift;
+  my $exportPgp = [ ];
+  return 1 if($self->{exportAll});
+  if ($zipFile =~ /^source([a-z])\.zip$/i) {
+    $exportPgp  = $self->{exportData}->PgpKeysForSource($comp,$1);
+  }
+  elsif ($zipFile =~ /^exports([A-Z])\.zip$/i) {
+    $exportPgp  = $self->{exportData}->PgpKeysForExports($comp,$1);
+  }
+  elsif ($zipFile =~ /^binaries/i) {
+    $exportPgp  = $self->{exportData}->PgpKeysForBinaries($comp);
+  }
+  if (scalar @{$exportPgp} > 0) {
+    foreach  my $thisKey (@{$exportPgp}) {
+      return 1 if ($self->{pgpKey} eq $thisKey);
+    }
+  }
+  return 0;
+}
+
+sub createDeltaEnv {
+  my $self = shift;
+  my $referenceComp = shift;
+  my $referenceVersion = shift;
+  my $nominatedComp = shift;
+  my $nominatedVersion = shift;
+  my $destination = shift;
+  Utils::InitialiseTempDir($self->{iniData});
+  $self->{tempDir} = Utils::TempDir();
+  my $deltaDestination = File::Spec->catdir($self->{tempDir},"modified");
+  my $newCompPath = File::Spec->catdir($self->{tempDir}, "new");
+  $self->{exportData} = ExportData->New(exports_file => $self->{iniData}->ExportDataFile(),verbose => $self->{verbose}) unless ($self->{exportAll});
+  my $referenceRelData = RelData->Open($self->{iniData}, $referenceComp, $referenceVersion, $self->{verbose});
+  my $nominatedRelData = RelData->Open($self->{iniData}, $nominatedComp, $nominatedVersion, $self->{verbose});
+  my $referenceEnv = $referenceRelData->Environment();
+  my $nominatedEnv = $nominatedRelData->Environment();
+  unless ($self->{exportAll}) {
+    my $foundPgpKey = 0;
+    foreach my $thisPgpKeys (@{$self->{exportData}->AllPgpKeys()}) {
+      if ($thisPgpKeys eq $self->{pgpKey}) {
+        $foundPgpKey = 1;
+        last;
+      }
+    }
+    croak "Error: PGP key ".$self->{pgpKey}." is not defined in ".$self->{iniData}->ExportDataFile()." file.\n" unless($foundPgpKey);
+
+    foreach  my $thisComp (keys %{$nominatedEnv}) {
+      unless ($self->{exportData}->ComponentIsExportable($thisComp)) {
+        print "Warning: component \"$thisComp\" is not defined in export table.\n";
+      }
+    }
+  }
+
+  unless ($self->{noevalid} or eval { require EvalidCompare }) {
+    print "Warning: EvalidCompare is not installed. Setting --noevalid option. ($@)\n";
+    $self->{noevalid} = 1;
+  }
+
+  $self->{DeltaManifest} = Symbian::CBR::DeltaRelease::Manifest->new();
+
+  $self->{DeltaManifest}->SetReferenceBaselineComp($referenceComp);
+  $self->{DeltaManifest}->SetReferenceBaselineVer($referenceVersion);
+  $self->{DeltaManifest}->SetNominatedBaselineComp($nominatedComp);
+  $self->{DeltaManifest}->SetNominatedBaselineVer($nominatedVersion);
+ 
+  $self->compareEnvironments($referenceComp,$referenceVersion,$nominatedComp,$nominatedVersion);
+
+  foreach my $thisComp ( sort keys %{$self->{diffComps}{modified}} ) {
+    eval{ $self->createDeltaForComp($thisComp,$$referenceEnv{$thisComp},$$nominatedEnv{$thisComp}, $deltaDestination) };
+    print "Error: Unable to create Deltas for $thisComp,$$referenceEnv{$thisComp},$$nominatedEnv{$thisComp} $@\n" if($@);
+  }
+
+  foreach my $thisComp (sort keys %{$self->{diffComps}{added}}) {
+    $self->addComponent($thisComp, $newCompPath);
+  }
+
+  foreach my $thisComp (sort keys %{$self->{diffComps}{identical}}) {
+    $self->recordIdenticalOrDeletedComponent($thisComp, "identical");
+  }
+  foreach my $thisComp (sort keys %{$self->{diffComps}{deleted}}) {
+    $self->recordIdenticalOrDeletedComponent($thisComp, "deleted");
+  }
+  $self->{DeltaManifest}->Save($self->{tempDir}); # Write delta manifest file.
+
+  #Package modified, new directories and delta manifest file into zip files
+  my @filesToBeZipped ;
+  my @allFiles;
+  my $tempRefPath = File::Spec->catdir($self->{tempDir},"ref");
+  my $tempNomPath = File::Spec->catdir($self->{tempDir},"nom");
+  rmtree($tempRefPath) if($tempRefPath);
+  rmtree($tempNomPath) if($tempNomPath);
+  Utils::ListAllFiles($self->{tempDir}, \@allFiles);
+  foreach  my $thisFile (@allFiles) {
+    my $file = substr($thisFile, (length($self->{tempDir})+1));
+    push @filesToBeZipped, $file;
+  }
+  my $tempPackageZipFile = $referenceVersion."_".$nominatedVersion.".tmp";
+  $tempPackageZipFile = File::Spec->catfile($destination, $tempPackageZipFile );
+  my $packageZipFile = $referenceVersion."_".$nominatedVersion.".zip";
+  $packageZipFile = File::Spec->catfile($destination, $packageZipFile );
+  if (-e $packageZipFile) {
+    print "Overwriting $packageZipFile.\n";
+    unlink ($packageZipFile);
+  }
+  print "Packaging all files into $packageZipFile.\n";
+  Utils::ZipList( $tempPackageZipFile, \@filesToBeZipped, $self->{verbose}, 0,$self->{tempDir});
+  rename ($tempPackageZipFile, $packageZipFile) or croak "Error: Couldn't rename $tempPackageZipFile to $packageZipFile.\n ";
+  rmtree ($self->{tempDir});
+}
+
+sub recordIdenticalOrDeletedComponent {
+  my $self = shift;
+  my $comp = shift;
+  my $compStatus = shift;
+  $self->{DeltaManifest}->SetComponentDetails($comp, $compStatus, $self->{diffComps}{$compStatus}{$comp}, undef); # undef for nominated version.
+  print "$comp is $compStatus.\n" if ($self->{verbose});
+}
+
+sub addComponent {
+  my $self = shift;
+  my $comp = shift;
+  my $newCompPath = shift;
+  print "$comp is newly added.\n";
+  $self->{DeltaManifest}->SetComponentDetails($comp, "added", undef, $self->{diffComps}{added}{$comp}); # undef for reference version.
+
+  $newCompPath = File::Spec->catdir($newCompPath,$comp);
+  mkpath($newCompPath) unless (-e $newCompPath);
+
+  my $archiveForComp = $self->{iniData}->PathData->LocalArchivePathForExistingOrNewComponent($comp, $self->{diffComps}{added}{$comp});
+  my $archiveFiles = Utils::ReadDir($archiveForComp);
+
+  foreach my $thisFile (@{$archiveFiles}) {
+    my $archiveFilePath = File::Spec->catdir($archiveForComp,$thisFile);
+    my $destFilePath = File::Spec->catfile($newCompPath,$thisFile);
+    if ($thisFile =~ /\.zip$/) {
+      if ($self->isExportableCat($comp,$thisFile)) {
+        $self->{DeltaManifest}->SetZipfileDetails($comp, $thisFile, "added");
+        eval{ copy($archiveFilePath,$destFilePath) ;};
+		croak "Error: File $archiveFilePath cannot be copied to $destFilePath. $@" if($@);
+      }
+    }
+    else {
+     eval{ copy($archiveFilePath,$destFilePath) ;};
+	 croak "Error: File $archiveFilePath cannot be copied to $destFilePath. $@" if($@);
+      $self->{DeltaManifest}->RecordMetaFile($comp, $thisFile);
+    }
+  }
+}
+
+sub createDeltaForComp {
+  my $self = shift;
+  my $comp = shift;
+  my $referenceVersion = shift;
+  my $nominatedVersion = shift;
+  my $deltaDestination = shift;
+  print "Creating Delta for $comp component.\n";
+
+  my $referenceCompPath = $self->{iniData}->PathData->LocalArchivePathForExistingOrNewComponent($comp, $referenceVersion);
+  my $nominatedCompPath = $self->{iniData}->PathData->LocalArchivePathForExistingOrNewComponent($comp, $nominatedVersion);
+
+  my $relDataManifestDestination = File::Spec->catdir($self->{tempDir},META_FILES);
+  $self->{DeltaManifest}->SetComponentDetails($comp, "modified", $referenceVersion, $nominatedVersion);
+  my $filesList = $self->compareFiles($comp,$referenceVersion,$nominatedVersion);
+  foreach my $zipFile (keys %{$filesList->{$comp}{zips}}) { #Iterate through all zip files.
+    if ($self->isExportableCat($comp,$zipFile)) {
+      if ($self->{deltaAllFiles} or $self->{releaseManifest}->FileExists($comp, $zipFile)) { #Check whether zip file is present at receiving site or.
+        $self->{DeltaManifest}->SetZipfileDetails($comp, $zipFile, "modified");
+        $self->createDeltaForZip($comp, $referenceCompPath, $nominatedCompPath, $zipFile, $deltaDestination, $filesList);
+      }
+      else {
+        $self->{DeltaManifest}->SetZipfileDetails($comp, $zipFile, "added"); #added zip file for the component.
+        my $newZipFilePath = File::Spec->catdir($deltaDestination, ADDED_ZIPS, $comp);
+        mkpath ($newZipFilePath) unless(-d $newZipFilePath);
+        my $addedZipFile = File::Spec->catfile($newZipFilePath, $zipFile);
+        my $archiveFile = File::Spec->catfile($nominatedCompPath,$zipFile);
+        copy($archiveFile,$addedZipFile) or print "Warning: Couldn't copy $zipFile\n";
+      }
+    }
+    else {
+      print "Warning: $zipFile is not exportable.\n" if ($self->{verbose});
+    }
+  }
+  foreach my $thisFile (@{Utils::ReadDir($referenceCompPath)}) {
+    if ($thisFile =~/\.zip$/ and $self->isExportableCat($comp,$thisFile)) {
+      unless (defined $filesList->{$comp}{zips}{$thisFile}) {
+        $self->{DeltaManifest}->SetZipfileDetails($comp, $thisFile, "identical");
+      }
+    } 
+  }
+
+  #Process reldata manifest and export.txt files.
+  foreach my $thisFile (keys %{$filesList->{$comp}{files}}) {
+    $self->{DeltaManifest}->RecordMetaFile($comp, $thisFile);
+    my $archiveFile = File::Spec->catfile($nominatedCompPath, $thisFile);
+    my $destinationFile = $comp."_".$thisFile;
+    mkpath($relDataManifestDestination) unless(-d $relDataManifestDestination);
+    $destinationFile = File::Spec->catfile($relDataManifestDestination, $destinationFile);
+    copy($archiveFile,$destinationFile) or print "Warning: Couldn't copy $thisFile\n";
+  }
+}
+
+sub createDeltaForZip {
+  my $self = shift;
+  my $comp = shift;
+  my $referenceCompPath = shift;
+  my $nominatedCompPath  = shift;
+  my $zipFile = shift;
+  my $deltaDestination = shift;
+  my $filesList = shift;
+
+  my $refZipFilePath = File::Spec->catfile($referenceCompPath, $zipFile);
+  my $nomZipFilePath = File::Spec->catfile($nominatedCompPath, $zipFile);
+  my $tempRefPath = File::Spec->catdir($self->{tempDir},"ref");
+  my $tempNomPath = File::Spec->catdir($self->{tempDir},"nom");
+  print "Creating delta for $zipFile\n" if($self->{verbose});
+
+  #Process all files of a zip file.
+  foreach my $file (keys %{$filesList->{$comp}{zips}{$zipFile}{'modified'}}) {
+    #create delta for a file if it is modified.
+    unless ($self->{nodelta}) {
+      #Extract and create delta for a file.
+      print "Extracting $file from nominated $zipFile.\n" if($self->{verbose});
+      eval{Utils::UnzipSingleFile($nomZipFilePath,$file,$tempNomPath,0,1, $comp)};  # 0 = verbose. 1 = overwrite.
+      croak "Error: Couldn't Extract File $file $@\n" if($@);
+      my $file2 = File::Spec->catfile($tempNomPath,$file);
+
+      my $outputDeltaPath = File::Spec->catdir($deltaDestination, dirname($file));
+
+      my $size = -s $file2;
+      if (!defined $self->{maxdelta} or $size <= $self->{maxdelta}) {
+        print "Extracting $file from reference $zipFile.\n" if($self->{verbose});
+        eval{Utils::UnzipSingleFile($refZipFilePath,$file,$tempRefPath,0,1, $comp)};
+        croak "Error: Couldn't Extract File $file $@\n" if($@);
+        my $file1 = File::Spec->catfile($tempRefPath,$file);
+
+        $self->{DeltaManifest}->SetFileDetails($comp, $zipFile, $file, "modified", "delta");
+
+        $self->generateFileDelta($file1,$file2,$outputDeltaPath);
+      } else {
+        # File is too big to delta
+        $self->{DeltaManifest}->SetFileDetails($comp, $zipFile, $file, "modified", "file");
+        print "Not creating a delta of $file due to it being $size bytes\n" if ($self->{verbose});
+        if (! -d $outputDeltaPath) {
+          mkpath($outputDeltaPath) or croak "Error: Couldn't create directory for large file $file2 in delta\n";
+        }
+        system("move /Y \"".$file2."\" \"".$outputDeltaPath."\"") and croak "Error: Couldn't move large file $file2 into delta\n";
+      }
+    } else {
+      #add file to output delta package.
+      $self->{DeltaManifest}->SetFileDetails($comp, $zipFile, $file, "modified", "file");
+      print "Extracting $file from $zipFile.\n" if($self->{verbose});
+      eval{Utils::UnzipSingleFile($nomZipFilePath,$file,$deltaDestination,0,1, $comp); # 0 = verbose. 1 = overwrite.
+      };
+      croak "Error: Couldn't Extract File $file $@\n" if($@);
+    }
+  }
+
+  foreach my $file (keys %{$filesList->{$comp}{zips}{$zipFile}{'added'}}) {
+    #Newly added file to component.
+    print "$file is newly added.\n" if ($self->{verbose});
+    $self->{DeltaManifest}->SetFileDetails($comp, $zipFile, $file, "added", "file"); 
+    print "Extracting $file from $zipFile\n" if($self->{verbose});
+    eval{Utils::UnzipSingleFile($nomZipFilePath,$file,$deltaDestination,0, 1, $comp)};
+    croak "Error: Couldn't Extract File $file:$@\n" if($@);
+  }
+
+  foreach my $file (keys %{$filesList->{$comp}{zips}{$zipFile}{'deleted'}}) {
+    #deleted file.
+    print "$file is deleted.\n" if ($self->{verbose});
+    $self->{DeltaManifest}->SetFileDetails($comp, $zipFile, $file, "deleted", "file"); 
+  }
+}
+
+sub generateFileDelta {
+  my $self = shift;
+  my $file1 = shift;
+  my $file2 = shift;
+  my $destination = shift;
+  my $deltaFile = shift;
+  mkpath($destination) unless (-e $destination);
+  $deltaFile =  basename($file2).".delta" unless(defined $deltaFile);
+  $deltaFile = File::Spec->catfile($destination,$deltaFile);
+
+  $file1  =~ s/^\\/\\\\/g; # Replace leading \ by \\.
+  $file2  =~ s/^\\/\\\\/g;
+
+  print "Creating delta for file ". basename($file1). "\n" if ($self->{verbose});
+  my $status = system "zdc \"$file1\" \"$file2\"  \"$deltaFile\"" ;
+  if( $status != 0 ) {
+    $status = system "zdc" ;
+    $! = $? >> 8;
+    if ($status != 0) {
+      $! = $? >> 8;
+      print "Error: The zdelta tool is not installed. Please install zdelta, or use the --nodelta option to skip delta creation.\n";
+      croak;
+    }
+    else {
+      print "Error: The zdelta tool is not installed properly. Please install zdelta once again, or use the --nodelta option to skip delta creation.\n";
+      croak;
+    }
+  }
+}
+
+1;
+
+__END__
+
+
+=head1 NAME
+
+Symbian::CBR::CreateDelta.pm - Creates deltas for modified files from reference baseline to the nominated baseline.
+
+=head2 new
+
+Creates a CreateDelta object. Expects to be passed:
+
+=over 4
+
+=item *
+an C<IniData> reference
+
+=item *
+a C<Release manifest> reference
+
+=item *
+a verbosity level
+
+=item *
+a flag to indicate not to use evalid for comparision
+
+=item *
+a flag to skip delta creation
+
+=item *
+a maximum file size (in bytes) above which the tool won't create a delta of the file (assuming the flag to skip delta creating in all cases is not used).  
+
+=back
+
+=head2 compareEnvironments
+
+Expects to be passed a reference component name, a reference component version, a nominated component name and a nominated component version. Compares these environments to list identical, modified, added and deleted components.
+
+=head2 compareFiles
+
+Expects to be passed a full path for a reference version and a nominated version of a component. Lists modified, added and deleted files for the component between the two versions. If the manifest file is present for both versions, then it compares using manifest objects. Otherwise it extracts all zip files and compares each file, one at a time.
+
+=head2 compareFile
+
+Expects to be passed full paths for two versions of a file. Compares them using EvalidCompare if noevalid is not specified, otherwise uses Digest::MD5 for the file comparison. Returns 1 if checksum for both the files matches, otherwise 0.
+
+=head2 createDeltaEnv
+
+Expects to be passed a reference component name, a reference component version, a nominated component name, a nominated component version, and a destination. Creates the deltas for the modified files between two baselines, adds newly added files and components and packages these files into a zip file at the path provided as a destination. 
+
+=head2 createDeltaForComp
+
+Expects to be passed a component name, reference version of component, nominated version of a component, and path where deltas to be stored. Compares the modified, added and deleted files from reference version to nominated version and creates the deltas for modified files, then copies the newly added files.
+
+=head2 generateFileDelta 
+
+Expects to be passed a full path for two versions of a file, destination path where delta file should be stored, and optionally delta file name. Makes use of zdelta third party tool to create delta for a file.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Symbian/CBR/DeltaRelease/Manifest.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,380 @@
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# Symbian::CBR::Delta::Manifest.pm
+#
+
+package Symbian::CBR::DeltaRelease::Manifest;
+
+use strict;
+use XML::Simple;
+use Carp;
+use POSIX qw(strftime);
+use base qw (Exporter);
+
+#
+#Constants
+#
+
+use constant DELTA_MANIFEST_FILE      => 'delta_manifest_baseline.xml';
+use constant META_FILES               => 'metafiles';
+use constant ADDED_ZIPS               => 'addedZips';
+
+our @EXPORT_OK = qw(DELTA_MANIFEST_FILE META_FILES ADDED_ZIPS);
+
+
+
+#
+#Public.
+#
+
+sub new {
+  my $pkg = shift;
+  my $self = {};
+  bless $self, $pkg;
+  return $self;
+}
+
+sub Save {
+  my $self = shift;
+  my $destination = shift;
+  mkpath ($destination) unless (-e $destination);
+  my $manifestFile = File::Spec->catfile($destination,DELTA_MANIFEST_FILE);
+  print "Writing Delta manifest file.\n " ;
+  #Hash structure to be provided as input for XML::Simple->XMLout()
+  my $manifestHash = {
+    version => "1.0.0",
+    meta => { 'reference-baseline' => { 'value' => $self->{referenceBaseline} },
+              'reference-version' => { 'value' => $self->{referenceVersion} },
+              'nominated-baseline' => { 'value' => $self->{nominatedBaseline} },
+              'nominated-version' => { 'value' => $self->{nominatedVersion} },
+              'created-time' => { 'value' => strftime( '%Y-%m-%dT%H:%M:%S', localtime() ) } }
+  };
+  my $cgroups = {};
+  foreach my $thisComp (sort keys %{$self->{components}}) {
+    my $compStatus = $self->{components}{$thisComp}{'status'};
+    my $nomVer = $self->{components}{$thisComp}{'nominatedVersion'} if (defined $self->{components}{$thisComp}{'nominatedVersion'});
+    my $refVer = $self->{components}{$thisComp}{'referenceVersion'} if (defined $self->{components}{$thisComp}{'referenceVersion'});
+    my $zgroups = {};
+    my @zGroupArray = ();
+    foreach  my $thisZip (sort keys %{$self->{components}{$thisComp}{'zipFiles'}}) {
+      my $thisZipFileStatus = $self->{components}{$thisComp}{'zipFiles'}{$thisZip}{'status'};
+      if ( !defined $zgroups->{$thisZip} ) {
+        $zgroups->{$thisZip} = {file => []};
+        if ($thisZip =~ /^exports([A-Z])\.zip$/i) {
+          $zgroups->{$thisZip}{'ipr-category'} = $1;
+          $zgroups->{$thisZip}{'content-type'} = "exports";
+        }
+        elsif ($thisZip =~ /^source([A-Z])\.zip$/i) {
+          $zgroups->{$thisZip}{'ipr-category'} = $1;
+          $zgroups->{$thisZip}{'content-type'} = "source";
+        }
+        elsif ($thisZip =~ /^binaries\.zip$/i) {
+          $zgroups->{$thisZip}{'content-type'} = "binary";
+        }
+        elsif ($thisZip =~ /^binaries\_([_a-zA-Z0-9]+)\.zip$/i) {
+          $zgroups->{$thisZip}{'content-type'} = "binary";
+          $zgroups->{$thisZip}{'platform'} = $1;
+        }
+        $zgroups->{$thisZip}{status} = $thisZipFileStatus;
+        push @zGroupArray, $zgroups->{$thisZip};
+      }
+      foreach my $thisFile (keys %{$self->{components}{$thisComp}{'zipFiles'}{$thisZip}{files}}) {
+        my $file = { path => $thisFile };
+        $file->{status} = $self->{components}{$thisComp}{'zipFiles'}{$thisZip}{files}{$thisFile}{status};
+        $file->{type} = $self->{components}{$thisComp}{'zipFiles'}{$thisZip}{files}{$thisFile}{type};
+        push @{$zgroups->{$thisZip}{file}}, $file;
+      }
+    }
+    if ( !defined $cgroups->{$thisComp} ) {
+      $cgroups->{$thisComp} = { files => [] };
+      $cgroups->{$thisComp}{name} = $thisComp;
+      $cgroups->{$thisComp}{status} = $compStatus;
+      $cgroups->{$thisComp}{referenceVersion} = $refVer if(defined $refVer);
+      $cgroups->{$thisComp}{nominatedVersion} = $nomVer if(defined $nomVer);
+      push @{$manifestHash->{component}}, $cgroups->{$thisComp};
+    }
+    foreach my $zgroup (@zGroupArray) {
+      push @{$cgroups->{$thisComp}{files}}, $zgroup;
+    }
+    foreach my $thisFile (sort keys %{$self->{components}{$thisComp}{metafiles}}) {
+      my $file = { path => $thisFile };
+      push @{$cgroups->{$thisComp}{metafiles}{file}}, $file;
+    }
+  }
+  #Use the hash structure for calling the XMLout() to write the manifest file
+  eval {XMLout(
+        $manifestHash,
+        xmldecl     => '<?xml version="1.0" ?>',
+        rootname    => 'manifest',
+        outputfile  => $manifestFile )};
+  croak "Error: Can't write manifest file: $@\n" if $@;
+}
+
+sub LoadManifest {
+  my $self = shift;
+  my $manifestFile = shift;
+  print "Reading $manifestFile file.\n";
+
+  my $manifest    = eval{XMLin(
+                    $manifestFile,
+                    forcearray => [ qw(component files file metafiles) ], keyattr => [])
+                    };
+
+  croak "Error: Can't read manifest file '$manifestFile': $@\n" if $@;
+
+  # Mapping from xml keyword to our internal data structure keyword
+  my %metaFieldMap = ('nominated-baseline' => 'nominatedBaseline',
+                      'nominated-version'  => 'nominatedVersion',
+                      'reference-baseline' => 'referenceBaseline',
+                      'reference-version'  => 'referenceVersion',
+                      'created-time'       => 'createdTime');
+
+  foreach my $metaInformation (@{$manifest->{meta}}) {
+    $self->{$metaFieldMap{$metaInformation->{name}}} = $metaInformation->{value};
+  }
+  
+  foreach my $component ( @{$manifest->{component} } ) {  
+    $self->{components}->{$component->{name}} = {
+                referenceVersion => $component->{referenceVersion},
+                nominatedVersion => $component->{nominatedVersion},
+                status => $component->{status}}; 
+
+    foreach my $zipfile ( @{ $component->{files} } ) {
+      my $content = $zipfile->{'content-type'};
+      my $category;
+      my $platform;
+      my $zipFileName ;
+      if ($content eq "source" or $content eq "exports") {
+        $category = $zipfile->{'ipr-category'};
+        $zipFileName = $content.$category.".zip";
+      }
+      else {
+        $platform = $zipfile->{platform};
+        if (defined $platform) {
+          $zipFileName = "binaries_".$platform.".zip";
+        }
+        else {
+          $zipFileName = "binaries.zip";
+        }
+      }
+      
+      $self->{components}->{$component->{name}}->{zipFiles}->{$zipFileName}->{status} = $zipfile->{status};
+     
+      foreach my $file (@{$zipfile->{file}}) {      
+        $self->{components}->{$component->{name}}->{zipFiles}->{$zipFileName}->{files}->{$file->{path}} = {
+                                                                                          status => $file->{status},
+                                                                                          type => $file->{type}};
+      }
+    }
+    foreach my $metafiles ( @{ $component->{metafiles} } ) {
+      foreach my $file (@{$metafiles->{file}}) {
+        my $name = $file->{path};
+        $self->{components}->{$component->{name}}->{metafiles}->{$name} = 1;
+      }
+    }
+  }
+}
+
+sub SetReferenceBaselineComp {
+  my $self = shift;
+  my $comp = shift;
+  $self->{referenceBaseline} = $comp;
+}
+
+sub SetReferenceBaselineVer {
+  my $self = shift;
+  my $version = shift;
+  $self->{referenceVersion} = $version;
+}
+
+sub SetNominatedBaselineComp {
+  my $self = shift;
+  my $comp = shift;
+  $self->{nominatedBaseline} = $comp;
+}
+
+sub SetNominatedBaselineVer {
+  my $self = shift;
+  my $version = shift;
+  $self->{nominatedVersion} = $version;
+}
+
+sub SetComponentDetails {
+  my $self = shift;
+  my $comp = shift;
+  my $status = shift;
+  my $refVersion = shift;
+  my $nomVersion = shift;
+  $self->{components}{$comp}{'status'} = $status;
+  $self->{components}{$comp}{'referenceVersion'} = $refVersion if(defined $refVersion);
+  $self->{components}{$comp}{'nominatedVersion'} = $nomVersion if(defined $nomVersion);
+}
+
+sub SetZipfileDetails {
+  my $self = shift;
+  my $comp = shift;
+  my $zipFile = shift;
+  my $status = shift;
+  $self->{components}{$comp}{zipFiles}{$zipFile}{'status'} = $status;
+}
+
+sub SetFileDetails {
+  my $self = shift;
+  my $comp = shift;
+  my $zipFile = shift;
+  my $file = shift;
+  my $status = shift;
+  my $type = shift;
+  $self->{components}{$comp}{zipFiles}{$zipFile}{files}{$file}{status} = $status;
+  $self->{components}{$comp}{zipFiles}{$zipFile}{files}{$file}{type} = $type;
+}
+
+sub RecordMetaFile {
+  my $self = shift;
+  my $comp = shift;
+  my $file = shift;
+  $self->{components}{$comp}{metafiles}{$file} = 1;
+}
+
+sub GetReferenceBaselineComp {
+  my $self = shift;
+  return $self->{referenceBaseline} ;
+}
+
+sub GetReferenceBaselineVer {
+  my $self = shift;
+  return $self->{referenceVersion};
+}
+
+sub GetNominatedBaselineComp {
+  my $self = shift;
+  return $self->{nominatedBaseline};
+}
+
+sub GetNominatedBaselineVer {
+  my $self = shift;
+  return $self->{nominatedVersion};
+}
+
+sub ListAllComponents {
+  my $self = shift;
+  return $self->{components};
+}
+
+sub GetCompStatus {
+  my $self = shift;
+  my $comp = shift;
+  return $self->{components}{$comp}{'status'};
+}
+
+sub GetCompReferenceVer {
+  my $self = shift;
+  my $comp = shift;
+  return $self->{components}{$comp}{'referenceVersion'};
+}
+
+sub GetCompNominatedVer {
+  my $self = shift;
+  my $comp = shift;
+  return $self->{components}{$comp}{'nominatedVersion'};
+}
+
+
+sub GetZipFilesForComp {
+  my $self = shift;
+  my $comp = shift;
+  return ($self->{components}{$comp}{zipFiles} || {});
+}
+
+sub GetZipStatus {
+  my $self = shift;
+  my $comp = shift;
+  my $zipFile = shift;
+  return $self->{components}{$comp}{zipFiles}{$zipFile}{'status'};
+}
+
+sub GetFilesForZip {
+  my $self = shift;
+  my $comp = shift;
+  my $zipFile = shift;
+  return ($self->{components}{$comp}{zipFiles}{$zipFile}{files} || {});
+}
+
+sub GetFileStatus {
+  my $self = shift;
+  my $comp = shift;
+  my $zipFile = shift;
+  my $file  = shift;
+  $self->{components}{$comp}{zipFiles}{$zipFile}{files}{$file}{status};
+}
+
+sub GetFileType {
+  my $self = shift;
+  my $comp = shift;
+  my $zipFile = shift;
+  my $file  = shift;
+  return $self->{components}{$comp}{zipFiles}{$zipFile}{files}{$file}{type};
+}
+
+sub GetMetaFiles {
+  my $self = shift;
+  my $comp = shift;
+  return ($self->{components}{$comp}{metafiles} || {});
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Symbian::CBR::DeltaRelease::Manifest.pm - Provides an interface to data associated with a deltas created from reference version to the nominated version.
+
+=head2 new
+
+Creates a new Symbian::CBR::Delta::Manifest object.
+
+=head2 Save
+
+Expects to be passed a destination path. Creates destination path if destination path is not existing, and save the hash structure to xml file.
+
+=head2 LoadManifest
+
+Expects to be passed a manifest file name. Reads delta manifest file and converts into a hash structure.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Symbian/CBR/IPR/DISTRIBUTION.policy	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2 @@
+Category T
+OSD:	Reference/Test	Tools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Symbian/CBR/IPR/MRP.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,443 @@
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# Symbian::CBR::IPR::MRP
+#
+
+package Symbian::CBR::IPR::MRP;
+
+use strict;
+use Carp;
+use File::Spec;
+use File::Basename;
+use Cwd;
+use Symbian::CBR::MRP::Reader;
+
+use base qw(Class::Singleton);
+
+use constant SRCROOT => ($ENV{SRCROOT} || '\\');
+
+BEGIN {
+    # The location of the CBR Tools may not be known to Perl, so we do a seach 
+    # to see if they are available...
+    if (!eval {require IniData}) {
+        if (-e File::Spec->catdir(File::Basename::dirname("$0"), 'IniData.pm')) {
+            push @INC, File::Spec->catdir(File::Basename::dirname("$0"));
+        } 
+        else {
+            for my $path (split(/;/,$ENV{PATH})) {
+                if (-e $path."\\IniData\.pm") {
+                    push @INC, $path;
+                    last;
+                }
+            }
+        }
+    } 
+}
+
+
+sub _new_instance {
+    my $pkg = shift;
+    my $typeOfMrp = shift;
+    my $verbose = shift;
+
+    if (!$typeOfMrp || shift) {
+        # caller(0))[3] gives the package and the method called, e.g. Symbian::CBR::IPR::MRP::_new_instance
+        croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";
+    }
+    
+    my $self = {};
+    bless $self, $pkg;
+       
+    $self->{typeOfMrp} = $typeOfMrp;
+    $self->{verbose} = $verbose;
+    
+    return $self;
+}
+
+sub PrepareInformationForComponent {
+    my $self = shift;
+    my $component = shift;
+    
+    my @mrpLocation;
+    
+    #if it's a comp name then look it up/read it 
+    if (@mrpLocation = $self->GetMRPLocations($component)) {
+        $self->ReadMRPFiles(\@mrpLocation);
+    }
+    else {
+        # If we can't get any MRP locations then we can't use MRP files for IPR information
+        return undef;
+    }
+}
+
+sub PrepareInformationForMrpFile {
+    my $self = shift;
+    my @mrps = shift;
+    
+    #can take a single or a list
+    
+    $self->ReadMRPFiles(\@mrps);
+}
+
+sub Populate {
+    my $self = shift;
+
+    croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n" if (shift);
+    
+    if (exists $self->{populated}) {
+        # We only need to populate the tree once
+        return 1;
+    }
+    else {
+        # Set a flag and continue
+        $self->{populated} = 1;
+    }
+    
+    my @mrpFiles;
+    
+    if (@mrpFiles = $self->GetMRPLocations()) {
+        $self->ReadMRPFiles(\@mrpFiles);
+        
+        if (!(keys %{$self->{iprTree}})) {
+            # If we can't get any IPR information from MRP files then we can't use MPR files for IPR information
+            return undef;
+        }        
+    }
+    else {
+        # If we can't get any MRP locations then we can't use MRP files for IPR information
+        return undef;   
+    }
+}
+
+
+sub GetMRPLocations {
+    my $self = shift;
+    my $component = shift;
+
+    croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n" if (shift);
+
+    my @mrpFiles; 
+   
+    # Try to get MRP locations from environment database.
+    if ($self->InvokeCBRTools()) {      
+        @mrpFiles = $self->{envDB}->GetMRPLocations($component);
+        
+        if (scalar @mrpFiles) {
+            # envDb may return \
+            @mrpFiles = grep /\.mrp$/, @mrpFiles;
+        }
+
+        if (!scalar @mrpFiles) {
+            return ();
+        }
+    
+        return (@mrpFiles);
+    }
+    else {
+        return ();
+    }
+}
+
+
+sub InvokeCBRTools {
+    my $self = shift;
+    
+    # If we have already tried to use the CBR Tools but have been unable to then return undef
+    if ($self->{noCbrTools}) {
+        return undef;
+    }
+    
+    # If we have successfully created a CBR Tools EnvDB object then return true
+    if (exists $self->{envDB}) {
+        return 1;
+    }
+    
+    # Otherwise we try to create a CBR Tools EnvDB object...
+    my $iniData;
+    my @errors;
+    
+    if (eval {require IniData} && eval {require EnvDb}) {
+        eval {$iniData = IniData->New()};
+ 
+         push @errors, $@ if ($@);
+
+        if ($iniData) {
+            eval {$self->{envDB} = EnvDb->Open($iniData)};
+
+            push @errors, $@ if ($@);
+        } 
+    }
+    
+    if ($iniData && $self->{envDB} && !scalar(@errors)) {
+        return 1;        
+    }
+    else {
+        # If not successful then we produce a warning and return undef
+        carp "Warning: Unable to use the CBR Tools for obtaining MRP locations\n";
+        carp "The following errors were returned: @errors\n" if (scalar(@errors) > 0);
+
+        $self->{noCbrTools} = 1;
+        return undef;   
+    }
+}
+
+
+sub ReadMRPFiles {
+    my $self = shift;
+    my $mrpFiles = shift;
+
+    croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n" if (shift);
+        
+    # Construct a reader object, specifying the type of MRP object to populate
+    if (!exists $self->{reader}) {
+        print "Obtaining IPR information from MRP files...\n" if ($self->{verbose});
+        $self->{reader} = Symbian::CBR::MRP::Reader->instance();
+        $self->{reader}->SetVerbose() if ($self->{verbose});
+    }
+    
+    my @dependencies;
+    
+    foreach my $mrpFile (@$mrpFiles) {
+        # It is possible that the file doesn't exist, e.g. only binaries may be installed
+        next if (!-e $mrpFile);
+        
+        # Skip this file if it has already been processed
+        next if (exists $self->{processedMrpFiles}->{lc($mrpFile)}); 
+        
+        # Keep a record of the MRP files that we have processed...
+        $self->{processedMrpFiles}->{lc($mrpFile)} = 1;
+        
+        eval {
+            # Parse the MRP file.  The reader returns an MRP object
+            my $mrpObj = $self->{reader}->ReadFile($mrpFile, $self->{typeOfMrp});
+            
+            # Get the IPR information from the MRP object
+            my $iprInformation = $mrpObj->GetIPRInformation();
+            
+            # Add it to the IPR lookup tree
+            $self->AddToTree($iprInformation);
+    
+            if (scalar($mrpObj->GetExportComponentDependencies())) {
+                @dependencies = $mrpObj->GetExportComponentDependencies();
+            }
+        };
+
+        if ($@) {
+          print $@;
+        }
+    }
+      
+    # if any left over then call PrepareInformationForComponent
+    foreach my $dependancy (@dependencies) {
+        if (my @mrpLocations = $self->GetMRPLocations($dependancy)) {
+            $self->ReadMRPFiles(\@mrpLocations);
+        }
+        else {
+            carp "Warning: Unable to locate MRP file for dependant component \"$dependancy\"\n";
+        }
+    }
+}
+
+
+sub AddToTree {
+    my $self = shift;
+    my $iprInformation = shift;
+
+    if (!$iprInformation || shift) {
+        croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";
+    }
+
+    foreach my $path (keys %{$iprInformation}) {
+        my $lcPath = lc($path);
+    
+        # each folder is a branch on the tree
+        $lcPath =~ s/^[\\\/]//;
+        my @folders = split /[\\\/]/, $lcPath;
+    
+        # used to track position in tree
+        my $branch = \%{$self->{iprTree}};
+    
+        foreach my $folder (@folders) {
+            if (!exists $branch->{$folder}) {
+                $branch->{$folder} = {};
+            }
+	    
+            # ignore the special folder '.'
+            unless ($folder eq '.') {
+                $branch = $branch->{$folder};
+            }
+        }
+	
+        if (exists $branch->{'_category'}) {
+            if ($branch->{'_category'} ne $iprInformation->{$path}->{'category'} || $branch->{'_exportRestricted'} ne $iprInformation->{$path}->{'exportRestricted'}) {
+                # If IPR information has already been set and differs then we should set the data as null
+                # so that distribution policy files will be used instead.
+                $branch->{'_category'} = '';
+                $branch->{'_exportRestricted'} = '';
+                carp "Warning: IPR information for \"$path\" defined more than once in MRP files and differs and so will be ignored\n";
+            }
+        }
+        else {
+            $branch->{'_category'} = $iprInformation->{$path}->{'category'};
+            $branch->{'_exportRestricted'} = $iprInformation->{$path}->{'exportRestricted'};
+        }
+    }
+}
+
+
+sub Category {
+    my $self = shift;
+    my $path = shift;
+
+    if (!$path || shift) {
+        croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";
+    }
+
+    return $self->GetIPRinfo($path)->{'category'};
+}
+
+
+sub ExportRestricted {
+    my $self = shift;
+    my $path = shift;
+    
+    if (!$path || shift) {
+        croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";
+    }
+    
+    return $self->GetIPRinfo($path)->{'exportRestricted'};
+}
+
+
+sub GetIPRinfo {
+    my $self = shift;
+    my $path = lc(shift); # We need to lowercase the path
+
+    if (!$path || shift) { 
+        croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";
+    }
+    
+    if (!exists $self->{iprTree}) {
+        # If no information exists in the tree then try to populate all the information from the EnvDB database
+        $self->Populate();
+    }
+    
+    # Turn paths into abs from rel, some tools may pass relative paths (e.g. ExportIPR.pl)
+    $path = File::Spec->rel2abs($path);
+
+    # We need to remove drive letters
+    $path =~ s/^[a-z]://i;
+
+    my $results = {
+                'category' => undef, # As the distribution policy modules return X if no category is found
+                'exportRestricted' => undef};
+
+    $path =~ s/^[\\\/]//; # Remove the first slash otherwise splitting the path on slashes will create an empty array entry
+    my @folders = split /[\\\/]/, $path;
+
+    my $branch = $self->{iprTree};
+
+    # find the path in the tree
+    foreach my $folder (@folders) {
+        if (exists $branch->{$folder}) {
+            $branch = $branch->{$folder};
+            
+            if (exists $branch->{'_category'}) {
+                $results = {
+                    'category' => $branch->{'_category'},
+                    'exportRestricted' => $branch->{'_exportRestricted'}};
+            }
+        }
+        else {
+            last;
+        }
+    }
+
+    return $results;
+}
+
+1;
+
+
+__END__
+
+=pod
+
+=head1 NAME
+
+Symbian::CBR::IPR::MRP - An interface to IPR information contained within MRP files
+
+=head1 SYNOPSIS
+
+ use Symbian::CBR::IPR::MRP;
+
+ # Instantiate a Symbian::CBR::IPR::MRP object
+ my $iprMrp = Symbian::CBR::IPR::MRP->instance();
+
+ # Get the IPR category for a path
+ my $category = $iprMrp->Category('\aPath\somewhere');
+
+ # Get the export restricted flag for a path
+ my $exportRestricted = $iprMrp->ExportRestricted('\aPath\somewhere');
+
+=head1 DESCRIPTION
+
+This package collates IPR information for either an entire environment, or for a
+component, and provides methods to access IPR information for a given path.
+
+=head1 METHODS
+
+=head2 instance(component, typeOfMrp, verbose)
+
+Instantiates a Symbian::CBR::IPR::MRP object.
+
+The typeOfMrp argument is non-optional.  Valid types are MRP and MRPDATA.  See the
+documentation for Symbian::CBR::MRP::Reader for more information.
+
+If a component had been specified then the MRP file for the component will be processed
+and the IPR information obtained.  Any MRP files for dependant components will be located
+and processed too.  If no component name has been specified all MRP files in the environment
+will be processed.
+
+=head2 Category(path)
+
+Returns the IPR category of the path.  If no IPR information exists for the
+specified path then undef will be returned.
+
+=head2 ExportRestricted(path)
+
+Returns true if the specified path is export restricted, and false if it is not.
+If no IPR information exists for the specified path then false will be returned.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Symbian/CBR/MRP.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,496 @@
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# Symbian::CBR::MRP
+#
+
+package Symbian::CBR::MRP;
+
+use strict;
+use Carp;
+use File::Spec;
+use base qw(Symbian::CBR::MRPInterface);
+
+
+sub new {
+    my $pkg = shift;
+    my $mrpName = shift;
+    my $verbose = shift;
+
+    if (!$mrpName || shift) {
+        # caller(0))[3] gives the package and the method called, e.g. Symbian::CBR::MRP::new
+        croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";
+    }
+    
+    my $self = {
+            'mrpName' => $mrpName,
+            'verbose' => $verbose};
+
+    bless $self, $pkg;
+
+    return $self;
+}
+
+sub SetIPR {
+    my $self = shift;
+    my $category = shift;
+    my $path = lc(shift) || 'default';
+    my $exportRestricted = (shift) ? 1 : 0;
+    
+    if (!$category || shift) {
+        croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";        
+    }
+    
+    if ($category !~ /^[a-z]$/i) {
+        #Check that the IPR category specified is indeed a valid category
+        croak "Error: IPR category $category is invalid\n";
+    }
+
+    $path = File::Spec->canonpath($path); # Normalise the path
+    
+    # remove trailing slashes
+    $path =~ s/[\\\/]$//;
+    
+    if (exists $self->{unresolvedIPR}->{$path}) {
+        return 0;
+    }
+    
+    $self->{unresolvedIPR}->{$path} = {
+                    category => uc($category),
+                    exportRestricted => $exportRestricted};
+    
+    return 1;
+}
+
+sub SetComponent {
+    my $self = shift;
+    my $operand = shift;
+
+    if (!$operand || shift) {
+        croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";
+    }
+
+    if (exists $self->{componentName}) {
+        return 0;
+    }
+    
+    $self->{componentName} = $operand;
+    
+    return 1;
+}
+
+sub SetNotesSource {
+    my $self = shift;
+    my $operand = shift;
+
+    if (!$operand || shift) {
+        croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";
+    }
+    
+    if (exists $self->{notesSource}) {
+        return 0;
+    }
+
+    $operand = File::Spec->canonpath($operand); # Normalise the path
+    
+    if (!-f $operand) {
+       croak "Error: Notes source \"$operand\" does not exist\n";
+    }
+
+    $self->{notesSource} = $operand;
+    
+    return 1;
+}
+
+sub SetSource {
+    my $self = shift;
+    my $operand = shift;
+
+    if (!$operand || shift) {
+        croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";
+    }
+
+    $operand = File::Spec->canonpath($operand); # Normalise the path
+    
+    #remove trailing slashes
+    $operand =~ s/[\\\/]$//;
+    
+    if (!-e $operand) {
+       croak "Error: Source \"$operand\" does not exist\n";
+    }
+    
+    if (exists $self->{sourceItems}->{$operand}) {
+        return 0;
+    }
+    
+    $self->{sourceItems}->{$operand} = 1;
+    
+    return 1;
+}
+
+sub SetBinary {
+    my $self = shift;
+    my @operand = @{shift()} if (ref $_[0] eq 'ARRAY');
+    my $test = (shift) ? 1 : 0;
+    my $remove = (shift) ? 1 : 0;
+
+    if (!scalar(@operand) || shift) {
+        croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";
+    }
+
+    my $path = shift @operand;
+
+    $path = File::Spec->canonpath($path); # Normalise the path
+
+    push @{$self->{binary}}, {
+                        path    => $path,
+                        test    => $test,
+                        remove  => $remove,
+                        words   => [@operand]};
+}
+
+sub SetExports {
+    my $self = shift;
+    my $operand = shift;
+    my $test = (shift) ? 1 : 0;
+    my $dependantComponent = shift;
+
+    if (!$operand || shift) {
+        croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";
+    }
+
+    if (exists $self->{exports}->{$operand}) {
+        croak "Error: 'exports' entry for \"$operand\" defined more than once in $self->{mrpName}\n";
+    }
+
+    $operand = File::Spec->canonpath($operand); # Normalise the path
+
+    if (!-e $operand) {
+        croak "Error: Exports path \"$operand\" does not exist\n";
+    }
+
+    $self->{exports}->{$operand} = $test;
+    
+    if ($dependantComponent) {
+        push (@{$self->{exports}->{_dependantComponent}}, $dependantComponent);
+    }
+}
+
+sub SetExportFile {
+    my $self = shift;
+    my $source = shift;
+    my $destination = shift;
+    my $remove = (shift) ? 1 : 0;
+    my $dependantComponent = shift;
+
+    if (!$source || shift) {
+        croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";
+    }
+    
+    unless ($source and $destination) {
+        croak "Error: Incorrect syntax to 'export_file' keyword in \"$self->{mrpName}\"\n";
+    }
+
+    $source = File::Spec->canonpath($source); # Normalise the path
+    $destination = File::Spec->canonpath($destination);
+    
+    if (!$remove) {
+        if (!-e $source) {
+            croak "Error: Export file \"$source\" does not exist\n";
+        }
+    }
+
+    push @{$self->{exportFiles}}, {
+                    source      => $source,                  
+                    destination => $destination,
+                    remove      => $remove};
+
+    if ($dependantComponent) {
+        push (@{$self->{exports}->{_dependantComponent}}, $dependantComponent);
+    }
+}
+
+sub GetIPRInformation {
+    my $self = shift;
+    
+    if (exists $self->{IPR}) {
+        return $self->{IPR};
+    }
+    else {
+        return {};
+    }
+}
+
+sub Component {
+    my $self = shift;
+    
+    if ($self->{componentName}) {
+        return $self->{componentName};
+    }
+    
+    return undef;
+}
+
+sub GetExportComponentDependencies {
+    my $self = shift;
+
+    if (exists $self->{exports}->{_dependantComponent}) {
+        return @{$self->{exports}->{_dependantComponent}}
+    }
+
+    return undef;
+}
+
+sub GetSource {
+    my $self = shift;
+    
+    if (exists $self->{sourceItems}) {
+        return [keys %{$self->{sourceItems}}];
+    }
+    
+    return [];
+}
+
+sub ValidateParsing {
+    my $self = shift;
+
+    # This flag stops the reader from trying to populate the object more than once
+    $self->{populated} = 1;
+
+    if (exists $self->{sourceItems} && !exists $self->{unresolvedIPR}) {
+        # If no IPR information exists in the MRP file then we set the IPR category
+        # for each source item to undef.  This is so that incorrect IPR information is
+        # not returned.
+        
+        foreach my $sourceItem (keys %{$self->{sourceItems}}) {
+            $self->{IPR}->{$sourceItem} = {
+                                           category => undef,
+                                           exportRestricted => undef,
+                                           };
+        }
+    }
+    else {
+        # Reconcile the IPR information here so that any warnings are produced sooner...
+        # IPR information can only be included if it matches a source line in the MRP file
+        # All other IPR lines will be ignored.  The reconciliation is done here as IPR
+        # lines may appear before source lines in the MRP file.
+
+        if (!defined $self->{sourceItems} && exists $self->{unresolvedIPR}->{default}) {
+            carp "Warning: The default IPR entry does not apply to any source statements in \"$self->{mrpName}\"\n";
+        }
+
+        # Match IPR against source statement by using the length...
+        foreach my $sourceItem (keys %{$self->{sourceItems}}) {    
+            # The sort below sorts by longest line first, not shortest line first. Note $b <=> $a, not $a <=> $b...
+            # This allows us to match the most relevant line first, based on longest length/best match 
+            foreach my $iprItem (sort {length($b) <=> length($a)} keys %{$self->{unresolvedIPR}}) {
+                next if ($iprItem eq 'default');
+                # If the source item contains the IPR path then it is a match 
+                if ($sourceItem =~ m/^\Q$iprItem\E([\\\/]|$)/i) {
+                    $self->{IPR}->{$sourceItem} = $self->{unresolvedIPR}->{$iprItem};
+                    
+                    last;   
+                }
+            }
+                 
+            # If it didn't match an IPR then we assign the default
+            if (!exists $self->{IPR}->{$sourceItem}) {
+                $self->{IPR}->{$sourceItem} = $self->{unresolvedIPR}->{default};
+            }
+        }
+    
+        delete $self->{unresolvedIPR}->{default};
+    
+        # Find IPR entries which do live under a source folder...
+        foreach my $iprItem (keys %{$self->{unresolvedIPR}}) {
+            next if (exists $self->{IPR}->{$iprItem});
+            
+            foreach my $sourceItem (keys %{$self->{sourceItems}}) {
+                if ($iprItem =~ /^\Q$sourceItem\E/i) {
+                    $self->{IPR}->{$iprItem} = $self->{unresolvedIPR}->{$iprItem};
+                    last;
+                }
+            }
+         
+            if (!grep /\Q$iprItem\E/i, (keys %{$self->{IPR}})) {
+                # Otherwise this IPR statement does not apply to this MRP file...
+                carp "Warning: The IPR entry for \"$iprItem\" does not apply to any source statements in \"$self->{mrpName}\"\n";
+            }     
+        }
+        
+        delete $self->{unresolvedIPR};
+    }
+}
+
+sub Populated {
+  my $self = shift;
+  
+  return $self->{populated};
+}
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+Symbian::CBR::MRP - An object representation of an MRP file
+
+=head1 SYNOPSIS
+
+ use Symbian::CBR::MRP;
+
+ # Construct a Symbian::CBR::MRP object 
+ my $mrpObject = Symbian::CBR::MRP->new(mrpName);
+
+ # Use the setters to populate the object
+ 
+ $mrpObject->SetComponent('componentName');
+ 
+ $mrpObject->SetSource('\src\aSrcFolder');
+ 
+ $mrpObject->SetNotesSource('\componentDefs\notes.src');
+ 
+ # Validate the parsing\perform any post parsing operations
+ $mrpObject->ValidateParsing();
+ 
+ ...
+ 
+ # Getting information from the Symbian::CBR::MRP object
+ my $iprInformation = $mrpObject->GetIPRInformation();
+ 
+ # Get the component name
+ my $componentName = $mrpObject->GetComponent();
+
+=head1 DESCRIPTION
+
+This object represents an MRP file.  It is intended to be created and populated
+by an MRP file parser, for example Symbian::CBR::MRP::Reader.  No parsing
+functionality is included with this object.
+
+Once the object has been populated the parser should call the ValidateParsing()
+method, which will perform any post-population actions, such as resolving IPR
+information etc.
+
+=head1 METHODS
+
+=head2 new(mrpName, verbose)
+
+Instantiates a Symbian::CBR::MRP object.  The mrpName argument is only used for
+printing error and warning messages.
+
+=head2 GetIPRInformation()
+
+Returns a hash containing the IPR information for the component.
+
+The format is the returned data is a hash:
+
+    Path = (
+                    category = char,
+                    exportRestricted = boolean
+            )
+
+=head2 SetBinary(@arguments, test, remove)
+
+Sets the binary information.  @arguments is an array containing the arguments
+from the MRP line, in the order in which they appeared.  
+
+=head2 SetComponent(componentName)
+
+Sets the name of the component to componentName.
+
+=head2 SetExportFile(source, destination, remove, dependantComponent)
+
+Sets the export file information.  The source and destination arguments are both
+required, if they are not specified a fatal error will be produced.  The source
+file will also be checked to see if it exists and that it has not already been
+specified as an export file.
+
+If the export file is not included as source for the current MRP component then
+the dependant component will also need to be specified.
+
+=head2 SetExports(path, test, dependantComponent)
+
+Sets the location of the bld.inf from where the export information can be derived.
+The location will be checked to see if it exists and that it has not already been
+specified.
+
+If the exports are not included as source for the current MRP component then
+the dependant component will also need to be specified.
+
+=head2 SetIPR(category, path, exportRestricted)
+
+Sets the IPR information for the component.  If no path is specified then the
+IPR category is set to be the default category for the component.  The
+exportRestricted argument is boolean.
+
+If the same path is specified more than once a fatal error will be produced.
+
+=head2 SetNotesSource(noteSourcePath)
+
+Sets the notes source to the notesSourcePath specified.  If the notes source has
+already been set, or the path does not exist, a fatal error will be produced.
+
+=head2 SetSource(sourcePath)
+
+Adds the sourcePath to the list of included source entries for the component.
+If the source path does not exist or the path has already been added then a
+fatal error will be produced.
+
+=head2 ValidateParsing()
+
+This method needs to be called once the parser has finished setting all the
+information.  Currently this method reconciles IPR statements against the
+components source, and also checks that required dependant components have
+been set.
+
+If this method is not run then IPR information will be unavailable.
+
+=head2 GetExportComponentDependencies()
+
+Returns an array containing the any components which the current component has
+dependencies on.
+
+=head2 Component()
+
+Returns the component name.
+
+=head2 Populated()
+
+The MRP file is parsed by a reader, which then populates this MRP object.  The
+Populated method returns a boolean value indicating if the object has been
+populated.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Symbian/CBR/MRP/DISTRIBUTION.policy	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2 @@
+Category T
+OSD:	Reference/Test	Tools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Symbian/CBR/MRP/Reader.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,288 @@
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# Symbian::CBR::MRP::Reader
+#
+
+package Symbian::CBR::MRP::Reader;
+
+use strict;
+use Carp;
+use Symbian::CBR::MRP;
+
+use base qw(Class::Singleton);
+
+sub _new_instance {
+    my $pkg = shift;
+    my $self = {};
+    
+    # caller(0))[3] gives the package and the method called, e.g. Symbian::CBR::MRP::Reader::_new_instance
+    croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n" if (scalar(@_));
+    
+    bless $self, $pkg;
+}
+
+sub ReadFile {
+    my $self = shift;    
+    my $file = shift;
+    my $type = shift;
+    
+    if (!$file || !$type || shift) {
+        croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";
+    }    
+    
+    my $mrpObject;
+    
+    # First we create the type of object required...
+    if ($type eq 'MRP') {
+        $mrpObject = Symbian::CBR::MRP->new($file);
+    }
+    elsif ($type eq 'MRPDATA') {
+        if (!eval "require MrpData") {
+            croak "Error: MrpData module is not available\n";
+        }
+        
+        # PDDEF128617 fix
+        # The envDb uses the path to the mrp file as a key with SRCROOT removed
+        # An earlier MrpData->New was provided data from the envDb to create an MrpData Object
+        # (so the key was mrp location with SRCROOT removed)
+        # The below MrpData->New is given the full filename (because this function has to read the file)
+        # This is wrong, the key for MrpData->New is not the full path
+        # So the below line removes the SRCROOT from the key before providing it to MrpData->New
+        my $localMrpName = $file;
+        if (Utils::WithinSourceRoot($localMrpName)){
+            $localMrpName = Utils::RemoveSourceRoot($localMrpName);        
+        }
+        #The 1 is to tell MrpData not to read the file
+        $mrpObject = MrpData->New($localMrpName, undef, undef, undef, undef, undef ,1);
+    }
+    else {
+        croak "Error: Invalid MRP object type $type\n";
+    }
+
+    if ($mrpObject->Populated()) {
+        # MrpData is a multiton, it's possible a populated object has been returned
+        return $mrpObject;
+    }
+    
+    if (!$mrpObject) {
+        croak "Unable to create an $type object for '$file'\n";   
+    }
+    
+    if (!-f $file) {
+        croak "Error: \"$file\" does not exist\n";
+    }
+
+    if ($self->{verbose}) {
+        print "Reading $file...\n";
+    }
+
+    # Then parse the file and populate the object
+    open MRP, $file or die "Unable to open \"$file\" for reading: $!\n";
+    
+    while (my $line = <MRP>) {
+        chomp $line;
+        
+        $line =~ s/(?<!\\)#.*$//;  # remove comments
+        $line =~ s/^\s+//;
+        next if (!$line); # blank lines
+
+        my @parts;
+        
+        my $string = $line;
+        while ($string) {
+            if ($string =~ s/^\"(.*?)\"//    # Match and remove next quoted string
+            or $string =~ s/^(.*?)\s+//  # or, match and remove next (but not last) unquoted string
+            or $string =~ s/^(.*)\s*$//) {  # or, match and remove last unquoted string.
+                push (@parts, $1);
+                $string =~ s/^\s+//; # Remove delimiter if present.
+            }
+        }
+        
+        my $keyword = shift @parts;
+
+        my $remove = ($keyword =~ s/^-//);
+        
+        if (!scalar(@parts) or ($remove && $keyword !~ /binary|testbinary|export_file/)) {
+            croak "Error: Invalid line in \"$file\" \(Line $.\): \"$line\"\n";
+        }
+
+        if ($keyword eq 'component') {
+            if (scalar @parts > 1) {
+                croak "Error: Invalid number of arguments to $keyword keyword in \"$file\"\n";   
+            }
+            if (!$mrpObject->SetComponent($parts[0])) {
+                croak "Error: 'component' keyword used more than once in \"$file\"\n";
+            }
+        }
+        elsif ($keyword eq 'notes_source') {
+            if (scalar @parts > 1) {
+                croak "Error: Invalid number of arguments to $keyword keyword in \"$file\"\n";   
+            }
+            if (!$mrpObject->SetNotesSource($parts[0])) {
+                croak "Error: 'notes_source' keyword used more than once in \"$file\"\n";
+            }
+        }       
+        elsif ($keyword eq 'source') {
+            my $source = join ' ', @parts;
+            if (!$mrpObject->SetSource($source)) { # some source statements contain spaces in the name
+                croak "Error: 'source' entry for \"$source\" defined more than once in \"$file\"\n";
+            }
+        }
+        elsif ($keyword =~ /^(test)?binary$/) {
+            if (scalar @parts > 4) {
+                croak "Error: Invalid number of arguments to $keyword keyword in \"$file\"\n";
+            }
+            
+            # SetBinary (operand, test, remove)
+            $mrpObject->SetBinary(\@parts, $1, $remove);
+        }
+        elsif ($keyword =~ /^(test)?exports$/) {
+            if (scalar @parts > 2) {
+                croak "Error: Invalid number of arguments to $keyword keyword in \"$file\"\n";
+            }
+
+            # SetExports (operand, test, dependantComponet)
+            $mrpObject->SetExports($parts[0], $1, $parts[1]);
+        }
+        elsif ($keyword eq 'export_file') {
+            if (scalar @parts > 3) {
+                croak "Error: Invalid number of arguments to $keyword keyword in \"$file\"\n";
+            }
+
+            # SetExportFile (source, destination, remove, dependantComponet)
+            $mrpObject->SetExportFile($parts[0], $parts[1], $remove, $parts[2]);
+        }
+        elsif ($keyword eq 'ipr') {
+            if (scalar @parts > 3) {
+                croak "Error: Invalid number of arguments to $keyword keyword in \"$file\"\n";
+            }
+
+            # SetIPR (category, path, exportRestricted)
+            if ($parts[0] eq 'export-restricted') {
+                if (!$mrpObject->SetIPR($parts[1], $parts[2], 1)) {
+                   croak "Error: IPR information for \"$parts[2]\" specified more than once in \"$file\"\n";
+                }
+            }
+            else {
+                if (!$mrpObject->SetIPR($parts[0], $parts[1], 0)) {
+                   croak "Error: IPR information for \"$parts[1]\" specified more than once in \"$file\"\n";
+                }
+            }
+        }
+        else {
+            croak "Error: Invalid line in \"$file\" \(Line $.\): \"$line\"\n";
+        }
+    }
+    close MRP;
+    
+    $mrpObject->ValidateParsing();
+
+    return $mrpObject;
+}
+
+sub SetVerbose {
+    my $self = shift;
+    
+    $self->{verbose} = 1;
+}
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+Symbian::CBR::MRP::Reader - Parses MRP files and returns a populated MRP object
+
+=head1 SYNOPSIS
+
+ use Symbian::CBR::MRP::Reader;
+
+ # Instantiate an instance of the Symbian::CBR::MRP::Reader object
+ my $mrpReader = Symbian::CBR::MRP::Reader->instance();
+
+ my $mrpFile = '\someFolder\anMrpFile.mrp';
+
+ # Enable verbose output
+ $mrpReader->SetVerbose();
+
+ # Call ReadFile on the mrp reader, specifying the MRP file to parse and the type
+ # of MRP object you want to be populated and returned
+ my $mrpObject = $mrpReader->ReadFile($mrpFile, 'MRP');
+
+ ...
+
+ # Call methods on the returned MRP object
+ $mrpObject->GetIPRInformation();
+
+=head1 DESCRIPTION
+
+This module is used to parse MRP files and populate MRP objects.  The user can
+specify the type of MRP object to be populated and returned.  This module includes
+basic MRP syntax checking but stronger syntax checking should be implemented
+in the MRP object to be populated.
+
+=head1 METHODS
+
+=head2 instance()
+
+Instantiates and returns Symbian::CBR::MRP::Reader object.  This object is a
+singleton.
+
+=head2 ReadFile (mrpfile, type)
+
+Reads the specified MRP file, instantiates and populates an MRP object of the
+type specified and then returns the populated MRP object to the caller.
+
+Valid MRP types are MRP and MRPDATA.
+
+MRP: This is a Symbian::CBR::MRP object.  It is a lightweight MRP object and
+contains only basic MRP functionality.  This option should be used when MRP
+objects are required for tools which are not part of the CBR Tools.  See the
+Symbian::CBR::MRP documentation for more details.
+
+MRPDATA:  This is an MrpData object, as used by the CBR Tools.  This option
+should only be used for the CBR Tools. See the MrpData documentation
+for more details.
+
+=head2 SetVerbose ()
+
+Used to set enable verbose output.  Once set it is not possible to unset the
+verbose output.  This is because this package is a singleton, and disabling the
+verbose output could disrupt other code using this same instance.  This means
+that it is not possible to disable the verbosity once it has been enabled.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Symbian/CBR/MRPInterface.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,78 @@
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# Symbian::CBR::MRPInterface
+#
+
+package Symbian::CBR::MRPInterface;
+
+use strict;
+use Carp;
+
+
+sub new {
+    croak 'Error: Call to interface method ' .  __PACKAGE__ . "::new\n";
+}
+
+sub _new_instance {
+    croak 'Error: Call to interface method ' .  __PACKAGE__ . "::_new_instance\n";
+}
+
+sub SetIPR {
+    croak 'Error: Call to interface method ' .  __PACKAGE__ . "::SetIPR\n";
+}
+
+sub SetComponent {
+    croak 'Error: Call to interface method ' .  __PACKAGE__ . "::SetComponent\n";
+}
+
+sub SetNotesSource {
+    croak 'Error: Call to interface method ' .  __PACKAGE__ . "::SetNotesSource\n";
+}
+
+sub SetSource {
+    croak 'Error: Call to interface method ' .  __PACKAGE__ . "::SetSource\n";
+}
+
+sub SetBinary {
+    croak 'Error: Call to interface method ' .  __PACKAGE__ . "::SetBinary\n";
+}
+
+sub SetExports {
+    croak 'Error: Call to interface method ' .  __PACKAGE__ . "::SetExports\n";
+}
+
+sub SetExportFile {    
+    croak 'Error: Call to interface method ' .  __PACKAGE__ . "::SetExportFile\n";
+}
+
+sub GetIPRInformation {
+    croak 'Error: Call to interface method ' .  __PACKAGE__ . "::GetIPRInformation\n";
+}
+
+sub GetExportComponentDependencies {
+    croak 'Error: Call to interface method ' .  __PACKAGE__ . "::GetExportComponentDependencies\n";    
+}
+
+sub ValidateParsing {
+    croak 'Error: Call to interface method ' .  __PACKAGE__ . "::Validate\n";
+}
+
+sub Populated {
+    croak 'Error: Call to interface method ' .  __PACKAGE__ . "::Populated\n";
+}
+
+1;
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Symbian/CBR/release/Manifest.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,258 @@
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# Symbian::CBR::Release::Manifest.pm
+#
+
+package Symbian::CBR::Release::Manifest;
+
+use File::Basename;
+use File::Spec;
+use File::Path;
+use RelData;
+use XML::Simple;
+use Carp;
+use POSIX qw(strftime);
+
+
+#
+#Constants
+#
+
+use constant MD5                => 'md5';
+use constant SIZE               => 'size';
+use constant MODIFIED_TIME      => 'modified-timestamp';
+use constant VERSION            =>   '1.0.0';
+
+
+#
+#Public.
+#
+
+sub new {
+  my $pkg = shift;
+  my $iniData = shift;
+  my $verbose = shift;
+  my $self;
+  $self->{iniData} = $iniData;
+  $self->{verbose} = $verbose;
+  bless $self, $pkg;
+  return $self;
+}
+
+sub GenerateManifest {
+  my $self = shift;
+  my $comp = shift;
+  my $version = shift;
+  my $archive = shift;
+
+  my $relData;
+  if (defined $archive) {
+    $relData  = RelData->OpenExternal($archive, $comp, $version);
+  }
+  else {
+    $relData = RelData->Open($self->{iniData}, $comp, $version, $self->{verbose});
+  }
+
+  $self->{'baselineName'} = $comp;
+  $self->{'baselineVersion'} = $version;
+
+  print "Generating Release manifest file.\n";
+  
+  #Get envirnoment from baseline's reldata.
+  my $environment = $relData->Environment();
+
+  foreach my $thisComp (sort keys %{$environment}){
+    #Identify the release directory for all components.
+    my $thisVer = $environment->{$thisComp};
+    print "Reading $thisComp $thisVer.\n " if($self->{verbose});
+    
+    my $relDir;
+    if (defined $archive) {
+      $relDir = File::Spec->catdir($archive, $thisComp, $thisVer);
+    }
+    else {
+      $relDir = $self->{iniData}->PathData->LocalArchivePathForExistingComponent($thisComp, $thisVer);
+    }
+    croak "$thisComp $thisVer doesn't exist.\n" unless(-e $relDir);
+    
+    opendir(RELDIR, $relDir) or croak "Error: can't opendir $relDir\n";
+    my @allFiles = grep {$_ ne '.' and $_ ne '..'} map {"$relDir\\$_"} readdir(RELDIR);
+    close RELDIR;
+    $self->{components}{$thisComp}{version} = $thisVer;
+    #List all files from component release.
+    foreach my $thisFile (@allFiles) {
+      my $file = basename($thisFile);
+      next if($file eq "." or $file eq "..");
+
+      #Record size, md5 checksum and modified timestamp for all files.
+      open(FILEHANDLE,"$thisFile") or croak "Couldn't open file \"$thisFile\".\n";
+      $md5 = Digest::MD5->new;
+      $md5->addfile(FILEHANDLE);
+      close FILEHANDLE;
+
+      my $modifiedTimeStamp = Utils::FileModifiedTime($thisFile);
+
+      $self->{components}{$thisComp}{files}{$file}{+SIZE} = -s $thisFile;
+      $self->{components}{$thisComp}{files}{$file}{+MD5} = $md5->hexdigest;
+      $self->{components}{$thisComp}{files}{$file}{+MODIFIED_TIME} = $modifiedTimeStamp;
+    }
+  }
+
+}
+
+sub Save {
+  my $self = shift;
+  my $manifestFilePath = shift;
+
+  unless (-d $manifestFilePath) {
+    eval {mkpath($manifestFilePath)};
+    if ($@) {
+      my $error = $@;
+      $error =~ s/ at .*?(?i:manifest\.pm) line \d+$//;
+      die "Error: Unable to create path $manifestFilePath: $error\n";
+    }
+  }
+  print "Writing release manifest to $manifestFilePath path.\n ";
+  my $release = {
+        version =>   VERSION,
+        meta => { 'baseline-name' => { 'value' => $self->{'baselineName'} },
+                  'baseline-version' => { 'value' => $self->{'baselineVersion'} },
+                  'created-time' => { 'value' => strftime( '%Y-%m-%dT%H:%M:%S', localtime() ) } },
+        manifest => { component => [] }
+  };
+  my $manifest = $self->{'baselineName'} ."_".$self->{'baselineVersion'}."_manifest.xml";
+  my $manifestFile = File::Spec->catfile( $manifestFilePath, $manifest );
+  my $components = {};
+  foreach  my $thisComp(sort keys %{$self->{components}}) {
+    $thisVer = $self->{components}{$thisComp}{version};
+    my $index = "$thisComp,$thisVer";
+    foreach  my  $thisFile (sort keys %{$self->{components}{$thisComp}{files}}) {
+      my $file = { 
+           'name' => $thisFile,
+           'size' => $self->{components}{$thisComp}{files}{$thisFile}{+SIZE},
+           'md5'  => $self->{components}{$thisComp}{files}{$thisFile}{+MD5},
+           'modified-timestamp' => $self->{components}{$thisComp}{files}{$thisFile}{+MODIFIED_TIME}
+	  };
+      if (!defined $components->{$index}) {
+        $components->{$index} = { file => [], name => $thisComp, version => $thisVer }; # make ref
+        push @{$release->{manifest}{component}}, $components->{$index};
+      }
+      push @{$components->{$index}{file}}, $file;
+    }
+  }
+
+  eval {XMLout(
+        $release,
+        xmldecl     => '<?xml version="1.0" ?>',
+        rootname    => 'release',
+        outputfile  => $manifestFile )};
+
+  croak "Error: Can't write manifest file: $@\n" if $@;
+}
+
+sub Load {
+  my $self = shift;
+  my $manifestFile = shift;
+  
+  if (!-e $manifestFile) {
+    die "Error: Can't read manifest file '$manifestFile': File does not exist\n";
+  }
+  
+  my %metaFieldMap = qw(baseline-name baselineName baseline-version baselineVersion created-time createdTime);
+  my $release   = eval{XMLin(
+                    $manifestFile,
+                    forcearray => [ qw(component file) ],
+                    keyattr => [])};
+
+
+  die "Error: Can't read manifest file '$manifestFile': $@\n" if $@;
+  print "Reading $manifestFile file.\n " if($self->{verbose});
+
+  for my $meta (@{$release->{meta}}) {
+    $self->{$metaFieldMap{$meta->{name}}} = $meta->{value};
+  }
+  foreach my $component ( @{ $release->{manifest}{component} } ) {
+    my $comp = $component->{'name'};
+    my $version = $component->{version};
+    $self->{components}{$comp}{version} = $version;
+    foreach my $file ( @{ $component->{file} } ) {
+      my $fileName = $file->{'name'};
+      $self->{components}{$comp}{files}{$fileName}{+SIZE} = $file->{+SIZE};
+      $self->{components}{$comp}{files}{$fileName}{+MD5} = $file->{+MD5};
+      $self->{components}{$comp}{files}{$fileName}{+MODIFIED_TIME} = $file->{+MODIFIED_TIME};
+    }
+  }
+}
+
+sub FileExists {
+  my $self = shift;
+  my $comp = shift;
+  my $file = shift;
+  croak "Error: Component and file name must be specified.\n" unless(defined $comp and defined $file);
+  return exists $self->{components}{$comp}{files}{$file};
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+Symbian::CBR::Release::Manifest.pm - Provides an interface to data associated with a particular release.
+
+=head2 new
+
+Creates a new Symbian::CBR::Release::Manifest object. Expects to be passed a reference to an iniData object and verbose level.
+
+=head2 GenerateManifest
+
+Expects to be passed a component, version and optionally archive path. Generates a release manifest hash using component version and archive if provided. Otherwise uses archive specified in reltools.ini.
+
+=head2 Save
+
+Expects to be passed a destination path. Create destination path if destination path is not existing, and save the hash structure to manifest.xml file.
+
+=head2 Load
+
+Expects to be passed a manifest file path. Reads manifest file and converts into a hash structure.
+
+=head2 FileExists
+
+Expects to be passed a component name and file name. If file is present in the component returns 1, otherwise 0.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Symbian/DistributionPolicy.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,446 @@
+# Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+package Symbian::DistributionPolicy;
+use strict;
+
+use POSIX qw(mktime);
+
+# create OSD bit vector constants for $obj->{osd}
+use constant SYMBIAN_DPOL_COMMON      => 0x0001;
+use constant SYMBIAN_DPOL_OPTIONAL    => 0x0002;
+use constant SYMBIAN_DPOL_SYMBIAN     => 0x0004;
+use constant SYMBIAN_DPOL_REPLACEABLE => 0x0008;
+use constant SYMBIAN_DPOL_TEST        => 0x0010;
+
+sub new {
+    my $class = shift;
+    my $self = {
+        authorized        => {},
+        category          => undef,
+        description       => '',
+        expires           => undef,
+        export_restricted => undef,
+        osd               => 0,
+    };
+    bless $self, $class;
+    return $self;
+}
+
+# public.
+
+sub Authorized {
+    my $self = shift;
+    my $licensee = shift;
+    my $time = @_ ? shift : time; # use current time if not specified
+    # absent = fail
+    return if !exists $self->{authorized}{$licensee};
+    # present without expiry = pass
+    return 1 if !defined $self->{authorized}{$licensee};
+    # check expiry
+    return $self->{authorized}{$licensee} > $time;
+}
+
+sub SetAuthorizedUntil {
+    my $self = shift;
+    my $licensee = shift;
+    my $until = shift;
+    return if !defined $licensee;
+    $self->{authorized}{$licensee} = $self->parsedate($until);
+    # success depends on whether a date was passed and parsed successfully
+    return defined $until ? defined $self->{authorized}{$licensee} : 1;
+}
+
+sub Category {
+    return $_[0]->{category};
+}
+
+sub SetCategory {
+    my $self = shift;
+    my $cat = uc(shift); # uppercase
+    return if !defined $cat;
+    if ($cat !~ /^[A-Z]$/) {
+        warn "Invalid IPR category: '$cat'\n";
+        return;
+    }
+    $self->{category} = $cat;
+    return 1;
+}
+
+sub Common {
+    return $_[0]->{osd} & SYMBIAN_DPOL_COMMON;
+}
+
+sub SetCommon {
+    my $self = shift;
+    my $bool = shift;
+    return $self->SetOptional(1) if !$bool;
+    $self->{osd} |= SYMBIAN_DPOL_COMMON;
+    $self->{osd} &= ~SYMBIAN_DPOL_OPTIONAL; # toggles optional off
+    return 1;
+}
+
+sub Description {
+    return $_[0]->{description};
+}
+
+sub SetDescription {
+    my $self = shift;
+    my $desc = shift;
+    $self->{description} = defined $desc ? $desc : '';
+    return 1;
+}
+
+sub Expires {
+    return $_[0]->{expires};
+}
+
+sub SetExpires {
+    my $self = shift;
+    my $date = shift;
+    return if !defined $date;
+    $self->{expires} = $self->parsedate($date);
+    # if parsedate failed it returned undef so that is our status
+    return defined $self->{expires};
+}
+
+sub Expired {
+    my $self = shift;
+    my $time = @_ ? shift : time;
+    # not defined = no expiry
+    return if !defined $self->{expires};
+    # check expiry
+    return $self->{expires} < $time;
+}
+
+sub ExportRestricted {
+    my $self = shift;
+    
+    # If the category is defined then we know a distribution policy file has been parsed.
+    if ($self->{category}) {
+        # double ! reduces the value to a boolean
+        return !!$self->{export_restricted};
+    }
+    return undef;
+}
+
+sub SetExportRestricted {
+    my $self = shift;
+    my $flag = shift;
+    $self->{export_restricted} = $flag;
+    return 1;
+}
+
+sub Optional {
+    return $_[0]->{osd} & SYMBIAN_DPOL_OPTIONAL;
+}
+
+sub SetOptional {
+    my $self = shift;
+    my $bool = shift;
+    return $self->SetCommon(1) if !$bool;
+    $self->{osd} |= SYMBIAN_DPOL_OPTIONAL;
+    $self->{osd} &= ~SYMBIAN_DPOL_COMMON; # toggles common off
+    return 1;
+}
+
+sub Replaceable {
+    return $_[0]->{osd} & SYMBIAN_DPOL_REPLACEABLE;
+}
+
+sub SetReplaceable {
+    my $self = shift;
+    my $bool = shift;
+    return $self->SetSymbian(1) if !$bool;
+    $self->{osd} |= SYMBIAN_DPOL_REPLACEABLE;
+    $self->{osd} &= ~SYMBIAN_DPOL_SYMBIAN; # toggles symbian off
+    return 1;
+}
+
+sub Symbian {
+    return $_[0]->{osd} & SYMBIAN_DPOL_SYMBIAN;
+}
+
+sub SetSymbian {
+    my $self = shift;
+    my $bool = shift;
+    return $self->SetReplaceable(1) if !$bool;
+    $self->{osd} |= SYMBIAN_DPOL_SYMBIAN;
+    $self->{osd} &= ~SYMBIAN_DPOL_REPLACEABLE; # toggles replaceable off
+    return 1;
+}
+
+sub Test {
+    return $_[0]->{osd} & SYMBIAN_DPOL_TEST;
+}
+
+sub SetTest {
+    my $self = shift;
+    my $bool = shift;
+    if ($bool) {
+        $self->{osd} |= SYMBIAN_DPOL_TEST; # on
+    } else {
+        $self->{osd} &= ~SYMBIAN_DPOL_TEST; # off
+    }
+    return 1;
+}
+
+# private.
+
+sub parsedate {
+    my $self = shift;
+    my $date = shift; # dd/mm/yyyy
+    return unless defined $date;
+    if ($date !~ m!^(\d\d)/(\d\d)/(\d{4})$!) {
+        warn "Invalid date: '$date'\n";
+        return;
+    }
+    my($d, $m, $y) = ($1, $2, $3);
+    my $time = mktime(59, 59, 23, $d, --$m, $y-1900);
+    if (!defined $time) {
+        warn "Date out of range: '$date'\n";
+        return;
+    }
+    return $time;
+}
+
+1;
+
+=pod
+
+=head1 NAME
+
+Symbian::DistributionPolicy - OO representation of a DISTRIBUTION.POLICY file.
+
+=head1 SYNOPSIS
+
+ # normally you would not create a policy object directly but
+ # use one returned by the Symbian::DistributionPolicy::Reader...
+
+ use Symbian::DistributionPolicy::Reader;
+
+ my $dpr = Symbian::DistributionPolicy::Reader->new();
+
+ my $policy = $dpr->ReadPolicyFile($path);
+
+ # then you may query the object using the methods below
+
+=head1 DESCRIPTION
+
+This module provides an object to represent the data in a DISTRIBUTION.POLICY
+file. The DISTRIBUTION.POLICY file specifies the policy information for all the
+source code files in the same directory. The directives are:
+
+=head2 Authorized LICENSEE_ID [until DATE]
+
+The C<Authorized> directive overrides any IPR restriction and makes available
+the source to the licensee with a specific I<LICENSEE_ID>. If the C<until>
+keyword is used then I<DATE> should be a string in the format dd/mm/yyyy. The
+exception made by this directive will expire at the end of this date. Only
+one C<Authorized> directive is allowed per I<LICENSEE_ID>.
+
+=head2 Category IPR_CATEGORY
+
+The C<Category> directive specifies the IPR category of the source.
+I<IPR_CATEGORY> may be any single character from the range A to Z. The default for
+unclassified source is X.
+
+=head2 Description TEXT
+
+The C<Description> directive specifies a one-line textual description of the
+directory content. I<TEXT> need not be quoted (in fact, it should not be).
+
+=head2 Expires DATE
+
+The C<Expires> directive specifies the date after which the directive(s) in the
+DISTRIBUTION.POLICY file become invalid. I<DATE> must be in dd/mm/yyyy format.
+
+=head2 Export STATUS
+
+The C<Export> keyword specifies whether the source is export restricted or not.
+The default is that it is not and this is equivalent to setting I<STATUS> to
+Unrestricted. Changing I<STATUS> to Restricted will enable this feature.
+
+=head2 OSD: ((COMMON|OPTIONAL) (SYMBIAN|REPLACEABLE)|REFERENCE/TEST) [NAME]
+
+The OSD line describes the nature of the source in five metrics: (COMMON vs.
+OPTIONAL and SYMBIAN vs. REPLACEABLE) or REFERENCE/TEST. The descriptions of
+these are available in Schedule 2 of the CKL.
+
+=head1 METHODS
+
+In addition to the constructor, getters and setters are provided for all policy
+directives:
+
+=begin text
+
+    +--------------+-------------------+----------------------+
+    | Directive    | Getter            | Setter               |
+    +--------------+-------------------+----------------------+
+    | Authorized   | Authorized        | SetAuthorizedUntil   |
+    | Category     | Category          | SetCategory          |
+    | Description  | Description       | SetDescription       |
+    | Expires      | Expires           | SetExpires           |
+    | Export       | ExportRestricted  | SetExportRestricted  |
+    | OSD          | See table below for individual methods.  |
+    +--------------+-------------------+----------------------+
+
+=end
+
+Individual OSD metrics getters and setters are detailed in the following table:
+
+=begin text
+
+    +-----------------+--------------+-----------------+
+    | Metric          | Getter       | Setter          |
+    +-----------------+--------------+-----------------+
+    | COMMON          | Common       | SetCommon       |
+    | OPTIONAL        | Optional     | SetOptional     |
+    | REPLACEABLE     | Replaceable  | SetReplaceable  |
+    | SYMBIAN         | Symbian      | SetSymbian      |
+    | REFERENCE/TEST  | Test         | SetTest         |
+    +-----------------+--------------+-----------------+
+
+=end
+
+=head2 new()
+
+Creates the policy object with default settings (cat=X, desc='', expires=never,
+export=unrestricted).
+
+=head2 Authorized($licensee_id[, $time])
+
+Returns the authorized status as a boolean (1=authorized, undef=not) for a
+given $licensee_id. If a $time is not specified the current time will be used.
+This is required if the C<Authorized> directive makes use of the I<until>
+keyword and the expiry time needs to be checked.
+
+=head2 SetAuthorizedUntil($licensee_id[, $date])
+
+Adds an authorized licensee to the policy. If an expiry date is specified it
+must be in dd/mm/yyyy format.
+
+=head2 Category()
+
+Returns the IPR category as a single-character string. If no IPR category exists
+in the distrubution file then 'undef' will be returned.
+
+=head2 SetCategory($cat)
+
+Sets the category. Will accept any single character from the range A to Z as a
+string in $cat.
+
+=head2 Common()
+
+Returns non-zero if the OSD metric COMMON is set.
+
+=head2 SetCommon($bool)
+
+Sets the OSD metric COMMON if $bool is true. Unsets it if $bool is false. Also
+sets the mutually exclusive OPTIONAL to the opposite.
+
+=head2 Description()
+
+Returns the description text (never undef - if blank you get an empty string).
+
+=head2 SetDescription($text)
+
+Sets the description text.
+
+=head2 Expires()
+
+Returns the expiry time specified in the file (or undef if not specified). It
+will be in UNIX (epoch) time format for your convenience. See Expired().
+
+=head2 SetExpires($date)
+
+Sets the expiry time to 23:59:59 on the date provided. $date should be a string
+in dd/mm/yyyy format.
+
+=head2 Expired([$time])
+
+Will test whether the policy data has (or will have) expired at the time
+specified. If no time is specified, the current time will be used - i.e. to
+determine whether the policy has already expired.
+
+=head2 ExportRestricted()
+
+Returns the export restricted status as a boolean (1=restricted,
+0=unrestricted, undef=information not available).
+
+=head2 SetExportRestricted($flag)
+
+Sets the export restricted status. $flag is a boolean (undef is allowed for
+false).
+
+=head2 Optional()
+
+Returns non-zero if the OSD metric OPTIONAL is set.
+
+=head2 SetOptional($bool)
+
+Sets the OSD metric OPTIONAL if $bool is true. Unsets it if $bool is false. Also
+sets the mutually exclusive COMMON to the opposite.
+
+=head2 Replaceable()
+
+Returns non-zero if the OSD metric REPLACEABLE is set.
+
+=head2 SetReplaceable($bool)
+
+Sets the OSD metric REPLACEABLE if $bool is true. Unsets it if $bool is false.
+Also sets the mutually exclusive SYMBIAN to the opposite.
+
+=head2 Symbian()
+
+Returns non-zero if the OSD metric SYMBIAN is set.
+
+=head2 SetSymbian($bool)
+
+Sets the OSD metric SYMBIAN if $bool is true. Unsets it if $bool is false. Also
+sets the mutually exclusive REPLACEABLE to the opposite.
+
+=head2 Test()
+
+Returns non-zero if the OSD metric REFERENCE/TEST is set.
+
+=head2 SetTest($bool)
+
+Sets the OSD metric REFERENCE/TEST if $bool is true. Unsets it if $bool is
+false.
+
+=head1 SEE ALSO
+
+L<Symbian::DistributionPolicy::Reader> to see how to get your $policy object(s).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Symbian/DistributionPolicy/Reader.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,176 @@
+# Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+package Symbian::DistributionPolicy::Reader;
+use strict;
+
+use File::Basename;
+use Symbian::DistributionPolicy;
+
+our $cache = {}; # Persistent (private) cache
+
+sub new {
+    return bless {};
+}
+
+# public.
+
+sub ReadPolicyFile {
+    my $self = shift;
+    my $path = shift;
+    my $dir  = -d $path ? $path : dirname($path);
+    # look in cache first, retrieve if not already defined
+    return $cache->{$dir} ||= $self->readfile($dir.'\\DISTRIBUTION.POLICY');
+}
+
+# private.
+
+sub readfile {
+    my $self = shift;
+    my $file = shift;
+    my $hasCategory;
+    my $policy = Symbian::DistributionPolicy->new();
+    # default policy applies when the file does not exist
+    return $policy if !-e $file;
+    # attempt to open the policy file
+    open(POLICY, $file) or die "Couldn't open $file: $!\n";
+    # read policy data
+    while (<POLICY>) {
+        s/(?<!\\)#.*$//;  # ignore comments
+        s/^\s+|\s+$//g;   # trim whitespace
+        next unless /\S/; # skip blank line
+        # parse line
+        if (/^authori[sz]ed\s+(.+?)(?:\s+until\s+(.+?))?$/i) {
+            # licensee specific authorisation
+            if (!$policy->SetAuthorizedUntil($1, $2)) {
+                warn "Invalid Authorized directive in $file\n";
+            }
+        } elsif (/^category\s+([a-z])$/i) {
+            # ipr category
+            if (!$policy->SetCategory($1)) {
+                warn "Invalid Category directive in $file\n";
+            }
+            $hasCategory = 1;
+        } elsif (/^description\s+(.*)$/i) {
+            # free text description
+            $policy->SetDescription($1);
+        } elsif (/^expires\s+(.*)$/i) {
+            # best before date
+            if (!$policy->SetExpires($1)) {
+                warn "Invalid Expires directive in $file\n";
+            }
+        } elsif (/^export\s+(un)?restricted$/i) {
+            # exportable/embargoed?
+            $policy->SetExportRestricted(!defined($1));
+        } elsif (/^osd:\s*(.+?)$/i) {
+            # parse osd info
+            $self->handle_osd($1, $policy);
+        }
+    }
+    close(POLICY);
+    
+    if (!$hasCategory) {
+        warn "Warning: \'$file\' does not contain an IPR category\n";
+    }
+    
+    return $policy;
+}
+
+sub handle_osd {
+    my $self = shift;
+    local $_ = shift;
+    my $policy = shift;
+    # SGL.PPS246.201DistributionPolicyFileContents.doc
+    if (/^(common|optional)\s+(symbian|replaceable)\s+(.+)$/i) {
+        # set common/optional
+        if (lc($1) eq 'common') {
+            $policy->SetCommon(1);
+        } else {
+            $policy->SetOptional(1);
+        }
+        # set symbian/replaceable
+        if (lc($2) eq 'symbian') {
+            $policy->SetSymbian(1);
+        } else {
+            $policy->SetReplaceable(1);
+        }
+    } elsif (/^(?:reference\/test)\s+(.+)$/i) {
+        # set test
+        $policy->SetTest(1);
+    } elsif (/^(?:test\/reference)\s+(.+)$/i) {
+        # synonym for reference/test
+        $policy->SetTest(1);
+    } else {
+        warn "Invalid OSD directive: '$_' (see SGL.PPS246.201)\n";
+    }
+}
+
+1;
+
+=pod
+
+=head1 NAME
+
+Symbian::DistributionPolicy::Reader - Caching DISTRIBUTION.POLICY file reader.
+
+=head1 SYNOPSIS
+
+ use Symbian::DistributionPolicy::Reader;
+
+ my $dpr = Symbian::DistributionPolicy::Reader->new();
+
+ my $policy = $dpr->ReadPolicyFile($path);
+
+=head1 DESCRIPTION
+
+This module parses and caches policy data from DISTRIBUTION.POLICY files.
+
+=head1 METHODS
+
+=head2 new()
+
+Creates the reader object.
+
+=head2 ReadPolicyFile($path)
+
+Read the DISTRIBUTION.POLICY file in $path (which can be e.g. a source file, a
+directory or the DISTRIBUTION.POLICY file itself) and return a
+Symbian::DistributionPolicy object containing the policy data. The policy is
+cached to prevent unnecessary re-reading of .POLICY files in subsequent calls.
+
+=head1 SEE ALSO
+
+L<Symbian::DistributionPolicy> to find out what you can do with your $policy
+object.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Symbian/IPR.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,325 @@
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# Symbian::IPR
+#
+
+package Symbian::IPR;
+
+use strict;
+use Carp;
+use Symbian::CBR::IPR::MRP;
+use Symbian::DistributionPolicy::Reader;
+
+use base qw(Class::Singleton);
+
+
+sub _new_instance {
+    my $pkg = shift;
+    my $useDistPolFirst = shift;
+    my $disallowUnclassifiedSource = shift;
+    my $typeOfMrp = shift;
+    my $verbose = shift;
+    my $captureDistributionPolicyOutput = shift;
+    
+    if (!$typeOfMrp || shift) {
+        # caller(0))[3] gives the package and the method called, e.g. Symbian::IPR::_new_instance
+        croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";
+    }
+
+    my $self = {
+            'useDistPolFirst' => $useDistPolFirst,
+            'disallowUnclassifiedSource' => $disallowUnclassifiedSource,
+            'verbose' => $verbose,
+            'typeOfMrp' => $typeOfMrp,
+            'captureDistributionPolicyOutput' => $captureDistributionPolicyOutput};
+
+    bless $self, $pkg;
+
+    if (!$useDistPolFirst) {
+        # If we are not using distribution policy files as default then create a Symbian::CBR::IPR::MRP object... 
+        $self->CreateMrpObject();
+    }
+    
+    return $self;
+}
+
+sub CreateMrpObject {
+    my $self = shift;
+    
+    if (!exists $self->{'mrpObject'}) {
+        $self->{'mrpObject'} = Symbian::CBR::IPR::MRP->instance($self->{typeOfMrp}, $self->{verbose});
+    }
+    
+    # We may have cached calls to PrepareInformationForComponent...
+    if (defined $self->{prepareInformationForComponentCache}) {
+        foreach my $component (@{$self->{prepareInformationForComponentCache}}) {
+            $self->PrepareInformationForComponent($component);
+        }
+        delete $self->{prepareInformationForComponentCache};
+    }
+    
+    # and also to PrepareInformationForMrpFile...
+    if (defined $self->{prepareInformationForMrpFileCache}) {
+        $self->PrepareInformationForMrpFile->(@{$self->{prepareInformationForMrpFileCache}});
+        delete $self->{prepareInformationForMrpFileCache};
+    }
+}
+
+sub PrepareInformationForComponent {
+    my $self = shift;
+    my $component = shift;
+    
+    # An MRP object may not have been created, for example if using distribution policy files first.
+    # In that case we cache the calls to PrepareInformationForComponent, and will pass them onto the
+    # MRP object if it is ever created.
+    if (defined $self->{'mrpObject'}) {
+        $self->{'mrpObject'}->PrepareInformationForComponent($component);
+    }
+    else {
+        push @{$self->{prepareInformationForComponentCache}}, $component;
+    }
+}
+
+sub PrepareInformationForMrpFile {
+    my $self = shift;
+    my @mrps = shift;   
+
+    # An MRP object may not have been created, for example if using distribution policy files first.
+    # In that case we cache the calls to PrepareInformationForMrpFile, and will pass them onto the
+    # MRP object if it is ever created.
+    if (defined $self->{'mrpObject'}) {
+        $self->{'mrpObject'}->PrepareInformationForMrpFile(@mrps);
+    }
+    else {
+        push @{$self->{prepareInformationForMrpFileCache}}, @mrps;
+    }
+}
+
+
+sub Category {
+    my $self = shift;
+    my $path = shift;
+
+    if (!$path || shift) {
+        croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";
+    }
+    
+    my ($category, $errors) = $self->GetRequestedInformation($path, 'Category');
+
+    if (!$category) {
+        $category = 'X';
+    }
+
+    return ($category, $errors);
+}
+
+sub ExportRestricted {
+    my $self = shift;
+    my $path = shift;
+
+    if (!$path || shift) {
+        croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";
+    }
+
+    my ($exportRestricted, $errors) = $self->GetRequestedInformation($path, 'ExportRestricted');
+
+    return ($exportRestricted, $errors);
+}
+
+sub GetRequestedInformation {
+    my $self = shift;
+    my $path = shift;
+    my $what = shift;
+
+    my @errors; # This collects the errors produced from the distribution policy modules.
+                # The CBR Tools handle these errors in a different way.
+
+    if (!$path || !$what || shift) {
+        croak "Invalid number of arguments passed to " . (caller(0))[3] . "\n";
+    }
+    
+    my $result = undef;
+    my $informationFrom = undef;
+    
+    if (!$self->{useDistPolFirst} && $self->{mrpObject}) {
+        # If to use MRP files first and an Mrp object exists...
+        $result = $self->{mrpObject}->$what($path);
+
+        $informationFrom = 'M' if (defined $result);
+    }
+    
+    if (! defined $result) {
+        # If  distribution policies are to be used first or could not obtain information
+        # from MRP object then use distribution policies
+
+        # Create a distribution policy reader if one does not already exist...
+        if (!$self->{distPolReader}) {
+            # Create a distribution policy reader if one does not already exist...
+            $self->{distPolReader} = Symbian::DistributionPolicy::Reader->new();
+        }
+        
+        if ($self->{distPolReader}->isa("Symbian::DistributionPolicy::Reader")) {
+            my $warner;
+            
+            # We may need to capture the output of the distribution policy modules
+            if ($self->{'captureDistributionPolicyOutput'}) {
+                $warner = sub { push @errors, shift; };
+            }
+            local $SIG{__WARN__} = $warner if ($warner);
+
+            # We want to make sure that we do have a reader before trying to read a file
+            eval {  my $distPolObj = $self->{distPolReader}->ReadPolicyFile($path);
+                    $result = $distPolObj->$what()};
+
+            $informationFrom = 'D' if (defined $result);
+        }
+    }
+
+    if ((!defined $result) && $self->{useDistPolFirst}) {
+        # If distribution policies have been used first and failed then try getting the information from MRP files...
+        
+        # The Symbian::CBR::IPR::MRP might not yet have been created
+        if (!exists $self->{mrpObject}) {
+            $self->CreateMrpObject();
+        }
+        
+        $result = $self->{mrpObject}->$what($path);
+
+        $informationFrom = 'M' if (defined $result);
+    }
+   
+    if (!defined $informationFrom && $self->{disallowUnclassifiedSource}) {
+        carp "Warning: IPR information for '$path' could not be obtained from either MRP files or distribution policy files\n";
+    }
+        
+    if ($self->{verbose} > 1) {
+        # If verbose then we print information saying where the IPR information was obtained from
+        if ($informationFrom eq 'M') {
+            print "Info: IPR information for '$path' was obtained using MRP files\n";
+        }
+        elsif ($informationFrom eq 'D') {
+            print "Info: IPR information for '$path' was obtained using Distribution Policy files\n";
+        }        
+    }
+
+    return ($result, \@errors);
+}
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+Symbian::IPR - An interface to IPR information within MRP files and Distribution
+Policy files.
+
+=head1 SYNOPSIS
+
+use Symbian::IPR;
+
+ # Instantiate a Symbian::IPR object
+ my $iprObject = Symbian::IPR->instance(0, 0, 'MRP', undef, 1);
+
+ # Get the IPR category for a path
+ my $category = $iprObject->Category('\aPath\somewhere');
+
+ # Get the export restricted flag for a path
+ my $exportRestricted = $iprObject->ExportRestricted('\aPath\somewhere');
+
+=head1 DESCRIPTION
+
+This package provides an interface to obtaining IPR information from MRP files
+and Distribution Policy files.  The user can specify the order of preference
+between MRP and distribution policies.  If the requested information can not be
+obtained from the preferred choice then the package will fall back to using the
+other option.
+
+=head1 METHODS
+
+=head2 new(useDistPolFirst, disallowUnclassifiedSource, typeOfMrp, component, verbose)
+
+Instantiates a Symbian::IPR object.
+
+The default order is for IPR information to be obtained from MRP files first, and
+if unsuccessful then to obtain the IPR information from distribution policy files.
+If the boolean value useDistPolFirst is specified then IPR information will be
+obtained from distribution policy files by default, and if not successful then
+MRP files will be used.
+
+If the disallowUnclassifiedSource flag is specified then warnings will be produced
+if IPR information can not be obtained both MRP files and distribution.policy files.
+
+The typeOfMrp argument is non-optional.  Valid types are MRP and MRPDATA.  See the
+documentation for Symbian::CBR::MRP::Reader for more information.
+
+If a component had been specified then the MRP file for the component will be processed
+and the IPR information obtained.  Any MRP files for dependant components will be
+located and processed too.  If no component name has been specified all MRP files
+in the environment will be processed.
+
+=head2 Category(path)
+
+Returns the IPR category of the path.  If no IPR information exists for the
+specified path then X will be returned.
+
+=head2 ExportRestricted(path)
+
+Returns true if the specified path is export restricted, and false if it is not.
+If no IPR information exists for the specified path then undef will be returned.
+
+=head2 PrepareInformationForComponent(component_name)
+
+If using MRP files for IPR information it is possible to specify which components
+contain the information required.  This improves performance as only required
+MRP files are processed.  The default behaviour is to process all MRP files listed
+in the CBR Tools environment database.
+
+If using distribution policy files as default then information passed to this method
+will be cached and realised only if it becomes necessary to use MRP files for IPR
+information (e.g. distribution policy file does not exist).
+
+=head2 PrepareInformationForMrpFile(list_of_mrp_files)
+
+If using MRP files for IPR information it is possible to specify which MRP files
+contain the information required.  This can be used in scenarios where a CBR Tools
+environment database does not exist, and so MRP locations are unknown.
+
+If using distribution policy files as default then information passed to this method
+will be cached and realised only if it becomes necessary to use MRP files for IPR
+information (e.g. distribution policy file does not exist).
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/TableFormatter.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,126 @@
+# Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+package TableFormatter;
+
+use constant TABLE_MARGIN => 3;
+
+use strict;
+
+sub New {
+  my $class = shift;
+  my $inidata = shift;
+  my $args = shift;
+  # SUBCLASSES: don't store $iniData anywhere, because then you'll
+  # get a reference loop and a memory leak.
+
+  my $self = bless {}, (ref $class || $class);
+  $self->{args} = $args;
+
+  return $self;
+}
+
+### Static methods
+
+sub CreateFormatter {
+  my $type = shift;
+  my $inidata = shift;
+  my $args = shift;
+
+  die "Error: couldn't create a formatter without a type" unless $type;
+
+  $type = ucfirst($type);
+  my $class = "TableFormatter::$type";
+  eval "require $class";
+  if ($@) {
+    die "Could not load the table formatter \"$class\" for format \"$type\" because $@";
+  }
+  return $class->New($inidata, $args) or die "Could not create the table formatter \"$class\" for format \"$type\"";
+}
+
+### Private
+
+sub FindColWidths {
+  my $self = shift;
+  my $data = shift;
+  my @widths;
+  return [] unless defined ($data->[0]);
+  my $numCols = scalar(@{$data->[0]});
+  for (my $col = 0; $col < $numCols; ++$col) {
+    my $width = $self->FindWidestColElement($data, $col);
+    $width += TABLE_MARGIN unless ($col == $numCols-1);
+    # Don't pad the last column in case it gives us unnecessary line wrapping
+    push @widths, $width;
+  }
+  return \@widths;
+}
+
+sub FindWidestColElement {
+  my $self = shift;
+  my $data = shift;
+  my $col = shift;
+  my $widest = 0;
+  my $numRows = scalar(@{$data});
+  for (my $row = 0; $row < $numRows; ++$row) {
+    my $this = $data->[$row][$col];
+    my $lengthThis = length($this);
+    if ($lengthThis > $widest) {
+      $widest = $lengthThis;
+    }
+  }
+  return $widest;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+TableFormatter.pm - An abstract superclass for table formatting classes.
+
+=head1 INTERFACE FOR SUBCLASSES
+
+=head2 New
+
+Creates a formatter.
+
+=head2 PrintTable
+
+Prints a table. Two arguments: firstly, a 2D array of the data. Secondly, a Boolean specifying whether the first row is a header row.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/TableFormatter/Auto.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,130 @@
+# Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# TableFormatter/Text.pm
+#
+
+package TableFormatter::Auto;
+
+use constant MAX_WIDTH => 75;
+use constant MAX_ROWS => 10;
+
+use strict;
+use TableFormatter;
+use TableFormatter::Text;
+use vars qw/@ISA/;
+
+@ISA = qw(TableFormatter);
+
+sub New {
+  my $class = shift;
+  my $inidata = shift;
+  my $args = shift;
+  
+  my ($complex, $complexargs) = $args =~ m/^(\w+)\s*(.*)/;
+  my $self = bless {}, (ref $class || $class);
+
+  $self->CreateFormatters($complex, $inidata, $complexargs);
+
+  return $self;
+}
+
+sub PrintTable {
+  my $self = shift;
+  my $data = shift;
+  my $doHeading = shift;
+
+  my $usecomplex = $self->UseComplexFormatter($data);
+
+  my $formatter = ($usecomplex?$self->{complex}:$self->{simple});
+  return $formatter->PrintTable($data, $doHeading);
+}
+
+## Private
+
+sub CreateFormatters {
+  my $self = shift;
+  my $complex = shift;
+  my $inidata = shift;
+  my $complexargs = shift;
+
+  $self->{complex} ||= TableFormatter::CreateFormatter($complex, $inidata, $complexargs);
+  $self->{simple} ||= TableFormatter::Text->New($inidata);
+}
+
+sub UseComplexFormatter {
+  my $self = shift;
+  my $data = shift;
+
+  # Currently {maxrows} and {maxwidth} are unused
+  my $maxrows = $self->{maxrows} || MAX_ROWS;
+  my $maxwidth = $self->{maxwidth} || MAX_WIDTH;
+
+  return 1 if (@$data > $maxrows);
+  return 1 if ($self->TotalWidth($data) > $maxwidth);
+  return 0;
+}
+
+sub TotalWidth {
+  my $self = shift;
+  my $data = shift;
+  
+  my $widths = $self->FindColWidths($data);
+  my $total = 0;
+  $total += $_ foreach (@$widths);
+  return $total;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+TableFormatter/Text.pm - Formats tables in text
+
+=head1 INTERFACE
+
+=head2 New
+
+Creates a formatter.
+
+=head2 PrintTable 
+
+Prints the table. Two arguments: firstly, a 2D array of the data. Secondly, a Boolean specifying whether the first row is a header row.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/TableFormatter/Csv.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,88 @@
+# Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# TableFormatter/Csv.pm
+#
+
+package TableFormatter::Csv;
+
+use strict;
+use Utils;
+use TableFormatter;
+use vars qw/@ISA/;
+@ISA = qw(TableFormatter);
+
+sub PrintTable {
+  my $self = shift;
+  my $data = shift;
+  my $location = Utils::PrependEpocRoot("\\epoc32\\relinfo\\temp-table.csv");
+  open(CSV, ">$location") or die "Couldn't open \"$location\" for writing because $!";
+  foreach my $row (@$data) {
+    my $rowtext = "";
+    foreach my $cell (@$row) {
+      $cell =~ s/\"/\\\"/g;
+      $cell =~ s/(.*)/\"$1\"/ if $cell =~ m/[\,\"]/;
+      $rowtext .= $cell . ",";
+    }
+    chop $rowtext;
+    print CSV "$rowtext\n";
+  }
+  close CSV;
+  system ($location);
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+TableFormatter/Csv.pm - Formats tables in text
+
+=head1 INTERFACE
+
+=head2 New
+
+Creates a formatter.
+
+=head2 PrintTable 
+
+Prints the table. Two arguments: firstly, a 2D array of the data. Secondly, a Boolean specifying whether the first row is a header row.
+
+=head1 KNOWN BUGS
+
+The name of this file (i.e. Csv.pm) must be in that capitalisation, for IniData.pm to be able to find it.
+
+No actual bugs.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/TableFormatter/Excel.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,157 @@
+# Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# TableFormatter/Excel.pm
+#
+
+package TableFormatter::Excel;
+
+use Utils;
+use TableFormatter;
+use vars qw/@ISA/;
+@ISA = qw(TableFormatter);
+
+use strict;
+use Win32::OLE;
+use Cwd;
+
+sub New {
+  my $class = shift;
+  my $iniData = shift;
+
+  if ($iniData->Win32ExtensionsDisabled()) {
+    print "Cannot use Excel table format with win32 extensions disabled. It relies on Win32::OLE module to communicate with Excel. If anybody really cares about this, please rewrite the module to use Spreadsheet::WriteExcel... but you'll have to write your own auto-fit engine. Meanwhile, using Text formatting instead.";
+    require TableFormatter::Text;
+    return TableFormatter::Text->New($iniData);
+  }
+
+  return bless {}, (ref $class || $class);
+}
+
+sub PrintTable {
+  my $self = shift;
+  my $data = shift;
+  my $doHeading = shift;
+
+  my $excel = new ExcelConnection;
+
+  my $filename = Utils::PrependEpocRoot("\\epoc32\\relinfo\\temp-table.xls");
+  my $cwd = cwd;
+  $cwd =~ m/^(\w\:)/;
+  my $driveletter = $1 || "";
+  $filename = "$driveletter$filename";
+  unlink ($filename);
+
+  my $wb = $excel->Workbooks->Add;
+
+  my $ws = $wb->Worksheets(1);
+
+  if ($doHeading) {
+    my $style = $wb->Styles->Add("Headings");
+    $style->{Font}->{Bold} = 1;
+    $ws->Rows(1)->{Style} = "Headings";
+  }
+
+  for (my $row=0; $row<@$data; $row++) {
+    my $rowdata = $data->[$row];
+    for (my $col=0; $col<@$rowdata; $col++) {
+      my $cell = $ws->Cells($row+1, $col+1);
+      my $value = $rowdata->[$col];
+      next if ($value eq ""); # otherwise Excel seems to think it's 0
+      $cell->{Value} = "'$value";
+    }
+  }
+
+  $self->DoFinalFormatting($ws);
+  # We want to save, because otherwise Excel will prompt whether you
+  # want to save when you close the workbook. But on the other hand
+  # it prints horrible error messages if there is already a workbook
+  # open with the same name.
+  # So we need to implement a scheme to give each output workbook
+  # a unique name, which means some sort of cleanup mechanism. TODO!
+  #eval {
+    #$wb->SaveAs($filename);
+  #}; # ignore errors, we don't really care.
+  $excel->{Visible} = (1);
+}
+
+### Private
+
+sub FormatHeadingCell {
+  my $self = shift;
+  my $cell = shift;
+  $cell->{Style}->{Font}->{Bold} = 1;
+}
+
+sub DoFinalFormatting {
+  my $self = shift;
+  my $ws = shift;
+  $ws->Columns("A:J")->AutoFit();
+}
+
+package ExcelConnection;
+
+sub new {
+  my $excel;
+  eval {$excel = Win32::OLE->GetActiveObject('Excel.Application')};
+  die "Excel not installed" if $@;
+  unless (defined $excel) {
+      $excel = Win32::OLE->new('Excel.Application', sub {}) or die "Oops, cannot start Excel";
+  }
+  return $excel;
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+TableFormatter/Excel.pm - Formats tables in Excel
+
+=head1 INTERFACE
+
+=head2 New
+
+Creates a formatter.
+
+=head2 PrintTable 
+
+Prints the table. Two arguments: firstly, a 2D array of the data. Secondly, a Boolean specifying whether the first row is a header row.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/TableFormatter/Html.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,104 @@
+# Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# TableFormatter/Html.pm
+#
+
+package TableFormatter::Html;
+
+use strict;
+use Utils;
+use TableFormatter;
+use vars qw/@ISA/;
+@ISA = qw(TableFormatter);
+
+sub PrintTable {
+  my $self = shift;
+  my $data = shift;
+  my $hasHeader = shift;
+
+  my $location = Utils::PrependEpocRoot("\\epoc32\\relinfo\\temp-table.html");
+  open(HTML, ">$location") or die "Couldn't open \"$location\" for writing because $!";
+  print HTML <<ENDHEAD;
+<html>
+<head>
+  <title>Release tools command output</title>
+</head>
+<body>
+<table border>
+ENDHEAD
+  foreach my $row (@$data) {
+    print HTML "  <tr>\n";
+    my $celltype = "td";
+    if ($hasHeader) {
+      $celltype = "th";
+      $hasHeader = 0; # only first row gets header cells
+    }
+    foreach my $cell (@$row) {
+      $cell =~ s/\&/\&amp;/g;
+      $cell =~ s/\</\&lt;/g;
+      $cell =~ s/\>/\&gt;/g;
+      print HTML "  <$celltype>$cell</$celltype>\n";
+    }
+    print HTML "  </tr>\n";
+  }
+  print HTML "</table>\n</body>\n</html>\n";
+  close HTML;
+  system ($location);
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+TableFormatter/Html.pm - Formats tables in HTML format
+
+=head1 INTERFACE
+
+=head2 New
+
+Creates a formatter.
+
+=head2 PrintTable 
+
+Prints the table. Two arguments: firstly, a 2D array of the data. Secondly, a Boolean specifying whether the first row is a header row.
+
+=head1 KNOWN BUGS
+
+The name of this file (i.e. Html.pm) must be in that capitalisation, for IniData.pm to be able to find it.
+
+No actual bugs.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/TableFormatter/Text.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,100 @@
+# Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+# Description:
+# TableFormatter/Text.pm
+#
+
+package TableFormatter::Text;
+
+use strict;
+use TableFormatter;
+use vars qw/@ISA/;
+@ISA = qw(TableFormatter);
+
+sub PrintTable {
+  my $self = shift;
+  my $data = shift;
+  my $doHeading = shift;
+  unless (defined $doHeading) {
+    $doHeading = 0;
+  }
+
+  my $colWidths = $self->FindColWidths($data);
+  my $numRows = scalar(@$data);
+  for (my $row = 0; $row < $numRows; ++$row) {
+    if ($doHeading and $row == 1) {
+      print "\n";
+    }
+    $self->PrintRow($data, $colWidths, $row);
+  }  
+}
+
+## Private
+
+sub PrintRow {
+  my $self = shift;
+  my $data = shift;
+  my $colWidths = shift;
+  my $row = shift;
+  my $numCols = scalar(@{$data->[$row]});
+  for (my $col = 0; $col < $numCols; ++$col) {
+    my $this = $data->[$row][$col];
+    $this = '<UNDEFINED>' unless defined $this;
+    print $this, ' ' x ($colWidths->[$col] - length($this));
+  }
+  print "\n";
+}
+
+1;
+
+__END__
+
+=head1 NAME
+
+TableFormatter/Text.pm - Formats tables in text
+
+=head1 INTERFACE
+
+=head2 New
+
+Creates a formatter.
+
+=head2 PrintTable 
+
+Prints the table. Two arguments: firstly, a 2D array of the data. Secondly, a Boolean specifying whether the first row is a header row.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Text/Glob.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,187 @@
+# Copyright (C) 2002 Richard Clamp.  All Rights Reserved.
+#
+# This module is free software; you can redistribute it and/or modify it
+# under the same terms as Perl itself.
+
+package Text::Glob;
+use strict;
+use Exporter;
+use vars qw/$VERSION @ISA @EXPORT_OK
+            $strict_leading_dot $strict_wildcard_slash/;
+$VERSION = '0.06';
+@ISA = 'Exporter';
+@EXPORT_OK = qw( glob_to_regex match_glob );
+
+$strict_leading_dot    = 1;
+$strict_wildcard_slash = 1;
+
+use constant debug => 0;
+
+sub glob_to_regex {
+    my $glob = shift;
+    my ($regex, $in_curlies, $escaping);
+    local $_;
+    my $first_byte = 1;
+    for ($glob =~ m/(.)/gs) {
+        if ($first_byte) {
+            if ($strict_leading_dot) {
+                $regex .= '(?=[^\.])' unless $_ eq '.';
+            }
+            $first_byte = 0;
+        }
+        if ($_ eq '/') {
+            $first_byte = 1;
+        }
+        if ($_ eq '.' || $_ eq '(' || $_ eq ')' || $_ eq '|' ||
+            $_ eq '+' || $_ eq '^' || $_ eq '$' ) {
+            $regex .= "\\$_";
+        }
+        elsif ($_ eq '*') {
+            $regex .= $escaping ? "\\*" :
+              $strict_wildcard_slash ? "[^/]*" : ".*";
+        }
+        elsif ($_ eq '?') {
+            $regex .= $escaping ? "\\?" :
+              $strict_wildcard_slash ? "[^/]" : ".";
+        }
+        elsif ($_ eq '{') {
+            $regex .= $escaping ? "\\{" : "(";
+            ++$in_curlies unless $escaping;
+        }
+        elsif ($_ eq '}' && $in_curlies) {
+            $regex .= $escaping ? "}" : ")";
+            --$in_curlies unless $escaping;
+        }
+        elsif ($_ eq ',' && $in_curlies) {
+            $regex .= $escaping ? "," : "|";
+        }
+        elsif ($_ eq "\\") {
+            if ($escaping) {
+                $regex .= "\\\\";
+                $escaping = 0;
+            }
+            else {
+                $escaping = 1;
+            }
+            next;
+        }
+        else {
+            $regex .= $_;
+            $escaping = 0;
+        }
+        $escaping = 0;
+    }
+    print "# $glob $regex\n" if debug;
+    qr/^$regex$/;
+}
+
+sub match_glob {
+    print "# ", join(', ', map { "'$_'" } @_), "\n" if debug;
+    my $glob = shift;
+    my $regex = glob_to_regex $glob;
+    local $_;
+    grep { $_ =~ $regex } @_;
+}
+
+1;
+__END__
+
+=head1 NAME
+
+Text::Glob - match globbing patterns against text
+
+=head1 SYNOPSIS
+
+ use Text::Glob qw( match_glob glob_to_regex );
+
+ print "matched\n" if match_glob( "foo.*", "foo.bar" );
+
+ # prints foo.bar and foo.baz
+ my $regex = glob_to_regex( "foo.*" );
+ for ( qw( foo.bar foo.baz foo bar ) ) {
+     print "matched: $_\n" if /$regex/;
+ }
+
+=head1 DESCRIPTION
+
+Text::Glob implements glob(3) style matching that can be used to match
+against text, rather than fetching names from a filesystem.  If you
+want to do full file globbing use the File::Glob module instead.
+
+=head2 Routines
+
+=over
+
+=item match_glob( $glob, @things_to_test )
+
+Returns the list of things which match the glob from the source list.
+
+=item glob_to_regex( $glob )
+
+Returns a compiled regex which is the equiavlent of the globbing
+pattern.
+
+=back
+
+=head1 SYNTAX
+
+The following metacharacters and rules are respected.
+
+=over
+
+=item C<*> - match zero or more characters
+
+C<a*> matches C<a>, C<aa>, C<aaaa> and many many more.
+
+=item C<?> - match exactly one character
+
+C<a?> matches C<aa>, but not C<a>, or C<aa>
+
+=item Character sets/ranges
+
+C<example.[ch]> matches C<example.c> and C<example.h>
+
+C<demo.[a-c]> matches C<demo.a>, C<demo.b>, and C<demo.c>
+
+=item alternation
+
+C<example.{foo,bar,baz}> matches C<example.foo>, C<example.bar>, and
+C<example.baz>
+
+=item leading . must be explictly matched
+
+C<*.foo> does not match C<.bar.foo>.  For this you must either specify
+the leading . in the glob pattern (C<.*.foo>), or set
+C<$Text::Glob::strict_leading_dot> to a false value while compiling
+the regex.
+
+=item C<*> and C<?> do not match /
+
+C<*.foo> does not match C<bar/baz.foo>.  For this you must either
+explicitly match the / in the glob (C<*/*.foo>), or set
+C<$Text::Glob::strict_wildcard_slash> to a false value with compiling
+the regex.
+
+=back
+
+=head1 BUGS
+
+The code uses qr// to produce compiled regexes, therefore this module
+requires perl version 5.005_03 or newer.
+
+=head1 AUTHOR
+
+Richard Clamp <richardc@unixbeard.net>
+
+=head1 COPYRIGHT
+
+Copyright (C) 2002 Richard Clamp.  All Rights Reserved.
+
+This module is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+
+=head1 SEE ALSO
+
+L<File::Glob>, glob(3)
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/Utils.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1719 @@
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+
+package Utils;
+use base qw(Exporter);
+use strict;
+use Win32;
+use Win32::File;
+use Win32::Console;
+use File::stat;
+use File::Path;
+use File::Basename;
+use File::Find;
+use File::Temp;
+use File::Spec;
+use FindBin;
+use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
+use Cwd 'abs_path';
+use Data::Dumper;
+use Time::Local;
+use IPC::Open2;
+use Cwd;
+use Symbian::IPR;
+
+$|++;
+
+#
+# Constants.
+#
+
+use constant EPOC_RELATIVE => 1;
+use constant SOURCE_RELATIVE => 2;
+use constant MAX_OS_PATH_LENGTH => 255;
+our @EXPORT = qw(EPOC_RELATIVE SOURCE_RELATIVE);
+
+#
+# Globals;
+#
+
+my $console; # Needs to be global because (for some reason) file descriptors get screwed up if it goes out of scope.
+my $tempDir;
+my $haveCheckedEpocRoot;
+my $haveCheckedSrcRoot;
+our %zipFileCache; # used to cache the Archive::Zip object of the last zip file used
+
+#
+# Subs.
+#
+
+sub StripWhiteSpace {
+  my $a = shift;
+  $$a =~ s/^\s*//;
+  $$a =~ s/\s*$//;
+}
+
+sub TidyFileName {
+  my $a = shift;
+  $$a =~ s/\//\\/g;      # Change forward slashes to back slashes.
+  $$a =~ s/\\\.\\/\\/g;  # Change "\.\" into "\".
+
+  if ($$a =~ /^\\\\/) {  # Test for UNC paths.
+    $$a =~ s/\\\\/\\/g;  # Change "\\" into "\".
+    $$a =~ s/^\\/\\\\/;  # Add back a "\\" at the start so that it remains a UNC path.
+  }
+  else {
+    $$a =~ s/\\\\/\\/g;  # Change "\\" into "\".
+  }
+
+  # Colapse '\..\' sequences.
+  my $hasLeadingSlash = $$a =~ s/^\\//;
+  my $hasTrailingSlash = $$a =~ s/\\$//;
+  my @elements = split (/\\/, $$a);
+  my @result; # An array to store the colapsed result in.
+  foreach my $element (@elements) {
+    if ($element eq '..') {
+      my $last = pop @result;
+      if ($last) {
+	if ($last eq '..') { # Throw away the previous element, unless it's another '..'.
+	  push (@result, $last);
+	  push (@result, $element);
+	}
+	next;
+      }
+    }
+    push (@result, $element);
+  }
+  if ($hasLeadingSlash) {
+    $$a = '\\';
+  }
+  else {
+    $$a = '';
+  }
+  $$a .= join ('\\', @result);
+  if ($hasTrailingSlash) {
+    $$a .= '\\';
+  }
+}
+
+sub IsAbsolute {
+  my $path = shift;
+  if ($path =~ /^[\\\/]/) {
+    return 1;
+  }
+  return 0;
+}
+
+sub AbsoluteFileName {
+  my $fileName = shift;
+  (my $base, my $path) = fileparse($$fileName);
+  my $absPath = abs_path($path);
+  $absPath =~ s/^\D://; # Remove drive letter.
+  $$fileName = $absPath;
+  unless ($$fileName =~ /[\\\/]$/) {
+    $$fileName .= "\\";
+  }
+  $$fileName .= $base;
+  TidyFileName($fileName);
+}
+
+sub AbsolutePath {
+  my $path = shift;
+  my $absPath = abs_path($$path);
+  $absPath =~ s/^\D://; # Remove drive letter.
+  $$path = $absPath;
+  TidyFileName($path);
+}
+
+sub EpocRoot {
+  my $epocRoot = $ENV{EPOCROOT};
+  unless ($haveCheckedEpocRoot) {
+    #use Carp qw/cluck/;
+    #cluck "Checking for EpocRoot";
+    die "Error: Must set the EPOCROOT environment variable\n" if (!defined($epocRoot));
+    die "Error: EPOCROOT must not include a drive letter\n" if ($epocRoot =~ /^.:/);
+    die "Error: EPOCROOT must be an absolute path without a drive letter\n" if ($epocRoot !~ /^\\/);
+    die "Error: EPOCROOT must not be a UNC path\n" if ($epocRoot =~ /^\\\\/);
+    die "Error: EPOCROOT must end with a backslash\n" if ($epocRoot !~ /\\$/);
+    die "Error: EPOCROOT must specify an existing directory\n" if (!-d $epocRoot);
+    $haveCheckedEpocRoot = 1;
+  }
+  return $epocRoot;
+}
+
+sub SourceRoot {
+  my $srcRoot = $ENV{SRCROOT};
+  unless ($haveCheckedSrcRoot) {
+    if (defined $srcRoot) { # undefined SRCROOTs are OK
+      die "Error: SRCROOT must not include a drive letter\n" if ($srcRoot =~ /^.:/);
+      die "Error: SRCROOT must be an absolute path without a drive letter\n" if ($srcRoot !~ /^\\/);
+      die "Error: SRCROOT must not be a UNC path\n" if ($srcRoot =~ /^\\\\/);
+      die "Error: SRCROOT must end with a backslash\n" if ($srcRoot !~ /\\$/);
+      die "Error: SRCROOT must specify an existing directory\n" if (!-d $srcRoot);
+    }
+    $haveCheckedSrcRoot = 1;
+  }
+  return $srcRoot || "\\";
+}
+
+sub CheckWithinEpocRoot {
+  my $path = shift;
+  die "Error: \"$path\" is not within EPOCROOT\n" unless (WithinEpocRoot($path));
+}
+
+sub WithinEpocRoot {
+  my $path = shift;
+  my $epocRoot = EpocRoot();
+  return ($path =~ /^\Q$epocRoot\E/i);
+}
+
+sub PrependEpocRoot {
+  my $path = shift;
+  if (EpocRoot() ne "\\") {
+    #use Carp qw/cluck/;
+    #cluck "here";
+    die "Error: EPOCROOT already present in \"$path\"\n" if ($path =~ /^\Q$ENV{EPOCROOT}\E/i);
+  }
+  $path =~ s!^[\\\/]!!; # Remove leading slash.
+  return EpocRoot().$path;
+}
+
+sub RelativeToAbsolutePath {
+	my $path = shift;
+	my $iniData = shift;
+	my $pathType = shift;
+
+	if ( $pathType == SOURCE_RELATIVE ) {
+		if( $iniData->HasMappings() && SourceRoot() eq "\\" ) {
+			$path = $iniData->PerformMapOnFileName( $path );
+		}
+		else{
+			$path = PrependSourceRoot( $path );
+		}
+	}
+	else {
+		$path = PrependEpocRoot( $path );
+	}
+	return $path;
+}
+
+sub RemoveEpocRoot {
+  my $path = shift;
+  unless ($path =~ s/^\Q$ENV{EPOCROOT}\E//i) {
+    die "Error: Path does not contain EPOCROOT - EPOCROOT:\"$ENV{EPOCROOT}\" - Path:\"$path\"\n";
+  }
+  return $path;
+}
+
+sub CheckWithinSourceRoot {
+  my $path = shift;
+  die "Error: \"$path\" is not within SRCROOT\n" unless (WithinSourceRoot($path));
+}
+
+sub WithinSourceRoot {
+  my $path = shift;
+  my $sourceRoot = SourceRoot();
+  return ($path =~ /^\Q$sourceRoot\E/i);
+}
+
+sub PrependSourceRoot {
+  my $path = shift;
+  my $sourceRoot = SourceRoot();
+  if ($sourceRoot ne "\\") {
+    die "Error: SRCROOT already present in \"$path\"\n" if ($path =~ /^\Q$sourceRoot\E/i);
+  }
+
+  $path =~ s!^[\\\/]!!; # Remove leading slash.
+  return SourceRoot() . $path;
+}
+
+sub RemoveSourceRoot {
+  my $path = shift;
+  my $sourceRoot = SourceRoot();
+  unless ($path =~ s/^\Q$sourceRoot\E//i) {
+    die "Error: Couldn't remove \"$sourceRoot\" from \"$path\"\n";
+  }
+  return $path;
+}
+
+sub MakeDir ($) {
+  my $dir = shift;
+  $dir =~ s/\//\\/g; # Convert all forward slashes to back slashes in path.
+  unless (-e $dir) {
+    if ($dir =~ /^\\\\/) {
+      # This is a UNC path - make path manually because UNC isn't supported by mkpath.
+      my $dirToMake = '';
+      my @dirs = split /\\/, $dir;
+      shift @dirs;  # Get rid of undefined dir.
+      shift @dirs;  # Get rid of undefined dir.
+      my $server = shift @dirs;
+      my $share = shift @dirs;
+      $dirToMake .= "\\\\$server\\$share";
+      unless (-e $dirToMake) {
+	die "Error: Network share \"$dirToMake\" does not exist\n";
+      }
+      foreach my $thisDir (@dirs) {
+	$dirToMake .=  "\\$thisDir";
+	unless (-e $dirToMake) {
+	  mkdir($dirToMake,0) or die "Error: Couldn't make directory $dirToMake: $!\n";
+	}
+      }
+    }
+    else {
+      my @warnings;
+      local $SIG{__WARN__} = sub {push @warnings, $!};
+      
+      eval {mkpath($dir)};
+      if (@warnings) {
+        die "Error: Couldn't make path \"$dir\": " . (join ', ', @warnings) . "\n";
+      }
+    }
+  }
+}
+
+sub FileModifiedTime {
+  my $file = shift;
+  my $st = stat($file) or return 0;
+  return TimeMinusDaylightSaving($st->mtime);
+}
+
+sub FileSize {
+  my $file = shift;
+  my $st = stat($file) or return 0;
+  return $st->size;
+}
+
+sub FileModifiedTimeAndSize {
+  my $file = shift;
+  my $st = stat($file) or return 0;
+  return (TimeMinusDaylightSaving($st->mtime), $st->size);
+}
+
+sub TimeMinusDaylightSaving {
+  my $time = shift;
+  (undef, undef, undef, undef, undef, undef, undef, undef, my $isDaylightSaving) = localtime;
+  if ($isDaylightSaving) {
+    $time -= 3600;
+  }
+  return $time;
+}
+
+sub TextTimeToEpochSeconds {
+  my $textTime = shift;
+  $textTime =~ /(\S+) (\S+) {1,2}(\d+) {1,2}(\d+):(\d+):(\d+) {1,2}(\d+)/;
+  my $weekDay = $1;
+  my $month = $2;
+  my $monthDay = $3;
+  my $hours = $4;
+  my $minutes = $5;
+  my $seconds = $6;
+  my $year = $7 - 1900;
+
+  if    ($month eq 'Jan') { $month = 0; }
+  elsif ($month eq 'Feb') { $month = 1; }
+  elsif ($month eq 'Mar') { $month = 2; }
+  elsif ($month eq 'Apr') { $month = 3; }
+  elsif ($month eq 'May') { $month = 4; }
+  elsif ($month eq 'Jun') { $month = 5; }
+  elsif ($month eq 'Jul') { $month = 6; }
+  elsif ($month eq 'Aug') { $month = 7; }
+  elsif ($month eq 'Sep') { $month = 8; }
+  elsif ($month eq 'Oct') { $month = 9; }
+  elsif ($month eq 'Nov') { $month = 10; }
+  elsif ($month eq 'Dec') { $month = 11; }
+
+  return timelocal($seconds, $minutes, $hours, $monthDay, $month, $year);
+}
+
+sub TextDateToEpochSeconds {
+  my $textDate = shift;
+  (my $day, my $month, my $year) = split (/\//, $textDate, 3);
+  unless ($day and $month and $year) {
+    die "Error: Invalid date specification: \"$textDate\"\n";
+  }
+  return timelocal(0, 0, 0, $day, $month - 1, $year - 1900);
+}
+
+sub SetFileReadOnly {
+  my $file = shift;
+  Utils::TidyFileName(\$file);
+  system "attrib +r $file";
+}
+
+sub SetFileWritable {
+  my $file = shift;
+  Utils::TidyFileName(\$file);
+  system "attrib -r $file";
+}
+
+sub SplitFileName {
+  my $fileName = shift;
+  my $path = '';
+  my $base = '';
+  my $ext = '';
+
+  if ($fileName =~ /\\?([^\\]*?)(\.[^\\\.]*)?$/) {
+    $base = $1;
+  }
+  if ($fileName =~ /^(.*\\)/) {
+    $path = $1;
+  }
+  if ($fileName =~ /(\.[^\\\.]*)$/o) {
+    $ext =  $1;
+  }
+
+  unless ($fileName eq "$path$base$ext") {
+    my $prob = ($^V eq "v5.6.0")?" There is a known defect in Perl 5.6.0 which triggers this issue with filenames with two extensions (e.g. .exe.map). Please upgrade to Perl 5.6.1.":"";
+    die "Couldn't parse filename \"$fileName\".$prob";
+  }
+  return ($path, $base, $ext);
+}
+
+sub SplitQuotedString {
+  my $string = shift;
+  my $original = $string;
+  my @output = ();
+  $string =~ s/^\s+//; # Remove leading delimiter if present.
+  while ($string) {
+    if ($string =~ s/^\"(.*?)\"//    # Match and remove next quoted string
+	or $string =~ s/^(.*?)\s+//  # or, match and remove next (but not last) unquoted string
+	or $string =~ s/^(.*)$//) {  # or, match and remove last unquoted string.
+      push (@output, $1);
+      $string =~ s/^\s+//; # Remove delimiter if present.
+    }
+    else {
+      die "Error: Unable to decode string \"$original\"\n";
+    }
+  }
+  return @output;
+}
+
+sub ConcatenateDirNames {
+  my $dir1 = shift;
+  my $dir2 = shift;
+  TidyFileName(\$dir1);
+  TidyFileName(\$dir2);
+  $dir1 =~ s/([^\\]$)/$1\\/;
+  $dir2 =~ s/^\\//;
+  return $dir1.$dir2;
+}
+
+sub FindInPath {
+  my $file = shift;
+  unless (exists $ENV{PATH}) {
+    die "Error: No path environment variable\n";
+  }
+  foreach my $dir (split (/;/, $ENV{PATH})) {
+    if (-e "$dir\\$file") {
+      return "$dir\\$file";
+    }
+  }
+  die "Error: \"$file\" not found in path\n";
+}
+
+sub ReadDir {
+  my $dir = shift;
+  my @dir;
+  opendir(DIR, $dir) or die "Error: Couldn't open directory \"$dir\": $!\n";
+  while (defined(my $file = readdir(DIR))) {
+    next if ($file eq '.' or $file eq '..');
+    push (@dir, $file);
+  }
+  closedir(DIR);
+  return \@dir;
+}
+
+sub ReadGlob {
+  my $glob = shift;
+  (my $path, my $base, my $ext) = SplitFileName($glob);
+  $glob = "$base$ext";
+  $glob =~ s/\./\\\./g; # Escape '.'
+  $glob =~ s/\*/\.\*/g; # '*' -> '.*'
+  $glob =~ s/\?/\./g;   # '?' -> '.'
+  my @entries;
+  foreach my $entry (@{ReadDir($path)}) {
+    if ($entry =~ /$glob/) {
+      push (@entries, "$path$entry");
+    }
+  }
+  return \@entries;
+}
+
+sub ReadDirDescendingDateOrder {
+  my $dir = shift;
+  my $unsortedList = ReadDir($dir);
+  my %mtimeHash;
+  foreach my $entry (@$unsortedList) {
+    my $mTime = FileModifiedTime("$dir\\$entry");
+    while (exists $mtimeHash{$mTime}) {
+      ++$mTime;
+    }
+    $mtimeHash{$mTime} = $entry;
+  }
+  my @dir;
+  foreach my $key (sort { $b <=> $a } keys %mtimeHash) {
+    push (@dir, $mtimeHash{$key});
+  }
+  return \@dir;
+}
+
+sub SignificantDir {
+  my $dir = shift;
+  my $significantSubDirs = FindSignificantSubDirs($dir);
+  my $commonDir = CommonDir($significantSubDirs);
+  return $commonDir;
+}
+
+
+# For a given directory, find which sub-directories contain files (rather than just other sub-directories).
+sub FindSignificantSubDirs {
+  my $dir = shift;
+  my $dirContents = ReadDir($dir);
+  my @files;
+  my @dirs;
+  foreach my $thisEntry (@$dirContents) {
+    if (-f "$dir\\$thisEntry") {
+      push (@files, "$dir\\$thisEntry");
+    }
+    elsif (-d "$dir\\$thisEntry") {
+      push (@dirs, "$dir\\$thisEntry");
+    }
+  }
+  if (scalar @files > 0) {
+    # This directory contains some files, so it is significant.
+    return [$dir];
+  }
+  elsif (scalar @dirs > 0) {
+    # Only sub-directories in this directory, so recurse.
+    my @significantSubDirs;
+    foreach my $thisDir (@dirs) {
+      push (@significantSubDirs, @{FindSignificantSubDirs($thisDir)});
+    }
+    return \@significantSubDirs;
+  }
+  else {
+    # Nothing of interest;
+    return [];
+  }
+}
+
+sub CrossCheckDirs {
+  my $dir1 = shift;
+  my $dir2 = shift;
+  my $matched = CrossCheckDirsOneWay($dir1, $dir2);
+  if ($matched) {
+    $matched = CrossCheckDirsOneWay($dir2, $dir1);
+  }
+  return $matched;
+}
+
+sub CrossCheckDirsOneWay {
+  my $dir1 = shift;
+  my $dir2 = shift;
+
+  my $matched = 1;
+  opendir(DIR1, $dir1) or die "Error: Couldn't open directory $dir1: $!\n";
+  while (defined(my $dir1File = readdir(DIR1))) {
+    next if ($dir1File eq '.' or $dir1File eq '..');
+    $dir1File = "$dir1\\$dir1File";
+    (my $dir1MTime, my $dir1Size) = Utils::FileModifiedTimeAndSize($dir1File);
+    (undef, my $base, my $extension) = Utils::SplitFileName($dir1File);
+    my $dir2File = "$dir2\\$base$extension";
+    if (-e $dir2File) {
+      (my $dir2MTime, my $dir2Size) = Utils::FileModifiedTimeAndSize($dir2File);
+      unless ($dir2MTime == $dir1MTime and $dir2Size == $dir1Size) {
+	print "\"$dir1File\" does not match modified time and size of \"$dir2File\"\n";
+	$matched = 0;
+      }
+    }
+    else {
+      print "\"$dir2File\" not found\n";
+      $matched = 0;
+    }
+  }
+  closedir(DIR1);
+
+  return $matched;
+}
+
+sub ZipSourceList {
+  my $zipName = shift;
+  my $list = shift;
+  my $verbose = shift;
+  my $relativeTo = shift;
+  my $iniData = shift;
+
+  if (scalar(@$list) == 0) {
+    if ($verbose) { print "No files to put into $zipName...\n"; }
+    return;
+  }
+
+  my $dirName = dirname($zipName);
+  unless (-d $dirName) {
+    MakeDir($dirName) || die "ERROR: Unable to create directory.";
+  }
+
+  if ($verbose) { print "Creating $zipName...\n"; }
+
+  my $zip = Archive::Zip->new() or die "ERROR: Unable to create new zip.\n";
+  
+  my $processedDirs = {};
+
+  foreach my $file (@$list) {
+    my $fileToZip = $file;
+    $file = "$relativeTo"."$file";
+
+    if(-f $file) {
+	  # We need to add distribution policy files for each directory
+	  my $dirname = dirname($file);
+	  
+	  if (!exists $processedDirs->{$dirname}) {
+		if (-e File::Spec->catdir($dirname, 'distribution.policy')) {
+		  push @$list, Utils::RemoveSourceRoot(File::Spec->catdir($dirname, 'distribution.policy'));
+		  $processedDirs->{$dirname} = 1;
+		}
+	  }
+	  
+      if($iniData->HasMappings()){
+        $fileToZip = $iniData->PerformReverseMapOnFileName($file);
+        $fileToZip = Utils::RemoveSourceRoot($fileToZip);
+      }
+      my $member = $zip->addFile($file, $fileToZip);
+      if (!defined $member) {
+        die "ERROR: Cannot add file '$file' to new zip.\n";
+      }
+      $member->fileAttributeFormat(FA_MSDOS);
+      my $attr = 0;
+      Win32::File::GetAttributes($file, $attr);
+      $member->{'externalFileAttributes'} |= $attr; # preserve win32 attrs
+    }
+    elsif(-e $file){}
+    else {
+      die "ERROR: $file does not exist, so can not add to $zipName.\n";
+    }
+  }
+
+  # Warning message appears when an error code (which is a non zero) is returned.
+
+  my $returnVal = $zip->writeToFileNamed($zipName);
+
+  if ($returnVal) {
+    die "Error: Failed to write ZIP file '$zipName'\n";
+  }
+}
+
+sub ZipList {
+  my $zipName = shift;
+  my $list = shift;
+  my $verbose = shift;
+  my $noCompress = shift;
+  my $relativeTo = shift;
+
+  if (scalar(@$list) == 0) {
+    if ($verbose) { print "No files to put into $zipName...\n"; }
+    return;
+  }
+
+  my $dirName = dirname($zipName);
+  unless (-e $dirName) {
+    MakeDir($dirName);
+  }
+
+  if ($verbose) { print "Creating $zipName...\n"; }
+
+  my $cwd = Cwd::cwd();
+  if ($relativeTo) {
+    chdir($relativeTo) or die "Error: Couldn't change working directory to \"$relativeTo\": $!\n";
+  }
+
+  my @opts = ('-@');;
+  if ($verbose == 0) {
+    push @opts, '-qq';
+  }
+  elsif ($verbose == 1) {
+    push @opts, '-q';
+  }
+  elsif ($verbose > 1) {
+    push @opts, '-v';
+  }
+  if ($noCompress) {
+    push @opts, '-0';
+  }
+  
+  my $missing = 0;
+  my $retval;
+  my $count = 0;
+  do{
+     open(ZIP, "| \"$FindBin::Bin\\zip\" @opts $zipName") or die "Error: Couldn't execute _zip.exe - $!\n";
+
+     foreach my $file (@$list) {
+       unless (-e $file) {
+         $missing = $file;
+         last;
+       }
+       $file =~ s/\[/\[\[\]/g;
+       print ZIP "$file\n";
+     }
+     close(ZIP);
+     
+     $count ++;
+     $retval = $? >> 8;
+     if (!$missing && $retval > 1){
+       print "Warning: Zipping failed with error code $retval for the $count times.\n";
+     }
+     
+  }while(!$missing && $retval > 1 && $count < 10);
+  
+  if ($relativeTo) {
+    chdir($cwd) or die "Error: Couldn't change working directory back to \"$cwd\": $!\n";
+  }
+
+  if ($missing) {
+    die "Error: \"" . Utils::ConcatenateDirNames($relativeTo, $missing) . "\" does not exist\n";
+  }
+
+  die "Zipping failed with error code $retval\n" if $retval > 1; # 1 is warnings only
+}
+
+# So EnvDb::UnpackBinaries can be called from the test suite, use %INC to find path instead of FindBin::Bin
+sub UnzipPath {
+    my $unzippath;
+    my $envdbpath = $INC{'EnvDb.pm'};
+    if(defined $envdbpath) {
+	# find the unzip binary
+	$envdbpath =~ s/\\/\//g;
+	$envdbpath =~ s/\/[^\/]+$//;
+	$unzippath .= $envdbpath;
+    } else {
+	$unzippath .= $FindBin::Bin;
+    }
+    $unzippath .= "\\unzip";
+    $unzippath = "\"$unzippath\"";
+
+    return $unzippath;
+}
+
+sub UnzipSource {
+  my $zipName = shift;
+  my $destinationPath = shift;
+  my $verbose = shift;
+  my $overwrite = shift;
+  my $iniData = shift;
+  my $toValidate = shift;
+  my $comp = shift;
+  
+  unless(defined $overwrite) {
+    $overwrite = 0;
+  }
+
+  if($verbose) {
+    print "Unpacking ";
+    if($overwrite) {
+      print "[in overwrite mode] ";
+    }
+    print "$zipName...\n";
+  }
+
+  my $catInArchive;
+  my $changeInCat = 0;
+  my $fileDirBuffer;
+
+  # Sets $catInArchive to the category found on the source zip.
+  if($toValidate==1 && $zipName =~ /source(.*).zip/){
+    $catInArchive = $1;
+  }
+
+  my $zip = Archive::Zip->new($zipName);
+  my @members = $zip->members();
+
+  # Only print warning message if validation is not being performed, destination path is \\ and verbose is set.
+
+  if($toValidate==0 && $destinationPath ne "\\" && $verbose) {
+    print "Warning: Ignoring all mappings defined since either source path or SRCROOT is set as $destinationPath.\n";
+  }
+
+  foreach my $member (@members) {
+
+    my $fileName = $member->fileName();
+
+    $fileName =~ s/\//\\/g;
+
+    if($fileName !~ /^\\/) {
+      $fileName = "\\$fileName";
+    }
+
+    $iniData->CheckFileNameForMappingClash($fileName);
+
+    my $newFileName;
+
+    # PerfromMapOnFileName is only used for an validation and if the destintionPath is \\.
+
+    if($toValidate==1 || $destinationPath eq "\\") {
+      $newFileName = $iniData->PerformMapOnFileName($fileName);
+    }
+    else {
+      $newFileName = $fileName;
+    }
+
+    # Check if the category has changed. Only occurs for validation.
+    if(defined $catInArchive && -e $newFileName && $toValidate==1) {
+      my $fileDir;
+      my $classifySourceFlag = 1; # Classify source using function ClassifySourceFile only if set as 1 and not when set as 0;
+
+      if(defined $fileDirBuffer) {
+        ($fileDir) = SplitFileName($newFileName);
+
+        if($fileDirBuffer =~ /^\Q$fileDir\E$/i){
+          $classifySourceFlag = 0;
+        }
+      }
+
+      if($classifySourceFlag){
+        my ($catInEnv, $errors) = ClassifyPath($iniData, $newFileName, 0, 0, $comp); # verbose = 0 and logErrors = 0
+        if($catInArchive !~ /$catInEnv/i){
+          $changeInCat = 1;
+        }
+        ($fileDirBuffer) = SplitFileName($newFileName);
+      }
+    }
+    ExtractFile($destinationPath, $newFileName, $member, $toValidate, $overwrite, $verbose);
+  }
+
+  return $changeInCat;
+}
+
+
+sub ExtractFile {
+  my $destinationPath = shift;
+  my $newFileName = shift;
+  my $member = shift;
+  my $toValidate = shift;
+  my $overwrite = shift;
+  my $verbose = shift;
+  my $unzipRetVal = shift; # The return value from unzip if it has already been tried
+  my $extractFlag = 0;
+  
+  my $attr;
+
+  # If the file is a distribution.policy file then set the overwrite flag to true
+  if ($newFileName =~ /distribution\.policy/i) {
+	$overwrite = 1;
+  }
+
+  # If extracting file for validation or destination path is not equal to \\ unzip file to $destinationPath.
+
+  if($toValidate==1 || $destinationPath ne "\\") {
+    $newFileName = File::Spec->catfile($destinationPath, $newFileName);
+  }
+
+  CheckPathLength($newFileName);
+
+  # If the file exists need to check if file is to be overwritten.
+
+  if(-f $newFileName) {
+    if($overwrite) {
+      if((Win32::File::GetAttributes($newFileName, $attr)) && ($attr & HIDDEN)){
+      	Win32::File::SetAttributes($newFileName, ARCHIVE|NORMAL) || die "ERROR: Unable to overwrite the hidden file $newFileName: $!";
+	  }
+	  elsif(!-w $newFileName){
+        chmod(0777,$newFileName) || die "ERROR: Unable to overwrite the read-only file $newFileName: $!";
+      }
+      $extractFlag = 1;
+    }
+    else {
+      if($verbose) {
+        print "Ignoring the file $newFileName, as this is already present.\n";
+      }
+    }
+  }
+  else{
+    $extractFlag = 1;
+  }
+
+  if($extractFlag){
+    {
+      #DEF122018
+      # Invalid paths will cause Archive::Zip to give an error.  We capture the error and re-format it.
+      my @warnings;
+      local $SIG{__WARN__} = sub {
+        push @warnings, $!;
+      };
+      
+      eval { mkpath(dirname($newFileName)) };
+  
+      if (@warnings) {
+        die "Error: Unable to make the directory \"$newFileName\": " . (join "\n", @warnings) . "\n";
+      }
+    }
+
+    # A non-zero is returned if there is a problem with extractToFileNamed().
+    if($member->extractToFileNamed($newFileName)) {
+      warn "ERROR: Failed to extract $newFileName.\n";
+      CheckUnzipError($unzipRetVal);
+      die;
+    }
+    utime($member->lastModTime(), $member->lastModTime(), $newFileName);
+    my $newattr = $member->externalFileAttributes() & 0xFFFF;
+    Win32::File::SetAttributes($newFileName, $newattr); # reapply win32 attrs
+  }
+}
+
+sub Unzip {
+  my $zipName = shift;
+  my $destinationPath = shift;
+  my $verbose = shift;
+  my $overwrite = shift || '';
+  
+  $overwrite = '-o' if $overwrite eq '1'; # Some callers to this method may send a boolean value rather then an unzip option
+  
+  if ($verbose) {
+    print "Unpacking ";
+    if ($overwrite) {
+      print "[in overwrite mode] ";
+    }
+    print "$zipName...\n";
+  }
+
+  my $v;
+  if ($verbose == 0) {
+    $v = "-qq";
+  }
+  elsif ($verbose == 1) {
+    $v = "-q";
+  }
+  if ($verbose > 1) {
+    $v = "";
+  }
+
+  # Here we check that the files in the zip file are not so long they can not be unpacked
+  my $zip = Archive::Zip->new($zipName);
+  my @members = $zip->members();
+
+  foreach my $member (@members) {
+    my $fileName = File::Spec->catdir('\.', $destinationPath, $member->fileName());
+    CheckPathLength($fileName);
+  }
+
+  MakeDir($destinationPath);
+  
+  # prepare command
+  my $cmd = "unzip $overwrite $v $zipName -d $destinationPath 2>&1";
+  
+  # run $cmd, fetching io handles for it
+  my $pid = open2(\*IN, \*OUT, $cmd);
+  
+  # one character per read
+  local $/ = \1;
+  
+  # command output line buffer
+  my $line = '';
+  
+  while (<IN>) {
+    # accumulate line data
+    $line .= $_;
+    
+    # look for expected output
+    if ($line =~ /^(?:(replace).*\[r\]ename|new name): $/) {
+      # dump line buffer so user can read prompt
+      print $line and $line = '';
+      
+      # read whole lines for user response
+      local $/ = "\n";
+      
+      # read user's response
+      chomp(my $response = <STDIN>);
+      
+      if (defined $1) { # matched "replace"
+	# set overwrite mode if the user chooses to replace [A]ll
+	$overwrite = '-o' if $response =~ /^A/;
+	
+	# set no-overwrite mode if the user chooses to replace [N]one
+	$overwrite = '-n' if $response =~ /^N/;
+      }
+      
+      # convey response to the command
+      print OUT "$response\n";
+    }
+    
+    # dump line buffer at EOL
+    print $line and $line = '' if $line =~ /\n$/;
+  }
+  
+  close (OUT);
+  close (IN);
+  
+  waitpid($pid,0);
+
+  CheckUnzipError($?);  
+  
+  return $overwrite;
+}
+
+sub CheckUnzipError {
+  my $retval = shift;
+  $retval = $retval >> 8;
+  # Error numbers found in unzip (Info-ZIP) source code: there doesn't
+  # seem to be a manual. Common with return values from PKZIP so
+  # unlikely to change
+  # Error 1 is just a warning, so we only care about those > 1
+  die "Unzip reported an out-of-memory error ($retval)\n" if ($retval>3 && $retval<9);
+  die "Unzip reported a problem with the zip file ($retval)\n" if ($retval>1 && $retval<4);
+  die "Unzip reported disk full (though this might mean it's trying to overwrite files in use) ($retval)\n" if ($retval==50);
+  die "Unzip reported error code ($retval)" if ($retval>1 && $retval<52);
+  warn "Warning: Unzip returned an unexpected error code ($retval)\n" if ($retval >51)
+}
+
+sub UnzipSingleFile {
+  my $zipName = shift;
+  my $file = shift;
+  my $destinationPath = shift;
+  my $verbose = shift;
+  my $overwrite = shift;
+  my $comp = shift;
+  
+  unless (defined $overwrite) {
+    $overwrite = 0;
+  }
+
+  if ($verbose) {
+    print "Unpacking ";
+    if ($overwrite) {
+      print "[in overwrite mode] ";
+    }
+    print "\"$file\" from \"$zipName\"...\n";
+  }
+
+
+  my $v;
+  if ($verbose == 0) {
+    $v = "-qq";
+  }
+  elsif ($verbose == 1) {
+    $v = "-q";
+  }
+  if ($verbose > 1) {
+    $v = "";
+  }
+
+  my $o = "";
+  if ($overwrite) {
+    $o = "-o";
+  }
+
+  MakeDir($destinationPath);
+  my $retval = system(UnzipPath()." $o $v \"$zipName\" \"$file\" -d \"$destinationPath\"");
+
+  unless (-e ConcatenateDirNames($destinationPath, $file)) {
+    #Fallback to using archive::zip
+    print "Unable to extract $file using unzip. Trying alternative extraction method...\n";
+    
+    my $zip = GetArchiveZipObject($zipName, $comp);
+
+    my $fileWithForwardSlashes = $file;
+    $fileWithForwardSlashes =~ s/\\/\//g; # Archive::Zip stores file names with forward slashes
+  
+    my $member = $zip->memberNamed($fileWithForwardSlashes);
+    
+    if (!defined $member) {
+      # Archive::Zip is also case-sensitive.  If it doesn't find the required file we compile the filename into
+      # a case insensitive regex and try again.  This takes longer than just calling memberNamed.
+      my $fileNameRegEx = qr/$fileWithForwardSlashes/i;
+      ($member) = $zip->membersMatching($fileNameRegEx);
+      
+      # If it still can't find the file then it doesn't exist in the zip file
+      if (!defined $member) {
+        warn "Unable to find $file in $zipName\n";
+        CheckUnzipError($retval);
+        die;
+      }
+    }
+  
+    ExtractFile($destinationPath, $file, $member, 0, $overwrite, $verbose, $retval);
+    print "Successfully extracted $file\n";
+  }
+}
+
+sub ListZip {
+  my $zipName = shift;
+  my @list;
+
+  my $zipper = Archive::Zip->new();
+  unless ($zipper->read($zipName) == AZ_OK) {
+    die "Error: problem reading \"$zipName\"\n";
+  }
+
+  my @members = $zipper->members();
+  foreach my $thisMember (@members) {
+    my $file = $thisMember->fileName();
+    TidyFileName(\$file);
+    unless ($file =~ /^\\/) {
+      $file = "\\$file";
+    }
+    push (@list, $file);
+  }
+
+  return \@list;
+}
+
+sub CheckZipFileContentsNotPresent {
+  my $zipName = shift;
+  my $where = shift;
+  my $iniData = shift;
+  my $checkFailed = 0;
+  foreach my $thisFile (@{ListZip($zipName)}) {
+    if ($thisFile =~ /\\$/) {
+      next;
+    }
+    my $fullName = ConcatenateDirNames($where, $thisFile);
+
+    if($iniData->HasMappings()){
+      $fullName = $iniData->PerformMapOnFileName($fullName);
+    }
+
+	if ($fullName =~ /distribution\.policy$/i) {
+	  return $checkFailed;
+	}
+
+    if (-e $fullName) {
+      print "Error: \"$fullName\" would be overwritten by unpacking \"$zipName\"\n";
+      $checkFailed = 1;
+    }
+  }
+  return $checkFailed;
+}
+
+sub SignificantZipDir {
+  my $zipName = shift;
+
+  my $zipper = Archive::Zip->new();
+  unless ($zipper->read($zipName) == AZ_OK) {
+    die "Error: problem reading \"$zipName\"\n";
+  }
+
+  my %dirs;
+  my @members = $zipper->members();
+  foreach my $thisMember (@members) {
+    my $file = $thisMember->fileName();
+    my $dir = lc(dirname($file));
+    TidyFileName(\$dir);
+    unless (exists $dirs{$dir}) {
+      $dirs{$dir} = 1;
+    }
+  }
+
+  my @dirs = sort keys %dirs;
+  return CommonDir(\@dirs);
+}
+
+# Given an array of directories, find the common directory they share.
+sub CommonDir {
+  my $dirs = shift;
+  my $disectedDirs = DisectDirs($dirs);
+  my $numDirs = scalar @$dirs;
+  if ($numDirs == 1) {
+	# if there is only one signifigant directory then this has to be
+	# the common one so return it.
+	return $dirs->[0];
+  }
+  my $commonDir = '';
+  my $dirLevel = 0;
+  while (1) {
+    my $toMatch;
+    my $allMatch = 0;
+    for (my $ii = 0; $ii < $numDirs; ++$ii, ++$allMatch) {
+      if ($dirLevel >= scalar @{$disectedDirs->[$ii]}) {
+        $allMatch = 0;
+        last;
+      }
+      if (not $toMatch) {
+        $toMatch = $disectedDirs->[0][$dirLevel];
+      }
+      elsif ($disectedDirs->[$ii][$dirLevel] ne $toMatch) {
+        $allMatch = 0;
+        last;
+      }
+    }
+    if ($allMatch) {
+      if ($toMatch =~ /^[a-zA-Z]:/) {
+        $commonDir .= $toMatch;
+      }
+      else {
+        $commonDir .= "\\$toMatch";
+      }
+      ++$dirLevel;
+    }
+    else {
+      last;
+    }
+  }
+  return $commonDir;
+}
+
+sub DisectDirs {
+  my $dirs = shift;
+  my $disectedDirs;
+  my $numDirs = scalar @$dirs;
+  for (my $ii = 0; $ii < $numDirs; ++$ii) {
+    my $thisDir = $dirs->[$ii];
+    $thisDir =~ s/^\\//; # Remove leading backslash to avoid first array entry being empty.
+    my @thisDisectedDir = split(/\\/, $thisDir);
+    push (@$disectedDirs, \@thisDisectedDir);
+  }
+  return $disectedDirs;
+}
+
+sub CheckExists {
+  my $file = shift;
+  unless (-e $file) {
+    die "Error: $file does not exist\n";
+  }
+}
+
+sub CheckIsFile {
+  my $file = shift;
+  unless (-f $file) {
+    die "Error: $file is not a file\n";
+  }
+}
+
+sub CurrentDriveLetter {
+  my $drive = Win32::GetCwd();
+  $drive =~ s/^(\D:).*/$1/;
+  return $drive;
+}
+
+sub InitialiseTempDir {
+  my $iniData = shift;
+  
+  if (defined $iniData->TempDir) {
+    $tempDir = mkdtemp($iniData->TempDir().'\_XXXX');
+  }
+  else {
+    my $fstempdir = File::Spec->tmpdir;
+    $fstempdir =~ s/[\\\/]$//;
+    $tempDir = mkdtemp($fstempdir.'\_XXXX');
+  }
+  
+  die "Error: Problem creating temporary directory \"$tempDir\": $!\n" if (!$tempDir);
+}
+
+sub RemoveTempDir {
+  die unless $tempDir;
+  rmtree $tempDir or die "Error: Problem emptying temporary directory \"$tempDir\": $!\n";
+  undef $tempDir;
+}
+
+sub TempDir {
+  die unless $tempDir;
+  return $tempDir;
+}
+
+sub ToolsVersion {
+  my $relPath = shift;
+  unless (defined $relPath) {
+    $relPath = '';
+  }
+  my $file = "$FindBin::Bin/$relPath" . 'version.txt';
+  open (VER, $file) or die "Error: Couldn't open \"$file\": $!\n";
+  my $ver = <VER>;
+  chomp $ver;
+  close (VER);
+  return $ver;
+}
+
+sub QueryPassword {
+  unless ($console) {
+    $console = Win32::Console->new(STD_INPUT_HANDLE);
+  }
+  my $origMode = $console->Mode();
+  $console->Mode(ENABLE_PROCESSED_INPUT);
+  my $pw = '';
+  my $notFinished = 1;
+  while ($notFinished) {
+    my $char = $console->InputChar();
+    if ($char and $char eq "\r") {
+      print "\n";
+      $notFinished = 0;
+    }
+    elsif ($char and $char eq "\b") {
+      if ($pw) {
+	$pw =~ s/.$//;
+	print "\b \b";
+      }
+    }
+    else {
+      $pw .= $char;
+      print '*';
+    }
+  }
+  $console->Mode($origMode);
+  return $pw;
+}
+
+sub PrintDeathMessage {
+  my $exitCode = shift;
+  my $msg = shift;
+  my $relPath = shift;
+  
+  my $ver = ToolsVersion($relPath);
+  print "$msg\nLPD Release Tools version $ver\n";
+  exit $exitCode;
+}
+
+sub PrintTable {
+  my $data = shift;
+  my $doHeading = shift;
+
+  require IniData;
+  my $iniData = New IniData;
+  my $tf = $iniData->TableFormatter;
+  $tf->PrintTable($data, $doHeading);
+}
+
+sub QueryUnsupportedTool {
+  my $warning = shift; # optional
+  my $reallyrun = shift; # optional - value of a '-f' (force) flag or similar
+  return if $reallyrun;
+
+  $warning ||= <<GUILTY;
+Warning: this tool is unsupported and experimental. You may use it, but there
+may be defects. Use at your own risk, and if you find a problem, please report
+it to us. Do you want to continue? (y/n)
+GUILTY
+
+  print $warning."\n";
+  my $resp = <STDIN>;
+  chomp $resp;
+  die "Cancelled. You typed \"$resp\".\n" unless $resp =~ m/^y/i;
+}
+
+sub CompareVers($$) {
+  my ($version1, $version2) = @_;
+
+  # New format or old format?
+  my $style1 = (($version1 =~ /^(\d+\.\d+)/) and ($1 >= 2.8));
+  my $style2 = (($version2 =~ /^(\d+\.\d+)/) and ($1 >= 2.8));
+
+  # Validate version strings
+  if ($style1 == 1) {
+    $version1 = ValidateNewFormatVersion($version1);
+  } else {
+    ValidateOldFormatVersion($version1);
+  }
+
+  if ($style2 == 1) {
+    $version2 = ValidateNewFormatVersion($version2);
+  } else {
+    ValidateOldFormatVersion($version2);
+  }
+
+  # Compare version strings
+  if ($style1 != $style2) {
+    return $style1-$style2; # New format always beats old format
+  } else  {
+    return CompareVerFragment($version1, $version2);
+  }
+}
+
+sub ValidateOldFormatVersion($) {
+  my ($version) = @_;
+
+  if (($version !~ /^\d[\.\d]*$/) or ($version !~ /\d$/)) {
+    die "Error: $version is not a valid version number\n";
+  }
+  
+  return $version;
+}
+
+sub ValidateNewFormatVersion($) {
+  my ($version) = @_;
+  
+  my $ver; 
+  if ($version !~ /^(\d+\.\d+)\.(.+)$/) {
+    die "Error: $version is not a valid version number; patch number must be given\n";
+  } else {
+    $ver = $1;
+    my $patch = $2;
+    
+    if (($patch =~ /^\d*$/) and ($patch > 9999)) {
+      die "Error: Version number $version has an invalid patch number\n";
+      
+    } elsif ($patch =~ /\./) {
+      die "Error: Version number $version has an invalid patch number\n";
+      
+    }
+  }
+  
+  return $ver; # Return significant version number only
+}
+
+sub CompareVerFragment($$) {
+  # 1.xxx = 01.xxx, while .1.xxx = .10.xxx
+  my ($frag1, $frag2) = @_;
+
+  my $isfrag1 = defined($frag1) ? 1 : 0;
+  my $isfrag2 = defined($frag2) ? 1 : 0;
+
+  my $compare;
+
+  if ($isfrag1 and $isfrag2) {
+    my ($rest1, $rest2);
+
+    $frag1=~s/^(\.?\d+)(\..*)$/$1/ and $rest1=$2; # If pattern fails, $rest1 is undef
+    $frag2=~s/^(\.?\d+)(\..*)$/$1/ and $rest2=$2;
+
+    $compare = $frag1-$frag2; # Numeric comparison: .1=.10 but .1>.01
+
+    if ($compare == 0) {
+      $compare = &CompareVerFragment($rest1, $rest2);
+    }
+  }
+  else {
+    $compare = $isfrag1-$isfrag2;
+  }
+  return $compare;
+}
+
+sub ClassifyPath {
+  my $iniData = shift;
+  my $path = shift;
+  if (!WithinSourceRoot($path)){
+   $path = Utils::PrependSourceRoot($path);
+  }
+  my $verbose = shift;
+  my $logDistributionPolicyErrors = shift; # 0 = no, 1 = yes
+  my $component = shift;
+
+  if ($verbose) {
+    print "Finding category of source file $path...\n";
+  }
+  
+  Utils::TidyFileName(\$path);
+  
+  my $cat = '';
+  my $errors = [];
+  
+  my $symbianIPR = Symbian::IPR->instance($iniData->UseDistributionPolicyFilesFirst(), $iniData->DisallowUnclassifiedSource(), 'MRPDATA', $verbose, $logDistributionPolicyErrors);
+  $symbianIPR->PrepareInformationForComponent($component);
+  eval {($cat, $errors) = $symbianIPR->Category($path)};
+  
+  if ($@) {
+    print $@;
+  }
+
+  if (uc $cat eq "X" and $iniData->DisallowUnclassifiedSource()) {
+    die "Error: \"$path\" contains unclassified source code\n";
+  }
+
+  if ($verbose) {
+    print "ClassifySource for $path: returning cat $cat";
+    if (scalar (@$errors) > 0) {
+      print " and errors @$errors";
+    }
+    print "\n";
+  }
+  
+  return uc($cat), $errors; # copy of $errors
+}
+
+sub ClassifyDir {
+  return ClassifyPath(IniData->New(), @_);  
+}
+
+sub ClassifySourceFile {
+  return ClassifyPath(@_);
+}
+
+sub CheckForUnicodeCharacters {
+  my $filename = shift;
+  
+  # Unicode characters in filenames are converted to ?'s 
+  $filename =~ /\?/ ? return 1 : return 0; 
+}
+
+sub CheckIllegalVolume {
+  my $iniData = shift;
+  
+  my ($volume) = File::Spec->splitpath(cwd());
+  $volume =~ s/://; # remove any : from $volume
+  
+  # Check that the environment is not on an illegal volume - INC105548
+  if (grep /$volume/i, $iniData->IllegalWorkspaceVolumes()) {
+    die "Error: Development is not permitted on an excluded volume: " . (join ',', $iniData->IllegalWorkspaceVolumes()) . "\n";
+  }
+}
+sub ListAllFiles {
+  my $directory = shift;
+  my $list = shift;
+  find(sub { push @{$list}, $File::Find::name if (! -d);}, $directory);
+}
+
+sub CheckPathLength {
+  my $path = shift;
+
+  if (length($path) > MAX_OS_PATH_LENGTH) {
+    my $extraMessage = '';
+    
+    if ($tempDir && $path =~ /^\Q$tempDir\E/) {
+      $extraMessage = "\nThe folder you are extracting to is under your temp folder \"$tempDir\". Try reducing the size of your temp folder by using the temp_dir <folder> keyword in your reltools.ini file.";
+    }
+    
+    die "Error: The path \"$path\" contains too many characters and can not be extracted.$extraMessage\n"; 
+  }  
+}
+
+sub GetArchiveZipObject {
+  my $zipName = shift;
+  my $comp = lc(shift);
+  
+  my $zip;
+  
+  if ($comp) { # If $comp is defined then we need to cache Archive::Zip objects by component
+    if (exists $zipFileCache{$comp}) {
+      if (defined $zipFileCache{$comp}->{$zipName}) {
+        $zip = $zipFileCache{$comp}->{$zipName};
+      }
+      else {
+	$zip = Archive::Zip->new($zipName);
+	$zipFileCache{$comp}->{$zipName} = $zip;
+      }
+    }
+    else { # New component
+      %zipFileCache = (); # Delete the cache as it is no longer required
+      $zip = Archive::Zip->new($zipName);
+      $zipFileCache{$comp}->{$zipName} = $zip;
+    }
+  }
+  else {
+    $zip = Archive::Zip->new($zipName);
+  }
+  
+  return $zip;
+}
+
+sub CheckDirectoryName {
+  my $dirName = shift;
+  
+  my @dirParts = split /[\\\/]/, $dirName;
+  
+  foreach my $dirPart (@dirParts) {
+    next if ($dirPart =~ /^\w:$/ && $dirName =~ /^$dirPart/);
+    
+    if ($dirPart =~ /[:\?\*\"\<\>\|]/) {
+      die "Error: The directory \"$dirName\" can not contain the characters ? * : \" < > or |\n";
+    }
+  }
+}
+
+
+1;
+
+__END__
+
+=head1 NAME
+
+Utils.pm - General utility functions.
+
+=head1 INTERFACE
+
+=head2 StripWhiteSpace
+
+Expects a reference to a string. Strips white space off either end of the string.
+
+=head2 TidyFileName
+
+Expects a reference to a string. Changes any forward slashes to back slashes. Also changes "\.\" and "\\" to "\" (preserving the "\\" at the start of UNC paths). This is necessary to allow effective comparison of file names.
+
+=head2 AbsoluteFileName
+
+Expects a reference to a string containing a file name. Modifies the string to contain the corresponding absolute path version of the file name (without the drive letter). For example, the string ".\test.txt" would generate a return value of "\mydir\test.txt", assuming the current directory is "\mydir".
+
+=head2 AbsolutePath
+
+Expects a reference to a string containing a path. Modifies the string to contain the corresponding absolute path (without the drive letter).
+
+=head2 FileModifiedTime
+
+Expects a filename, returns C<stat>'s last modified time. If there's a problem getting the stats for the file, an C<mtime> of zero is returned.
+
+=head2 FileSize
+
+Expects a filename, returns the file's size.
+
+=head2 FileModifiedTimeAndSize
+
+Expects a filename. Returns a list containing the file's last modified time and size.
+
+=head2 SetFileReadOnly
+
+Expects to be passed a file name. Sets the file's read only flag.
+
+=head2 SetFileWritable
+
+Expects to be passed a file name. Clear the file's read only flag.
+
+=head2 SplitFileName
+
+Expects to be passed a file name. Splits this into path, base and extension variables (returned as a list in that order). For example the file name C<\mypath\mybase.myextension> would be split into C<mypath>, C<mybase> and C<.myextension>. An empty string will be returned for segments that don't exist.
+
+=head2 SplitQuotedString
+
+Expects to be passed a string. Splits this string on whitespace, ignoring whitespace between quote (C<">) characters. Returns an array containing the split values.
+
+=head2 ConcatenateDirNames
+
+Expects to be passed a pair of directory names. Returns a string that contains the two directory names joined together. Ensures that there is one (and only one) back slash character between the two directory names.
+
+=head2 MakeDir
+
+Expects to be passed a directory name. Makes all the directories specified. Can copy with UNC and DOS style drive letter paths.
+
+=head2 ReadDir
+
+Expects to be passed a directory name. Returns an array of file names found within the specified directory.
+
+=head2 ReadGlob
+
+Expects to be passed a scalar containing a file name. The file name path may relative or absolute. The file specification may contains C<*> and/or C<?> characters. Returns a reference to an array of file names that match the file specification.
+
+=head2 SignificantDir
+
+Expects to be passed a directory name. Returns the name of the deepest sub-directory that contains all files.
+
+=head2 CrossCheckDirs
+
+Expects to be passed a pair of directory names. Checks that the contents of the directories are identical as regards file names, their last modified times and their size. Returns false if any checks fail, otherwise true.
+
+=head2 ZipList
+
+Expects to be passed a zip filename and a reference to a list of file to be put into the zip file. The zip filename may contain a full path - missing directories will be created if necessary.
+
+=head2 Unzip
+
+Expects to be passed a zip filename, a destination path, a verbosity level, and optionally a flag indicating whether exisitng files should be overwritten or not. Unpacks the named zip file in the specified directory.
+
+=head2 UnzipSingleFile
+
+Expects to be passed a zip filename, a filename to unpack, a destination path, a verbosity level, and optionally a flag indicating whether existing files should be overwritten or not. Unpacks only the specified file from the zip file into the specified directory.
+
+=head2 ListZip
+
+Expects to be passed a zip filename. Returns a reference to a list containing the names of the files contained in the zip file.
+
+=head2 CheckZipFileContentsNotPresent
+
+Expects to be passed a zip filename and a destination path. Prints errors to C<STDOUT> for each file contained within the zip that would overwrite an existing file in the destination path. Returns true if any errors were printed, false otherwise.
+
+=head2 SignificantZipDir
+
+Expects to be passed a zip filename. Returns the name of the deepest sub-directory that contains all the files within the zip.
+
+=head2 CheckExists
+
+Expects to be passed a filename. Dies if the file is not present.
+
+=head2 CheckIsFile
+
+Expects to be passed a filename. Dies if the filename isn't a file.
+
+=head2 CurrentDriveLetter
+
+Returns a string containing the current drive letter and a colon.
+
+=head2 InitialiseTempDir
+
+Creates an empty temporary directory.
+
+=head2 RemoveTempDir
+
+Removes the temporary directory (recursively removing any other directories contained within it).
+
+=head2 ToolsVersion
+
+Returns the current version of the release tools. This is read from the file F<version.txt> in the directory the release tools are running from.
+
+=head2 QueryPassword
+
+Displays the user's input as '*' characters. Returns the password.
+
+=head2 PrintDeathMessage
+
+Expects to be passed a message. Dies with the message plus details of the current tools version.
+
+=head2 PrintTable
+
+Expects to be passed a reference to a two dimentional array (a reference to an array (the rows) of referrences to arrays (the columns)). May optionally be passed a flag requesting that a line break be put between the first and second rows (useful to emphasise headings). Prints the data in a left justified table.
+
+=head2 TextTimeToEpochSeconds
+
+Convert a human readable time/date string in the format generated by C<scalar localtime> into the equivalent number of epoch seconds.
+
+=head2 TextDateToEpochSeconds
+
+Convert a date string in the format C<dd/mm/yyyy> into the equivalent number of epoc seconds.
+
+=head2 QueryUnsupportedTool
+
+Warns the user that the tool is unsupported, and asks whether they wish to continue. Takes two parameters, both optional. The first is the text to display (instead of a default). It must finish with an instruction asking the user to type y/n. The second is an optional flag for a 'force' parameter.
+
+=head2 CompareVers
+
+Takes two version numbers in the form of a dot separated list of numbers (e.g 2.05.502) and compares them, returning 0 if they are equivalent, more than 0 if the first version given is greater or less than 0 if the first version is lesser. Dies if versions are not of the required format.
+
+=head2 CompareVerFragment
+
+The main code behind C<CompareVers()>. This is not meant to be called directly because it assumes version numbers only consist of numbers and dots.
+
+=head2 ZipSourceList
+
+Expects to be passed a zip filename and a reference to a list of source files to be put into the zip file.
+
+=head2 UnzipSource
+
+Expects to be passed a source zip filename, a destination path, a verbosity level, a flag indicating whether existing files should be overwritten or not, an inidata and a flag indicating whether this operation is for a validation or not. Unpacks the named source zip file to the specified directory. If for validation, a check for change in category occurs. Returns a change in category flag, when flag is 1 a change in category has been found.
+
+=head2 ExtractFile
+
+Expects to be passed a destination path, a file name, a member and a flag indicating whether existing files should be overwritten or not. Is used to extract a file from a zip file to a specified location.
+
+=head2 ClassifySourceFile
+
+Expects to be passed an iniData, a source filename, a verbosity level, and log error flag. Is used to calculate the category of the source file passed. Returns the category calculated.
+
+=head2 ListAllFiles
+
+Expects to be passed a directory path and an array reference. Lists all files from the directory specified and sub directories into an array reference. Entries in the array contain full path of the file, not just file name.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/ValidateEnv	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,143 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'ValidateEnv');
+my $verbose = 0;
+my $validatesource = 0;
+my $fullbincheck = 0;
+my $comp;
+my $ver;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+ValidateEnv();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");  my $help;
+  GetOptions("h" => \$help, "v+" => \$verbose, "s" => \$validatesource, "f" => \$fullbincheck);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $comp = shift @ARGV;
+  $ver = shift @ARGV;
+
+  unless ($#ARGV == -1) {
+    print "Error: Invalid number of arguments\n";
+    Usage(1);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: validateenv [options] [<component> <version>]
+
+options:
+
+-h  help
+-v  verbose output (-vv very verbose)
+-s  validate source code too
+-f  fully check for added binaries (can be very slow)\n");
+}
+
+sub ValidateEnv {
+  my $iniData = IniData->New();
+  my $envDb = EnvDb->Open($iniData, $verbose);
+  my $failedMrps = $envDb->ValidateEnv($comp, $ver, $validatesource, $fullbincheck);
+  my $numFailedMrps = scalar(@$failedMrps);
+  unless ($numFailedMrps == 0) {
+    print "\nThe following component(s) failed their validation:\n\n";
+    foreach my $mrp (@$failedMrps) {
+      print "$mrp\n";
+    }
+    print "\n";
+  }
+}
+
+__END__
+
+=head1 NAME
+
+ValidateEnv - Validates the integrity of all the binaries in the current environment.
+
+=head1 SYNOPSIS
+
+  validateenv [options] [<component> <version>]
+
+options:
+
+  -h  help
+  -v  verbose output (-vv very verbose)
+  -s  also validate source code
+  -f  fully check for added binaries
+
+=head1 DESCRIPTION
+
+C<ValidateEnv> is intended to be used on a drive that contains the output of a clean build. It is assumed that the drive has been populated using C<GetRel> or C<GetEnv>. This is important since C<ValidateEnv> needs to know the version of each component installed on the drive - it gets this information from the drive's environment Database. Its role is to establish the status of each component by comparing the released binary files against those present in the current environment. The comparison is done using the tool C<EValid> which ignores irrelevant differences (such as those in header blocks). Components with a status of I<pending release> will be ignored. Components that pass their validation will have their status set to I<clean> and a new signature file written. Components that fail their validation will have their status set to I<dirty>.
+
+You may also give a -s flag to indicate that you want to validate the source code. This is useful because in some cases the source code may change, without the binary files changing. (For example, a change of distrubution.policy). If this validation fails, but the binary validation succeeds, the status will be set to I<binaries clean, source dirty>. Only source code in the release packet will be validated - source files missing from the release packets will not be detected.
+
+By default C<ValidateEnv> validates against the component version installed in current environment, however instead you can specify a different environment by referring to the component and version of it. This can only be done if the current environment database is empty. This facility was designed to allow builds delivered without using the release tools to be analysed and subsequently delivered using the release tools. It effectively allows you to construct an environment database by comparing the binaries on the current drive with another environment. Components that pass the validation will have their status set to clean and a signature file written. Components that fail their validation will have their status set to dirty and a dummy signature file written. This will contain the name of each binary previously released, with zero time stamp and size. This signature will never match the files on the drive and so will cause C<EnvInfo> to correctly find the component as dirty.
+
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/ValidateEnv.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/ValidateRel	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,187 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'ValidateRel');
+my $verbose = 0;
+my $validatesource = 0;
+my $fullbincheck = 0;
+my $keeptemp;
+my @comps;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+ValidateRel();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions("h" => \$help, "v+" => \$verbose, "s" => \$validatesource, "t" => \$keeptemp, "f" => \$fullbincheck);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  if ($#ARGV == 0) {
+    if (-f $ARGV[0]) {
+      open IN, $ARGV[0] or die "Error: Couldn't open $ARGV[0] for reading: $!\n";
+      while (my $line = <IN>) {
+        chomp $line;
+        $line =~ s/^\s*$//; #remove lines entirely filled with white space
+        $line =~ s/#.*//; #remove comments from lines
+		$line =~ s/^\s*//; #remove whitespace from the start of lines
+        if ($line eq '') {
+          next; #Nothing left
+        }
+		my @cmdLine = split(/\s+/,$line);
+		my $cmdLineCount = @cmdLine;
+		my %relStruct;
+		if($cmdLineCount > 0) {
+			$relStruct{name} = $cmdLine[0];
+			if($cmdLineCount > 1) {
+				$relStruct{ver} = $cmdLine[1];
+			}
+			push @comps, \%relStruct;
+		}
+      }
+    close IN;
+    }
+    else {
+      push @comps, {name => $ARGV[0]};
+    }
+  }
+  elsif ($#ARGV == 1) {
+    # Both component and version are specified
+    push @comps, {name => $ARGV[0],
+                  ver  => $ARGV[1]};    
+  }
+  else {
+    print "Error: Invalid number of arguments\n";
+    Usage(1);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: validaterel [options] (<component> [<version>]) | <component_list_file>
+
+options:
+
+-h  help
+-v  verbose output (-vv very verbose)
+-s  validate source code too
+-f  fully check for added binaries (can be very slow)
+-t  don't delete the temporary directory
+");
+}
+
+sub ValidateRel {
+  my $iniData = IniData->New();
+  my $envDb = EnvDb->Open($iniData, $verbose);
+ 
+  foreach my $comp (@comps) {
+	my $version;	
+	if(exists($comp->{ver})) {
+		$version = $comp->{ver};
+	}
+	else {
+		$version = $envDb->Version($comp->{name});
+	}
+
+	if(defined $version) {
+		$envDb->ValidateComp($comp->{name}, $version, undef, $validatesource, $keeptemp, $fullbincheck);
+	}
+    else {
+      print $comp->{name}." not installed\n";
+    }
+  }
+}
+
+__END__
+
+=head1 NAME
+
+ValidateRel - Validates the integrity of the installed binaries of a given component.
+
+=head1 SYNOPSIS
+
+  validaterel [options] (<component> [<version>]) | <component_list_file>
+
+options:
+
+  -h  help
+  -v  verbose output (-vv very verbose)
+  -s  validate source code too
+  -f  fully check for added binaries
+  -t  keep temporary directory
+
+=head1 DESCRIPTION
+
+Unpacks the binaries of the specified version of the component to a temporary directory (if a version is not specified, the version of the component that was originally installed in the environment is retrieved from the environment database). It then compares them with the binaries in the current drive's F<\epoc32> tree using the standard EPOC tool C<EValid>. Reports the status of the component as a result of the validation. This will be I<clean> if the validation passed, I<dirty> if the validation failed, or I<pending release> if the component was already pending release. If the component passes its validation and the version is the same as the one present in the environment database, its signature file in F<\epoc32\relinfo> will be updated.
+
+You may also give a -s flag to indicate that you want to validate the source code. This is useful because in some cases the source code may change, without the binary files changing. (For example, a change of distrubution.policy). If this validation fails, but the binary validation succeeds, the status will be set to I<binaries clean, source dirty>. Only source code in the release packet will be validated - source files missing from the release packets will not be detected.
+
+A list of component names stored in a text file may be passed to validaterel to validate multiple components.
+
+With the -t flag, you will be told where the temporary directory was. You
+can then use that to investigate validation failures with evalid.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/ValidateRel.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/ViewNotes	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,250 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use RelData;
+use EnvDb;
+use NotesCompiler;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'ViewNotes');
+my $comp1;
+my $ver1;
+my $comp2;
+my $ver2;
+my $compSummary;
+my $envSummary;
+my $diffEnvSummary;
+my $projectFilter;
+my $numberFilter;
+my $outputLocation;
+my $outputSTDOUTonly;
+my $htmlNotes="";
+#
+# Main.
+#
+
+ProcessCommandLine();
+
+if ($htmlNotes eq "") {
+  # User didn't specify --html or --nohtml
+  $htmlNotes = $iniData->HtmlNotes();
+}
+my $notesCompiler = NotesCompiler->New($iniData, $comp1, $ver1, $verbose, $outputLocation, $outputSTDOUTonly, $htmlNotes);
+$notesCompiler->SetProjectFilter($projectFilter);
+$notesCompiler->SetVersionNumberFilter($numberFilter);
+if ($compSummary) {
+  if ($outputSTDOUTonly) {
+    die "Error: Cannot use -s with -t\n";
+    Usage(1);
+  }
+  $notesCompiler->DoCompSummary();
+}
+elsif ($envSummary or (not $comp1 and not $ver1)) {
+  if ($outputSTDOUTonly && $envSummary) {
+    die "Error: Cannot use -e with -t\n";
+    Usage(1);
+  }
+  elsif ($outputSTDOUTonly and (not $comp1 and not $ver1)){
+    die "Error: When using the -t flag, either <component> or <version> (or both) must be specified\n";
+    Usage(1);
+  }
+  
+  $notesCompiler->DoEnvSummary();
+}
+elsif ($diffEnvSummary) {
+  $notesCompiler->DoDiffEnvSummary($comp2, $ver2);
+}
+else {
+  $notesCompiler->DoStandardNotes();
+}
+if ($outputLocation) {
+  print "LAUNCH LOCATION: ".$notesCompiler->HtmlMainFile();
+}
+elsif (!$outputSTDOUTonly){
+  system "start ".$notesCompiler->HtmlFileName();
+}
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions('h' => \$help, 'e' => \$envSummary, 's' => \$compSummary, 'v+' => \$verbose, 'd' => \$diffEnvSummary, 'p=s' => \$projectFilter, 'n=s' => \$numberFilter, 'o=s' => \$outputLocation, 't' => \$outputSTDOUTonly, 'html!' => \$htmlNotes);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $comp1 = shift @ARGV;
+  $ver1 = shift @ARGV;
+  $comp2 = shift @ARGV;
+  $ver2 = shift @ARGV;
+
+  if (@ARGV) {
+    print "Error: Invalid arguments\n";
+    Usage(1);
+  }
+
+  if (defined ($compSummary) + defined ($envSummary) + defined ($diffEnvSummary) > 1) {
+    print "Error: Incompatible options\n";
+    Usage(1);
+  }
+
+  if ($projectFilter || $numberFilter) {
+    unless ($compSummary || $diffEnvSummary || $envSummary) {
+      print "Error: the -p and -n filters don't make sense if you're just viewing the notes for one release\n";
+      Usage(1);
+    }
+  }
+
+  if ($compSummary) {
+    unless ($comp1) {
+      print "Error: A component must be specified when using the -s option\n";
+      Usage(1);
+    }
+    if ($ver1) {
+      print "Error: Too many arguments\n";
+      Usage(1);
+    }
+  }
+  elsif ($diffEnvSummary) {
+    if ($comp2 && !$ver2) {
+      print "Error: You must specify a version number for each component\n";
+      Usage(1);
+    }
+    unless ($comp1 && $ver1) {
+      print "Error: You must specify a component and version to difference against\n";
+      Usage(1);
+    }
+  }
+  elsif ($comp1 and not $ver1) {
+    SetVersionToCurrent();
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "
+Usage: viewnotes [options] [[-t] <component> [<version>]]
+       viewnotes [options] -s <component>
+       viewnotes [options] -e [<component> [<version>]]
+       viewnotes [options] -d [-t] <component> <version> [<component> <version>]
+
+options:
+
+-h  help
+-s  display a summary all releases made to date for a specified component
+-e  display a summary of all the releases in the specified environment
+-d  display a report of all the changes between two environments
+-v  verbose output (-vv very verbose)
+-t  output HTML directly to STDOUT, without generating a file
+-p <project> only display notes for releases in this project
+-n <version Number> only display notes for releases whose number matches this
+--html   Display notes made using tools v2.83.1013 and earlier as html
+--nohtml Display notes made using tools v2.83.1013 and earlier as plain text
+
+The --html and --nohtml options override the html_notes setting in reltools.ini\n");
+}
+
+sub SetVersionToCurrent {
+  my $envDb = EnvDb->Open($iniData);
+  $ver1 = $envDb->Version($comp1);
+  unless (defined $ver1) {
+    die "Error: $comp1 not installed in current environment\n";
+  }
+}
+
+
+
+=head1 NAME
+
+ViewNotes - View the release notes of a component release.
+
+=head1 SYNOPSIS
+
+       viewnotes [options] [[-t] <component> [<version>]]
+       viewnotes [options] -s <component>
+       viewnotes [options] -e [<component> [<version>]]
+       viewnotes [options] -d [-t] <component> <version> [<component> <version>]
+       
+options:
+
+  -h  help
+  -s  display a summary all releases made to date for a specified component
+  -e  display a summary of all the releases in the specified environment
+  -d  display a report of all the changes between two environments
+  -v  verbose output (-vv very verbose)
+  -t  output HTML directly to STDOUT, without generating a file
+  -p <project> only display notes for releases in this project
+  -n <version Number> only display notes for releases whose number matches this
+  --html   Display notes made using tools v2.83.1013 and earlier as html
+  --nohtml Display notes made using tools v2.83.1013 and earlier as plain text
+
+=head1 DESCRIPTION
+
+Launches a web browser to view the HTML release notes of the requested component release. Without C<-s>, C<-e> or C<-d>, it displays the notes for a single component version. If the version is specified, the notes for that component version are displayed. If the version is not specified, the notes for the currently installed component version are displayed. If the version is not specified and the component is currently C<pending release>, the notes for the component are displayed for previewing. 
+
+The C<-s> switch may be used to display a summary of all releases made to date (most recent first). The C<-e> switch displays notes for all the components in the specified environment (or your current environment, if you don't specify one).
+
+The C<-d> switch produces a single page which shows the release notes for all components which have changed between two environments. This page contains the release notes for each changed release, including any intervening releases which may exist on your release archive.
+
+The C<-s>, C<-e> and C<-d> switches all produce information for several releases. In all cases, but especially with C<-d>, you may not want information produced for every release. You can therefore use C<-p> and C<-n> to filter the releases for which you want to see the notes. The C<-n> switch can take a regular expression, so that you can (for example) show only releases starting with a certain phrase.
+
+The C<-t> switch will not create a file, but instead, will output the HTML to STDOUT. The output to STDOUT is useful for viewnotes to be built into other scripts and provides more flexibility in viewing release notes.
+
+The C<--html> and C<--nohtml> switches override the setting of the html_notes keyword in your reltools.ini file.  This setting controls how the text in release notes made using tools version 2.83.1013 and earlier is displayed in a web browser - either as html (allowing tags to be used) or as plain text.  Note that release notes used with newer versions of tools use the <html/> element to specify whether the text is html or not at time of writing, so this setting is ignored with those releases.
+
+(Note: there is also a C<--dummy> switch, which prompts the page to be generated but not displayed in a web browser. This is intended for the use of test scripts).
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/ViewNotes.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/archive_path.txt.ex	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+
+# Miscellaneous components.
+default \\pixieshare\release_archive\misc	/mycompany/pixie/misc
+
+# Components delivered by our company.
+comp1	\\pixieshare\release_archive\mycompany	/mycompany/pixie
+comp2	\\pixieshare\release_archive\mycompany	/mycompany/pixie
+
+# Components delivered by other companies.
+comp3	\\pixieshare\release_archive\company_x	/company_x/pixie
+comp4	\\pixieshare\release_archive\company_y	/company_y/pixie
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/cleanremote	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,330 @@
+#!perl
+# Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use RelData;
+use CommandController;
+use Cleaner;
+use Utils;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $dummyRun = 0;
+my $descriptionFile;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'CleanRemote');
+my $keepAfter;
+my %envsToKeep;
+my %relsToKeep;
+my %relsToClean;
+my @filesToDelete;
+my $remoteSite = $iniData->RemoteSite;
+my $cleaner;
+my $doall = 0; # skips prompting
+my $skipWarnings;
+
+#
+# Main.
+#
+ProcessCommandLine();
+$cleaner = Cleaner->New($iniData, 1, $verbose, 0); # 1 = remote
+$cleaner->SetCleaningSubroutine(\&CleaningSubroutine);
+ParseDescriptionFile($descriptionFile);
+$cleaner->Clean();
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions('h' => \$help, 'd' => \$dummyRun, 'v+' => \$verbose, 'f' => \$skipWarnings);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $descriptionFile = shift @ARGV;
+
+  unless ($descriptionFile) {
+    print "Error: Archive cleaning description file not specified\n";
+    Usage(1);
+  }
+
+  unless ($#ARGV == -1) {
+    print "Error: Invalid number of arguments\n";
+    Usage(1);
+  }
+
+  if ($dummyRun and not $verbose) {
+    $verbose = 1;
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: cleanremote [options] <description_file>
+
+options:
+
+-h  help
+-d  dummy run (don't do anything) - assumes -v
+-f  (deprecated)
+-v  verbose output (-vv very verbose).\n");
+
+}
+
+sub ParseDescriptionFile {
+  if ($verbose) { print "Parsing \"$descriptionFile\"...\n"; }
+  open (DES, $descriptionFile) or die "Unable to open \"$descriptionFile\" for reading: $!\n";
+
+  while (my $line = <DES>) {
+    # Remove line feed, white space and comments.
+    chomp($line);
+    $line =~ s/^\s*$//;
+    $line =~ s/#.*//;
+    if ($line eq '') {
+      # Nothing left.
+      next;
+    }
+
+    my $keyWord;
+    my @operand;
+    if ($line =~ /^(\w+)\s+(.*)/) {
+      $keyWord = $1;
+      @operand = ();
+      if ($2) {
+        @operand = split /\s+/, $2;
+      }
+    } else {
+      $keyWord = $line;
+    }
+
+    unless (defined $keyWord) {
+      die "Error: Invalid line in \"$descriptionFile\":\n$line\n";
+      next;
+    }
+
+    if ($cleaner->ProcessDescriptionLine($descriptionFile, $keyWord, @operand)) {
+      # We're happy because Cleaner.pm knows what to do with this line
+    }
+    elsif ($keyWord =~ /^(?:no_prompt)$/ ) {
+      $doall = 1;    
+    } elsif ($keyWord =~ /^(?:clean_to|expunge)$/ ) {
+      my $msg = "You have accidentally left a \"$keyWord\" keyword in your configuration file. That's appropriate for cleaning local archives, but cleanremote just completely deletes stuff. Do you want to continue?";
+      die unless $cleaner->Query($msg);
+    }
+    else {
+      die "Error: Unknown keyword \'$keyWord\' in \"$descriptionFile\"\n";
+    }
+  }
+
+  close (DES);
+
+  if ($verbose > 1) {
+    $cleaner->PrintEnvsToKeep();
+  }
+}
+
+sub CleaningSubroutine {
+  # This actually gets run by Cleaner.pm (it's a callback)
+  my $thisComp = shift;
+  my $thisVer = shift;
+  my $relDir = shift;
+  print "Cleaning $thisComp $thisVer from $relDir...\n" if ($verbose);
+  unless ($doall) {
+    print "Do it?\n";
+    my $ans = <STDIN>;
+    die "Not doing" unless $ans =~ m/[ay]/i;
+    $doall = 1 if $ans =~ m/a/i;
+  }
+  die "Couldn't delete $relDir because it didn't exist" unless $remoteSite->DirExists($relDir);
+  my $fullfile = "$relDir/$thisComp$thisVer.zip";
+  print "Actually deleting release file $fullfile\n";
+  DeleteFile($fullfile);
+  my @files = @{$remoteSite->DirList($relDir) || []};
+  foreach my $fullfile (@files) {
+    if ($fullfile =~ m/lpdrt\d{5}\.tmp$/) {
+      # Remove temp files older than $keepAfter time
+      my $modifiedTime = $remoteSite->FileModifiedTime($fullfile);
+      my $keepAfter = $cleaner->{keepAfter};
+      if ($modifiedTime and (not defined $keepAfter or $modifiedTime <= $keepAfter)) {
+        print "Actually deleting temp file $fullfile\n";
+        DeleteFile($fullfile);
+      } else {
+        print "Not deleting temp file $fullfile because too new\n";
+      }
+    }
+  }
+  if (!$dummyRun) {
+    # Now check the directory is empty and delete the directory if so
+    @files = @{$remoteSite->DirList($relDir) || []};
+    @files = map { m/.*\/(.*?)$/; $1 } @files;
+    print "Wanting to remove directory $relDir - @files files left in it\n" if ($verbose);
+    DeleteFile($relDir) unless @files;
+  }
+
+  return 1; # This cleaner doesn't currently support returning of any errors
+}
+
+sub DeleteFile {
+  my $file = shift;
+  print "Deleting \"$file\"\n" if ($verbose);
+	eval {
+		$remoteSite->DeleteFile($file) unless ($dummyRun);
+	};
+	if ($@) {
+		print "Warning: Couldn't delete \"$file\" because \"$@\"\n";
+		# Usually because $file is a directory, which turns out not to be
+		# empty.
+	}
+}
+
+__END__
+
+=head1 NAME
+
+CleanRemote - Cleans unwanted releases and files from a remote archive.
+
+=head1 SYNOPSIS
+
+  cleanremote [options] <description_file>
+
+options:
+
+  -h  help
+  -d  dummy run (don't do anything) - assumes -v
+  -f  (deprecated)
+  -v  verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+C<cleanremote> allows releases to be cleaned out of a remote archive. This may be useful if a remote archive is consuming a large amount of disk space and there are old releases present that are no longer required.
+
+B<Warning: C<cleanremote> has the potential to seriously alter the state of a remote archive, and hence seriously damage productivity of all users of the remote archive. Be very careful using it.>
+
+Before using C<cleanremote> you must write a plain text file that describes which releases you want to keep etc. The following keywords are supported:
+
+=over 4
+
+=item keep_env <component> <version>
+
+Instructs C<cleanremote> to keep all the component versions in the environment from which the specified component was released. This keyword may be used multiple times.
+
+=item keep_rel <component> <version>
+
+Instructs C<cleanremote> to keep a specific component release. This keyword may be used multiple times.
+
+=item keep_recent_env <component> <num_days>
+
+Instructs C<cleanremote> to keep all named component releases, including their environments, where the component release has been exported within the specified number of days (since the current time) (note: the export time, rather than release time is used).
+
+It should be noted that for this keyword to work, an accessible local archive must contain copies of the same component releases as are identified on the remote server as ones to keep.
+
+This keyword may be used multiple times provided it is used for different components each time.
+
+=item keep_recent_rel [component] <num_days>
+
+Instructs C<cleanremote> to keep any component releases exported within the specified number of days (since the current time). If a component name is specified, C<cleanremote> will only keep component releases which match that name (and are sufficiently recent). Please note that the time is taken from time of export, not time of release.
+
+This keyword may be used multiple times if the command is used for different components. 
+
+=item keep_recent <num_days>
+
+B<Depricated:> Equivalent to keep_recent_rel without a component name entered.
+
+=item no_prompt
+
+Instructs C<cleanremote> to not prompt the user to delete every component. This is equivalent to typing 'a' (all) at the first component prompt.
+
+=back
+
+For example:
+
+ keep_env     pixie alpha
+ keep_env     pixie beta
+ keep_rel     comp1 rel1
+ keep_recent  10
+
+C<cleanremote> will work out which component releases need to be kept in order to satisfy the specified keep criteria. All other component releases found in the archive will be deleted (along with temporary files used during FTP uploads). B<It is therefore extremely important that the list of environments to keep is complete>. It is recommended that this file be controlled using a configuration management tool. It is also recommended that each project has only one description file, and that all users of C<cleanremote> know where to find it.
+
+Recommended procedure for using C<cleanremote>:
+
+=over 4
+
+=item 1
+
+Inform all users of the archive that a clean is about to be performed, and that the archive will be unavailable whilst this is happening.
+
+=item 2
+
+Take the archive off-line or alter permissions such that you are the only person that can access it.
+
+=item 3
+
+Backup the archive.
+
+=item 4
+
+Run C<cleanremote> and carefully check the list of components that are about to be cleaned. If you are happy, type 'yes' to continue, otherwise type 'no', modify your description file and re-run C<cleanremote>.
+
+=item 5
+
+Bring the archive back on-line.
+
+=item 6
+
+Inform all users of the archive that it is available for use once more.
+
+=back
+
+=head1 STATUS
+
+Supported. If you find a problem, please report it to us.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/cleanremote.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/envmembership	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,163 @@
+#!perl
+# Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use RelData;
+use Utils;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $iniData = IniData->New();
+my $force;
+my $commandController = CommandController->New($iniData, 'EnvMembership');
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions("h" => \$help, "v+" => \$verbose, "f" => \$force);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  # Functional description:
+  # create reldata objects for each release of <environment>
+  # for each release find if <component> is present in the environment
+  # and if so if <version> matches the version in the environment.
+  # if these conditions are met, place the current <environment> release id in 
+  # an array and print the contents of the array at the end of the script
+  #
+  #
+  if ($#ARGV == 2) {
+    # Extract the command line arguments (Note: GetOptions() will have already
+    # stripped out the options part of the command line
+    my $component_name = shift @ARGV;
+    my $component_version= shift @ARGV;
+    my $env_name= shift @ARGV;
+		
+    # Scalar variable $envRelDatas will contain a reference to an array of reldata
+    # objects following this call.
+    my $envRelDatas = RelData->OpenSet($iniData, $env_name, $verbose);
+    my @outputTable;
+    my @tableHeader = ("Component", "Version");
+    push (@outputTable, \@tableHeader);
+    foreach my $currentEnvRelData (@$envRelDatas) {
+      my $currentEnv = $currentEnvRelData->Environment();
+      # $currentEnv now contains a reference to a hash containing 
+      # component name / version pairs for all the components that were
+      # present in the current release of the environment component
+      if ($currentEnv->{$component_name}) {
+	# component is present in the current environment
+	if ($currentEnv->{$component_name} eq $component_version) {
+	  # component version of interest is present in the current environment
+	  my @tableRow = ($currentEnvRelData->Component(),$currentEnvRelData->Version());
+	  push (@outputTable, \@tableRow);
+	}
+      }
+    }
+    # print the environment versions in which componet version is present
+    my $tableLength = @outputTable;
+    if ($tableLength > 0) {
+      $iniData->TableFormatter->PrintTable(\@outputTable);
+    }
+  } else {
+    print "Error: Invalid number of arguments\n";
+    Usage(1);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: envmembership [options] <component> <version> <environment>
+
+options:
+
+-h  help
+-f  (deprecated)
+-v  verbose output (-vv very verbose)\n");
+
+}
+
+__END__
+
+=head1 NAME
+
+EnvMembership - Returns the environments to which a particular component belongs
+
+=head1 SYNOPSIS
+
+  envmembership [options] <component> <version> <environment>
+
+options:
+
+  -h  help
+  -f  (deprecated)
+  -v  verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+Returns all the versions of a specified component for which a particular version of another specified component is present in its release environment. For example, to discover which release of a component called C<my_product> contains the component C<my_comp> at version C<my_ver>, type:
+
+  envmembership my_comp my_ver my_product 
+
+=head1 STATUS
+
+Supported. If you find a problem, please report it to us.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/envmembership.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/envsize	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,167 @@
+#!perl
+# Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use RelData;
+use EnvDb;
+use Utils;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'EnvSize');
+my $comp;
+my $ver;
+my $quick;
+my $force;
+my $deltasize = 0;
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+
+my $envdb = EnvDb->Open($iniData, $verbose);
+$ver = $envdb->Version($comp) if (!$ver);
+
+EnvSize();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions("h" => \$help, "v+" => \$verbose, "q" => \$quick, 'f' => \$force, "d" => \$deltasize);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  if ($quick && $deltasize) {
+    die "Error: It is not possible to use the -d and -q flags together\n";
+  }
+
+  $comp = shift @ARGV;
+  unless ($comp) {
+    die "Error: No component name specified\n";
+  }
+  if (scalar @ARGV == 1) {
+    $ver = shift @ARGV;
+  }
+  elsif (!scalar @ARGV == 0) {
+    print "Error: Invalid number of arguments\n";
+    Usage(1);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: envsize [options] <component> <version>
+
+options:
+
+-h  help
+-v  verbose output (-vv very verbose)
+-f  (deprecated)
+-q  quick (don't print size of environment)
+-d  delta size (only matching versions)
+  
+Note: It is not possible to use the -q and -d flags together.\n");
+}
+
+sub EnvSize {
+  print "Size of component zips in local archive: ".$envdb->GetReleaseSize($comp, $ver)." bytes\n";
+  print "Size of whole environment zips in local archive: ".$envdb->GetEnvironmentSize($comp, $ver, 0)." bytes\n" if (!$quick && !$deltasize);
+  print "Size of environment zips in local archive that match the requested version: ".$envdb->GetEnvironmentSize($comp, $ver, $deltasize)." bytes\n" if (!$quick && $deltasize);
+}
+
+__END__
+
+=head1 NAME
+
+EnvSize - Prints the size of the zip files of the component and its environment.
+
+=head1 SYNOPSIS
+
+  envsize [options] component [version]
+
+options:
+
+  -h  help
+  -v  verbose output (-vv very verbose)
+  -q  quick; only print the size of the component, not its environment
+  -d  delta size; only includes components that match the requested version
+
+Note: It is not possible to use the C<-q> and C<-d> flags together.
+
+=head1 DESCRIPTION
+
+Adds up the size of the zip files of the component. The result is printed,
+in bytes.
+
+Unless you specify the C<-q> flag, it also adds up the sizes of all the
+components that make up its environment, and prints that. (This, of course,
+includes the component you specify).
+
+If you specify the C<-d> flag it will add up the sizes of all the components in
+the archive that match the version number specified.  This is useful if when you
+create an environment you use the same version number for all new components,
+you can see the size taken up by the components released in the new
+environment, and not components which have been re-used.
+
+The first item of information is also shown in the output of C<viewnotes>.
+
+=head1 STATUS
+
+Supported. If you find a problem, please report it to us.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/envsize.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/getrel	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,241 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use CommandController;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $overwriteSource = 0;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'GetRel');
+my $envDb;
+my $installSource;
+my $sourceInstallPath = undef;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  my $stdin;
+  GetOptions('h' => \$help, 's' => \$installSource, 'o' => \$overwriteSource, 'v+' => \$verbose, 'p' => \$stdin, 'i=s' => \$sourceInstallPath);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  if ($sourceInstallPath and not $installSource) {
+    print "Error: Invalid options - cannot specify install path (using -i) without installing source (using -s)\n";
+    Usage(1);
+  }
+
+  $envDb = EnvDb->Open($iniData, $verbose);
+ 
+  if ($#ARGV == -1 and $stdin) {
+    my @failedGets;
+    my @lines;
+    my $line;
+    while (defined ($line = <STDIN>)) {
+      # Remove line feed, white space and comments.
+      chomp $line;
+      $line =~ s/^\s*//;
+      $line =~ s/\s$//;
+      $line =~ s/#.*//;
+      if ($line eq '') {
+        # Nothing left.
+        next;
+      }
+      push @lines, $line;
+    }
+
+    # We do this as a separate loop to work around a weird defect in Perl 5.8.0
+    # where <STDIN> only reads the first line if a system() call happens
+    # in between (which would be done by InstallComponent)
+    # This defect is #21717 and is due to be fixed in 5.8.1
+    my $lineNum = 0;
+    foreach $line (@lines) {
+      $lineNum++;
+      eval {
+        my @words = split (/\s+/, $line);
+        unless ($#words == 1) {
+          die "Error: Invalid number of arguments at line $lineNum from STDIN\n";
+        }
+        InstallComponent(@words);
+      };
+      if ($@) {
+        print $@;
+        push (@failedGets, $line);
+      }
+    }
+
+    if ($#failedGets >= 0) {
+      print "\nThere was an error getting the following release(s):\n\n";
+      foreach (@failedGets) {
+        print;
+      }
+    }
+  }
+  elsif ($#ARGV == 0) {
+    my $comp = shift @ARGV;
+    my $ver = $envDb->Version($comp);
+    unless (defined $ver) {
+      die "Error: Couldn't find version of $comp - not currently installed\n";
+    }
+    InstallComponent($comp, $ver);
+  }
+  elsif ($#ARGV == 1) {
+    InstallComponent(@ARGV);
+  }
+  else {
+    print "Error: Invalid number of arguments\n";
+    Usage(1);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: getrel [options] <component> [<version>]
+
+options:
+
+-h  help
+-s  install source code also
+-o  overwrite any existing source
+-v  verbose output (-vv very verbose)
+-p  read a piped list of components from STDIN\n");
+}
+
+sub InstallComponent {
+  my $comp = shift;
+  my $ver = shift;
+
+  $comp = lc($comp);
+
+  $iniData->PathData()->CheckReleaseExists($comp, $ver);
+
+  my $relData = RelData->Open($iniData, $comp, $ver, $verbose);
+
+  #change the version string to that stored in the reldata file (version nums are case dependent)
+  my $env = $relData->Environment();
+  $ver = $env->{$comp};
+
+  my $noinstall = 0;
+  my $installedVer = $envDb->Version($comp);
+  if (defined $installedVer and lc($installedVer) eq lc($ver)) {
+    (my $status) = $envDb->CheckComp($comp, 0);
+    if ($status == EnvDb::STATUS_CLEAN) {
+      print "$comp $ver already installed and clean\n";
+      $noinstall = 1;
+    }
+  }
+
+  unless ($noinstall) {
+    # Remove old binaries if present.
+    if (defined $installedVer and $envDb->Status($comp) != EnvDb::STATUS_PENDING_RELEASE) {
+      if (lc($installedVer) eq lc($ver)) {
+        print "Re-installing $comp $ver...\n";
+      }
+      else {
+        print "Switching $comp from $installedVer to $ver...\n";
+      }
+      $envDb->RemoveComponent($comp);
+    }
+    else {
+      print "Installing $comp $ver...\n";
+    }
+    $envDb->InstallComponent($comp, $ver, $overwriteSource);
+  }
+
+  if ($installSource) {
+    my $installPath = $sourceInstallPath;
+    if (!defined ($installPath)) {
+      $installPath="\\";
+    }
+    $envDb->UnpackSource($comp, $ver, $installPath, $overwriteSource, 1);
+  }
+}
+
+
+__END__
+
+=head1 NAME
+
+GetRel - Installs the binaries of a component release into the current environment.
+
+=head1 SYNOPSIS
+
+  getrel [options] <component> [<version>]
+
+options:
+
+  -h  help
+  -s  install source code also
+  -o  overwrite any existing source
+  -v  verbose output (-vv very verbose)
+  -p  read a piped list of components from STDIN
+
+=head1 DESCRIPTION
+
+Before installing new binaries, any existing binaries are removed. If no version is specifed, the current version will be re-installed (if it is dirty). Multiple releases may be installed by specifying the C<-p> switch and piping in text via C<STDIN> that contains lines in a <component> <version> format. Releases that fail to install are listed at the end.
+
+Source code may optionally be installed also. If specified, this will be installed into the root of the current drive. Any existing files will be overwritten with -o.
+
+As well as overwriting existing source code, C<-o> will overwrite any binaries which are left on the drive. There will only be leftover binaries in exceptional circumstances; normally C<getrel> will remove old versions of components before trying to install new ones.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/getrel.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/listcomponents	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,132 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+
+
+#
+# Globals.
+#
+
+my $iniData = IniData->New();
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+PrintListComponents();
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions('h' => \$help);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  unless ($#ARGV == -1) {
+    print "Error: Invalid arguments\n";
+    Usage(1);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: listcomponents [options] 
+
+options:
+
+-h  help\n");
+}
+
+sub PrintListComponents {
+  my @Components = ();
+  
+  foreach my $component (sort @{$iniData->PathData->ListComponents()}){
+    my $found = 0;
+    
+    $component = lc($component);
+
+    foreach(@Components){
+      if($component eq $_){
+        $found = 1;
+	last;
+      }
+    }
+    
+    unless($found){
+      push(@Components, $component);
+    }
+  }
+
+  foreach(@Components){
+    print "$_\n";
+  }
+}
+
+__END__
+
+=head1 NAME
+
+ListComponents - Prints a list of the components on the local archive.
+
+=head1 SYNOPSIS
+
+  listcomponents [options] 
+
+options:
+
+  -h  help
+
+=head1 DESCRIPTION
+
+Lists all the components on the local archive.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/listcomponents.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/mbld	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,351 @@
+#!perl
+# Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Cwd;
+use Getopt::Long;
+use Utils;
+
+$|++;
+
+#
+# Globals
+#
+
+my @bldData;
+my $descriptionFile;
+my $keepGoing = '';
+my $saveSpace = '';
+my $verbose = 0;
+my $clean = 0;
+my $outFile = "stdout.log";
+my $errorFile = "stderr.log";
+my $startTime;
+my $cwd;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+ParseDescriptionFile();
+Init();
+DoBuild();
+End();
+
+
+#
+# Subs
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions('c+' => \$clean, 'h' => \$help, 'k' => \$keepGoing, 's' => \$saveSpace, 'v+' => \$verbose);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $descriptionFile = shift @ARGV;
+
+  unless ($descriptionFile and $#ARGV == -1) {
+    print "Error: Invalid arguments\n";
+    Usage(1);
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: mbld [options] <build_description_file>
+
+options:
+
+-h  help
+-c  clean (-cc reallyclean)
+-k  keep going
+-s  save space
+-v  verbose output (-vv very verbose)\n");
+}
+
+sub Init {
+  $startTime = time;
+  unlink $outFile;
+  unlink $errorFile;
+  $cwd = cwd();
+  $outFile = "$cwd\\$outFile";
+  $errorFile = "$cwd\\$errorFile";
+}
+
+
+sub ParseDescriptionFile {
+  open(FILE, $descriptionFile) or die "Error: Unable to open \"$descriptionFile\" for reading: $!\n";
+
+  my $line = -1;
+  while (<FILE>) {
+    ++$line;
+    # Remove line feed, white space and comments.
+    chomp;
+    s/^\s*$//;
+    s/#.*//;
+    if ($_ eq '') {
+      # Nothing left.
+      next;
+    }
+
+    (my @words) = split /\s+/;
+
+    if ($#words < 2) {
+      print "Warning: Not enough arguments on line $line\n";
+      next;
+    }
+
+    my $bldEntry;
+    $bldEntry->{name} = shift @words;
+    $bldEntry->{bldInf} = shift @words;
+    if ($words[0] eq 'test') {
+      $bldEntry->{test} = 1;
+      shift @words;
+      if ($#words == -1) {
+	print "Warning: Not enough arguments on line $line\n";
+	next;
+      }
+    }
+    $bldEntry->{plat} = shift @words;
+    if ($#words >= 0) {
+      if ($words[0] =~ /(udeb)|(urel)/) {
+	$bldEntry->{var} = shift @words;
+      }
+    }
+    if ($#words >= 0) {
+      $bldEntry->{mmp} = shift @words;
+    }
+
+    push (@bldData, $bldEntry);
+  }
+    
+  close FILE;
+}
+
+sub DoBuild {
+  if ($clean == 1) {
+    DoPlatformVariantCommand('clean:       ', 'abld', 'clean');
+  }
+  elsif ($clean == 2) {
+    DoPlatformVariantCommand('reallyclean: ', 'abld', 'reallyclean');
+  }
+  DoBldMake();
+  DoExport();
+  DoPlatformCommand('makefile:    ', 'abld', 'makefile');
+  DoPlatformCommand('library:     ', 'abld', 'library');
+  DoPlatformVariantCommand('resource:    ', 'abld', 'resource');
+  my $target = 'target';
+  if ($keepGoing) {
+    $target .= " $keepGoing";
+  }
+  if ($saveSpace) {
+    $target .= " $saveSpace";
+  }
+  DoPlatformVariantCommand('target:      ', 'abld', $target);
+  DoPlatformVariantCommand('final:       ', 'abld', 'final');
+  DoPlatformVariantCommand('check:       ', 'abld -check', 'build');
+}
+
+sub DoBldMake {
+  my %built;
+  foreach my $bldEntry (@bldData) {
+    unless (exists $built{lc($bldEntry->{bldInf})}) {
+      DoPrint("bldfiles:     $bldEntry->{name} [bldmake bldfiles]");
+      chdir $bldEntry->{bldInf} or die "Error: Couldn't change working directory to \"$bldEntry->{bldInf}\": $!\n";
+      system "bldmake bldfiles >>$outFile 2>>$errorFile";
+      chdir $cwd or die "Error: Couldn't change working directory to \"$cwd\": $!\n";
+      $built{lc($bldEntry->{bldInf})} = 1;
+    }
+  }
+}
+
+sub DoExport {
+  my %built;
+  my %builtTest;
+  foreach my $bldEntry (@bldData) {
+    if (exists $bldEntry->{test}) {
+      unless (exists $builtTest{lc($bldEntry->{bldInf})}) {
+	DoPrint("export:       $bldEntry->{name} [abld test export]");
+	chdir $bldEntry->{bldInf} or die "Error: Couldn't change working directory to \"$bldEntry->{bldInf}\": $!\n";
+	system "abld test export >>$outFile 2>>$errorFile";
+	chdir $cwd or die "Error: Couldn't change working directory to \"$cwd\": $!\n";
+	$builtTest{lc($bldEntry->{bldInf})} = 1;
+      }
+    }
+    else {
+      unless (exists $built{lc($bldEntry->{bldInf})}) {
+	DoPrint("export:       $bldEntry->{name} [abld export]");
+	chdir $bldEntry->{bldInf} or die "Error: Couldn't change working directory to \"$bldEntry->{bldInf}\": $!\n";
+	system "abld export >>$outFile 2>>$errorFile";
+	chdir $cwd or die "Error: Couldn't change working directory to \"$cwd\": $!\n";
+	$built{lc($bldEntry->{bldInf})} = 1;
+      }
+    }
+  }
+}
+
+sub DoPlatformCommand {
+  my $prompt = shift;
+  my $command1 = shift;
+  my $command2 = shift;
+
+  foreach my $bldEntry (@bldData) {
+    my $command = $command1;
+    if (exists $bldEntry->{test}) {
+      $command .= ' test';
+    }
+    $command .= " $command2 $bldEntry->{plat}";
+    if (exists $bldEntry->{mmp}) {
+      $command .= " $bldEntry->{mmp}";
+    }
+    DoPrint("$prompt $bldEntry->{name} [$command]");
+    chdir $bldEntry->{bldInf} or die "Error: Couldn't change working directory to \"$bldEntry->{bldInf}\": $!\n";
+    system "$command >>$outFile 2>>$errorFile";
+    chdir $cwd or die "Error: Couldn't change working directory to \"$cwd\": $!\n";
+  }
+}
+
+sub DoPlatformVariantCommand {
+  my $prompt = shift;
+  my $command1 = shift;
+  my $command2 = shift;
+
+  foreach my $bldEntry (@bldData) {
+    my $command = $command1;
+    if (exists $bldEntry->{test}) {
+      $command .= ' test';
+    }
+    $command .= " $command2 $bldEntry->{plat}";
+    if (exists $bldEntry->{var}) {
+      $command .= " $bldEntry->{var}";
+    }
+    if (exists $bldEntry->{mmp}) {
+      $command .= " $bldEntry->{mmp}";
+    }
+    DoPrint("$prompt $bldEntry->{name} [$command]");
+    chdir $bldEntry->{bldInf} or die "Error: Couldn't change working directory to \"$bldEntry->{bldInf}\": $!\n";
+    system "$command >>$outFile 2>>$errorFile";
+    chdir $cwd or die "Error: Couldn't change working directory to \"$cwd\": $!\n";
+  }
+}
+
+sub DoPrint {
+  my $prompt = $_[0];
+
+  print "$prompt\n";
+  system "echo === $prompt >> $outFile";
+  system "echo === $prompt >> $errorFile";
+}
+
+sub End {
+  my $finishTime = time;
+  my $total = $finishTime - $startTime;
+  my $seconds =  $total % 60;$total = ($total - $seconds) / 60;
+  my $minutes =  $total % 60;$total = ($total - $minutes) / 60;
+  my $hours =  $total % 24;$total = ($total - $hours)   / 24;
+
+  print "\nTotal build time: $hours:$minutes:$seconds\n";
+  chdir $cwd;
+}
+
+
+__END__
+
+=head1 NAME
+
+MBld - Builds multiple components in one pass.
+
+=head1 SYNOPSIS
+
+  mbld [options] <build_description_file>
+
+options:
+
+  -h  help
+  -c  clean (-cc reallyclean)
+  -k  keep going
+  -s  save space
+  -v  verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+The build description file must be plain text with lines of the following format (one for each item that you want to be built):
+
+ component_name  bld_inf_path  [test] platform [variant] [mmp_file]
+
+=over 4
+
+=item component_name
+
+A string that can be used to identify the component being built - can be anything you like provided it's a single word.
+
+=item bld_inf_path
+
+An absolute or relative path to where the componen't F<bld.inf> file can be found.
+
+=item test
+
+An optional argument to allow test code to be built.
+
+=item platform
+
+The build plaform required (e.g. C<WINS>, C<WINCW>, C<THUMB>, C<ARM4>, C<ARMI>, C<MISA> etc).
+
+=item variant
+
+The build variant (either C<udeb> or C<urel>). If ommitted, both variants will be built.
+
+=item mmp_file
+
+A optional argument that allows specific projects (defined by an F<mmp> file) to be built. If ommitted all F<mmp> files will be used.
+
+=back
+
+The build output is captured to a pair of log files; F<stdout.log> for C<STDOUT> and F<stderr.log> for C<STDERR>.
+
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/mbld.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/pullrel	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,146 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use File::Copy;
+use IniData;
+use RelData;
+use PathData;
+use CommandController;
+use PushPullRel;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $force = 0;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'PullRel');
+my $comp;
+my $ver;
+my $externalIniDataFile;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+PullRel();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions('h' => \$help, 'f' => \$force, 'v+' => \$verbose);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $comp = shift @ARGV;
+  $ver = shift @ARGV;
+  $externalIniDataFile = shift @ARGV;
+
+  unless (defined $comp and defined $ver and defined $externalIniDataFile and $#ARGV == -1) {
+    print "Error: Invalid arguments\n";
+    Usage(1);
+  }
+
+  unless (-e $externalIniDataFile) {
+    die "Error: $externalIniDataFile does not exist\n";
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: pullrel [options] <component> <version> <remote-site-reltools-ini-file>
+
+options:
+
+-h  help
+-f  if check fails, overwrite external copy
+-v  verbose output (-vv very verbose)\n");
+}
+
+sub PullRel {
+  my $ppr = new PushPullRel(
+    $iniData,
+    $externalIniDataFile,
+    0, # pushing
+    $verbose,
+    $force
+  );
+  $ppr->TransferRel($comp,$ver);
+  $ppr->SummariseErrors;
+}
+
+
+__END__
+
+=head1 NAME
+
+PullRel - Copies a released component to another archive.
+
+=head1 SYNOPSIS
+
+  pullrel [options] <component> <version> <remote-site-reltools-ini-file>
+
+options:
+
+  -h  help
+  -f  if check fails, overwrite external copy
+  -v  verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+If two sites that share a common WAN want to have separate local archives, the commands C<PullEnv> and C<PullEnv> (and C<PullRel> and C<PullRel>) can be used to keep them in sync. They are similar is spirit to C<ExportEnv> and C<ImportEnv>, however the files are copied directly rather than being encrypted and placed on a shared repository.
+
+For each component in the specified remote environment, checks to see if the corresponding release directory exists on the local site. If it does, each if is checked to ensure its modified time and size is that same as in the local archive. If the check fails an error is thrown (by default, unless the C<-f> switch is used). If is does not, the directory is created and the component is copied into it.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/pullrel.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/pushrel	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,146 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use File::Copy;
+use IniData;
+use RelData;
+use PathData;
+use CommandController;
+use PushPullRel;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $force = 0;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'PushRel');
+my $comp;
+my $ver;
+my $externalIniDataFile;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+PushRel();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions('h' => \$help, 'f' => \$force, 'v+' => \$verbose);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $comp = shift @ARGV;
+  $ver = shift @ARGV;
+  $externalIniDataFile = shift @ARGV;
+
+  unless (defined $comp and defined $ver and defined $externalIniDataFile and $#ARGV == -1) {
+    print "Error: Invalid arguments\n";
+    Usage(1);
+  }
+
+  unless (-e $externalIniDataFile) {
+    die "Error: $externalIniDataFile does not exist\n";
+  }
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: pushrel [options] <component> <version> <remote-site-reltools-ini-file>
+
+options:
+
+-h  help
+-f  if check fails, overwrite external copy
+-v  verbose output (-vv very verbose)\n");
+}
+
+sub PushRel {
+  my $ppr = new PushPullRel(
+    $iniData,
+    $externalIniDataFile,
+    1, # pushing
+    $verbose,
+    $force
+  );
+  $ppr->TransferRel($comp,$ver);
+  $ppr->SummariseErrors;
+}
+
+
+__END__
+
+=head1 NAME
+
+PushRel - Copies a released component to another archive.
+
+=head1 SYNOPSIS
+
+  pushrel [options] <component> <version> <remote-site-reltools-ini-file>
+
+options:
+
+  -h  help
+  -f  if check fails, overwrite external copy
+  -v  verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+If two sites that share a common WAN want to have separate local archives, the commands C<PushEnv> and C<PullEnv> (and C<PushRel> and C<PullRel>) can be used to keep them in sync. They are similar is spirit to C<ExportEnv> and C<ImportEnv>, however the files are copied directly rather than being encrypted and placed on a shared repository.
+
+For each component in the specified local environment, checks to see if the corresponding release directory exists on the remote site. If it does, each if is checked to ensure its modified time and size is that same as in the local archive. If the check fails an error is thrown (by default, unless the C<-f> switch is used). If is does not, the directory is created and the component is copied into it.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/pushrel.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/relnotes.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2835 @@
+Version 2.84.3
+
+Made by Build Tools China, 08/09/2009
+
+Defect fixes:
+        DPDEF141526 - raptor errors when validating tools_redistribution_common in MakeCBR
+New Features:
+*   REQ12751 - CBR Tools use Raptor.
+        
+-----------------------------------------------------------------------------------
+
+Version 2.84.2
+
+Made by Build Tools China, 02/09/2009
+
+Defect fixes:
+        DPDEF141709 - DeltaEnv create delta_manifest_baseline.xml format error
+        
+-----------------------------------------------------------------------------------
+
+Version 2.84.1
+
+Made by Build Tools China, 20/07/2009
+
+Defect fixes:
+        DPDEF140962 - Miss manifest.xml when apply delta between 141 & 142 tb91sf 
+        DPDEF141079 - deltaenv keep the file which has been moved to another one in old zip file 
+        
+-----------------------------------------------------------------------------------
+
+Version 2.84.0
+
+Made by Release & Integration Tools China, 30/06/2009
+
+New Features:
+*   REQ9701  - Faster, Optimised Packaging process.
+*   REQ11393 - SBSv2 support in CBR tools.
+
+Compatibility notes:
+*   There is a new reldata format introduced in this REQ. 
+    Then if an enviornment is got by any prior CBR version, there will be reldata mismatch 
+    when using any CBR tool in this version. So please keep the CBR tools version consistent.
+    
+-----------------------------------------------------------------------------------
+
+Version 2.83.1031
+
+Made by Release & Integration Tools China, 17/06/2009
+
+Defect fixes:
+        DPDEF140280 - CBR Tools 2.83.1030 fail to compile
+        
+-----------------------------------------------------------------------------------
+
+Version 2.83.1030
+
+Made by Release & Integration Tools China, 18/05/2009
+
+Defect fixes:
+        DEF139216 - DeltaEnv: keep going with error during create and apply delta
+        
+-----------------------------------------------------------------------------------
+
+Version 2.83.1029
+
+Made by Release & Integration Tools China, 01/04/2009
+
+Defect fixes:
+        DPDEF137305 - CBR will report "Error: didn't find any platforms"
+        
+-----------------------------------------------------------------------------------
+
+Version 2.83.1028
+
+Made by Release & Integration Tools China, 26/03/2009
+
+Defect fixes:
+        DEF130995 - Deltaenv errors in creating delta package for 9.5 - M04693
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1027
+
+Made by Release & Integration Tools China, 16/03/2009
+
+Defect fixes:
+        DPDEF136548 - CBR tools don't work with raptor-generated abldcache file
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1026
+
+Made by Release & Integration Tools China, 04/03/2009
+
+Defect fixes:
+        DPDEF135800 - The CBR Tools do not classify IPR for source statements using relative paths
+        DPDEF135797 - CBR Tools do not support relative paths in MRP files
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1025
+
+Made by Release & Integration Tools UK, 19/02/2009
+
+Defect fixes:
+        DPDEF135168: - CBR Tools do not automatically include DP files 
+    
+-----------------------------------------------------------------------------------
+
+Version 2.83.1024
+
+Made by Release & Integration Tools China, 22/01/2009
+
+Defect fixes:
+        DPDEF128617 - MakeEnv does not work with SRCROOT set to anything other than \
+    
+-----------------------------------------------------------------------------------
+
+Version 2.83.1023
+
+Made by Release & Integration Tools China, 12/01/2009
+
+Defect fixes:
+        DPDEF128818 - Envinfo fails testing a mrp with a source statement pointing to a directory
+        DPDEF132654 - Project Loki - 23 - Archive-Tar 
+    
+-----------------------------------------------------------------------------------
+        
+Version 2.83.1022
+
+Made by Release & Integration Tools China, 08/01/2009
+
+Defect fixes:
+        DEF130274   - Intermittent failures in CBR import of releases to Beijing site
+        DPDEF132728 - Project Loki - 175 - net-ftp-common
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1021
+
+Made by Release & Integration Tools China, 23/12/2008
+
+Defect fixes:        
+        DPDEF132236 - unzip version is too old in the CBR packages
+        PDEF131197  - Deltaenv re-construction fails - transferring vFuture M04717 -> M04719	
+
+-----------------------------------------------------------------------------------
+Version 2.83.1020
+
+Made by Release & Integration Tools China, 17/12/2008
+
+Defect fixes:
+        DEF131119   - deltaEnv can't create delta data of gt_techview_baseline component 
+        DEF131116   - Permission deny issue when doing zip and delete command by using deltaenv
+        DPDEF130547 - CBR tools should report error to the log when import file failed
+	
+-----------------------------------------------------------------------------------
+
+Version 2.83.1019
+
+Made by Release & Integration Tools China, 05/11/2008
+
+Defect fixes:
+	DPDEF129430 - Improve the warning message for envinfo with -c,-d or -p
+	DPDEF129931 - DeltaEnv apply need to handle one error senario 
+	
+-----------------------------------------------------------------------------------
+
+Version 2.83.1018
+
+Made by Release & Integration Tools UK, 23/10/2008
+
+Defect fixes:
+	DPDEF128531 - problems creating delta package using manifest file in 9.1
+	DPINC128056 - Missing argument handling in CleanEnv.pm
+	DPDEF126632 - Deprecate support for Component-Based Archives in the CBR Tools
+	
+Compatability notes:
+*	Component-based archives (using the 'archive_path_file' keyword) are now deprecated, and produce a warning - however, no functionality has been disabled.  It's recommended that users migrate to using project-based archives with the 'archive_path' keyword.
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1017
+
+Made by Integration & Variant Tools, 03/10/2008
+
+Defect fixes:
+	DPDEF125527 - CBR tools source mappings break binary platform statements
+	DPINC128057 - Issue with reltools and [...] deep recursion
+	DPDEF127628 - Deltaenv produces errors on pathnames > 255
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1016
+
+Made by Integration & Variant Tools, 12/09/2008
+
+Defect fixes:
+	DPDEF126625 - Problem with ViewNotes [viewnotes doesn't always return immediately with some browsers]
+	DPDEF124626 - deltaenv -c -ra doesn't work
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1015
+
+Made by Product Creation Tools, 17/07/2008
+
+Defect fixes:
+	DEF114845 - Latestver doesn't spot if the archive path doesn't exist 
+	DEF122011 - GT0410 CBR tools: open archive file when cleaning, cleanlocalarch warns 
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1014
+
+Made by Product Creation Tools, 11/07/2008
+
+Defect fixes:
+	DEF124892 - wrong command name in the synopsis of RemoveSource.html
+	DEF124119 - Use of uninitialized value in split at c:/apps/SITK/cbr/Utils.pm line 1467.
+	INC123162 - viewnotes behaves differently between old CBR and SITK's
+	DEF122117 - GT0410 CBR tools: perl crash for invalid paths: deltaenv -r and deltaenv -c --dp
+	DEF122116 - GT0410 CBR tools: perl crash if source file held open while running removesource
+
+Compatability notes:
+*   When writing release notes for use with these tools, this version of the
+    tools permits HTML tags to be used.  To tell the tools not to treat your
+    comment as plain text, wrap the comment in <html> </html> tags
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1013
+
+Made by Product Creation Tools, 20/05/2008
+
+Defect fixes:
+	DEF114845 - Latestver doesn't spot if the archive path doesn't exist
+	DEF118532 - Warnings from cleanremote if remote archive paths not specified
+	DEF121046 - CBR tool Cleanlocalarch fails using Perl 5.8.8
+	DEF121945 - GT0410 CBR tools: file held open while removing component
+                    crashes envdb line1639
+	DEF121958 - GT0410 CBR tools: no archive path crashes latestver, exportenv
+                    and exportrel
+	DEF121964 - GT0410 CBR tools: wrong number of args for archive path crashes
+                    pathdata
+	DEF121972 - GT0410 CBR tools: perl warnings 'exiting subroutines via next
+                    at cleaner.pm'
+	DEF122005 - GT0410 CBR tools: keep_recent_env and rel give warnings on non
+                    numeric arguments
+	DEF122012 - GT0410 CBR tools: incorrect configuration gives perl warnings
+	DEF122018 - GT0410 CBR tools: invalid source dir specified to getrel -I,
+                    getsource -i crash
+	DEF122110 - GT0410 CBR tools: invalid archive path in remote reltools.ini
+                    (pullenv, pullrel)
+	DEF122114 - GT0410 CBR tools: pullrel -h gives the wrong help
+	DEF122115 - GT0410 CBR tools: perl crash when removing source for a non
+                    installed component
+	DEF122119 - GT0410 CBR tools: use of uninitialised value when calling
+                    deltaenv -r (no args)
+	DEF122122 - GT0410 CBR tools: perl crash if bad values given to --maxdelta
+	DEF122142 - ImportEnv command line help is missing an option
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1012
+
+Made by Product Creation Tools, 09/04/2008
+
+Defect fixes:
+	PDEF120528 DeltaEnv -a : error in constructing base_documentation component
+	DEF119931 DeltaEnv -c tool unable to read a generated release manifest file
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1011
+
+Made by Product Creation Tools, 26/03/2008
+
+Defect fixes:
+	DEF115306 Errors when running EnvInfo
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1010
+
+Made by Product Creation Tools, 22/02/2008
+
+Defect fixes:
+	PDEF111988 Adding archives to reltools.ini slows down getenv
+	DEF118518 "experimentalproxy" remote site type doesn't work
+	DEF118517 CleanRemote doesn't work: undefined values
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1009
+
+Made by Product Creation Tools, 26/11/2007
+
+Defect fixes:
+        DEF114351 DeltaEnv is very slow processing developer library components
+        DEF113317 zdc.exe crashes in deltaenv
+        DEF110665 CBR Tools GPG documentation is out of date
+        DEF113042 CBR tools return a '0' value even with invalid arguments
+        DEF114436 GT0366: DeltaEnv: ApplyDelta.pm has incorrect English messages
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1008
+
+Made by Product Creation Tools, 15/11/2007
+
+Defect fixes:
+
+    INC113318 - RELTOOLS: deltaenv can not co-op with multiple local archive
+    INC105515 - RELTOOLS: viewnotes and angled-brackets
+    DEF113091 - Inconsistent behaviour of CBR tools
+    DEF114173 - DeltaEnv Fails with Perl Error
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1007
+
+Made by Product Creation Tools, 30/10/2007
+
+Defect fixes:
+
+    DEF112925 - DeltaEnv does not remove deleted exports
+    DEF113007 - DeltaEnv can create invalid delta manifests
+    DEF112186 - DeltaEnv fails to apply delta due to long path lengths
+    DEF113394 - Releasing an already existing version of a CBR comp deletes the 
+                original from the archive
+    INC113252 - RELTOOLS: blddoc exit with an error
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1006
+
+Made by Product Creation Tools, 22/10/2007
+
+Defect fixes:
+
+    PDEF113136 - CBR: Bad reference when remote path missing from reltools.ini  
+    PDEF107504 - ImportEnv and ImportRel do not provide a summary
+    DEF113056 - DeltaEnv produces Perl warnings
+    DEF112883 - PullEnv/PushEnv have ceased to work
+    DEF112532 - DeltaEnv cannot create a delta     
+    DEF112367 - CBR errors and warnings in M04358 v9.6
+
+Compatibility notes:
+*   The output of ImportRel/ExportRel/ImportEnv and ExportEnv has been changed.
+    All the tools now produce a table of successful transfers, and then a table
+    of failed transfers (if any).  The table also includes a column to display
+    the status or failure reason.
+    
+-----------------------------------------------------------------------------------
+
+Version 2.83.1005
+
+Made by Product Creation Tools, 09/10/2007
+
+Defect fixes:
+
+    DEF112571 - CBR creation more fragile in recent System Builds
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1004
+
+Made by Product Creation Tools, 27/09/2007
+
+Defect fixes:
+
+    INC111277 - RELTOOLS: slow exporting / exportdata parsing
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1003
+
+Made by Product Creation Tools, 26/09/2007
+
+Defect fixes:
+
+    DEF112113 - DeltaEnv fails to overwrite even if the overwrite flag is set
+    DEF112116 - DeltaEnv won't apply a delta
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1002
+
+Made by Product Creation Tools, 20/09/2007
+
+Defect fixes:
+
+    DEF111270 - Mysterious warning in latestver
+    DEF105111 - Symbian::DistributionPolicy perldoc incorrect since CL653690
+    DEF110092 - CBR tools do not indicate whether or not abld cache is being used
+    DEF108677 - BldDocs does not build the docs for DeltaEnv 
+    DEF109761 - DeltaEnv obliges the user to provide a PGP key 
+    DEF111453 - DeltaEnv causes problems for archive cleaning tool
+    DEF111817 - DeltaEnv fails to handle changes to export rules 
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1001
+
+Made by Product Creation Tools, 31/08/2007
+
+Defect fixes:
+
+    DEF108536 - autoCBR releases components unnecessarily 
+
+Compatibility notes:
+*   Archived components which contain abld.bat in the manifest.xml or the zip
+    files may be reported as dirty.  Components created with this release of the
+    CBR Tools will not contain abld.bat files.
+
+-----------------------------------------------------------------------------------
+
+Version 2.83.1000
+
+Made by Product Creation Tools, 30/08/2007
+
+New Features:
+*   PREQ775 - Alignment of CBR and System Model components
+
+Compatibility notes:
+*   There is a new keyword supported for specifying IPR information in MRP files.
+    Information on the syntax and usage of the 'ipr' keyword can be found in the
+    CBR Tools CHM help file->CBR Tools User Guide->Creating a typical MRP file->
+    Adding IPR information.
+
+    IPR information will be obtained from MRP files by default, unless the MRP files
+    do not contain IPR information in which case it will fall back to
+    using distribution.policy files.
+    
+    You can specify that distribution.policy files are to be used by default by
+    adding the 'use_distribution_policy_files_first' directive to your reltools.ini.
+    
+    If you are using distribution.policy files as default and the required
+    distribution.policy file is missing then the CBR Tools will attempt to get the
+    information from MRP files.    
+    
+-----------------------------------------------------------------------------------
+
+Version 2.82.1004
+
+Made by Product Creation Tools, 17/08/2007
+
+Defect fixes:
+
+    INC105524 - Cleanremote command does not work...
+    DEF110377 - GetSource does not print warning with missing archives
+
+-----------------------------------------------------------------------------------
+
+Version 2.82.1003
+
+Made by Product Creation Tools, 10/07/2007
+
+Defect fixes:
+
+    DEF103662 - Add support to envsize command to only count 'new' components
+    DEF107988 - Source mapping breaks manifest
+    DEF108734 - DeltaEnv fails to run from SITK
+
+-----------------------------------------------------------------------------------
+
+Version 2.82.1002
+
+Made by Product Creation Tools, 06/07/2007
+
+Defect fixes:
+
+    INC108949 - RELTOOLS: Cannot run GetEnv because another command is already running
+    DEF100309 - CBR Tools do not work with GNU Diff 
+
+-----------------------------------------------------------------------------------
+
+Version 2.82.1001
+
+Made by Product Creation Tools, 29/06/2007
+
+Defect fixes:
+
+    DEF102405 - reltools don't seem to cope with importing releases with sourceX
+                but no key
+    DEF105028 - Cleanlocalarch did not keep a recent component when it was specified to
+    DEF107829 - Autoflush turned on for reltool scripts
+    DEF107832 - Import.pm should have setting so that "Incorrect PGP passphrase"
+                doesn't hang YG
+
+Compatibility notes:
+*   Previously Cleanlocalarch would remove components which were corrupt or which
+    were being released into the archive at the same time Cleanlocalarch was
+    running.  Now Cleanlocalarch will not remove these components by default.
+    If you wish for Cleanlocalarch to remove such components you will need to
+    specify the -r (really clean) flag when running Cleanlocalarch.
+
+-----------------------------------------------------------------------------------
+
+Version 2.82.1000
+
+Made by Product Creation Tools, 26/06/2007
+
+New Features:
+*   GT0366/PREQ1703 Traceability PREQ for changes to legacy functionality which
+    have been delivered as part of Nutmeg
+    REQ7325 CBR intelligent bitwise-delta releases
+
+Compatibility notes:
+*   This change provides the new DeltaEnv command - there is no change to the
+    existing release/import/export commands or their functionality
+
+-----------------------------------------------------------------------------------
+
+Version 2.81.1018
+
+Made by Product Creation Tools, 19/06/2007
+
+Defect Fixes:
+
+    DEF107823 - CBR Tools compatibility fix for export sources owned by another component
+
+Compatiblity notes:
+*   If you specify the wrong number of arguments for the 'export_file' keyword in
+    an MRP file then an error will be produced.  The new error is 'Error: Invalid
+    number of arguments to 'export_file' keyword in "MRP name"'.
+
+-----------------------------------------------------------------------------------
+
+
+Version 2.81.1017
+
+Made by Engineering Tools, 08/06/2007
+
+Defect Fixes:
+
+    DEF107823 - CBR Tools compatibility fix for export sources owned by another component
+
+-----------------------------------------------------------------------------------
+
+Version 2.81.1016
+
+Made by Engineering Tools, 30/05/2007
+
+Defect Fixes:
+
+    INC104253 - ExportRel exits silently if release exists on FTP site
+
+Compatiblity notes:
+*   Additional messages in the ExportRel command:
+    - a note of anything that didn't need exporting because it already exists
+    - a report at the end of all successful exports
+    - a messsage at the end if the overall effect of the tool was to do nothing
+
+-----------------------------------------------------------------------------------
+
+Version 2.81.1015
+
+Made by Engineering Tools, 25/05/2007
+
+Defect Fixes:
+
+    INC105513 - Using validaterel results in releases with corrupt manifest files
+    INC105514 - Cannot find mrp file when using validaterel
+    INC105518 - Out-commented line in mrp file picked up anyway...
+    INC105677 - CBR Tools behave badly with special characters in passwords
+    INC105539 - Viewnotes produce not so good html...
+    INC105535 - Greek and Russian characters are not supported by reltools
+    INC105548 - Reltools allowing to build on drives lower than F:
+
+-----------------------------------------------------------------------------------
+
+Version 2.81.1014
+
+Made by Engineering Tools, 30/04/2007
+
+Defect Fixes:
+
+    DEF101018 - CBR getenv gets stopped
+    DEF101032 - Unnecessary confirmation dialog in installer during upgrade
+    DEF104279 - The exclude keyword in the CBR export table breaks the exported archive
+    DEF104280 - CBR Documentation of export tables is incomplete
+
+Minor Changes:
+    Amended the error messages produces when UnZip fails to include the return code
+
+-----------------------------------------------------------------------------------
+
+Version 2.81.1013
+                             
+Made by Engineering Tools, 01/03/2007
+
+Defect Fixes:
+    DEF099673 - OS limits on path length are not enforced by CBR tools
+    DEF102329 - Importenv runs slowly
+
+Compatibility Notes:
+*   Amended CleanEnv so that warning messages are produced instead of error
+    messages in relation to files and the OS path length.
+
+-----------------------------------------------------------------------------------
+    
+Version 2.81.1012
+                             
+Made by Engineering Tools, 20/02/2007
+
+Defect Fixes:
+    INC101483 - dumpbin /symbols /exports failed
+
+Compatibility Notes:
+*   The tools will now continue on from errors originating from an evalid
+    dependency (e.g. dumpbin, and also others such as elfdump).  The errors are
+    suppressed if they originate from dumpbin, and appear as warnings if
+    originating from other tools.
+*   When validating the message 'No checksum found for files(s)...' will appear
+    in all these cases, or when validating against a release which experienced
+    one of the above evalid dependency failures when it was made.
+
+-----------------------------------------------------------------------------------
+
+Version 2.81.1011
+                             
+Made by Engineering Tools, 22/01/2007
+
+Defect Fixes:
+    DEF098727 - Add support for forcing an import of an environment
+    DEF092967 - [CBR Tools] Re-enable newly disabled functionality in fix for DEF092883
+    DEF099673 - OS limits on path length are not enforced by CBR tools
+    DEF100138 - LatestVer filtering is case sensitive
+    DEF097215 - CBR/Evalid generates incorrect manifest checksum when dumpbin not present
+
+Compatibility Notes:
+*   Path lengths are now enforced by the CBR tools.  It is now not possible to
+    release a file with a path of containing more than 245 characters.
+*   A new informational message has been added.  When validating against a
+    component which was built on a machine with no 'dumpbin' program, and which
+    contains files that require dumpbin in order to be validated, the code will
+    now revert to the validation process which predated version 2.81 of the
+    tools.
+    The new message is 'No checksum found for files(s) <files> - reverting to
+    old evalid process.'
+
+-----------------------------------------------------------------------------------
+
+Version 2.81.1010
+Made by Engineering Tools, 03/01/2007
+
+Defect Fixes:
+    DEF091267 - CBR tools 2.80 produce warning when used with Perl 5.8.7
+    DEF095504 - Support for 'ipr' keyword tolerance
+    DEF099019 - Export does not give FTP information without extra options
+
+Compatibility Notes:
+*   The 'ipr' keyword is not to be used in MRP files as the CBR Tools will
+    ignore it.  This functionality has been added to support PREQ775.
+
+-----------------------------------------------------------------------------------
+
+Version 2.81.1009
+Made by Engineering Tools, 12/12/2006
+
+Defect Fixes:
+    DEF097247 - CBR command diffrel is broken unless you provide version information
+    INC096841 - ImportEnv can lead to corrupt environments in low-disc space situations
+
+-----------------------------------------------------------------------------------
+
+Version 2.81.1008
+Made by Engineering Tools, 24/11/2006
+
+Defect Fixes:
+    DEF097671: CBR assumption makes binaries from a new tools platform orphans 
+
+-----------------------------------------------------------------------------------
+
+Version 2.81.1007
+Made by Engineering Tools, 2/11/2006
+
+New Features:
+*   Implemented CR0751 - Remove GPG binary from CBR Tools distribution
+
+Compatibility Notes:
+*   Users will need to have installed a version of GPGv1.x or PGP Command Line
+    version 6 or later to use the import/export functionality.  The tools no
+    longer come with a default tool.
+
+-----------------------------------------------------------------------------------
+
+Version 2.81.1006
+Made by Engineering Tools, 21/09/2006
+
+Defect Fixes:
+    DEF091264	LatestVer should filter results by a pattern
+    DEF092244	Use of uninitialised value in Manifest.pm line 128
+    DEF092722	exclude.txt parsing dislikes hyphens in wildcard specifications
+    DEF092972	ViewNotes creates blank documents when attempting to view notes
+                for a component which has not been released
+    DEF093204	CBR Tools Quick Reference typo
+    DEF093609	validaterel assumptions about path case can lead to CBR errors
+    DEF094460	[System Build] - Can't locate EvalidCompare.pm
+
+-----------------------------------------------------------------------------------
+
+Version 2.81.1005
+Made by Engineering Tools, 17/08/2006
+
+Defect Fixes:
+    DEF092883  [System Build] - CBR Tools identifying folders as orphans
+
+-----------------------------------------------------------------------------------
+
+Version 2.81.1004
+Made by Engineering Tools, 08/08/2006
+
+Defect Fixes:
+    DEF087684  [CBR Tools] Diffrel can't cope with paths longer than as little as 115 chars
+    DEF090893  [CBR Tools] The reltools.ini 'experimentalproxy' keyword is treated as 'proxy'
+    DEF088308  [CBR Tools] Run-time error when EPOCROOT is invalid
+    DEF088479  [CBR Tools] Tools never warn about missing cbrtargetalias.cfg
+    DEF089530  "cleanenv -rf" doesn't remove rogue dirs
+    DEF085602  [CBR Tools] Get source for any environment
+    INC089568  reltools.ini.ex out of date
+
+Compatibility Notes:
+*   GetEnv functionality has been extended to allow the source code for any
+    environment to be downloaded, irrespective of whether it is the current
+    environment or not.  This is achieved by using the --source-only switch.
+*   When using cleanenv it will now remove any empty directories it finds within
+    the EPOC tree.  The list of directories to be removed will be displayed
+    with the list of files to be removed.
+*   If the 'remote_site_type experimentalproxy' option was specified in the
+    reltools.ini file, it would actually have been interpreted as 'proxy' and
+    not 'experimentalproxy'.  Users using the 'experimentalproxy' keyword will
+    find that the tools now respect that keyword.  To get the old behaviour,
+    the remote_site_type value should be 'proxy'.
+*   The CBR tools now create temporary directories under the system temp dir.
+    If your system temp dir is deeply nested, it may be better to override this
+    with a shorter path, since there are limitations on internal path lengths
+    for certain cbr commands.  This can be done my specifying the 'temp_dir'
+    keyword in reltools.ini, e.g. 'temp_dir c:\temp'
+*   The CBR tools should produce a warning message if the cbrtargetalias.cfg
+    file is missing.  This functionality was not working properly and has now
+    been fixed.  This warning message can be suppressed by specifying the
+    'no_target_alias_warning' in your reltools.ini.
+
+-----------------------------------------------------------------------------------
+
+Version 2.81.1003
+Made by Engineering Tools, 06/06/2006
+
+Defect Fixes:
+    DEF065262  [CBR Tools] cleanremote fails to clean old releases (documentation issue)
+    DEF084397  Upgrading releases using getenv doesn't remove empty include directories
+    DEF085780  ValidateRel fails when no MRP file exists (e.g. due to having no source)
+    DEF087482  cleanremote broken in 2.80.1002
+
+Compatibility Notes:
+*   If using cleanlocalarch and the copy of the component in the local archive is
+    corrupt then cleanlocalarch will give the following error message and continue:
+    "Warning: Unable to identify the environment for 'Component Version'. This may
+    result in additional component releases being cleaned from the archive.
+    (Corrupt release; missing reldata file)".  This replaces the error message:
+    "No Reldata file exists for $thisComp $thisVer as it would appear to be corrupt.
+    A fresh version shall need to be installed".
+
+
+-----------------------------------------------------------------------------------
+
+Version 2.81.1002
+Made by Engineering Tools, 26/04/2006
+
+Defect Fixes:
+    DEF084619: [CBR Tools] Cat X is pre-2.80.1000 Compatible
+
+-----------------------------------------------------------------------------------
+
+Version 2.81.1001
+Made by Engineering Tools, 19/04/2006
+
+Defect Fixes:
+    DEF068972: [CBR Tools] A CBR component being installed can't be interrupted
+
+-----------------------------------------------------------------------------------
+
+Version 2.81.1000
+Made by Engineering Tools, 12/04/2006
+
+New Features:
+* GT0278/TREQ0017 Significantly Reduce CBR Build Time
+    REQ0035  Add component manifest
+     An XML manifest is created during component release - contains Evalid MD5
+     checksums of component content.
+    REQ0036  ValidateEnv/Rel using Evalid MD5
+     Validation uses the manifest checksums rather than installing a temporary
+     local copy and generating evalid data every time.
+
+N.B.: The text above is a summary of the requirements.
+
+Defect Fixes:
+    DEF058539: [CBR Tools] Timestamp of source clobbered by reapplication of MSDOS attributes
+    DEF077956: [CBR Tools 2.80.1001] Unhelpful Warnings
+
+Compatibility Notes:
+*   A manifest.xml file is added to each new component published. This can be
+    found at the same level as the component reldata file within the archive.
+
+-----------------------------------------------------------------------------------
+
+Version 2.80.1003
+Made by Engineering Tools, 04/04/2006
+
+Defect Fixes:
+    DEF083821: CBR tools 2.81beta3 breaks the PATH environment setting
+
+-----------------------------------------------------------------------------------
+
+Version 2.80.1002
+Made by Engineering Tools, 03/04/2006
+
+Defect Fixes:
+    DEF083670: cleanlocalarch stops cleaning
+    DEF083808: CBR tools have incorrect "earliest compatible version" in reldata
+    DEF077676: CBR tools create perl warnings and unhelpful output given a bad .mrp file
+    DEF082745: CBR tools envinfo releasable error should be clearer
+    DEF083234: CBR Tools MrpData->Source() method returns some directories
+
+Compatibility Notes:
+
+*   The error message for a bad line in an MRP file has been changed.  The line
+    number of the bad line is now printed inbetween the MRP file name and the
+    bad line offending line is always printed too e.g. Warning: Invalid line in
+    "helloworld\group\helloworld.mrp" (Line 3) - "source\helloworld"
+    instead of:
+    Warning: Invalid line in "helloworld\group\helloworld.mrp" - .
+*   When the EPOCROOT could not be removed from the path the following error
+    message was displayed: "Error: Couldn't remove "\" from "afolder".
+    This has now been changed to:
+    Error: Path does not contain EPOCROOT - EPOCROOT:"\" - Path:"afolder".
+
+-----------------------------------------------------------------------------------
+
+Version 2.80.1001
+Made by Engineering Tools, 12/01/2006
+
+Defect Fixes:
+    DEF077665: [CBR Tools] does not add any files warning should be a remark
+
+-----------------------------------------------------------------------------------
+
+Version 2.80.1000
+Made by Engineering Tools, 06/01/2006
+
+New Features:
+* GT0278/TREQ0018 CBR Tools ISC Support
+    REQ0018  Comply with new version numbering
+     The CBR Tools must adhere to the Engineering Tools versioning standard.
+    REQ0037  Update tools documentation
+     The CBR Tools documentation must be updated to include new features.
+    REQ0045  Arbitrary IRP categorisation (A-Z)
+     The CBR Tools must allow arbitrary IPR categorisation of source and
+     exports to permit additions within the CKL.
+    REQ0076  Enhance existing export filtering
+     The CBR Tools export functionality must be able to differentiate between
+     source and exports when encryptying based on IPR category.
+
+N.B.: The text above is a summary of the requirements.
+
+Defects Fixed:
+    DEF044949  [Reltools] Missing in-source documentation
+    DEF052380  [RelTools] Misleading warning message from 2.76.3
+    DEF053523  [Reltool] bininfo after preprel does not work
+    DEF054781  [Reltools] InstallSnapshot falls over if given no options.
+    DEF054800  [Reltools] CBR Release Tools message in 'importenv' is gibberish.
+    DEF054806  [reltools] Release tools command 'BuildRel' compatibility break
+    DEF055785  [Reltools] DiffRel upset if no source
+    DEF058539  [Reltools] Timestamp of source clobbered by reapplication of MSDOS attributes
+    DEF058760  [Reltools] GPG decrypt less verbose than GPG encrypt
+    DEF060192  cleanlocalarch does not report failure to delete files / directories
+    DEF061247  CBR tools Installation document still refers to source_filter keyword
+    DEF061580  [RelTools] PASV mode suggested when PASV mode enabled
+    DEF061684  GPG Encrypt/Decrypt does not show command executed in very verbose mode
+    DEF062294  [RelTools] Validateenv produces warnings
+    DEF064016  [RelTools] Validateenv fails if source is not present
+    DEF064912  validaterel does not report filename of reclassified export
+    DEF065010  CBR Tools treat "-exports" as "exports"
+
+Compatibility Notes:
+*   The CBR Tools were incorrectly interpreting the (illegal) MRP syntax "-exports"
+    to mean "exports". Version 2.80 of the CBR Tools corrects this defective action
+    and will now stop with the fatal error, 'Error: Unknown keyword "-exports" in
+    [file.mrp]' should this be encountered (where [mrp.file] is replaced by the
+    path to the actual MRP file containing the incorrect syntax). Actions to
+    resolve: 1. Ensure no MRP files contain the illegal syntax. 2. Use the
+    -export_file syntax instead (if required). 3. Be aware that any files thought
+    to have been excluded from export were actually being exported.
+*   CBR Tools release 2.76.4 inadvertently 'touch'ed the files as a result of
+    reapplying the MSDOS file attributes after unzipping (e.g. during a getenv
+    operation). This overwrote the original Modified timestamps with the current
+    system time. CBR Tools release 2.80 will preserve the timestamps as all releases
+    prior to 2.76.4 used-to. If any dependency has been introduced based on this
+    unintentional change then the actions to resolve will depend on the actual
+    implementation of the dependency. We do not believe it is likely that any issue
+    will exist due to the obscurity and relative short life of this defective
+    action.
+*   Additional -v (verbose output) has been added to the tools during GPG
+    decryption. This will permit the output from the encryption utility to be seen.
+    This brings the decryption action into line with the encryption action which
+    already displays the utility output. During a CBR import and when in verbose
+    mode, this additional output will be included in the command output. The
+    additional output will follow the form of the encryption output display in that
+    each line will be indented with a tab character. These lines may be safely
+    ignored as verbose output.
+*   IPR categorisation of source files was until recently restricted to A-G or X
+    (for undefined). Any letter: A-Z, is now permitted (with X retaining its special
+    property of representing "IPR not specified"). The behaviour in previous
+    versions of the tools was undefined should a previously-invalid categorisation
+    have been encountered. In the unlikely event that any dependencies were created
+    on this undefined behaviour then each will need to be looked at to determine
+    sensible resolutions.
+*   Export table syntax has been updated to allow for separate treatment of source
+    and exports. The old syntax is still supported but more rigorous error checking
+    will ensure that any invalid content will cause a fatal error to be thrown. Only
+    the keywords "exclude", "exclude_bin", IPR categories consisting single letters
+    "A"-"Z" and whitespace will be allowed. Any other punctuation will not be
+    permitted, e.g. hyphens, brackets, braces etc. These were not explicitly
+    disallowed in the previous versions but must now be, to allow the additional new
+    syntax to be checked properly. Actions to resolve any issue: 1. restrict export
+    table content to only the above permitted keywords and the new syntax (details
+    of which will are available in the documentation).
+
+-----------------------------------------------------------------------------------
+
+Version 2.76.4
+Made by Nic Percival, 15/02/2005
+
+From Nic Percival:
+* Fixes for:
+    DEF054892 - Missing option "exclude_bin" from the documentation in module "Installation"
+
+From Hocine Adjerid:
+* Fixes for:
+    DEF053737 - [Reltools] CBR Tools Fail to work with "testexports" keyword
+    DEF051278 - [Reltools] zip does not accept filenames with '['
+    DEF050304 - [Reltools] Commands within the RelTools indicate they are not supported
+    DEF050374 - [Reltools] importrel should not rely on EPOCROOT being set
+    DEF051241 - [Reltools] CBR tools provided GnuPG does not support IDEA encryption algorithm
+    DEF049473 - [Reltools] CBR tools users must not 'send us a patch'
+    DEF052150 - [Reltools] importrel/importenv are case sentive in 2.76.3 unlike earlier version
+    DEF051424 - [Reltools] RemoteSite::NetDrive unhelpful
+* Implemented CR:
+    CR-EKOS-653GJ9 :  add the possiblity to exclude binaries from a component when exporting.
+
+From George Sin:
+* Fixes for:
+    DEF043802 - [Reltools] CleanLocalArch is not atomic in it's move operations
+    DEF049619 - [Reltools] viewnotes -d between gt_techview and gt_only_baseline crashes
+    DEF049823 - [Reltools] Cleanlocalarch in release tools 2.76.2 documentation needs updating
+    DEF047825 - [Reltools] CBR tools inefficient at searching for releases
+    DEF043820 - [Reltools] lastestver documentation is unclear
+* Implemented CR:
+    ABEK-63REXV: Option to overwrite destination when using cleanlocalarch of the CBR tools.
+    CLEN-65CEUW: RemoveSource functionality needed for redundant components found during a Getenv\Getrel command
+    JROE-62DHSZ: Add support to CBR viewnotes to output HTML on stdout rather than creating a file.
+    EMAE-68LJZF: Minimising CBR delta sizes when transferring CBR builds between parties with shared source access
+
+From Larry Knibb
+* Fix for:
+    DEF053799 - [Reltools] CBR tools do not preserve file attributes
+
+
+From Conor Lennon:
+* Fix for:
+    DEF051830 - [Reltools] reltools 2.76.3 causing IO errors
+* Implemented CR:
+    CLEN-65CF94 Baseline component for DevLib and Documentation components so as to install documention as an option
+    CLEN-65CEUW  Remove Source functionality needed for redundant components found during a Getenv\Getrel command
+
+-----------------------------------------------------------------------------------
+
+Version 2.76.3
+Made by Iain Williamson, 04/11/2004
+
+From Conor Lennon:
+*Fix for:
+    DEF050197  [System Build] CBR Warnings in 03387 (8.1a) introduced by new RelTools
+
+-----------------------------------------------------------------------------------
+
+Version 2.76.2
+Made by Nic Percival, 08/10/2004
+
+From Hocine Adjerid:
+* Fixes for:
+    DEF045203  CBR Tools do not support all FTP server s/w
+    DEF048538  CBR: Archive::Zip module truncates some files during unzip
+    DEF049213  zip.exe does not accept name with '['
+    DEF049351  CBR tools do not find cbrtargetalias unless EPOCROOT is set to /
+
+From George Sin:
+* Fixes for:
+   DEF045331  RelTools v2.74 fail on removesource if full component not present
+   DEF046291  Latestver of the reltools does not like archives that don't exist
+   DEF047874  Cleanlocalarch determine from the output if it's was a dummy run
+   DEF047458  Release tools: ftp_timeout field not used
+   DEF047935  Reltools docs error
+
+* Also includes implementation for CR WROS-5ZLKHS Provide a tool which can create a new version
+  of a CBR component by copying and manipulating the archive metadata of an existing version
+
+From Iain Williamson:
+* Implemented CR ABEK-5z5GXE Usable CBR archive cleaning - new keep_recent_rel
+  and keep_recent_env keywords
+
+From George Sin:
+
+* Fixes for:
+   DEF047062 [Reltools] CBR Tools fail to identify the need to upversion a component.
+   DEF048513 [Reltools] validateenv does not check for additional binaries.
+
+From Uma Ahamed:
+* Added fix for DEF045288 - latestver and viewnotes don't work in 2.75.2 with gt_only_baseline
+
+-----------------------------------------------------------------------------------
+
+Version 2.76.1
+Made by Iain Williamson, 11/08/2004
+
+From Uma Ahamed:
+
+* Added fix for DEF043802 "CleanLocalArch is not atomic in it's move operations"
+
+* Added fix for DEF046030 "cleanenv removes component without re-installing it"
+
+From George Sin:
+
+* Fixes for:
+   DEF043820  lastestver documentation is unclear
+   DEF044978  Error in how source is unpacked in the Release tools...
+   DEF045715  Incorrect warning about -binary in comms-infras_commdb_cedar
+   DEF046148  Release Tools do not allow spaces in their installation directory
+   DEF046325  RelTools don't report correct error messages in local arch disc
+     full conditions
+   DEF046711  Release tools 2.76 cannot install files that already exist and is
+     read only...
+
+From Hocine Adjerid:
+
+* Fix for DEF046532  RelTools v2.76 won't configure to work with an internal
+    proxy for FTP traffic
+
+-----------------------------------------------------------------------------------
+
+Version 2.76
+Made by Iain Williamson, 07/06/04
+
+From George Sin:
+
+* Have added all build from anywhere functionality as part of PR0097.
+
+* The keyword source_map is now accepted in the reltools.ini file.
+
+* In source documentation updated to refect the change.
+
+From Nic Percival:
+
+* Added fix for DEF045096, retry gpg if it fails with return code 2.
+
+From Iain Williamson:
+
+* Fixes for DEF043798, 043802, 044943 and 044944 (various cleanlocal/remote
+  archive defects)
+
+From Paul Ross:
+
+* Added fixes for DEF045417, DEF045416, DEF045414, DEF044950, DEF044948
+  DEF044947, DEF044946, DEF044781, DEF044778, DEF044777, DEF044775, DEF044773
+  DEF044771 (code review defects)
+
+-----------------------------------------------------------------------------------
+
+Version 2.75.2
+Made by Iain Williamson, 10/05/04
+
+From Paul Ross:
+
+* Suppressed warning of missing alias file if not using 'all' functionality
+  (DEF044726)
+* Suppressed directory listing during FTP (DEF044724)
+
+From Iain Williamson:
+
+* Fixed 'argument "n.nn.n" isn't numeric...' warning (DEF044699)
+
+From George Sin:
+
+* Fixed broken link when building 'MakingReleases' doc (DEF044976)
+
+-----------------------------------------------------------------------------------
+
+Version 2.75.1
+Made by Iain Williamson, 23/04/04
+
+From Paul Ross:
+
+* Fixed bug where tools failed to obtain the correct IPR category for export
+  restricted files (DEF044565)
+
+-----------------------------------------------------------------------------------
+
+Version 2.75
+Made by Iain Williamson, 21/04/04
+
+From Paul Ross:
+
+* Added support for the aliasing system in MRP files, for example using
+  a target 'ALL' in an MRP file.
+
+* The data needed to resolve aliases is in \epoc32\tools\variant\cbrtargetalias.cfg,
+  if this is absent a warning is issued only when required and then only once.
+  The warning can be suppressed by the presense of a flag 'no_target_alias_warning'
+  in the reltools.ini file.
+
+* In IniData.pm added APIs ReadTargetAlias(), ReadTargetAliasFile() to read the
+  alias file. Added APIs HasTargetPlatforms() and TargetPlatforms() to resolve
+  MRP aliases. Added API CheckAliasWarning() to handle the absence of alias
+  file warning.
+
+* In MrpData.pm added implementation code in HandleBinSet() to provide resolution of
+  aliases if appropriate.
+
+From Adrian Taylor:
+
+* Removed obsolete GenMrp and UpdateMrp commands.
+
+* Marked several obscure tools as 'unsupported'
+
+* Added warnings if -binary or -export_file are not doing anything.
+
+* Added two new types of remote archive: 'experimentalftp' and
+  'experimentalproxy'. These are exactly the same as 'ftp' and 'proxy',
+  but use a different algorithm for listing the contents of the FTP site.
+  You may find that these new remote site types work successfully with
+  CleanRemote, whilst the standard 'ftp' and 'proxy' types almost
+  certainly will not.
+
+* Rejigged the test suite to use a real FTP site for testing.
+
+-----------------------------------------------------------------------------------
+
+Version 2.74
+Made by Adrian Taylor, 12/02/04
+
+This version is identical to 2.73-Testing-Only.
+
+-----------------------------------------------------------------------------------
+
+Version 2.73  *** TESTING ONLY ***
+Made by Adrian Taylor, 30/01/04
+
+From Adrian Taylor:
+
+* Added -i flag to GetRel
+
+* Ensured little dots march across screen even with the dodgy IO layer
+  of Perl 5.8.x
+
+* Fixed bug where tools didn't complain if EPOCROOT wasn't set (DEF041251)
+
+* 'component' argument to EnvInfo -f <component> was case-sensitive. INC040759.
+  Fixed.
+
+* Added Optimisation document.
+
+* Added new field to reldata: 'first compatible version'. This shows the first
+  version of the tools that a given release should work with. It's set based on
+  the CategoriseXXX features in the reltools.ini. GetRel and GetEnv issue a
+  warning if they're trying to install a release that's too recent.
+
+* Added optional version number filter to LatestVer, so it only shows versions
+  with a certain phrase in their version number.
+
+* Tests for GetSource -i, GetRel -s and GetRel -si added to test suite.
+
+* Fix for serious bug, introduced in 2.71, where duplicate ownership files were
+  sometimes not reported.
+
+* Increased diagnostics for problems listing directories on FTP sites, to try
+  to work out what's up with the Symbian FTP site.
+
+* Increased robustness of RemoteSite::FTP::DirList now I've seen the symptoms
+  that the Symbian FTP site has.
+
+* Improved efficiency of ExportEnv - it no longer does so many redundant checks
+  to find out if a release has already been exported.
+
+* Upgraded Net::FTP to libnet-1.17
+
+* Reverted 2.72 change where FTP connections used 'dir' instead of 'ls'. This
+  will reveal problems with CleanRemote, which I have tried to work around.
+
+From Matt Davies (merged by Ade):
+
+* Fix for INC040720 - CBR Tools: Categorised Exports cannot have spaces in the source path
+
+-----------------------------------------------------------------------------------
+
+Version 2.72
+Made by Adrian Taylor, 4/12/03
+
+From Adrian Taylor:
+
+* Added 'testexports' MRP directive
+
+* Re-enabled limited SourceInfo functionality
+
+* Fixed many bugs in CleanRemote.
+
+* Ensure 'PGP passphrase' prompt is never invisible even on Perl 5.8.x
+
+* Added \epoc32\release\tools\* to the list of standard ignores, as the
+  files in there are intermediate files. (They get copied to \epoc32\tools,
+  which is the final resting place). See DEF039764 for the reasoning.
+
+* Prevented the use of Win32::Semaphore module when disable_win32_extensions
+  is turned on
+
+From Joe Branton:
+
+* Added checks to ensure that all exported files referred to by an MRP file physically
+  exist. Also added a defensive check to Utils::ZipList to throw an error if any
+  of the files being zipped are not present (previously such situations were being
+  ignored).
+
+-----------------------------------------------------------------------------------
+
+Version 2.71
+Made by Joe Branton, 08/10/2003
+
+Know Problems:
+
+* The command 'SourceInfo' is broken in this release.
+
+From Adrian Taylor:
+
+* Removing -d option from LatestVer documentation
+
+* Removed annoying FTP site prompting with LatestVer -vv when no FTP site
+  defined.
+
+* Prevented the version number '0' which confused the tools
+
+* Fixed bug which prevented BinInfo <file> working if the component was
+  pending release.
+
+From Joe Branton:
+
+* Added support for EPOCROOT with a value other that '\'. When installing binaries
+  they will be installed into %EPOCROOT%\epoc32. When making releases, EPOCROOT is
+  not stored in the zip files, thereby allowing a release to be installed into an
+  environment configured with a different EPOCROOT.
+
+* Added support for a new environment variable - SRCROOT. This is similar to EPOCROOT
+  except that it defines where the release tools install source (by default - the -i
+  option can still be used to override this). SRCROOT information is not stored in
+  release zip files.
+
+* Added support for relative paths in MRP files. You can now do things like:
+
+    binary . all
+    exports ..\somepath
+
+  Such paths are read as being relative to the directory inwhich the MRP file is stored.
+  If absolute paths are specified, the following rules apply to each keyword:
+
+    'notes_source <file>'                    - SRCROOT is prepended to <file>.
+    'source <file|dir>'                      - SRCROOT is prepended to <file> or <dir>.
+    '[-][test]binary <abld_path>'            - SRCROOT is prepended to <abld_path>.
+    '[-][test]binary <file|dir>'             - EPOCROOT is prepended to <file> or <dir>.
+    'exports <abld_path>'                    - SRCROOT is prepended to <abld_path>.
+    '[-]export_file <src_file> <dest_file>'  - SRCROOT is prepended to <src_file>.
+                                             - EPOCROOT is prepended to <dest_file>.
+
+  Note, it is assumed that all components are EPOCROOT compliant (i.e. only generate files
+  within %EPOCROOT%). Currently at least one component (Java) is known to not comply. This
+  has the consequence that it is not currently possible to release Java using an EPOCROOT
+  of anything other than '\'. It also means that when installing an environment containing
+  Java, its 'erj' directoy will be put in %EPOCROOT%\erj rather than \erj.
+
+  Tools developers note, within MrpData all paths are stored in absolute form, but
+  without EPOCROOT or SRCROOT at the beginning. This is because parts of MrpData get
+  written into RelData objects, and these need to be independent of EPOC/SRCROOT. The
+  consequence of this is that care must be taken both within MrpData and by users of
+  MrpData to prepend EPOCROOT or SRCROOT as appropriate before using the paths.
+
+* Added support for :zip statements in the PRJ_EXPORTS section of bld.inf files. Note,
+  at the time of writing bldmake.pl contained bugs in it's implemention of this
+  functionality. Tested against a hacked version of bldmake.pl that contained fixes to:
+    a) "abld -w export" listing "\" as an export (bug in GetArchiveExportList()).
+    b) "abld -w export" not listing exports relative to EPOCROOT.
+
+-----------------------------------------------------------------------------------
+
+Version 2.70
+Made by Adrian Taylor, 07/08/2003
+
+From Adrian Taylor:
+
+* Better error checking of 'unzip' return code, detecting invalid releases.
+  Similarly with GPG.
+
+* Fix to allow 'perldoc CleanEnv' to produce the command manual page,
+  rather than the manual page for the internal module.
+
+* Fixed problem with -f option on Push/Pull/Rel/Env
+
+* Worked around bug in Perl 5.8.0 itself, which prevented GetRel -p and
+  MakeRel -p from working (Perl bug #21217)
+
+* Fixing minor bug in test suite t_snapshot and Perl 5.005
+
+-----------------------------------------------------------------------------------
+
+Version 2.69
+Made by Adrian Taylor, 30/7/2003
+
+From Adrian Taylor:
+
+* Fixing bug in ValidateEnv which resulted in complaints about "uninitialised
+  value at line 644".
+
+-----------------------------------------------------------------------------------
+
+Version 2.68
+Made by Adrian Taylor 23/7/2003
+
+From Adrian Taylor:
+
+* Fixing bug in ValidateRel. If there was a component with binary files,
+  none of which were within \epoc32, and no source code files, its status
+  would always be reported as clean by validation.
+
+-----------------------------------------------------------------------------------
+
+Version 2.67
+Made by Joe Branton 9/07/2003
+
+From Adrian Taylor:
+
+* Fixing bug in ValidateRel. If you had a pending release component, then
+  you validated against a component that didn't match what you had, the tools
+  got temporarily confused and you had to PrepRel the component to get things
+  back to normal.
+
+From Joe Branton:
+
+* Added '-d' option to CleanLocalArch to allow dummy runs to be performed.
+
+* Changed behaviour of CleanLocalArch so that it cleans entire releases - previously
+  it left reldata files behind in an attempt to preserve release note history. However
+  with this file in place the tools will not warn the user if they attempt to install
+  the corresponding release even though there is nothing to install. This issue
+  needs to be addressed in a more fundamental way. For the time being cleaned releases
+  are removed without trace.
+
+* Removed output to STDERR from the majority of the tools. Note, this has not been done
+  for the Net (FTP etc) modules and IPRTOOL since sources are not technically part of
+  the release tools and we don't want to branch them.
+
+-----------------------------------------------------------------------------------
+
+Version 2.66
+Made by Adrian Taylor 24/06/2003
+
+From Adrian Taylor:
+
+* Reinstating CleanLocalArch command
+
+-----------------------------------------------------------------------------------
+
+Version 2.65
+Made by Joe Branton 16/06/2003
+
+From Adrian Taylor:
+
+* Fixing bug in MakeSnapShot - no error message was printed if the filename
+  was not specified
+
+* Fixing bug which prevented 'viewnotes -s <comp>' when <comp> not installed
+
+From Joe Branton:
+
+* Fixed defect that caused .lib file binaries (and potentially other duplicate files
+  to be incorrectly categorised. Duplicate files should now be put into the 'unclassified'
+  category so that they are available regardless of the user's 'required_binary'
+  configuration.
+
+-----------------------------------------------------------------------------------
+
+Version 2.64
+Made by Joe Branton 8/5/2003
+
+From John Roe (merged by Joe Branton):
+
+* Fixed bug in mrp parser that caused an error to be thrown when parsing mrp files
+  with multiple "exports" statements with export classification enabled.
+
+-----------------------------------------------------------------------------------
+
+Version 2.63
+Made by Andy Salter 14/04/2003
+
+From Andy Salter:
+
+* Added EnvUserName to reldata.pm and viewnotes.
+
+-----------------------------------------------------------------------------------
+
+Version 2.62
+Made by Joe Branton 07/04/2003
+
+From Adrian Taylor:
+
+* Fixed bug that prevented reltools.ini keyword 'pasv_transfer_mode' from working.
+
+* Added helpful error message if Utils::SplitFileName dies due to a known bug in Perl 5.6.0 (fixed in 5.6.1)
+
+* Added more files to blddocs
+
+* Ignore whitespace at start and end of lines with getrel -p
+
+From Andy Salter:
+
+* Added -o option to ViewNotes, to allow writing output to a file or directory.
+
+From Joe Branton:
+
+* Added utility InstCol2. See documentation for details.
+
+* Fixed minor interface bug in BinInfo - died nastily if given no arguments.
+
+* Fixed defect in ini file parser that caused spurious "Unknown keyword" errors to be
+  displayed when running the test t_exportimport. It's unlikely that this defect would
+  ever be seen in 'the wild' because it would have been necessary for the Perl variable
+  $1 have been set before parsing the ini file. Since the tools always parse the ini file
+  pretty much before doing anything else, this is unlikely to happen. (Also in 2.60.01)
+
+* Fixed identical problem to that described above in MrpData. (Also in 2.60.01)
+
+* Integrated latest version of IPRTOOL (provided by Uma Ahamed) which fixes problem
+  relating to '.' characters in directory names. Removed corresponding assertions from
+  MrpData.
+
+From Iain Williamson (merged by Joe):
+
+* Fixed defect in the way the required_binaries reltools.ini keyword is handled. Now,
+  for example, specifying 'wincw' will not result in 'wins' also being installed.
+  (Also in 2.60.01)
+
+* Added -i <source install directory> option to GetEnv (mirrors GetSource -i option).
+  Note, the supplied patch was slightly modified - the logic for checking that -i is
+  always accompanied with -s was wrong. (Also in 2.60.01)
+
+-----------------------------------------------------------------------------------
+
+Version 2.61
+Made by Joe Branton 13/03/2003
+
+From Joe Branton:
+
+* Extended the behaviour of Im/ExportRel regarding the handling of a list of component
+  versions specified in a text file. The commands now support im/exporting multiple
+  versions of the same component.
+
+* Fixed minor interface bugs in ViewNotes. Now correctly reports when a component
+  does not exist, rather than displaying an empty web page.
+
+* Added 'dummy run' option (-d) to CleanRemote.
+
+* Overhalled configuration of the automated tests. There is now a 'developer_specific.txt'
+  configuration file in the 'configs' directory which should be all developers need to
+  change in order to set up the test harness. The various configurations are generated
+  using a new module ConfigMaker. This provides some C pre-processor like functionality
+  to allow the amount of duplication between configurations to be minimised. See the test
+  documentation for details.
+
+* Fixed defect in ini file parser that caused spurious "Unknown keyword" errors to be
+  displayed when running the test t_exportimport. It's unlikely that this defect would
+  ever be seen in 'the wild' because it would have been necessary for the Perl variable
+  $1 have been set before parsing the ini file. Since the tools always parse the ini file
+  pretty much before doing anything else, this is unlikely to happen.
+
+* Fixed identical problem to that described above in MrpData.
+
+* Added MrpComplexity command. See documentation for details.
+
+* Fixed defect in PrepEnv interactive mode that caused it to prematurely abort if an
+  internal version was not specified when internal versions are required. It now reports
+  an error and carries on.
+
+* Added new commands MakeSnapShot and InstallSnapShot. See documentation for details.
+
+From Adrian Taylor:
+
+* Tidied error message in PathData/ProjectBased
+
+* Fixed regression in 2.59 where diffenv -v no longer overrode -d
+
+* Clarified documentation of -a in latestver
+
+* Added further documentation for -n in viewnotes
+
+* Clarified messages printed by validate[env|rel] -vs
+
+* Spaces at the end of 'source XXX' lines in MRP files are now ignored
+
+Note this release did NOT contain the changes made in 2.60.01 below. These fixes
+have been merged in 2.62.
+
+-----------------------------------------------------------------------------------
+
+Version 2.60.01
+Made by Joe Branton 31/03/2003
+
+From Iain Williamson (merged by Joe):
+
+* Fixed defect in the way the required_binaries reltools.ini keyword is handled. Now,
+  for example, specifying 'wincw' will not result in 'wins' also being installed.
+
+* Added -i <source install directory> option to GetEnv (mirrors GetSource -i option).
+  Note, the supplied patch was slightly modified - the logic for checking that -i is
+  always accompanied with -s was wrong.
+
+From Joe Branton (bug fixes taken from latest branch to get tests to pass):
+
+* Fixed defect in ini file parser that caused spurious "Unknown keyword" errors to be
+  displayed when running the test t_exportimport. It's unlikely that this defect would
+  ever be seen in 'the wild' because it would have been necessary for the Perl variable
+  $1 have been set before parsing the ini file. Since the tools always parse the ini file
+  pretty much before doing anything else, this is unlikely to happen.
+
+* Fixed identical problem to that described above in MrpData.
+
+----------------------------------------------------------------------------------
+Version 2.60
+Made by Joe Branton 26/02/2003
+
+From Joe Branton:
+
+* Fixed defect in new export categorisation functionality that caused a
+  "Can't use string as an ARRAY" Perl error for components whose mrp file contained
+  an 'exports' statement, but which did not actually export anything.
+
+* Changed the way that exported files are IPR classified. Previously the classifications
+  were read from the corresponding source file classifications. However, this meant
+  that unless exported files are released as source, the tools would fail to find
+  the classification and throw an error. Now IPRTOOL is invoked to explicitly classify
+  the source of every  exported file, which lifts this limitation.
+
+-----------------------------------------------------------------------------------
+
+Version 2.59
+Made by ---, --/--/--
+
+From Adrian Taylor:
+
+* 'envinfo' and other read-only commands will no longer try to create all the
+  archives listed in your reltools.ini.
+
+* Fixed documentation error in latestver
+
+* Added check that 'source' directories do not contain '.', because iprtool
+  fails and therefore no source gets packaged up.
+
+* Improved realism of 'fake abld' in test suite.
+
+* Added check that archive_path lines in reltools.ini have a remote path
+  specified, when it's needed.
+
+* Added -d flag to 'ViewNotes' which produces a single HTML page concatenating
+  the release notes between one environment and another.
+
+* Changed DiffEnv to use a new class, EnvDifferencer.pm, which is also used
+  by ViewNotes.
+
+* Added warning to CheckBc that it requires Perl 5.6.1
+
+* Added information to "Installation" about where to get Perl 5.6.1
+
+* Added tests for 'viewnotes'. Added minimal tests to ensure that CheckBc
+  and CheckRls do at least run
+
+* getenv -o now overwrites binaries as well as source (including pending
+  release components)
+
+* Added new "Further Information" document and added information to
+  "Quick Start".
+
+* Fixed bug making releases of 'tools rel' or 'tools deb' components
+
+From Joe Branton
+
+* EnvSize now checks that the user has provided a component name before attempting
+  to calculate its sizes.
+
+* Added 'categorise_exports' keyword and corresponding functionality. See the
+  'Installation' section in the documentation for details.
+
+* Added '[-]export_file' mrp keyword and corresponding functionality. See the
+  'Making Releases' section in the doucmentation for details.
+
+* Added '-d' option to blddocs. By default 'Implementation Notes' are no longer
+  generated. This option can be used to override the default.
+
+* Added 'exclude' keyword and corresponding functionality to the export table parser
+  ExportData. See the 'Installation' section in the documentation for details.
+
+* Changed the failure report summaries of ImportEnv and ExportEnv to print a formatted
+  table.
+
+* Added multi-volume export / import functionality to allow exports to be done
+  do writable CD drives and the like.
+
+-----------------------------------------------------------------------------------
+Version 2.58
+Made by Adrian Taylor, 15/01/03
+
+From Adrian Taylor:
+
+* Fixed bug introduced in 2.56 where an environment scan would continue
+  to run if a binary file didn't exist. This reported very confusing
+  error messages from envinfo and makeenv, and if you agreed to the
+  prompts, cleanenv would delete extra files.
+
+* Added extra documentation and warning messages to prepenv, to note
+  that it doesn't always notice dirty components.
+
+* Fixed prepenv bugs. Firstly, it ignored new MRP locations. Secondly,
+  it misleadingly implied you didn't have to specify a new internal
+  version number for updated components.
+
+* Table formatter always now displays using text format if the output
+  is not a TTY.
+
+* Added -d flag to exportrel and exportenv, which means 'dummy run'.
+  It reports what would happen, without actually doing anything.
+  In particular it reports what PGP keys will be used to encrypt each
+  file.
+
+-----------------------------------------------------------------------------------
+
+Version 2.57
+Made by Adrian Taylor, 09/01/03
+
+From Joe Branton:
+
+* Fixed bug relating to unpacking zip files (say from a getsource) into a directory
+  that doesn't exist. It seems that zip can cope with a single directory not exisiting,
+  but not more than one.
+
+* Added vtable checking functionality to CheckBc.
+
+* Added options to CheckBc to allow individual tests to be disabled.
+
+* Added utility CheckRls.
+
+* Added check to ensure the EPOCROOT environment variable is set to '\'.
+
+* Fixed bug in PrepRel/Env that allowed a new mrp file to be specified without specifying a new version.
+
+From Adrian Taylor:
+
+* Added envsize command
+
+* Added reporting of release size into viewnotes
+
+* Added extra check to exporting, to ensure that the size of the resulting
+  file on the FTP site matches the expected size.
+
+* Added flag -x to exportenv, to just check the size of the exported files
+  instead of doing any exporting. This can provide a report of what exported
+  components are corrupted, if there's a dodgy FTP site.
+
+* Fixed bug in MrpData where directories reported by 'abld -what' would
+  get included in the zip file, instead of their contents.
+
+* Optimised sourceinfo <component>
+
+* Added extra check that the component name in the MRP file matches the component
+  name in the environment database. ("The Fitzgerald Case").
+
+* Changed test suite so t_run requires a drive letter as a command-line
+  argument. (Because I managed to run it on C: and delete most of c:\apps
+  before I realised what was happening...)
+
+* Importenv/exportenv problem summary now displays what went wrong.
+
+* Added -t flag to validaterel, which stops deletion of the temporary
+  directory. This allows further investigation with evalid and other tools.
+
+* Fixed MRP parsing bug where there were comments on the ends of lines
+
+* Made third (remote path) argument to 'archive_path' in reltools.ini optional
+
+* Fixed typo in listcomponents help
+
+* Fixed bug in Excel table formatter where 001 was coming out as 1
+
+* Added -a [number] option to latestver, to show the last 'n' releases.
+  Also allowed -vvv to work even if there is no remote site properly
+  defined.
+
+-----------------------------------------------------------------------------------
+
+Version 2.56
+Made by Adrian Taylor, 21/11/02
+
+From Adrian Taylor:
+
+* Added SourceInfo tool. This shows what source files belong to
+  a component, and vice-versa.
+
+* Added BuildRel tool, which will try to build all the platforms
+  listed in the MRP file of that component.
+
+* Stopped envinfo -f from classifying all the source code. We now do
+  it only when you actually require the classified source code. This
+  makes environment scans about five times as fast when you have lots of
+  components pending release.
+
+* Added table_format keyword to reltools.ini, allowing you to see the
+  output of envinfo, latestver and similar commands in Excel, HTML or
+  CSV format if you like. (Reason: the reports that sourceinfo outputs
+  are far too long to be readable in a console).
+
+* Added 'all' option for binary MRP syntax. e.g.
+   binary \rabbit\hole\group all
+  (Reason: a licensee wanted all possible binaries delivered).
+
+* Changed exportenv to warn if components aren't in the export table,
+  before it starts tranferring data.
+
+* Added a little more readily available information to viewnotes output.
+
+* Fixed bug in viewnotes -s <comp> where <comp> didn't exist - the error
+  message was illogical.
+
+* Fixed bug in MergeEnvironments where -i would stop it all from working
+
+* Fixed bug where extension makefiles using the TO_ROOT variable would
+  cause envinfo to report unknown origins.
+
+* Fixed typo in spelling of disable_win32_extensions. The old spelling
+  still works.
+
+* Tidied up the options that were added to prepenv in 2.55.
+
+* envinfo now states component names in error messages during its
+  scanning phase.
+
+* Checking for error-free completion of bldmake bldfiles.
+
+* Fixed bug where duplicate item checking for MRP binaries was
+  sometimes case-sensitive with categorise_binaries
+
+* Notice more errors from abld build -w and build makefile to fix
+  them.
+
+* Fixed bug where "exports xxx" line in MRP wouldn't trigger bldmake. Normally
+  this was OK because there would be a 'binary' line first which would call
+  bldmake.
+
+-----------------------------------------------------------------------------------
+
+Version 2.55
+Made by Adrian Taylor, 07/11/2002
+
+From Joe Branton:
+
+* Changed CleanEnv so that it removes empty directories associated with the clean.
+
+* Added -d option to DiffEnv. This causes the command to ignore components that are
+  younger in the first environment compared to the second. Useful when younger
+  releases are known to be backwards compatible with older ones.
+
+* Added 'globbing' functionality to BinInfo. You can now do things like:
+	bininfo \epoc32\release\wins\udeb\*.dl?
+
+From Adrian Taylor:
+
+* Fixed bug where project-style archive structures would not successfully create
+  directories on network shares.
+
+* Added -t option to diffrel, to allow you to specify a particular diffing tool
+  on the command line. This is useful with -t "diff -bBru" to produce diff
+  files, that can later be used with the 'patch' command to patch another version.
+
+* Removing troublesome debug print from RelData when using -v and a new-style
+  archive path.
+
+* Added lots of options to prepenv. -l: shows latest version of each component
+  available. -i <num>: always use this internal version number. -m: don't
+  prompt for MRP location. -p: skip components that are pending release.
+  These options work, but aren't very polished yet.
+
+* Added minimal test scripts for prepenv, getsource, removesource.
+
+* Added pushrel and pullrel (at last). In the process, I abstracted out
+  a lot of PushEnv, PullEnv, PushRel and PullRel into a new module,
+  called PushPullRel.
+
+* Added removesource.
+
+* Make cleanenv -f less confusing with another message.
+
+* bininfo <component> now works for components that are pending release.
+
+* bininfo <file> now reports if a file is part of an ignore_binary line
+
+* getrel -o now overwrites binaries as well as source.
+
+-----------------------------------------------------------------------------------
+
+Version 2.54
+Made by Adrian Taylor, 20/09/2002
+
+From Joe Branton:
+
+* Generally improved CheckBc. It now has been run over a pair of Hurricane source
+  trees. Only e32 and f32 are still causing problems.
+
+* Changed viewnotes so that it compiles HTML files into \epoc32\relinfo\notes and
+  reuses them if they're already present.
+
+* Fixed bug that caused auto-generation of abld.bat to fail if 'cleanenv -r' had
+  previously been run on the environment.
+
+* Modified interface to GetSource - an install directory can now be optionally be
+  specified using the switch '-i'. Previously it was specified by the last parameter
+  which made it useless if you wanted to the source for all components.
+
+* GetSource when used to get the source for all components now doesn't abort at the
+  first error.
+
+* Commands that remove comonents now throw an error if their not able to remove a
+  particular file (previously they just warned). This is to prevent the tools getting
+  into the situation where subsequently the zip utility prompts the user about
+  overwriting files.
+
+* Added some additional robustness to the signature generation code. Previously it
+  didn't ensure that all entries in the zip file were files. It turns out that some
+  zip utilities put directories as entries. If these kind of zip files are
+  encountered now, the signature is generated correctly and a warning is displayed.
+
+From Adrian Taylor:
+
+* Added new error check to project-based path data module. It now gives you
+  a sensible error message if you enter a non-existent project name.
+
+* Fixed "uninitialized value" warning from bininfo after a validateenv against
+  an external environment where you validated against a component whose binaries
+  didn't exist on the local site.
+
+* Finally fixed source validation. Previously, there were occasional false-
+  positive results (i.e. wrongly reported dirty) where a component had
+  several source code directories listed in its MRP. The sorry tale begins
+  with the need to check for added files. To do this, it has to deduce
+  what the root source code directory is for the component, then check
+  whether any extra files have been added inside that directory. If there
+  are several root directories, the algorithm goes wrong and selects too
+  'wide' a directory, where it probably will find other files inside.
+
+  The only way to solve this was to remember the "source" lines stored
+  in the MRP. From this release on, we remember that information and
+  store it in the release packet. We later use that information in source
+  validation.
+
+  This means that source validation won't fully work against releases made with
+  earlier versions of the release tools. But don't worry: you'll get a nice
+  error message explaining the situation. The only part of source validation
+  which fails is the check for added files - the check for removed files
+  and changed files still works fine.
+
+* Expanded test suite to test a variety of 'source' MRP statements.
+
+-----------------------------------------------------------------------------------
+
+Version 2.53
+Made by Adrian Taylor, 21/08/2002
+
+From Adrian Taylor:
+
+* Fixed bug where remote archive locations were getting made lowercase if you
+  use the new archive-path arrangement.
+
+* Made blddocs runnable from anywhere. Documents whichever tools version is
+  in your $PATH.
+
+* Added some extra commands/modules into BldDocs.
+
+* Fixed bug where some validateenv would set some components to dirty instead
+  of "binaries clean, source dirty". Validaterel did not have this bug.
+
+* Fixed an untidy error message in latestver
+
+* Added new tool, "MergeEnvironments". This is a specialised tool for taking
+  a subset of the components from one environment, and a subset from another,
+  and making a third environment (as a new release but without any binaries
+  or source). The intention is that you would then validate against that
+  merged environment. Currently the tool only supports the subset selection
+  using the prefix of the version number.
+
+* Made error checking in RelData.pm and MrpData.pm stricter
+
+-----------------------------------------------------------------------------------
+
+Version 2.52
+Made by Joe Branton 01/08/2002
+
+From Joe Branton:
+
+* Fixed bug in mrp parsing code that caused an assertion to fail is the component
+  concerned didn't have any binaries.
+
+* Fixed bug in mrp parsing code associated with the classification of 'tools' binaries.
+  Previously everything was expected to support the build variants 'udeb' and 'urel'.
+  'tools' has now been made a special case, and are always unclassified.
+
+* Fixed bug in mrp parsing code the prevented '-binary' from working properly when use
+  the 'categorise_binaries' reltools.ini keyword. Previously '-binary <file>' only excluded
+  binaries from the 'unclassified' category. They are not excluded from all categories.
+
+-----------------------------------------------------------------------------------
+
+Version 2.51
+Made by Adrian Taylor 26/07/2002
+
+From Adrian Taylor:
+
+* Fixed bug where envinfo -f didn't work for pending release components when
+  using a project-based archive path
+
+* Fixed a bug where validation would die if it had to make a fake signature
+
+* Fixed cosmetic error message if a release didn't exist
+
+From Joe Branton:
+
+* Fixed a bug where envinfo would complain of uninitialized values when
+  MRPs contained some strange targets
+
+-----------------------------------------------------------------------------------
+
+Version 2.50
+Made by Adrian Taylor 24/07/2002
+
+From Adrian Taylor:
+
+* Restructured the archive path arrangement. A new "archive_path" keyword
+  is now possible instead of the old "archive_path_file" keyword. See
+  the Installation document for details. This is optional; the old
+  arrangement will still work.
+
+* Fixed bug in binary categorisation where components with no binaries could
+  not be exported or envinfo'd.
+
+* Added 'listcomponents' command
+
+* Extended latestver with -aa switch, -vv and -vvv switches, and the ability
+  to show output about all installed components.
+
+* Fixed error in "usage" message of envmembership
+
+* Added additional test cases: t_bininfo, t_pushpullenv, t_latestver,
+  t_envmembership, t_envinfo, t_exportimport
+
+* Added -f ("force") flag to CleanEnv, to allow easier use in test scripts
+
+* Fixed bug in source validation where the "binaries clean, source dirty" status
+  appeared as "dirty" if the component had been dirty immediately beforehand
+
+* Fixed error message in ValidateRel if a non-existent component was specified
+
+* Components can now be validated against an external version even if they're
+  pending release.
+
+From Joe Branton:
+
+* Fixed bug in ViewNotes that prevented versions containing upper case characters from
+  being previewed.
+
+* Added CheckBc utility - does some simple tests for backwards compatibility breaks.
+
+* Added two new reltools.ini keywords - 'categorise_binaries' and 'required_binaries'.
+  The first instructs the tools to categorise binaries according to their build
+  variants. The second allows a particular individual (or project) to select which
+  build variants they require. See the documentation 'Installation Guide' for more
+  details.
+
+------------------------------------------------------------------------------------
+
+Version 2.30
+Made by Adrian Taylor 23/7/2002
+
+From Adrian Taylor:
+
+* Fixed regression caused by CommandController changes where validaterel would
+  no longer print second and subsequent validation failures.
+
+-----------------------------------------------------------------------------------
+
+Version 2.29
+Made by Adrian Taylor 22/7/2002
+
+From Adrian Taylor:
+
+* Fixed bug where source directories with "authorised <licenseename>" IPR data
+  did not get zipped up.
+
+-----------------------------------------------------------------------------------
+
+Version 2.28
+Made by Adrian Taylor 1/7/2002
+
+From Adrian Taylor:
+
+* Fixed bug introduced by source validation, where previously dirty components
+  refused to go clean again.
+
+* Used updated version of iprtool from Richard Harrison, which reports even
+  directories containing just "distribution.policy". Removed the workaround
+  added in 2.26.
+
+-------------------------------------------------------------------------
+
+Version 2.27
+Made by Adrian Taylor 28/6/2002
+
+From Adrian Taylor;
+
+* Fixed bug in CommandController stuff that stopped imports and exports working
+
+------------------------------------------------------------------------------------
+
+Version 2.26
+Made by Adrian Taylor 27/6/2002
+
+From Adrian Taylor:
+
+* Changed behaviour of ValidateRel <comp> <ver> so that it will change the version
+  number in the environment database if the validation succeeds.
+
+* Fixed bug in MrpData.pm where directories with spaces in their name were not
+  getting included in source zips.
+
+* Fixed bug in MrpData.pm where . and .. were accidentally getting put into all
+  release zips. (So far as we know, this had no effect.)
+
+* Changed (binary) validation to work properly for components which release
+  binary files outside \epoc32
+
+* Changed validation to overwrite files in the temporary directory,
+  so it should keep going under more circumstances
+
+* Fixed bug where source validation would try to validate source for components
+  without any source code.
+
+* Worked around a bug in iprtool where directories containing just "distribution.policy"
+  were not put into zip files. This upset validaterel later on.
+
+* Fixed bug in ValidateRel where it didn't keep going after first error.
+
+* Added "\epoc32\winscw\c\*" to the list of standard ignores
+
+From Joe Branton:
+
+* Added -r option to DiffRel, and fixed bugs associated with the -l option. This means
+  that now you can specify exactly which directories you'd like to diff (both the local
+  directory and/or the directory within the release zip file) if you want to.
+
+* Added a new class (CommandController) that allows certain types of commands to run
+  concurrently, and prevents others from running concurrently. Also gave temporary
+  directories a unique name to allow for this concurrency.
+
+* Added new keyword to IniData - disable_win32_extentions - this currently only disables
+  the above CommandController functionality, but I intend to use it more widely in the
+  future.
+
+------------------------------------------------------------------------------------
+
+Version 2.25
+Made by Adrian Taylor 18/6/2002
+
+From Adrian Taylor;
+
+* Fixed bug in source validation which incorrectly classified some components as
+  'binaries clean, source dirty' when they were in reality completely clean.
+
+-----------------------------------------------------------------------------
+
+Version 2.24
+Made by Adrian Taylor 17/6/2002
+
+From Adrian Taylor:
+
+* Fixed RelData.pm so that latestver works correctly even when there are
+  corrupt (blank) reldata files in the archive.
+
+* Added -s flag to ValidateRel and ValidateEnv, to permit the validation of
+  source code. The purpose of this is to detect changes to source code that
+  don't cause changes in the binaries. (For example, changes to distribution
+  policy). There are some associated changes in EnvDb; in particular
+  the addition of an extra status "binaries clean, source dirty" which
+  is only ever set by these two commands.
+
+* Updated test example output for the above change and various other recent
+  changes.
+
+------------------------------------------------------------------------------------
+
+Version 2.23
+Made by Joe Branton 10/6/2002
+
+From Joe Branton:
+
+* Fixed bug in Utils::CommonDir that caused a GetSource to get stuck in a
+  'Use of uninitialized value' infinite loop.
+
+From Lee Luchford:
+
+* Updated iprtool to latest version from GT. Fixed defect in previous version
+  which outputted all directory names in upper case
+
+-----------------------------------------------------------------------------------
+
+Version 2.22
+Made by Joe Branton 10/6/2002
+
+From Adrian Taylor:
+
+* Added facility to prefix # with \ in reltools.ini, to escape literal #
+  (in this case the need was for an FTP site password)
+
+From Joe Branton:
+
+* Fixed bug in mbld that caused '-h' to fail.
+* Changed behaviour of environment scans to improve performance when there are a lot
+  of files that will be ignored. Previously the \epoc32 tree was scanned fully and
+  at the end files to be ignored were removed from the data structure. Now the ignore
+  list is checked during the scan to allow entire directory branches to be ingored
+  without scanning them.
+* Added functionality to ViewNotes to allow it to display a summary of all the
+  release notes in a specific (or the current) environment.
+* Added 'disallow_unclassified_source' keyword to IniData and changed MrpData to
+  make use of the new flag. This is intended to allow sites to ensure that all
+  source code is given a category.
+* Fixed bug in GenMrp that was causing binary statements to be added for aif and mbm
+  files that live in \epoc32\data\z.
+* Changed GenMrp to ignore the platform 'cw_ide' (for the time being).
+* Changed GetSource so that it displays the name of the significant directory the
+  source is being unpacked into.
+* Changed GetSource so that it doesn't allow you to overwrite files that are already
+  present in your development drive.
+* Added '-o' option to GetSource, GetRel and GetEnv to allow existing source code
+  to be overwritten.
+
+-----------------------------------------------------------------------------------
+
+Version 2.21
+
+Made by Lee Luchford 29/05/2002
+
+From Lee Luchford:
+
+* Added 'cleanremote' tool to delete unwanted releases from remote archive and made
+  necessary modifications to RemoteSite modules to support this tool
+
+* Removed changes to all tools related to introduction of CleanLocalArch tool
+  (e.g checks to see if releases have been cleaned) It has been decided to remove
+  this tool in future
+
+* Fix for component name case dependency bug in getrel
+
+From James Gibbons:
+
+* Modified ValidateRel so that the binaries of a component on the current drive can be validated against
+  a version of the component other than the version held in the environment database.
+
+* Fixed usage text for EnvMembership so the name of the command is correct.
+
+From Joe Branton:
+
+* Fixed a bug in diffrel where it didn't cope with diffing components where the top level directory
+  for a component contained files (rather than just directories).
+------------------------------------------------------------------------------------
+
+Version 2.20
+
+Made by Lee Luchford 03/05/2002
+
+From Lee Luchford:
+
+* Added ftp_timeout keyword to reltools.ini. This overrides the default timeout value which
+  may not be long enough for poor FTP connections
+
+* Added ftp_reconnect_attempts to reltools.ini. This overrides the default number of reconnect
+  attempts made when the connection to the FTP site is dropped. This should be set to higher
+  value for poor FTP connections
+
+* Fixed a bug in EnvDb.pm related to the getsource command. The regular expression used
+  to grep for source files just looked for the word 'source' in the file name. Since the
+  file name includes the path if the release directory contains the string 'source'
+  all zips in the release dir are unzipped, including binaries.
+
+* Fixed getrel to handle case dependency of version numbers
+
+-----------------------------------------------------------------------------------
+
+Version 2.19
+Made by Joe Branton  15/04/2002
+
+From Lee Luchford:
+
+* Modified NotesCompiler.pm to interpret new lines as line breaks in HTML
+
+* ImportRel now checks to see if releases exist locally before connecting to the remote
+  and asking for passwords etc...
+
+* ValidateRel now takes the name of a file containing a list of
+  component names as an argument. All of the components listed in the
+  file are validated
+
+* Fixed case dependency of version numbers bug in DiffEnv
+
+* Fixed warnings in BldDocs
+
+* Fixed POD errors in FAQ document
+
+From Joe Branton:
+
+* Fixed bug that caused 'viewnotes -s' to miss out releases if there are more than one
+  release directory with exactly the same modified time. Added a record of 'the right
+  thing to do' to todo.txt (read the release dates out of RelData).
+
+* Fixed bug in bininfo that caused it to report incorrectly that there is no information
+  available when the owning component is pending release (file name case problem).
+
+* Fixed bug in makefile auto-generation code that caused components with multiple 'binary'
+  statements in the mrp file to only have their first set of makefiles generated.
+
+* BinInfo if given a component name, now displays a list of all files owned by that
+  component and their current status.
+
+* Archive path files are now checked to ensure they don't contain more than one entry
+  for the same component.
+
+* The archive path and export data files now don't need to exist until they are actually
+  required. This should allow use of tools like envinfo when not connected to the network.
+
+* Added license file for zip and unzip. Also removed the leading underscore from the
+  executable file names so as to conform to the license.
+
+* Added CleanLocalArch command which can be used to clear out old releases from a release archive.
+  See documentation for details.
+
+* Changed viewnotes -s so that the summary is ordered according the release time and date
+  stored in the release's reldata file (previously it used the timestamp of the corresponding
+  release archive directory).
+
+* Added new command - 'latestver'. See documentation for details.
+
+* Added new utility command - 'mbld'. See documentation for details.
+
+* Upgraded to the latest version of IPRTOOL (//EPOC/main/sysint/tools/iprtool.pl@140492).
+
+* ViewNotes is now tolerent to directories within a component's release archive not being releases.
+  A warning is now issued rather than bailing out altogether.
+
+* Added 'relToolsVer' tag to reldata.
+
+* Changed '\\epoc32\\data\\emulator\\epoc.sys.ini' to '\\epoc32\\data\\emulator\\*.sys.ini'.
+
+* Changed the interface to DiffRel - it'll now attempt to work out how to difference against
+  the source in a development environment (rather than having to be giving the name of a
+  directory against which to difference).
+
+* Added 'reallyclean' flag to CleanEnv. Causes it to clean out files that are normally ignored
+  from the point of view of unknown origin status (intermediate build files etc).
+
+From James Gibbons:
+
+* Added new command EnvMembership. To allow querying of baselines to see if a particular component
+  component release is present.
+
+-----------------------------------------------------------------------------------
+
+Version 2.18
+Made by Lee Luchford  28/01/2002
+
+From Lee Luchford:
+
+* Fix IO bug affecting Perl 5005 during FTP transfers. The FTP.pm module now
+  quits the FTP connection whenever an error occurs instead of just aborting the
+  failed command but keeping the connection open.
+
+* Increase TIMEOUT value in Proxy.pm module
+
+* Add -r option to export and import tools. The user can now force the use of FTP
+  resume mode from the command line overriding the ftp_server_supports_resume
+  value in the reltools.ini file
+
+* Implemented an FTP get command with resume in FTP.pm
+
+* Fix for PGP.pm. Check to see if error code defined before using in numerical
+  comparisons
+
+-----------------------------------------------------------------------------------
+
+Version 2.17
+Made by Lee Luchford 21/01/2002
+
+From Lee Luchford:
+
+* Added a fix for PGP version 7 in PGP.pm. Error codes have changed between 6 and 7
+  so errors were not being handled correctly
+
+* Changes to ExportRel, ExportEnv, ImportRel, ImportEnv and FTP.pm to handle case
+  dependency of file names on the FTP server.
+  Now when exporting, component names are all converted to lower case and the actual
+  version number (ie with the correct case) is read from the releases reldata file
+  The FTP module ignores case when checking to see if a file exists and selects the
+  correct filename to download.
+
+* Changed naming of the temporary files used during uploads to FTP sites.
+  Now of the form lpdrt*****.tmp. Should make it more obvious that we can delete
+  these files if they are left lying around on the server
+
+------------------------------------------------------------------------------------
+
+Version 2.16
+Made by Joe Branton 10/01/2002
+
+From Lee Luchford:
+
+* Added support for FTP servers with firewalls (ie passive transfers) and servers that do not
+  support reconnect and resume. Use the new keywords "pasv_transfer_mode" and
+  "ftp_server_supports_resume" in the reltools.ini to activate these features
+
+* RelTransfer::Export module modified. A failed log file send no longer reports that the actual
+  release failed to export
+
+* Removed FTP download with resume code. Not reliable at the moment.
+
+From Joe Branton:
+
+* PrepEnv and PrepRel now throw an error if a version already exists.
+
+* BinInfo now handles file name arguments of any case.
+
+* Fixed bug in EnvDb that caused duplicates to not be reported accurately when making
+  a release (or scanning an environment using EnvInfo).
+
+* Fixed bug in Utils::TidyFileName that cause UNC paths to get converted into absolute
+  paths. This caused a "Path not found" error message when making a release to an archive
+  specified using UNC paths. This is not a fatal error, but the release files do not get
+  their read only attribute set.
+
+* Testing importing/exporting against the Symbian FTP site showed that the file / directory
+  existance checking routes weren't working for this server (though they worked fine
+  against others). Changed the implementation, and tested again our normal test Linux box,
+  the Symbian server and the Bayou server.
+
+----------------------------------------------------------------------------------------
+
+Version 2.15
+Made by Joe Branton 20/12/2001
+
+From Joe Branton:
+
+* The reltools.ini keywords 'remote_username' and 'remote_password' are no longer mandatory
+  for FTP access - if not provided, they are prompted for at runtime. This also applies to
+  the keywords 'proxy_username' and 'proxy_password' for use with proxy FTP servers.
+
+* Implemented 'hidden text' password entry ('*' characters are displayed rather than the
+  actual text). This is used when the user is asked to enter encryption passphrases or
+  FTP passwords.
+
+* Fixed a bug in the NETDRIVE exporting code that caused exported files to appear in the root
+  of the current drive rather than the network drive.
+
+* Added minimal progress information to imports and exports when the verbosity level is zero.
+
+* Imported files are now set to read only in the archive (corresponding to MakeEnv and MakeRel's
+  behaviour).
+
+----------------------------------------------------------------------------------------
+
+Version 2.14
+Made by Joe Branton 19/12/2001
+
+From Lee Luchford:
+
+* In FTP.pm comment out file size comparison check for successful uploads. Appears to
+  cause problems on the Symbian FTP server
+
+* FTP move command cannot overwrite existing files. RemoteSite::FTP.pm now deletes the remote file
+  before a move is attempted
+
+* Win32::File module function calls replaced with system "attrib ..." in Utils.pm since Win32::File
+  fails in some situations
+
+* glob replaced with readdir + small fix for filtering individual source files in
+  MrpData.pm
+
+From Joe Branton:
+
+* Fixed Win2K only problem associated with finding 'evalid.bat' in the user's path. This
+  cause ValidateRel/Env to fail on Win2K machines.
+
+* DiffEnv now displays "Environments identical" rather than an empty table if there are
+  no differences.
+
+* Fixed another suspicious forward slash in file name when using GetSource.
+
+* Fixed bug in ViewNotes that caused the summary feature (available via -s) to produce
+  a summary page with broken links on IE 5.0 and Opera 6.0 (and possibly other browsers).
+  The problem was that these browsers expect any files they are asked to render to have
+  the extention .html. This is now the case.
+
+* Fixed regression in mrp parser that allowed the binary.zip file to contain multiple files
+  whose name only differs with regard to case.
+
+----------------------------------------------------------------------------------------
+
+Version 2.13
+Made by Joe Branton 27/11/2001
+
+From Joe Branton:
+
+* Fixed a regression introduced by changing the behaviour of the tools to not lower
+  the case of file names. Bug caused the tools to wrongly report files as having
+  unkown origin.
+
+----------------------------------------------------------------------------------------
+
+Version 2.12
+Made by Joe Branton 27/11/2001
+
+From Lee Luchford:
+
+* Added support for proxy FTP servers by adding RemoteSite::FTP::Proxy module
+  If remote_site_type keyword in reltools.ini has value 'PROXY' then FTP access is
+  via the proxy server and the keywords proxy, proxy_username and proxy_password must
+  be defined in reltools.ini
+
+* fix to handle FTP sites that have problems with back slashes in paths
+
+* Some changes to FTP module code for improved reconnect and resume handling
+
+* Added passive mode support to FTP module. Include pasv_transfer_mode keyword in reltools.ini.
+  If keyword specified then connects to FTP site in passive mode.
+
+* Ask for PGP passphrase in Import module constructor ie before any files are downloaded
+
+From Joe Branton:
+
+* Removed the file name case lowering behaviour of the tools. This behaviour broke certain
+  regression tests that depended upon file and directory names being in upper case (as they are
+  when the build tools create them).
+
+* DiffEnv now displays the components in alphabetical order.
+
+----------------------------------------------------------------------------------------
+
+Version 2.11
+Made by Joe Branton 19/11/2001
+
+From Lee Luchford:
+
+* ExportRel and ImportRel added support for exporting and importing multiple releases by passing
+  a file containing a list of component names and version numbers
+
+* ExportEnv and ImportEnv now check to see if all components in the environment are defined
+  in the archive path file before attempting to export/import
+
+* Various fixes for potential problems with FTP uploading/downloading in RemoteSite::FTP.pm
+
+From Joe Branton:
+
+* Added a new switch to EnvInfo (-ff). -f now displays a table of component name, version, and status.
+  -ff displays a table of component name, version, internal version status and mrp name.
+
+* Tidied up new line handling in EnvInfo when displaying progress dots and an error occurs.
+
+* PrepRel now warns before removing an entry from the environment database.
+
+* Fixed bug in PrepRel that caused entries to be removed if only the mrp name is specified.
+  Now updates the mrp name instead.
+
+* Changed PrepEnv interactive mode so that any change in an entries data is written to the database.
+  Previously the version needed to be changed to prevoke a write.
+
+* The check for binaries being released by more than one component is now done in EnvInfo
+  as well as MakeEnv.
+
+* Tidied up the output of EnvInfo, MakeEnv and CleanEnv.
+
+* ViewNotes now supports previewing the release notes for components that are currently pending
+  release.
+
+* Put the "Release environment" section of the release notes into a table.
+
+* Added a new command - ModNotes. This allows the release notes of an release that has already
+  been made to be modified.
+
+* Added a new command - BinInfo. This displays the name of the component that owns a particular
+  binary file, the currently installed version and the file's current status.
+
+* Added support for releasing test code. Mrp files now support a new keyword - 'testbinary' (and also
+  -testbinary). The syntax for this is very similar to the original 'binary' keyword.
+
+* Added support for displaying a summary of all releases to date of a particular component
+  in ViewNotes.
+
+* The ini file can now be in either \epoc32\relinfo for the directory the tools are installed
+  in. \epoc32\relinfo is checked first. If not found there, but found in the tools dir then
+  a warning is issued. To disable this warning use the new "no_ini_location_warning" keyword.
+
+* check_ignore.txt is no more. The standard ignores that used to ship in this file have been moved
+  into the body of the Perl scripts (IniData.pm to be precise). Project specific customisations
+  can be added to reltools.ini using the "ignore_binary" keyword. See the Installation Guide for
+  details.
+
+----------------------------------------------------------------------------------------
+
+Version 2.10
+Made by Lee Luchford 02/11/2001
+
+From Lee Luchford:
+
+* Rewrite of Crypt modules. Broken up into a base module Crypt.pm and 2 modules Crypt::PGP.pm and
+  Crypt::GPG.pm both of which implement an abstract interface defined in Crypt.pm
+
+* Fixed decryption bug in Crypt::GPG.pm. Open2 was not killing off child processes, now uses open
+  instead but dumps the output to a file which is then parsed for errors.
+
+* Rewrite of RemoteSite modules. Broken up into a base module RemoteSite.pm and 2 modules RemoteSite::FTP.pm and
+  RemoteSite::NetDrive.pm both of which implement an abstract interface defined in RemoteSite.pm
+
+* RemoteSite::FTP now has support for reconnect and resume for downloads and uploads
+
+* RemoteSite::FTP and RemoteSite::NetDrive both use temporary files during uploads and then rename the
+  temporary file to the final release name. Therefore .log files are no longer needed to confirm that
+  an upload was successful
+
+* RelExporter and RelImporter replaced by a base module RelTransfer.pm and 2 modules RelTransfer::Export
+  and RelTransfer::Import which inherit from the base module.
+
+* pgp passphrase errors handled better in RelTransfer::Import. Keep asking for passphrase until
+  correct
+
+* ExportRel, ExportEnv and ImportRel now have a -f option which forces the export and import of
+  releases even if they already exist
+
+* reltools.ini and check_ignore.txt now assumed to be stored in \epoc32\relinfo instead of the
+  release tools directory
+
+* Changed pgp_path keyword in reltools.ini to pgp_config_path
+
+* Changed pgp_users_keyid keyword to pgp_encrpytion_key in reltools.ini. Also this keyword can
+  be used more than once to build up a list of default keys used for encryption
+
+* Remote site type no longer determined by remote_host value in reltools.ini. Added remote_site_type
+  keyword which should have the value FTP or NETDRIVE
+
+* Added zero compression option to Utils::ZipList function
+
+* Replace globs with readdir in RelTransfer modules and EnvDb.pm
+
+From Joe Branton:
+
+* Partially fixed bug to do with the way file modified times are stored in the environment
+  database. The WIN32 Perl implementation returns file modified times taking into account
+  daylight saving. Previously they were stored in this form in the environment database,
+  which meant that when daylight saving changed, environments were reported as dirty. The
+  fix attempts to undo the daylight saving accounting, and store the times in GMT.
+
+  It is a partial fix, because testing has revealed that certain time zones (e.g. Cairo, GMT +2)
+  cause unexpected hour shifts in some files. The reason for this is currently unknown (although
+  some test code was written in C using the Windows stdlib, and this showed the same behaviour).
+
+  NOTE, ANY EXISTING ENVIRONMENT DATABASES WILL HAVE THEIR TIMES IN THE WRONG FORMAT. This
+  will manifest itself as the environment appearing completely dirty. To fix this, either run
+  ValidateEnv, or re-run GetEnv. In most cases, this problem should not return. Because of the
+  issue described above, users in some time zones may experience a recurrence of this problem
+  when daylight saving changes. Also, users that change their time zone to one of the affected
+  ones, may see this problem recur.
+
+* Release notes source files are now checked for existance as well as whether they are
+  actually a file (results in a more meaningful error message if the file does not exist).
+
+* DiffRel now removes the drive letter if specified for the source path.
+
+* PrepRel/Env now removes the drive letter if specified for the mrp file name.
+
+----------------------------------------------------------------------------------------
+
+Version 2.09
+Made by Lee Luchford 17/10/2001
+
+From Lee Luchford:
+
+* Fixed critical bug in MrpData.pm. Iprtool parsing failed in some cases causing some source
+  files to be missing from release
+
+-----------------------------------------------------------------------------------------
+
+Version 2.08
+Made by Joe Branton 12/10/2001
+
+From Lee Luchford:
+
+* Fixed bug in RemoteSite::FTP. Sometimes a release was getting exported
+  even though it already existed on the remote site. This problem occurs if the connection is
+  dropped during the check for existence of a release on the remote site. Now attempts to reconnect
+  several times if the connection is dropped, if this does not work then dies marking the export
+  as failed
+
+* Improved error handling for components mistakenly ommitted from the export table. Now throws an
+  error if the component does not exist in the export table and the release does not exist on the
+  remote site.
+
+From Joe Branton:
+
+* Added more status checking to GetEnv - now checks the status of components that will be removed
+  and warns if their status is pending release (providing an oportunity to abort the GetEnv).
+
+* Fixed a bug in PrepRel. If called with no version argument, the specified component is removed
+  from the environment database. Previously, if a component name that did not exist was specified
+  PrepRel would still report successful removal from the database. It now reports an error. It
+  also removes that component's signature file as well as the database entry (i.e. fully cleans up).
+
+* Tweaked the code in MrpData that interacts with the build tools to cope with the version shipped
+  with Hurricane. The build tools now use GNU Make for most task (rather than Microsoft's NMake),
+  and this reports errors in a different way. The old build tools should still be supported.
+
+* Automatic calling of bldmake and generation of makefiles now only does one attempt of each (rather
+  than getting stuck in an infinite loop if there is a problem).
+
+* Add protection against makefiles that list files for release with double back slashes (e.g.
+  "\epoc32\release\wins\udeb\\test.dll") since these cause problems for the zip. Double slash
+  is replaced with a single slash.
+
+* Added a check in GenMrp to ensure that the bld.inf file exists - dies cleanly if not.
+
+* Fixed a bug in DiffEnv that caused components present in "environment 2" but not in "environment 1"
+  to be wrongly assigned to "environment 1".
+
+* Added "keep going" style error handling to PullEnv.
+
+* Added "-l" switch to GenMrp to allow the source directory nesting level to be specified. This allows
+  the tool to be used effectively with GT's new sub-system directory structure.
+
+* Fixed bug that meant whitespace in the release tools installation directory name caused the
+  tools to fail badly.
+
+* Fixed "uninitialised variable" warning in the exporting commands that occurs when there is no
+  pgp_path keyword in the reltools.ini.
+
+----------------------------------------------------------------------------------------
+
+Version 2.07
+Made by Lee Luchford 19/9/2001
+
+From Lee Luchford:
+
+* Replaced CryptTool with Crypt::PGP and Crypt::GNUPG grouping
+  together all modules with a common interface for encrypting and
+  decrypting files into one directory
+  Crypt::PGP uses NA command line PGP client (executable name pgp.exe)
+  Crypt::GNUPG uses GNU Privacy guard PGP client (executable name gpg.exe)
+
+* Changed FtpSite to RemoteSite::FTP and NetworkDrive to RemoteSite::LANShare
+  grouping together all modules with a common interface for accessing
+  a remote site into one directory
+
+* Updated modules which are affected by above changes
+
+* ExportRel replaced by RelExporter and ImportRel replaced by RelImporter
+
+* All Export and Import related modules now use named argument lists in constructors
+
+* Fix to Net::Config module to remove 'uninitialized value' warning when exporting/importing
+
+* Fixed handling of PGP passphrases with blank spaces
+
+* Added the ImportRel tool for importing single releases
+
+* MrpData.pm now handles single source files listed in the mrp file.
+  Runs IPRTool on the directory where the file is stored to get the
+  category of the file.
+
+* ExportData.pm now allows comment lines starting with #
+
+* ExportData.pm now allows spaces in recipient names in column headers
+
+* ExportData.pm returns empty anonymous array references instead
+  of undef. Fixes potential dererencing a non array reference bugs
+
+* RelExporter now checks to see if PGP keys listed in export data file exist on keyring
+  before attempting to encrypt releases
+
+* Crypt::PGP and Crypt::GNUPG include fixes for handling directory names with spaces
+
+From Joe Branton:
+
+* Fixed bug in GenMrp that caused an extra invalid binary statement to be printed.
+
+* Fixed bug in EnvDb::InstallComponent that caused an invalid database entry to be
+  written if the components reldata file fails to open.
+
+* Changed EnvDb::CheckEnv so that warnings about "unknown origin" files are not displayed
+  if there were any errors parsing mrp files. This was done because errors in mrp files
+  are likely to cause many "unknown origin" as a knock on effect.
+
+* Fixed bug in MakeRel.pm that causes releases to fail if they didn't contain any source
+  or binaries (release directory not made correctly).
+
+* Fixed bug in MakeRel.pm that caused an "Uninitialised value" warning to be displayed
+  when no internal version was specified.
+
+* Fixed bug in ViewNotes that cause the page displayed by the web browser to be invalid.
+  The temporary file was getting deleted before the browser had had a chance to read it.
+  ViewNotes now pauses until the user hits a key before deleting.
+
+* Added FAQ section to documentation.
+
+* Changed EnvDb::ValidateComp to pick up evalid from anywhere in the user's path, rather
+  than only \epoc32\tools (mainly to make running the test code easier).
+
+* Added an automated test suite for testing core (non-interactive) commands.
+
+* Added 'keep going' error handling functionality to PrepEnv - total number of errors is
+  listed at the end.
+
+* Added check to PrepRel.pm to ensure that a valid mrp file name is specified.
+
+* Fixed bugs in PushEnv/PullEnv that caused UNC paths to fail.
+
+* Added better parameter checking to PushEnv and PullEnv.
+
+* Fixed bug in EnvDb::CheckComp that caused an invalid db entry to be written if a check
+  was attempted on a component that did not exists. This manifested itself in EnvInfo if
+  you give the name of a non-existent component as a parameter.
+
+------------------------------------------------------------------------------------------
+
+Version 2.06
+Made by Joe Branton 30/8/2001
+
+From Joe Branton:
+
+* Fixed (another) bug in GetEnv that cause getting an environment on a clean drive
+  to fail (doh!).
+
+------------------------------------------------------------------------------------------
+
+Version 2.05
+Made by Joe Branton 24/8/2001
+
+From Lee Luchford:
+
+* Added some additional information about setting up PGP to the Installation Guide.
+
+From Joe Branton:
+
+* Fixed a bug in GetEnv that caused environment upgrading to fail.
+
+* Fixed a bug in CleanEnv that caused re-installation of dirty components to fail.
+
+* Fixed some cosmetic problems relating to the 'dot' progress information when
+  performing an environment scan.
+
+* Added additional status output to ValidateEnv.
+
+* Added additional feedback to PrepEnv and PrepRel.
+
+* Added implementation of interactive mode to PrepEnv.
+
+------------------------------------------------------------------------------------------
+
+Version 2.04
+Made by Joe Branton 20/8/2001
+
+From Lee Luchford:
+
+* Updated CPan Net module to latest release.
+
+* Change to CryptTool to display less warnings.
+
+* EnvDb.pm, ExportRel.pm and ImportRel.pm now use File::DosGlob as a workaround to glob
+  bug in latest Perl release.
+
+* Added a new ExportRel tool to export individual releases.
+
+* Source filtering (with IPR tool) is now used by default. Therefore the source_filter
+  keyword in reltools.ini is deprecated. A new keyword, ignore_source_filter_errors, maybe
+  used to switch off displaying of source filter errors in release notes.
+
+
+From Joe Branton:
+
+* Added new tools CleanEnv, PullEnv and PushEnv (see documentation for details).
+
+* Added progress dots to environment scanning code (when used with a verbosity of 0).
+
+* Added 'keep going' type error handling to mrp file parsing during an environment scan.
+
+* Added makefile generation functionality to GenMrp.
+
+* Changed behaviour of GetEnv to work in phases. Phase 1 checks that each component in the
+  requested environment is physically available. Phase 2 removes all old binaries. Phase 3
+  installs all new binaries. This makes the process robust when binary files have moved from
+  one component into another.
+
+* Added -l option to MakeRel which causes lib files to be copied from the thumb release
+  directory if they are not found in the armi release directory.
+
+* Added progress info (via verbosity level 1) and exit info to PrepEnv.
+
+* Fixed uninitialised variable bug in GetSource when an install path is not specified.
+
+* Added extra progress info to GetSource and PrepEnv.
+
+* Changed PrepEnv to have the same syntax as PrepRel - now uses '-m' to denote an mrp file name.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/reltools.ini.ex	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,50 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+
+#*****************************************#
+# Reltools.ini configuration example file #
+#*****************************************#
+
+# Common configuration options
+# ----------------------------
+diff_tool 			windiff
+require_internal_versions
+categorise_binaries
+categorise_exports
+disallow_unclassified_source
+
+# Archives containing your releases
+# ---------------------------------
+archive_path	my_releases	\\myserver\builds\componentised\my_build_config	/Optional_path_on_remote_server
+archive_path	my_other_releases	\\myserver\builds\componentised\my_other_build_config	/Optional_path_on_remote_server
+
+# Remote server configuration
+# ----------------------------
+export_data_file       		\\myserver\config_man\reltools\export_data.csv
+pgp_config_path        		\\myserver\config_man\reltools
+pgp_tool                        pgp           # Must be pgp or gpg
+pgp_encryption_key              0x12345678
+remote_site_type                ftp           # Common values are netdrive and ftp
+remote_host		 	ourftp.mycompany.com.invalid
+remote_username		 	myusername
+remote_password		 	mypassword
+remote_logs_dir		 	/release_logs # Path on server for logs
+pasv_transfer_mode
+ftp_server_supports_resume
+ftp_timeout			30
+ftp_reconnect_attempts		5
+proxy_host                      myproxyftpserver # Only valid if using remote_site_type proxy
+proxy_username                  myproxyusername
+proxy_password                  myproxypassword
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/removesource	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,146 @@
+#!perl
+# Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+#
+
+use strict;
+use FindBin;
+use lib "$FindBin::Bin";
+use Getopt::Long;
+use IniData;
+use EnvDb;
+use CommandController;
+use File::Path;
+
+
+#
+# Globals.
+#
+
+my $verbose = 0;
+my $dryrun = 0;
+my $iniData = IniData->New();
+my $commandController = CommandController->New($iniData, 'RemoveSource');
+my $envDb;
+my $comp;
+my $force;
+
+
+#
+# Main.
+#
+
+ProcessCommandLine();
+RemoveSource();
+
+
+#
+# Subs.
+#
+
+sub ProcessCommandLine {
+  Getopt::Long::Configure ("bundling");
+  my $help;
+  GetOptions('h' => \$help, 'v+' => \$verbose, 'd' => \$dryrun, 'f' => \$force);
+
+  if ($help) {
+    Usage(0);
+  }
+
+  $comp = shift @ARGV;
+
+  unless ($#ARGV == -1) {
+    print "Error: Invalid number of arguments\n";
+    Usage(1);
+  }
+
+  $envDb = EnvDb->Open($iniData, $verbose);
+}
+
+sub Usage {
+  my $exitCode = shift;
+
+  Utils::PrintDeathMessage($exitCode, "\nUsage: removesource [options] <component> 
+
+options:
+
+-h  help
+-d  dry run - don't do anything, just state what would happen
+-v  verbose output (-vv very verbose)
+-f  force - even delete write-protected stuff\n");
+}
+
+sub RemoveSource {
+  if (defined $comp) {	  
+    $envDb->DeleteSource($comp, $dryrun, $force);
+  }
+  else {
+    print "About to remove the source for the entire environment. Continue? [y/n] ";
+    my $response = <STDIN>;
+    if ($response =~ /^y$/i) {
+      my $versionInfo = $envDb->VersionInfo();
+      foreach my $thisComp (sort keys %{$versionInfo}) {
+        eval {
+          $envDb->DeleteSource($thisComp, $dryrun, $force);
+        };
+        print "Problem removing source for \"$thisComp\" - continuing with others: $@\n" if $@;
+      }
+    }
+  } 
+}
+
+__END__
+
+=head1 NAME
+
+RemoveSource - Removes the source code for one component or all
+
+=head1 SYNOPSIS
+
+  removesource [options] [<component>]
+
+options:
+
+  -h  help
+  -d  dry run - only states what would happen, doesn't actually do it
+  -f  force - even deletes write protected stuff
+  -v  verbose output (-vv very verbose)
+
+=head1 DESCRIPTION
+
+Deletes the source code for a particular component. If no component is specifies, deletes all known source code in your environment.
+
+=head1 KNOWN BUGS
+
+None.
+
+=head1 COPYRIGHT
+
+ Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+ All rights reserved.
+ This component and the accompanying materials are made available
+ under the terms of the License "Eclipse Public License v1.0"
+ which accompanies this distribution, and is available
+ at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ 
+ Initial Contributors:
+ Nokia Corporation - initial contribution.
+ 
+ Contributors:
+ 
+ Description:
+ 
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/removesource.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+@REM Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM 
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM 
+@REM Contributors:
+@REM 
+@REM Description:
+@REM 
+
+@rem = '--*-Perl-*--
+@echo off
+if "%OS%" == "Windows_NT" goto WinNT
+perl -x -S "%0" %1 %2 %3 %4 %5 %6 %7 %8 %9
+goto endofperl
+:WinNT
+perl -w -x -S "%0" %*
+if NOT "%COMSPEC%" == "%SystemRoot%\system32\cmd.exe" goto endofperl
+if %errorlevel% == 9009 echo You do not have Perl in your PATH.
+if errorlevel 1 goto script_failed_so_exit_with_non_zero_val 2>nul
+goto endofperl
+@rem ';
+#!perl -w
+#line 15
+$0 =~ s|\.bat||i;
+unless (-f $0) {
+    $0 =~ s|.*[/\\]||;
+    for (".", split ';', $ENV{PATH}) {
+	$_ = "." if $_ eq "";
+	$0 = "$_/$0" , goto doit if -f "$_/$0";
+    }
+    die "`$0' not found.\n";
+}
+doit: exec "perl", "-x", $0, @ARGV;
+die "Failed to exec `$0': $!";
+__END__
+
+=head1 NAME
+
+runperl.bat - "universal" batch file to run perl scripts
+
+=head1 SYNOPSIS
+
+	C:\> copy runperl.bat foo.bat
+	C:\> foo
+	[..runs the perl script `foo'..]
+	
+	C:\> foo.bat
+	[..runs the perl script `foo'..]
+	
+
+=head1 DESCRIPTION
+
+This file can be copied to any file name ending in the ".bat" suffix.
+When executed on a DOS-like operating system, it will invoke the perl
+script of the same name, but without the ".bat" suffix.  It will
+look for the script in the same directory as itself, and then in
+the current directory, and then search the directories in your PATH.
+
+It relies on the C<exec()> operator, so you will need to make sure
+that works in your perl.
+
+This method of invoking perl scripts has some advantages over
+batch-file wrappers like C<pl2bat.bat>:  it avoids duplication
+of all the code; it ensures C<$0> contains the same name as the
+executing file, without any egregious ".bat" suffix; it allows
+you to separate your perl scripts from the wrapper used to
+run them; since the wrapper is generic, you can use symbolic
+links to simply link to C<runperl.bat>, if you are serving your
+files on a filesystem that supports that.
+
+On the other hand, if the batch file is invoked with the ".bat"
+suffix, it does an extra C<exec()>.  This may be a performance
+issue.  You can avoid this by running it without specifying
+the ".bat" suffix.
+
+Perl is invoked with the -x flag, so the script must contain
+a C<#!perl> line.  Any flags found on that line will be honored.
+
+=head1 BUGS
+
+Perl is invoked with the -S flag, so it will search the PATH to find
+the script.  This may have undesirable effects.
+
+=head1 SEE ALSO
+
+perl, perlwin32, pl2bat.bat
+
+=cut
+
+
+__END__
+:endofperl
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/cbrtools/perl/version.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1 @@
+2.84.3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/CBROutputFile.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,422 @@
+<cbrmessages>
+	<Error>Line .* in .* has circular reference in .*</Error>
+		<!--> IniData.pm: ReadTargetAliasFile<-->
+	<Error>.* is pending release and contains a path which is .*</Error>
+		<!--> MrpData.pm: CheckPathLength<-->
+	<Error>Failed to extract .*</Error>
+		<!--> Utils.pm: ExtractFile<-->
+	<Error>SRCROOT must not be a UNC path</Error>
+		<!--> Utils.pm: SourceRoot<-->
+	<Error>Couldn&apos;t open directory &quot;.*&quot;: .*</Error>
+		<!--> EnvDb.pm: ExecuteAllSignatures<-->
+	<Error>Problem generating makefile for .* .* in .*</Error>
+		<!--> MrpData.pm: CallMakMake<-->
+	<Error>No path environment variable</Error>
+		<!--> Utils.pm: FindInPath<-->
+	<Error>SRCROOT must specify an existing directory</Error>
+		<!--> Utils.pm: SourceRoot<-->
+	<Error>Unzip reported error code .*</Error>
+		<!--> Utils.pm: CheckUnzipError<-->
+	<Error>Unable to overwrite the hidden file .*: .*</Error>
+		<!--> Utils.pm: ExtractFile<-->
+	<Error>No path data found in reldata.ini. Cannot provide remote archive path for existing component.</Error>
+		<!--> pathdata.pm: RemoteArchivePathForExistingComponent<-->
+	<Error>Component .* version .* didn&apos;t exist</Error>
+		<!--> EnvDb.pm: AddUpEnvSize<-->
+	<Error>Couldn&apos;t remove .* from .*</Error>
+		<!--> Utils.pm: RemoveSourceRoot<-->
+	<Error>Couldn&apos;t open .* for writing: .*</Error>
+		<!--> RelData.pm: WriteToFile CatData.pm: WriteToFile<-->
+	<Error>Zipping failed with error code .*</Error>
+		<!--> Utils.pm: ZipList<-->
+	<Error>EPOCROOT must not be a UNC path</Error>
+		<!--> Utils.pm: EpocRoot<-->
+	<Error>No category was provided</Error>
+		<!--> MrpData.pm: HandleBinFile<-->
+	<Error>Couldn&apos;t open database DB_NAME: .*</Error>
+		<!--> EnvDb.pm: Open<-->
+	<Error>.* is not a valid version number</Error>
+		<!--> Utils.pm: ValidateOldFormatVersion PrepRel.pm: PrepRel<-->
+	<Error>.* is not within SRCROOT</Error>
+		<!--> Utils.pm: CheckWithinSourceRoot<-->
+	<Error>Couldn&apos;t delete .*: .*</Error>
+		<!--> EnvDb.pm: DeleteFilesInSignature CleanEnv.pm: CleanEnv, RemoveDirIfEmpty<-->
+	<Error>No path data found in reldata.ini. Cannot provide local archive path for new component.</Error>
+		<!--> pathdata.pm: LocalArchivePathForNewComponent<-->
+	<Error>EPOCROOT must not include a drive letter</Error>
+		<!--> Utils.pm: EpocRoot<-->
+	<Error>Unable to create component release successfully, archive might be corrupted.</Error>
+		<!--> MakeRel.pm: MakeReleases<-->
+	<Error>abld .* returned an error code .*</Error>
+		<!--> MrpData.pm: GatherAbldOutput<-->
+	<Error>No versions were found.</Error>
+		<!--> LatestVer: PrintLatestVersions<-->
+	<Error>.* .* does not exist</Error>
+		<!--> RelData.pm: ReadFromFile, ReadFromSpecificFile CatData.pm: ReadFromFile, ReadFromFile<-->
+	<Error>Could not create the table formatter .* for format .*</Error>
+		<!--> TableFormatter.pm: CreateFormatter<-->
+	<Error>No path data found in reldata.ini. Cannot return a list of versions.</Error>
+		<!--> pathdata.pm: ListVersions<-->
+	<Error>.* would be overwritten by unpacking .*</Error>
+		<!--> Utils.pm: CheckZipFileContentsNotPresent<-->
+	<Error>Invalid date specification: .*</Error>
+		<!--> Utils.pm: TextDateToEpochSeconds<-->
+	<Error>EPOCROOT must specify an existing directory</Error>
+		<!--> Utils.pm: EpocRoot<-->
+	<Error>.* not found in path</Error>
+		<!--> Utils.pm: FindInPath<-->
+	<Error>.* contains unclassified source code</Error>
+		<!--> Utils.pm: ClassifySourceFile<-->
+	<Error>Couldn&apos;t open abld cache data file &apos;.*&apos;</Error>
+		<!--> MrpData.pm: HandleBinSet<-->
+	<Error>Can&apos;t validate against an external environment, because the current environment database is not empty</Error>
+		<!--> EnvDb.pm: ValidateEnv<-->
+	<Error>Problem stating .*</Error>
+		<!--> EnvDb.pm: ListBinsStandard<-->
+	<Error>&lt;NOTESRC_RELEASE_REASON&gt; not specified in .*</Error>
+		<!--> RelData.pm: ValidateSource<-->
+	<Error>Invalid number of arguments to &apos;testbinary&apos; keyword in .*</Error>
+		<!--> MrpData.pm: DoReadMrp<-->
+	<Error>.* not installed; could not work out what version to use. Please specify a version number.</Error>
+		<!--> PrepRel.pm: PrepRel<-->
+	<Error>.* does not exist</Error>
+		<!--> MrpData.pm: DoReadMrp Utils.pm: CheckExists Manifest.pm: new<-->
+	<Error>Invalid line in signature file .*</Error>
+		<!--> EnvDb.pm: ExecuteSignature<-->
+	<Error>Unzip reported disk full (though this might mean it&apos;s trying to overwrite files in use)</Error>
+		<!--> Utils.pm: CheckUnzipError<-->
+	<Error>Project path .* does not correspond to a real directory</Error>
+		<!--> PathData/ProjectBased.pm: ListComponents<-->
+	<Error>.* is not a file</Error>
+		<!--> Utils.pm: CheckIsFile<-->
+	<Error>.* is not a valid version number; patch number must be given</Error>
+		<!--> Utils.pm: ValidateNewFormatVersion<-->
+	<Error>.* .* was not a valid release (can&apos;t find .*\\reldata)</Error>
+		<!--> RelData.pm: ReadFromFile<-->
+	<Error>&apos;notes_src&apos; keyword used more than once in .*</Error>
+		<!--> MrpData.pm: DoReadMrp<-->
+	<Error>Can&apos;t find IPR category for export .* in .*</Error>
+		<!--> MrpData.pm: AddExport<-->
+	<Error>Couldn&apos;t cope with archive path arguments .*: possibly the wrong number of arguments?</Error>
+		<!--> PathData/ProjectBased.pm: ProcessLine<-->
+	<Error>Release environment is dirty</Error>
+		<!--> MakeEnv: CheckEnvironment<-->
+	<Error>No &apos;component&apos; keyword specified in .*</Error>
+		<!--> MrpData.pm: Validate<-->
+	<Error>No components are pending release</Error>
+		<!--> MakeEnv: CheckEnvironment<-->
+	<Error>.* already exists</Error>
+		<!--> MakeRel.pm: CheckDirs<-->
+	<Error>Problem creating temporary directory .*: .*</Error>
+		<!--> Utils.pm: InitialiseTempDir<-->
+	<Error>Incorrect syntax to &apos;export_file&apos; keyword in .*</Error>
+		<!--> MrpData.pm: DoReadMrp<-->
+	<Error>Can&apos;t find .*\\exports.* .* .* is an incompatible release</Error>
+		<!--> CatData.pm: ReadFromFile<-->
+	<Error>Invalid component name .*</Error>
+		<!--> EnvDb.pm: GetMrpData<-->
+	<Error>Invalid line in .* (Line .*) - .*</Error>
+		<!--> MrpData.pm: DoReadMrp<-->
+	<Error>Could not load the table formatter .* for format .* because .*</Error>
+		<!--> TableFormatter.pm: CreateFormatter<-->
+	<Error>No path data found in reltools.ini. Cannot return list of projects.</Error>
+		<!--> pathdata.pm: ListProjects<-->
+	<Error>Unknown keyword .* for project-based path data</Error>
+		<!--> PathData/ProjectBased.pm: ProcessLine<-->
+	<Error>.* is pending release and cannot be refreshed; use &apos;preprel&apos; to remove it from your environment</Error>
+		<!--> EnvDb.pm: RefreshComponent<-->
+	<Error>Couldn&apos;t decode signature name .*</Error>
+		<!--> EnvDb.pm: DecodeSignatureName<-->
+	<Error>Couldn&apos;t open directory .*: .*</Error>
+		<!--> Utils.pm: ReadDir, CrossCheckDirsOneWay<-->
+	<Error>SRCROOT must end with a backslash</Error>
+		<!--> Utils.pm: SourceRoot<-->
+	<Error>Could not return the list of source statements used in the MRP file.</Error>
+		<!--> RelData.pm: SourceItems<-->
+	<Error>Component .* .* didn&apos;t exist</Error>
+		<!--> EnvDb.pm: AddUpReleaseSize<-->
+	<Error>Cannot run .* because another command is already running</Error>
+		<!--> CommandController.pm: New<-->
+	<Error>Unable to overwrite the read-only file .*: .*</Error>
+		<!--> Utils.pm: ExtractFile<-->
+	<Error>Couldn&apos;t parse abld cache data in &apos;.*&apos;: .*</Error>
+		<!--> MrpData.pm: HandleBinSet<-->
+	<Error>&apos;component&apos; keyword used more than once in .*</Error>
+		<!--> MrpData.pm: DoReadMrp<-->
+	<Error>Unable to create directory.</Error>
+		<!--> Utils.pm: ZipSourceList<-->
+	<Error>Problem emptying temporary directory .*: .*</Error>
+		<!--> Utils.pm: RemoveTempDir<-->
+	<Error>Couldn&apos;t run bldmake bldfiles -v | in abldPath: .*</Error>
+		<!--> MrpData.pm: ExportMakeFile<-->
+	<Error>Couldn&apos;t run EValid: .*</Error>
+		<!--> EnvDb.pm: EvalidateDirectories<-->
+	<Error>Version number .* has an invalid patch number</Error>
+		<!--> Utils.pm: ValidateNewFormatVersion, ValidateNewFormatVersion<-->
+	<Error>Couldn&apos;t parse reldata in .*</Error>
+		<!--> RelData.pm: ReadFromSpecificFile CatData.pm: ReadFromFile<-->
+	<Error>&lt;NOTESRC_RELEASER&gt; not specified in .*</Error>
+		<!--> RelData.pm: ValidateSource<-->
+	<Error>Path does not contain EPOCROOT - EPOCROOT:.* - Path:.*</Error>
+		<!--> Utils.pm: RemoveEpocRoot<-->
+	<Error>No path data found in reldata.ini. Cannot provide local archive path for importing component.</Error>
+		<!--> pathdata.pm: LocalArchivePathForImportingComponent<-->
+	<Error>SRCROOT already present in .*</Error>
+		<!--> Utils.pm: PrependSourceRoot<-->
+	<Error>couldn&apos;t create a formatter without a type</Error>
+		<!--> TableFormatter.pm: CreateFormatter<-->
+	<Error>Problem extracting export IPR categories for .*</Error>
+		<!--> MrpData.pm: ClassifyAutomaticExports<-->
+	<Error>problem reading .*</Error>
+		<!--> Utils.pm: ListZip, SignificantZipDir<-->
+	<Error>.* .* already exists</Error>
+		<!--> MrpData.pm: EnsureDoesNotExist PrepRel.pm: PrepRel<-->
+	<Error>.* does not exist, so can not add to .*</Error>
+		<!--> Utils.pm: ZipSourceList<-->
+	<Error>No path data found in reldata.ini. Cannot return list of components.</Error>
+		<!--> pathdata.pm: ListComponents<-->
+	<Error>Unknown archive_path related keyword: </Error>
+		<!--> pathdata.pm: SubclassifyMyselfByKeyword<-->
+	<Error>Local archive path .* is not a directory</Error>
+		<!--> PathData/ProjectBased.pm: CreateLocalDirectory<-->
+	<Error>Cannot add file &apos;.*&apos; to new zip.</Error>
+		<!--> Utils.pm: ZipSourceList<-->
+	<Error>Component name in MRP file is .* whilst the name of this component in the environment database is .*</Error>
+		<!--> EnvDb.pm: GetMrpData<-->
+	<Error>.* is not within EPOCROOT</Error>
+		<!--> Utils.pm: CheckWithinEpocRoot<-->
+	<Error>Unknown tag .* in .*</Error>
+		<!--> RelData.pm: AddLine<-->
+	<Error>Couldn&apos;t open .* for reading: .*</Error>
+		<!--> ValidateRel: ProcessCommandLine EnvDb.pm: ExecuteSignature RelData.pm: ReadFromSpecificFile CatData.pm: ReadFromFile<-->
+	<Error>Couldn&apos;t make path .*: .*</Error>
+		<!--> Utils.pm: MakeDir<-->
+	<Error>Couldn&apos;t make directory .*: .*</Error>
+		<!--> Utils.pm: MakeDir EnvDb.pm: Open<-->
+	<Error>Failed to write ZIP file &apos;.*&apos;</Error>
+		<!--> Utils.pm: ZipSourceList<-->
+	<Error>Invalid line in .*:.*</Error>
+		<!--> IniData.pm: ReadIni, ReadIni, ReadTargetAliasFile<-->
+	<Error>Unable to find EXPORT.MAKE or EXPORTTEST.MAKE for .*</Error>
+		<!--> MrpData.pm: ExportMakeFile<-->
+	<Error>Invalid line in .*:.* does not exist or is an invalid directory name</Error>
+		<!--> IniData.pm: ReadIni<-->
+	<Error>.* .* is dirty</Error>
+		<!--> MakeEnv: CheckEnvironment<-->
+	<Error>Couldn&apos;t change working directory back to .*: .*</Error>
+		<!--> MrpData.pm: ReadMrp Utils.pm: ZipList<-->
+	<Error>.* not found in environment database</Error>
+		<!--> EnvDb.pm: SetInternalVersion, Status, SetStatus, MrpName, SetMrpName<-->
+	<Error>Line .* in .* has forward reference to .*</Error>
+		<!--> IniData.pm: ReadTargetAliasFile<-->
+	<Error>SRCROOT must not include a drive letter</Error>
+		<!--> Utils.pm: SourceRoot<-->
+	<Error>&quot;.*&quot; does not exist</Error>
+		<!--> Utils.pm: ZipList<-->
+	<Error>Reldata in .* is blank</Error>
+		<!--> RelData.pm: ReadFromSpecificFile CatData.pm: ReadFromFile<-->
+	<Error>.* not currently installed; aborting refreshing of binaries</Error>
+		<!--> EnvDb.pm: RefreshComponent<-->
+	<Error>Unknown keyword .* in .*</Error>
+		<!--> MrpData.pm: DoReadMrp IniData.pm: ReadIni<-->
+	<Error>Couldn&apos;t open .*: .*</Error>
+		<!--> MrpData.pm: ProcessExportMakeFile Utils.pm: ToolsVersion EnvDb.pm: GenerateSignature, GenerateFakeSignature, GenerateEmptySignature Symbian/DistributionPolicy/Reader.pm: readfile<-->
+	<Error>Problem reading stats of .*</Error>
+		<!--> EnvDb.pm: GenerateSignature<-->
+	<Error>bldmake bldfiles failed in .* (exit status .*)</Error>
+		<!--> MrpData.pm: CallBldMake<-->
+	<Error>No path data found in reldata.ini. Cannot provide remote archive path for exporting component.</Error>
+		<!--> pathdata.pm: RemoteArchivePathForExportingComponent<-->
+	<Error>No targets detected for .*</Error>
+		<!--> IniData.pm: ReadTargetAliasFile<-->
+	<Error>You cannot have multiple archive_path lines with the same project name (&quot;..*&quot;)</Error>
+		<!--> PathData/ProjectBased.pm: ProcessLine<-->
+	<Error>Problem unpacking .* from .*</Error>
+		<!--> Utils.pm: UnzipSingleFile<-->
+	<Error>Multiple targets in list declared &lt;EMPTY&gt; for alias .*</Error>
+		<!--> IniData.pm: ReadTargetAliasFile<-->
+	<Error>.* contains unclassified source code</Error>
+		<!--> MrpData.pm: HandleSourceDir<-->
+	<Error>.* not currently installed, aborting removal of binaries</Error>
+		<!--> EnvDb.pm: RemoveComponent<-->
+	<Error>Could not remove directory .*: .*</Error>
+		<!--> EnvDb.pm: DeleteFilesInSignature, DeleteFilesInSignature<-->
+	<Error>Unable to decode string .*</Error>
+		<!--> Utils.pm: SplitQuotedString<-->
+	<Error>Couldn&apos;t run .*\\abld</Error>
+		<!--> MrpData.pm: GetPlatforms<-->
+	<Error>SRCROOT must be an absolute path without a drive letter</Error>
+		<!--> Utils.pm: SourceRoot<-->
+	<Error>Couldn&apos;t parse filename .*</Error>
+		<!--> Utils.pm: SplitFileName<-->
+	<Error>The path .* contains too many characters and can not be extracted</Error>
+		<!--> Utils.pm: ExtractFile, Unzip<-->
+	<Error>Fatal parser error.</Error>
+		<!--> IniData.pm: ReadTargetAliasFile<-->
+	<Error>Must set the EPOCROOT environment variable</Error>
+		<!--> Utils.pm: EpocRoot<-->
+	<Error>creating local archive path &quot;..*&quot;</Error>
+		<!--> PathData/ProjectBased.pm: CreateLocalDirectory<-->
+	<Error>Unable to open .* for reading: .*</Error>
+		<!--> MrpData.pm: DoReadMrp IniData.pm: ReadIni, ReadTargetAliasFile RelData.pm: ParseNotesSource<-->
+	<Error>.* .* not found</Error>
+		<!--> pathdata.pm: CheckReleaseExists<-->
+	<Error>Couldn&apos;t open directory .* because .*</Error>
+		<!--> EnvDb.pm: AddUpReleaseSize<-->
+	<Error>.* is not a file or directory in .*</Error>
+		<!--> MrpData.pm: ClassifySource<-->
+	<Error>Component name not found in mrp</Error>
+		<!--> MrpData.pm: Component<-->
+	<Error>Platform .* not supported</Error>
+		<!--> MrpData.pm: GatherAbldOutput<-->
+	<Error>Couldn&apos;t make .* writable: .*</Error>
+		<!--> Utils.pm: SetFileWritable<-->
+	<Error>EPOCROOT already present in .*</Error>
+		<!--> Utils.pm: PrependEpocRoot<-->
+	<Error>No path data found in reldata.ini. Cannot provide local archive path for existing component.</Error>
+		<!--> pathdata.pm: LocalArchivePathForExistingComponent<-->
+	<Error>Internal version number not specified for .* .*</Error>
+		<!--> PrepRel.pm: PrepRel<-->
+	<Error>didn&apos;t find any platforms</Error>
+		<!--> MrpData.pm: GetPlatforms<-->
+	<Error>Problem generating makefile for .* in .*</Error>
+		<!--> MrpData.pm: CallMakMake<-->
+	<Error>No path data found in reldata.ini. Cannot return which project a component belongs to.</Error>
+		<!--> pathdata.pm: ComponentProjects<-->
+	<Error>Unable to create environment successfully, archive might be corrupted.</Error>
+		<!--> MakeRel.pm: MakeReleases<-->
+	<Error>Couldn&apos;t make .* read only: .*</Error>
+		<!--> Utils.pm: SetFileReadOnly<-->
+	<Error>Problem calling bldmake in .*</Error>
+		<!--> MrpData.pm: CallBldMake<-->
+	<Error>Couldn&apos;t change working directory to .*: .*</Error>
+		<!--> MrpData.pm: ExportMakeFile, ExportMakeFile, ReadMrp, CallBldMake Utils.pm: ZipList<-->
+	<Error>Failed to read ipr category for directory .*: .*</Error>
+		<!--> Utils.pm: ClassifyDir<-->
+	<Error>Unzip reported an out-of-memory error</Error>
+		<!--> Utils.pm: CheckUnzipError<-->
+	<Error>Mrp name not specified for .*</Error>
+		<!--> PrepRel.pm: PrepRel, EnvDb.pm: CheckComp<-->
+	<Error>.* has unknown origin</Error>
+		<!--> MakeEnv: CheckEnvironment<-->
+	<Error>Invalid arguments</Error>
+		<!--> MakeEnv: ProcessCommandLine LatestVer: ProcessCommandLine BinInfo: ProcessCommandLine<-->
+	<Error>EPOCROOT must end with a backslash</Error>
+		<!--> Utils.pm: EpocRoot<-->
+	<Error>Network share .* does not exist</Error>
+		<!--> Utils.pm: MakeDir<-->
+	<Error>EPOCROOT must be an absolute path without a drive letter</Error>
+		<!--> Utils.pm: EpocRoot<-->
+	<Error>Unzip reported a problem with the zip file</Error>
+		<!--> Utils.pm: CheckUnzipError<-->
+	<Error>Notes source not found in mrp for .*</Error>
+		<!--> MrpData.pm: NotesSource<-->
+	<Error>New version not specified</Error>
+		<!--> PrepRel.pm: PrepRel<-->
+	<Error>Couldn&apos;t execute _zip.exe - .*</Error>
+		<!--> Utils.pm: ZipList<-->
+	<Error>Invalid number of arguments</Error>
+		<!--> RemoveRel: ProcessCommandLine ValidateRel: ProcessCommandLine ValidateEnv: ProcessCommandLine<-->
+	<Error>Unable to create new zip.</Error>
+		<!--> Utils.pm: ZipSourceList<-->
+	<Error>Line .* in .* has duplicate key .*</Error>
+		<!--> IniData.pm: ReadTargetAliasFile<-->
+	<Error>.* is not a valid internal version number</Error>
+		<!--> PrepRel.pm: PrepRel<-->
+	<Error>MD5 info incomplete</Error>
+		<!--> Manifest.pm: Compare<-->
+	<Error>File is neither an MRP file nor a manifest file.</Error>
+		<!--> Manifest.pm: new<-->
+	<Error>Directory path does not exist : .*</Error>
+		<!--> Manifest.pm: Save<-->	 
+	<Error>Can&apos;t write manifest file:.*</Error>
+		<!--> Manifest.pm: Save<-->
+	<Error>Component names does not match between manifest versions</Error>
+		<!--> Manifest.pm: Compare<-->	 				 
+	<Error>Can&apos;t read manifest file &apos;.*&apos;:.*</Error>
+		<!--> Manifest.pm: LoadManifestFile<-->
+	<Error>Component name undefined.*</Error>
+		<!--> PathData::ProjectBased.pm: multiple<-->
+	<Error>Version number undefined.*</Error>
+		<!--> PathData::ProjectBased.pm: multiple<-->
+	<Error>Unexpected entry in .* could be corrupt or tampered with</Error>
+		<!--> EnvDb.pm: GenerateSignature<-->
+	<Error>No project paths are defined</Error>
+		<!--> PathData/ProjectBased.pm: BasicChecks<-->	
+	<Error>Project .* unknown</Error>
+		<!--> PathData/ProjectBased.pm: CheckProject<-->		
+	<Error>.* failed check</Error>
+		<!--> CBR Patch<-->
+	<Error>IPR category .* is invalid</Error>
+		<!--> Symbian/IPR.pm: SetIPR<-->
+	<Error>Notes source .* does not exist</Error>
+		<!--> Symbian/CBR/MRP.pm: SetNotesSource<-->
+	<Error>Source .* does not exist</Error>
+		<!--> Symbian/CBR/MRP.pm: SetSource<-->
+	<Error>&apos;exports&apos; entry for .* defined more than once in .*</Error>
+		<!--> Symbian/CBR/MRP.pm: SetExports<-->
+	<Error>Exports path .* does not exist</Error>
+		<!--> Symbian/CBR/MRP.pm: SetExports<-->
+	<Error>Incorrect syntax to &apos;export_file&apos; keyword in .*</Error>
+		<!--> Symbian/CBR/MRP.pm: SetExportFile<-->
+	<Error>Export file .* does not exist</Error>
+		<!--> Symbian/CBR/MRP.pm: SetExportFile<-->
+	<Error>&apos;component&apos; keyword used more than once in .*</Error>
+		<!--> Symbian/CBR/MRP/Reader: ReadFile<-->
+	<Error>Invalid number of arguments to .* keyword in .*</Error>
+		<!--> Symbian/CBR/MRP/Reader: ReadFile<-->
+	<Error>&apos;notes_source&apos; keyword used more than once in .*</Error>
+		<!--> Symbian/CBR/MRP/Reader: ReadFile<-->
+	<Error>&apos;source&apos; entry for .* defined more than once in .*</Error>
+		<!--> Symbian/CBR/MRP/Reader: ReadFile<-->
+	<Error>IPR information for .* specified more than once in .*</Error>
+		<!--> Symbian/CBR/MRP/Reader: ReadFile<-->
+	<Warning>Exported file .* is not within EPOCROOT</Warning>
+		<!--> MrpData.pm: HandleExports<-->
+	<Warning>(.*) -export_file: could not remove .*, as it hadn&apos;t been added. Perhaps the lines in your MRP are in the wrong order, or you meant -binary\?</Warning>
+		<!--> MrpData.pm: HandleExportFile<-->
+	<Warning>Using .* version found in .*</Warning>
+		<!--> IniData.pm: ReadIni<-->
+	<Warning>could not examine .* .* because .*</Warning>
+		<!--> RelData.pm: OpenSet<-->
+	<Warning>.* not found in .*, using version found in .*</Warning>
+		<!--> IniData.pm: ReadIni<-->
+	<Warning>Installed component does not match existing signature; updating signature</Warning>
+		<!--> EnvDb.pm: RefreshComponent<-->
+	<Warning>(.*) The MRP line .* does not .* any files. Therefore is this line necessary?</Warning>
+		<!--> MrpData.pm: WarnRedundantMRPLine<-->
+	<Warning>Not checking for new binaries; .*</Warning>
+		<!--> EnvDb.pm: ValidateCompOld<-->
+	<Warning>skipping the check for added files, for the component .* All other source code validation checks passed. The reason is: .*</Warning>
+		<!--> EnvDb.pm: ValidateCompOld<-->
+	<Warning>Line .* in .* has duplicate value entry .* in key .*</Warning>
+		<!--> IniData.pm: ReadTargetAliasFile<-->
+	<Warning>could not convert path .* to an absolute path because: .*</Warning>
+		<!--> MrpData.pm: GatherAbldOutput<-->
+	<Warning>Couldn&apos;t delete .*: .*</Warning>
+		<!--> EnvDb.pm: DeleteSignature<-->
+	<Warning>.* requires Release Tools version .* or later. You have .*</Warning>
+		<!--> RelData.pm: WarnIfReleaseTooNew<-->
+	<Warning>Not checking for new binaries; MRP file not present</Warning>
+		<!--> EnvDb.pm: ValidateCompOld, ValidateComp<-->
+	<Warning>.* not found.</Warning>
+		<!--> IniData.pm: CheckAliasWarning<-->
+	<Warning>Couldn&apos;t run abld .*</Warning>
+		<!--> MrpData.pm: GatherAbldOutput<-->
+	<Warning>IPR information for .* defined more than once in MRP files and differs and so will be ignored</Warning>
+		<!--> Symbian/CBR/IPR/MRP.pm: AddToTree<-->
+	<Warning>.* contains an export .* which is not included as source for this component, and does not contain dependencies on another component</Warning>
+		<!--> MrpData.pm: ProcessExports<-->
+	<Warning>IPR information for .* could not be obtained from either MRP files or distribution policy files</Warning>
+		<!--> Symbian/IPR.pm: GetRequestedInformation<-->
+	<Warning>The default IPR entry does not apply to any source statements in .*</Warning>
+		<!--> Symbian/CBR/MRP.pm: ValidateParsing, MrpData.pm: validateparsing<-->
+	<Warning>The IPR entry for .* does not apply to any source statements in .*</Warning>
+		<!--> Symbian/CBR/MRP.pm: ValidateParsing, MrpData.pm: validateparsing<-->
+	<Remark>Evalid is not available (.*)</Remark>
+		<!--> Symbian/CBR/Component/Manifest.pm: PopulateDataFromMRP, RefreshMetaData<-->
+	<Remark>Evalid is not available (.*)</Remark>
+		<!--> Symbian/CBR/Component/Manifest.pm: PopulateDataFromMRP, RefreshMetaData<-->											     
+	<Remark>Incompatible evalid versions</Remark>
+		<!--> Symbian/CBR/Component/Manifest.pm: Compare<-->	 					 
+</cbrmessages>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/CConfig.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,541 @@
+#!\bin\perl -w
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# CConfig
+# 
+
+package CConfig;
+
+use strict;
+use IO::File;
+use COutputHandler;
+
+# Added for scanlog compatibility
+use Time::localtime;
+
+# CConfig New(scalar aFilename) : constructor
+sub New($)
+	{
+	my $proto = shift;
+	my ($aFilename) = @_;
+
+	my $class = ref($proto) || $proto;
+
+	my $self = { RELTOOLS_REQUIRED => "",
+                     outputHandler => COutputHandler->new()};
+	bless($self, $class);
+  # undef the logfile here so that the folowing warning goes to stdout
+  $self->{iLOGFILE} = undef;
+	# Load in options
+	if (defined($aFilename))
+		{
+		if (!$self->Reload($aFilename))
+			{
+			$self->Warning("Option file could not be loaded.\n");
+			}
+		}
+	
+  # Added support for scanlog and Die() control.
+  $self->{iPhaseErrorCount} = 0;
+	$self->{iPhase} = undef;
+        
+	return $self;
+	}
+
+# boolean Set(scalar aOptionName, scalar aValue)
+sub Set($$)
+	{
+	my $self = shift;
+	my ($aOptionName, $aValue) = @_;
+
+	if (!defined($aOptionName))
+		{
+		$self->Warning("Cannot set undefined option");
+		
+		return 0;
+		}
+		
+	if (!defined($aValue))
+		{
+		$self->Warning("Cannot set option '$aOptionName' to undefined value.");
+		return 0;
+		}
+	
+	if ((ref($aValue) ne "") && (ref($aValue) ne "ARRAY"))
+		{
+		$self->Warning("Value of '$aOptionName' must be either a string or list.");
+		return 0;
+		}
+
+	$self->{iOptions}->{lc($aOptionName)} = [$aOptionName, $aValue];
+	return 1;
+	}
+
+# scalar Get(scalar aOptionName)
+sub Get($)
+	{
+	my $self = shift;
+	my ($aOptionName) = @_;
+
+	if (defined($self->{iOptions}->{lc($aOptionName)}))
+		{
+		return ($self->{iOptions}->{lc($aOptionName)})->[1];
+		}
+	else
+		{
+		return undef;
+		}
+	}
+
+# boolean Reload(scalar aFilename)
+sub Reload($)
+	{
+	my $self = shift;
+	my ($aFilename) = @_;
+	my $okay = 1;
+
+	$self->{iOptions}={}; # Blank existing options
+
+	if (!open(FILE, $aFilename))
+		{
+		$self->Warning("Option file '$aFilename' could not be opened.");
+		$okay = 0;
+		}
+	else
+		{
+		foreach my $line (<FILE>)
+			{
+			chomp ($line);
+
+			# Split on colon
+			my $parms = $line;
+			$parms =~ s/([^\\]):/$1\x08/g; # Turn unescaped colons into 0x08 chars
+			$parms =~ s/\\:/:/g; # Unescape escaped colons
+			my @parms = split(/\x08/,$parms); # Split on 0x08
+
+			if (scalar(@parms) != 0)
+				{
+				if (scalar(@parms) == 2)
+					{
+					my $key = $parms[0];
+					$key =~ s/^\s+//; # Remove preceding spaces
+					$key =~ s/([^\\])\s$/$1/g; # Remove unescaped trailing spaces
+					$key =~ s/\\(\s)/$1/g; # Unescape space characters
+
+					my $value = $parms[1];
+					if ($value =~ /\s*\[.*\]\s*$/)
+						{
+						# Value is a [list]
+
+						# Remove square brackets
+						$value =~ s/^\s*\[//;
+						$value =~ s/\]\s*$//;
+
+						# Split on comma
+						$value =~ s/([^\\]),/$1\x08/g; # Turn unescaped commas into 0x08 chars
+						$value =~ s/\\,/,/g; # Unescape escaped commas
+						my @values = split(/\x08/,$value); # Split on 0x08
+
+						map(s/^\s+//, @values); # Remove preceding spaces
+						map(s/([^\\])\s$/$1/g, @values); # Remove unescaped trailing spaces
+						map(s/\\(\s)/$1/g, @values); # Unescape space characters
+
+						$value = [@values];
+						}
+					else
+						{
+						# Value is a scalar
+
+						$value =~ s/^\s+//; # Remove preceding spaces
+						$value =~ s/([^\\])\s$/$1/g; # Remove unescaped trailing spaces
+						$value =~ s/\\(\s)/$1/g; # Unescape space characters
+						}
+
+					if (!($self->Set($key, $value)))
+						{
+						$okay = 0;
+						}
+					}
+				else
+					{
+					$self->Warning("In file '$aFilename', ".scalar(@parms)." parameters found on a line.\nOnly two parameters, colon separated, are supported.\nLine: '$line'");
+					$okay = 0;
+					}
+				}
+			}
+		close(FILE);
+		}
+
+	return ($okay);
+	}
+
+# boolean Save(scalar aFilename)
+sub Save($)
+	{
+	my $self = shift;
+	my ($aFilename) = @_;
+	my $okay = 1;
+
+	if (!open(FILE, ">$aFilename"))
+		{
+		$self->Warning("Could not open option file '$aFilename' to save to.");
+		$okay = 0;
+		}
+	else
+		{
+		foreach my $pair (values(%{$self->{iOptions}}))
+			{
+			my $key = $pair->[0];
+			my $value = $pair->[1];
+			
+			if (!defined($value))
+				{
+				$self->Error("Cannot write undefined value for key '$key' when saving options.");
+				$okay = 0;
+				}
+			else
+				{
+
+				if (ref($value))
+					{
+					if (ref($value) ne "ARRAY")
+						{
+						$self->Error("Cannot write ".ref($value)." for key '$key' when saving options.");
+						$okay = 0;
+						}
+					else
+						{
+						# It's a list: [value,value,value] and escape any commas or opening spaces
+						my @values = @{$value};
+						map(s/^(\s)/\\$1/,@values);
+						map(s/,/\\,/g,@values);
+						$value = "[".join(",",@values)."]";
+						}
+					}
+				else
+					{
+					# It's a scalar string
+					# Escape opening space
+					$key =~ s/^(\s)/\\$1/;
+					# Escape square brackets;
+					}
+					
+				# Escape colons
+				$key =~ s/:/\\:/g;
+				$value =~ s/:/\\:/g;
+				
+				print FILE $key.":".$value."\n";
+				}
+			}
+		close (FILE)
+		}
+	return $okay;
+	}
+
+# boolean SetLog(scalar aFilename)
+sub SetLog($)
+	{
+	my $self = shift;
+	my ($aLogFile) = @_;
+
+	if (defined($self->{iLOGFILE}))
+		{
+		$self->{iLOGFILE}->close();
+    # This forces any subsequent error message to go to stdout
+    $self->{iLOGFILE} = undef;
+		}
+	
+	if (-e $aLogFile)
+		{
+		if (-e $aLogFile."~")
+			{
+			if (!unlink $aLogFile."~")
+				{
+				$self->Error("Couldn't delete backup log file\n");
+				return 0;
+				}
+			}
+
+		if (system("copy $aLogFile $aLogFile~ > nul 2>&1"))
+			{
+			$self->Error("Couldn't back-up existing log file\n");
+			return 0;
+			}
+		}
+		
+	$self->{iLOGFILE}=new IO::File("> $aLogFile");
+
+	if (defined($self->{iLOGFILE}))
+		{
+		return 1;
+		}
+	else
+		{
+		$self->Error("Couldn't open logfile $aLogFile\n");
+		return 0;
+		}
+	}
+
+# void Print(scalar aLogLine)
+sub Print($)
+	{
+	my $self = shift;
+	my ($aLogLine) = @_;
+
+	my $logfile = $self->{iLOGFILE};
+
+	if ($aLogLine !~ /\n$/)
+		{
+		$aLogLine = $aLogLine."\n";
+		}
+                
+        $aLogLine = $self->{outputHandler}->CheckOutput($aLogLine);      
+
+	if (!defined($logfile))
+		{
+		print $aLogLine;
+		}
+	else
+		{
+		print $logfile $aLogLine;
+		}
+	}
+
+# void Die(scalar aError)
+sub Die($)
+	{
+	my $self = shift;
+	my ($aError) = @_;
+
+	my $logfile = $self->{iLOGFILE};
+
+	if ($aError !~ /\n$/)
+		{
+		$aError = $aError."\n";
+		}
+
+	if (!defined($logfile))
+		{
+		die $aError;
+		}
+	else
+		{
+		print $logfile $aError;
+		die "ERROR: System experienced a fatal error; check the log file.\n";
+		}
+	}
+
+# void Status(scalar aMessage)
+sub Status($)
+	{
+	my $self = shift;
+	my ($aMessage) = @_;
+
+	if (defined($self->{iLOGFILE}))
+		{
+		print STDOUT $aMessage."\n"; # Only display status (to STDOUT) if everything else is going to the logfile
+		}
+	}
+
+# Returns the number of errors encountered in a phase
+sub GetErrorCount()
+  {
+  my $self = shift;
+  return $self->{iPhaseErrorCount};
+  }
+
+###########################################
+# Utility functions
+###########################################
+
+# boolean CheckRelTools()
+
+sub CheckRelTools()
+	{
+	# Search for reldata API
+	my $found = 0;
+	foreach my $path (split(/;/,$ENV{PATH}))
+		{
+		if (-e $path."\\reldata\.pm")
+			{
+			$found = 1;
+			last;
+			}
+		}
+	
+	return $found
+	}
+
+# void RequireRelTools() - Requires RelData and IniData. Dies if tools can't be located, or die when being required.
+
+sub RequireRelTools()
+	{
+	my $self = shift;
+
+	if ($self->{RELTOOLS_REQUIRED} ne "required")
+		{
+		# Locate reldata API
+		my $found = 0;
+		foreach my $path (split(/;/,$ENV{PATH}))
+			{
+			if (-e $path."\\reldata\.pm")
+				{
+				push @INC, $path;
+				$found = 1;
+				last;
+				}
+			}
+
+		if (!$found)
+			{
+			$self->Error("Couldn't find release tools in path");
+			}
+
+		# Require core modules
+		require RelData;
+		require IniData;
+		$self->{RELTOOLS_REQUIRED}="required";
+		}
+	}
+
+###########################################
+# Handling Commands, Phases and components.
+###########################################
+
+# void Command(scalar aMessage)
+# Prints out a command in scanlog format to the log file or stdout
+sub Command($)
+  {
+  my $self = shift;
+	my ($aCommand) = @_;
+  my $message = "===-------------------------------------------------\n=== Stage=$self->{stageNumber}.$aCommand\n===-------------------------------------------------\n";	my $logfile = $self->{iLOGFILE};
+  $self->Print($message);
+	}
+
+# void PhaseStart(scalar aPhaseName)
+# If a current phase is active then this is closed, if when doing so a
+# non-zero error count is returned by PhaseEnd() then Die is called. This
+# is regarded as a logic error as the stage runner should normally call PhaseEnd()
+# itself and decide what to do about any errors that occured in that phase.
+sub PhaseStart($)
+  {
+  my $self = shift;
+  my $phase = shift;
+  if (defined $self->{iPhase})
+    {
+    my $numErrs = $self->PhaseEnd();
+    # If there are errors returned by PhaseEnd then Die()
+    if ($numErrs != 0)
+      {
+        $self->Die("Fatal logic error detected, CConfig::PhaseStart() called without PhaseEnd() when phase has $numErrs errors.\n");
+      }
+    }
+    
+    $self->{stageNumber}++; # For scanlog compatibility
+    
+    
+    $self->Command($phase);
+    $self->{iPhase} = $phase;
+
+    my $localTime = ctime(); 
+    my $message = "=== Stage=$self->{stageNumber}.$self->{iPhase} started $localTime\n";
+    $message .= "=== Stage=$self->{stageNumber}.$self->{iPhase} == $self->{iPhase}\n"; # For Scanlog compatibility
+    $message .= "+++ HiRes Start " . time() . "\n"; # For Scanlog compatibility
+    $message .= "--  $self->{iPhase}: Miscellaneous\n"; # For Scanlog compatibility
+    $self->Print($message);
+    $self->{iPhaseErrorCount} = 0;
+  }
+  
+# scalar PhaseEnd(void)
+# Closes the current phase and returns a count of the number of errors encountered.
+# This will die if a PhaseStart() has not been declared.
+sub PhaseEnd()
+  {
+  my $self = shift;
+  my $localTime = ctime();
+  if (defined $self->{iPhase})
+    {   
+    my $message = "+++ HiRes End " . time() . "\n"; # For Scanlog compatibility
+    $message .= "=== Stage=$self->{stageNumber}.$self->{iPhase} finished $localTime\n";
+    $self->Print($message);
+    }
+  else
+    {
+    $self->Die("Error: CConfig::PhaseEnd() called without corresponding PhaseStart()\n");
+    }
+	$self->{iPhase} = undef;
+  return $self->{iPhaseErrorCount};
+  }
+  
+# void Component(scalar aComponent)
+# Prints out a component for this phase in scanlog format to the log file or stdout
+sub Component($)
+  {
+  my $self = shift;
+	my ($aComponent) = @_;
+  if (!defined $self->{iPhase})
+    {
+    $self->Die("Logger: Undefined phase for component \"$aComponent\"\n");
+    }
+  else
+    {
+    my $message = "+++ HiRes End " . time() . "\n-- $aComponent\n+++ HiRes Start " . time();
+    $self->Print($message);
+    }
+  }
+
+###############################
+# Handling errors and warnings.
+###############################
+
+# void Error(scalar aMessage)
+# Writes an error message to the logfile (if defined) or stdout
+# and will increment the error count for this phase.
+sub Error($)
+  {
+	my $self = shift;
+	my ($aMessage) = @_;
+  $self->{iPhaseErrorCount} += 1;
+  my $message = "ERROR: $aMessage";
+  $self->Print($message);
+  }
+
+# void Warning(scalar aMessage)
+# Writes an warning message to the logfile (if defined) or stdout
+sub Warning($)
+  {
+	my $self = shift;
+	my ($aMessage) = @_;
+  my $message = "WARNING: $aMessage";
+  $self->Print($message);
+  }
+
+sub DESTROY
+	{
+	my $self = shift;
+
+	# Avoid "unreferenced scalar" error in Perl 5.6 by not calling
+	# PhaseEnd method for each object in multi-threaded CDelta.pm
+
+   if ((defined $self->{iPhase}) && ($self->{iPhase} !~ /CDelta/)) {
+      $self->PhaseEnd;
+   }
+
+	if (defined($self->{iLOGFILE}))
+		{
+		$self->{iLOGFILE}->close();
+		$self->{iLOGFILE} = undef;
+		}
+	}
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/COutputHandler.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,119 @@
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# COutputHandler
+# 
+#
+
+package COutputHandler;
+
+use strict;
+use XML::Simple;
+use File::Basename;
+use File::Spec;
+
+use constant CBROUTPUTFILE => File::Spec->catdir(File::Basename::dirname("$INC{'COutputHandler.pm'}"), 'CBROutputFile.xml');
+
+sub new {
+    my $pkg = shift;
+    my $self = {};
+    bless $self, $pkg;
+    
+    $self->ParseOutputFile();
+    
+    return $self;
+}
+
+
+sub CheckOutput {
+    my $self = shift;
+    my $line = shift;
+    
+    chomp $line;
+    
+    my $amendedLine = $line;
+    $amendedLine =~ s/^-?\s?(error|warning|remark|fatal error):?\s+//i;
+
+    foreach my $type ('Error', 'Remark', 'Warning') {
+        foreach my $toMatch (@{$self->{file}->{$type}}) {           
+            if ($amendedLine =~ /^$toMatch$/) {
+                return uc($type) . ": $amendedLine\n";
+            }           
+        }
+    }
+
+    # did not match, return original line
+    return "$line\n";
+}
+
+
+sub ParseOutputFile {
+    my $self = shift;
+    $self->{file} = XMLin(CBROUTPUTFILE);
+    
+    # Compile the regular expressions
+    foreach my $type ('Error', 'Remark', 'Warning') {
+       @{$self->{file}->{$type}} = map { qr/$_/i } @{$self->{file}->{$type}}
+    }
+}
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+COutputHandler.pm
+
+=head1 DESCRIPTION
+
+A module that checks output from the CBR Tools and promotes requested errors, warnings and remarks to scanlog compatible versions.
+
+=head1 SYNOPSIS
+
+ use strict;
+ use COutputHandler;
+ 
+ # Instantiate implementation of COutputHandler
+ my $outputHandler = COutputHandler->new();
+
+ # Pass the string through CheckOutput before printing it to the log
+ $aLine = $outputHandler->CheckOutput($aLine);
+ 
+ print $aLine;
+
+=head1 INTERFACE
+
+=head2 Object Management
+
+=head3 new
+
+To be called without any arguments.  Will parse the XML file containing error, warning and remark messages.
+
+=head2 Data Management
+
+=head3 CheckOuput
+
+To be passed a string.  The string is checked to see if it needs to be made scanlog compatible, and if so it is modified and returned.  If not then the original string is returned.
+
+=head3 ParseOutputFile
+
+Parses the XML file.
+
+=head1 COPYRIGHT
+
+Copyright (c) 2007 Symbian Software Ltd. All rights reserved.
+
+=cut
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/CProcessStage.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,153 @@
+#!\bin\perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# CProcessStage
+# 
+#
+
+package CProcessStage;
+
+use strict;
+
+# CProcessStage New(CConfig aOptions) : constructor
+sub New($)
+	{
+	my $proto = shift;
+	my ($aOptions) = @_;
+
+	my $class = ref($proto) || $proto;
+
+	my $self = {};
+	bless($self, $class);
+
+	# Save class name
+	$self->iName($class);
+
+	# Store options
+	$self->iOptions($aOptions);
+
+	# Validate options
+	$self->CheckOpts();
+
+	return $self;
+	}
+
+# Getter/setters
+sub iOptions
+	{
+	my $self = shift;
+	if (@_) { $self->{iOPTIONS} = shift; }
+	return $self->{iOPTIONS};
+	}
+sub iName
+	{
+	my $self = shift;
+	if (@_) { $self->{iNAME} = shift; }
+	return $self->{iNAME};
+	}
+
+# void CheckOpts()
+# Panics if options invalid
+sub CheckOpts()
+	{
+	}
+
+# boolean PreCheck()
+sub PreCheck()
+	{
+	return 1; # Nothing to check - check passed
+	}
+
+# boolean Run()
+sub Run()
+	{
+	return 1; # Nothing run - nothing failed
+	}
+
+# Convenience functions...
+
+# void CheckOpt()
+# Dies if option not defined, or is a list
+sub CheckOpt($)
+	{
+	my $self = shift;
+	my ($option) = @_;
+	my $options = $self->iOptions();
+
+	my $val = $options->Get($option);
+	if (!defined($val))
+		{
+		$options->Die("ERROR: Option '$option' not defined.");
+		}
+	elsif (ref($val))
+		{
+		$options->Die("ERROR: Option '$option' must not be a list.");
+		}
+	}
+
+# void CheckListOpt()
+# Dies if option is not a listref, or is not defined
+sub CheckListOpt($)
+	{
+	my $self = shift;
+	my ($option) = @_;
+	my $options = $self->iOptions();
+
+	my $val = $options->Get($option);
+	if (!defined($val))
+		{
+		$options->Die("ERROR: Option '$option' not defined.");
+		}
+	elsif (ref($val) ne "ARRAY")
+		{
+		$options->Die("ERROR: Option '$option' must be a list.");
+		}
+	}
+
+# void PreCheckOpt()
+# Returns false if option is not defined or is a list
+sub PreCheckOpt($)
+	{
+	my $self = shift;
+	my ($option) = @_;
+
+	my $val = $self->iOptions()->Get($option);
+	if ( (!defined($val)) || (ref($val)) )
+		{
+		return 0;
+		}
+	else
+		{
+		return 1;
+		}
+	}
+	
+# void PreCheckListOpt()
+# Returns false if option is not a listref, or is not defined
+sub PreCheckListOpt($)
+	{
+	my $self = shift;
+	my ($option) = @_;
+
+	my $val = $self->iOptions()->Get($option);
+	if ( (!defined($val)) || (ref($val) ne "ARRAY") )
+		{
+		return 0;
+		}
+	else
+		{
+		return 1;
+		}
+	}
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/CStageRunner.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,162 @@
+#!\bin\perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# CStageRunner
+# 
+#
+
+package CStageRunner;
+
+use strict;
+
+use FindBin;
+use lib $FindBin::Bin."\\stages";
+
+# CStageRunner New(listref aStageNames, CConfig aOptions) : constructor
+sub New($$)
+	{
+	my $proto = shift;
+	my ($aStageNames, $aOptions) = @_;
+
+	my $class = ref($proto) || $proto;
+
+	my $self = {};
+	bless($self, $class);
+
+	if (!defined($aOptions))
+		{
+		$aOptions->Die("ERROR: CStageRunner takes an CConfig object as its second parameter.");
+		}
+
+	# Instantiate stages
+	$self->{iStages} = [];
+	my $stage;
+	my $okay = 1;
+
+  # Added scanlog compatibility
+  $aOptions->PhaseStart("Initialising CStageRunner");
+	foreach my $stageName (@$aStageNames)
+		{
+		my $found = 0;
+		foreach my $path (@INC)
+			{
+			if (-e $path."\\$stageName.pm")
+				{
+				$found = 1;
+				}
+			}
+			
+		if (!$found)
+			{
+			$aOptions->Error("Stage $stageName does not exist.");
+			$okay = 0;
+			}
+		elsif (eval("require $stageName"))
+			{
+			$stage = New $stageName($aOptions);
+
+			if (!defined($stage))
+				{
+				$aOptions->Error("Stage $stageName could not be started.");
+				$okay = 0;
+				}
+			else
+				{
+				push @{$self->{iStages}}, $stage;
+				}
+			}
+		else
+			{
+			$aOptions->Error("Stage $stageName could not be loaded:\n$@");
+			$okay = 0;
+			}
+		}
+
+	if (!$okay)
+		{
+		$aOptions->Die("");
+		}
+	else
+		{
+		$aOptions->Print("All stages loaded and options checked.");
+		}
+  # This flag triggers an error message if any stage produces errors
+  # but does not die. The flag is used to emit a warning, once only,
+  # that subsequent stages may be polluted buy the errors in previous stages.
+  $self->{iWarnOnStageEerror} = 1;
+	$self->iOptions($aOptions);
+  
+  # Scanlog compatibility, we ignore the return value as that is covered by $okay
+	$aOptions->PhaseEnd();
+  return $self;
+	}
+
+# Getters/setters
+sub iOptions()
+	{
+	my $self = shift;
+	if (@_) { $self->{iOPTIONS} = shift; }
+	return $self->{iOPTIONS};
+	}
+
+# boolean Run()
+sub Run()
+	{
+	my $self = shift;
+
+	my $okay = 1;
+  my $options;
+	
+	foreach my $stage (@{$self->{iStages}})
+		{
+    $options = $self->iOptions();
+    $options->PhaseStart($stage->iName());
+		if ($stage->PreCheck())
+			{
+			$options->Status("Running ".$stage->iName());
+			if ($stage->Run())
+				{
+        # Passed stage i.e. no fatal errors but check for 'normal' errors
+        my $errors = $options->GetErrorCount();
+        # Check if the stage had errors and write a precautionary
+        # error message if this has not been done so already
+        if ($errors > 0 && $self->{iWarnOnStageEerror} != 0)
+          {
+          $options->Error("Stage errors mean that subsequent stages might be unreliable.");
+          # It is a write once error message so clear the internal flag
+          $self->{iWarnOnStageEerror} = 0;
+          }
+				}
+      else
+        {
+        # Stage signalled a fatal error by returning non-zero so bail out
+        $options->Error("Fatal error received from ".$stage->iName()."::Run().");
+        $options->PhaseEnd();
+				$okay = 0;
+        last;
+        }
+			}
+		else
+			{
+      $options->Error("Stage failed PreCheck()");
+			$okay = 0;
+      $options->PhaseEnd();
+      last;
+			}
+    $options->PhaseEnd();
+		}
+		
+	return ($okay == 1);
+	}
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/MakeCBR.pl	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,153 @@
+#!/bin/perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Automated Component Based Releasing system front end
+# 
+#
+
+use strict;
+use Getopt::Long;
+use Cwd;
+use FindBin;
+
+use lib $FindBin::Bin;
+
+use CStageRunner;
+use CConfig;
+
+my @GTTechViewPrepareStages=("CCreateDrive","CGetPrevRel","CCheckMrpUpdates","CDelta", "CCheckEnv");
+my @GTTechViewReleaseStages=("CReleaseEnv","CStoreMrpState");
+my @GTstages=("CRemoveNonGT", "CInstallGTConflicts", "CPrepGTRelease", "CCheckEnv", "CReleaseEnv");
+my @finishStages=("CCleanUp");
+
+my $help = q/
+  makecbr.pl -b build_id -c config_file -v release_version [-j max_processes]
+    [-i int_version] [-p prev_version] [-l log_file] [-d debug_output] [-repair]
+   * where:
+  build_id is a unique build identifier
+  config_file is the filename of the configuration file
+  release_version is the version to be assigned to any updated components
+   * Optionally:
+  max_processes is the maximum number of parallel processes allowed
+  int_version is the internal version string to use for publishing components
+  prev_version is the version to assume as the previous baseline, to override
+    automatic determination
+  log_file is a file to log all output to
+  debug_output is a file to write intermediate stage output to in case of an
+    error
+   * -repair assumes a failure in GT_TechView and resumes from the MakeEnv step.
+/;
+
+my($build_id, $config_file, $log_file, $parallel, $release_ver, $debug_file, $help_flag, $prev_ver, $repair, $int_ver);
+
+GetOptions (
+   'b=s'    => \$build_id,
+   'c=s'    => \$config_file,
+   'l=s'    => \$log_file,
+   'v=s'    => \$release_ver,
+   'p=s'    => \$prev_ver,
+   'd=s'    => \$debug_file,
+   '+h'     => \$help_flag,
+   'repair' => \$repair,
+   'i=s'    => \$int_ver,
+   'j=i'    => \$parallel
+);
+
+if (defined($help_flag))
+	{
+	print $help;
+	exit;
+	}
+
+if (!defined($config_file))
+	{
+	die "A configuration file must be specified (using the -c option)\n";
+	}
+
+if (!defined($parallel)) {
+   $parallel = 0;
+}
+
+my $options = New CConfig();
+if (defined($log_file))
+	{
+	$options->SetLog($log_file) or exit;
+	}
+
+if (defined($debug_file))
+	{
+	# Ensure path isn't relative
+
+	if ($debug_file !~ /^[A-Za-z]:/)
+		{
+		if ($debug_file =~ /^[^\/\\]/)
+			{
+			# Path is relative
+			$debug_file = getcwd()."\\".$debug_file;
+			}
+		else
+			{
+			# Path is only missing drive letter
+			my $drive = getcwd();
+			$drive =~ s/^([A-Za-z]):.*$/$1/ or $options->Die("ERROR: getcwd() did not return drive letter, rather '$drive'");
+			$debug_file = $drive.":".$debug_file;
+			}
+		}
+	$debug_file =~ s/\//\\/g; # Make all slashes backslashes
+	}
+
+$options->Reload($config_file) or $options->Die("ERROR: Couldn't load config file '$config_file'");
+
+$options->Set("Build identifier",$build_id) or $options->Die("ERROR: Build identifier '$build_id' is invalid");
+$options->Set("Release version",$release_ver) or $options->Die("ERROR: Release version '$release_ver' is invalid");
+
+if (defined($int_ver))
+    {
+    $options->Set("Internal version",$int_ver) or $options->Die("ERROR: Internal version '$int_ver' is invalid");
+    }
+else
+    {
+    $options->Set("Internal version",$release_ver);
+    }
+
+if (defined($prev_ver))
+	{
+	$options->Set("Last baseline version",$prev_ver) or $options->Die("ERROR: Previous baseline version '$prev_ver' is invalid");
+	}
+
+if (defined($parallel)) {
+   $options->Set('Max Parallel Tasks', $parallel) or $options->Die("ERROR: Max parallel processes '$parallel' is invalid");
+}
+
+my @stages = ();
+if (defined($repair))
+	{
+	push @stages, "CConfigureRepair";
+	}
+else
+	{
+	push @stages, @GTTechViewPrepareStages;
+	}
+    
+push @stages, (@GTTechViewReleaseStages, @GTstages, @finishStages);
+
+my $stageRunner = New CStageRunner(\@stages, $options);
+if (!$stageRunner->Run())
+	{
+	if (defined($debug_file))
+		{
+		$options->Save($debug_file);
+		}
+	$options->Die("");
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/Parallel/ForkManager.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,422 @@
+# Copyright (c) 2000 Szab? Balázs (dLux)
+#
+# All right reserved. This program is free software; you can redistribute it 
+# and/or modify it under the same terms as Perl itself.
+#
+
+=head1 NAME
+
+Parallel::ForkManager - A simple parallel processing fork manager
+
+=head1 SYNOPSIS
+
+  use Parallel::ForkManager;
+
+  $pm = new Parallel::ForkManager($MAX_PROCESSES);
+
+  foreach $data (@all_data) {
+    # Forks and returns the pid for the child:
+    my $pid = $pm->start and next; 
+
+    ... do some work with $data in the child process ...
+
+    $pm->finish; # Terminates the child process
+  }
+
+=head1 DESCRIPTION
+
+This module is intended for use in operations that can be done in parallel 
+where the number of processes to be forked off should be limited. Typical 
+use is a downloader which will be retrieving hundreds/thousands of files.
+
+The code for a downloader would look something like this:
+
+  use LWP::Simple;
+  use Parallel::ForkManager;
+
+  ...
+  
+  @links=( 
+    ["http://www.foo.bar/rulez.data","rulez_data.txt"], 
+    ["http://new.host/more_data.doc","more_data.doc"],
+    ...
+  );
+
+  ...
+
+  # Max 30 processes for parallel download
+  my $pm = new Parallel::ForkManager(30); 
+
+  foreach my $linkarray (@links) {
+    $pm->start and next; # do the fork
+
+    my ($link,$fn) = @$linkarray;
+    warn "Cannot get $fn from $link"
+      if getstore($link,$fn) != RC_OK;
+
+    $pm->finish; # do the exit in the child process
+  }
+  $pm->wait_all_children;
+
+First you need to instantiate the ForkManager with the "new" constructor. 
+You must specify the maximum number of processes to be created. If you 
+specify 0, then NO fork will be done; this is good for debugging purposes.
+
+Next, use $pm->start to do the fork. $pm returns 0 for the child process, 
+and child pid for the parent process (see also L<perlfunc(1p)/fork()>). 
+The "and next" skips the internal loop in the parent process. NOTE: 
+$pm->start dies if the fork fails.
+
+$pm->finish terminates the child process (assuming a fork was done in the 
+"start").
+
+NOTE: You cannot use $pm->start if you are already in the child process. 
+If you want to manage another set of subprocesses in the child process, 
+you must instantiate another Parallel::ForkManager object!
+
+=head1 METHODS
+
+=over 5
+
+=item new $processes
+
+Instantiate a new Parallel::ForkManager object. You must specify the maximum 
+number of children to fork off. If you specify 0 (zero), then no children 
+will be forked. This is intended for debugging purposes.
+
+=item start [ $process_identifier ]
+
+This method does the fork. It returns the pid of the child process for 
+the parent, and 0 for the child process. If the $processes parameter 
+for the constructor is 0 then, assuming you're in the child process, 
+$pm->start simply returns 0.
+
+An optional $process_identifier can be provided to this method... It is used by 
+the "run_on_finish" callback (see CALLBACKS) for identifying the finished
+process.
+
+=item finish [ $exit_code ]
+
+Closes the child process by exiting and accepts an optional exit code 
+(default exit code is 0) which can be retrieved in the parent via callback. 
+If you use the program in debug mode ($processes == 0), this method doesn't 
+do anything.
+
+=item set_max_procs $processes
+
+Allows you to set a new maximum number of children to maintain. Returns 
+the previous setting.
+
+=item wait_all_children
+
+You can call this method to wait for all the processes which have been 
+forked. This is a blocking wait.
+
+=back
+
+=head1 CALLBACKS
+
+You can define callbacks in the code, which are called on events like starting 
+a process or upon finish.
+
+The callbacks can be defined with the following methods:
+
+=over 4
+
+=item run_on_finish $code [, $pid ]
+
+You can define a subroutine which is called when a child is terminated. It is
+called in the parent process.
+
+The paremeters of the $code are the following:
+
+  - pid of the process, which is terminated
+  - exit code of the program
+  - identification of the process (if provided in the "start" method)
+  - exit signal (0-127: signal name)
+  - core dump (1 if there was core dump at exit)
+
+=item run_on_start $code
+
+You can define a subroutine which is called when a child is started. It called
+after the successful startup of a child in the parent process.
+
+The parameters of the $code are the following:
+
+  - pid of the process which has been started
+  - identification of the process (if provided in the "start" method)
+
+=item run_on_wait $code, [$period]
+
+You can define a subroutine which is called when the child process needs to wait
+for the startup. If $period is not defined, then one call is done per
+child. If $period is defined, then $code is called periodically and the
+module waits for $period seconds betwen the two calls. Note, $period can be
+fractional number also. The exact "$period seconds" is not guarranteed,
+signals can shorten and the process scheduler can make it longer (on busy
+systems).
+
+The $code called in the "start" and the "wait_all_children" method also.
+
+No parameters are passed to the $code on the call.
+
+=back
+
+=head1 EXAMPLE
+
+=head2 Parallel get
+
+This small example can be used to get URLs in parallel.
+
+  use Parallel::ForkManager;
+  use LWP::Simple;
+  my $pm=new Parallel::ForkManager(10);
+  for my $link (@ARGV) {
+    $pm->start and next;
+    my ($fn)= $link =~ /^.*\/(.*?)$/;
+    if (!$fn) {
+      warn "Cannot determine filename from $fn\n";
+    } else {
+      $0.=" ".$fn;
+      print "Getting $fn from $link\n";
+      my $rc=getstore($link,$fn);
+      print "$link downloaded. response code: $rc\n";
+    };
+    $pm->finish;
+  };
+
+=head2 Callbacks
+
+Example of a program using callbacks to get child exit codes:
+
+  use strict;
+  use Parallel::ForkManager;
+
+  my $max_procs = 5;
+  my @names = qw( Fred Jim Lily Steve Jessica Bob Dave Christine Rico Sara );
+  # hash to resolve PID's back to child specific information
+
+  my $pm =  new Parallel::ForkManager($max_procs);
+
+  # Setup a callback for when a child finishes up so we can
+  # get it's exit code
+  $pm->run_on_finish(
+    sub { my ($pid, $exit_code, $ident) = @_;
+      print "** $ident just got out of the pool ".
+        "with PID $pid and exit code: $exit_code\n";
+    }
+  );
+
+  $pm->run_on_start(
+    sub { my ($pid,$ident)=@_;
+      print "** $ident started, pid: $pid\n";
+    }
+  );
+
+  $pm->run_on_wait(
+    sub {
+      print "** Have to wait for one children ...\n"
+    },
+    0.5
+  );
+
+  foreach my $child ( 0 .. $#names ) {
+    my $pid = $pm->start($names[$child]) and next;
+
+    # This code is the child process
+    print "This is $names[$child], Child number $child\n";
+    sleep ( 2 * $child );
+    print "$names[$child], Child $child is about to get out...\n";
+    sleep 1;
+    $pm->finish($child); # pass an exit code to finish
+  }
+
+  print "Waiting for Children...\n";
+  $pm->wait_all_children;
+  print "Everybody is out of the pool!\n";
+
+=head1 BUGS AND LIMITATIONS
+
+Do not use Parallel::ForkManager in an environment, where other child
+processes can affect the run of the main program, so using this module
+is not recommended in an environment where fork() / wait() is already used.
+
+If you want to use more than one copies of the Parallel::ForkManager, then
+you have to make sure that all children processes are terminated, before you
+use the second object in the main program.
+
+You are free to use a new copy of Parallel::ForkManager in the child
+processes, although I don't think it makes sense.
+
+=head1 COPYRIGHT
+
+Copyright (c) 2000 Szabó, Balázs (dLux)
+
+All right reserved. This program is free software; you can redistribute it 
+and/or modify it under the same terms as Perl itself.
+
+=head1 AUTHOR
+
+  dLux (Szabó, Balázs) <dlux@kapu.hu>
+
+=head1 CREDITS
+
+  Noah Robin <sitz@onastick.net> (documentation tweaks)
+  Chuck Hirstius <chirstius@megapathdsl.net> (callback exit status, example)
+  Grant Hopwood <hopwoodg@valero.com> (win32 port)
+  Mark Southern <mark_southern@merck.com> (bugfix)
+
+=cut
+
+package Parallel::ForkManager;
+use POSIX ":sys_wait_h";
+use strict;
+use vars qw($VERSION);
+$VERSION='0.7.5';
+
+sub new { my ($c,$processes)=@_;
+  my $h={
+    max_proc   => $processes,
+    processes  => {},
+    in_child   => 0,
+  };
+  return bless($h,ref($c)||$c);
+};
+
+sub start { my ($s,$identification)=@_;
+  die "Cannot start another process while you are in the child process"
+    if $s->{in_child};
+  while ($s->{max_proc} && ( keys %{ $s->{processes} } ) >= $s->{max_proc}) {
+    $s->on_wait;
+    $s->wait_one_child(defined $s->{on_wait_period} ? &WNOHANG : undef);
+  };
+  $s->wait_children;
+  if ($s->{max_proc}) {
+    my $pid=fork();
+    die "Cannot fork: $!" if !defined $pid;
+    if ($pid) {
+      $s->{processes}->{$pid}=$identification;
+      $s->on_start($pid,$identification);
+    } else {
+      $s->{in_child}=1 if !$pid;
+    }
+    return $pid;
+  } else {
+    $s->{processes}->{$$}=$identification;
+    $s->on_start($$,$identification);
+    return 0; # Simulating the child which returns 0
+  }
+}
+
+sub finish { my ($s, $x)=@_;
+  if ( $s->{in_child} ) {
+    exit ($x || 0);
+  }
+  if ($s->{max_proc} == 0) { # max_proc == 0
+    $s->on_finish($$, $x ,$s->{processes}->{$$}, 0, 0);
+    delete $s->{processes}->{$$};
+  }
+  return 0;
+}
+
+sub wait_children { my ($s)=@_;
+  return if !keys %{$s->{processes}};
+  my $kid;
+  do {
+    $kid = $s->wait_one_child(&WNOHANG);
+  } while $kid > 0 || $kid < -1; # AS 5.6/Win32 returns negative PIDs
+};
+
+*wait_childs=*wait_children; # compatibility
+
+sub wait_one_child { my ($s,$par)=@_;
+  my $kid;
+  while (1) {
+    $kid = $s->_waitpid(-1,$par||=0);
+    last if $kid == 0 || $kid == -1; # AS 5.6/Win32 returns negative PIDs
+    redo if !exists $s->{processes}->{$kid};
+    my $id = delete $s->{processes}->{$kid};
+    $s->on_finish( $kid, $? >> 8 , $id, $? & 0x7f, $? & 0x80 ? 1 : 0);
+    last;
+  }
+  $kid;
+};
+
+sub wait_all_children { my ($s)=@_;
+  while (keys %{ $s->{processes} }) {
+    $s->on_wait;
+    $s->wait_one_child(defined $s->{on_wait_period} ? &WNOHANG : undef);
+  };
+}
+
+*wait_all_childs=*wait_all_children; # compatibility;
+
+sub run_on_finish { my ($s,$code,$pid)=@_;
+  $s->{on_finish}->{$pid || 0}=$code;
+}
+
+sub on_finish { my ($s,$pid,@par)=@_;
+  my $code=$s->{on_finish}->{$pid} || $s->{on_finish}->{0} or return 0;
+  $code->($pid,@par); 
+};
+
+sub run_on_wait { my ($s,$code, $period)=@_;
+  $s->{on_wait}=$code;
+  $s->{on_wait_period} = $period;
+}
+
+sub on_wait { my ($s)=@_;
+  if(ref($s->{on_wait}) eq 'CODE') {
+    $s->{on_wait}->();
+    if (defined $s->{on_wait_period}) {
+        local $SIG{CHLD} = sub { } if ! defined $SIG{CHLD};
+        select undef, undef, undef, $s->{on_wait_period}
+    };
+  };
+};
+
+sub run_on_start { my ($s,$code)=@_;
+  $s->{on_start}=$code;
+}
+
+sub on_start { my ($s,@par)=@_;
+  $s->{on_start}->(@par) if ref($s->{on_start}) eq 'CODE';
+};
+
+sub set_max_procs { my ($s, $mp)=@_;
+  $s->{max_proc} = $mp;
+}
+
+# OS dependant code follows...
+
+sub _waitpid { # Call waitpid() in the standard Unix fashion.
+  return waitpid($_[1],$_[2]);
+}
+
+# On ActiveState Perl 5.6/Win32 build 625, waitpid(-1, &WNOHANG) always
+# blocks unless an actual PID other than -1 is given.
+sub _NT_waitpid { my ($s, $pid, $par) = @_;
+  if ($par == &WNOHANG) { # Need to nonblock on each of our PIDs in the pool.
+    my @pids = keys %{ $s->{processes} };
+    # Simulate -1 (no processes awaiting cleanup.)
+    return -1 unless scalar(@pids);
+    # Check each PID in the pool.
+    my $kid;
+    foreach $pid (@pids) {
+      $kid = waitpid($pid, $par);
+      return $kid if $kid != 0; # AS 5.6/Win32 returns negative PIDs.
+    }
+    return $kid;
+  } else { # Normal waitpid() call.
+    return waitpid($pid, $par);
+  }
+}
+
+{
+  local $^W = 0;
+  if ($^O eq 'NT' or $^O eq 'MSWin32') {
+    *_waitpid = \&_NT_waitpid;
+  }
+}
+
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/Win32/Pipe.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,414 @@
+package Win32::Pipe;
+
+$VERSION = '0.024';
+
+# Win32::Pipe.pm
+#       +==========================================================+
+#       |                                                          |
+#       |                     PIPE.PM package                      |
+#       |                     ---------------                      |
+#       |                    Release v96.05.11                     |
+#       |                                                          |
+#       |    Copyright (c) 1996 Dave Roth. All rights reserved.    |
+#       |   This program is free software; you can redistribute    |
+#       | it and/or modify it under the same terms as Perl itself. |
+#       |                                                          |
+#       +==========================================================+
+#
+#
+#	Use under GNU General Public License or Larry Wall's "Artistic License"
+#
+#	Check the README.TXT file that comes with this package for details about
+#	it's history.
+#
+
+require Exporter;
+require DynaLoader;
+
+@ISA= qw( Exporter DynaLoader );
+    # Items to export into callers namespace by default. Note: do not export
+    # names by default without a very good reason. Use EXPORT_OK instead.
+    # Do not simply export all your public functions/methods/constants.
+@EXPORT = qw();
+
+$ErrorNum = 0;
+$ErrorText = "";
+
+sub new
+{
+    my ($self, $Pipe);
+    my ($Type, $Name, $Time) = @_;
+
+    if (! $Time){
+        $Time = DEFAULT_WAIT_TIME();
+    }
+    $Pipe = PipeCreate($Name, $Time);
+    if ($Pipe){
+        $self = bless {};
+        $self->{'Pipe'} = $Pipe;
+    }else{
+        ($ErrorNum, $ErrorText) = PipeError();
+        return undef;
+    }
+    $self;
+}
+
+sub Write{
+    my($self, $Data) = @_;
+    $Data = PipeWrite($self->{'Pipe'}, $Data);
+    return $Data;
+}
+
+sub Read{
+    my($self) = @_;
+    my($Data);
+    $Data = PipeRead($self->{'Pipe'});
+    return $Data;
+}
+
+sub Error{
+    my($self) = @_;
+    my($MyError, $MyErrorText, $Temp);
+    if (! ref($self)){
+        undef $Temp;
+    }else{
+        $Temp = $self->{'Pipe'};
+    }
+    ($MyError, $MyErrorText) = PipeError($Temp);
+    return wantarray? ($MyError, $MyErrorText):"[$MyError] \"$MyErrorText\"";
+}
+
+
+sub Close{
+    my ($self) = shift;
+    PipeClose($self->{'Pipe'});
+    $self->{'Pipe'} = 0;
+}
+
+sub Connect{
+    my ($self) = @_;
+    my ($Result);
+    $Result = PipeConnect($self->{'Pipe'});
+    return $Result;
+}
+
+sub Disconnect{
+    my ($self, $iPurge) = @_;
+    my ($Result);
+    if (! $iPurge){
+        $iPurge = 1;
+    }
+    $Result = PipeDisconnect($self->{'Pipe'}, $iPurge);
+    return $Result;
+}
+
+sub BufferSize{
+    my($self) = @_;
+    my($Result) =  PipeBufferSize($self->{'Pipe'});
+    return $Result;
+}
+
+sub ResizeBuffer{
+    my($self, $Size) = @_;
+    my($Result) = PipeResizeBuffer($self->{'Pipe'}, $Size);
+    return $Result;
+}
+
+
+####
+#   Auto-Kill an instance of this module
+####
+sub DESTROY
+{
+    my ($self) = shift;
+    Close($self);
+}
+
+
+sub Credit{
+    my($Name, $Version, $Date, $Author, $CompileDate, $CompileTime, $Credits) = Win32::Pipe::Info();
+    my($Out, $iWidth);
+    $iWidth = 60;
+    $Out .=  "\n";
+    $Out .=  "  +". "=" x ($iWidth). "+\n";
+    $Out .=  "  |". Center("", $iWidth). "|\n";
+    $Out .=  "  |" . Center("", $iWidth). "|\n";
+    $Out .=  "  |". Center("$Name", $iWidth). "|\n";
+    $Out .=  "  |". Center("-" x length("$Name"), $iWidth). "|\n";
+    $Out .=  "  |". Center("", $iWidth). "|\n";
+
+    $Out .=  "  |". Center("Version $Version ($Date)", $iWidth). "|\n";
+    $Out .=  "  |". Center("by $Author", $iWidth). "|\n";
+    $Out .=  "  |". Center("Compiled on $CompileDate at $CompileTime.", $iWidth). "|\n";
+    $Out .=  "  |". Center("", $iWidth). "|\n";
+    $Out .=  "  |". Center("Credits:", $iWidth). "|\n";
+    $Out .=  "  |". Center(("-" x length("Credits:")), $iWidth). "|\n";
+    foreach $Temp (split("\n", $Credits)){
+        $Out .=  "  |". Center("$Temp", $iWidth). "|\n";
+    }
+    $Out .=  "  |". Center("", $iWidth). "|\n";
+    $Out .=  "  +". "=" x ($iWidth). "+\n";
+    return $Out;
+}
+
+sub Center{
+    local($Temp, $Width) = @_;
+    local($Len) = ($Width - length($Temp)) / 2;
+    return " " x int($Len) . $Temp . " " x (int($Len) + (($Len != int($Len))? 1:0));
+}
+
+# ------------------ A U T O L O A D   F U N C T I O N ---------------------
+
+sub AUTOLOAD {
+    # This AUTOLOAD is used to 'autoload' constants from the constant()
+    # XS function.  If a constant is not found then control is passed
+    # to the AUTOLOAD in AutoLoader.
+
+    my($constname);
+    ($constname = $AUTOLOAD) =~ s/.*:://;
+    #reset $! to zero to reset any current errors.
+    local $! = 0;
+    $val = constant($constname, @_ ? $_[0] : 0);
+
+    if ($! != 0) {
+    if ($! =~ /Invalid/) {
+        $AutoLoader::AUTOLOAD = $AUTOLOAD;
+        goto &AutoLoader::AUTOLOAD;
+    }
+    else {
+
+            # Added by JOC 06-APR-96
+            # $pack = 0;
+        $pack = 0;
+        ($pack,$file,$line) = caller;
+            print "Your vendor has not defined Win32::Pipe macro $constname, used in $file at line $line.";
+    }
+    }
+    eval "sub $AUTOLOAD { $val }";
+    goto &$AUTOLOAD;
+}
+
+bootstrap Win32::Pipe;
+
+1;
+__END__
+
+=head1 NAME
+
+Win32::Pipe - Win32 Named Pipe
+
+=head1 SYNOPSIS
+
+To use this extension, follow these basic steps. First, you need to
+'use' the pipe extension:
+
+    use Win32::Pipe;
+
+Then you need to create a server side of a named pipe:
+
+    $Pipe = new Win32::Pipe("My Pipe Name");
+
+or if you are going to connect to pipe that has already been created:
+
+    $Pipe = new Win32::Pipe("\\\\server\\pipe\\My Pipe Name");
+
+    NOTE: The "\\\\server\\pipe\\" is necessary when connecting
+          to an existing pipe! If you are accessing the same
+          machine you could use "\\\\.\\pipe\\" but either way
+          works fine.
+
+You should check to see if C<$Pipe> is indeed defined otherwise there
+has been an error.
+
+Whichever end is the server, it must now wait for a connection...
+
+    $Result = $Pipe->Connect();
+
+    NOTE: The client end does not do this! When the client creates
+          the pipe it has already connected!
+
+Now you can read and write data from either end of the pipe:
+
+    $Data = $Pipe->Read();
+
+    $Result = $Pipe->Write("Howdy! This is cool!");
+
+When the server is finished it must disconnect:
+
+    $Pipe->Disconnect();
+
+Now the server could C<Connect> again (and wait for another client) or
+it could destroy the named pipe...
+
+    $Data->Close();
+
+The client should C<Close> in order to properly end the session.
+
+=head1 DESCRIPTION
+
+=head2 General Use
+
+This extension gives Win32 Perl the ability to use Named Pipes. Why?
+Well considering that Win32 Perl does not (yet) have the ability to
+C<fork> I could not see what good the C<pipe(X,Y)> was. Besides, where
+I am as an admin I must have several perl daemons running on several
+NT Servers. It dawned on me one day that if I could pipe all these
+daemons' output to my workstation (across the net) then it would be
+much easier to monitor. This was the impetus for an extension using
+Named Pipes. I think that it is kinda cool. :)
+
+=head2 Benefits
+
+And what are the benefits of this module?
+
+=over
+
+=item *
+
+You may create as many named pipes as you want (uh, well, as many as
+your resources will allow).
+
+=item *
+
+Currently there is a limit of 256 instances of a named pipe (once a
+pipe is created you can have 256 client/server connections to that
+name).
+
+=item *
+
+The default buffer size is 512 bytes; this can be altered by the
+C<ResizeBuffer> method.
+
+=item *
+
+All named pipes are byte streams. There is currently no way to alter a
+pipe to be message based.
+
+=item *
+
+Other things that I cannot think of right now... :)
+
+=back
+
+=head1 CONSTRUCTOR
+
+=over
+
+=item new ( NAME )
+
+Creates a named pipe if used in server context or a connection to the
+specified named pipe if used in client context. Client context is
+determined by prepending $Name with "\\\\".
+
+Returns I<true> on success, I<false> on failure.
+
+=back
+
+=head1 METHODS
+
+=over
+
+=item BufferSize ()
+
+Returns the size of the instance of the buffer of the named pipe.
+
+=item Connect ()
+
+Tells the named pipe to create an instance of the named pipe and wait
+until a client connects. Returns I<true> on success, I<false> on
+failure.
+
+=item Close ()
+
+Closes the named pipe.
+
+=item Disconnect ()
+
+Disconnects (and destroys) the instance of the named pipe from the
+client. Returns I<true> on success, I<false> on failure.
+
+=item Error ()
+
+Returns the last error messages pertaining to the named pipe. If used
+in context to the package. Returns a list containing C<ERROR_NUMBER>
+and C<ERROR_TEXT>.
+
+=item Read ()
+
+Reads from the named pipe. Returns data read from the pipe on success,
+undef on failure.
+
+=item ResizeBuffer ( SIZE )
+
+Sets the size of the buffer of the instance of the named pipe to
+C<SIZE>. Returns the size of the buffer on success, I<false> on
+failure.
+
+=item Write ( DATA )
+
+Writes C<DATA> to the named pipe. Returns I<true> on success, I<false>
+on failure.
+
+=back
+
+=head1 LIMITATIONS
+
+What known problems does this thing have?
+
+=over
+
+=item *
+
+If someone is waiting on a C<Read> and the other end terminates then
+you will wait for one B<REALLY> long time! (If anyone has an idea on
+how I can detect the termination of the other end let me know!)
+
+=item *
+
+All pipes are blocking. I am considering using threads and callbacks
+into Perl to perform async IO but this may be too much for my time
+stress. ;)
+
+=item *
+
+There is no security placed on these pipes.
+
+=item *
+
+This module has neither been optimized for speed nor optimized for
+memory consumption. This may run into memory bloat.
+
+=back
+
+=head1 INSTALLATION NOTES
+
+If you wish to use this module with a build of Perl other than
+ActivePerl, you may wish to fetch the source distribution for this
+module. The source is included as part of the C<libwin32> bundle,
+which you can find in any CPAN mirror here:
+
+  modules/by-authors/Gurusamy_Sarathy/libwin32-0.151.tar.gz
+
+The source distribution also contains a pair of sample client/server
+test scripts. For the latest information on this module, consult the
+following web site:
+
+  http://www.roth.net/perl
+
+=head1 AUTHOR
+
+Dave Roth <rothd@roth.net>
+
+=head1 DISCLAIMER
+
+I do not guarantee B<ANYTHING> with this package. If you use it you
+are doing so B<AT YOUR OWN RISK>! I may or may not support this
+depending on my time schedule.
+
+=head1 COPYRIGHT
+
+Copyright (c) 1996 Dave Roth. All rights reserved.
+This program is free software; you can redistribute
+it and/or modify it under the same terms as Perl itself.
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/doc/DISTRIBUTION.POLICY	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2 @@
+Category T
+OSD:	Reference/Test	Tools
Binary file releasing/makecbr/doc/SGL.PR0080.150_Rev1.4_Automatic_Component_Based_Releasing_Design_Spec.doc has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/files/release.src	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,21 @@
+NOTESRC_RELEASER
+Productisation (kits.notify@symbian.com)
+
+NOTESRC_RELEASE_REASON
+New release based on build %build identifier%
+
+NOTESRC_GENERAL_COMMENTS
+Built automatically from an release build, not via an OCK or CustKit.
+See Appendix_to_Release_Notes.rtf for details on prohibited export or use.
+
+NOTESRC_KNOWN_DEVIATIONS
+See General Comments above.
+
+NOTESRC_BUGS_FIXED
+See General Comments above.
+
+NOTESRC_BUGS_REMAINING
+See General Comments above.
+
+NOTESRC_OTHER_CHANGES
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/group/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,50 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// 
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+// 
+// Contributors:
+// 
+// Description:
+// 
+//
+
+PRJ_PLATFORMS
+
+PRJ_EXPORTS
+
+../CBROutputFile.xml							/tools/makecbr/CBROutputFile.xml
+../CConfig.pm											/tools/makecbr/CConfig.pm
+../COutputHandler.pm							/tools/makecbr/COutputHandler.pm
+../CProcessStage.pm								/tools/makecbr/CProcessStage.pm
+../CStageRunner.pm								/tools/makecbr/CStageRunner.pm
+../MakeCBR.pl											/tools/makecbr/MakeCBR.pl
+../Win32/Pipe.pm									/tools/makecbr/Win32/Pipe.pm
+../test/CExampleStage.pm					/tools/makecbr/test/CExampleStage.pm
+../test/CTestScore.pm							/tools/makecbr/test/CTestScore.pm
+../test/runtests.pl								/tools/makecbr/test/runtests.pl
+../test/unit_CConfig.pm						/tools/makecbr/test/unit_CConfig.pm
+../test/unit_CProcessStage.pm			/tools/makecbr/test/unit_CProcessStage.pm
+../test/unit_CStageRunner.pm			/tools/makecbr/test/unit_CStageRunner.pm
+../test/unit_stage_CDelta.pm			/tools/makecbr/test/unit_stage_CDelta.pm
+../stages/CCheckEnv.pm						/tools/makecbr/stages/CCheckEnv.pm
+../stages/CCheckMrpUpdates.pm			/tools/makecbr/stages/CCheckMrpUpdates.pm
+../stages/CCleanUp.pm							/tools/makecbr/stages/CCleanUp.pm
+../stages/CConfigureRepair.pm			/tools/makecbr/stages/CConfigureRepair.pm
+../stages/CCreateDrive.pm					/tools/makecbr/stages/CCreateDrive.pm
+../stages/CDelta.pm								/tools/makecbr/stages/CDelta.pm
+../stages/CGetPrevRel.pm					/tools/makecbr/stages/CGetPrevRel.pm
+../stages/CInstallGTConflicts.pm	/tools/makecbr/stages/CInstallGTConflicts.pm
+../stages/CPrepGTRelease.pm				/tools/makecbr/stages/CPrepGTRelease.pm
+../stages/CReleaseEnv.pm					/tools/makecbr/stages/CReleaseEnv.pm
+../stages/CRemoveNonGT.pm					/tools/makecbr/stages/CRemoveNonGT.pm
+../stages/CStoreMrpState.pm				/tools/makecbr/stages/CStoreMrpState.pm
+../stages/CBRRepair/cbrfix.pm			/tools/makecbr/stages/CBRRepair/cbrfix.pm
+../stages/CBRRepair/CBRPatch.pm		/tools/makecbr/stages/CBRRepair/CBRPatch.pm
+../stages/CBRRepair/cbrproblem.pm	/tools/makecbr/CBRRepair/cbrproblem.pm
+../Parallel/ForkManager.pm				/tools/makecbr/Parallel/ForkManager.pm
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/group/makecbr.mrp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+
+component dev_build_releasing_makecbr
+
+source \src\tools\build\releasing\makecbr
+
+ipr T
+
+exports \src\tools\build\releasing\makecbr\group
+
+notes_source \src\tools\build\releasing\makecbr\files\release.src
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/stages/CBRRepair/CBRPatch.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,547 @@
+#!\bin\perl
+# Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# CBRPatch
+# Contains code to patch a CBR to hopefully allow a CBR to be published
+# but this version appended with '_PATCHED' (or whatever you choose) for the
+# bad components.
+# 
+#
+
+package CBRPatch;
+use strict;
+use File::Basename;
+use File::Path;
+
+use CBRFix;
+use CBRProblem;
+
+#
+# new
+#
+# Create a new CBRPatch object.
+#
+sub new
+    {
+    my($arg, $options, $inidat, $envdb, $version, $iversion, $patcharea,
+       $unrescomp, $patchver_suffix, $attempts ) = @_;
+    my $class = ref($arg) ? ref($arg) : $arg;
+
+    my $self = {  
+                     options => $options,
+                      inidat => $inidat,
+                       envdb => $envdb,
+                     version => $version,
+                    iversion => $iversion,
+                   patcharea => $patcharea,
+                   unrescomp => $unrescomp,
+             patchver_suffix => $patchver_suffix,
+                    attempts => $attempts,
+
+                 cbrproblems => undef,
+                ncbrproblems => undef,
+                    cbrfixes => undef,
+               envinfooutput => undef,
+                 baseversion => undef,
+              };
+
+    bless $self, $class;
+
+    return $self;
+    }
+
+sub IniData
+    {
+    my $self = shift;
+    my $newinidat = shift;
+    $self->{inidat} = $newinidat if( defined($newinidat) );
+    return $self->{inidat} if( defined($self->{inidat}) );
+    $self->{inidat} = IniData->New();
+    return $self->{inidat};
+    }
+sub EnvDb
+    {
+    my $self = shift;
+    my $newenvdb = shift;
+    $self->{envdb} = $newenvdb if( defined($newenvdb) );
+    return $self->{envdb} if( defined($self->{envdb}) );
+    $self->{envdb} = EnvDb->Open($self->IniData);
+    return $self->{envdb};
+    }
+sub Version
+    {
+    my $self = shift;
+    my $newversion = shift;
+    $self->{version} = $newversion if( defined($newversion) );
+    return $self->{version} if( defined($self->{version}) );
+    $self->{baseversion} = $self->EnvDb->Version("gt_techview_baseline")
+        unless(defined($self->{baseversion}));
+    $self->{version} = $self->{baseversion} .  $self->PatchVerSuffix;
+    return $self->{version};
+    }
+sub Iversion
+    {
+    my $self = shift;
+    my $newiversion = shift;
+    $self->{iversion} = $newiversion if( defined($newiversion) );
+    return $self->{iversion} if( defined($self->{iversion}) );
+    $self->{iversion} = $self->EnvDb->InternalVersion("gt_techview_baseline") .
+                            $self->PatchVerSuffix;
+    return $self->{iversion};
+    }
+sub PatchArea
+    {
+    my $self = shift;
+    my $newpatcharea = shift;
+    $self->{patcharea} = lc($newpatcharea) if( defined($newpatcharea) );
+    $self->{patcharea} = "\\component_defs\\patches"
+                                 unless( defined($self->{patcharea}) );
+    File::Path::mkpath($self->{patcharea}) unless( -d $self->{patcharea} );
+    my $dpol = $self->{patcharea} . "/distribution.policy";
+    unless( -f $dpol )
+        {
+        open DP, "> $dpol";
+        print DP "Category E\nOSD:	Test/Reference	Tools\n";
+        close DP;
+        }
+    return $self->{patcharea};
+    }
+sub UnresComp
+    {
+    my $self = shift;
+    my $newunrescomp = shift;
+    $self->{unrescomp} = $newunrescomp if( defined($newunrescomp) );
+    return $self->{unrescomp} if( defined($self->{unrescomp}) );
+    $self->{unrescomp} = "unresolved";
+    return $self->{unrescomp};
+    }
+sub PatchVerSuffix
+    {
+    my $self = shift;
+    my $newpvs = shift;
+    $self->{patchver_suffix} = $newpvs if( defined($newpvs) );
+    return $self->{patchver_suffix} if( defined($self->{patchver_suffix}) );
+    $self->{patchver_suffix} = "_PATCHED";
+    return $self->{patchver_suffix};
+    }
+sub Attempts
+    {
+    my $self = shift;
+    my $newattempts = shift;
+    $self->{attempts} = $newattempts if( defined($newattempts) );
+    return $self->{attempts} if( defined($self->{attempts}) );
+    $self->{attempts} = 3;
+    return $self->{attempts};
+    }
+
+#
+# Runs envinfo if there is an argument or if it hasn't been run inside
+# this object before.
+# Always uses the '-ffv' options. This is fixed because other code depends
+# on the format of the output. Returns a reference to an array containing
+# the output.
+#
+sub EnvinfoOutput
+    {
+    my $self = shift;
+    my $arg = shift;
+    return $self->{envinfooutput}
+          if( !defined($arg) && defined($self->{envinfooutput}) );
+
+    $self->Print("INFO: Running 'envinfo -ffv'....\n");
+    my @arr;
+    unless(open ENVINFO, "envinfo -ffv 2>&1 |")
+        {
+        # Don't to a $self->Error here, CCheckEnv knows what to do with this..
+        push @arr, "ERROR: Failed to run envinfo.\n";
+        return \@arr;
+        }
+    @arr = <ENVINFO>;
+    $self->{envinfooutput} = \@arr;
+
+    undef($self->{cbrproblems}); # We've rerun envinfo, so any old results
+    undef($self->{cbrfixes});    # here are garbage.
+    return $self->{envinfooutput};
+    }
+sub ProvideEnvinfoOutput
+    {
+    my $self = shift;
+    my $arg = shift;                # MUST be a reference to an array!
+    $self->{envinfooutput} = $arg;
+    undef($self->{cbrproblems}); # New envinfo data, so any old results
+    undef($self->{cbrfixes});    # here are garbage.
+    return $self->{envinfooutput};
+    }
+    
+#
+# CBRProblems
+#
+# Re-determines problems if there is an argument. Does
+# NOT trigger re-run of envinfo. If its been run before this would
+# just use the old data.
+#
+sub CBRProblems
+    {
+    my $self = shift;
+    my $arg = shift;
+    my @missinglist;
+    return $self->{cbrproblems}
+          if( !defined($arg) && defined($self->{cbrproblems}) );
+
+    # Rats. We have to work out what the problems are.
+    undef($self->{cbrproblems});
+    undef($self->{cbrfixes});
+    $self->{ncbrproblems} = 0;
+    for my $ev (@{$self->EnvinfoOutput})
+        {
+        #
+        # Check for files that have no known origin. We'll call
+        # these 'orphans'.
+        #
+        if( $ev =~ m/^(\S+): (.+) has unknown origin/)
+            {
+            my $path = $2;
+            my $prob = CBRProblem->new($path, "orphan");
+            push @{$self->{cbrproblems}}, $prob;
+            $self->{ncbrproblems}++;
+            $self->Error("CBRPatch: Orphan file '$path' detected.\n");
+            next;
+            }
+
+        #
+        # Now check for files that are multiply owned.
+        #
+        if( $ev =~ m/^(\S+):\s+(\S+) attempting to release (\S+) which has already been released by (\S+)/)
+            {
+            my $comp1 = $2;
+            my $path = $3;
+            my $comp2 = $4;
+            my %hsh = ( $comp1 => 1,   # Hash of components with problem.
+                        $comp2 => 1, );
+
+            my $prob = CBRProblem->new($path, "multi", \%hsh );
+            push @{$self->{cbrproblems}}, $prob;
+            $self->{ncbrproblems}++;
+            $self->{options}->Component($comp1);
+            $self->Error("CBRPatch: Multi-owned file '$path' detected, owned by $comp1 and $comp2.\n");
+            next;
+            }
+
+        #
+        # Now look for files that are absent, i.e referenced by
+        # component(s) but don't exist.
+        #
+        if( $ev =~ m/^(\S+)\s+(\S+)\s+(\S+)\s+missing$/ )  #
+            {
+            my $comp = $1;
+            my $path = $3;
+            my %hsh = ( $comp => 1 );
+            my $prob = CBRProblem->new($path, "absent", \%hsh );
+            push @{$self->{cbrproblems}}, $prob;
+            $self->{ncbrproblems}++;
+            $self->{options}->Component($comp);
+            $self->Error("CBRPatch: Absent file '$path' detected, owned by $comp. (missing)\n");
+            next;
+            }
+        if( $ev =~ m/^(\S+): Error: \"?(.*?)\"? does not exist/ )
+            {
+            my $comp = $1;
+            my $path = $2;
+            my %hsh = ( $comp => 1 );
+            my $prob = CBRProblem->new($path, "absent", \%hsh );
+            push @{$self->{cbrproblems}}, $prob;
+            $self->{ncbrproblems}++;
+            $self->{options}->Component($comp);
+            $self->Error("CBRPatch: Absent file '$path' detected, owned by $comp.(does not exist)\n");
+            next;
+            }
+        if( $ev =~ m/^Error: \"?(.*?)\"? does not exist/ )
+            {
+            # One of these ghastly cases where we get a bunch of 'does not
+            # exist' errors followed by a 'Multiple errors' warning. We must
+            # stack up the missing paths until we hit a 'multiple errors'.
+            my $path = $1;
+            push @missinglist, $path;
+            next;
+            }
+        if( $ev =~ m/^(\S+): Multiple errors \(first - Error: .*? does not exist\)/ )
+            {
+            # We've got the multiple errors line. Now create all of the problem
+            # objects for this component.
+            my $comp = $1;
+            for my $path (@missinglist)
+                {
+                my %hsh = ( $comp => 1 );
+                my $prob = CBRProblem->new($path, "absent", \%hsh );
+                push @{$self->{cbrproblems}}, $prob;
+                $self->{ncbrproblems}++;
+                }
+            $self->{options}->Component($comp);    
+            $self->Error("CBRPatch: Multiple files (" . scalar(@missinglist) . ") owned by $comp do not exist.\n");
+            @missinglist = ();
+            next;
+            }
+
+        #
+        # Last, check for failures where a component is dirty for some other
+        # reason. This will just trigger a preprel on this component, nothing
+        # more.
+        #
+        if( $ev =~ m/^(\S+)\s+(\S+)\s+(.+)\s+failed\scheck$/ )
+            {
+            my $comp1 = $1;
+            my $ver = $2;
+            my $path = $3;
+            my %hsh = ( $comp1 => 1 );  # Hash of components with problem.
+            $self->{options}->Component($comp1);
+            $self->{options}->Print($ev);
+            my $prob = CBRProblem->new($path, "dirty", \%hsh );
+            push @{$self->{cbrproblems}}, $prob;
+            $self->{ncbrproblems}++;
+            next;
+            }
+
+        }
+
+    return $self->{cbrproblems}
+    }
+
+#
+# CBRFixes
+#
+# Works out what fixes are required (and places them in the internal
+# array 'cbrfixes') to fix the problems in the internal array 'cbrproblems'.
+# This uses the accessor 'CBRProblems', so this can indirectly trigger
+# a run of the CBRProblems code, which itself can trigger a run of
+# envinfo.
+#
+# Currently self->{cbrfixes} is a reference to an array. It occurs to
+# me that if I made this a reference to a hash with keys being component
+# names, and content being arrays of cbrfix's some processing could be simpler.
+#
+sub CBRFixes
+    {
+    my $self = shift;
+    my $arg = shift;
+
+    # If no argument is passed and the fixes have already been worked
+    # out, just return them.
+    return($self->{cbrfixes}) if( defined($self->{cbrfixes}) &&
+                                  !defined($arg) );
+
+    my $probref = $self->CBRProblems; # Get the list of problems.
+    if( $self->{ncbrproblems} == 0 )
+        {
+        $self->Print("INFO: There are no detected problems in the CBR.\n");
+        undef($self->{cbrfixes});
+        return $self->{cbrfixes};
+        }
+    #
+    # There are some problems. 
+    # For each problem, generate the fixes and stick them in our
+    # array of fixes.
+    #
+    for my $cbrprob (@$probref)
+        {
+        my @thesefixes = @{$cbrprob->GetFixes($self->IniData,
+                                              $self->EnvDb,
+                                              $self->PatchArea,
+                                              $self->UnresComp)};
+        push @{$self->{cbrfixes}}, @thesefixes;
+        }
+    # If there are any fixes then we will also need to preprel the baseline.
+    # The baseline name should probably not be hardwired, but this was a late
+    # change.
+    if($self->{cbrfixes})
+        {
+        my $baselinefix = CBRFix->new( "gt_techview_baseline", undef,
+                                        undef, undef );
+        push @{$self->{cbrfixes}}, $baselinefix;
+        }
+
+    
+    return $self->{cbrfixes};
+    }
+
+#
+# ImplementFixes
+#
+# Get whatever fixes are required and implement them, including the preprel.
+# Only do one iteration though. Re-run the envinfo/problem/fix generation
+# cycle when complete, 'cos we're going to need to know if there is more
+# trouble.
+#
+sub ImplementFixes
+    {
+    my $self = shift;
+
+    my %comps;
+    # Define the fixes that need doing.
+    my $fixes = $self->CBRFixes;
+    my $nfixes = scalar(@$fixes);
+    # Return immediately if there is nothing to fix.
+    return 0 unless($nfixes);
+
+    # Make sure that no old copies of mrp files are lying around in the
+    # patcharea. Basically this deletes ANYTHING that isn't an mrp file
+    # owned by a component in the current environment. Too brutal?
+    $self->CleanPatchArea;
+    
+    $self->Print("REMARK: There are " . scalar(@$fixes) . " fixes.\n");
+    for my $fix (@$fixes)
+        {
+        $self->Print("REMARK: Patching component '" . $fix->Component . "'\n")
+            unless( defined($comps{$fix->Component}) );
+        $fix->WriteFix;
+
+        # Only preprel the component if it hasn't been preprel'd to the
+        # location this fix wants. NewMrpFile won't be defined if this is
+        # a 'preprel' only fix (which comes up if a component is dirty
+        # but doesn't have multiply owned or missing files).
+        my $mrp = $fix->NewMrpFile;
+        $mrp = $fix->MrpFile unless(defined($mrp));
+        if( !defined($comps{$fix->Component}) or
+                                ($mrp ne $comps{$fix->Component}) )
+            {
+            $comps{$fix->Component} = $mrp; # Record the current location.
+            my $prepline = "preprel ";
+            # The mrp file may be unchanged. Only use -m if necessary.
+            $prepline .= "-m " . $fix->NewMrpFile
+                if( defined($fix->NewMrpFile) );
+            my $vver = $self->Version;
+	    $vver = $self->{baseversion}
+                if(lc($fix->Component) eq "gt_techview_baseline" );
+            $prepline .= " " .
+                    $fix->Component . " " .
+                    $vver  . " " .
+                    $self->Iversion;
+            $self->Print("REMARK: Running '$prepline'\n");
+            system($prepline);
+            }
+        }
+    # There could well be further problems. For example, some components
+    # generate temporary files when e.g abld export -what is run, so
+    # another patch cycle may be required. The following lines re-run
+    # envinfo and regenerate the problem and fixes arrays.
+    $self->EnvinfoOutput(1);
+    $self->CBRFixes; # Above trashes problem and fix arrays, this regens them
+
+    # How many fixes did we write?
+    return $nfixes;
+    }
+
+#
+# Run 'ImplementFixes' a maximum of attempts times. Returns the number of
+# problems that remain.
+#
+sub FixCBR
+    {
+    my $self=shift;
+
+    for(1..$self->Attempts)
+        {
+        $self->Print("REMARK: Running CBR Patch code. Iteration number $_.\n");
+        my $nfixes = $self->ImplementFixes;
+        if( $nfixes == 0 )
+            {
+            $self->Print("REMARK: No CBR Patches were required.\n");
+            last;
+            }
+
+        # Get the problems. We didn't have to do this here, the
+        # ImplementFixes on the next iteration would trigger it anyway
+        # if there are more problems, but nice to exit here if we're fixed.
+        my $probref = $self->CBRProblems;
+        
+        $self->{options}->Component('CBRPatch: Miscellaneous');
+        
+        unless($self->{ncbrproblems})
+            {
+            $self->Print("REMARK: No further problems with CBR detected. Patch complete.\n");
+            last;
+            }
+
+        }
+    if( $self->{ncbrproblems} != 0 )
+        {
+        $self->Print("REMARK: " . $self->{ncbrproblems} .  " CBR problems remain!\n");
+        }
+    return( $self->{ncbrproblems} );
+    }
+
+#
+# CleanPatchArea
+#
+# Delete all mrp files in the patch area that are not in the current
+# environment.
+#
+sub CleanPatchArea
+    {
+    my $self = shift;
+    my $versinfo = $self->EnvDb->VersionInfo;
+    my %mrps;
+    # Build a list of mrp files in the current environment.
+    for(keys %$versinfo)
+        {
+        my $comp = $_;
+        my $mrp = lc($self->EnvDb->MrpName($comp));
+        $mrp = "\\" . $mrp unless( $mrp =~ m/^\\/ );
+        $mrps{$mrp} = 1;
+        }
+
+    for my $file (glob($self->PatchArea . "\\*.mrp") )
+        {
+        $file = lc($file);
+        $file =~ s!\/!\\!g;
+        $file = "\\" . $file unless( $file =~ m/^\\/ );
+        unless( defined($mrps{$file} ) )
+            {
+            $self->Print("REMARK: Deleting file '$file' from patcharea.\n");
+            unlink $file;
+            }
+        }
+    }
+sub Print # Should we concatenate multiple args? With a list only first prints
+    {
+    my $self = shift;
+    return unless ref($self);
+
+    if( ref($self->{options} ) )
+        {
+        $self->{options}->Print(@_) 
+        }
+        else
+        {
+        print @_, "\n";
+        }
+    return;
+    }
+sub Error # Should we concatenate multiple args? With a list only first prints
+    {
+    my $self = shift;
+    return unless ref($self);
+    if( ref( $self->{options} ) )
+        {
+        $self->{options}->Error(@_);
+        }
+    else
+        {
+        print @_, "\n";
+        }
+    return;
+    }
+
+1;
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/stages/CBRRepair/cbrfix.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,287 @@
+#!\bin\perl
+# Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# cbrfix
+# Support for the CBRPatch code, here we record potential fixes for a
+# damaged CBR environment.
+# 
+#
+
+package CBRFix;
+
+use strict;
+
+#
+# new
+# 
+# Create a new CBRFix object.
+#
+sub new
+    {
+    my($arg, $component, $mrpfixtext, 
+       $mrpfile, $newmrpfile, $notesrcline) = @_;
+    my $class = ref($arg) ? ref($arg) : $arg;
+
+    my $self = { component => undef,
+                mrpfixtext => [],
+                   mrpfile => undef,
+              notessrcline => undef,
+                newmrpfile => undef };
+    bless $self, $class;
+
+    $self->Component($component)   if( $component );
+    $self->MrpFixText($mrpfixtext) if( $mrpfixtext );
+#    $self->CbrProb($cbrprobref)    if( $cbrprobref );
+    $self->MrpFile($mrpfile)       if( $mrpfile );
+    $self->NewMrpFile($newmrpfile) if( $newmrpfile );
+    $self->NotesSrcLine($notesrcline) if( $notesrcline );
+
+    return $self;
+    }
+
+#
+# Component
+#
+# Setter/getter for component member of this CBRFix object. Component is
+# just scalar text. If no component is passed to this, keep the old. In any
+# case return the current value of component.
+# If the component is provided, the mrpfile will become undefined. We
+# *could* trigger finding that out, but that could be really inefficient..
+#
+sub Component
+    {
+    my $self = shift;
+    return unless( ref($self) );
+    my $newcomp = lc(shift);
+    return $self->{component} unless $newcomp;
+    $self->{component} = $newcomp;
+    undef($self->{mrpfile});
+    return $self->{component};
+    }
+
+#
+# MrpFile
+#
+# Setter/getter for the mrpfile for the CBRFix object. Takes what it is
+# given on trust if it's there. If nothing is given, return the mrpfile
+# name, which we may have to work out.
+#
+sub MrpFile
+    {
+    my $self = shift;
+    return unless( ref($self) );
+    my $mrpfile = lc(shift);
+
+    # We're provided with the mrpfile. Set it.
+    $self->{mrpfile} = $mrpfile if($mrpfile);
+
+    # Make sure it has backslashes, not forward slashes.
+    $self->{mrpfile} =~ s^\/^\\^g;
+    
+    # We're already know the mrpfile. Return it.
+    return $self->{mrpfile} if( defined($self->{mrpfile}) );
+
+    # We're provided with nothing and don't yet know our mrpfile. Find it
+    # out, store it and return it.
+    my $comp = $self->{component};
+    my $inidata = IniData->New();
+    my $envdb = EnvDb->Open($inidata);
+    my $mrpname = $envdb->MrpName($comp);
+    $self->{mrpfile} = $mrpname if( $mrpname );
+    $self->{mrpfile} =~ s^\/^\\^g;
+    return $self->{mrpfile};
+    }
+
+#
+# Setter/getter for the 'newmrpfile' member, this is used when a component
+# to be fixed must have a 'new' mrp location (usually /component_defs..)
+#
+sub NewMrpFile
+    {
+    my $self = shift;
+
+    return unless( ref($self) );
+    my $newmrpfile = shift;
+    return $self->{newmrpfile} unless defined($newmrpfile);
+    $newmrpfile =~ s^\/^\\^g;
+    $self->{newmrpfile} = lc($newmrpfile);
+    return $self->{newmrpfile};
+    }
+
+#
+# MrpFixText
+#
+# Setter/getter for mrpfixtext member of this CBRFix object. Mrpfixtext is
+# a reference to an array containing blocks (probably lines) of scalar text.
+# If no value is passed to this do nothing. In any case return the current
+# value of mrpfixtext, a reference to an array holding all of the lines.
+#
+sub MrpFixText
+    {
+    my $self = shift;
+    return unless( ref($self) );
+    my $newtext = shift;
+    push @{$self->{mrpfixtext}}, $newtext if( defined($newtext));
+    return $self->{mrpfixtext};
+    }
+
+# Setter/getter for notes_source line. This is only ever used if the component
+# did not previously exist in the environment before the fix is written.
+# Should only happen for the 'unresolved' component.
+sub NotesSrcLine
+    {
+    my $self = shift;
+    my $newnsl = shift;
+    $self->{notessrcline} = $newnsl if( defined($newnsl) );
+    return $self->{notessrcline} if( defined($self->{notessrcline}) );
+    $self->{notessrcline} = "notes_source \\component_defs\\release.src\n";
+    return $self->{notessrcline};
+    }
+#
+# CbrProb
+#
+# Records a reference to the CBRProblem object that triggered this fix.
+# Possibly not needed.
+#
+#sub CbrProb
+#    {
+#    my $self = shift;
+#    return unless( ref($self) );
+#    my $newprob = shift;
+#    return $self->{cbrprob} unless $newprob;
+#    $self->{cbrprob} = $newprob;
+#    return $self->{cbrprob};
+#    }
+
+#
+# WriteFix
+#
+# Copy over the original mrp file for the component that this problem
+# occurs in to the patcharea, unless that has already been done.
+# If the copy doesn't happen, create a new mrp file and add a component and
+# notes_src line.
+# Add the fix text to the new mrp file. In the case of '-source' which isn't
+# supported, try to find the line with the source to be removed and comment
+# it out.
+#
+sub WriteFix
+    {
+    my $self = shift;
+    return unless( ref($self) );
+
+    # Get component name.
+    my $comp = $self->Component;
+
+    # Mrpfile name. If new name is not defined, we just have a dirty component
+    # that will be preprel'd only.
+    my $oldmrp = $self->MrpFile;
+    my $newmrp = $self->NewMrpFile;
+    return unless( defined($newmrp) );
+
+    # Do we have the nasty source missing case?
+    my $source_missing=undef;
+    if( defined($self->MrpFixText) )
+        {
+        my $firstfix = ${$self->MrpFixText}[0];
+        if( $firstfix =~ m/-source\s+(.*)$/i )
+            {
+            shift @{$self->MrpFixText};
+            $source_missing=$1;
+            }
+        }
+
+    # Copy the old mrp over to the new location unless the new one already
+    # exists, in which case this component actually lives here (e.g for
+    # the binbag) or another fix object has already copied it.
+    if ( (-f $oldmrp) && ($oldmrp ne $newmrp ) && (! (-f $newmrp)) )
+        {
+        File::Copy::copy( $oldmrp, $newmrp ) or print "CBRFIX COPY FAILED! Dollar bang is ", $!, "\n";
+        my $mode = 0644; chmod $mode, $newmrp;
+        open NEWMRP, ">> $newmrp" or print "Cannot append to $newmrp, dollar bang is '$!'\n";
+        print NEWMRP "\n# Automatic CBR patches follow.\n" or print "Couldn't write to NEWMRP!\n";
+        close NEWMRP;
+        }
+
+    # If this fix is to remove a superfluous source line, then read in the
+    # file as it is and rewrite it. Perhaps one day '-source' might be
+    # implemented.
+    if($source_missing)
+        {
+        open MRP, $newmrp;
+        my @oldmrparr = <MRP>;
+        close MRP;
+        open MRP, "> $newmrp";
+        my @removedsource;
+        for my $line (@oldmrparr)
+            {
+            if( $line =~ m/^\s*source\s+\Q$source_missing\E\s*$/i )
+                {
+                push @removedsource, "# AutoFIX CBR code removed the following line, the source seems to be missing.\n";
+                push @removedsource, "# $line\n";
+                next;
+                }
+            print MRP $line;
+            }
+        for my $line (@removedsource) { print MRP $line; }
+        close MRP;
+        }
+       
+    # The new mrp file should now exist. If it doesn't then add a
+    # component and notes_src line to it. Should only happen for
+    # the 'binbag' unresolved component.
+    unless( -f $newmrp )
+        {
+        open NEWMRP, "> $newmrp";
+        print NEWMRP "# Automatic CBR patching code generated this file..\n";
+        print NEWMRP "component    $comp\n";
+        print NEWMRP $self->NotesSrcLine;
+        close NEWMRP;
+        }
+
+    #
+    # Dirty the old MRP file so that next time a (hopefully good) build
+    # happens the difference is spotted and the component is re-issued.
+    #
+    if( -f $oldmrp and ($oldmrp ne $newmrp) )
+        {
+        my $oldmrpmessage = "# AutoCBR repair code: This component has problems and has been patched.\n";
+        open OLDMRP, $oldmrp;
+        my @oldmrp = <OLDMRP>; close OLDMRP;
+        unless( grep( /$oldmrpmessage/, @oldmrp ) )
+            {
+            open OLDMRP, ">> $oldmrp";
+            print OLDMRP $oldmrpmessage;
+            close OLDMRP;
+            }
+        }
+    
+    # Now add the extra 'fix' lines onto the new mrp file.
+    if(ref($self->MrpFixText))
+        {
+        open NEWMRP, ">> $newmrp" or print "Couldn't open $newmrp\n";;
+        for my $fixline (@ { $self->MrpFixText } )
+            {
+            print NEWMRP $fixline;
+            }
+        close NEWMRP;
+        }
+    else
+        {
+#            print "MrpFixText not a reference!!\n";
+        }
+    return;
+    }
+1;
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/stages/CBRRepair/cbrproblem.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,289 @@
+#!\bin\perl
+# Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# cbrproblem
+# Support for the CBRPatch code, here we record problems within
+# damaged CBR environment
+# 
+#
+
+use strict;
+package CBRProblem;
+
+use File::Basename;
+use CBRFix;
+
+#
+# new
+# 
+# Create a new CBRProblem object.
+#
+sub new
+    {
+    my($arg, $path, $type, $components) = @_;
+    my $class = ref($arg) ? ref($arg) : $arg;
+
+    my $self = {};
+    bless $self, $class;
+
+    $components = {} if !ref($components);
+
+    $self->Path($path)     if( $path );
+    $self->Type($type)     if( $type );
+    $self->Components($components) if( $components );
+
+    return $self;
+    }
+
+#
+# Path
+#
+# Setter/getter for path member of this CBRProblem object. Path is
+# just scalar text. If no path is passed to this, keep the old. In any
+# case return the current value of path.
+#
+sub Path
+    {
+    my $self = shift;
+    return unless( ref($self) );
+    my $newpath = shift;
+    return $self->{path} unless $newpath;
+    $newpath = "\\" . $newpath unless( $newpath =~ m/^\\/ );
+    $newpath = lc($newpath);
+    $self->{path} = $newpath;
+    return $self->{path};
+    }
+#
+# Type  (orphan/multi/absent/dirty)
+#
+# Setter/getter for type member of this CBRProblem object. Type is
+# just scalar text. If no value is passed to this, keep the old. In any
+# case return the current value of type.
+#
+sub Type
+    {
+    my $self = shift;
+    return unless( ref($self) );
+    my $newtype = shift;
+    return $self->{type} unless $newtype;
+
+    $self->{type} = "orphan"  if( $newtype =~ m/orphan/i );
+    $self->{type} = "multi"   if( $newtype =~ m/multi/i );
+    $self->{type} = "absent"  if( $newtype =~ m/absent/i );
+    $self->{type} = "dirty"   if( $newtype =~ m/dirty/i );
+
+    return $self->{type};
+    }
+#
+# Components
+#
+# Setter/getter for components member of this CBRProblem object. Owner arg
+# is a reference to a hash. If no value is passed to this, keep the old. In
+# any case return the current value of components (which is a REFERENCE).
+# The hash contains a list of components that this problem affects.
+# Naturally the hash should contain one component owner, but we are talking
+# about problems here..
+#
+sub Components  # Takes a reference to a hash if setting..
+    {
+    my $self = shift;
+    return unless( ref($self) );
+    my $ownref = shift;
+
+    if( ref($ownref) )  # Reference to a hash, keys of which are components
+        {               # claiming to own this file..
+        for(keys %$ownref)
+            {
+            my $component = $_;
+            $self->{components}->{$component} = 1;
+            }
+        }
+    return $self->{components};
+    }
+
+#
+# Return the fix(es) that are required to address this problem.
+# We are passed inidata, the envdb, patcharea and 'binbag'
+# component name.
+#
+sub GetFixes
+    {
+    my $self = shift;
+    my($inidata, $envdb, $patcharea, $binbagcomp) = @_;
+    return undef unless( ref($self) ); # Must be an object, not a class.
+
+    #
+    # First check if we have an easy fix - that is, a component is dirty
+    # and therefore must be preprel'd, but nothing else like mrp file editing
+    # needs doing.
+    #
+    if( $self->Type eq "dirty" )
+        {
+        my $ezfix = CBRFix->new( (keys %{$self->Components})[0], # Component
+                                  undef,                # Text for mrp file.
+                                  undef,                # Original Mrp file.
+                                  undef );              # New mrp file.
+        my @fixarray;
+        push @fixarray, $ezfix;
+        return \@fixarray;
+        }
+
+    # Make sure everything we need has been passed across.
+    return undef unless( defined($inidata) and defined($envdb) and
+                         defined($patcharea) and defined($binbagcomp));
+
+    # Work out the 'binbag' mrpfile name.
+    my $binbagmrp = "$patcharea\\$binbagcomp.mrp";
+
+    # The binbag constitutes one CBRFix, we may need other fixes to be
+    # done to the existing components.
+    my $binbag = CBRFix->new($binbagcomp,  # The component this fix is for.
+                             undef,        # The text to add to the mrpfile.
+                             $binbagmrp,   # Original Mrp file.
+                             $binbagmrp);  # Mrpfile to add the fix to.
+
+    my @fixes; # An array of fixes. We'll return this at the end.
+
+    if(defined($self->Components())) # No components for orphans.
+        {
+        for my $comp (keys %{$self->Components}) # For each concerned component
+            {
+            my $mrpfile = $envdb->MrpName($comp);
+            unless( $mrpfile =~ m/^\\/ )
+            {
+                $mrpfile = "\\" . $mrpfile;   # EPOCROOT?
+            }
+            my $fxmrpdat=undef;
+            my $newmrp = "$patcharea\\" . File::Basename::basename($mrpfile);
+            my $errormsg = undef;
+            unless( defined($fxmrpdat) )
+                {
+                undef $@;
+                eval
+                    {
+                    $fxmrpdat = $envdb->GetMrpData($comp);
+                    };
+                $errormsg = $@;
+                };
+
+            # The above object creation fails utterly if we have a missing
+            # source file. In that case we specify '-source'. Unfortunately
+            # this situation also hides other faults with the component,
+            # so another iteration might be required to fix everything.
+            if( !defined($fxmrpdat) && ($errormsg =~ m/Error: .*?does not exist/) )
+                {
+                my $fix = CBRFix->new( $comp,            # Component
+                                  undef,                 # Text for mrp file.
+                                  $mrpfile,              # Original Mrp file.
+                                  $newmrp);              # New mrp file.
+                # Yes I know '-source' doesn't exist, but it might one
+                # day, and for the moment we can intercept this before it
+                # actually gets written.
+                $fix->MrpFixText("-source " . $self->Path);
+                my @fixarray;
+                push @fixarray, $fix;
+                return \@fixarray;
+                }
+            # Create the fix for this component.
+            my $compfix = CBRFix->new( $comp,     # Component
+                                       undef,     # Text to add to mrpfile.
+                                       $mrpfile,  # Original mrp file.
+                                       $newmrp ); # New mrp file.
+
+            # We now need to determine whether our file that is causing us
+            # all of this grief has been exported or is just a binary.
+            # This block sets up two variables, 'comp_remove' which
+            # is text to be added to the component to exclude the file,
+            # and 'binbag_addition' which is text to be added to our
+            # 'binbag' component..
+            my($comp_remove, $binbag_addition);
+            # Trigger ExportCategories, to get the export info cached.
+            $fxmrpdat->ExportCategories();
+
+            # The exportinfo structure is new to version 2.76.2 of the release
+            # tools, it was introduced to fix DEF047062. It's kind of private
+            # but right now this is the only way to associate an exported
+            # file with its source.
+            for my $class (keys %{$fxmrpdat->{exportinfo}})
+                {
+                for my $exl (keys %{$fxmrpdat->{exportinfo}->{$class} })
+                    {
+                    my $exfile = lc($exl);
+                    my $srcfile = lc($fxmrpdat->{exportinfo}->{$class}->{$exl});
+
+                    $exfile = "\\" . $exfile unless( $exfile =~ m/^\\/ );
+                    $srcfile = "\\" . $srcfile unless( $srcfile =~ m/^\\/ );
+                    if( $exfile eq lc($self->Path))
+                        {
+                        $srcfile = "\"$srcfile\"" if( $srcfile =~ m/\s/ );
+                        $exfile = "\"$exfile\"" if( $exfile =~ m/\s/ );
+                        $comp_remove = "-export_file    $srcfile $exfile\n";
+                        $binbag_addition = "export_file    $srcfile $exfile\n";
+                        last;
+                        }
+                    }
+                }
+            unless( $comp_remove )  # Not an export? Try binary.
+                {
+                for my $bil ( @{$fxmrpdat->Binaries()} )
+                    {
+                    my $bifile = lc($bil);
+                    $bifile = "\\" . $bifile unless( $bifile =~ m/^\\/ );
+                    if( $bifile eq lc($self->Path) )
+                        {
+                        my $lpth = lc($bifile);
+                        $lpth = "\"$bifile\"" if( $bifile =~ m/\s/ );
+                        $comp_remove = "-binary    $lpth\n";
+                        $binbag_addition = "binary    $lpth\n";
+                        last;
+                        }
+                    }
+                }
+            # Remove the file from the component it lives in.
+            $compfix->MrpFixText($comp_remove);
+            push @fixes, $compfix;
+
+            # Add the file to the binbag, unless its already there and only
+            # if we have a multiply owned file. Given where we are in the
+            # code it can only be a multi-owned or absent file - and if its
+            # absent we don't want to reference it, that was the original
+            # problem.
+            $binbag->MrpFixText($binbag_addition)
+                   if(($self->Type eq "multi") and 
+                    not(grep $binbag_addition, @{$binbag->MrpFixText}));
+            }
+        }
+    else   # No component owns this file, must be an orphan.
+        {
+        if( $self->Type eq "orphan" )  # Check anyway. Should always be true.
+            {
+            my $lpth = $self->Path;
+            $lpth = "\"$lpth\"" if( $lpth =~ m/\s/ );
+            my $fixtext = "binary    $lpth\n";
+            $binbag->MrpFixText($fixtext) 
+                unless( grep $fixtext, @{$binbag->MrpFixText});    
+            }
+            
+        }
+        # Add binbag contents to the array of fixes generated by this problem
+        # IF it contains anything.
+        push @fixes, $binbag if( ref($binbag->MrpFixText) and
+                                 (scalar @{$binbag->MrpFixText}) );
+
+        # Return a reference to the fixes for this problem.
+        return \@fixes;
+    }
+
+1;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/stages/CCheckEnv.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,348 @@
+#!\bin\perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# CCheckEnv
+# Uses the checkenv command to ensure all files are accounted for
+# 
+#
+
+use strict;
+
+use FindBin;
+use lib $FindBin::Bin."\\..";
+use lib $FindBin::Bin."\\Stages\\CBRRepair";
+
+# Load base class
+use CProcessStage;
+
+# Load the error recovery code.
+use CBRPatch;
+
+package CCheckEnv;
+use vars ('@ISA');
+@ISA = qw( CProcessStage );
+
+use constant CONFIG_PREINSTALLED_COMPONENTS => 'Preinstalled components';
+
+# void CheckOpts()
+# Ensures that all required (user) options are set to reasonable values at the
+# start of execution
+#
+# Dies if options invalid
+sub CheckOpts()
+    {
+    my $self = shift;
+    # Nothing to check
+    }
+
+# boolean PreCheck()
+# Ensures that all required results from previous stages are set to reasonable
+# values before this stage is run
+#
+# Returns false if result options are invalid
+sub PreCheck()
+    {
+    my $self = shift;
+    my $options = $self->iOptions();
+
+    if (!$self->PreCheckListOpt(CONFIG_PREINSTALLED_COMPONENTS)) {
+        $options->Error("Preinstalled components list not available (did CDelta run OK?)");
+        return 0;
+    }
+
+    return 1;
+    }
+
+# boolean Run()
+# Performs the body of work for this stage
+#
+# Returns false if it encounters problems
+sub Run()
+    {
+    my $self = shift;
+    my $passed = 1; # True, so far
+    my $options = $self->iOptions();
+
+    # First things first. We are going to need EnvDb and IniData. Make sure
+    # they are loaded.
+    # This copied from CPrepEnv, really ought to happen at a higher level.
+    my $found = 0;
+    for my $path (split(/;/,$ENV{PATH}))
+        {
+        if (-e $path."\\envdb\.pm")
+            {
+            push @INC, $path;
+            $found = 1;
+            last;
+            }
+        }
+    if (!$found)
+        {
+        $options->Error("Couldn't find release tools in path");
+        }
+    require EnvDb;
+    require IniData;
+    require MrpData;
+
+    # Create a new CBRPatch object. This won't do anything quite yet..
+    # Pass in the options object so it can generate reports.
+    my $cbrpatch = CBRPatch->new($options);
+
+    # get the list of preinstalled components (really a hash)
+    my %preinstalled = @{$options->Get(CONFIG_PREINSTALLED_COMPONENTS)};
+
+    # Check the output of envinfo, if its broken the patching code
+    # attempts to fix things x times (defaults to 3).
+    $options->Component('CBRPatch: Miscellaneous');
+    for my $att (1..$cbrpatch->Attempts)
+        {
+        my $evcomment = "Patch $att> " unless($att == 1);
+        # Detemine the fixes required to sort out the CBR. Might be none..
+        my $nfixes = $cbrpatch->CBRFixes;
+
+        # Get envinfo output. We get a reference to an array which is the
+        # output from 'envinfo -ffv'. Envinfo will already have been triggered
+        # by the above call to CBRFixes, we'll just get the envinfo output
+        # generated there. If we wanted envinfo run again we'd pass an argument.
+        my $evop = $cbrpatch->EnvinfoOutput;
+
+        $passed &= $self->EnvInfoErrorReport( $evop, $evcomment );
+
+        if ( $nfixes )
+            {
+            # get a list of component names to be fixed
+            my @components = grep defined, map $_->Component(), @$nfixes;
+
+            # do not attempt to fix preinstalled components (e.g. ISCs)
+            my @wontfix = grep exists $preinstalled{$_}, @components;
+
+            # if any are on the list of components to fix then this is a fatal error
+            if (@wontfix) {
+                $options->Error("Not going to patch preinstalled component(s): @wontfix");
+                return 0;
+            }
+
+            # Implement the fixes required. This will also trigger
+            # rerun of envinfo, + recalc problems and fixes.
+            my $fixesdone = $cbrpatch->ImplementFixes;
+#           $options->Print("$fixesdone patches applied to CBR.\n");
+
+            # Make sure we get an error report if this is the last
+            # iteration. If it isn't, it'll get done on the next.
+            $passed &= $self->EnvInfoErrorReport( $evop, "Patch FINAL> ")
+                if( $att == $cbrpatch->Attempts );
+            if( $cbrpatch->{ncbrproblems} )  # Are there further problems?
+                {
+                $options->Error( $cbrpatch->{ncbrproblems} . " CBR problems remain.\n" );
+
+                }
+            else
+                {
+                $passed = 1; # Problems fixed. Make sure we continue.
+                last;
+                }
+            }
+        else
+            {
+            last; # There are no fixes, though there may be trouble..
+            }
+        }
+    $options->Component('CCheckEnv: Miscellaneous');
+    return $passed;
+    }
+
+sub EnvInfoErrorReport
+    {
+    my $self = shift;
+    my $evop = shift;
+    my $opcomment = shift;
+    my $passed=1;
+
+    my $options = $self->iOptions();
+
+    if( ref($evop) )
+        {
+        my @output = ();
+        my $status;
+
+        foreach my $line (@$evop)
+            {
+            chomp $line;
+
+            if ($line =~ /^ERROR: Failed to run envinfo(.*)$/)
+                {
+                $options->Error($opcomment . "Couldn't spawn child process to run envinfo -f");
+                $passed = 0;
+                return $passed;
+                }
+
+            if ($line =~ /^Overall status: (.*)$/)
+                {
+                if (defined($status))
+                    {
+                    $passed = 0;
+                    last;
+                    }
+                else
+                    {
+                    $status = $1;
+                    }
+                }
+
+            push @output, $line;
+            }
+
+        if (!$passed)
+            {
+            $options->Error($opcomment . "Found multiple instances of 'Overall status' lines when parsing envinfo -ffv output.");
+            $status = undef;
+            }
+
+        if (!defined($status))
+            {
+            $options->Error($opcomment . "Envinfo overall status was not found:");
+            $passed = 0;
+            }
+        elsif ($status ne "pending release")
+            {
+            $options->Error($opcomment . "Envinfo status was '$status'. Expected 'pending release':");
+            $passed = 0;
+            }
+
+        if (!$passed)
+            {
+            $self->ExtractFromErrorArray(@output);
+            # Now dump out the entire envinfo output in non-scanlog format
+            $options->Print($opcomment . "Complete envinfo output:\n");
+            foreach my $error (@output)
+                {
+                $options->Print($opcomment . "- ".$error);
+                }
+            }
+        }
+    else
+        {
+        # Envinfo output not a reference to an array. Something is broken.
+        $passed = 0;
+        }
+        return $passed;
+    }
+
+# This parses the envinfo -f output and extracts specific error
+# and warning messages and dumps them out in scanlog format.
+sub ExtractFromErrorArray($)
+  {
+  my $self = shift;
+  my @logErrorLines = @_;
+
+  my $options = $self->iOptions();
+  $options->Print("Specific errors and warnings extracted from envinfo output:\n");
+  $options->Print("Component name is shown thus; [component] before the message\n");
+  my $component = "";
+  my @errorList = ();
+  my @warningList = ();
+  foreach my $line (@logErrorLines) {
+    # Remove line feed, white space
+    chomp $line;
+    # Strip all leading '.' that are envinfo's way of showing progress
+    $line =~ s/^(Scanning environment)*\.*//;
+
+    if ($line =~ m/^(\S+): Error: (.*)/) {
+      $component = $1;
+      my $err = $2;
+
+      # Print out any unknown errors with [???] which are cached
+      if(scalar(@errorList) != 0) {
+        foreach my $unknownErr (@errorList){
+          $options->Error("[???] $unknownErr");
+        }
+        @errorList = ();
+      }
+
+      $options->Error("[$component] $err");
+      $component = "";
+    }
+    # Search for ": Multiple errors (first" and grab the first word, that is the component
+    elsif ($line =~ m/^(\S+): Multiple errors \(first/) {
+      # Dump the array of errors previously logged then clear the error array and the component
+      $component = $1;
+      foreach my $err (@errorList) {
+        $options->Error("[$component] $err");
+      }
+      @errorList = ();
+      $component = "";
+    # Special case warnings or errors:
+    # The next three regexs are a bit fragile:
+    # EnvDb::Duplicates() will return a message "attempting to release.."
+    # but EnvInfo::CheckEnv() prepends "Warning: "
+    # Defensively this regex ignores the EnvInfo::CheckEnv() prefix but if
+    # the EnvDb::Duplicates() should change this regex may fail.
+    # Note that we are explicitly converting a EnvInfo::CheckEnv() warnings
+    # to an error message by putting it on the error list
+    } elsif ($line =~ m/^(\S+):\s+(\S+) attempting to release (\S+) which has already been released by (\S+)/) {
+      push @errorList, "$2 attempting to release $3 which has already been released by $4";
+      #push @errorList, $line;
+    } elsif ($line =~ m/^(\S+): Component name in MRP file is "(\S+)" whilst the name of this component in the environment database is "(\S+)"/) {
+      push @errorList, "Component name in MRP file is \"$2\" whilst the name of this component in the environment database is \"$3\"";
+      #push @errorList, $line;
+    } elsif ($line =~ m/^(\S+): (.+) has unknown origin/) {
+      push @errorList, $2." has unknown origin";
+      #push @errorList, $line;
+    # Treatment of general warnings or errors
+    } elsif ($line =~ m/^(Error): (.+)/i || $line =~ m/^(Warning): (.+)/i) {
+      if (uc $1 eq "ERROR") {
+        my $error = $2;
+        # Strip spurious CR
+        $error =~ s/\r//;
+        push @errorList, $error;
+      } else {
+        # Process a warning
+        # MAINTANANCE NOTE: The lines up to "END MAINTANANCE NOTE" can be removed
+        # once the missing '\n' is added in in MrpData::HandleBinFile() line 594
+        #
+        # First a precautionary check to see if this is a single line with multiple
+        # warnings. This is specific to MrpData::HandleBinFile()
+        # that emits a warning with this particlular pattern.
+        if ($line =~ m/^Warning: \((\S+?)\)(.+?)\?/) {
+          # In this case we can include the component that is in (...)
+          while ($line =~ m/^Warning: \((\S+?)\)(.+?)\?(.*)/i) {
+            push @warningList, "[$1]".$2."?";
+            $line = $3;
+            $line =~ s/^\.*//;
+          }
+          # Pick up an error that might be at the end of this line
+          if ($line =~ m/^(Error): (.+)/i) {
+            my $error = $2;
+            # Strip spurious CR
+            $error =~ s/\r//;
+            push @errorList, $error;
+          }
+        } else {
+          # END MAINTENANCE NOTE
+          # Treat as a single warning line
+          # NOTE: No component addded
+          push @warningList, $2
+        }
+      }
+    }
+  }
+  # Residual errors (these do not have an identifiiable component)
+  foreach my $err (@errorList) {
+    $options->Error("$err");
+  }
+  foreach my $warn (@warningList) {
+    $options->Warning("$warn");
+  }
+}
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/stages/CCheckMrpUpdates.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,339 @@
+#!\bin\perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# CCheckMrpUpdates
+# Compare MRP checksums against the last release to spot any changes
+# 
+#
+
+use strict;
+
+use FindBin;
+use lib $FindBin::Bin."\\..";
+
+# Load base class
+use CProcessStage;
+
+package CCheckMrpUpdates;
+use vars ('@ISA');
+@ISA = qw( CProcessStage );
+
+# void CheckOpts()
+# Ensures that all required (user) options are set to reasonable values at the
+# start of execution
+#
+# Dies if options invalid
+sub CheckOpts()
+	{
+	my $self = shift;
+	my $options = $self->iOptions();
+
+	# Checks options are defined; dies otherwise
+	$self->CheckOpt('GT+Techview baseline component name');
+	$self->CheckOpt('Techview component list');
+	$self->CheckOpt('GT component list');
+
+	# Check options are sensible
+	my $techviewcomplist = $options->Get("Techview component list");
+	my $GTcomplist = $options->Get("GT component list");
+
+	if (!-e $techviewcomplist)
+		{
+		$options->Die("ERROR: File '".$techviewcomplist."' (Techview component list) could not be found");
+		}
+	if (!-e $GTcomplist)
+		{
+		$options->Die("ERROR: File '".$GTcomplist."' (GT component list) could not be found");
+		}
+
+	# Load in list of components and corresponding .mrp files
+	my %components;
+
+	if (!open(TECHVIEWCOMPLIST, $techviewcomplist))
+		{
+		$options->Die("ERROR: Could not open '$techviewcomplist' (Techview component list)");
+		}
+	elsif (!open(GTCOMPLIST, $GTcomplist))
+		{
+		$options->Die("ERROR: Could not open '$GTcomplist' (GT component list)");
+		}
+	else
+		{
+		foreach my $line (<TECHVIEWCOMPLIST>)
+			{
+			chomp $line;
+			$line =~ s/^\s*//; # Remove extraneous spaces
+			$line =~ s/\s*$//;
+
+			if ($line!~/^#/)
+				{
+				my @parms = split(/\s+/, $line);
+
+				if (scalar(@parms) != 2)
+					{
+					$options->Die("ERROR: Entries in Techview component list should be of the form 'name mrp_location'. Problem in line:\n$line");
+					}
+				else
+					{
+					$components{lc($parms[0])} = $parms[1];
+					}
+				}
+			}
+		foreach my $line (<GTCOMPLIST>)
+			{
+			chomp $line;
+			$line =~ s/^\s*//; # Remove extraneous spaces
+			$line =~ s/\s*$//;
+
+			if ($line!~/^#/)
+				{
+				my @parms = split(/\s+/, $line);
+
+				if (scalar(@parms) != 2)
+					{
+					$options->Die("ERROR: Entries in GT component list should be of the form 'name mrp_location'. Problem in line:\n$line");
+					}
+				else
+					{
+					$components{lc($parms[0])} = $parms[1];
+					}
+				}
+			}
+
+		close(TECHVIEWCOMPLIST);
+		close(GTCOMPLIST);
+		}
+
+	$self->iComponents(\%components);
+
+	# Search for inidata API
+	my $found = 0;
+	foreach my $path (split(/;/,$ENV{PATH}))
+		{
+		if (-e $path."\\inidata\.pm")
+			{
+			$found = 1;
+			last;
+			}
+		}
+
+	if (!$found)
+		{
+		$options->Die("ERROR: Couldn't find release tools in path");
+		}
+	}
+
+# boolean PreCheck()
+# Ensures that all required results from previous stages are set to reasonable
+# values before this stage is run
+#
+# Returns false if result options are invalid
+sub PreCheck()
+	{
+	my $self = shift;
+	my $passed = 1; # True, so far
+	my $options = $self->iOptions();
+
+	foreach my $component (keys(%{$self->iComponents()}))
+		{
+		my $mrpfile = $self->iComponents()->{$component};
+
+		next if ($mrpfile eq '*nosource*');
+
+		if (!-e $mrpfile)
+			{
+			$options->Error("CCheckMrpUpdates::PreCheck() MRP file '".$mrpfile."' for component '".$component."' does not exist, ignoring it.");
+      # Knock this component out and keep going
+      delete ($self->{iCOMPONENTS}{$component});
+			}
+		}
+
+	if (!$self->PreCheckOpt("Last baseline version"))
+	 	{
+		$options->Error("Last baseline version has not been defined.");
+	 	$passed = 0;
+	 	}
+
+	return $passed;
+	}
+
+# Getter/setters
+sub iComponents
+	{
+	my $self = shift;
+	if (@_) { $self->{iCOMPONENTS} = shift; }
+	return $self->{iCOMPONENTS};
+	}
+
+# boolean Run()
+# Performs the body of work for this stage
+#
+# Returns false if it encounters problems
+sub Run()
+	{
+	my $self = shift;
+	my $passed = 1; # True, so far
+	my $options = $self->iOptions();
+
+	my $base = $options->Get("GT+Techview baseline component name");
+	my $lastver = $options->Get("Last baseline version");
+
+	# Load and initalise MD5 hash creator
+	my $md5;
+
+	if (eval "require Digest::MD5")
+		{ # Prefer Digest::MD5, if available.
+		$md5 = Digest::MD5->new();
+		}
+	elsif (eval "require MD5")
+		{ # Try old version of MD5, if available.
+		$md5 = new MD5;
+		}
+	elsif (eval "require Digest::Perl::MD5")
+		{ # Try Perl (Slow) version of MD5, if available.
+		$md5 = Digest::Perl::MD5->new();
+		}
+	else
+		{
+		$options->Error("Cannot load any MD5 Modules");
+		$passed = 0;
+		}
+
+	# Load in hashes for previous release
+
+	# - Install inidata API
+	my $found = 0;
+	foreach my $path (split(/;/,$ENV{PATH}))
+		{
+		if (-e $path."\\inidata\.pm")
+			{
+			push @INC, $path;
+			$found = 1;
+			last;
+			}
+		}
+
+	if (!$found)
+		{
+		$options->Error("Couldn't find release tools in path");
+		}
+
+	require IniData;
+
+	# - Read previous hashes
+
+	my %oldmrps;
+
+	if ($lastver =~ /^__initial/i)
+	    {
+	    # special - no previous release
+	    }
+	elsif (!(my $inidata = IniData->New()))
+		{
+		$options->Error("Couldn't read reltools.ini");
+		$passed = 0;
+		}
+	elsif (!(my $path = $inidata->PathData->LocalArchivePathForExistingComponent($base, $lastver)))
+		{
+		$options->Error("Couldn't locate '$base' component at version '$lastver'");
+		$passed = 0;
+		}
+	else
+		{
+		if (open(HASHFILE,$path."\\mrphash.lis"))
+			{
+			foreach my $line (<HASHFILE>)
+				{
+				my @args = split(/\s+/,$line);
+				if (scalar(@args) != 3)
+					{
+					$options->Error("Failed to parse line '$line' from file '$path\\mrphash.lis");
+					$passed = 0;
+					last;
+					}
+				my ($comp, $mrppath, $hash) = @args;
+
+				$oldmrps{lc($comp)} = [$mrppath, $hash];
+				}
+
+			close(HASHFILE);
+			}
+		}
+
+	my @differing=();
+
+	if ($passed)
+		{
+		foreach my $component (keys(%{$self->iComponents()}))
+			{
+			# Don't need to check ISC components, they have no mrp file    
+			next if ($self->iComponents()->{lc($component)} eq '*nosource*');    
+                            
+			# Support for scanlog phase component
+			$options->Component($component);
+			
+			# Compare filenames
+			if (!defined( $oldmrps{lc($component)} ))
+				{
+				$options->Print("Not comparing $component - new component");
+				}
+			else
+				{
+				my ($oldpath, $oldhash) = @{$oldmrps{lc($component)}};
+				my $newpath = $self->iComponents()->{lc($component)};
+				if (lc($oldpath) ne lc($newpath))
+					{
+					$options->Print("Component ".$component."'s mrp file has moved from '$oldpath' to '$newpath'");
+					push @differing, $component;
+					}
+				else
+					{
+					# Create hash for current mrp file
+					$md5->reset();
+					my $file;
+
+					if (!($file = IO::File->new($newpath)))
+						{
+						$options->Error("Could not open \"$newpath\" for reading: $!");
+						$passed = 0;
+						last;
+						}
+
+					$md5->addfile($file);
+					$file->close();
+					my $newhash = $md5->hexdigest();
+
+					# Compare
+					if (lc($oldhash) ne lc($newhash))
+						{
+						$options->Print("Component ".$component."'s mrp file has been updated");
+						push @differing, $component;
+						}
+					}
+				}
+			}
+
+		if ($passed)
+			{
+			if (!($options->Set("Updated components", \@differing)))
+				{
+				$options->Error("Couldn't store updated mrp files list");
+				$passed = 0;
+				}
+			}
+		}
+
+	return $passed;
+	}
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/stages/CCleanUp.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,81 @@
+#!\bin\perl
+# Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# CCleanUp
+# Returns the machine configuration to its initial state
+# 
+#
+
+use strict;
+
+use FindBin;
+use lib $FindBin::Bin."\\..";
+
+# Load base class
+use CProcessStage;
+
+package CCleanUp;
+use vars ('@ISA');
+@ISA = qw( CProcessStage );
+
+# void CheckOpts()
+# Ensures that all required (user) options are set to reasonable values at the
+# start of execution
+# 
+# Dies if options invalid
+sub CheckOpts()
+	{
+	my $self = shift;
+
+	# Checks options are defined; dies otherwise
+	$self->CheckOpt('Spare drive letter');
+	
+	# Checks list options are defined and set to lists; dies otherwise
+	# $self->CheckListOpt('List option name');
+	}
+
+# boolean PreCheck()
+# Ensures that all required results from previous stages are set to reasonable
+# values before this stage is run
+#
+# Returns false if result options are invalid
+sub PreCheck()
+	{
+	my $self = shift;
+
+	return 1; # Nothing to check
+	}
+
+# boolean Run()
+# Performs the body of work for this stage
+#
+# Returns false if it encounters problems
+sub Run()
+	{
+	my $self = shift;
+
+	my $options = $self->iOptions();
+
+	my $drive = $options->Get("Spare drive letter");
+	$drive =~ s/:$//;
+	$drive = $drive.":"; # Ensure there is a single colon on the end
+	
+	if (system("subst /D $drive"))
+		{
+		$options->Warning("Couldn't clean up $drive drive");
+		}
+	
+	return 1; # This stage has no fatal errors
+	}
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/stages/CConfigureRepair.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,173 @@
+#!\bin\perl
+# Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# CConfigureRepair
+# Create release drive and configure the release tools
+# 
+#
+
+use strict;
+
+use FindBin;
+use lib $FindBin::Bin."\\..";
+
+# Load base class
+use CProcessStage;
+
+package CConfigureRepair;
+use vars ('@ISA');
+@ISA = qw( CProcessStage );
+
+use Cwd;
+use Cwd 'chdir';
+use File::Path;
+
+# void CheckOpts()
+# Ensures that all required (user) options are set to reasonable values at the
+# start of execution
+# 
+# Dies if options invalid
+sub CheckOpts()
+	{
+	my $self = shift;
+	my $options = $self->iOptions();
+	
+	# Checks options are defined; dies otherwise
+	$self->CheckOpt("Spare drive letter");
+	$self->CheckOpt("Release notes template location");
+	$self->CheckOpt("Release notes location");
+	$self->CheckOpt("Reltools.ini location");
+	$self->CheckOpt("Techview directory");
+
+	# Checks options are sensible
+	my $passed = 1;
+
+	my $drive = $options->Get("Spare drive letter");
+	if ($drive !~ /^[A-Z]:?$/i)
+		{
+		if ($drive !~ /\*/i)
+			{
+			$options->Error("'$drive' is not a valid drive letter.");
+			}
+		else
+			{
+			$options->Error("Cannot repair on drive '$drive' - an explicit drive letter must be given in the config file.");
+			}
+		$passed = 0;
+		}
+	
+	my $reltoolsini = $options->Get("Reltools.ini location");
+	if (!-e $reltoolsini)
+		{
+		$options->Print("ERROR: Reltools file '$reltoolsini' does not exist");
+	   	$passed = 0;	
+		}
+	
+	my $releasenotestemplate = $options->Get("Release notes template location");
+	if (!-e $releasenotestemplate)
+		{
+		$options->Print("ERROR: Release notes template '$releasenotestemplate' does not exist");
+		$passed = 0;
+		}
+	
+	my $techviewdir = $options->Get("Techview directory");
+	$techviewdir =~ s/[\/\\]+$//; # Remove trailing slashes for consistency
+	if (!-d $techviewdir)
+		{
+		$options->Print("ERROR: Techview directory '$techviewdir' does not exist");
+		$passed = 0;
+		}
+	
+	if (!$passed)
+		{
+		$options->Die("");
+		}
+	}
+
+# boolean PreCheck()
+# Ensures that all required results from previous stages are set to reasonable
+# values before this stage is run
+#
+# Returns false if result options are invalid
+sub PreCheck()
+	{
+	my $self = shift;
+
+	return 1; # Nothing from previous stages to check
+	}
+
+# boolean Run()
+# Performs the body of work for this stage
+#
+# Returns false if it encounters problems
+sub Run()
+	{
+	my $self = shift;
+	my $passed = 1; # True, so far
+	my $options = $self->iOptions();
+
+	my $techviewdir = $options->Get("Techview directory");
+	$techviewdir =~ s/[\/\\]+$//; # Remove any slashes from the end which can break subst
+	
+	# Store existing drive letter
+	my $olddrive = Cwd::getcwd();
+	
+	if ($olddrive !~ /^[A-Za-z]:/)
+	       	{
+		$options->Print("ERROR: getcwd() did not return drive letter, rather '$olddrive'");
+		$passed = 0;
+		}
+	else
+		{
+		$olddrive = substr($olddrive,0,1);
+
+		($options->Set("Original drive", $olddrive)) or ($passed = 0);
+		}
+
+	my $drive = $options->Get("Spare drive letter");
+	if ($drive !~ /:$/)
+		{
+		$drive = $drive.":";
+		}
+
+	if ($techviewdir !~ /^[A-Za-z]:/)
+		{
+		$techviewdir = $olddrive.":".$techviewdir;
+		}
+	
+	if (!-d ($drive."\\"))
+		{
+		# Drive doesn't exist, subst it
+		my $output = `subst $drive $techviewdir 2>&1`;
+		if ($? >> 8)
+			{
+			$options->Error("Couldn't subst to '$techviewdir' to $drive : $output");
+			$passed = 0;
+			}
+		}
+	
+	if ($passed && (!chdir($drive)))
+		{
+		$options->Print("ERROR: Couldn't change to drive $drive : $!");
+		$passed = 0;
+		}
+
+	# Set path
+
+	$ENV{PATH} = $ENV{PATH}.";$drive\\epoc32\\tools;$drive\\epoc32\\gcc\\bin;";
+	$ENV{EPOCROOT} = "\\";
+
+	return $passed;
+	}
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/stages/CCreateDrive.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,337 @@
+#!\bin\perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# CCreateDrive
+# Create release drive and configure the release tools
+# 
+#
+
+use strict;
+
+use FindBin;
+use lib $FindBin::Bin."\\..";
+
+# Load base class
+use CProcessStage;
+
+package CCreateDrive;
+use vars ('@ISA');
+@ISA = qw( CProcessStage );
+
+use Cwd;
+use Cwd 'chdir';
+use File::Path;
+use File::Basename;
+
+# void CheckOpts()
+# Ensures that all required (user) options are set to reasonable values at the
+# start of execution
+#
+# Dies if options invalid
+sub CheckOpts()
+	{
+	my $self = shift;
+	my $options = $self->iOptions();
+
+	# Checks options are defined; dies otherwise
+	$self->CheckOpt("Spare drive letter");
+	$self->CheckOpt("Release notes template location");
+	$self->CheckOpt("Release notes location");
+	$self->CheckOpt("Reltools.ini location");
+	$self->CheckOpt("Techview directory");
+
+	# Checks options are sensible
+	my $passed = 1;
+
+	my $drive = $options->Get("Spare drive letter");
+	if (($drive !~ /^[A-Z]:?$/i) and ($drive !~ /^[A-Z]?\*:?$/i))
+		{
+		$options->Error("'$drive' is not a valid drive letter.");
+		$passed = 0;
+		}
+
+	my $reltoolsini = $options->Get("Reltools.ini location");
+	if (!-e $reltoolsini)
+		{
+		$options->Error("Reltools file '$reltoolsini' does not exist");
+	   	$passed = 0;
+		}
+
+	my $releasenotestemplate = $options->Get("Release notes template location");
+	if (!-e $releasenotestemplate)
+		{
+		$options->Error("Release notes template '$releasenotestemplate' does not exist");
+		$passed = 0;
+		}
+
+	my $techviewdir = $options->Get("Techview directory");
+	$techviewdir =~ s/[\/\\]+$//; # Remove trailing slashes for consistency
+	if (!-d $techviewdir)
+		{
+		$options->Error("Techview directory '$techviewdir' does not exist");
+		$passed = 0;
+		}
+
+	if (!$passed)
+		{
+		$options->Die("");
+		}
+	}
+
+# boolean PreCheck()
+# Ensures that all required results from previous stages are set to reasonable
+# values before this stage is run
+#
+# Returns false if result options are invalid
+sub PreCheck()
+	{
+	my $self = shift;
+
+	return 1; # Nothing from previous stages to check
+	}
+
+# boolean Run()
+# Performs the body of work for this stage
+#
+# Returns false if it encounters problems
+sub Run()
+	{
+	my $self = shift;
+	my $passed = 1; # True, so far
+	my $options = $self->iOptions();
+
+	# Store existing drive letter
+	my $olddrive = Cwd::getcwd();
+
+	STOP:
+		{
+		do
+			{
+			if ($olddrive !~ /^[A-Za-z]:/)
+				{
+				$options->Error("getcwd() did not return drive letter, rather '$olddrive'");
+				$passed = 0;
+				last STOP;
+				}
+
+			$olddrive = substr($olddrive,0,1);
+
+			($options->Set("Original drive", $olddrive)) or ($passed = 0);
+
+			my $reltools = $options->Get("Reltools.ini location");
+			if ($reltools !~ /^[A-Za-z]:/)
+				{
+				# Add the original drive letter if it has been omitted
+				$reltools = $olddrive.":".$reltools;
+				}
+
+			my $techviewdir = $options->Get("Techview directory");
+			if ($techviewdir !~ /^[A-Za-z]:/)
+				{
+				$techviewdir = $olddrive.":".$techviewdir;
+				}
+			$techviewdir =~ s/[\/\\]+$//; # Remove any slashes from the end which can break subst
+
+			my $releasenotestemplate = $options->Get("Release notes template location");
+			if ($releasenotestemplate !~ /^[A-Za-z]:/)
+				{
+				$releasenotestemplate = $olddrive.":".$releasenotestemplate;
+				}
+			my $dpfile = File::Basename::dirname($releasenotestemplate) . '/distribution.policy';
+			$dpfile =~ s/\//\\/g;
+
+			my $releasenotes = $options->Get("Release notes location");
+			my $dptarget =  File::Basename::dirname($releasenotes) . '/distribution.policy';
+			$dptarget =~ s/\//\\/g;
+
+			my $drive = $options->Get("Spare drive letter");
+
+			if ($drive !~ /:$/)
+				{
+				$drive = $drive.":";
+				}
+
+			if ($drive =~ /\*:$/)
+				{
+				# Search for available drive
+				$drive =~ s/\*:$//;
+				$drive = uc($drive);
+
+				if (length($drive) == 0)
+					{
+					# Start drive not specified
+					$drive = 'A';
+					}
+				elsif (length($drive) > 1)
+					{
+					# Assert: This /should/ have already been checked.
+					$options->Error("$drive is not a valid drive letter to search from");
+					$passed = 0;
+					last STOP;
+					}
+
+				while (ord($drive) <= ord('Z'))
+					{
+					system("subst $drive: ".$techviewdir." > nul 2>&1") or last;
+					$drive = chr(ord($drive)+1);
+					}
+
+				if (ord($drive) <= ord('Z'))
+					{
+					if ($options->Set("Spare drive letter", "$drive:"))
+						{
+						$options->Print("Using drive $drive: as spare drive");
+						$drive = $drive.":";
+						}
+					else
+						{
+						$options->Error("Couldn't store found drive letter ($drive:)");
+						$passed = 0;
+						last STOP;
+						}
+					}
+				else
+					{
+					$options->Error("Couldn't find a spare drive to use");
+					$passed = 0;
+					last STOP;
+					}
+				}
+			else
+				{
+				# Subst drive directly
+				my $output = `subst $drive $techviewdir 2>&1`;
+				if ($? >> 8)
+					{
+					$options->Error("Couldn't subst to '$techviewdir' to $drive : $output");
+					$passed = 0;
+					last STOP;
+					}
+				}
+
+			if (!chdir($drive))
+				{
+				$options->Error("Couldn't change to drive $drive : $!");
+				$passed = 0;
+				last STOP;
+				}
+
+			# Install reltools.ini
+
+			if (!-d "\\epoc32\\relinfo")
+				{
+				my $output = `mkdir \\epoc32\\relinfo 2>&1`;
+				if ($? >> 8)
+					{
+					$options->Error("Couldn't create \\epoc32\\relinfo directory: $output");
+					$passed = 0;
+					last STOP;
+					}
+				}
+
+            my $ini = '\epoc32\relinfo\reltools.ini';
+
+            unlink($ini) if -e $ini; # delete if it's already there
+
+			my $output = `copy $reltools $ini 2>&1`;
+			if ($? >> 8)
+				{
+				$options->Error("Couldn't install reltools.ini file from $reltools: $output");
+				$passed = 0;
+				last STOP;
+				}
+
+			# Set path
+
+			$ENV{PATH} = $ENV{PATH}.";$drive\\epoc32\\tools;$drive\\epoc32\\gcc\\bin;";
+			$ENV{EPOCROOT} = "\\";
+
+			# Create release note
+			if (!open(TEMPLATE, $releasenotestemplate))
+				{
+				$options->Error("Could not read from release notes template '$releasenotestemplate': $!");
+				$passed = 0;
+				last STOP;
+				}
+
+			my $releasenotesdir = $releasenotes;
+			$releasenotesdir =~ s/[\/\\][^\/\\]*$//;
+			if (!-d $releasenotesdir)
+				{
+				if (!mkpath($releasenotesdir))
+					{
+					$options->Error("Could not create directory '$releasenotesdir' for release notes: $!");
+					$passed = 0;
+					close(TEMPLATE);
+					last STOP;
+					}
+				}
+			system("copy $dpfile $dptarget > nul 2>&1");
+
+			if (!open(NOTES, ">".$releasenotes))
+				{
+				$options->Error("Could not write release notes to '$releasenotes': $!");
+				$passed = 0;
+				close(TEMPLATE);
+				last STOP;
+				}
+
+			foreach my $line (<TEMPLATE>)
+				{
+				chomp($line);
+
+				# Replace macros
+				my $found;
+				do
+					{
+					$found = 0;
+					my $opening = index($line, "%");
+					if ($opening != -1)
+						{
+						my $closing = index($line, "%", $opening+1);
+
+						if ($closing != -1)
+							{
+							$found = 1;
+							my $len = $closing-$opening+1;
+							my $key = substr($line, $opening+1, $len-2);
+							my $value = $options->Get($key);
+							if (defined($value))
+								{
+								substr($line, $opening, $len, $value);
+								}
+							else
+								{
+								$options->Error("No value for '$key' defined, as found in release notes template");
+								$passed = 0;
+								close(NOTES);
+								close(TEMPLATE);
+								last STOP;
+								}
+							}
+						}
+					} while ($found);
+
+				print NOTES $line."\n";
+				}
+
+			close(TEMPLATE);
+			close(NOTES);
+			}
+		# 'last STOP' jumps here
+		}
+
+	return $passed;
+	}
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/stages/CDelta.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,688 @@
+# Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+package CDelta;
+
+use strict;
+use Carp;
+
+use FindBin;
+use lib $FindBin::Bin."\\..";
+use Cwd;
+use File::Spec;
+use IO::Handle;
+use Time::Local;
+use Parallel::ForkManager;
+use base qw(CProcessStage);
+
+# use constants for config directive names
+use constant CONFIG_BASELINE_NAME           => 'GT+Techview baseline component name';
+use constant CONFIG_BASELINE_VERSION        => 'Last baseline version';
+use constant CONFIG_GT_COMPONENTS_LIST      => 'GT component list';
+use constant CONFIG_TV_COMPONENTS_LIST      => 'Techview component list';
+use constant CONFIG_RELEASE_VERSION         => 'Release version';
+use constant CONFIG_INTERNAL_VERSION        => 'Internal version';
+use constant CONFIG_MRP_UPDATED_COMPONENTS  => 'Updated components';
+use constant CONFIG_PREINSTALLED_COMPONENTS => 'Preinstalled components';
+use constant CONFIG_MAX_PARALLEL_TASKS      => 'Max Parallel Tasks';
+
+my $keeptemp;
+
+$| = 1;                       # autoflush output
+
+sub AUTOLOAD {
+
+    my $self = shift;
+    my $method = (split '::', $CDelta::AUTOLOAD)[-1];
+
+    return if $method eq 'iOptions'; # prevent recursion...
+    my $config = $self->iOptions(); # ...on this call
+
+    # delegate to our CConfig if possible (e.g. Get, Set, Print, Error, etc.)
+    return $config->$method(@_) if UNIVERSAL::can($config, $method);
+
+    carp "$CDelta::AUTOLOAD not implemented";
+    return undef;
+}
+
+sub DESTROY {} # required - prevents AUTOLOAD destroying the CConfig
+
+sub CheckOpts {
+
+    my $self = shift;
+
+    my @required = (
+        CONFIG_BASELINE_NAME,
+        CONFIG_BASELINE_VERSION,
+        CONFIG_GT_COMPONENTS_LIST,
+        CONFIG_TV_COMPONENTS_LIST,
+        CONFIG_RELEASE_VERSION,
+        CONFIG_INTERNAL_VERSION);
+
+    $self->CheckOpt($_) for @required;
+
+    my @files = map $self->Get($_), (CONFIG_GT_COMPONENTS_LIST, CONFIG_TV_COMPONENTS_LIST);
+
+    $self->Die("Required file missing: $_") for grep !-e, @files;
+}
+
+sub Run {
+
+    my $self = shift;
+
+    # get list of components in this release
+    my $release = $self->ListReleaseComponents();
+
+    $self->Print("\t$_ $release->{$_}")
+        for sort { lc($a) cmp lc($b) } keys %$release;
+
+    # get previous release component info
+    my $previous = $self->ListPreviousComponents(
+        $self->Get(CONFIG_BASELINE_NAME),
+        $self->Get(CONFIG_BASELINE_VERSION)) or return;
+
+    $self->Print("\t$_ $previous->{$_}")
+        for sort { lc($a) cmp lc($b) } keys %$previous;
+
+    # get preinstalled component info
+    my $preinstalled = $self->ListPreinstalledComponents();
+
+    $self->Print("\t$_ $preinstalled->{$_}")
+        for sort { lc($a) cmp lc($b) } keys %$preinstalled;
+
+    # Need to check that required preinstalled components are present
+    my @noSource = grep $release->{$_} eq '*nosource*', keys %$release;
+  
+    if (my @missingComponents = grep !exists $preinstalled->{$_}, @noSource) {
+        foreach my $component (@missingComponents) {
+           $self->Error("Required pre-installed component $component does not exist in the environment");     
+        }
+        return 0;
+    }  
+
+    # Need to check that there are not preinstalled components which have not been specified in
+    # techviewcomponents.txt or gt_components.txt
+    if (my @extraComponents = grep !exists $release->{$_}, keys %$preinstalled) {
+        foreach my $extraComponent (@extraComponents) {
+            $self->Error("Pre-installed component $extraComponent is not specified in " . $self->Get(CONFIG_GT_COMPONENTS_LIST) . " or  " . $self->Get(CONFIG_TV_COMPONENTS_LIST)); 
+        }
+        return 0;
+    }
+
+    # add information to the environment database about MRP's that will be included in the environment
+    foreach my $component (keys %$release) {
+        next if ($release->{$component} eq '*nosource*');
+        next if (exists $preinstalled->{$component});
+        
+        my $cmd = "envdata $component -m " . $release->{$component};
+        $self->_runcmd($cmd); 
+    }
+
+    # store preinstalled list for use by CCheckEnv
+    $self->Set(CONFIG_PREINSTALLED_COMPONENTS, [ %$preinstalled ]);
+
+    # get updated components (i.e. MRP file changed)
+    my $updated = $self->Get(CONFIG_MRP_UPDATED_COMPONENTS);
+
+    # determine components to validate starting with the previous release
+    my $validate = { %$previous };
+
+    # ignore removed components
+    delete $validate->{$_} for grep !exists $release->{$_}, keys %$validate;
+
+    # ignore preinstalled components
+    delete $validate->{$_} for keys %$preinstalled;
+    
+    # ignore updated components
+    delete $validate->{$_} for @$updated;
+
+    # do validation - get list of dirty components
+    my $dirty = $self->ListDirtyComponents($validate);
+
+    # list added components
+    my @added = grep !exists $previous->{$_}, keys %$release;
+
+    # list all components for publishing
+    my $prepare = [grep !exists $preinstalled->{$_}, (@$dirty, @added, @$updated, $self->Get(CONFIG_BASELINE_NAME))];
+
+    # do prep and return result as stage completion status
+    return $self->PrepComponents($prepare, $release);
+}
+
+sub ListReleaseComponents {
+
+    my $self = shift;
+    my $components = {};
+    my @files = map $self->Get($_), (CONFIG_GT_COMPONENTS_LIST, CONFIG_TV_COMPONENTS_LIST);
+
+    $self->Print("Determining this release content");
+
+    for my $file (@files) {
+
+        if (!open(LIST, $file)) {
+            $self->Error("Couldn't open file: $file ($!)");
+            return;
+        }
+
+        while (<LIST>) {
+
+            next if /^\s*#/; # skip comments
+
+            # line format: component_name mrp_file
+            if (/^\s*(\S+)\s+(\S+)\s*$/) {
+                $components->{lc($1)} = $2;
+            } else {
+                $self->Warning("Badly formed data in $file at line $. ($_)");
+            }
+        }
+
+        close(LIST);
+    }
+
+    return $components;
+}
+
+sub ListPreviousComponents {
+
+    my $self = shift;
+    my $baseline = shift;
+    my $version = shift;
+
+    return {} if $version =~ /^__initial/i; # special - no previous release
+
+    $self->Print("Determining previous release content ($baseline $version)");
+
+    # load or locate a module from a CBR tools installation *ugh*
+    if (!eval { require IniData }) {
+
+        my $found = 0;
+
+        # search PATH for the module and add the location to @INC if found
+        for my $dir (split ';', $ENV{PATH}) {
+            next unless -e File::Spec->catfile($dir, 'IniData.pm');
+            push @INC, $dir;
+            $found++;
+        }
+
+        if (!$found) {
+            $self->Error("Couldn't find a CBR tools installation");
+            return;
+        }
+    }
+
+    # load required modules and create objects
+    require IniData;
+    require RelData;
+
+    my $ini = eval { IniData->New() };
+
+    if (!defined $ini or length $@) {
+        $self->Error("Error occurred while attempting to read reltools.ini ($@)");
+        return;
+    }
+
+    my $component = eval { RelData->Open($ini, $baseline, $version) };
+
+    if (!defined $component or length $@) {
+        $self->Error("Couldn't open component $baseline version $version ($@)");
+        return;
+    }
+
+    my $environment = $component->Environment();
+
+    return { map { (lc($_), $environment->{$_}) } keys %$environment };
+}
+
+sub ListPreinstalledComponents {
+
+    my $self = shift;
+    my $components = {};
+
+    $self->Print("Determining preinstalled components");
+
+    $self->Component("CDelta: envinfo"); # For Scanlog compatibility
+
+    $self->_runcmd('envinfo -n', sub {
+
+        # skip 3 line header (blank line, Component       Version, blank line)
+        return if $. < 4;
+
+        # check output conforms to expected format
+        if (!/^\s*(\S+)\s+(\S+)\s*$/) {
+            $self->Error("EnvInfo output format is different to that expected");
+        }
+
+        # break line on whitespace
+        my($component, $version) = split(/\s+/, $_);
+
+        # add component and version to list of preinstalled components
+        $components->{lc($component)} = $version;
+
+    });
+
+    return $components;
+}
+
+sub ListDirtyComponents {
+   #
+   # This method has been modified in response to REQ9701. It now calls the external 'validaterel'
+   # process in a separate, forked process (one for each component being validated) and all these
+   # processes run in parallel (if the Max Parallel Tasks runtime option is greater than zero). It
+   # is possible to optimize parallelization for the machine on which MakeCBR is running by means
+   # of Max Parallel Tasks.
+   #
+
+   my $self = shift;
+   my $components = shift;
+   my $child = "";
+   my $output = "";
+   my %child_output;
+   my $indecision = 0;
+   my $dirty_list = {};
+   my ($start_time, $elapsed) = 0;
+   my ($pid, $comp, $status, $started);
+   my $max_tasks = $self->iOptions()->Get(CONFIG_MAX_PARALLEL_TASKS);
+   my $parallel = new Parallel::ForkManager($max_tasks); 
+
+   $| = 1;                       # autoflush output
+
+   $self->iOptions()->Print("\nMaximum number of parallel processes is ${max_tasks}\n");
+
+   #
+   # Define callback routine to run when each child process starts up
+   #
+
+   $parallel->run_on_start (
+      sub {
+         ($pid, $comp) = @_;
+
+#        if ($comp ne "1") {
+#            print("-- validation started for ${comp}\n");                      # (DEBUG)
+#        }
+
+         #
+         # Perl 5.6.1 on a laptop sometimes hangs if too many processes are
+         # forked at once, but a brief nap seems to cure this behaviour (it
+         # may not be necessary in production)
+         #
+
+         if ($comp ne "1") {
+#             print "before to wait 0.2 secs\n";
+             select(undef, undef, undef, 2); # sleep for 1/5th of a second
+             #select(undef, undef, undef, 4); # sleep for 1/5th of a second
+         }
+
+#         print "-- leaving run_on_start for ${comp}\n";
+      }
+   );
+
+   #
+   # Define callback routine to capture exit codes from child processes
+   #
+
+   $parallel->run_on_finish (
+      sub {
+         ($pid, $status, $comp) = @_;
+         my $verdict;
+
+         if ($comp ne "1") {
+            if ($status == 1) {
+               $verdict = "clean";
+            }
+            elsif ($status == 0) {
+               $verdict = "dirty";
+               $dirty_list->{$comp}++;
+            }
+            else {
+               $verdict = "undecided";
+               $indecision = 1;
+            }
+
+#           print("-- validation finished for ${comp} (${verdict})\n");        # (DEBUG)
+         }
+      }
+   );
+
+   #
+   # Define callback routine to run when maximum processes reached
+   #
+
+   $parallel->run_on_wait (
+      sub {
+         print("-- maximum (${max_tasks}) parallel processes reached\n");      # (DEBUG)
+      }
+#     }, 0.5   # optional repeat interval
+   );
+
+   #
+   # Store the time (in seconds) immediately before going parallel
+   #
+
+   $start_time = &get_seconds();
+
+   $self->iOptions()->Print("\nValidating all installed components\n");
+
+   print("\nSeparate output from each validation task follows:-\n");
+   print("================================================================\n");
+
+   #
+   # Loop through the list of components passed into this method
+   #
+
+   for my $component (sort { lc($a) cmp lc($b) } keys %$components) {
+      #
+      # Spawn a parallel (child) process
+      #
+
+      $parallel->start($component) and next;
+
+      ##########################################
+      # This is the start of the child process #
+      ##########################################
+
+      my $line = "";
+      my $message = "";
+      my $clean = 1;
+      my $decision = 0;
+      my $child_pid = $$;
+      my $version = $components->{$component};
+      my ($text, $childname, $childtalk);
+      my $child_start;
+      my $child_finish;
+      my $child_lifetime;
+
+      $| = 1;                       # autoflush output
+
+      $child_pid =~ s/-//;
+
+      #
+      # Store the time (in seconds) when the child was born
+      #
+
+#     $child_start = &get_seconds();                                        # (DEBUG)
+
+      #
+      # Construct the validaterel command
+      #
+
+      my $command = qq(validaterel -sf $component "$version");
+
+      $message = "Validating ${component} against version ${version}\n";
+      $message .= "Executing ${command}\n";
+
+      #
+      # Execute the validaterel command re-directing STDERR
+      # stream to STDOUT; scan each output line for "dirty"
+      # or "clean" status; capture all validaterel's output
+      #
+
+      $command .= " 2>&1";
+
+      if (open (COMMAND, "$command|")) {
+         foreach my $line (<COMMAND>) {
+            if (($line =~/Status dirty/) ||
+                ($line =~/Status binaries clean, source dirty/)) {
+               $clean = 0;
+            }
+
+            if (($line =~/Status clean/) ||
+                ($line =~/Status dirty/) ||
+                ($line =~/Status pending release/) ||
+                ($line =~/Status binaries clean, source dirty/)) {
+               $decision = 1;
+            }
+
+            $message .= $line;
+         }
+
+         close(COMMAND);
+      }
+      else {
+         die "Could not execute command \"${command}\". ${!}\n";
+      }
+
+      #
+      # Print the output in distinct, ordered blocks (goes into a separate
+      # file on the server if ordinary Perl 'print' is used instead of the
+      # Component object method but calling that method in children causes
+      # "attempt to access an unreferenced scalar" errors)
+      #
+
+      $self->iOptions()->Print("${message}");
+      $self->iOptions()->Print("================================================================\n");
+
+      #
+      # Calculate the child's total lifetime
+      #
+
+#     $child_finish = &get_seconds();                                    # (DEBUG)
+#     $child_lifetime = $child_finish - $child_start;                    # (DEBUG)
+#     print("[times: start ${child_start}, finish ${child_finish}, total ${child_lifetime}]\n"); # (DEBUG)
+
+      #
+      # Return special value if decision has not been made
+      #
+
+      if (!$decision) {
+         $clean = -1;
+      }
+     
+      ########################################
+      # This is the end of the child process #
+      ########################################
+
+      $parallel->finish($clean);
+   }
+
+   #
+   # The parent process must wait for all its children to finish
+   #
+
+   $parallel->wait_all_children;
+
+   if ($indecision) {
+      $self->iOptions()->Error("One or more components could not be validated");
+   }
+
+   #
+   # Calculate the total time it took to run all parallel processes
+   #
+
+   $elapsed = &get_seconds() - $start_time;
+
+   $self->iOptions()->Print("Validation of installed components complete (" . &convert_seconds($elapsed) . ")\n");
+
+   return [ keys %$dirty_list ];
+}
+
+sub PrepComponents {
+
+    my $self = shift;
+    my $components = shift;
+    my $release = shift;
+    my $version = $self->Get(CONFIG_RELEASE_VERSION);
+    my $internal = $self->Get(CONFIG_INTERNAL_VERSION);
+    my $last = '';
+
+    for my $component (sort { lc($a) cmp lc($b) } @$components) {
+
+        next if $component eq $last; # prevent reprocessing (in case of duplicates)
+
+        $self->Component($component);
+        $self->Print("Preparing component $component");
+
+        if (!exists $release->{$component}) { # should never happen
+            $self->Error("Component $component is not supposed to be in this release");
+            return 0;
+        }
+
+        my $command = qq(preprel -v $component $version $internal -m $release->{$component});
+      
+        $self->Component($component); # For Scanlog compatibility
+
+        if ($self->_runcmd($command)) {
+            $self->Error("Preprel failed for component: $component");
+            return 0;
+        }
+
+        $last = $component;
+    }
+
+    return 1;
+}
+
+sub _runcmd {
+
+    my $self = shift;
+    my $cmd = shift;
+    my $lineproc = shift || sub {};
+
+    $self->Print("Executing $cmd");
+
+    if (!open(OUTPUT, "$cmd 2>&1 |")) {
+        $self->Error("Couldn't execute: $cmd ($!)");
+        return -1;
+    }
+
+    while (<OUTPUT>) {
+        chomp;
+        $self->Print($_);
+        $lineproc->($_); # call callback with line data
+    }
+
+    close(OUTPUT);
+
+    my $exit = $? >> 8;
+
+    if ($exit) {
+        $self->Error("Command completed with nonzero exit code: $exit");
+    } else {
+        $self->Print("Command completed successfully");
+    }
+
+    return $exit;
+}
+
+sub get_seconds {
+   my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time());
+
+   my $epoch_secs = timelocal($sec, $min, $hour, $mday, $mon, $year);
+
+   return $epoch_secs;
+}
+
+sub convert_seconds {
+   my $time_secs = shift;
+   my $time_str;
+   my $seconds;
+   my $minutes;
+   my $hours;
+
+   $seconds   =  $time_secs % 60;
+   $time_secs = ($time_secs - $seconds) / 60;
+   $minutes   =  $time_secs % 60;
+   $time_secs = ($time_secs - $minutes) / 60;
+   $hours     =  $time_secs % 24;
+
+   $time_str = sprintf("%02d:%02d:%02d", $hours, $minutes, $seconds);
+
+   return $time_str;
+}
+
+1;
+
+=pod
+
+=head1 NAME
+
+CDelta - determines environment differences and prepares for release.
+
+=head1 SYNOPSIS
+
+This class runs as a stage of makeCBR. No alternate usage is supported.
+
+An instance is created using the inherited constructor and processing is
+invoked using the overloaded Run() method.
+
+=head1 DESCRIPTION
+
+The CDelta stage replaces the CValidate and CPrepEnv stages and provides
+the functionality required to determine which components need to be re-
+published to make the new baseline. This process now takes account of the
+fact that there may be preinstalled components (e.g. ISCs) which should
+not be republished (ever).
+
+=head1 METHODS
+
+=head2 New($config)
+
+Inherited constructor - see L<CProcessStage>.
+
+=head2 AUTOLOAD($method)
+
+Attempts to delegate unknown method calls to the CConfig object provided to
+the constructor at instantiation. The CConfig object does configuration
+handling and logging and this AUTOLOAD arrangement allows the CConfig methods
+to be called directly on $self, rather than having to assign to a variable
+or use the not-so-pretty $self->iOptions()->Foo() notation.
+
+=head2 CheckOpts()
+
+Checks required configuration directives are present and sensible prior to
+using them.
+
+=head2 Run()
+
+Main control method - contains the business logic for the stage.
+
+=head2 ListReleaseComponents()
+
+Reads the GT and Techview component list files to get the full list of
+components to be published in this release. Returns a hashref where the
+keys are the component names and the values are their MRP file paths.
+
+=head2 ListPreviousComponents($baseline, $version)
+
+Returns a hashref of component name => version for a given baseline
+component name and version. This is determined by interrogating the reldata
+file of the specified component (making use of CBR tools libraries which
+are dynamically loaded).
+
+=head2 ListPreinstalledComponents()
+
+Returns a hashref of component name => version currently installed in the
+environment. This is determined by running envinfo.
+
+=head2 ListDirtyComponents(\%components)
+
+Returns an arrayref of component names for those components differing to
+their version in the previous release (as provided in %components). This is
+determined by running validaterel on each component.
+
+=head2 PrepComponents(\@components, \%release)
+
+Prepares the given list of component names for later publishing. This is
+achieved by calling preprel for each component specified, using the MRP file
+location provided in %release (the return value of ListReleaseComponents()).
+
+=head1 SEE ALSO
+
+L<CProcessStage> (base class) and L<CConfig> (configuration and logging).
+
+=head1 COPYRIGHT
+
+Copyright (c) 2005-2007 Symbian Software Ltd. All rights reserved.
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/stages/CGetPrevRel.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,178 @@
+#!\bin\perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# CGetPrevRel
+# Identify the last release version
+# 
+#
+
+use strict;
+
+use FindBin;
+use lib $FindBin::Bin."\\..";
+
+# Load base class
+use CProcessStage;
+
+package CGetPrevRel;
+use vars ('@ISA');
+@ISA = qw( CProcessStage );
+
+# void CheckOpts()
+# Ensures that all required (user) options are set to reasonable values at the
+# start of execution
+#
+# Dies if options invalid
+sub CheckOpts()
+	{
+	my $self = shift;
+
+	# Checks options are defined; dies otherwise
+	$self->CheckOpt('GT+Techview baseline component name');
+
+	if (!$self->iOptions()->CheckRelTools())
+		{
+		$self->iOptions()->Die("ERROR: Couldn't find release tools in path");
+		}
+	}
+
+# boolean PreCheck()
+# Ensures that all required results from previous stages are set to reasonable
+# values before this stage is run
+#
+# Returns false if result options are invalid
+sub PreCheck()
+	{
+	my $self = shift;
+
+	return 1; # Nothing to check from any previous stage
+	}
+
+# boolean Run()
+# Performs the body of work for this stage
+#
+# Returns false if it encounters problems
+sub Run()
+	{
+	my $self = shift;
+	my $passed = 1; # True, so far
+	my $options = $self->iOptions();
+
+	my $basecomp = $options->Get('GT+Techview baseline component name');
+	my $lastrel = $options->Get('Last baseline version');
+
+	if (defined($lastrel))
+		{
+		$options->Print("Last baseline version manually defined as: $lastrel");
+
+        return 1 if $lastrel =~ /^__initial/i; # special - no previous release
+
+		# Check specified version exists
+
+		$options->RequireRelTools();
+
+		# Get list of components in previous release
+
+		my $basecomp = $options->Get("GT+Techview baseline component name");
+		my $lastver = $options->Get("Last baseline version");
+
+		if (!(my $inidata = IniData->New()))
+			{
+			$options->Error("Couldn't read reltools.ini");
+			$passed = 0;
+			}
+		else
+			{
+			my $reldata;
+			eval
+				{
+				$reldata = RelData->Open($inidata, $basecomp, $lastver, 0);
+				};
+			unless( defined($reldata) )
+				{
+				$options->Print("REMARK: Couldn't open version $lastver of $basecomp");
+				$lastrel = undef; # Revert to determining latest version
+				}
+			}
+		}
+
+	if (!defined($lastrel))
+		{
+		# Use latestver to determine last baseline version
+
+		if (!defined($basecomp))
+			{
+			$options->Error("GT+Techview baseline component not set for latestver");
+			$passed = 0;
+			}
+		elsif (!open (LATESTVER, "latestver $basecomp 2>&1 |"))
+			{
+			$options->Error("Couldn't spawn child process for latestver");
+			$passed = 0;
+			}
+		else
+			{
+			my @output = ();
+			my $version = undef;
+
+			foreach my $line (<LATESTVER>)
+				{
+				chomp $line;
+				push @output, $line;
+
+				if ($line !~ /^\s*$/)
+					{
+					if (defined($version))
+						{
+						$options->Error("Latestver output had too many lines:");
+						$passed = 0;
+						last;
+						}
+					else
+						{
+						$version = $line;
+						}
+					}
+				}
+
+			if (!close (LATESTVER))
+				{
+				$options->Error("Latestver command failed:");
+				$passed = 0;
+				}
+
+			if ($passed == 0)
+				{
+				foreach my $error (@output)
+					{
+					$options->Print($error);
+					}
+				}
+			else
+				{
+				if ($options->Set("Last baseline version", $version))
+					{
+					$options->Print("Last baseline version determined as: $version");
+					}
+				else
+					{
+					$passed = 0;
+					}
+				}
+			}
+		}
+
+	return $passed;
+	}
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/stages/CInstallGTConflicts.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,225 @@
+#!\bin\perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# CInstallGTConflicts
+# Installs GT versions of any files (as listed in the techview_dups log)
+# and writes an mrp file to ship those files in the GT only release
+# 
+#
+
+use strict;
+
+use FindBin;
+use lib $FindBin::Bin."\\..";
+
+# Load base class
+use CProcessStage;
+
+package CInstallGTConflicts;
+use vars ('@ISA');
+@ISA = qw( CProcessStage );
+
+use File::Path;
+
+# void CheckOpts()
+# Ensures that all required (user) options are set to reasonable values at the
+# start of execution
+# 
+# Dies if options invalid
+sub CheckOpts()
+	{
+	my $self = shift;
+  my $options = $self->iOptions();
+
+	# Checks options are defined; dies otherwise
+	$self->CheckOpt('Conflicting files log');
+	$self->CheckOpt('GT directory');
+	$self->CheckOpt('GT conflicts mrp location');
+	$self->CheckOpt('GT conflicts component name');
+	$self->CheckOpt('Release notes location');
+
+	# Checks and loads conflicting files log
+	my $gtConflicts = $options->Get('Conflicting files log');
+
+	if (!-e $gtConflicts)
+		{
+		$options->Die("ERROR: Conflicting files log '$gtConflicts' does not exist");
+		}
+	elsif (open(GTCONFLICTS, $options->Get('Conflicting files log')))
+		{
+		my @conflicts;
+		
+		foreach my $line (<GTCONFLICTS>)
+			{
+			chomp($line);
+			push @conflicts, $line;
+			}
+		close (GTCONFLICTS);
+
+		$self->iConflicts(\@conflicts);
+		}
+	else
+		{
+		$options->Die("ERROR: Couldn't open conflicting files log: $!");
+		}
+	}
+
+# boolean PreCheck()
+# Ensures that all required results from previous stages are set to reasonable
+# values before this stage is run
+#
+# Returns false if result options are invalid
+sub PreCheck()
+	{
+	my $self = shift;
+	my $passed = 1; # True, so far
+
+	if (!$self->PreCheckOpt("Original drive"))
+	 	{
+		$self->iOptions()->Error("Original starting drive has not been recorded");
+	 	$passed = 0;
+	 	}
+
+	return $passed;
+	}
+
+# Getter/setters
+sub iConflicts
+	{
+	my $self = shift;
+	if (@_) { $self->{iCONFLICTS} = shift; }
+	return $self->{iCONFLICTS};
+	}
+	
+# boolean Run()
+# Performs the body of work for this stage
+#
+# Returns false if it encounters problems
+sub Run()
+	{
+	my $self = shift;
+
+	my $passed = 1; # True, so far
+
+	my @conflicts = @{$self->iConflicts()};
+	my $options = $self->iOptions();
+  
+	my $GTdir = $options->Get('GT directory');
+	my $olddrive = $options->Get('Original drive');
+	if ($GTdir !~ /^[A-Za-z]:/)
+		{
+		# Add the original drive letter if it has been omitted
+		$GTdir = $olddrive.":".$GTdir;
+		}
+	my $mrppath = $options->Get('GT conflicts mrp location');
+	my $mrpname = $options->Get('GT conflicts component name');
+	my $relnotes = $options->Get('Release notes location');
+	my $mrpdir = $mrppath;
+	$mrpdir =~ s/[\/\\][^\/\\]*$//; # Remove leafname
+
+	if (!-d $mrpdir)
+		{
+		if (!mkpath($mrpdir))
+			{
+			$options->Error("Couldn't make directory '$mrpdir'");
+			$passed = 0;
+			}
+		}
+	elsif (!open(MRP, ">$mrppath"))
+		{
+		$options->Error("Couldn't open '$mrppath' for writing: $!");
+		$passed = 0;
+		}
+	else
+		{
+		print MRP "component\t$mrpname\n\n";
+		
+		foreach my $file (@conflicts)
+			{
+			$options->Print($file);
+			my $dir = $file;
+			$dir =~ s/[\/\\][^\/\\]*$//; # Remove leafname
+
+			if (!-d $dir)
+				{
+				if (!mkpath($dir))
+					{
+					$options->Error("Couldn't make directory '$dir' for file '$file'");
+					$passed = 0;
+					next;
+					}
+				}
+			
+			if ($file !~ /^[\\\/]/)
+				{
+				# If path is not absolute, make it absolute
+				$file = "\\".$file;
+				}
+			if (($file =~ /epoc32[\/\\].*\.sym$/) || ($file =~ /epoc32[\/\\].*\.bsc$/))
+				{
+				# These files are excluded from the environment deliberately
+				}
+			elsif (-e $file)
+				{
+				if ( ($file !~ /epoc32[\/\\]localisation[\/\\].*\.rpp$/i)
+				  && ($file !~ /epoc32[\/\\]build[\/\\]/i) )
+					{
+					# File should not already be there. Try to determine the problem
+					my @bininfo = `bininfo $file 2>&1`;
+			
+					if ($? >> 8)
+						{
+						$options->Warning("File '$file' from conflicting files log is present when non GT components have been removed. May be a source file?");
+						}
+					else
+						{
+						$options->Warning("File '$file' from conflicting files log is present in a GT component:");
+						}
+					
+					foreach my $line (@bininfo)
+						{
+						if ($line =~ /^Usage:/)
+							{
+							last;
+							}
+						$options->Print($line);
+						}
+					}
+				}
+			elsif (system("copy $GTdir\\$file $file >nul 2>&1"))
+				{
+				# Build files are excluded, but might be regenerated. Worth trying
+				# to copy if present, but no issue if not present.
+				if ($file !~ /epoc32[\/\\]build[\/\\]/i)
+					{
+					$options->Error("Couldn't copy file '$file' from $GTdir: $!");
+					$passed = 0;
+					}
+				}
+			else
+				{
+				# Have copied $file from GT directory to working drive
+					
+				# Record the new file in the MRP file
+				print MRP "binary\t$file\n";
+				}
+			}
+
+		print MRP "notes_source\t$relnotes\n";
+		close(MRP);
+		}
+	
+	return $passed;
+	}
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/stages/CPrepGTRelease.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,94 @@
+#!\bin\perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# CPrepGTRelease
+# Prepare GT only baseline and GT conflicts components for release
+# 
+#
+
+use strict;
+
+use FindBin;
+use lib $FindBin::Bin."\\..";
+
+# Load base class
+use CProcessStage;
+
+package CPrepGTRelease;
+use vars ('@ISA');
+@ISA = qw( CProcessStage );
+
+# void CheckOpts()
+# Ensures that all required (user) options are set to reasonable values at the
+# start of execution
+# 
+# Dies if options invalid
+sub CheckOpts()
+	{
+	my $self = shift;
+
+	# Checks options are defined; dies otherwise
+	$self->CheckOpt('GT only baseline component name');
+	$self->CheckOpt('GT only baseline mrp location');
+	$self->CheckOpt('GT conflicts component name');
+	$self->CheckOpt('GT conflicts mrp location');
+	$self->CheckOpt('Release version');
+	}
+
+# boolean PreCheck()
+# Ensures that all required results from previous stages are set to reasonable
+# values before this stage is run
+#
+# Returns false if result options are invalid
+sub PreCheck()
+	{
+	my $self = shift;
+
+	return 1; # Nothing to check; always passes
+	}
+
+# boolean Run()
+# Performs the body of work for this stage
+#
+# Returns false if it encounters problems
+sub Run()
+	{
+	my $self = shift;
+	my $passed = 1; # True, so far
+
+	my $options=$self->iOptions();
+
+	my $baselinemrp = $options->Get('GT only baseline mrp location');
+	my $baselinename = $options->Get('GT only baseline component name');
+	my $conflictsmrp = $options->Get('GT conflicts mrp location');
+	my $conflictsname = $options->Get('GT conflicts component name');
+	my $version = $options->Get('Release version');
+
+	my $output = `preprel -v $baselinename $version $version -m $baselinemrp 2>&1`;
+	if ($? >> 8)
+		{
+		$options->Error("Preprel failed for $baselinename: $output");
+		$passed = 0;
+		}
+	
+	$output = `preprel -v $conflictsname $version $version -m $conflictsmrp 2>&1`;
+	if ($? >> 8)
+		{
+		$options->Error("Preprel failed for $conflictsname: $output");
+		$passed = 0;
+		}
+	
+	return $passed;
+	}
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/stages/CReleaseEnv.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,97 @@
+# Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Publishes a prepared release to the archive
+# 
+#
+
+package CReleaseEnv;
+use base qw(CProcessStage);
+use strict;
+
+# void CheckOpts()
+# Ensures that all required (user) options are set to reasonable values at the
+# start of execution
+#
+# Dies if options invalid
+sub CheckOpts()
+	{
+	my $self = shift;
+
+	$self->CheckOpt('Release archive'); # Ensures option named 'Release archive' was set. Dies if not
+	}
+
+# boolean PreCheck()
+# Ensures that all required results from previous stages are set to reasonable
+# values before this stage is run
+#
+# Returns false if result options are invalid
+sub PreCheck()
+	{
+	my $self = shift;
+
+	return 1; # Nothing to check here
+	}
+
+# boolean Run()
+# Performs the body of work for this stage
+#
+# Returns false if it encounters problems
+sub Run()
+	{
+	my $self = shift;
+
+	my $archive = $self->iOptions()->Get("Release archive");
+
+	my $logger = $self->iOptions();
+	
+	$logger->Component("CReleaseEnv: makeenv"); # For Scanlog compatibility
+
+	return !$self->_runcmd("makeenv -v --useCachedManifest -w $archive"); # invert return code 0=pass, 1=fail
+	}
+
+sub _runcmd {
+
+    my $self = shift;
+    my $cmd = shift;
+    my $lineproc = shift || sub {};
+    my $logger = $self->iOptions();
+
+    $logger->Print("Executing $cmd");
+    
+    if (!open(OUTPUT, "$cmd 2>&1 |")) {
+        $logger->Error("Couldn't execute: $cmd ($!)");
+        return -1;
+    }
+
+    while (<OUTPUT>) {
+	chomp;
+	
+	$logger->Print($_);
+	$lineproc->($_); # call callback with line data
+    }
+
+    close(OUTPUT);
+
+    my $exit = $? >> 8;
+
+    if ($exit) {
+        $logger->Error("Command completed with nonzero exit code: $exit");
+    } else {
+        $logger->Print("Command completed successfully");
+    }
+
+    return $exit;
+}
+
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/stages/CRemoveNonGT.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,190 @@
+#!\bin\perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# CRemoveNonGT
+# Removes any components not belonging to the GT release from the environment including their installed binaries
+# 
+#
+
+use strict;
+
+use FindBin;
+use lib $FindBin::Bin."\\..";
+
+# Load base class
+use CProcessStage;
+
+package CRemoveNonGT;
+use vars ('@ISA');
+@ISA = qw( CProcessStage );
+
+# void CheckOpts()
+# Ensures that all required (user) options are set to reasonable values at the
+# start of execution
+# 
+# Dies if options invalid
+sub CheckOpts()
+	{
+	my $self = shift;
+	my $options=$self->iOptions();
+
+	# Checks option is defined; dies otherwise
+	$self->CheckOpt('GT component list'); # Ensures option named 'GT component List' is defined
+	
+	# Checks option is set correctly
+	if (!-e $options->Get("GT component list"))
+		{
+		$options->Die("ERROR: File '".$options->Get("Component list")."' (component list) could not be found");
+		}
+		
+	# Load in list of components and corresponding .mrp files
+	my $complist = $options->Get("GT component list");
+	my @components;
+
+	if (!open(COMPLIST, $complist))
+		{
+		$options->Die("ERROR: Could not open '$complist' (GT component list)");
+		}
+	else
+		{
+		foreach my $line (<COMPLIST>)
+			{
+			chomp $line;
+			$line =~ s/^\s*//; # Remove extraneous spaces
+			$line =~ s/\s*$//;
+
+			if ($line!~/^#/)
+				{
+				my @parms = split(/\s+/, $line);
+
+				if (scalar(@parms) != 2)
+					{
+					$options->Die("ERROR: Entries in GT component list should be of the form 'name mrp_location'. Problem in line:\n$line");
+					}
+				else
+					{
+					push @components, lc($parms[0]);
+					}
+				}
+			}
+			
+		close(COMPLIST);
+		}
+
+	# Search for envdb API
+	my $found = 0;
+	foreach my $path (split(/;/,$ENV{PATH}))
+		{
+		if (-e $path."\\envdb\.pm")
+			{
+			$found = 1;
+			last;
+			}
+		}
+	
+	if (!$found)
+		{
+		$options->Die("ERROR: Couldn't find release tools in path");
+		}
+		
+	$self->iComponents(\@components);
+	}
+
+# boolean PreCheck()
+# Ensures that all required results from previous stages are set to reasonable
+# values before this stage is run
+#
+# Returns false if result options are invalid
+sub PreCheck()
+	{
+	my $self = shift;
+
+	return 1; # Nothing to check - always passes
+	}
+
+# Getter/setters
+sub iComponents
+	{
+	my $self = shift;
+	if (@_) { $self->{iCOMPONENTS} = shift; }
+	return $self->{iCOMPONENTS};
+	}
+	
+# boolean Run()
+# Performs the body of work for the stage
+#
+# Returns false if it encounters problems
+sub Run()
+	{
+	my $self = shift;
+	my $passed = 1; # True, so far
+	my $options=$self->iOptions();
+
+	# Install envdb API
+	my $found = 0;
+	foreach my $path (split(/;/,$ENV{PATH}))
+		{
+		if (-e $path."\\envdb\.pm")
+			{
+			push @INC, $path;
+			$found = 1;
+			last;
+			}
+		}
+	
+	if (!$found)
+		{
+		$options->Error("Couldn't find release tools in path");
+		}
+		
+	require EnvDb;
+	require IniData;
+
+	my $envdb;
+
+	if (!(my $inidata = IniData->New()))
+		{
+		$options->Error("Couldn't read reltools.ini");
+		$passed = 0;
+		}
+	elsif (!($envdb = EnvDb->Open($inidata, 0)))
+		{
+		$options->Error("Couldn't open environment database");
+		$passed = 0;
+		}
+	
+	# Determine currently installed components
+	my @envComps;
+	
+	if ($envdb)
+		{
+		@envComps = keys(%{$envdb->VersionInfo()});
+		}
+	
+	# Remove any components not in the GT component list
+	my @listComps = @{$self->iComponents()};
+	foreach my $component (@envComps)
+		{
+    # Support for scanlog phase component
+    $options->Component($component);
+		my @found = grep( (lc($_) eq lc($component)), @listComps );
+		if (scalar(@found)==0)
+			{
+			$envdb->RemoveComponent($component);
+			}
+		}
+
+	return $passed;
+	}
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/stages/CStoreMrpState.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,273 @@
+#!\bin\perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# CStoreMrpState
+# Records checksums for all mrp files used, for comparison in the next build
+# 
+#
+
+use strict;
+
+use FindBin;
+use lib $FindBin::Bin."\\..";
+
+# Load base class
+use CProcessStage;
+
+package CStoreMrpState;
+use vars ('@ISA');
+@ISA = qw( CProcessStage );
+
+# void CheckOpts()
+# Ensures that all required (user) options are set to reasonable values at the
+# start of execution
+# 
+# Dies if options invalid
+sub CheckOpts()
+	{
+	my $self = shift;
+	my $options = $self->iOptions();
+
+	# Checks options are defined; dies otherwise
+	$self->CheckOpt('GT+Techview baseline component name');
+	$self->CheckOpt('Release version');
+	$self->CheckOpt('Techview component list');
+	$self->CheckOpt('GT component list');
+
+	# Check options are sensible
+	my $techviewcomplist = $options->Get("Techview component list");
+	my $GTcomplist = $options->Get("GT component list");
+	
+	if (!-e $techviewcomplist)
+		{
+		$options->Die("ERROR: File '".$techviewcomplist."' (Techview component list) could not be found");
+		}
+	if (!-e $GTcomplist)
+		{
+		$options->Die("ERROR: File '".$GTcomplist."' (GT component list) could not be found");
+		}
+		
+	# Load in list of components and corresponding .mrp files
+	my %components;
+
+	if (!open(TECHVIEWCOMPLIST, $techviewcomplist))
+		{
+		$options->Die("ERROR: Could not open '$techviewcomplist' (Techview component list)");
+		}
+	elsif (!open(GTCOMPLIST, $GTcomplist))
+		{
+		$options->Die("ERROR: Could not open '$GTcomplist' (GT component list)");
+		}
+	else
+		{
+		foreach my $line (<TECHVIEWCOMPLIST>)
+			{
+			chomp $line;
+			$line =~ s/^\s*//; # Remove extraneous spaces
+			$line =~ s/\s*$//;
+      next if ($line =~ /\*nosource\*/);
+			if ($line!~/^#/)
+				{
+				my @parms = split(/\s+/, $line);
+
+				if (scalar(@parms) != 2)
+					{
+					$options->Die("ERROR: Entries in Techview component list should be of the form 'name mrp_location'. Problem in line:\n$line");
+					}
+				else
+					{
+          $components{lc($parms[0])} = $parms[1];
+					}
+				}
+			}
+		foreach my $line (<GTCOMPLIST>)
+			{
+			chomp $line;
+			$line =~ s/^\s*//; # Remove extraneous spaces
+			$line =~ s/\s*$//;
+      next if ($line =~ /\*nosource\*/);
+			if ($line!~/^#/)
+				{
+				my @parms = split(/\s+/, $line);
+
+				if (scalar(@parms) != 2)
+					{
+					$options->Die("ERROR: Entries in GT component list should be of the form 'name mrp_location'. Problem in line:\n$line");
+					}
+				else
+					{
+          $components{lc($parms[0])} = $parms[1];
+          }
+				}
+			}
+			
+		close(TECHVIEWCOMPLIST);
+		close(GTCOMPLIST);
+		}
+	
+	$self->iComponents(\%components);
+
+	# Search for inidata API
+	my $found = 0;
+	foreach my $path (split(/;/,$ENV{PATH}))
+		{
+		if (-e $path."\\inidata\.pm")
+			{
+			$found = 1;
+			last;
+			}
+		}
+	
+	if (!$found)
+		{
+		$options->Die("ERROR: Couldn't find release tools in path");
+		}
+	}
+
+# boolean PreCheck()
+# Ensures that all required results from previous stages are set to reasonable
+# values before this stage is run
+#
+# Returns false if result options are invalid
+sub PreCheck()
+	{
+	my $self = shift;
+	my $passed = 1; # True, so far
+	my $options = $self->iOptions();
+
+	foreach my $component (keys(%{$self->iComponents()}))
+		{
+		my $mrpfile = $self->iComponents()->{$component};
+		
+		if (!-e $mrpfile)
+			{
+			$options->Error("MRP file '".$mrpfile."' for component '".$component."' does not exist, ignoring it.");
+      # Knock this component out and keep going
+      delete ($self->{iCOMPONENTS}{$component});
+			}
+		}	
+
+	return $passed;
+	}
+
+# Getter/setters
+sub iComponents
+	{
+	my $self = shift;
+	if (@_) { $self->{iCOMPONENTS} = shift; }
+	return $self->{iCOMPONENTS};
+	}
+
+# boolean Run()
+# Performs the body of work for this stage
+#
+# Returns false if it encounters problems
+sub Run()
+	{
+	my $self = shift;
+	my $passed = 1; # True, so far
+	my $options = $self->iOptions();
+
+	my $base = $options->Get("GT+Techview baseline component name");
+	my $ver = $options->Get("Release version");
+
+	# Load and initalise MD5 hash creator
+	my $md5;
+	
+	if (eval "require Digest::MD5")
+		{ # Prefer Digest::MD5, if available.
+		$md5 = Digest::MD5->new();
+		}
+	elsif (eval "require MD5")
+		{ # Try old version of MD5, if available.
+		$md5 = new MD5;
+		}
+	elsif (eval "require Digest::Perl::MD5")
+		{ # Try Perl (Slow) version of MD5, if available.
+		$md5 = Digest::Perl::MD5->new();
+		}
+	else
+		{
+		$options->Error("Cannot load any MD5 Modules");
+		$passed = 0;
+		}
+	
+	# Install inidata API
+	my $found = 0;
+	foreach my $path (split(/;/,$ENV{PATH}))
+		{
+		if (-e $path."\\inidata\.pm")
+			{
+			push @INC, $path;
+			$found = 1;
+			last;
+			}
+		}
+	
+	if (!$found)
+		{
+		$options->Error("Couldn't find release tools in path");
+		}
+	
+	require IniData;
+
+	# Write file
+	
+	my %oldmrps = ();
+	
+	if (!(my $inidata = IniData->New()))
+		{
+		$options->Error("Couldn't read reltools.ini");
+		$passed = 0;
+		}
+	elsif (!(my $path = $inidata->PathData->LocalArchivePathForExistingComponent($base, $ver)))
+		{
+		$options->Error("'$base' component at version '$ver' does seem to have been released");
+		$passed = 0;
+		}
+	else
+		{
+		open(HASHFILE,">".$path."\\mrphash.lis");
+		
+		foreach my $component (keys(%{$self->iComponents()}))
+			{
+      # Support for scanlog phase component
+      $options->Component($component);
+
+			# Create hash for current mrp file
+			my $mrppath = $self->iComponents()->{$component};
+			
+			$md5->reset();
+		
+			my $file;	
+			if (!($file = IO::File->new($mrppath)))
+				{
+				$options->Error("Could not open \"$mrppath\" for reading: $!");
+				$passed = 0;
+				last;
+				}
+			
+			$md5->addfile($file);
+			$file->close();
+			my $hash = $md5->hexdigest();
+			
+			print HASHFILE "$component $mrppath $hash\n";
+			}
+
+		close(HASHFILE);
+		}
+    
+	return $passed;
+	}
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/test/CExampleStage.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,83 @@
+#!\bin\perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# CExampleStage - TODO - Change this when using this stage as a template
+# <Insert description of this stage here>
+# 
+#
+
+use strict;
+
+use lib qw(../);
+use lib qw(../stages);
+use FindBin;
+use lib $FindBin::Bin."\\..";
+
+# Load base class
+use CProcessStage;
+
+package CExampleStage; # TODO - Change this when using this stage as a template
+use vars ('@ISA');
+@ISA = qw( CProcessStage );
+
+# void CheckOpts()
+# Ensures that all required (user) options are set to reasonable values at the
+# start of execution
+# 
+# Dies if options invalid
+sub CheckOpts()
+	{
+	my $self = shift;
+	print "Subclass checking options.\n";
+
+	# Checks options are defined; dies otherwise
+	# $self->CheckOpt('Option name');
+	
+	# Checks list options are defined and set to lists; dies otherwise
+	# $self->CheckListOpt('List option name');
+	}
+
+# boolean PreCheck()
+# Ensures that all required results from previous stages are set to reasonable
+# values before this stage is run
+#
+# Returns false if result options are invalid
+sub PreCheck()
+	{
+	my $self = shift;
+	my $passed = 1; # True, so far
+
+	print "Subclass pre-stage check.\n";
+	# if (!$self->PreCheckOpt("key"))
+	# 	{
+	# 	$passed = 0;
+	# 	}
+
+	return $passed;
+	}
+
+# boolean Run()
+# Performs the body of work for this stage
+#
+# Returns false if it encounters problems
+sub Run()
+	{
+	my $self = shift;
+	my $passed = 1; # True, so far
+
+	print "Subclass stage running.\n";
+	
+	return $passed;
+	}
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/test/CTestScore.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,88 @@
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# \bin\perl
+# CTestScore
+# 
+#
+
+package CTestScore;
+
+use lib qw(../);
+use lib qw(../stages);
+
+use strict;
+
+sub New()
+	{
+	my $proto = shift;
+	my $class = ref($proto) || $proto;
+
+	my $self = {};
+	bless($self, $class);
+
+	$self->Reset();
+
+	return $self;
+	}
+
+sub Reset()
+	{
+	my $self = shift;
+
+	$self->{tested} = 0;
+	$self->{passed} = 0;
+	}
+
+sub Test($$)
+	{
+	my $self = shift;
+	my ($passed, $testname) = @_;
+
+	if ($passed < 0)
+		{
+		$passed = 1;
+		}
+
+	$self->{tested} = $self->{tested}+1;
+	$self->{passed} = $self->{passed}+$passed;
+
+	if ($passed > 0)
+		{
+		print "-- $testname...OK\n";
+		}
+	else
+		{
+		print "*#*#* $testname...FAILED\n";
+		}
+	}
+
+sub Print()
+	{
+	my $self = shift;
+
+	my $tested = $self->{tested};
+	my $passed = $self->{passed};
+	my $score;
+	if ($tested == 0)
+		{
+		$score = "undefined";
+		}
+	else
+		{
+		$score = int($passed/$tested*100);
+		}
+
+	print $score."% pass rate; of $tested tests run, $passed passed, ".($tested-$passed)." failed.\n";
+	}
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/test/runtests.pl	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,41 @@
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# \bin\perl
+# Test harness
+# 
+#
+
+use lib qw(../);
+use lib qw(../stages);
+
+use unit_CConfig;
+use unit_CProcessStage;
+use unit_CStageRunner;
+use unit_stage_CDelta;
+
+use CTestScore;
+
+my $score = New CTestScore();
+
+if (!defined($score))
+	{
+	exit(1);
+	}
+
+$score = unit_CConfig::RunTest($score);
+$score = unit_CProcessStage::RunTest($score);
+$score = unit_CStageRunner::RunTest($score);
+$score = unit_stage_CDelta::RunTest($score);
+
+$score->Print();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/test/unit_CConfig.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,236 @@
+#!bin\perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Unit test for CConfig
+# 
+#
+
+package unit_CConfig;
+
+use lib qw(../);
+use lib qw(../stages);
+use FindBin;
+use Cwd;
+use lib $FindBin::Bin."\\..";
+use CConfig;
+use CTestScore;
+
+sub RunTest($)
+	{
+	my ($testscore) = @_;
+
+	print "> *** Testing CConfig ***\n";
+
+	if (!defined($testscore))
+		{
+		$testscore = New CTestScore();
+		}
+	
+	if (!defined($ENV{TEMP}))
+		{
+		print STDOUT "TEMP environment variable must be defined before testing of CConfig is run.\n";
+		return $testscore;
+		}
+		
+	my $testFilename = $ENV{TEMP}."\\CConfig.tst";
+	
+	if (-e $testFilename)
+		{
+		print STDOUT "File '$testFilename' already exists.\nPlease delete this file to enable testing of CConfig.\n";
+		return $testscore;
+		}
+		
+	open(TESTFILE,">$testFilename");
+	print TESTFILE "Key:value\n";
+	close(TESTFILE);
+
+	my $testConfig=New CConfig($testFilename);
+	
+	$testscore->Test($testConfig->Get("Key") eq "value", "Loaded in file");
+	$testscore->Test($testConfig->Get("kEy") eq "value", "Tested key case insensitivity");
+	$testscore->Test($testConfig->Set("key:2", "value2"), "Set extra key");
+	$testscore->Test( ($testConfig->Get("Key") eq "value") && ($testConfig->Get("key:2") eq "value2"), "Returned all key values");
+	$testscore->Test(!defined($testConfig->Get("nokey")), "Getting invalid key is undefined");
+	$testscore->Test($testConfig->Set("key3", ["value3","value4"]), "Set list value");
+	my $listref=$testConfig->Get("key3");
+	$testscore->Test( (ref($listref) eq "ARRAY") && (($listref->[0]) eq "value3") && (($listref->[1]) eq "value4"), "Returned list value");
+	$testscore->Test($testConfig->Save($testFilename), "Saved file");
+	$testConfig->Set("key4", "value5");
+	$testscore->Test($testConfig->Reload($testFilename), "Loaded file");
+	$listref=$testConfig->Get("key3");
+	$testscore->Test( ($testConfig->Get("Key") eq "value") && ($testConfig->Get("key:2") eq "value2") && (ref($listref) eq "ARRAY") && (($listref->[0]) eq "value3") && (($listref->[1]) eq "value4") && (!defined( $testConfig->Get("key4") )), "Returned all key values");
+	$testscore->Test(!($testConfig->Set(undef, "val")), "Can't set undefined key");
+	$testscore->Test(!($testConfig->Set("key5", undef)), "Can't set undefined value");
+	$testscore->Test($testConfig->Set("key6", ""), "Can set empty value");
+	$testscore->Test($testConfig->Set("", "val"), "Can set empty key");
+	$testscore->Test(!($testConfig->Set("key7", {"hashkey"=>"hashval"})), "Can't set hash value");
+  
+  # Support for additional behaviour to handle Error message, scanlog format etc.
+	my $logFilename = "CConfig_scanlog.log";
+  TestConfigStatus($testConfig, $testscore);
+  TestLogFile($testFilename, $logFilename, $testscore);
+  ValidateLogFile($logFilename, $testscore);
+	unlink $logFilename;
+  TestDieConditions($testFilename, $testscore);
+	unlink $testFilename;
+  
+	return $testscore;
+	} 
+
+sub TestConfigStatus($$)
+  {
+  my $testConfig = shift;
+  my $testScore = shift;
+  # First check the initial internal state of CConfig
+  $testScore->Test($testConfig->{iPhaseErrorCount} == 0, "Initial error count is zero");
+  $testScore->Test(!defined ($testConfig->{iPhase}), "Initial undefined initial phase");
+  }
+
+# This writes out a log file
+sub TestLogFile($$)
+	{
+  my $testFilename = shift;
+  my $logFilename = shift;
+  my $testScore = shift;
+  my $testConfig = New CConfig($testFilename);
+  # This puts a logfile in the current working directory
+  # i.e. test/CConfig.log
+	#my $logFilename = "CConfig_scanlog.log";
+  $testConfig->SetLog($logFilename);
+  #$testConfig->Command("Command");
+  $testConfig->PhaseStart("Phase_1");
+  $testScore->Test($testConfig->{iPhase} eq "Phase_1", "Phase_1 defined");
+  $testConfig->Component("Component_1");
+  $testConfig->Error("Phase_1 error message");
+  $testConfig->Warning("Phase_1 warning message");
+  my $phaseErrors = $testConfig->PhaseEnd();
+  $testScore->Test($phaseErrors == 1, "Phase_1 reported 1 error");
+  $testConfig->PhaseStart("Phase_2");
+  $testConfig->Warning("Phase_2 warning message");
+  $testConfig->Print("Opening Phase_3 should finish Phase_2");  
+  $testConfig->PhaseStart("Phase_3");
+  $testScore->Test(1, "Phase switching didn't die");
+  $phaseErrors = $testConfig->PhaseEnd();
+  $testScore->Test($phaseErrors == 0, "Phase_3 reported no errors");
+  #my $logPath = cwd()."/".$logFilename;
+  #print "> *** Please check CConfig log file at $logPath ***\n";
+  $testScore->Test(1, "Logfile \"$logFilename\" written");
+  }
+
+sub ValidateLogFile($$)
+  {
+  # This is the expected log file output - without the date/time stamp
+  my $logFilename = shift;
+  my $testScore = shift;
+  my $logFileExpected = "===-------------------------------------------------
+=== Phase_1
+===-------------------------------------------------
+=== Phase_1 started 
+=== Phase_1 == Component_1
+ERROR: Phase_1 error message
+WARNING: Phase_1 warning message
+=== Phase_1 finished 
+===-------------------------------------------------
+=== Phase_2
+===-------------------------------------------------
+=== Phase_2 started 
+WARNING: Phase_2 warning message
+Opening Phase_3 should finish Phase_2
+=== Phase_2 finished 
+===-------------------------------------------------
+=== Phase_3
+===-------------------------------------------------
+=== Phase_3 started 
+=== Phase_3 finished 
+";
+  $testScore->Test($logFileExpected eq ReadTimelessLogFile($logFilename), "Logfile \"$logFilename\" matches");
+  }
+
+# Read a scanlog file and strip the time/date stamp
+sub ReadTimelessLogFile($)
+  {
+    my $filename = shift;
+    my $retVal;
+  	open(LOGFILE,"$filename");
+    while (defined (my $line = <LOGFILE>))
+      {
+      if ($line =~ m/.+started .+/)
+        {
+        $line =~ s/(.+started ).+/$1/;
+        }
+      elsif ($line =~ m/.+finished .+/)
+        {
+        $line =~ s/(.+finished ).+/$1/;
+        }
+      $retVal .= $line;
+      }
+    #print "\nParsed:\n";
+    #print $retVal;
+    return $retVal;
+  }
+
+sub TestDieConditions($$)
+  {
+    my $testFilename = shift;
+    my $testScore = shift;
+    my $testConfig;
+    my $logFilename = "CConfig_scrap.log";
+    # Try a direct Die() call
+    $testConfig = New CConfig($testFilename);
+    eval
+      {
+      $testConfig->Die("Die message.");
+      };
+    if ($@) {
+      $testScore->Test(1, "Died on Die() command");
+    } else {
+      $testScore->Test(0, "Failed to die on Die() command");
+    }
+    # Try setting SetErrorDie() then calling Error()
+    $testConfig = New CConfig($testFilename);
+    $testConfig->SetLog($logFilename);
+    # Try PhaseEnd() before any PhaseStart() has been called
+    $testConfig = New CConfig($testFilename);
+    $testConfig->SetLog($logFilename);
+    eval
+      {
+      # No PhaseStart() has been made so a PhaseEnd() should fail
+      $testConfig->PhaseEnd();
+      };
+    if ($@) {
+      $testScore->Test(1, "Died on PhaseEnd() command when there was no prior PhaseStart()");
+    } else {
+      $testScore->Test(0, "Failed to die on PhaseEnd() command");
+    }
+    # Try setting provoking PhaseEnd() when phase has errors
+    $testConfig = New CConfig($testFilename);
+    $testConfig->SetLog($logFilename);
+    $testConfig->PhaseStart("Error_Phase_1");
+    $testConfig->Error("Error message.");
+    eval
+      {
+      # Here is the killer line that should cause it to fail.
+      # Phase 1 has an error but the phase has not been collected
+      # before starting False_Phase_2
+      $testConfig->PhaseStart("False_phase_2");
+      };
+    if ($@) {
+      $testScore->Test(1, "Died on PhaseStart() command when previous phase had Error() calls");
+    } else {
+      $testScore->Test(0, "Failed to die on Error() command");
+    }
+  	unlink $logFilename;
+  }
+
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/test/unit_CProcessStage.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,68 @@
+#!bin\perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Unit test for CProcessStage (Stage base class)
+# 
+#
+
+package unit_CProcessStage;
+
+use lib qw(../);
+use lib qw(../stages);
+use FindBin;
+use lib $FindBin::Bin."\\..";
+use CProcessStage;
+use CTestScore;
+
+sub RunTest($)
+	{
+	my ($testscore) = @_;
+
+	print "> *** Testing CProcessStage ***\n";
+
+	if (!defined($testscore))
+		{
+		$testscore = New CTestScore();
+		}
+	
+	if (!defined($ENV{TEMP}))
+		{
+		print STDOUT "TEMP environment variable must be defined before testing of CProcessStage is run.\n";
+		return $testscore;
+		}
+		
+	my $testFilename = $ENV{TEMP}."\\CConfig.tst";
+	
+	if (-e $testFilename)
+		{
+		print STDOUT "File '$testFilename' already exists.\nPlease delete this file to enable testing of CProcessStage.\n";
+		return $testscore;
+		}
+		
+	open(TESTFILE,">$testFilename");
+	print TESTFILE "key:value\n";
+	close(TESTFILE);
+
+	my $testConfig=New CConfig($testFilename);
+	my $testStage=New CProcessStage($testConfig);
+	unlink $testFilename;
+	
+	$testscore->Test($testStage->iOptions()->Get("key") eq "value", "Created stage with expected options");
+	$testscore->Test($testStage->PreCheck(), "Base implementation of PreCheck returns true (OK)");
+	$testscore->Test($testStage->Run(), "Base implementation of Run returns true (OK)");
+
+	return $testscore;
+	} 
+
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/test/unit_CStageRunner.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,70 @@
+#!bin\perl
+# Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Unit test for CStageRunner
+# 
+#
+
+package unit_CStageRunner;
+
+use lib qw(../);
+use lib qw(../stages);
+use FindBin;
+use lib $FindBin::Bin."\\..";
+use CStageRunner;
+use CTestScore;
+
+sub RunTest($)
+	{
+	my ($testscore) = @_;
+
+	print "> *** Testing CStageRunner ***\n";
+
+	if (!defined($testscore))
+		{
+		$testscore = New CTestScore();
+		}
+	
+	if (!defined($ENV{TEMP}))
+		{
+		print STDOUT "TEMP environment variable must be defined before testing of CStageRunner is run.\n";
+		return $testscore;
+		}
+		
+	my $testFilename = $ENV{TEMP}."\\CConfig.tst";
+	
+	if (-e $testFilename)
+		{
+		print STDOUT "File '$testFilename' already exists.\nPlease delete this file to enable testing of CStageRunner.\n";
+		return $testscore;
+		}
+		
+	open(TESTFILE,">$testFilename");
+	print TESTFILE "key:value\n";
+	close(TESTFILE);
+
+	my $testConfig=New CConfig($testFilename);
+	unlink $testFilename;
+
+	my $testStageRunner = eval("New CStageRunner([\"CExampleStage\"], \$testConfig);");
+	$testscore->Test(defined($testStageRunner), "Instantiated example stage runner");
+	$testscore->Test($testStageRunner->Run(), "Run example stage runner");
+
+	$testStageRunner = eval("New CStageRunner([\"CNonexistantStage\"], \$testConfig);");
+	$testscore->Test(!defined($testStageRunner), "Didn't instantiate bad stage");
+
+	return $testscore;
+	} 
+
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/makecbr/test/unit_stage_CDelta.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,365 @@
+# Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+package unit_stage_CDelta;
+use strict;
+
+use lib qw(../);
+use lib qw(../stages);
+use Archive::Zip qw(:ERROR_CODES);
+use CConfig;
+use CDelta;
+use Cwd;
+use Data::Dumper;
+use Fcntl;
+use File::Basename;
+use File::Path;
+use File::Spec;
+use File::Temp qw(tempfile tempdir);
+
+# constructor
+
+sub RunTest {
+
+    my $score = shift;
+
+	print "> *** Testing CDelta ***\n";
+
+    my $self = bless { score => $score };
+
+    # initial set-up
+    $self->init();
+
+    # N.B. the order of the following tests is important
+    #      as each progressively sets up the environment
+    #      for the next.
+
+    # test methods of CDelta
+    $self->t_ListReleaseComponents();
+    $self->t_ListPreviousComponents();
+    $self->t_ListPreinstalledComponents();
+    $self->t_ListDirtyComponents();
+    $self->t_PrepComponents();
+
+    # clean up
+    $self->exit();
+
+	return $score;
+}
+
+# init() and exit() methods
+
+sub init { # sets up CDelta object and dummy environment
+
+    my $self = shift;
+
+    # create GT components list
+    $self->{gtlist} = {
+        foo    => 'src/foo/group/foo.mrp',
+        qux    => 'src/qux/group/qux.mrp',
+        quux   => 'src/quux/group/quux.mrp',
+        corge  => 'src/corge/group/corge.mrp',
+        grault => 'src/grault/group/grault.mrp',
+        garply => 'src/garply/group/garply.mrp',
+        waldo  => 'src/waldo/group/waldo.mrp',
+        fred   => 'src/fred/group/fred.mrp',
+        plugh  => 'src/plugh/group/plugh.mrp',
+        xyzzy  => 'src/xyzzy/group/xyzzy.mrp',
+        thud   => 'src/thud/group/thud.mrp',
+        mos    => 'src/mos/group/mos.mrp',
+        henk   => 'src/henk/group/henk.mrp',
+        def    => 'src/def/group/def.mrp',
+        bar    => 'src/bar/group/bar.mrp' };
+
+    my $gtlist = $self->TempFile($self->Stringify($self->{gtlist}));
+
+    # create TV components list
+    $self->{tvlist} = {
+        baz                  => 'src/baz/group/baz.mrp',
+        mighty               => 'src/mighty/group/mighty.mrp',
+        boosh                => 'src/boosh/group/boosh.mrp',
+        gt_techview_baseline => 'src/gt_techview_baseline/group/gt_techview_baseline.mrp' };
+
+    my $tvlist = $self->TempFile($self->Stringify($self->{tvlist}));
+
+    # escape colons in paths so CConfig won't (irrationally) complain
+    $gtlist =~ s/:/\\:/g;
+    $tvlist =~ s/:/\\:/g;
+
+    # create config file including paths generated above
+    my $config = $self->TempFile(<<CONFIG);
+
+GT+Techview baseline component name : gt_techview_baseline
+Last baseline version : 1.0
+Max Parallel Tasks : 4
+GT component list : $gtlist
+Techview component list : $tvlist
+Release version : 1.1
+Internal version : 1.1
+
+CONFIG
+
+    # create CConfig object
+    $self->{config} = CConfig->New($config);
+
+    # create CDelta object
+    $self->{cdelta} = eval { CDelta->New($self->{config}) };
+
+    # show the error if any
+    print $@ if defined $@;
+
+    # did it work?
+    $self->Test(!$@, 'Create CDelta object (implicit config validation)');
+
+    # move to a temporary directory so we can set up environment
+    $self->{tempdir} = tempdir(CLEANUP => 0);
+
+    # remember current settings
+    $self->{old} = {
+        cwd      => cwd(),
+        EPOCROOT => $ENV{EPOCROOT},
+        SRCROOT  => $ENV{SRCROOT} };
+
+    # chdir to the temp directory
+    chdir($self->{tempdir}) or die "Can't chdir to temporary directory\n";
+
+    # set EPOC/SRCROOT to the temporary directory (substr trims drive letter)
+    $ENV{EPOCROOT} = $ENV{SRCROOT} = substr($self->{tempdir}, 2).'\\';
+
+    # create reltools.ini pointing to the current directory as the local archive
+    $self->TempFile(
+        "archive_path test $self->{tempdir} /archive\ndisable_win32_extensions",
+        File::Spec->catfile(qw(epoc32 relinfo reltools.ini)));
+
+    # determine baseline
+    $self->{baseline} = {
+        name    => $self->{config}->Get('GT+Techview baseline component name'),
+        version => $self->{config}->Get('Last baseline version')};
+
+    # create dummy reldata
+    $self->{reldata} = {
+        toolName => "$0 (${\__PACKAGE__})",
+        env      => {
+            $self->{baseline}{name} => $self->{baseline}{version},
+            foo                     => '1.0',
+            qux                     => '1.0',
+            quux                    => '1.0',
+            corge                   => '1.0',
+            grault                  => '1.0',
+            garply                  => '1.0',
+            waldo                   => '1.0',
+            fred                    => '1.0',
+            plugh                   => '1.0',
+            xyzzy                   => '1.0',
+            thud                    => '1.0',
+            mos                     => '1.0',
+            henk                    => '1.0',
+            def                     => '1.0',
+            boosh                   => '1.0',
+            baz                     => '1.0',
+            mighty                  => '1.0',
+            bar                     => '1.0' } };
+
+    # create dummy archive components
+    for my $component (keys %{$self->{reldata}{env}}) {
+
+        my $version = $self->{reldata}{env}{$component};
+
+        # create dummy reldata
+        $self->TempFile(
+            Data::Dumper->Dump([$self->{reldata}], ['self->{data}']),
+            File::Spec->catfile($component, $version, 'reldata'));
+
+        # create source zip file
+        my $zip = Archive::Zip->new();
+
+        $zip->addString('/* dummy */', "src/$component/$component.cpp");
+        $zip->addString(<<EOMRP, "src/$component/group/$component.mrp");
+
+component $component
+source \\src\\$component
+notes_source \\src\\$component\\readme.txt
+
+EOMRP
+
+        # write to sourceE.zip
+        my $file = File::Spec->catfile($component, $version, 'sourceE.zip');
+        $zip->writeToFileNamed($file) == AZ_OK or die "Couldn't create $file: $!\n";
+
+    }
+
+    # use CDelta to run getenv (_prefix means private but we're testing!)
+    my $command = qq(getenv -sov -i $self->{tempdir} $self->{baseline}{name} $self->{baseline}{version});
+
+    $self->{cdelta}->_runcmd($command) == 0 or die "Couldn't prepare test environment\n";
+
+    # dirty the foo component
+    unlink(File::Spec->catfile(qw(src foo foo.cpp)));
+
+    # start CConfig phase - CDelta logging expects a phase to be active
+    $self->{config}->PhaseStart('Testing CDelta');
+}
+
+sub exit { # cleans up temp files and restores original environment
+    my $self = shift;
+
+    # delete temp files
+    unlink for grep -e, @{$self->{tempfiles}};
+
+    # chdir back to original working directory
+    if (!chdir($self->{old}{cwd})) {
+       die("Can't chdir back to original working directory ($self->{old}{cwd})\n");
+    }
+
+    # return EPOC/SRCROOT to previous settings
+    $ENV{EPOCROOT} = $self->{old}{EPOCROOT};
+    $ENV{SRCROOT} = $self->{old}{SRCROOT};
+
+    # complete phase
+    $self->{cdelta}->PhaseEnd();
+}
+
+# utility methods
+
+sub Stringify { # creates a consistent string representation of a ref
+
+    my $self = shift;
+    my $ref = shift;
+
+    if (UNIVERSAL::isa($ref, 'HASH')) {
+
+        # sorted_key[space]value\n...
+        return join("\n", map { join(' ', $_, $ref->{$_}) } sort keys %$ref);
+
+    } elsif (UNIVERSAL::isa($ref, 'ARRAY')) {
+
+        # sorted space separated
+        return join(' ', sort @$ref);
+    }
+
+    return '';
+}
+
+sub TempFile { # writes data to a tempfile (optionally anonymous) and returns its path
+
+    my $self = shift;
+    my $data = shift;
+    my $file = shift;
+
+    # create anonymous tempfile or open specified file for writing
+    my($fh, $filename) = !defined $file ? tempfile(UNLINK => 0, DIR => $self->{tempdir}) : do {
+        my $dir = dirname($file);
+        mkpath($dir) if !-d $dir;
+        open(FH, ">$file") or die "Couldn't open $file: $!\n";
+        (\*FH, $file);
+    };
+
+    # add to list of tempfiles (for later deletion)
+    push @{$self->{tempfiles}}, $filename;
+    print $fh $data;
+    close($fh);
+
+    return $filename;
+}
+
+sub Test { # delegator method - calls the supplied CTestScore->Test
+
+    my $self = shift;
+
+    # run test using CTestScore object
+    return $self->{score}->Test(@_);
+}
+
+# test methods
+
+sub t_ListReleaseComponents { # tests CDelta::ListReleaseComponents
+
+    my $self = shift;
+
+    # call ListReleaseComponents
+    my $components = $self->{cdelta}->ListReleaseComponents();
+
+    # make expected result by combining the two component lists
+    my $expected = { %{$self->{gtlist}}, %{$self->{tvlist}} };
+
+    # compare string representations of both lists
+    $self->Test(
+        $self->Stringify($components) eq $self->Stringify($expected),
+        'Check ListReleaseComponents output');
+}
+
+sub t_ListPreviousComponents { # tests CDelta::ListPreviousComponents
+
+    my $self = shift;
+
+    # call ListPreviousComponents
+    my $components = $self->{cdelta}->ListPreviousComponents(
+        $self->{baseline}{name}, $self->{baseline}{version});
+
+    # expected test result is the dummy environment
+    my $expected = $self->{reldata}{env};
+
+    # test ListPreviousComponents return value
+    $self->Test(
+        $self->Stringify($components) eq $self->Stringify($expected),
+        'Check ListPreviousComponents output');
+}
+
+sub t_ListPreinstalledComponents { # tests CDelta::ListPreinstalledComponents
+
+    my $self = shift;
+
+    # call ListPreinstalledComponents
+    my $components = $self->{cdelta}->ListPreinstalledComponents();
+
+    # make expected test result from the dummy environment
+    my $expected = { map { ($_, $self->{reldata}{env}{$_}) } keys %{$self->{reldata}{env}} };
+
+    # test ListPreinstalledComponents return value
+    $self->Test(
+        $self->Stringify($components) eq $self->Stringify($expected),
+        'Check ListPreinstalledComponents output');
+}
+
+sub t_ListDirtyComponents { # tests CDelta::ListDirtyComponents
+
+    my $self = shift;
+
+    # call ListDirtyComponents
+    my $components = $self->{cdelta}->ListDirtyComponents($self->{reldata}{env});
+
+    # make expected result
+    my $expected = ['foo'];
+
+    # test ListDirtyComponents return value
+    $self->Test(
+        $self->Stringify($components) eq $self->Stringify($expected),
+        'Check ListDirtyComponents output');
+}
+
+sub t_PrepComponents { # tests CDelta::PrepComponents
+
+    my $self = shift;
+
+    # call PrepComponents
+    my $status = $self->{cdelta}->PrepComponents(
+        ['foo', $self->{baseline}{name}],
+        { %{$self->{gtlist}}, %{$self->{tvlist}} });
+
+    # test PrepComponents return value
+    $self->Test($status == 1, 'Check PrepComponents output');
+}
+
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/zdelta-2.1/group/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+// Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+// 
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+// 
+// Contributors:
+// 
+// Description:
+// 
+
+PRJ_PLATFORMS
+
+PRJ_EXPORTS
+
+../zdc.exe	   /tools/zdelta-2.1/zdc.exe
+../zdu.exe	   /tools/zdelta-2.1/zdu.exe
+
+PRJ_MMPFILES
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/zdelta-2.1/group/release.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,5 @@
+NOTESRC_RELEASER
+Symbian Software Ltd.
+
+NOTESRC_RELEASE_REASON
+Zdelta tools.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/releasing/zdelta-2.1/group/zdelta-2.1.mrp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+# 
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+# 
+# Description:
+# 
+
+component dev_build_releasing_zdelta-2.1
+
+source \src\tools\build\releasing\zdelta-2.1
+exports \src\tools\build\releasing\zdelta-2.1\group
+
+notes_source \src\tools\build\releasing\zdelta-2.1\group\release.txt
+
+ipr T
\ No newline at end of file
Binary file releasing/zdelta-2.1/zdc.exe has changed
Binary file releasing/zdelta-2.1/zdu.exe has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/RELEASE-NOTES.html	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,919 @@
+<html>
+<head>
+<title>Release Notes for Symbian Build System v2</title>
+</head>
+<body>
+
+<h1>Release Notes for Symbian Build System v2</h1>
+
+<h2>version 2.14.0</h2>
+
+<h3>New Features</h3>
+<ul>
+<li><a href="notes/tcomsupport.txt">           Support new Trace Compiler commandline interface, autogen header location   </a></li>
+<li><a href="notes/parametric_log_filters.txt">   Pass parameters to log filters from the command line </a></li>
+<li><a href="notes/delete_on_failed_compile.txt"> Work-around for failed RVCT 2.2 compiles             </a></li>
+<li><a href="notes/query_cli.txt">                Obtain configuration data using --query option       </a></li>
+<li>                                              Carbide.xml now contains *_gcce aliases                  </li>
+<li><a href="notes/abiv1_implibs.txt">            ABIv1 import libraries not generated by default      </a></li>
+</ul>
+
+<h3>Defect Fixes</h3>
+<ul>
+
+<li><a href="http://developer.symbian.org/bugs/show_bug.cgi?id=2605"> SF Bug 2605 </a> - [Raptor] ROMFILE creation using Raptor is not clean </li>
+<li><a href="http://developer.symbian.org/bugs/show_bug.cgi?id=2495"> SF Bug 2495 </a> - [Raptor] KDLL TARGETTYPEs do not support .def file freezing </li>
+<li><a href="http://developer.symbian.org/bugs/show_bug.cgi?id=2420"> SF Bug 2420 </a> - [Raptor] Output from recipes is mis-recognised as "what" output </li>
+<li><a href="http://developer.symbian.org/bugs/show_bug.cgi?id=2297"> SF Bug 2297 </a> Python exception in raptor_meta.py when processing bld.inf file </li>
+<li><a href="http://developer.symbian.org/bugs/show_bug.cgi?id=2174"> SF Bug 2174 </a> - [Raptor] -- layer option shows errors when bld.inf missing in another layer </li>
+<li><a href="notes/tcomsupport.txt">Fix: ensure trace paths exist before build starts to avoid clashes during the build with some make engines    </a></li>
+<li><a href="notes/tcomsupport.txt">Fix: permit traces header directory to be specified in systemincludes - helps Qt    </a></li>
+<li><a href="notes/localresourcecopying.txt">Fix: (performance in cluster builds) do resource copying on local host.</a></li>
+<li>Fix: don't generate multiple copies of the same resource just because there are several target paths. Generate it once and copy that to the different target paths. Helps when winscw is built after an arm build.</li>
+<li>Fix: (performance) remove unnecessary copying of rpp files into epoc32\localisation as they are not used.</li>
+<li>Fix: (performance) remove -C option when preprocessing rpp files - causes comments to be stripped from the rpp resulting in smaller files that improves performance.</li>
+
+</ul>
+
+
+<h2>version 2.13.0</h2>
+
+<h3>New Features</h3>
+<ul>
+
+<li><a href="notes/featurevariantsafe.txt">    Support for FEATUREVARIANTSAFE in BV builds              </a></li>
+<li><a href="notes/cygwin_1_7.txt">            Support for Cygwin 1.7                                   </a></li>
+<li><a href="notes/cross_compiling_tools.txt"> Support for cross-compiling win32 tools on Linux         </a></li>
+<li><a href="notes/system_definition_v3.txt">  Prototype support for reading System Definition v3 files </a></li>
+<li><a href="notes/epocnestedexceptions.txt">  New MMP keyword EPOCNESTEDEXCEPTIONS                     </a></li>
+
+</ul>
+
+<h3>Defect Fixes</h3>
+<ul>
+
+<li>DPDEF143018      - Raptor doesn't handle spaces in GCCE installation directory correctly                                                </li>
+<li>DPDEF143101      - GCC-E isn't tested as part of the tool checking mechanism                                                            </li>
+<li>DPDEF141195      - Raptor doesn't handle spaces in tool paths                                                                           </li>
+<li><a href="http://developer.symbian.org/bugs/show_bug.cgi?id=2172"> SF Bug 2172 </a> - [Raptor] Resource builds warn on encountering trigraph-like strings                                                  </li>
+<li><a href="http://developer.symbian.org/bugs/show_bug.cgi?id=2308"> SF Bug 2308 </a> - [Raptor] PLUGIN3 TARGETTYPEs don't set resource output offsets correctly                                             </li>
+<li>Fix: in copylogfromannofile mode, ensure that the build id and duration are included in the log.  These are not critical but are useful </li>
+<li>Fix: remove unnecessary empty lines in log output in copylogfromannofile mode                                                           </li>
+<li><a href="http://developer.symbian.org/bugs/show_bug.cgi?id=1939"> SF Bug 1939 </a> - [Raptor] PAGED keyword in MMP files should imply byte pair compressed                                                </li>
+<li>DPDEF144648      - Raptor failed to build tools_deb objects under Windows XP                                                            </li>
+<li><a href="http://developer.symbian.org/bugs/show_bug.cgi?id=2134"> SF Bug 2134 </a> - [Raptor] Raptor does not pass overridden make variables into its makefiles                                           </li>
+<li>Fix : do not allow data to be paged implicitly</li>
+<li><a href="http://developer.symbian.org/bugs/show_bug.cgi?id=2302"> SF Bug 2302 </a> - sbs_filter refers to python.exe in win32/python264/                                                                  </li>
+<li>Fix : Makefile Parse Performance in Resource stage is poor. Large size of included dependency files is a factor. In --no-depend-generate mode, create dependency files which only refer to other rsg/mbg files that are yet to be built - store no other dependencies.</li>
+<li>Fix : ensure that FLMDEBUG is empty by default</li>
+</ul>
+
+<!-- older notes are plain text -->
+<pre>
+version 2.12.5
+
+Defect Fixes:
+- Fix: Workaround for emake engine log corruption when clockskew errors occur (annofile2log).
+  Allow Raptor to obtain log from emake annotation file where it is uncorrupted.  A new 
+  Make engine option "copylogfromannofile" enables/disables this mode for emake. If this option is disabled
+  or if no annotation file is specified for the build then Raptor reads logs directly as normal.
+- SF Bug 2125 - [Raptor] - tracecompiler what output incorrect if mmp basename contains '.' e.g. fred.prd.mmp 
+- SF Bug 2191 - [Raptor] - When forcesuccess is enabled, exit status for a failed recipe is "retry" but should be "failed"
+- Fix: extend tracecompiler tests to Linux
+- Fix: Amendment to SF Bug 1511 fix - removal of blanked DEFFILE keyword from e32abiv2ani.flm
+- Fix: improve robustness to bad -c options
+
+
+version 2.12.4
+
+Defect Fixes:
+- SF Bug 2113 - [Raptor] what/check filters can assign files to the wrong components
+- SF Bug 2081 - [Raptor] - Exported file executable permissions not maintained (linux)
+- Fix: host attribute in recipes was blank in windows, windows cluster builds.
+- SF Bug 1912 - Raptor should take python from the path [if not set with SBS_PYTHON or bundled with Raptor]
+- SF Bug 2042 - [Raptor] component field empty in recipe
+- SF Bug 2007 - [Raptor] GCCE 4.4.1 builds require 4.3.1 and 4.3.2 SBS_GCCE???BIN env vars etc.
+- SF Bug 2000 - [Raptor] Talon fails when installed in a path containing the string '-c' (windows only)
+- SF Bug 1861 - [Raptor] More helpful console message in case of timeouts
+- SF Bug 1571 - Raptor cannot report error or warning message in wrong implib project
+- DPDEF142718 Incremental rebuild fails if dependent files deleted
+  --no-depend-generate added to suppress the generation and processing of dependency files
+  .DEFAULT target introduced for all non --no-depend-generate and/or --no-depend-include builds
+- Add support for PLUGIN3 TARGETTYPEs
+- Fixing logfile corruption for large GCCXML builds by suppressing zip output
+- Stop copying .bmp files to epoc32/localisation and fix the "what" reporting
+
+
+version 2.12.3
+
+Defect Fixes:
+- Don't print trace "what" information if we do not run the trace compiler.
+
+
+version 2.12.2
+
+Defect Fixes:
+- SF Bug 1569 - excessive recompilation in incremental tracecompiler builds
+- Better error messages for make-engine selection.
+  e.g. "sbs -e arm" will now produce a useful error message rather than 
+  a traceback. "arm" is a real variant but it's not a make engine.  In
+  the past sbs would have tried to use it and would have failed with a
+  complicated traceback. Also doesn't traceback for non-existent make engines.
+- sbs_filter chose wrong embedded default python version. Set to 2.6.4 now.
+- FilterCheck did not check files when run from sbs_filter
+- Remove old references to python 2.5.2
+- Escape filenames with special XML characters inside &lt;member&gt; tags
+
+
+version 2.12.1
+
+Defect Fixes:
+- SF Bug 1494 - sbs --what does not report Trace Compiler output
+- sbs -c winscw.tracecompiler uses wrong UID and doesn't generate traces
+- SF Bug 1519 - Raptor output files may contain unescaped left angle brackets as XML character data
+
+
+version 2.12.0
+
+New Features:
+- New 'Patchable Constants' target type: TARGETTYPE pdll
+- Combine Linking and Postlinking into a single step - performance improvement.
+- Support exit codes from next version of the trace compiler which will issue them
+- New sbs_filter script and batchfile to ease the use of sbs_filter.py.  
+  Allows filters to be executed over a log after a build has been done.
+    e.g.
+
+  	sbs_filter --filters=FilterWhat < logfile.log 
+
+    (This runs a "--what" without regenerating any makefiles or reparsing
+    the matadata.)
+- New (beta) FilterWhatComp filter.  Simulates abld log output for
+  use with parse_what.pl for packing up zips by component.  Whatcomp output
+  uses the incoming epocroot value.  i.e. if epocroot is relative then so is
+  the what output.  e.g. if EPOCROOT=\ then the output will be of the form:
+
+	"\epoc32\release\armv5\...."  
+
+  If it's "..\myepocroot" then the output will be:
+
+	"..\myepocroot\epoc32\release\armv5".  
+
+  If it's absolute then the what output will also be absolute.
+- New FilterCheck filter.  This can be used with sbs_filter to perform the 
+  equivalent of --check using the log output from a build.  It is more
+  efficient than --check because the metadata is not parsed and no makefiles
+  are generated. e.g.
+
+	sbs_filter --filters=FilterCheck < logfile.log 
+
+- New (beta) graphical build visualisation tool (bin/timelines.py). 
+  Requires pygame and PyOpenGL. e.g.
+
+	python timelines.py < filename.log
+
+- New (beta) log analyser (recipestats.py) for recording the total time spent 
+  in each type of recipe in the build. e.g.
+
+	python recipestats.py < filename.log > stats.csv
+
+  The output is in CSV format.  
+
+Defect Fixes:
+- fix for ARM9E + ARMV5 pre-processing confusion
+- SF bug 1606: template_ext.flm wrongly creates dependencies to OTHER_CFG targets
+- SF bug 1570: Adding then removing a capability can produce incorrect 
+  result: e.g. ALL TCB -TCB becomes ALL -TCB but it should be just ALL
+
+Other Changes:
+- Default to using Python 2.6.4 on windows (no change in compatibility with 
+  older versions of Python).
+
+
+version 2.11.3
+
+Defect Fixes:
+DPDEF142616 Raptor: Variables can be set unnecessarily prior to TEM execution
+Fix for: filter terminal flags up when recipe truncated
+SF bug 170: invalid XML output when a zip file is missing
+SF bug 518: unpaged keyword in mmp files is not parsed properly
+
+
+version 2.11.2
+
+Defect Fixes:
+DPDEF143176 raptor does not respect STDCPP mmp file keyword
+
+
+version 2.11.1
+
+Other Changes:
+GCCE 4.4.1 variant added
+Restored python 2.4 compatibility
+Minor TOOLS2 --what corrections
+Retain Linux execute permissions on unpacked :zip archives
+Prototype of extended timing API added
+Option --noexport added for parallel parsing
+Made --noexport and --export-only mutually exclusive
+SBS_PYTHONPATH insulates sbs from the global PYTHONPATH
+Removed spurious bracket in e32abiv2textnotifier2
+More robust to multiple import library definitions
+
+
+version 2.11.0
+
+New Features:
+Parallel parsing of meta-data
+New keyword APPLY for MMP files
+SAX filter plugin base-class
+
+Defect Fixes:
+DPDEF142895 Raptor does the wrong thing with the ARMFPU keyword
+DPDEF143020 The savespace variant overrides elf2e32's return code
+DPDEF143046 BYTEPAIRCOMPRESSTARGET and INFLATECOMPRESSTARGET not in FLM interface
+Improved error reporting for --check and --what
+
+
+version 2.10.2
+
+Defect Fixes:
+DPDEF142958 regression - ARMV6 and __ARMV6__ are not defined for armv6_urel builds
+DPDEF142730 Raptor crashes with improper VERSION syntax
+DPDEF142928 RVCT 4.0: Linker error when the MMP files modifies the --cpu option
+
+
+version 2.10.1
+
+Defect Fixes:
+DPDEF142666 Cannot remove frozen exports from EABI DEF file in SBSv2
+DPDEF142745 OPTION_REPLACE problems with RVCT 4.0
+DPDEF140622 feature variant configuration file with non exist file set to 'FEATURELISTFILES'
+DPDEF141195 Raptor doesn't handle spaces in tool paths
+DPDEF142616 Raptor: Variables can be set unnecessarily prior to TEM execution
+DPDEF142455 Disable warning L6780W for certain components
+DPDEF142447 GCC-E: Raptor compiles CIA files as Thumb
+DPDEF142448 GCC-E: Raptor tries to build ABIV1 import libraries
+DPDEF142451 GCC-E: Raptor treats C files as C++ files.
+
+
+version 2.10.0
+
+New Features:
+Support for GCCE compiler
+More efficient Feature Variation support
+
+
+version 2.9.3
+
+Defect Fixes:
+DPDEF142166 Raptor sometimes invokes checklib.exe with incorrect parameters
+DPDEF141354 EXPORTUNFROZEN fails in target builds if .savespace is applied
+DPDEF141533 Inconsistent log output
+DPDEF141604 file winscw.auto.bat is released two times
+DPDEF141787 Raptor treats EFREEZE info message as warnings
+	
+Other Changes:
+talon can read commands from a temporary file as well as with -c
+
+
+version 2.9.2
+
+Defect Fixes:
+DPDEF141531 Incorrect RVCT variables passed to TEM
+DPDEF141837 Some problems with dependency (.d) files
+DEF140258 Aborting SBSv2 mid-build often leads to corrupt .d files which prevent rebuilds
+DPDEF142049 Garbage in the Raptor log file
+DPDEF141954 Raptor: "tools" config static libraries can have incorrect compilation macros
+DPDEF141974 Raptor: "tools" builds can fail when done in combination with "tools2" builds
+
+Other Changes:
+Static libraries cannot be feature variant
+Option --no-depend-include for very big builds
+
+
+version 2.9.1
+
+Defect Fixes:
+DPDEF141503 RMTPClient::StartTransport Panic when using emulated test tranport plugin
+DPDEF141688 ARMV6 builds with SBSv2 have problems with missing DEF files
+	
+
+version 2.9.0
+
+New Features:
+Talon shell to reduce memory usage and improve stability.
+Support for RVCT 4.0 advanced features.
+Optionally use SBS_CYGWIN, SBS_MINGW and SBS_PYTHON to locate tools.
+Makefile to build host tools on Linux.
+Single-file compilation for IDE integration.
+Splitlog and CheckSource filters.
+
+Defect Fixes:
+DPDEF141523 Raptor links kernel-side components to scppnwdl.dso
+DPDEF141418 Raptor turns echo on
+DPDEF141495 Raptor doesn't deal correctly with SOURECEPATH beginning with '/'
+DPDEF141388 raptor inserts epoc32\include at start of systeminclude path	
+
+
+version 2.8.6
+
+DPDEF135505 Some TEMs have race conditions for simultaneous urel and udeb. cp fails.
+DPDEF141498 If make crashes, Raptor exits with 0 errors
+DPDEF141071 Raptor: GCCXML build does not support the VAR2 TARGETTYPE
+DPDEF140816 STDCPP keyword in mmp file not interpreted by gccxml tool chain
+DPDEF137727 [Raptor Rollout] Raptor fails to build certain .mbg and .rsg files
+DPDEF137494 SBSv2: preprocessor warnings and errors might cause invalid XML in log
+DPDEF140731 Missing dependency files when building from clean
+DPDEF140540 [System Build]: Changes of Raptor cause 94_331 build failed
+DPDEF141129 raptor generates unknown origin file
+
+Other Changes:
+Fix to support trace compiler switch
+Better message for duplicate objects, states which file overrides which.
+Refactor to avoid "defects" of missing OS variants.
+
+
+version 2.8.5
+
+Defect Fixes:
+DPDEF141102 SBS doesn't set the paging attribute of excutables correctly
+DPDEF140731 Missing dependency files when building from clean
+DPDEF135620 Workaround for broken static libraries
+
+
+version 2.8.4
+
+Defect Fixes:
+DPDEF140839 RComp crashes if it's built with sbs
+DPDEF140929 OPTION GCCE in MMP files generates a build warning
+DPDEF135436 SBSv2 - Python traceback when illegal characters appear on command line
+
+
+version 2.8.3
+
+Defect Fixes:
+DPDEF139904 Raptor: .def file FREEZE attempted for ARMV5 when it shouldn't be
+DPDEF140589 Raptor: .def file FREEZE attempted for WINSCW when it shouldn't be
+DPDEF140456 Raptor build error with -c tools_rel
+DPDEF139759 Raptor warning regarding EXPORTSUNFROZEN is ambiguous
+DPDEF135436 SBSv2 - Python traceback when illegal characters appear on command line
+INC140156 SBSv2 crashes when build QtWebkit for ARMV5
+
+Other Changes:
+Add &lt;info&gt; to show which variant.hrh file is used.
+Replaced the corrupted awk.exe in cygwin distro.
+Fix previous trace compiler auto run mechanism.
+ROMFILE improvements.
+
+
+version 2.8.2
+
+Defect Fixes:
+DPDEF140540 [System Build]: Changes of Raptor cause 94_331 build failed
+
+Other Changes:
+Tolerate XML schema 1_0 files where possible.
+Treat system definition schema 1.[3-9] files the same as schema 1.4 files.
+Remove checksource and its python site-packages.
+
+
+version 2.8.1
+
+Defect Fixes:
+DPDEF140165 SBS error when creating info.xml on component base_omaph2
+DPDEF132996 Location of generated auto.bat files is inconsistent
+
+Other Changes:
+Feature variant "ln -f" fails intermittently in parallel builds.
+Traceback when "group" elements are redefined in XML.
+Trace compiler should run automatically if a trace path exists.
+Need a workaround for Carbide Missing SDK problem.
+
+
+version 2.8.0
+
+New Features:
+XML schema 2.0 with new alias and group elements.
+
+Removed:
+XML config element (use var instead).
+XML .first and .last mechanism (use alias or group instead).
+
+Defect Fixes:
+DPDEF140082 SBS cause env to dirty state
+DPDEF138565 SBSV2 doesn't define the correct macros for ARMV6
+DPDEF139950 SBSv2 Filter Handling not Robust enough - bad filters stop build.
+DEF139686 [TCL Build] coredumpserver compile warnings in DP00458
+
+
+version 2.7.2
+
+Defect Fixes:
+DPDEF139420 Raptor config does not correctly handle mifconv causing resource build errors
+DPDEF138679 Raptor does not create a DEFFILE when building for winscw_urel
+DPDEF139692 SBSV2: 'virtual memory exhausted' when building multiple variants
+DPDEF136321 SBSv2: Zip exports not cleaned
+INC139622 OPTION_REPLACE does not work properly in SBSv2
+
+Other Changes:
+Added utility.prebuilt FLM.
+
+
+version 2.7.1
+
+Defect Fixes:
+DPDEF138366 [T15379] Raptor raise some warnings when build Coredumpserver
+DPDEF139405 SBSV2: Trace compilation fails with large numbers of files.
+DPDEF139572 SBSV2: Changes to '--cpu' option syntax breaks existing MMP files.
+DPDEF139456 Toolcheck file is not created if EPOCROOT is \
+DPDEF133766 Poor SBSv2 reallyclean performance
+DPDEF135780 SBSV2: REALLYCLEAN is not cleaning all files
+
+
+version 2.7.0
+
+New Features:
+DS.1744 Recognize LINKEROPTION in MMP file
+DS.1744 Compiled objects on local filesystem (SBS_BUILD_DIR)
+
+Partial Deliveries:
+DS.1744 CheckSource in Raptor
+
+Defect Fixes:
+DPDEF138293 Carbide: Raptor doesn't resolve variant.cfg entries starting with "\" correctly
+
+
+version 2.6.5
+
+Defect Fixes:
+DPDEF138930 Raptor needs to change to match new trace compiler interface
+
+
+version 2.6.4
+
+Defect Fixes:
+DPDEF138527 [TCL Build] Miss tracecompiler.mk and exclude group for Raptor export
+DPDEF138484 Raptor uses wrong guard causing trace compiler ignores some projects.
+DPDEF138720 BV product folders have missing map files
+DPDEF138721 Raptor uses wrong lib when mmp keyword FIRSTLIB presents.
+DPDEF138053 SBSv2: tools platform: tools not installed by the time they need to be used.
+DPDEF138164 Carbide: Raptor crashes on unrecognised buildinfo.txt content
+DPDEF138296 SBSV2 disables all TOOLS2 compiler warnings
+DPDEF138329 Raptor generates marker file for trace compiler when it's not done
+DPDEF138352 SBSv2: rollout - unsplit EC makefiles not generating correct deps 4 missing .mbg
+DPDEF138480 SBSv2: rollout. Created files sometimes have insufficient permissions on Windows
+DPDEF137511 SBSv2 doesn't behave correctly with the default paging policy
+
+
+version 2.6.3
+
+Defect Fixes:
+DPDEF133508 Number of errors is counted wrong
+DPDEF138098 UID issue in Trace Compiler for Raptor 
+DPDEF138296 SBSV2 disables all TOOLS2 compiler warnings
+
+
+version 2.6.2
+
+Defect Fixes:
+DPDEF135330 Raptor Rollout: bangalore messaging winscw udeb test code
+DPDEF137726 Missing mscvr_readme.txt from the SBSv2 drop
+DPDEF137739 SBSv2: rollout - .cia object files can conflict with .cpp object files 
+
+
+version 2.6.1
+
+Defect Fixes:
+DPDEF137239 raptor does not include the msvcr71 runtime library
+DPDEF137489 BV builds try and write generated .s files in the wrong directory
+
+
+version 2.6.0
+
+New Features:
+DS.1542 SBSv2 generates Open System Trace dictionaries
+DS.1629 Resource autodependencies
+
+
+version 2.5.5
+
+Defect Fixes:
+DPINC137379 Emulator: Cursor is missing on emulator buttons
+DPDEF133640 SBSv2 usrt3_1.lib is missing from epocroot/epoc32/release/armv5/
+
+
+version 2.5.4
+
+Defect Fixes:
+DPDEF136719 Raptor: sbsv2cache.py cache file generation fails with very large log files
+DPDEF136715 On Linux the shipped python 2.5.2 is not found
+DPDEF132996 SBSv2 doesn't generate AUTO.BAT file
+DPDEF136382 SBSv2: explicit dll versioning not supported on arm platforms 	
+DPDEF135843 [Raptor Rollout] Raptor does not support OPTION_REPLACE ARMASM/OPTION ARMASM
+DPDEF136693 makesis fails when multiple instances are run concurrently with the same target
+
+
+version 2.5.3
+
+Defect Fixes:
+DPDEF136162 Raptor: resource dependencies require metadata workarounds
+DPDEF128288 SBSv2 does not fully support build target customization.
+DPDEF132880 BV builds cannot find system static libraries
+DPDEF133835 SBSv2 cannot build for ARMV6 or ARM9E
+
+
+version 2.5.2
+
+Defect Fixes:
+DPDEF135983 cpp-raptor crashes if source code contains builtin macro __FILE__
+DPDEF133808 Raptor does not support OPTION --no_rtti with mixed assembly/C++ projects
+DPDEF135577 SBSv2: rollout - TOOLS/TOOLS2 exes sometimes not executable or writable.
+
+
+version 2.5.1
+
+Defect Fixes:
+DPDEF135258 createvmap.py script can hang in BV builds
+DPDEF135385 warnings in RunModeDebugger in M04816vFuture with ARMV7
+
+
+version 2.5.0
+
+New Features:
+DS.1568 User defined configuration file location(s)
+
+
+version 2.4.3
+
+Defect Fixes:
+DPDEF134322 SBSV2 uses the wrong library when building STDCPP targets 	
+DPDEF132923 SBSv2 freeze don't add Vtable and RTTI information into def file for arm dll
+DPDEF133775 SBSv2: ARMFPU is not passed to compiler
+DPDEF134023 case inconsistency with libOpenVG.lib
+
+Other Changes:
+MINOR_CHANGE updated all copyright notices for SF delivery
+MINOR_CHANGE added vtb91sf variant for SF Timebox 9:1 builds
+MINOR_CHANGE added vtb92sf variant for SF Timebox 9:2 builds
+
+
+version 2.4.2
+
+Defect Fixes:
+DPDEF133820 Raptor Rollout: EXPORTUNFROZEN processing incorrect in ARMV5 builds
+DPDEF132033 Raptor picks up the wrong bld.inf macros when building for RVCT 3.1
+DPDEF133772 SBSv2: console log includes some winscw warnings that should be suppressed
+
+
+version 2.4.1
+
+Defect Fixes:
+DPDEF133639 Raptor Rollout:TEF test server doesn't start under SBSv2 - OK with abld
+DEF133255 [System Build]: Error in compiling NaviEngine Unistore on ARMV7 M04816 vFuture
+DPDEF127973 Freeze fails with SBSv2 under some environments
+
+
+version 2.4.0
+
+New Features:
+DS.1475 Pluggable Log Summariser
+DS.1476 Use FLMs from the source tree  
+
+Defect Fixes:
+DPDEF133417 SBSv2: tmp mounting errors on startup
+
+
+version 2.3.3
+
+Defect Fixes:
+DPDEF130261 sbs does not support explicit option to version keyword
+DPDEF130598 sbs does not provide debug and nodebug variants
+DPDEF131630 Raptor smoke tests break when EPOCROOT=\ on Windows
+DPDEF132898 no TEM nbl2.lib dependencies for armv7
+DPDEF133035 SBSv2 - Tools2 build does not include -m32 option.  Stlport flm also doesn't.
+DPDEF133176 SBSv2 ignores compillation error for "unidentified identifier" for winscw build
+
+
+version 2.3.2
+
+Other Changes:
+MINOR_CHANGE added vtb92 variant for Timebox 9:2 builds
+
+
+version 2.3.1
+
+Defect Fixes:
+DPDEF132374 SBSv2: Directory creation can fail leading to build errors
+DPDEF132070 SBSv2: stlport 5.2 build fails - library generated to wrong directory
+DPDEF128378 SBSv2 help for global targets only shown when a target is given
+DPDEF129634 ALWAYS_BUILD_AS_ARM does not suppress __MARM_THUMB__ with SBSv2
+
+
+version 2.3.0
+
+New Features:
+DS.1424 Support for ARMV5SMP platform  
+
+Defect Fixes:
+DPDEF129804 SBSv2 crashes when there are double \\ in prj_mmpfiles in bld.inf
+DPDEF130892 SBSv2: Reallyclean fails on TEM files
+DPDEF131619 SBSv2: ABIv1 .lib files aren't generated for -c armv5 -c armv5.smp
+DPDEF131637 SBSv2: stlport can fail to build under Cygwin - "/tmp no such directory"
+DPDEF131891 [System Build]: Errors in GT stage in Build M04774 vfuture
+
+
+version 2.2.9
+
+Defect Fixes:
+DPDEF129804 SBSv2 crashes when there are double \\ in prj_mmpfiles in bld.inf
+DPDEF131637 SBSv2: stlport can fail to build under Cygwin - "/tmp no such directory"
+DPDEF130892 SBSv2: Reallyclean fails on TEM files
+
+
+version 2.2.8
+
+Defect Fixes:
+DPDEF130569 .lib files for SSM targets build with different name compared to abld
+DPDEF130571 libxml2 component contains GCCXML build errors
+DPDEF131312 SBSv2 - DEBUGGABLE_UDEBONLY not supported by SBSv2 (Raptor)
+
+
+version 2.2.7
+
+Defect Fixes:
+DPDEF130533 SBSv2 fails to run when installed from SITK
+DPDEF130452 Some rcomp warnings need to be disabled
+DPDEF130286 SBSv2: sbs freezes during CLEAN and REALLYCLEAN operations.
+DPDEF127973 Freeze fails with SBSv2 under some environments
+DPDEF128455 Error during freeze with SBSv2
+DPDEF127149 SBSv2 TEM/extension makefile build doesn't support the .savespace variant
+
+
+version 2.2.6
+
+Defect Fixes:
+DPDEF130008 SBSv2 should recognize these new keywords: SMPSAFE, PAGEDCODE, PAGEDDATA, UN...
+DPDEF127887 Current directory wrong when executing extension makefiles in SBSv2
+DPDEF128915 CCheckEnv ERROR: CBRPatch: Absent file
+DPDEF127675 Raptor does not process stringtables correctly when HEADERONLY is on
+DPDEF127878 give wrong mmp filename for -p option should cause error in SBSv2
+
+Other Changes:
+Uses cygwin instead of msys for improved stability.
+Includes python 2.5.2 instead of using py2exe.
+
+
+version 2.2.5
+
+Defect Fixes:
+DEF127329 OMAP H4 Unistore2 Failure in Raptor 9.5 GT build
+DPDEF128632 SBSv2 : bld.inf ':zip' exports don't maintain timestamps, with an e32 impact
+DPDEF127399 SBSv2 -p [filename].mmp options also builds .mk files
+
+
+version 2.2.4
+
+Defect Fixes:
+DPDEF129187 SBSv2: ABIv1 .lib files are required (again)
+
+
+version 2.2.3
+
+Defect Fixes:
+DPDEF128916 C Standard Library failed on cia2cpp2o armv5 with 1
+DPDEF128503 sbs 2.2.0 produce malformed xml log on Linux with pvmgmake
+DPDEF127604 SIS registry panics at startup on emulator if SWI is built with SBS
+DPDEF128690 SBSv2 generates error when using emake on REALLYCLEAN target
+
+Other Changes:
+MINOR_CHANGE log summariser updated to deal with errors starting "make.exe: ***"
+
+
+version 2.2.2
+
+Defect Fixes:
+DPDEF127497 SBSv2 does not clean when -k or other switch is used with abld wrapper
+DPDEF127829 'cannot open Meta file' warning with SBSv2
+DPDEF127371 abld -v not working correctly through sbsv2
+DPDEF127555 SBSv2 doesn't do "romfile"
+
+Other Changes:
+MINOR_CHANGE made the default number of jobs 4
+
+
+version 2.2.1
+
+Defect Fixes:
+DPDEF128498 SBS creates paths with extra slashes which can cause problems
+
+Other Changes:
+MINOR_CHANGE Removed temporary ABIv1 .lib generation
+MINOR_CHANGE Added monty test data to the test folder
+
+
+version 2.2.0
+
+New Features:
+DS.1347 SBSv2 Compiler Selection  
+DS.1348 SBSv2 allow mixed slashes
+
+Defect Fixes:
+DPDEF127904	SBSv2 : recent installdefaultcommdb has broken the 9.4 build
+DPDEF128022	SBSv2: Unrecognised Keyword ['romtarget  some_file.dll'] warnings
+DPDEF127815	SBSv2: PAGED and EPOCCALLDLLENTRYPOINTS keywords not supported
+DPDEF127890	SBSv2:  TARGETPATH in mmps (also resources, bitmaps) must cope with backslashes
+DPDEF128229 SBSv2: some command invocations can fail, but could be "re-tried"
+
+
+version 2.1.10
+
+Defect Fixes:
+DPDEF126662	Intermittent networking_dhcp compilation failure in Raptor build GT phase
+DPDEF127799	SBSv2: zip and unzip commands not found in some builds
+DPDEF127665	ARMV7 libraries have wrong link order in Raptor
+
+
+version 2.1.9
+
+Defect Fixes:
+DPDEF127498	SBSv2: importlibversioned_abiv1 intermittently fails in ARMV5 builds
+DPDEF125483	CDB breaks due to Attribute values not matching expected values
+DPDEF126335	Intermittent GT errors due to "make" not being found on the PATH
+DPDEF127562	SBSv2 will not unzip the same file into more than one location
+DPDEF127626	SBSv2: sed version on windows is out of date
+
+
+version 2.1.8
+
+Defect Fixes:
+DPDEF125478	CDB breaks caused by file path/name mismatch
+DPDEF125145	Incorrect file access permissions for sbs v2.0.14 in Linux distribution
+DPDEF126126	Intermittent "Segmentation fault" error in Raptor GT phase
+DPDEF124836	SBSv2 cannot build just a single .mmp file from a bld.inf file
+DPDEF126675	Performance regression in SBSv2 python frontend caused by regex usage,
+DPDEF126790	groupin10 is not used in artarget_func
+DPDEF125639	TEM variables are reported incorrectly when building TEM for ARMV7
+DPDEF124273	abld help is ugly and hard to read
+DPDEF126614	"Virtual memory exhausted. Stop" error when building with SBSV2
+
+
+version 2.1.7
+
+Defect Fixes:
+DPDEF124290 SBS -e pvmgmake -j 12 on Linux produces malformed xml log files
+DPDEF126241	SBSv2 : SECURE_DATA error when building uiklaf toolkit in TechView
+DPDEF126328	Performance regression and related excessive memory usage in daily Raptor builds
+
+
+version 2.1.6
+
+Defect Fixes:
+DPDEF125740	SBSv2: Builds can hang during the GT stage in Windows builds when using "-j x"
+DPDEF125145	Incorrect file access permissions for sbs v2.0.14 in Linux distribution
+
+
+version 2.1.5
+
+Defect Fixes:
+DPDEF125812	There is no user created init.xml configuration file
+
+
+version 2.1.4
+
+Defect Fixes:
+DPDEF124680 Raptor builds hang  at "tools2" compilation phase
+DPDEF125304 Raptor crashes when running abld
+
+
+version 2.1.3
+
+Defect Fixes:
+DPDEF125394 sbs_2.1.0_(RC1) Building complete OS gives armasm errors on Windows
+DPDEF122556 GT0367: CLEANEXPORT target is not cleaning files with a space in them
+DPDEF124691 Raptor should ignore the new SMPSAFE keyword
+DPDEF125031 SBSv2 Stringtable build fails when EXPORTPATH specified
+
+
+version 2.1.2
+
+Change Requests:
+CR1413 Support for different toolchains to be called by SBSv1 and SBSv2
+
+
+version 2.1.1	
+
+Defect Fixes:
+DEF124748 GCCXML errors in Raptor related to missing arm lib files
+DEF124756 Raptor build : Orphan files reported in CBR phase
+DEF124758 Raptor build CBR errors due to missing ".a" files
+DEF124573 CDB breaks in Raptor build due to missing header,dll and lib files
+
+
+version 2.1.0
+
+Change Requests:
+CR1479 Add Armv7 support into SBSv2
+
+Defect Fixes:
+DEF124543 Raptor does not handle the STDCPP keyword correctly
+DEF124515 GT0367: 'bldmake plat' should now show ARMV7
+
+
+version 2.0.14
+
+Defect Fixes:
+DEF124705 CBR errors in raptor builds due to missing rpp files
+DEF120328 SBS v2.0 configuration files cannot be validated
+INC124096 Long list of MMP macros causes crashdump with .s files
+DEF124702 GT0367: Semaphores need altering to correct possible hangs (on Linux)
+
+
+version 2.0.13
+
+Defect Fixes:
+DEF123653 SBS -j 16 on Windows produces malformed xml log files
+
+
+version 2.0.12
+
+Defect Fixes:
+DEF123987 Raptor does not build a lot of .lib files for ARMV5
+DEF123981 SBSv2 doesn't generate DSO when EXPORTUNFROZEN is specified.
+
+
+version 2.0.11
+
+Defect Fixes:
+DEF123988 SBSv2 does not produce rpp files
+DEF123766 SBSv2 log output does not match the specification
+DEF122781 GT0367: 'bldmake bldfiles' output not going to stdout
+DEF122885 GT0367: Need to stop sbs -abld functioning on Linux
+DEF123354 GT0367: Incorrect output if the number of jobs provided is invalid
+
+
+version 2.0.10
+
+Defect Fixes:
+DEF123984 SBSv2 generates more warnings than abld
+DEF124139 GT0367: SBS causes a Python Traceback when a system_definition.xml error occurs
+DEF123601 SBSv2 : Python traceback error is reported when try to build systemtest code
+DEF123916 SBSv2 : "tools" build warns about overrides when "OPTION MSVC /w" in .mmp files
+
+
+version 2.0.9
+
+Defect Fixes:
+PDEF124028 .GXP files not getting created when built for GCCXML target
+DEF123653 SBS -j 16 on Windows produces malformed xml log files
+DEF123586 dso file is not remade when def file changes
+DEF122541 SBSv2 -what should report resource files
+DEF123265 Incorrect file access permissions for sbs v2.0.7 in Linux dist
+DEF123317 SBSv2 -what got error for whatexports if too much exports
+DEF123439 SBSv2 : Exports not performed in total before .mmp processing in sysdef builds
+DEF123552 STLport doesn't build with Raptor on Linux
+DEF123260 GT0367: Circular references in config files not handled
+
+
+version 2.0.8
+
+Defect Fixes:
+DEF122930 SBSv2:Target type exexp giving errors while building for winscw
+DEF123028 Raptor generating double slashes in command files
+DEF123048 SBSv2: build with -k (keep-going) stops when export makefile has a failure.
+DEF123069 False 'missing mmp file' errors reported by SBSv2
+DEF122472 SBSv2 doesn't report content of unpacked zip files
+DEF122534 SBSv2 -what should not report .sym files
+DEF123181 SBSv2: Failure of one export in python aborts remaining exports for bld.inf
+DEF123289 SBSv2 : Netcards doesn't build for "tools" in an SBSv2 build
+DEF123418 SBSV2: stlport build can fail with "no rule to make target"
+DEF123084 SBSv2: exits with an exception if -c option specifies non-existent configuration
+INC122876 Electric Accelerator build fails with Raptor
+
+
+version 2.0.7
+
+Defect Fixes:
+DEF122784 Large MMP files and GNUMAKEFILE causes shell to crash
+DEF122760 Problems with bmconv command files preventing bitmap generation?
+DEF122803 SBSv2 - Freeze doesnt work properly for OE target types
+DEF122833 SBSV2 Performance is poor with -j16 using the GNU Make engine
+DEF122535 GT0367: Invalid system_definition.xml causes SBSv2 layering crash
+DEF122570 SBSv2 : certain "-m" values cause a crash at makefile generation
+DEF122604 Errors in GT only build using sbsv2 on Windows
+DEF122796 Wrong default value for PVMGMAKE in make.xml
+DEF122783 SBSv2 WINSCW builds can produce incorrectly linked executables under emake
+DEF122785 log summariser crashes if errors contain % characters
+DEF122870 SBSv2 assembling .s files fails.
+DEF120473 Enable Windows and Linux Tools to Cohabit
+DEF121826 Pre-include HRH file directory from variant.cfg fails for template extension mak
+DEF121907 Raptor crashes when exporting zip file that already exists
+DEF122523 SBSv2 Logging output affected by bash version on Linux
+DEF122788 SBSv2: We don't ensure correct version of Make for TEMs and for use in FLMs
+
+
+version 2.0.6
+
+The first release of SBSv2 in the SITK.
+
+</pre>
+</body>
+</html>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/bin/depcrunch.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,111 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Minimise the dependencies in a C preprocessor dependency file to
+# those that CPP could not find.  Then add in an assumption about 
+# where to find them.  Output is assumed to be relevant to only one target
+# even if multiple dep files are analysed.
+#
+
+import sys
+from  optparse import OptionParser
+import re
+
+class NoTargetException(Exception):
+	pass
+
+def depcrunch(file,extensions,assume):
+	target_pattern = r"^\s*(\S+):\s+"
+	target_re = re.compile(target_pattern)
+	# Not the use of (?i) in the following expression.  re.I seems to cause re.findall
+	# to not actually find all files matching the extension whereas (?i) provides
+	# case insensitivity at the right point and it works.  Really don't understand this.
+	extension_pattern = r"\s([^/ \t]+\.((?i)" + "|".join([t for t in extensions]) + r"))\b"
+	extension_re = re.compile(extension_pattern)
+
+	target = None
+
+	deps = []
+
+	# Read through the dependencies.
+	for l in file:
+		l = l.replace("\\","/").rstrip("\n\r")
+
+		# Look out for the target name if 
+		# we have not found it yet
+		if not target:
+			t = target_re.match(l)
+			if t:
+				target = t.groups()[0]
+
+		# Look for prerequisites matching the 
+		# extensions.  There may be one or more on 
+		# the same line as the target name.
+		# Don't use re.I - somehow prevents 
+		# all but one match in a line which may have several files
+		m = extension_re.findall(l)
+		if m:
+			deps.extend([d[0] for d in m])
+
+	if not target:
+		raise NoTargetException()
+
+	if len(deps) > 0:
+		print "%s: \\" % target
+		for d in deps[:-1]:
+			print " %s \\" % (assume + "/" + d)
+		print " %s " % (assume + "/" + deps[-1])
+
+
+
+
+## Command Line Interface ####################################################
+
+parser = OptionParser(prog = "depcrunch",
+	usage = "%prog [-h | options] [<depfile>]")
+
+parser.add_option("-e", "--extensions", 
+	 action="store", dest="extensions", type='string', help="comma separated list of file extensions of missing files to keep in the crunched dep file.") 
+
+parser.add_option("-a", "--assume", 
+	 action="store", dest="assume", type='string', help="when cpp reports missing dependencies, assume that they are in this directory") 
+
+(options, args) = parser.parse_args()
+
+
+if not options.extensions:
+	parser.error("you must specify a comma-separated list of file extensions with the -e option.")
+	sys.exit(1)
+
+if not options.assume:
+	parser.error("you must specify an 'assumed directory' for correcting missing dependencies with the -a option.")
+	sys.exit(1)
+
+depfilename="stdin"
+if len(args) > 0:
+	depfilename=args[0]
+	file = open(depfilename,"r")
+else:
+	file = sys.stdin
+try:
+	depcrunch(file,options.extensions.split(","), options.assume)
+except NoTargetException,e:
+	sys.stderr.write("Target name not found in dependency file\n");
+	sys.exit(2)
+	
+
+if file != sys.stdin:
+	file.close()
+
+sys.exit(0)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/bin/recipestats.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,176 @@
+#!/usr/bin/env python
+#
+# Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# 
+# display summary information about recipes from raptor logs
+# e.g. total times and so on.
+
+import time
+import __future__
+
+
+
+
+class RecipeStats(object):
+	def __init__(self, name, count, time):
+		self.name=name
+		self.count=count
+		self.time=time
+
+	def add(self, duration):
+		self.time += duration
+
+class BuildStats(object):
+	STAT_OK = 0
+
+
+	def __init__(self):
+		self.stats = {}
+		self.failcount = 0
+		self.failtime = 0.0
+		self.failtypes = {}
+		self.retryfails = 0
+		self.hosts = {}
+		
+	def add(self, starttime, duration, name, status, host, phase):
+		if status != BuildStats.STAT_OK:
+			self.failcount += 1
+			if name in self.failtypes:
+				self.failtypes[name] += 1
+			else:
+				self.failtypes[name] = 1
+
+			if status == 128:
+				self.retryfails += 1
+			return
+			
+		if name in self.stats:
+			r = self.stats[name]
+			r.add(duration)
+		else:
+			self.stats[name] = RecipeStats(name,1,duration)
+
+		hp=host
+		if hp in self.hosts:
+			self.hosts[hp] += 1
+		else:
+			self.hosts[hp] = 1
+
+	def recipe_csv(self):
+		s = '"name", "time", "count"\n'
+		l = sorted(self.stats.values(), key= lambda r: r.time, reverse=True)
+		for r in l:
+			s += '"%s",%s,%d\n' % (r.name, str(r.time), r.count)
+		return s
+
+	def hosts_csv(self):
+		s='"host","recipecount"\n'
+		hs = self.hosts
+		for h in sorted(hs.keys()):
+			s += '"%s",%d\n' % (h,hs[h])
+		return s
+
+
+import sys
+import re
+import os
+from optparse import OptionParser # for parsing command line parameters
+
+def main():
+	recipe_re = re.compile(".*<recipe name='([^']+)'.*host='([^']+)'.*")
+	time_re = re.compile(".*<time start='([0-9]+\.[0-9]+)' *elapsed='([0-9]+\.[0-9]+)'.*")
+	status_re = re.compile(".*<status exit='(?P<exit>(ok|failed))'( *code='(?P<code>[0-9]+)')?.*")
+	phase_re = re.compile(".*<info>Making.*?([^\.]+\.[^\.]+)</info>")
+
+	parser = OptionParser(prog = "recipestats",
+                                          usage = """%prog --help [-b] [-f <logfilename>]""")
+
+	parser.add_option("-b","--buildhosts",action="store_true",dest="buildhosts_flag",
+                                help="Lists which build hosts were active in each invocation of the build engine and how many recipes ran on each.", default = False)
+	parser.add_option("-f","--logfile",action="store",dest="logfilename", help="Read from the file, not stdin", default = None)
+
+
+	(options, stuff) = parser.parse_args(sys.argv[1:])
+
+	if options.logfilename is None:
+		f = sys.stdin
+	else:
+		f = open(options.logfilename,"r")
+
+	st = BuildStats()
+
+
+	alternating = 0
+	start_time = 0.0
+
+	phase=None
+	for l in f:
+		l2 = l.rstrip("\n\r")
+
+		rm = recipe_re.match(l2)
+
+		if rm is not None:
+			(rname,host) = rm.groups()
+			continue
+
+		pm = phase_re.match(l2)
+
+		if pm is not None:
+			if phase is not None:
+				if options.buildhosts_flag:
+					print('"%s"\n' % phase)
+					print(st.hosts_csv())
+			st.hosts = {}	
+			phase = pm.groups()[0]
+			continue
+
+		tm = time_re.match(l2)
+		if tm is not None:
+			try:
+				s = float(tm.groups()[0])
+				elapsed = float(tm.groups()[1])
+
+				if start_time == 0.0:
+					start_time = s
+
+				s -= start_time
+
+				continue
+			except ValueError, e:
+				raise Exception("Parse problem: float conversion on these groups: %s\n%s" %(str(tm.groups()), str(e)))
+		else:
+			if l2.find("<time") is not -1:
+				raise Exception("unparsed timing status: %s\n"%l2)
+
+		sm = status_re.match(l2)
+
+		if sm is None:
+			continue
+
+		if sm.groupdict()['exit'] == 'ok':
+			status = 0
+		else:
+			status = int(sm.groupdict()['code'])
+
+		st.add(s, elapsed, rname, status, host, phase)
+
+	if options.buildhosts_flag:
+		print('"%s"\n' % phase)
+		print(st.hosts_csv())
+	else:
+		print(st.recipe_csv())
+
+
+if __name__ == '__main__': main()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/bin/sbs_check_exports.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,101 @@
+#!/usr/bin/python
+
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+import re
+import sys
+
+# there are no options, so print help if any are passed
+if len(sys.argv) > 1:
+	print "usage:", sys.argv[0], "(The log data is read from stdin)"
+	sys.exit(0)
+
+whatlogRE = re.compile("<whatlog.*bldinf='([^']*)'")
+exportRE = re.compile("<export destination='(.*)' source='(.*)'")
+
+bldinf = "unknown"
+sources = {}		# lookup from source to destination
+destinations = {}	# lookup from destination to source
+
+chains = 0
+repeats = 0
+conflicts = []
+
+# read stdin a line at a time and soak up all the exports
+line = " "
+while line:
+	line = sys.stdin.readline()
+
+	whatlogMatch = whatlogRE.search(line)
+	if whatlogMatch:
+		bldinf = whatlogMatch.group(1).lower()
+		continue
+
+	exportMatch = exportRE.search(line)
+	if exportMatch:
+		destination = exportMatch.group(1).lower()
+		source = exportMatch.group(2).lower()
+
+		if destination in destinations:
+			(otherSource, otherBldinf) = destinations[destination]
+			
+			# same source and destination but different bld.inf => repeat	
+			if source == otherSource and bldinf != otherBldinf:
+				# only interested in the number for now
+				repeats += 1
+				
+			# different source but same destination => conflict
+			if source != otherSource:
+				conflict = (source, destination, bldinf, otherSource, otherBldinf)
+				tcilfnoc = (otherSource, destination, otherBldinf, source, bldinf)
+				
+				if conflict in conflicts or tcilfnoc in conflicts:
+					# seen this conflict before
+					pass
+				else:
+					print "CONFLICT:", destination, \
+						"FROM", source, \
+						"IN", bldinf, \
+						"AND FROM", otherSource, \
+						"IN", otherBldinf
+					conflicts.append(conflict)
+		else:
+			sources[source] = [destination, bldinf]
+			destinations[destination] = [source, bldinf]
+
+# now check for destinations which were also sources => chains
+for destination in destinations:
+	if destination in sources:
+		(nextDestination, inf2) = sources[destination]
+		(source, inf1) = destinations[destination]
+		print "CHAIN:", source, \
+			"TO", destination, \
+			"IN", inf1, \
+			"THEN TO", nextDestination, \
+			"IN", inf2
+		chains += 1
+		
+# print a summary
+print "Total exports = ", len(destinations.keys())
+print "Chained exports = ", chains
+print "Repeated exports = ", repeats
+print "Conflicting exports = ", len(conflicts)
+
+# return the error code
+if conflicts:
+	sys.exit(1)
+sys.exit(0)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/bin/sbs_env.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,83 @@
+@REM
+@REM Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+@REM All rights reserved.
+@REM This component and the accompanying materials are made available
+@REM under the terms of the License "Eclipse Public License v1.0"
+@REM which accompanies this distribution, and is available
+@REM at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@REM
+@REM Initial Contributors:
+@REM Nokia Corporation - initial contribution.
+@REM
+@REM Contributors:
+@REM
+@REM Description: 
+@REM
+
+@SET HOSTPLATFORM=win 32
+@SET HOSTPLATFORM_DIR=win32
+
+@REM Automatically find SBS_HOME if it is not set
+@IF NOT "%SBS_HOME%"=="" GOTO foundhome
+@SET RAPTORBINDIR=%~dp0
+@SET WD=%CD%
+@CD /d %RAPTORBINDIR%\..
+@SET SBS_HOME=%CD%
+@CD /d %WD%
+:foundhome 
+
+@REM The python and PYTHONPATH used by Raptor are determined by, in order of precedence:
+@REM 1. the SBS_PYTHON and SBS_PYTHONPATH environment variables (if set)
+@REM 2. the python shipped locally with Raptor (if present)
+@REM 3. the python on the system PATH and the PYTHONPATH set in the system environment
+
+@SET __LOCAL_PYTHON__=%SBS_HOME%\win32\python264\python.exe
+@IF NOT "%SBS_PYTHON%"=="" GOTO sbspython
+@IF EXIST %__LOCAL_PYTHON__% GOTO localpython
+@SET __PYTHON__=python.exe
+@GOTO sbspythonpath
+
+:sbspython
+@SET __PYTHON__=%SBS_PYTHON%
+@GOTO sbspythonpath
+
+:localpython
+@SET __PYTHON__=%__LOCAL_PYTHON__%
+@SET SBS_PYTHON=%__PYTHON__%
+@SET PYTHONPATH=
+
+:sbspythonpath
+@IF NOT "%SBS_PYTHONPATH%"=="" SET PYTHONPATH=%SBS_PYTHONPATH%
+
+@REM Use the mingw set by the environment if possible
+@SET __MINGW__=%SBS_MINGW%
+@IF "%__MINGW__%"=="" SET __MINGW__=%SBS_HOME%\win32\mingw
+
+@REM Tell CYGWIN not to map unix security attributes to windows to
+@REM prevent raptor from potentially creating read-only files.
+@REM Assume Cygwin 1.5 CLI.
+@SET __MOUNTOPTIONS__=-u
+@SET __UMOUNTOPTIONS__=-u
+@SET CYGWIN=nontsec nosmbntsec
+
+@REM If SBS_CYGWIN17 is set, we are using Cygwin 1.7, so change the mount/umount 
+@REM options to the 1.7 CLI and set SBS_CYGWIN to the value of SBS_CYGWIN17
+@IF NOT "%SBS_CYGWIN17%" == "" SET CYGWIN=nodosfilewarning && SET "SBS_CYGWIN=%SBS_CYGWIN17%" && SET __MOUNTOPTIONS__=-o noacl -o user && SET __UMOUNTOPTIONS__=
+
+@REM Use the Cygwin set by the environment (from SBS_CYGWIN or SBS_CYGWIN17) if possible
+@SET __CYGWIN__=%SBS_CYGWIN%
+@IF "%__CYGWIN__%"=="" SET __CYGWIN__=%SBS_HOME%\win32\cygwin
+
+@REM Add to the search path
+@REM (make sure that we don't get into trouble if there are Path and PATH variables)
+@SET PATH_TEMP=%__MINGW__%\bin;%__CYGWIN__%\bin;%SBS_HOME%\win32\bin;%PATH%
+@SET PATH=
+@SET PATH=%PATH_TEMP%
+@SET PATH_TEMP=
+
+@REM Make sure that /tmp is not set incorrectly for sbs. 
+@umount %__UMOUNTOPTIONS__% /tmp >NUL  2>NUL
+@mount %__MOUNTOPTIONS__% %TEMP% /tmp >NUL 2>NUL
+@umount %__UMOUNTOPTIONS__% / >NUL  2>NUL
+@mount %__MOUNTOPTIONS__% %__CYGWIN__% / >NUL 2>NUL
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/bin/sbs_filter	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,91 @@
+#!/bin/bash
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# raptor script
+# add mingw to the PATH if we are running Cygwin on Windows
+#
+
+# If SBS_HOME is not set in the environment then work it out
+# from the path to this batch file
+if [ -z "$SBS_HOME" ] ; then
+	temp=$0
+	SBS_HOME=$(cd ${temp%/*} && echo $PWD)
+	export SBS_HOME=${SBS_HOME%/bin}
+fi
+
+# Ensure that the host type is set for Raptor:
+eval $($SBS_HOME/bin/gethost.sh -e)
+
+if [ -z "$HOSTPLATFORM" ]; then
+	echo "Error: HOSTPLATFORM could not be determined." 1>&2
+	exit 1
+fi
+
+if [ ! -d "$SBS_HOME/$HOSTPLATFORM_DIR" ]; then
+cat 1>&2 <<EOERROR
+Error: sbs has not been installed with support for your platform: "${HOSTPLATFORM}".
+EOERROR
+	exit 1
+fi
+
+if [ "$OSTYPE" == "cygwin" ]; then
+
+	SBS_HOME=${SBS_HOME//\\//}
+
+	__MINGW__=${SBS_MINGW:-$SBS_HOME/$HOSTPLATFORM_DIR/mingw}
+	__CYGWIN__=${SBS_CYGWIN:-$SBS_HOME/$HOSTPLATFORM_DIR/cygwin}
+	__PYTHON__=${SBS_PYTHON:-$SBS_HOME/$HOSTPLATFORM_DIR/python264/python.exe}
+	export PYTHONPATH=${SBS_PYTHONPATH:-$SBS_HOME/$HOSTPLATFORM_DIR/python264}
+
+    # Command for unifying path strings. For example, "c:\some\path" and
+    # "/cygdrive/c/some/path" will both be converted into "c:/some/path".
+	u="$__CYGWIN__/bin/cygpath.exe -m"
+
+	__MINGW__=$($u "$__MINGW__")
+	__CYGWIN__=$($u "$__MINGW__")
+	__PYTHON__=$($u "$__PYTHON__")
+
+	export SBS_HOME=$($u "$SBS_HOME")
+
+	export PATH=${__MINGW__}/bin:${__CYGWIN__}/bin:$SBS_HOME/$HOSTPLATFORM_DIR/bin:$PATH
+
+	# Tell Cygwin not to map unix security attributes to windows to
+	# prevent raptor from potentially creating read-only files:
+	export CYGWIN='nontsec nosmbntsec'
+
+else
+	export PYTHONPATH=${SBS_PYTHONPATH:-$SBS_HOME/$HOSTPLATFORM_DIR/python262/lib}
+	PATH=$SBS_HOME/$HOSTPLATFORM_DIR/python262/bin:$SBS_HOME/$HOSTPLATFORM_DIR/bin:$PATH
+	LD_LIBRARY_PATH=$SBS_HOME/$HOSTPLATFORM_DIR/python262/lib:$SBS_HOME/$HOSTPLATFORM_DIR/bv/lib:$LD_LIBRARY_PATH
+
+	export PATH LD_LIBRARY_PATH
+	__PYTHON__=python
+fi
+
+
+# call sbs_filter.py with the arguments
+
+FILTER_START="$SBS_HOME/bin/sbs_filter.py"
+
+if [ -e "$FILTER_START" ]; then
+	# run the source version
+	${__PYTHON__} "$FILTER_START" "$@"
+elif [ -e "$FILTER_START"c ]; then
+	# run the compiled version
+	${__PYTHON__} "$FILTER_START"c "$@"
+else
+	echo "Cannot start sbs_filter - $FILTER_START not found." 1>&2
+	echo "Check your SBS_HOME environment variable." 1>&2
+fi
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/bin/sbs_filter.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+@rem
+@rem Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+@SETLOCAL
+@CALL "%~dp0\sbs_env.bat"
+
+@REM Run with all the arguments.
+@bash %SBS_HOME%\bin\sbs_filter %*
+
+@ENDLOCAL
+@cmd /c exit /b %ERRORLEVEL%
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/bin/sbs_filter.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,88 @@
+#!/usr/bin/python
+
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+import os
+import sys
+import traceback
+
+# intercept the -h option
+if "-h" in sys.argv or "--help" in sys.argv:
+	print "usage:", sys.argv[0], "[sbs options]"
+	print "  The log data is read from stdin."
+	print "  Type 'sbs -h' for a list of sbs options."
+	sys.exit(0)
+	
+# get the absolute path to this script
+script = os.path.abspath(sys.argv[0])
+
+# add the Raptor python directory to the PYTHONPATH
+sys.path.append(os.path.join(os.path.dirname(script), "..", "python"))
+
+# now we should be able to find the raptor modules
+import raptor
+import pluginbox
+
+# make sure that HOSTPLATFORM is set
+if not "HOSTPLATFORM" in os.environ:
+	sys.stderr.write("HOSTPLATFORM is not set ... try running gethost.sh\n")
+	sys.exit(1)
+	
+if not "HOSTPLATFORM_DIR" in os.environ:
+	sys.stderr.write("HOSTPLATFORM_DIR is not set ... try running gethost.sh\n")
+	sys.exit(1)
+
+# construct a Raptor object from our command-line (less the name of this script)
+the_raptor = raptor.Raptor.CreateCommandlineBuild(sys.argv[1:])
+
+# from Raptor.OpenLog()
+try:
+	# Find all the raptor plugins and put them into a pluginbox.
+	if not the_raptor.systemPlugins.isAbsolute():
+		the_raptor.systemPlugins = the_raptor.home.Append(the_raptor.systemPlugins)
+		
+	pbox = pluginbox.PluginBox(str(the_raptor.systemPlugins))
+	raptor_params = raptor.BuildStats(the_raptor)
+
+	# Open the requested plugins using the pluginbox
+	the_raptor.out.open(raptor_params, the_raptor.filterList, pbox)
+	
+except Exception, e:
+	sys.stderr.write("error: problem while creating filters %s\n" % str(e))
+	traceback.print_exc()
+	sys.exit(1)
+		
+# read stdin a line at a time and pass it to the Raptor object
+try:
+	line = " "
+	while line:
+		line = sys.stdin.readline()
+		the_raptor.out.write(line)
+except Exception,e:
+	sys.stderr.write("error: problem while filtering: %s\n" % str(e))
+	traceback.print_exc()
+	sys.exit(1)
+
+
+# Print the summary (this can't return errors)
+the_raptor.out.summary()
+	
+if not the_raptor.out.close():
+	the_raptor.errorCode = 2
+	
+# return the error code
+sys.exit(the_raptor.errorCode)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/bin/timelines.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,224 @@
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# 
+# Raptor log visualisation program. Takes a raptor log as standard input
+# and displays timelines that represent build progress and 
+# how much actual parallelism there is in the build.
+# This program requires the pygame and PyOpenGL modules.
+
+from OpenGL.GL import *
+from OpenGL.GLU import *
+import pygame
+from pygame.locals import *
+import time
+
+class Timeline(object):
+	"""A bar representing a number of recipes which were executed in 
+	   time sequence.  There is no guarantee about what host but in 
+	   theory they could have been executed on the same host."""
+
+	globalmax = 2.0
+
+	def __init__(self,ylevel):
+		self.maxtime = 0.0
+		self.recipes = []
+		self.ylevel = ylevel
+
+	def append(self, recipe):
+		"" add this recipe to this timeline if it happens after the latest recipe already in the timeline ""
+		if recipe.starttime + recipe.duration > self.maxtime:
+			self.maxtime = recipe.starttime + recipe.duration
+			if self.maxtime > Timeline.globalmax:
+				Timeline.globalmax = self.maxtime 
+		else:
+			pass
+
+		self.recipes.append(recipe)
+
+	def draw(self):
+		glLoadIdentity()
+		self.xscale = 4.0 / Timeline.globalmax
+
+    		glTranslatef(-2.0, -1.5, -6.0)
+		count = 0
+		for r in self.recipes:
+			if count % 2 == 0:
+				coloff=0.8
+			else:
+				coloff = 1.0
+
+			count += 1
+			r.draw(self.xscale, self.ylevel, coloff)
+
+class Recipe(object):
+	"""Represents a task completed in a raptor build. 
+	   Drawn as a colour-coded bar with different 
+	   colours for the various recipe types."""
+	STAT_OK = 0
+	colours = {
+		'compile': (0.5,0.5,1.0),
+		'compile2object': (0.5,0.5,1.0),
+		'win32compile2object': (0.5,0.5,1.0),
+		'tools2linkexe': (0.5,1.0,0.5),
+		'link': (0.5,1.0,0.5),
+		'linkandpostlink': (0.5,1.0,0.5),
+		'win32stageonelink': (0.5,1.0,0.5),
+		'tools2lib': (0.5,1.0,1.0),
+		'win32stagetwolink': (1.0,0.1,1.0),
+		'postlink': (1.0,0.5,1.0)
+		}
+
+	def __init__(self, starttime, duration, name, status):
+		self.starttime = starttime
+		self.duration = duration
+		self.status = status
+		self.colour = (1.0, 1.0, 1.0)
+		if name in Recipe.colours:
+			self.colour = Recipe.colours[name]
+		else:
+			self.colour = (1.0,1.0,1.0)
+		self.name = name 
+
+	def draw(self, scale, ylevel, coloff):
+		if self.status == Recipe.STAT_OK:
+			glColor4f(self.colour[0]*coloff, self.colour[1]*coloff, self.colour[2]*coloff,0.2)
+		else:
+			glColor4f(1.0*coloff, 0.6*coloff, 0.6*coloff,0.2)
+
+
+		x = self.starttime * scale
+		y = ylevel
+		x2 = x + self.duration * scale
+		y2 = ylevel + 0.2
+		glBegin(GL_QUADS)
+		glVertex3f(x, y, 0)
+		glVertex3f(x, y2, 0)
+		glVertex3f(x2, y2, 0)
+		glVertex3f(x2, y, 0)
+		glEnd()
+
+
+def resize((width, height)):
+	if height==0:
+		height=1
+	glViewport(0, 0, width, height)
+	glMatrixMode(GL_PROJECTION)
+	glLoadIdentity()
+	gluPerspective(45, 1.0*width/height, 0.1, 100.0)
+	glMatrixMode(GL_MODELVIEW)
+	glLoadIdentity()
+
+def init():
+	glShadeModel(GL_SMOOTH)
+	glClearColor(0.0, 0.0, 0.0, 0.0)
+	glClearDepth(1.0)
+	glEnable(GL_DEPTH_TEST)
+	glDepthFunc(GL_LEQUAL)
+	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
+
+
+import sys
+import re
+
+def main():
+
+	video_flags = OPENGL|DOUBLEBUF
+
+	pygame.init()
+	pygame.display.set_mode((800,600), video_flags)
+
+	resize((800,600))
+	init()
+
+	frames = 0
+	ticks = pygame.time.get_ticks()
+
+
+	lines = 4
+	timelines = []
+	ylevel = 0.0
+	for i in xrange(0,4):
+		ylevel += 0.6 
+		timelines.append(Timeline(ylevel))
+
+	f = sys.stdin
+
+	recipe_re = re.compile(".*<recipe name='([^']+)'.*")
+	time_re = re.compile(".*<time start='([0-9]+\.[0-9]+)' *elapsed='([0-9]+\.[0-9]+)'.*")
+	status_re = re.compile(".*<status exit='([^']*)'.*")
+
+	alternating = 0
+	start_time = 0.0
+
+	
+	for l in f.xreadlines():
+		l2 = l.rstrip("\n")
+		rm = recipe_re.match(l2)
+
+		if rm is not None:
+			rname = rm.groups()[0]
+			continue
+
+
+		tm = time_re.match(l2)
+		if tm is not None:
+			s = float(tm.groups()[0])
+			elapsed = float(tm.groups()[1])
+
+			if start_time == 0.0:
+				start_time = s
+
+			s -= start_time
+
+			continue
+
+		sm = status_re.match(l2)
+
+		if sm is None:
+			continue
+
+		if sm.groups()[0] == 'ok':
+			status = 0
+		else:
+			status = int(sm.groups()[0])
+
+		olddiff = 999999999.0
+		tnum = 0
+		for t in timelines:
+			newdiff = s - t.maxtime
+			if newdiff < 0.0:
+				continue
+			if olddiff > newdiff:
+				dest_timeline = t
+				olddiff = newdiff
+			tnum += 1
+
+		dest_timeline.append(Recipe(s, elapsed, rname, status))
+		event = pygame.event.poll()
+		if event.type == QUIT or (event.type == KEYDOWN and event.key == K_ESCAPE):
+			break
+
+		glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
+		for t in timelines:
+			t.draw()
+		pygame.display.flip()
+
+		frames = frames+1
+
+	print "fps:  %de" % ((frames*1000)/(pygame.time.get_ticks()-ticks))
+	event = pygame.event.wait()
+
+
+if __name__ == '__main__': main()
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/lib/flm/e32abiv2pdll.flm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,61 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# ARMv5 PDLL ABIv2 Function Like Makefile (FLM)
+# Build an e32 PDLL (Patchable constants DLL)
+# 
+#
+
+ifeq ($(TARGETTYPE),pdll)
+include $(FLMHOME)/e32abiv2defaults.mk
+
+# What we need to build a DLL
+ifeq ($(NOEXPORTLIBRARY),)
+IMPORTLIBRARYREQUIRED:=1
+endif
+POSTLINKDEFFILE:=$(DEFFILE)
+SUPPORT_FREEZE:=1
+
+# Default Linker settings for this target type
+LINKER_ENTRYPOINT_LIBDEP:=$(STATIC_RUNTIME_DIR)/edll.lib
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRY_OPTION)=_E32Dll $(LINKER_ENTRYPOINT_DECORATION)$(LINKER_SEPARATOR)$(call dblquote,$(STATIC_RUNTIME_DIR)/edll.lib$(LINKER_ENTRYPOINT_ADORNMENT))
+
+ifeq ("$(NEED_ENTRYPOINT_LIBRARY)","True")
+LINKER_ENTRYPOINT_SETTING:=$(LINKER_ENTRYPOINT_SETTING) $(LINKER_ENTRYPOINT_LIBDEP)
+endif
+
+LINKER_STUB_LIBRARY:=$(STATIC_RUNTIME_DIR)/edllstub.lib
+STATIC_RUNTIME_LIB:=$(USER_STATIC_RUNTIME_LIB)
+
+
+# Default Postlinker settings
+CANHAVEEXPORTS:=1
+POSTLINKTARGETTYPE:=DLL
+POSTLINKFILETYPE:=dll
+DOPOSTLINK:=1
+CANIGNORENONCALLABLE:=1
+
+# Use the general EABI FLM 
+# We are appending to CDEFS but we don't want this to affect
+# other invocations so we are going to save it on a stack
+# and restore it afterwards
+$(call vsave,CDEFS)
+CDEFS:=$(CDEFS) __DLL__
+include $(FLMHOME)/e32abiv2.flm
+$(call vrestore)
+
+else
+$(error e32abiv2pdll.flm called with wrong TARGETTYPE (should be 'pdll' but is '$(TARGETTYPE)'))
+endif
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/lib/flm/run.mk	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,39 @@
+.PHONY:: ALL
+ALL:: # Default target
+
+HOSTPLATFORM:=win 32
+HOSTPLATFORM_DIR:=win32
+OSTYPE:=cygwin
+FLMHOME:=E:/wip2/lib/flm
+SHELL:=E:/wip2/win32/cygwin/bin/sh.exe
+
+
+USE_TALON:=
+
+
+
+include E:/wip2/lib/flm/globals.mk
+
+# dynamic default targets
+
+# call E:/wip2/lib/flm/config/default.flm
+SBS_SPECIFICATION:=Symbian.config.default
+SBS_CONFIGURATION:=armv5_urel
+
+EPOCROOT:=E:/wip2/test/epocroot
+ELF2E32:=E:/wip2/test/epocroot/epoc32/tools/elf2e32.exe
+WHATLOG:=
+include E:/wip2/lib/flm/config/default.flm
+
+
+component_paths:=$(SBS_HOME)/test/smoke_suite/test_resources/simple/bld.inf|c:/make_test/a.mk \
+$(SBS_HOME)/test/smoke_suite/test_resources/simple_dll/bld.inf|c:/make_test/b.mk \
+$(SBS_HOME)/test/smoke_suite/test_resources/simple/always_build_as_arm_bld.inf|c:/make_test/c.mk \
+$(SBS_HOME)/test/smoke_suite/test_resources/simple/debuggable_bld.inf|c:/make_test/d.mk \
+$(SBS_HOME)/test/smoke_suite/test_resources/simple_export/bld.inf|c:/make_test/e.mk
+
+configs:=armv5 armv7
+
+cli_options:=-d
+
+include build.flm
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/lib/flm/win32pdll.flm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,34 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# WINSCW PDLL Function Like Makefile (FLM)
+# Build an emulator PDLL
+# 
+#
+
+ifeq ($(TARGETTYPE),pdll)
+
+BASE_TYPE:=dll
+CW_STATIC_RUNTIME:=1
+FIRST_STATLIB:=
+FIXED_EXPORT:=
+SUPPORTS_IMPORT_LIBRARY:=1
+SYSTEM_TARGET:=0
+UID2_DEFAULT:=
+
+# Use the general win32 FLM 
+include $(FLMHOME)/win32.flm
+
+else
+$(error $winp32dll.flm called with wrong TARGETTYPE (should be 'dll' but is '$(TARGETTYPE)'))
+endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/license.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,8 @@
+Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+All rights reserved.
+
+This component and the accompanying materials are made available
+under the terms of the License "Eclipse Public License v1.0"
+which accompanies this distribution, and is available
+at the URL "http://www.eclipse.org/legal/epl-v10.html".
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/notes/abiv1_implibs.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,14 @@
+
+The ABIv1 toolchain was deprecated in Symbian OS 9.4 but the build system
+continued to generate both ABIv1 (.lib) import libraries and ABIv2 (.dso)
+import libraries for convenience during the transition to ABIv2.
+
+This change now turns off the generation of ABIv1 import libraries by
+default but makes support switchable on a kit-by-kit basis. To turn on
+ABIv1 import library generation, add the following setting to the
+root.changes variant in epoc32/sbs_config/os_properties.xml
+
+<set name="SUPPORTS_ABIV1_IMPLIBS" value="1"/>
+
+An example properties file is available in the examples/os_properties.xml
+file distributed within the Raptor installation.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/notes/cross_compiling_tools.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+
+To build tools for Windows and Linux, on Linux, use
+
+sbs -c tools2.win32 -c tools2
+
+You will also need the mingw32 package, for the cross-compiler.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/notes/cygwin_1_7.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,17 @@
+
+Starting with Raptor 2.13.0, it is also possible to use Cygwin 1.7 instead of
+Cygwin 1.5. Some work was necessary to add support for Cygwin 1.7 due to a
+change in command line interface in some of the Cygwin tools.
+ 
+Due to this change in the command line interface, we have had to introduce the
+SBS_CYGWIN17 environment variable whose value should be the root directory of
+the Cygwin 1.7 installation. We hope this is temporary and that we can remove
+this at some point. The following bullet points indicate the order of
+precedence of the SBS_CYGWIN and SBS_CYGWIN17 environment variables.
+ 
+* SBS_CYGWIN set,   SBS_CYGWIN17 unset: assume Cygwin 1.5 is being used
+* SBS_CYGWIN set,   SBS_CYGWIN17 set:   assume Cygwin 1.7 is being used
+* SBS_CYGWIN unset, SBS_CYGWIN17 set:   assume Cygwin 1.7 is being used
+ 
+You will get errors if you set SBS_CYGWIN to be the root of a Cygwin 1.7
+installation directory and if SBS_CYGWIN17 is not defined correctly.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/notes/delete_on_failed_compile.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+In certain circumstances, such as failure to obtain licenses, RVCT 2.2's armcc 
+program still produces object files whose contents is junk. This causes build 
+problems later as from Make's point of view those object files are "up to 
+date" so the build tries to link them. Of course, these attempts at linking 
+fail and the build is broken.
+
+This is a work around for that RVCT 2.2 problem.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/notes/epocnestedexceptions.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,10 @@
+
+Qt needs to be able to have more than one active exception object, even when
+OOM (out-of-memory).
+
+A detailed overview of the solution can be found at 
+http://wikis.in.nokia.com/Toolchain/QtExceptionHandling
+
+In short, we add a new MMP flag keyword - EPOCNESTEDEXCEPTIONS. When this
+keyword is specified, a different static run-time library is used.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/notes/featurevariantsafe.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,12 @@
+
+By default, .mmp files that include FEATUREVARIANT will generate binaries for
+both "normal", non-binary variant, build configurations and binary variant
+build configurations.
+
+In order to ensure that only invariant binaries are created for invariant
+build configurations, and variant binaries for variant build configurations,
+the optional setting FEATUREVARIANTSAFE can be used. FEATUREVARIANTSAFE can be
+set via an os_properties.xml file and, when set, variant binaries will no
+longer be created for invariant build configurations.
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/notes/localresourcecopying.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+Resources were copied using make rules.  This is sensible in local
+machine builds but non-optimal in cluster builds.  It is entirely IO
+bound so that instead of benefitting from running on the cluster it
+simply creates more IO as files need to be transferred over the network,
+possibly multiple times.
+
+This change introduces the <finalcopy> tag to the log which the frontend
+reads in a new "default" filter called FilterCopyFile.  Thus the python
+frontend does the copying rather than the cluster build engine.
+
+This happens at the end of each invocation of the build engine or "stage".
+Since resources are built in their own stage, the copying is completed
+before build tasks in the other stages require them.  The copied files
+are not needed in the resource stage itself.
+
+The filter uses <progress:end ...> tags to determine when a stage
+is finished and this requires that the timing feature be switched on
+permanently.
+
+The format of the tag is:
+<finalcopy source="sourcefilename">dest_filename1 dest_filename2 ...</finalcopy>
+
+Spaces may not be used in filenames. The sequence "%20" may be used
+instead.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/notes/parametric_log_filters.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,31 @@
+
+It is now possible to pass parameters from the command line into log filters.
+This works in the same way for both sbs and sbs_filter commands.
+
+For example:
+
+sbs --filters=Foo[param1,param2,param3]
+
+sbs_filter --filters=Bar[value] < build.log
+
+
+Multiple filters with parameters can be specified if needed,
+
+sbs --filters=Foo[param1,param2,param3],Bar[value]
+
+
+In the 2.13.0 release there are two filters which take parameters:
+
+1. sbs_filter --filters=FilterComp[wizard/group] < log
+
+Here the parameter is (part of) a bld.inf path and the filter only prints
+parts of the log which are attributable to the matching component. In the
+example above, the log elements from any bld.inf which has "wizard/group" 
+as part of its path will be printed: normally, passing the full path name
+will guarantee that only one component matches.
+
+2. sbs_filter --filters=FilterTagCounter[info,recipe] < log
+
+Here the parameters are a list of the element names to count. This is a
+simple analysis filter that shows you how many instances of XMl elements
+are in a log and how many characters of body text they have.
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/notes/query_cli.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,18 @@
+
+A new --query command-line option allows other tools to easily read raptor's
+configuration data without having to understand exactly how raptor config
+files work.
+
+For example, all the valid build aliases which can be used to build with
+the -c option can be obtained using:
+
+sbs --query=aliases
+
+All the known product variants can be obtained using:
+
+sbs --query=products
+
+And the details of a particular configuration can be found using:
+
+sbs --query=config[armv5_urel.n8]
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/notes/system_definition_v3.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,8 @@
+
+System Definition version 3 Support
+
+This is only prototype support for testing the reading of single 
+"package" files. The implementation was submitted by Bob Rosenberg
+and has been regression tested by the Raptor team. Testing on real
+sysdef files is being carried out by the Symbian Foundation.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/notes/tcomsupport.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,42 @@
+New Trace Compiler
+-------------------
+
+Raptor supports an updated version of the Trace Compiler which has
+an improved command-line interface that allows Raptor to specify the
+directory in which trace data should be written.  This allows MMPs to
+implement a new convention for where trace files are stored.
+
+The new convention prevents clashes where building the same
+source file for different MMPs would previously have resulted in two
+build tasks trying to create the same trace file (header/dictionary).
+This caused build slowdowns and also made the trace data inaccurate.
+
+The standard for this directory is that the last two elements of the
+path should be
+
+   traces/traces_<targetname>_<ext>
+
+e.g.
+
+   traces/traces_euser_dll
+
+The new trace compiler also creates "autogen" headers in a new location
+under epoc32/include/platform rather than epoc32/include/internal.
+
+Trace Headers Directory can now also be in SYSTEMINCLUDEs
+----------------------------------------------------------
+
+Some teams were having trouble getting qmake to generate MMPs with
+USERINCLUDEs set.  So they were specifying the trace header directory in
+their SYTEMINCLUDEs.  This change causes Raptor to look for the traces
+directory in bot SYSTEMINCLUDES and USERINCLUDES.
+
+
+Create Trace Directories During Makefile Parse
+-----------------------------------------------
+
+Some build engines consider it a "clash" when two jobs attempt to make the
+same directory.  This change causes some important trace output directories
+to be created during makefile parsing which removes the (small) possibility
+that they would clash during the build part.
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/python/plugins/filter_broken.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,48 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Example of a Filter class using the SAX parser base class
+#
+
+import filter_interface
+
+class FilterBroken(filter_interface.FilterSAX):
+	
+	def startDocument(self):
+		self.first = True
+		
+	def startElement(self, name, attributes):
+		pass
+	
+	def characters(self, char):
+		pass
+		
+	def endElement(self, name):
+		pass
+	
+	def endDocument(self):
+		pass
+	
+	def error(self, exception):
+		pass
+		
+	def fatalError(self, exception):
+		if self.first:
+			print "fatal error:", str(exception)
+			self.first = False
+		
+	def warning(self, exception):
+		pass
+	
+# the end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/python/plugins/filter_bz2log.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,88 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Compress the full Raptor log file using the BZip2 algorithm, maximum compression.
+# 
+#
+
+import os
+import sys
+import raptor
+import filter_interface
+import bz2
+
+class StringListCompressor(object):
+	def __init__(self, complevel=5, filename="file.log.bz2"):
+		self.compressor = bz2.BZ2Compressor(complevel)
+		self.stringlist = []
+		self.outputopenedok = False
+		self.filename = filename
+		try:
+			self.fh = open(self.filename, "wb")
+			self.outputopenedok = True
+		except:
+			self.outputopenedok = False
+	
+	def write(self, data):
+		if self.outputopenedok:
+			compresseddata = self.compressor.compress(data)
+			self.fh.write(compresseddata)
+	
+	def __del__(self):
+		if self.outputopenedok:
+			compresseddata = self.compressor.flush()
+			self.fh.write(compresseddata)
+			self.fh.close()
+
+class Bz2log(filter_interface.Filter):
+	def __init__(self):
+		self.__inRecipe = False
+		self.compressor = None
+
+	def open(self, raptor_instance):
+		"""Open a log file for the various I/O methods to write to."""
+		
+		if raptor_instance.logFileName == None:
+			self.out = sys.stdout # Default to stdout if no log file is given
+		else:
+			logname = str(raptor_instance.logFileName.path.replace("%TIME", raptor_instance.timestring))
+			
+			# Ensure that filename has the right extension; append ".bz2" if required
+			if not logname.lower().endswith(".bz2"):
+				logname += ".bz2"
+
+			try:
+				dirname = str(raptor_instance.logFileName.Dir())
+				if dirname and not os.path.isdir(dirname):
+					os.makedirs(dirname)
+			except:
+				self.formatError("cannot create directory %s", dirname)
+				return False
+			
+			# Use highest compression level 9 which corresponds to a 900KB dictionary
+			self.compressor = StringListCompressor(9, logname)
+			if not self.compressor.outputopenedok:
+				self.out = None
+				self.formatError("failed to initialise compression routines." )
+				return False
+		return True
+		
+	def write(self, data):
+		"""Write data compressed log"""
+		if self.compressor:
+			self.compressor.write(data)
+		return True
+	
+	def close(self):
+		"""Close the log file"""
+		return True
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/python/plugins/filter_check.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Filter class for doing --what and --check operations
+#
+
+import os
+import sys
+import re
+import filter_interface
+import filter_what
+
+class FilterCheck(filter_what.FilterWhat):
+
+        def __init__(self): 
+		super(filter_what.FilterWhat,self).__init__()
+		self.check = True
+		self.path_prefix_to_strip = None
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/python/plugins/filter_checkcomp.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,70 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Filter class for doing a Check operation but also prints component information.
+#
+
+import os
+import sys
+import re
+import filter_interface
+import filter_what
+
+class FilterCheckComp(filter_what.FilterWhat):
+
+	def __init__(self):
+		super(FilterCheckComp, self).__init__()
+		self.check = True
+
+	def write(self, text):
+		"process some log text"
+		ok = True
+		
+		for line in text.splitlines():
+			ok = filter_what.FilterWhat.write(self, line)
+			if not ok:
+				break
+		self.ok = ok
+		return self.ok
+	
+	def start_bldinf(self, bldinf):
+		dir = None
+		if "win" in self.buildparameters.platform:
+			dir = os.path.dirname(bldinf.replace("/","\\"))
+			dir = os.path.splitdrive(dir)[1]
+		else:
+			dir = os.path.dirname(bldinf)
+
+		self.outfile.write("=== %s == %s\n" % (dir, dir))
+		self.outfile.write("=== check == %s\n" % (dir))
+		self.outfile.write("-- sbs_filter --filters=FilterCheckComp\n++ Started at Thu Feb 11 10:05:19 2010\nChdir %s\n" % dir)
+
+	def end_bldinf(self):
+		self.outfile.write("++ Finished at Thu Feb 11 10:05:20 2010\n")
+
+	def close(self):
+		self.outfile.write("++ Finished at Thu Feb 11 10:05:20 2010\n")
+		self.outfile.write("=== check finished Thu Feb 11 10:05:20 2010\n")
+
+	def open(self, build_parameters):
+		t = filter_what.FilterWhat.open(self, build_parameters)
+		if t:
+			self.outfile.write("\n===-------------------------------------------------\n")
+			self.outfile.write("=== check\n")
+			self.outfile.write("===-------------------------------------------------\n")
+			self.outfile.write("=== check started Thu Feb 11 10:02:21 2010\n")
+
+		self.path_prefix_to_strip = os.path.abspath(build_parameters.epocroot)
+		self.path_prefix_to_add_on = build_parameters.incoming_epocroot
+		return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/python/plugins/filter_component.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,96 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Filter class to print log entries for a selected component
+#
+
+import filter_interface
+import sys
+
+class FilterComp(filter_interface.FilterSAX):
+	
+	def __init__(self, params = []):
+		"""parameters to this filter are the path of the bld.inf and some flags.
+		
+		The bld.inf path can be a substring of the path to match. For example,
+		"email" will match an element with bldinf="y:/src/email/group/bld.inf".
+		
+		No flags are supported yet; this is for future expansion.
+			
+		If no parameters are passed then nothing is printed."""
+		self.bldinf = ""
+		self.flags = ""
+		
+		if len(params) > 0:
+			self.bldinf = params[0]
+			
+		if len(params) > 1:
+			self.flags = params[1]
+		
+		super(FilterComp, self).__init__()
+		
+	def startDocument(self):
+		# mark when we are inside an element with bldinf="the selected one"
+		self.inside = False
+		# and count nested elements so we can toggle off at the end.
+		self.nesting = 0
+	
+	def printElementStart(self, name, attributes):
+		sys.stdout.write("<" + name)
+		for att,val in attributes.items():
+			sys.stdout.write(" " + att + "='" + val + "'")
+		sys.stdout.write(">")
+		
+	def startElement(self, name, attributes):
+		if self.inside:
+			self.nesting += 1
+			self.printElementStart(name, attributes)
+			return
+		
+		if self.bldinf:
+			try:
+				if self.bldinf in attributes["bldinf"]:
+					self.inside = True
+					self.nesting = 1
+					self.printElementStart(name, attributes)
+			except KeyError:
+				pass
+			
+	def characters(self, char):
+		if self.inside:
+			sys.stdout.write(char)
+		
+	def endElement(self, name):
+		if self.inside:
+			sys.stdout.write("</" + name + ">")
+			
+		self.nesting -= 1
+		
+		if self.nesting == 0:
+			self.inside = False
+			print
+	
+	def endDocument(self):
+		pass
+	
+	def error(self, exception):
+		print filter_interface.Filter.formatError("FilterComp:" + str(exception))
+		
+	def fatalError(self, exception):
+		print filter_interface.Filter.formatError("FilterComp:" + str(exception))
+		
+	def warning(self, exception):
+		print filter_interface.Filter.formatWarning("FilterComp:" + str(exception))
+	
+# the end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/python/plugins/filter_copyfile.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,92 @@
+#
+# Copyright (c) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Filter class for copying files in serial in python. This
+# is important in cluster builds where file copying is 
+# very inefficient.  
+# The one-to-many <finalcopy> tag is searched for and copy
+# instructions are built up in a hash table.
+# <finalcopy source='sourcefilename'>destfilename1 destfilename2 . . . .destfilenameN</copy>
+# destinations must be full filenames not directories.
+#
+# This filter monitors build progress
+# via the <progress> tags and flushes copies as build 
+# stages end (e.g. after resource so resources are ready for the next stage)
+# 
+
+import os
+import sys
+import tempfile
+import filter_interface
+import shutil
+import generic_path
+import stat
+from raptor_utilities import copyfile
+
+class FilterCopyFile(filter_interface.Filter):
+	
+	def open(self, params):
+		"initialise"
+		
+		self.ok = True
+
+		self.files = {}
+		
+		return self.ok
+	
+	
+	def write(self, text):
+		"process some log text"
+		
+		for line in text.splitlines():
+			if line.startswith("<finalcopy"):
+				source_start = line.find("source='")
+				source = line[source_start+8:line.find("'", source_start+8)]
+				destinations = line[line.find(">",source_start)+1:line.find("</finalcopy>")].split(" ")
+
+				if source in self.files:
+					self.files[source].update(destinations)
+				else:
+					self.files[source] = set(destinations)
+			elif line.startswith("<progress:end object_type='makefile' task='build'"):
+				self.flushcopies() # perform copies at end of each invocation of the make engine
+						   # to ensure dependencies are in place for the next one.
+				
+		return self.ok
+	
+	
+	def summary(self):
+		"finish off"
+		self.flushcopies()
+		return self.ok
+
+	def flushcopies(self):
+		for source in self.files.keys():
+			for dest in self.files[source]:
+				try:
+					copyfile(source, dest)
+				except IOError, e:
+					print "<error>%s</error>" % str(e)
+		self.files = {}
+		
+
+
+	def close(self):
+		"nop"
+		
+
+		return self.ok
+
+# the end				
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/python/plugins/filter_tagcount.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,82 @@
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Example of a Filter class using the SAX parser base class
+#
+
+import filter_interface
+
+class FilterTagCounter(filter_interface.FilterSAX):
+	
+	def __init__(self, params = []):
+		"""parameters to this filter are the names of tags to print.
+		
+		If no parameters are passed then all tags are reported."""
+		self.interesting = params
+		super(FilterTagCounter, self).__init__()
+		
+	def startDocument(self):
+		# for each element name count the number of occurences
+		# and the amount of body text contained.
+		self.names = []
+		self.count = {}
+		self.errors = 0
+		self.fatals = 0
+		self.warns = 0
+		
+	def startElement(self, name, attributes):
+		if name == "buildlog":
+			# print out the attributes of the "top" element
+			print "version:"
+			for a,v in attributes.items():
+				print a, "=", v
+		
+		# push name onto the stack of names and increment the count
+		self.names.append(name)
+		if name in self.count:
+			self.count[name][0] += 1
+		else:
+			self.count[name] = [1, 0]    # occurs, characters	
+	
+	def characters(self, char):
+		# these are for the current element
+		current = self.names[-1]
+		self.count[current][1] += len(char)
+		
+	def endElement(self, name):
+		# pop the name off the stack
+		self.names.pop()
+	
+	def endDocument(self):
+		# report
+		print "\nsummary:"
+		for name,nos in sorted(self.count.items()):
+			if name in self.interesting or len(self.interesting) == 0:
+				print name, nos[0], nos[1]
+			
+		print "\nparsing:"
+		print "errors =", self.errors
+		print "fatals =", self.fatals
+		print "warnings =", self.warns
+	
+	def error(self, exception):
+		self.errors += 1
+		
+	def fatalError(self, exception):
+		self.fatals += 1
+		
+	def warning(self, exception):
+		self.warns += 1
+	
+# the end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/python/plugins/filter_timing.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,121 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Base Class for defining filter classes
+# All filter classes that get defined should derive from this base class
+#
+
+import errno
+import filter_interface
+import os
+import raptor
+import raptor_timing
+import sys
+
+class FilterTiming(filter_interface.Filter):
+	"""
+		Writes a logfile containing the timings for each Raptor process
+	"""
+	
+	def open(self, raptor_instance):
+		"""
+			Open a log file with the same name as the Raptor log file, with
+					'.timings' appended. This will contain only 'progress'
+					timing tags from the Raptor output
+			Parameters:
+				raptor_instance - Raptor
+					Instance of Raptor. FilterList usually passes in a cut-down
+							version of Raptor containing only a few attributes
+		"""
+		self.raptor = raptor_instance
+		self.logFileName = self.raptor.logFileName
+		# insert the time into the log file name
+		if self.logFileName:
+			self.path = (self.logFileName.path.replace("%TIME",
+					self.raptor.timestring) + ".timings")
+	
+			try:
+				dirname = str(self.raptor.logFileName.Dir())
+				if dirname and not os.path.isdir(dirname):
+					os.makedirs(dirname)
+			except os.error, e:
+				if e.errno != errno.EEXIST:
+					sys.stderr.write("%s : error: cannot create directory " +
+							"%s\n" % (raptor.name, dirname))
+					return False
+			try:
+				self.out = open(str(self.path), "w")
+			except:
+				self.out = None
+				sys.stderr.write("%s : error: cannot write log %s\n" %\
+					(raptor.name, self.path))
+				return False
+		self.start_times = {}
+		self.all_durations = []
+		self.namespace_written = False
+		self.open_written = False
+		return True
+				
+				
+	def write(self, text):
+		"""
+			Write out any tags with a 'progress_' tagName
+		"""
+		if "<progress:discovery " in text:
+			self.out.write(text)
+		elif "<progress:start " in text:
+			attributes = raptor_timing.Timing.extract_values(source = text)
+			self.start_times[(attributes["object_type"] + attributes["task"] +
+					attributes["key"])] = attributes["time"]
+		elif "<progress:end " in text:
+			attributes = raptor_timing.Timing.extract_values(source = text)
+			duration = (float(attributes["time"]) -
+					float(self.start_times[(attributes["object_type"] +
+					attributes["task"] + attributes["key"])]))
+			self.out.write(raptor_timing.Timing.custom_string(tag = "duration",
+					object_type = attributes["object_type"],
+					task = attributes["task"], key = attributes["key"],
+					time = duration))
+			self.all_durations.append(duration)
+		elif text.startswith("<?xml ") and not self.namespace_written:
+			self.out.write(text)
+			self.namespace_written = True
+		elif text.startswith("<buildlog ") and not self.open_written:
+			self.out.write(text)
+			self.open_written = True
+		return True	
+
+			
+	def summary(self):
+		"""
+			Print out extra timing info
+		"""
+		total_time = 0.0
+		for duration in self.all_durations:
+			total_time += duration
+		self.out.write(raptor_timing.Timing.custom_string(tag = "duration",
+				object_type = "all", task = "all", key = "all",
+				time = total_time) + "</buildlog>\n")
+	
+	
+	def close(self):
+		"""
+			Close the logfile
+		"""
+		try:
+			self.out.close
+			return True
+		except:
+			self.out = None
+		return False
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/python/plugins/filter_whatcomp.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,56 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Filter class for doing --what and --check operations
+#
+
+import os
+import sys
+import re
+import filter_interface
+import filter_what
+
+class FilterWhatComp(filter_what.FilterWhat):
+
+        def __init__(self): 
+		super(FilterWhatComp, self).__init__()
+
+	def write(self, text):
+		"process some log text"
+		ok = True
+		
+		for line in text.splitlines():
+			ok = filter_what.FilterWhat.write(self, line)
+			if not ok:
+				break
+				
+		self.ok = ok
+		return self.ok
+	
+	def start_bldinf(self,bldinf):
+		if "win" in self.buildparameters.platform:
+			dir = os.path.dirname(bldinf.replace("/","\\"))
+		else:
+			dir = os.path.dirname(bldinf)
+
+		self.outfile.write("-- abld -w \nChdir %s \n" % dir)
+		
+	def end_bldinf(self):
+		self.outfile.write("++ Finished\n")
+
+	def open(self, build_parameters):
+		t = filter_what.FilterWhat.open(self, build_parameters)
+		self.path_prefix_to_strip = os.path.abspath(build_parameters.epocroot)
+		self.path_prefix_to_add_on = build_parameters.incoming_epocroot
+		return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/python/raptor_api.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,221 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+# raptor_api module
+#
+# Python API for Raptor. External code should interact with Raptor via this
+# module only, as it is the only programatic interface considered public. The
+# command line --query option is also implemented using this module.
+
+# constants
+ALL = 1
+
+# objects
+
+class Reply(object):
+	"""object to return values from API calls.
+	"""
+	def __init__(self, text=""):
+		self.text = text
+	
+	def __str__(self):
+		name = type(self).__name__.lower()
+		
+		string = "<" + name
+		children = []
+		longend = False
+		
+		for attribute,value in self.__dict__.items():
+			if attribute != "text":
+				if isinstance(value, Reply):
+					children.append(value)
+				else:
+					string += " %s='%s'" % (attribute, value)
+		
+		if children or self.text:
+			string += ">"
+			longend = True
+		
+		if self.text:
+			string += self.text
+		
+		if children:
+			string += "\n"
+				
+		for c in children:
+			string += str(c)
+			
+		if longend:
+			string += "</%s>\n" % name
+		else:	
+			string += "/>\n"
+		
+		return string
+
+class Alias(Reply):
+	def __init__(self, name, meaning):
+		super(Alias,self).__init__()
+		self.name = name
+		self.meaning = meaning
+
+class Config(Reply):
+	def __init__(self, fullname, outputpath):
+		super(Config,self).__init__()
+		self.fullname = fullname
+		self.outputpath = outputpath
+
+class Product(Reply):
+	def __init__(self, name):
+		super(Product,self).__init__()
+		self.name = name
+
+import generic_path
+import raptor
+import raptor_data
+import re
+
+class Context(object):
+	"""object to contain state information for API calls.
+	
+	For example,
+	
+	api = raptor_api.Context()
+	val = api.getaliases("X")
+	"""
+	def __init__(self, initialiser=None):
+		# this object has a private Raptor object that can either be
+		# passed in or created internally.
+		
+		if initialiser == None:
+			self.__raptor = raptor.Raptor()
+		else:
+			self.__raptor = initialiser
+			
+	def stringquery(self, query):
+		"""turn a string into an API call and execute it.
+		
+		This is a convenience method for "lazy" callers.
+		
+		The return value is also converted into a well-formed XML string.
+		"""
+		
+		if query == "aliases":
+			aliases = self.getaliases()
+			return "".join(map(str, aliases)).strip()
+		
+		elif query == "products":
+			variants = self.getproducts()
+			return "".join(map(str, variants)).strip()
+		
+		elif query.startswith("config"):
+			match = re.match("config\[(.*)\]", query)
+			if match:
+				config = self.getconfig(match.group(1))
+				return str(config).strip()
+			else:
+				raise BadQuery("syntax error")
+		
+		raise BadQuery("unknown query")
+
+	def getaliases(self, type=""):
+		"""extract all aliases of a given type.
+		
+		the default type is "".
+		to get all aliases pass type=ALL
+		"""
+		aliases = []
+		
+		for a in self.__raptor.cache.aliases.values():
+			if type == ALL or a.type == type:
+				# copy the members we want to expose
+				aliases.append( Alias(a.name, a.meaning) )
+			
+		return aliases
+	
+	def getconfig(self, name):
+		"""extract the values for a given configuration.
+		
+		'name' should be an alias or variant followed optionally by a
+		dot-separated list of variants. For example "armv5_urel" or
+		"armv5_urel.savespace.vasco".
+		"""
+		names = name.split(".")
+		if names[0] in self.__raptor.cache.aliases:
+			x = self.__raptor.cache.FindNamedAlias(names[0])
+			
+			if len(names) > 1:
+				fullname = x.meaning + "." + ".".join(names[1:])
+			else:
+				fullname = x.meaning
+				
+		elif names[0] in self.__raptor.cache.variants:
+			fullname = name
+			
+		else:
+			raise BadQuery("'%s' is not an alias or a variant" % names[0])
+		
+		# create an evaluator for the named configuration
+		tmp = raptor_data.Alias("tmp")
+		tmp.SetProperty("meaning", fullname)
+		
+		units = tmp.GenerateBuildUnits(self.__raptor.cache)
+		evaluator = self.__raptor.GetEvaluator(None, units[0])
+		
+		# get the outputpath
+		# this is messy as some configs construct the path inside the FLM
+		# rather than talking it from the XML: usually because of some
+		# conditional logic... but maybe some refactoring could avoid that.
+		releasepath = evaluator.Get("RELEASEPATH")
+		if not releasepath:
+			raise BadQuery("could not get RELEASEPATH for config '%s'" % name)
+		
+		variantplatform = evaluator.Get("VARIANTPLATFORM")
+		varianttype = evaluator.Get("VARIANTTYPE")
+		featurevariantname = evaluator.Get("FEATUREVARIANTNAME")
+		
+		platform = evaluator.Get("TRADITIONAL_PLATFORM")
+		
+		if platform == "TOOLS2":
+			outputpath = releasepath
+		else:
+			if not variantplatform:
+				raise BadQuery("could not get VARIANTPLATFORM for config '%s'" % name)
+			
+			if featurevariantname:
+				variantplatform += featurevariantname
+				
+			if not varianttype:
+				raise BadQuery("could not get VARIANTTYPE for config '%s'" % name)
+			
+			outputpath = str(generic_path.Join(releasepath, variantplatform, varianttype))
+		
+		return Config(fullname, outputpath)
+		
+	def getproducts(self):
+		"""extract all product variants."""
+		
+		variants = []
+		
+		for v in self.__raptor.cache.variants.values():
+			if v.type == "product":
+				# copy the members we want to expose
+				variants.append( Product(v.name) )
+			
+		return variants
+	
+class BadQuery(Exception):
+	pass
+
+# end of the raptor_api module
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/python/raptor_buildplatform.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,158 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Classes, methods and regex available for use in log filters
+#
+
+# This particular file is preliminary and under development.
+
+class BuildPlatform(object):
+	""" A build platform is a set of configurations which share
+	the same metadata. In other words, a set of configurations
+	for which the bld.inf and MMP files pre-process to exactly
+	the same text."""
+
+	def __init__(self, build):
+		evaluator = build.GetEvaluator(None, buildConfig)
+		self.selfform= evaluator.CheckedGet("TRADITIONAL_PLATFORM")
+		epocroot = evaluator.CheckedGet("EPOCROOT")
+		self.epocroot = generic_path.Path(epocroot)
+
+		sbs_build_dir = evaluator.CheckedGet("SBS_BUILD_DIR")
+		self.sbs_build_dir = generic_path.Path(sbs_build_dir)
+		flm_export_dir = evaluator.CheckedGet("FLM_EXPORT_DIR")
+		self.flm_export_dir = generic_path.Path(flm_export_dir)
+		self.cacheid = flm_export_dir
+		if raptor_utilities.getOSPlatform().startswith("win"):
+			self.platmacros = evaluator.CheckedGet( "PLATMACROS.WINDOWS")
+		else:
+			self.platmacros = evaluator.CheckedGet( "PLATMACROS.LINUX")
+
+
+		# is this a feature variant config or an ordinary variant
+		fv = evaluator.Get("FEATUREVARIANTNAME")
+		if fv:
+			variantHdr = evaluator.CheckedGet("VARIANT_HRH")
+			variantHRH = generic_path.Path(variantHdr)
+			self.isfeaturevariant = True
+		else:
+			variantCfg = evaluator.CheckedGet("VARIANT_CFG")
+			variantCfg = generic_path.Path(variantCfg)
+			if not variantCfg in variantCfgs:
+				# get VARIANT_HRH from the variant.cfg file
+				varCfg = getVariantCfgDetail(self.epocroot, variantCfg)
+				variantCfgs[variantCfg] = varCfg['VARIANT_HRH']
+				# we expect to always build ABIv2
+				if not 'ENABLE_ABIV2_MODE' in varCfg:
+					build.Warn("missing flag ENABLE_ABIV2_MODE in %s file. ABIV1 builds are not supported.",
+										   str(variantCfg))
+			variantHRH = variantCfgs[variantCfg]
+			self.isfeaturevariant = False
+
+			self.variant_hrh = variantHRH
+			build.Info("'%s' uses variant hrh file '%s'", buildConfig.name, variantHRH)
+			self.systeminclude = evaluator.CheckedGet("SYSTEMINCLUDE")
+
+
+			# find all the interface names we need
+			ifaceTypes = evaluator.CheckedGet("INTERFACE_TYPES")
+			interfaces = ifaceTypes.split()
+
+			for iface in interfaces:
+				detail[iface] = evaluator.CheckedGet("INTERFACE." + iface)
+
+			# not test code unless positively specified
+			self.testcode = evaluator.CheckedGet("TESTCODE", "")
+
+			# make a key that identifies this platform uniquely
+			# - used to tell us whether we have done the pre-processing
+			# we need already using another platform with compatible values.
+
+			key = str(self.variant_hrh) \
+				+ str(self.epocroot) \
+			+ self.systeminclude \
+			+ self.platform
+
+			# Keep a short version of the key for use in filenames.
+			uniq = hashlib.md5()
+			uniq.update(key)
+
+			plat.key = key
+			plat.key_md5 = "p_" + uniq.hexdigest()
+			del uniq
+
+	def __hash__(self):
+		return hash(self.platform) + hash(self.epocroot) + hash(self.variant_hrh) + hash(self.systeminclude) + hash(self.testcode)
+
+	def __cmp__(self,other):
+		return cmp(self.hash(), other.hash())
+
+
+	@classmethod 
+	def fromConfigs(configsToBuild, build):
+		""" Group the list of configurations into "build platforms"."""
+		platforms = Set()
+		
+		for buildConfig in configsToBuild:
+			# get everything we need to know about the configuration
+			plat = BuildPlatform(build = build)
+
+			# compare this configuration to the ones we have already seen
+
+			# Is this an unseen export platform?
+			# concatenate all the values we care about in a fixed order
+			# and use that as a signature for the exports.
+			items = ['EPOCROOT', 'VARIANT_HRH', 'SYSTEMINCLUDE', 'TESTCODE', 'export']
+			export = ""
+			for i in  items:
+				if i in detail:
+					export += i + str(detail[i])
+
+			if export in exports:
+				# add this configuration to an existing export platform
+				index = exports[export]
+				self.ExportPlatforms[index]['configs'].append(buildConfig)
+			else:
+				# create a new export platform with this configuration
+				exports[export] = len(self.ExportPlatforms)
+				exp = copy.copy(detail)
+				exp['PLATFORM'] = 'EXPORT'
+				exp['configs']  = [buildConfig]
+				self.ExportPlatforms.append(exp)
+
+			# Is this an unseen build platform?
+			# concatenate all the values we care about in a fixed order
+			# and use that as a signature for the platform.
+			items = ['PLATFORM', 'EPOCROOT', 'VARIANT_HRH', 'SYSTEMINCLUDE', 'TESTCODE']
+			if raptor_utilities.getOSPlatform().startswith("win"):
+				items.append('PLATMACROS.WINDOWS')
+			else:
+				items.append('PLATMACROS.LINUX')
+
+			items.extend(interfaces)
+			platform = ""
+			for i in  items:
+				if i in detail:
+					platform += i + str(detail[i])
+
+			if platform in platforms:
+				# add this configuration to an existing build platform
+				index = platforms[platform]
+				BuildPlatforms[index]['configs'].append(buildConfig)
+			else:
+				# create a new build platform with this configuration
+				platforms[platform] = len(self.BuildPlatforms)
+				plat.configs = [buildConfig]
+				BuildPlatforms.append(detail)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/python/raptor_timing.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,168 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# timings API
+# This API can be used to start and stop timings in order to measure performance
+#
+import time
+
+class Timing(object):
+	
+	@classmethod
+	def discovery_string(cls, object_type, count):
+		"""
+			Returns a tag that can be used to show what is about to be
+					"processed"
+			Parameters:
+				object_type - string
+					Type of object that is about to be "processed" in this task
+				count - int
+					Number of objects of input "object_type" are about to be
+							"processed"
+			Returns:
+				string
+					XML tag in the format that can be printed directly to a
+							Raptor log
+		"""
+		return "<progress:discovery object_type='" + str(object_type) + \
+				"' count='" + str(count) + "' />\n"
+				
+	
+	@classmethod
+	def start_string(cls, object_type, task, key):
+		"""
+			Returns a tag that can be used to show what is being "processed"
+					and the time it started
+			Parameters:
+				object_type - string
+					Type of object that is being "processed" in this task
+				task - string
+					What is being done with the object being "processed"
+				key - string
+					Unique identifier for the object being "processed"
+			Returns:
+				string
+					XML tag in the format that can be printed directly to a
+							Raptor log
+		"""
+		return "<progress:start object_type='" + str(object_type) + \
+				"' task='" + str(task) + "' key='" + str(key) + \
+				"' time='" + str(time.time()) + "' />\n"
+	
+	
+	@classmethod
+	def end_string(cls, object_type, task, key):
+		"""
+			Returns a tag that can be used to show what was being "processed"
+					and the time it finished
+			Parameters:
+				object_type - string
+					Type of object that was being "processed" in this task
+				task - string
+					What was being done with the object being "processed"
+				key - string
+					Unique identifier for the object that was "processed"
+			Returns:
+				string
+					XML tag in the format that can be printed directly to a
+							Raptor log
+		"""
+		return "<progress:end object_type='" + str(object_type) + \
+				"' task='" + str(task) + "' key='" + str(key) + \
+				"' time='" + str(time.time()) + "' />\n"
+	
+	
+	@classmethod
+	def custom_string(cls, tag = "duration", object_type = "all", task = "all",
+			key = "all", time = 0.0):
+		"""
+			Returns a custom tag in the 'progress' tag format
+			
+			Parameters:
+				tag - string
+					String to be used for the tag 
+				object_type - string
+					Type of object that was being "processed" in this task
+				task - string
+					What was being done with the object being "processed"
+				key - string
+					Unique identifier for the object that was "processed"
+				time - float
+					The time to be included in the tag
+			Returns:
+				string
+					XML tag in the format that can be printed directly to a
+							Raptor log
+		"""		
+		time_string = "time"
+		if tag == "duration":
+			time_string = "duration" 
+		return "<progress:" + str(tag) + " object_type='" + str(object_type) + \
+				"' task='" + str(task) + "' key='" + str(key) + \
+				"' " + time_string + "='" + str(time) + "' />\n"
+	
+	
+	@classmethod
+	def extract_values(cls, source):
+		"""
+			Takes, as input, a single tag of the format returned by one of the
+					above progress functions. Will extract the attributes and
+					return them as a dictionary. Returns an empty dictionary {}
+					if the tag name is not recognised or there is a parse error
+			Parameters:
+				source - string
+					The input string from which extracted attributes are
+							required
+			Returns:
+				dictionary
+					Dictionary containing the attributes extracted from the
+							input string. Returns an empty dictionary {} if the
+							tag name is not recognised or there is a parse error
+			NB: This function will not work correctly if the 'source' variable
+					contains multiple tags
+		"""
+		import re
+		
+		attributes = {}
+					
+		try:
+			match = re.match(re.compile(".*object_type='(?P<object_type>.*?)'"),
+					source)
+			attributes["object_type"] = match.group("object_type")
+		except AttributeError, e:
+			print e
+			attributes["object_type"] = ""
+		try:
+			match = re.match(re.compile(".*task='(?P<task>.*?)'"), source)
+			attributes["task"] = match.group("task")
+		except AttributeError, e:
+			print e
+			attributes["task"] = ""
+		try:
+			match = re.match(re.compile(".*key='(?P<key>.*?)'"), source)
+			attributes["key"] = match.group("key")
+		except AttributeError:
+			attributes["key"] = ""
+		try:
+			match = re.match(re.compile(".*time='(?P<time>.*?)'"), source)
+			attributes["time"] = match.group("time")
+		except AttributeError:
+			attributes["time"] = ""
+		try:
+			match = re.match(re.compile(".*count='(?P<count>.*?)'"), source)
+			attributes["count"] = match.group("count")
+		except AttributeError:
+			attributes["count"] = ""
+			
+		return attributes
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/System_Definition.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+
+<SystemDefinition name="MCL" schema="1.4.0">
+  
+  <systemModel>
+    <layer name="Raptor">
+      <module name="Smoke Tests">
+        <component name="simple">
+          <unit unitID="simpleID" name="simpleName" bldFile="simple"/>
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/cluster/README	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+
+Testing a Cluster to See if it is Correctly Configured
+--------------------------------------------------------
+
+The tests in this directory can be seen only as examples of how to test a cluster.  They would have to be customised before use on any particular cluster.
+
+The tests here are aimed at:
+
+1) Testing that the configuration of each nodes and that services such as NIS,DNS and NTP are configured.
+  This requires that logins for the current user work on all nodes.
+2) Checking that raptor-relevant software is installed and that the compiler can obtain licenses.
+3) Testing that PVM is installed and will run without crashing (solves a problem that has occurred in the past).
+4) Tests that PVM can run commands on all nodes.
+
+
+Typically one would run headtest.sh which performs the tests relating to items 1-3. It causes "nodetest.sh" to be run on all nodes.
+
+e.g.
+	./headtest.sh node1 node2 node3
+
+pvmtest.sh can be used to check that pvm is working by running the compiler on each node via pvm.
+	./pvmtest node1 node2 node3
+
+None of these tests is automatic - one must simply observe the output.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/cluster/headtest.sh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+# Test all nodes in a cluster
+# arguments are the list of nodes.
+
+NODELIST="$@"
+
+(
+echo "Date and time check:"
+echo "    The numbers following each hostname are the date and time in seconds"
+echo "    They should all be the same otherwise make errors may occur during builds."
+echo "    "`hostname`' '`date +%s`
+for i in $NODELIST; do
+	ssh $i 'echo "    "`hostname`' '`date +%s`'&
+done
+)
+
+
+
+for i in $NODELIST; do
+	ssh $i "NODELIST=\"$NODELIST\" $SBS_HOME/test/cluster/nodetest.sh"
+done
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/cluster/nodetest.sh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,46 @@
+#!/bin/sh
+
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+TESTUSER="$@"
+LOCALTOOLS_HOME=/opt/symbian
+
+
+echo 
+hostname
+echo
+ypwhich 
+mount | grep home
+ls -ld /home/$TESTUSER
+
+ls -l $LOCALTOOLS_HOME/a616/ARM/RVCT/Programs/2.2/308/linux-pentium/armcc 
+ls -l $LOCALTOOLS_HOME/make-pvm-381/pvmgmake 
+ls -l $LOCALTOOLS_HOME/pvm3/bin/LINUX/pvmgmake_pvm 
+ls -l $LOCALTOOLS_HOME/pvm3/bin/LINUX/pvmgmake_avg 
+
+$LOCALTOOLS_HOME/pvm3/bin/LINUX/pvmgmake_pvm 
+#$LOCALTOOLS_HOME/pvm3/bin/LINUX/pvmgmake_avg
+
+
+$LOCALTOOLS_HOME/a616/ARM/RVCT/Programs/2.2/308/linux-pentium/armcc 2>&1 | grep ARM
+
+#connectivity
+for i in $NODELIST; do
+	echo "Pinging $i"
+	ping -c 1  $i| grep "bytes from"
+done
+
+echo "---------------------------------------------------------------------------"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/cluster/pvmtest.sh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,36 @@
+#!/bin/sh
+
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+#
+
+# Test all nodes in a cluster
+# arguments are the list of nodes.
+
+NODELIST="$@"
+
+for i in $NODELIST; do
+	ssh $i "ls -l /tmp/pvm.$UID"
+done
+
+for i in $NODELIST; do
+	(
+	echo "spawn -($i) -> /bin/hostname"
+	echo "spawn -($i) -> $PVM_ROOT/bin/LINUX/pvmgmake_pvm"
+	echo "quit"
+	) | pvm
+done
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/common/raptor_tests.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,697 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+# run the smoke tests
+
+import os
+import re
+import stat
+import sys
+import subprocess
+import traceback
+from shutil import rmtree
+
+sys.path.append(os.environ["SBS_HOME"]+"/python")
+from raptor_meta import BldInfFile
+
+logDir = "$(EPOCROOT)/epoc32/build/smoketestlogs"
+
+debug_mode_active = False
+
+# Environment #################################################################
+
+# On MYS there is USERNAME but not USER
+if 'USER' not in os.environ:
+	os.environ['USER'] = os.environ['USERNAME']
+
+def activate_debug():
+	"""
+		Activate debug-mode remotely
+	"""
+	global debug_mode_active
+	debug_mode_active = True
+
+# Determine the OS version in the epocroot we're testing
+# since some tests expect different outcomes for 9.4 and 9.5
+def getsymbianversion():
+	epocroot = os.environ['EPOCROOT']
+	b = open (epocroot+"/epoc32/data/buildinfo.txt","r")
+	binfo = " ".join(b.readlines())
+	vmatch = (re.compile("v(9\.[0-9])")).search(binfo)
+	if vmatch:
+		osversion = vmatch.group(1)
+	else:
+		osversion = '9.4'
+	return osversion
+
+envRegex = re.compile("\$\((.+?)\)")
+fixEnvironment = ['EPOCROOT', 'SBS_HOME', 'SBS_CYGWIN', 'SBS_MINGW', 'SBS_PYTHON']
+
+def ReplaceEnvs(item):
+	
+	envs = envRegex.findall(item)
+
+	for e in set(envs):
+		try:
+			val = os.environ[e]
+			if e in fixEnvironment:
+				# Raptor "fixes up" EPOCROOT etc. so we must do the same:
+				# add the drive letter (make absolute)
+				val = os.path.abspath(val)
+				# use forward slashes
+				val = val.replace("\\", "/")
+				# remove trailing slashes
+				val = val.rstrip("/")
+			item = item.replace("$(" + e + ")", val)
+		except KeyError:
+			print e, "is not set in the environment"
+			raise ValueError
+				
+	return item
+
+# Utility functions ###########################################################
+
+
+
+def where(input_file):
+	"""Search for 'input_file' in the system path"""
+	locations = []
+	if sys.platform.startswith("win"):
+		if not input_file.lower().endswith(".exe"):
+			input_file += ".exe"
+			for current_file in [loop_number + "\\" + input_file for loop_number in
+					     os.environ["PATH"].split(";")]:
+				try:
+					stat = os.stat(current_file)
+					locations.append(current_file)
+				except OSError, error:
+					pass
+	else:
+		whichproc = subprocess.Popen(args=["which", input_file], 
+					stdout=subprocess.PIPE,
+					stderr=subprocess.STDOUT,
+					shell=False,
+					universal_newlines=True)
+		output = whichproc.stdout.readlines()
+		whichproc.wait()
+
+		if len(output) > 0:
+			locations.append(output[0:(len(output) - 1)])
+				
+	if len(locations) == 0:
+		print "Error: " + input_file + " not defined in PATH environment variable"
+	else:
+		return locations[0]
+	
+def clean_epocroot():
+	"""
+	This method walks through epocroot and cleans every file and folder that is
+	not present in the manifest file
+	"""
+	epocroot = os.path.abspath(os.environ['EPOCROOT']).replace('\\','/')
+	print "Cleaning Epocroot: %s" % epocroot
+	all_files = {} # dictionary to hold all files
+	folders = [] # holds all unique folders in manifest
+	host_platform = os.environ["HOSTPLATFORM_DIR"]
+	try:
+		mani = "$(EPOCROOT)/manifest"
+		manifest = open(ReplaceEnvs(mani), "r")
+		le = len(epocroot)
+		for line in manifest:
+			line = line.replace("$(HOSTPLATFORM_DIR)", host_platform)
+			line = line.replace("./", epocroot+"/").rstrip("\n")
+			all_files[line] = True
+			# This bit makes a record of unique folders into a list
+			pos = line.rfind("/", le)
+			while pos > le: # Look through the parent folders
+				f = line[:pos]
+				if f not in folders:
+					folders.append(f)
+				pos = line.rfind("/", le, pos)
+				
+
+		# This algorithm walks through epocroot and handles files and folders
+		walkpath = "$(EPOCROOT)"
+		for (root, dirs, files) in os.walk(ReplaceEnvs(walkpath), topdown =
+				False):
+			if root.find(".hg") != -1:
+				continue
+
+			# This loop handles all files
+			for name in files:
+				name = os.path.join(root, name).replace("\\", "/")
+								
+				if name not in all_files:
+					try:
+						os.remove(name)
+					except:
+						# chmod to rw and try again
+						try:
+							os.chmod(name, stat.S_IRWXU)
+							os.remove(name)
+						except:							
+							print "\nEPOCROOT-CLEAN ERROR:"
+							print (sys.exc_type.__name__ + ":"), \
+									sys.exc_value
+							if sys.exc_type.__name__ != "WindowsError":
+								print traceback.print_tb(sys.exc_traceback)
+									
+			# This loop handles folders
+			for name in dirs:
+				if name.find(".hg") != -1:
+					continue
+				
+				name = os.path.join(root, name).replace("\\", "/")
+				if name not in all_files and name not in folders:
+					# Remove the folder fully with no errors if full
+					try:
+						rmtree(ReplaceEnvs(name))
+					except:
+						print "\nEPOCROOT-CLEAN ERROR:"
+						print (sys.exc_type.__name__ + ":"), \
+								sys.exc_value
+						if sys.exc_type.__name__ != "WindowsError":
+							print traceback.print_tb(sys.exc_traceback)
+	except IOError,e:
+		print e
+	
+	print "Epocroot Cleaned"
+
+def fix_id(input_id):
+	return input_id.zfill(4)
+
+
+def grep(file, string):
+	return
+
+	
+# Test classes ################################################################
+
+class SmokeTest(object):
+	"""Base class for Smoke Test objects.
+	
+	Each test is defined (minimally) by,
+	1) an ID number as a string
+	2) a name
+	3) a raptor command-line
+	4) some parameters to check the command results against
+
+	The run() method will,
+	1) delete all the listed target files
+	2) execute the raptor command
+	3) check that the test results match the test parameters
+	4) count the warnings and errors reported
+	"""
+	
+	PASS = "pass"
+	FAIL = "fail"
+	SKIP = "skip"	
+
+	def __init__(self):
+		
+		self.id = "0"
+		self.name = "smoketest"
+		self.description = ""
+		self.command = "sbs --do_what_i_want"
+		self.targets = []
+		self.missing = 0
+		self.warnings = 0
+		self.errors = 0
+		self.exceptions = 0
+		self.returncode = 0
+
+		self.onWindows = sys.platform.startswith("win")
+
+		# These variables are for tests that treat the text as a list of lines. In
+		# particular, "." will not match end-of-line. This means that, for example,
+		# "abc.*def" will only match if "abc" and "def" appear on the same line.
+		self.mustmatch = []
+		self.mustnotmatch = []
+		self.mustmatch_singleline = []
+		self.mustnotmatch_singleline = []
+		
+		# These variables are for tests that treat the text as a single string of
+		# characters. The pattern "." will match anything, including end-of-line.
+		self.mustmatch_multiline = []
+		self.mustnotmatch_multiline = []
+		
+		self.countmatch = []
+
+		self.outputok = True
+		self.usebash = False
+		self.failsbecause = None
+		self.result = SmokeTest.SKIP
+		self.environ = {} # Allow tests to set the environment in which commands run.
+		self.sbs_build_dir = "$(EPOCROOT)/epoc32/build"
+
+	def run(self, platform = "all"):
+		previousResult = self.result
+		self.id = fix_id(self.id)
+		try:
+			if self.runnable(platform):
+				
+				if not self.pretest():
+					self.result = SmokeTest.FAIL
+				
+				elif not self.test():
+					self.result = SmokeTest.FAIL
+				
+				elif not self.posttest():
+					self.result = SmokeTest.FAIL
+				
+				else:
+					self.result = SmokeTest.PASS
+			else:
+				self.skip(platform)
+		except Exception, e:
+			print e
+			self.result = SmokeTest.FAIL
+		
+		# print the result of this run()
+		self.print_result(internal = True)
+		
+		# if a previous run() failed then the overall result is a FAIL
+		if previousResult == SmokeTest.FAIL:
+			self.result = SmokeTest.FAIL
+	
+	def print_result(self, value = "", internal = False):
+		# the test passed :-)
+		
+		result = self.result
+			
+		string = ""
+		if not internal:
+			string += "\n" + self.name + ": "
+		
+		if value:
+			print string + value
+		else:
+			if result == SmokeTest.PASS:
+				string += "PASSED"
+			elif result == SmokeTest.FAIL:
+				string += "FAILED"
+			
+			print string 
+	
+	def runnable(self, platform):
+		# can this test run on this platform?	
+		if platform == "all":
+			return True
+		
+		isWin = self.onWindows
+		wantWin = platform.startswith("win")
+		
+		return (isWin == wantWin)
+
+	def skip(self, platform):
+		print "\nSKIPPING:", self.name, "for", platform
+
+	def logfileOption(self):
+		return "-f " + self.logfile();
+	
+	def logfile(self):
+		return logDir + "/" + self.name + ".log"
+	
+	def makefileOption(self):
+		return "-m " + self.makefile();
+	
+	def makefile(self):
+		return logDir + "/" + self.name + ".mk"
+
+	def removeFiles(self, files):
+		for t in files:
+			tgt = os.path.normpath(ReplaceEnvs(t))
+
+			if os.path.exists(tgt):
+				try:
+					os.chmod(tgt, stat.S_IRWXU)
+					if os.path.isdir(tgt):
+						rmtree(tgt)
+					else:
+						os.remove(tgt)
+				except OSError:
+					print "Could not remove", tgt, "before the test"
+					return False
+		return True
+
+
+	def clean(self):
+		# remove all the target files
+
+		# flatten any lists first (only 1 level of flattenening expected)
+		# these indicate alternative files - one of them will exist after a build
+		removables = []
+		for i in self.targets:
+			if type(i) is not list:
+				removables.append(i)
+			else:
+				removables.extend(i)
+				
+		return self.removeFiles(removables)
+
+	def pretest(self):
+		# what to do before the test runs
+		
+		print "\nID:", self.id
+		print "TEST:", self.name
+
+		return self.clean()
+			
+	def test(self):
+		# run the actual test
+		
+		# put the makefile and log in $EPOCROOT/build/smoketestlogs
+		if self.usebash:
+			command = ReplaceEnvs(self.command)
+		else:
+			command = ReplaceEnvs(self.command + 
+					" " + self.makefileOption() + 
+					" " + self.logfileOption())
+	
+		print "COMMAND:", command
+
+
+		# Any environment settings specific to this test
+		shellenv = os.environ.copy()
+		for ev in self.environ:
+			shellenv[ev] = self.environ[ev]
+
+		if self.usebash:
+			shellpath = shellenv['PATH']
+			
+			if 'SBS_SHELL' in os.environ:
+				BASH = os.environ['SBS_SHELL']
+			else:
+				if self.onWindows:
+					if 'SBS_CYGWIN' in shellenv:
+						BASH = ReplaceEnvs("$(SBS_CYGWIN)/bin/bash.exe")
+					else:
+						BASH = ReplaceEnvs("$(SBS_HOME)/win32/cygwin/bin/bash.exe")
+				else:
+					BASH = ReplaceEnvs("$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bin/bash")
+				
+			if self.onWindows:
+				if 'SBS_CYGWIN' in shellenv:
+					shellpath = ReplaceEnvs("$(SBS_CYGWIN)/bin") + ";" + shellpath
+				else:
+					shellpath = ReplaceEnvs("$(SBS_HOME)/win32/cygwin/bin") + ";" + shellpath
+
+			shellenv['SBSMAKEFILE']=ReplaceEnvs(self.makefile())
+			shellenv['SBSLOGFILE']=ReplaceEnvs(self.logfile())
+			shellenv['PATH']=shellpath
+			shellenv['PYTHON_HOME'] = ""
+			shellenv['CYGWIN']="nontsec nosmbntsec"
+
+			p = subprocess.Popen(args=[BASH, '-c', command], 
+					stdout=subprocess.PIPE,
+					stderr=subprocess.PIPE,
+					env=shellenv,
+					shell=False,
+					universal_newlines=True)
+
+			(std_out, std_err) = p.communicate()
+			
+			self.output = std_out + std_err
+		else:
+			p = subprocess.Popen(command, 
+					stdout=subprocess.PIPE,
+					stderr=subprocess.PIPE,
+					env=shellenv,
+					shell=True,
+					universal_newlines=True)
+
+			(std_out, std_err) = p.communicate()
+			
+			self.output = std_out + std_err
+			
+		if debug_mode_active:
+			print self.output
+
+		if p.returncode != self.returncode:
+			print "RETURN: got", p.returncode, "expected", self.returncode
+			return False
+			
+		return True
+	
+	def posttest(self):
+		# what to do after the test has run
+	
+		# count the targets that got built
+		found = 0
+		missing = []
+		for t in self.targets:
+			if type(t) is not list:
+				target_alternatives=[t]
+
+			found_flag = False	
+			for alt in target_alternatives:
+				tgt = os.path.normpath(ReplaceEnvs(alt))
+				if os.path.exists(tgt):
+					found_flag = True
+					break
+			if found_flag:
+				found += 1
+			else:
+				missing.append(tgt)
+	
+		# count the errors and warnings
+		warn = 0
+		error = 0
+		exception = 0
+		lines = self.output.split("\n")
+	
+		for line in lines:
+			if line.find("sbs: warning:") != -1 or line.find("<warning") != -1:
+				warn += 1
+			elif line.find("sbs: error:") != -1 or line.find("<error") != -1:
+				error += 1
+			elif line.startswith("Traceback"):
+				exception += 1
+
+		# Check the output for required, forbidden and counted regexp matches
+		self.outputok = True
+		
+		for expr in self.mustmatch_singleline + self.mustmatch:
+			if not re.search(expr, self.output, re.MULTILINE):
+				self.outputok = False
+				print "OUTPUTMISMATCH: output did not match: %s" % expr
+
+		for expr in self.mustnotmatch_singleline + self.mustnotmatch:
+			if re.search(expr, self.output, re.MULTILINE):
+				self.outputok = False
+				print "OUTPUTMISMATCH: output should not have matched: %s" % expr
+
+		for expr in self.mustmatch_multiline:
+			if not re.search(expr, self.output, re.DOTALL):
+				self.outputok = False
+				print "OUTPUTMISMATCH: output did not match: %s" % expr
+
+		for expr in self.mustnotmatch_multiline:
+			if re.search(expr, self.output, re.DOTALL):
+				self.outputok = False
+				print "OUTPUTMISMATCH: output should not have matched: %s" % expr
+
+		for (expr,num) in self.countmatch:
+			expr_re = re.compile(expr)
+			matchnum = len(expr_re.findall(self.output))
+			if  matchnum != num:
+				print "OUTPUTMISMATCH: %d matches occurred when %d were expected: %s" % (matchnum, num, expr)
+				self.outputok = False
+
+		# Ignore errors/warnings if they are set to (-1)
+		if self.errors == (-1):
+			self.errors = error
+		if self.warnings == (-1):
+			self.warnings= warn
+
+		# all as expected?
+		if  self.missing == len(missing) \
+				and self.warnings == warn \
+				and self.errors == error \
+				and self.exceptions == exception \
+				and self.outputok:
+			return True
+	
+		# something was wrong :-(
+	
+		if len(missing) != self.missing:
+			print "MISSING: %d, expected %s" % (len(missing), self.missing)
+			for file in missing:
+				print "\t%s" % (file)
+			
+		if warn != self.warnings:
+			print "WARNINGS: %d, expected %d" % (warn, self.warnings)
+		
+		if error != self.errors:
+			print "ERRORS: %d, expected %d" % ( error, self.errors)
+		
+		if exception != self.exceptions:
+			print "EXCEPTIONS: %d, expected %d" % (exception, self.exceptions)
+		
+		return False
+	
+	def addbuildtargets(self, bldinfsourcepath, targetsuffixes):
+		"""Add targets that are under epoc32/build whose path
+		can change based on an md5 hash of the path to the bld.inf.
+		"""
+
+		fragment = BldInfFile.outputPathFragment(bldinfsourcepath)
+
+		for t in targetsuffixes:
+			if type(t) is not list:
+				newt=self.sbs_build_dir+'/'+fragment+"/"+t
+				self.targets.append(newt)
+			else:
+				self.targets.append([self.sbs_build_dir+'/'+fragment+"/"+x for x in t])
+		return 
+
+# derived class for tests that invoke some process, which have no log file and no makefile
+# e.g. unit tests
+
+class GenericSmokeTest(SmokeTest):
+	
+	def __init__(self):
+		SmokeTest.__init__(self)
+
+	def logfileOption(self):
+		return ""
+	
+	def makefileOption(self):
+		return ""
+	
+	def posttest(self):
+		# dump the standard output to a log file
+		dir = ReplaceEnvs(logDir)
+		logfile = os.path.join(dir, self.name + ".log")
+		try:
+			if not os.path.exists(dir):
+				os.makedirs(dir)
+			file = open(logfile, "w")
+			file.write(self.output)
+			file.close()
+		except:
+			print "Could not save stdout in", logfile
+			return False
+		
+		# do the base class things too
+		return SmokeTest.posttest(self)
+	
+# derived class for --check, --what and .whatlog tests - these all write to stdout, but may
+# not actually build anything
+
+class CheckWhatSmokeTest(SmokeTest):
+	
+	def __init__(self):
+		SmokeTest.__init__(self)
+		
+		# regular expression match object to restrict comparisons to specific lines
+		self.regexlinefilter = None
+		
+		# paths in --what output are tailored to the host OS, hence slashes are converted appropriately
+		# .whatlog output is used verbatim from the build/TEM/EM output
+		self.hostossensitive = True
+		
+		# Indicate whether output is expected to appear only once. If so, set it to True
+		self.output_expected_only_once = False 
+	
+	def posttest(self):
+		outlines = self.output.splitlines()
+		if self.output_expected_only_once:
+			outlines_left = list(outlines) 
+		
+		ok = True
+		seen = []
+		
+		# check for lines that we expected to see, optionally filtered
+		for line in self.stdout:
+			if self.regexlinefilter and not self.regexlinefilter.match(line):
+				continue
+			line = ReplaceEnvs(line)
+			if self.hostossensitive and self.onWindows:
+					line = line.replace("/", "\\")
+				
+			if line in outlines:
+				seen.append(line)
+				if self.output_expected_only_once:
+					outlines_left.remove(line) 
+			else:
+				print "OUTPUT NOT FOUND:", line
+				ok = False
+		
+		# and check for extra lines that we didn't expect, optionally filtered
+		for line in outlines:
+			if self.regexlinefilter and not self.regexlinefilter.match(line):
+				continue
+			if not line in seen:
+				print "UNEXPECTED OUTPUT:", line
+				ok = False
+		
+		# and check for lines that we expected to see only once
+		if self.output_expected_only_once:
+			for line in outlines_left:
+				print "OUTPUT MORE THAN ONCE:", line
+				ok = False
+
+			
+		# do the base class things too
+		return (SmokeTest.posttest(self) and ok)	
+
+# derived class for tests that also need to make sure that certain files
+# are NOT created - sort of anti-targets.
+
+class AntiTargetSmokeTest(SmokeTest):
+
+	def __init__(self):
+		SmokeTest.__init__(self)
+		self.antitargets = []
+
+	def pretest(self):
+		""" Prepare for the test """
+		# parent pretest first 
+		ok = SmokeTest.pretest(self)
+		
+		# remove all the anti-target files
+		return (self.removeFiles(self.antitargets) and ok)
+	
+	def posttest(self):
+		""" look for antitargets """
+		ok = True
+		for t in self.antitargets:
+			tgt = os.path.normpath(ReplaceEnvs(t))
+			if os.path.exists(tgt):
+				print "UNWANTED", tgt
+				ok = False
+				
+		# do the base class things too
+		return (SmokeTest.posttest(self) and ok)
+	
+	def addbuildantitargets(self, bldinfsourcepath, targetsuffixes):
+		"""Add targets that are under epoc32/build whose path
+		can change based on an md5 hash of the path to the bld.inf.
+		"""
+
+		fragment = BldInfFile.outputPathFragment(bldinfsourcepath)
+
+		for t in targetsuffixes:
+			if type(t) is not list:
+				newt="$(EPOCROOT)/epoc32/build/"+fragment+"/"+t
+				self.antitargets.append(newt)
+			else:
+				self.antitargets.append(["$(EPOCROOT)/epoc32/build/"+fragment+"/"+x for x in t])
+		return
+
+	
+# the end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/common/run_tests.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,537 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+# Runs the specified suite of raptor tests
+
+import os
+import sys
+import re
+import imp
+import datetime
+import traceback
+raptor_tests = imp.load_source("raptor_tests", "common/raptor_tests.py")
+
+# Command line options ########################################################
+from optparse import OptionParser
+
+parser = OptionParser(
+		prog = "run",
+		usage = "%prog [Options]")
+
+parser.add_option("-u", "--upload", action = "store", type = "string",
+		dest = "upload", default = None,
+		help = "Path for uploading results (Can be UNC path)")
+parser.add_option("-b", "--branch", action = "store", type = "choice",
+		dest = "branch", choices = ["master", "m", "fix", "f", "wip", "w"],
+		help = "string indicating which branch is being tested:\n" + \
+		"master, fix or wip. Default is 'fix'")
+parser.add_option("-s", "--suite", action = "store", type = "string",
+		dest = "suite", help = "regex to use for selecting test suites")
+parser.add_option("-t", "--tests", action = "store", type = "string",
+		dest = "tests", help = "regex to use for selecting tests")
+parser.add_option("-d", "--debug", action = "store_true", dest = "debug_mode",
+		default = False, help = "Turns on debug-mode")
+parser.add_option("--test-home", action = "store", type = "string",
+		dest = "test_home",
+		help = "Location of custom .sbs_init.xml (name of directory in " +
+		"'custom_options'): test/custom_options/<test_home>/.sbs_init.xml")
+parser.add_option("--what-failed", action = "store_true", dest = "what_failed",
+		help = "Re-run all the tests that failed in the previous test run")
+parser.add_option("--clean", action = "store_true", dest = "clean",
+		help = "Clean EPOCROOT after each test is run")
+
+
+(options, args) = parser.parse_args()
+
+# Check for --what-failed and override '-s' and '-t' (including flagless regex)
+if options.what_failed:
+	try:
+		what_failed_file = open("what_failed", "r")
+		what_failed = what_failed_file.readline()
+		what_failed_file.close()
+		print "Running: run " + what_failed
+		
+		first = what_failed.find('"')
+		second = what_failed.find('"', (first + 1))
+		options.suite = what_failed[(first + 1):second]
+		
+		first = what_failed.find('"', (second + 1))
+		second = what_failed.find('"', (first + 1))
+		options.tests = what_failed[(first + 1):second]
+	except:
+		# If no file exists, nothing failed, so run as usual
+		pass
+
+# Allow flagless test regex
+if (options.tests == None) and (len(args) > 0):
+	options.tests = args[len(args) - 1]
+	
+if options.upload != None:
+	if options.branch != None:
+		if options.branch == "m":
+			branch = "master"
+		elif options.branch == "f":
+			branch = "fix"
+		elif options.branch == "w":
+			branch = "wip"
+		else:
+			branch = options.branch
+	else:
+		print "Warning: Test branch not set - Use " + \
+				"'-b [master|fix|wip]'\n Using default of 'Fix'..."
+		branch = "fix"
+
+if options.debug_mode:
+	raptor_tests.activate_debug()
+
+
+# Set $HOME environment variable for finding a custom .sbs_init.xml 
+if options.test_home != None:
+	home_dir = options.test_home
+	if home_dir in os.listdir("./custom_options"):
+		os.environ["HOME"] = os.environ["SBS_HOME"] + "/test/custom_options/" \
+				+ home_dir + "/"
+	else:
+		print "Warning: Path to custom .sbs_init.xml file not found (" + \
+				home_dir + ")\nUsing defaults..."
+		options.test_home = None
+
+
+def format_milliseconds(microseconds):
+	""" format a microsecond time in milliseconds """
+	milliseconds = (microseconds / 1000)
+	if milliseconds == 0:
+		return "000"
+	elif milliseconds < 10:
+		return "00" + str(milliseconds)
+	elif milliseconds < 100:
+		return "0" + str(milliseconds)
+	return milliseconds
+
+
+
+class TestRun(object):
+	"""Represents any series of tests"""
+	def __init__(self):
+		self.test_set = []
+		self.failed_tests = []
+		self.error_tests = []
+		self.pass_total = 0
+		self.fail_total = 0
+		self.skip_total = 0
+		self.exception_total = 0
+		self.test_total = 0
+		# For --what-failed:
+		self.suites_failed = []
+		self.tests_failed = []
+
+	def aggregate(self, atestrun):
+		""" Aggregate other test results into this one """
+		self.test_set.append(atestrun)
+		self.test_total += len(atestrun.test_set)
+
+	def show(self):
+		for test_set in self.test_set:
+			print "\n\n" + str(test_set.suite_dir) + ":\n"
+			
+			# If a suite has failed/erroneous tests, add it to what_failed
+			if (test_set.fail_total + test_set.exception_total) > 0:
+				self.suites_failed.append(test_set.suite_dir)
+				
+			if len(test_set.test_set) < 1:
+				print "No tests run"
+			else:
+				print "PASSED: " + str(test_set.pass_total)
+				print "FAILED: " + str(test_set.fail_total)
+				if test_set.skip_total > 0:
+					print "SKIPPED: " + str(test_set.skip_total)
+				if test_set.exception_total > 0:
+					print "EXCEPTIONS: " + str(test_set.exception_total)
+		
+				if test_set.fail_total > 0:
+					print "\nFAILED TESTS:"
+					
+					# Add each failed test to what_failed and print it
+					for test in test_set.failed_tests:
+						self.tests_failed.append("^" + test + ".py")
+						print "\t", test
+		
+				if test_set.exception_total > 0:
+					print "\nERRONEOUS TESTS:"
+					
+					# Add each erroneous test to what_failed and print it
+					for test in test_set.error_tests:
+						first = test.find("'")
+						second = test.find("'", (first + 1))
+						self.tests_failed.append("^" +
+								test[(first + 1):second] + ".py")
+						print "\t", test
+						
+	def what_failed(self):
+		"Create the file for --what-failed if there were failing tests"
+		if len(self.suites_failed) > 0:
+			self.what_failed = open("what_failed", "w")
+			# Add the suites and tests to the file as command-line options
+			self.what_failed.write('-s "')
+			loop_number = 0
+			for suite in self.suites_failed:
+				loop_number += 1
+				self.what_failed.write(suite)
+				
+				# If this is not the last suite, prepare to add another
+				if loop_number < len(self.suites_failed):
+					self.what_failed.write("|")
+					
+			self.what_failed.write('" -t "')
+			loop_number = 0
+			for test in self.tests_failed:
+				loop_number += 1
+				self.what_failed.write(test)
+				
+				# If this is not the last test, prepare to add another
+				if loop_number < len(self.tests_failed):
+					self.what_failed.write("|")
+			self.what_failed.write('"')
+			self.what_failed.close()
+			
+		else:
+			# If there were no failing tests this time, remove any previous file
+			try:
+				os.remove("what_failed")
+			except:
+				try:
+					os.chmod("what_failed", stat.S_IRWXU)
+					os.remove("what_failed")
+				except:
+					pass
+					
+
+class Suite(TestRun):
+	"""A test suite"""
+
+	python_file_regex = re.compile("(.*)\.py$", re.I)
+
+	def __init__(self, dir, parent):
+		TestRun.__init__(self)
+		self.suite_dir = dir
+
+		# Upload directory (if set)
+		self.upload_location = parent.upload_location
+
+		# Regex for searching for tests
+
+		self.test_file_regex = parent.test_file_regex
+		self.test_pattern = parent.testpattern
+		
+
+	def run(self):
+		"""run the suite"""
+
+		self.time_stamp = datetime.datetime.now()
+		self.results = {}
+		self.start_times = {}
+		self.end_times = {}
+		
+		print "\n\nRunning " + str(self.suite_dir) + "..."
+
+		# Iterate through all files in specified directory
+		for test in os.listdir(self.suite_dir):
+			# Only check '*.py' files
+			name_match = self.python_file_regex.match(test)
+			if name_match is not None:
+				if self.test_file_regex is not None:
+					# Each file that matches -t input is imported if any
+					name_match = self.test_file_regex.match(test)
+				else:
+					name_match = 1
+				if name_match is not None:
+					import_name = test[:-3]
+					try:
+						self.test_set.append(imp.load_source(import_name,
+								(raptor_tests.ReplaceEnvs(self.suite_dir
+								+ "/" + test))))
+					except:
+						print "\n", (sys.exc_type.__name__ + ":"), \
+								sys.exc_value, "\n", \
+								traceback.print_tb(sys.exc_traceback)
+	
+		test_number = 0
+		test_total = len(self.test_set)
+		if test_total < 1:
+			print "No tests in suite "+self.suite_dir+" matched by specification '"+self.test_pattern+"' (regex: /.*"+self.test_pattern+".*/)\n";
+		# Run each test, capturing all its details and its results
+		for test in self.test_set:
+			test_number += 1
+			# Save start/end times and save in dictionary for TMS
+			start_time = datetime.datetime.now()
+			try:
+				test_number_text = "\n\nTEST " + str(test_number) + "/" + \
+						str(test_total) + ":"
+				
+				if self.fail_total > 0:
+					test_number_text += "    So far " + str(self.fail_total) + \
+							" FAILED"
+				if self.exception_total > 0:
+					test_number_text += "    So far " + str(self.exception_total) + \
+							" ERRONEOUS"
+				
+				print test_number_text
+				
+				test_object = test.run()
+				
+				end_time = datetime.datetime.now()
+				
+				# Add leading 0s
+				test_object.id = raptor_tests.fix_id(test_object.id)
+
+				# No millisecond function, so need to use microseconds/1000
+				start_milliseconds = start_time.microsecond
+				end_milliseconds = end_time.microsecond
+		
+				# Add trailing 0's if required
+				start_milliseconds = \
+						format_milliseconds(start_milliseconds)
+				end_milliseconds = \
+						format_milliseconds(end_milliseconds)
+		
+				self.start_times[test_object.id] = \
+						start_time.strftime("%H:%M:%S:" +
+						str(start_milliseconds))
+				self.end_times[test_object.id] = \
+						end_time.strftime("%H:%M:%S:" + \
+						str(end_milliseconds))
+				
+				run_time = (end_time - start_time)
+				
+				run_time_seconds = (str(run_time.seconds) + "." + \
+						str(format_milliseconds(run_time.microseconds)))
+				print ("RunTime: " + run_time_seconds + "s")
+				# Add to pass/fail count and save result to dictionary
+				if test_object.result == raptor_tests.SmokeTest.PASS:
+					self.pass_total += 1
+					self.results[test_object.id] = "Passed"
+				elif test_object.result == raptor_tests.SmokeTest.FAIL:
+					self.fail_total += 1
+					self.results[test_object.id] = "Failed"
+					self.failed_tests.append(test_object.name)
+				elif test_object.result == raptor_tests.SmokeTest.SKIP:
+					self.skip_total += 1
+				# Clean epocroot after running each test if --clean option is specified
+				if options.clean:
+					print "\nCLEANING TEST RESULTS..."
+					raptor_tests.clean_epocroot()
+					
+			except:
+				print "\nTEST ERROR:"
+				print (sys.exc_type.__name__ + ":"), \
+						sys.exc_value, "\n", \
+						traceback.print_tb(sys.exc_traceback)
+				self.exception_total += 1
+				self.error_tests.append(str(self.test_set[test_number - 1]))
+								
+				
+		if self.upload_location != None:
+			self.create_csv()
+
+		end_time_stamp = datetime.datetime.now()
+			
+		runtime = end_time_stamp - self.time_stamp
+		seconds = (str(runtime.seconds) + "." + \
+				str(format_milliseconds(runtime.microseconds)))
+		if options.upload:
+			self.create_tri(seconds)
+
+		print ("\n" + str(self.suite_dir) + " RunTime: " + seconds + "s")
+
+	def create_csv(self):
+		"""
+		This method will create a CSV file with the smoke test's output
+				in order to successfully upload results to TMS QC
+		"""
+		
+		# This sorts the dictionaries by their key values (Test IDs)
+		id_list = run_tests.sort_dict(self.results)
+		
+		self.test_file_name = (self.suite_dir + "_" + \
+				self.time_stamp.strftime("%Y-%m-%d_%H-%M-%S") + "_" +
+				branch + "_results.csv")
+		# This is the path for file-creation on the server. Includes
+		self.test_path = (self.upload_location + "/csv/" + self.suite_dir + "/"
+				+ self.test_file_name)
+		
+		try:
+		
+			if not os.path.isdir(self.upload_location + "/csv/" +
+					self.suite_dir):
+				os.makedirs(self.upload_location + "/csv/" + self.suite_dir)
+
+			csv_file = \
+					open(raptor_tests.ReplaceEnvs(os.path.normpath(self.test_path)),
+					"w")
+			csv_file.write("TestCaseID,StartTime,EndTime,Result\n")
+			
+			for test_id in id_list:
+				csv_file.write("PCT-SBSV2-" + self.suite_dir + "-" + test_id + \
+						"," + str(self.start_times[test_id]) + "," + \
+						str(self.end_times[test_id]) + "," + \
+						self.results[test_id] + "\n")
+			csv_file.close()
+			
+		except OSError, e:
+			print "SBS_TESTS: Error:", e
+			
+			
+	def create_tri(self, overall_seconds):
+		"""
+		This method will create a TRI (xml) file containing the location of the
+				CSV file in order to successfully upload results to TMS QC
+		"""
+		# Path for the tri file
+		tri_path = (self.upload_location + "/new/" + self.suite_dir + \
+				"_" + self.time_stamp.strftime("%Y-%m-%d_%H-%M-%S") + ".xml")
+		run_name_timestamp = self.time_stamp.strftime(self.suite_dir + \
+				"%Y-%m-%d_%H-%M-%S")
+		date_time_timestamp = self.time_stamp.strftime("%d.%m.%Y %H:%M:%S")
+		test_set_name = "Root\\Product Creation Tools\\Regression\\" + \
+				"SBS v2 (Raptor)\\" + self.suite_dir + "_"
+		if sys.platform.startswith("win"):
+			test_set_name += ("WinXP_" + branch)
+		else:
+			test_set_name += ("Linux_" + branch)
+		
+		# /mnt/ -> // Fixes the difference in paths for lon-rhdev mounts vs. win
+		if not sys.platform.startswith("win"):
+			if self.test_path.startswith("/mnt/"):
+				self.test_path = self.test_path.replace("mnt", "", 1)
+		
+		try:
+			tri_file = \
+					open(raptor_tests.ReplaceEnvs(os.path.normpath(tri_path)), \
+					"w")
+			tri_file.write(
+					"<TestRunInfo>\n" + \
+						"\t<RunName>\n\t\t" + \
+							run_name_timestamp + \
+						"\n\t</RunName>\n" + \
+						"\t<TestGroup>\n" + \
+							"\t\tSBSv2 (Non-SITK)\n" + \
+						"\t</TestGroup>\n" + \
+						"\t<DateTime>\n\t\t" + \
+							date_time_timestamp + \
+						"\n\t</DateTime>\n" + \
+						"\t<RunDuration>\n\t\t" + \
+							overall_seconds + \
+						"\n\t</RunDuration>\n" + \
+						'\t<TestSet name="' + test_set_name + '">\n' + \
+							"\t\t<TestResults>\n\t\t\t" + \
+								self.test_path + \
+							"\n\t\t</TestResults>\n" + \
+						"\t</TestSet>\n" + \
+					"</TestRunInfo>")
+			tri_file.close()
+			print "Tests uploaded to '" + self.upload_location + "' (" + \
+					branch + ")"
+		except OSError, e:
+			print "SBS_TESTS: Error:", e
+
+class SuiteRun(TestRun):
+	""" Represents a 'run' of a number of test suites """
+
+	def __init__(self, suitepattern = None, testpattern = None,
+			upload_location = None):
+		TestRun.__init__(self)
+		
+		# Add common directory to list of paths to search for modules
+		sys.path.append(raptor_tests.ReplaceEnvs("$(SBS_HOME)/test/common"))
+		
+		
+		if suitepattern:
+			self.suite_regex = re.compile(".*" + suitepattern + ".*", re.I)
+		else:
+			self.suite_regex = re.compile(".*\_suite$", re.I)
+
+		if testpattern:
+			self.test_file_regex = re.compile(".*" + testpattern + ".*",
+					re.I)
+		else:
+			self.test_file_regex = None
+
+		self.suitepattern = suitepattern
+		self.testpattern = testpattern
+		self.upload_location = upload_location
+		
+
+
+	def run_tests(self):
+		"""
+		Run all the tests in the specified suite (directory)
+		"""
+	
+		suites = []
+		for dir in os.listdir("."):
+			name_match = self.suite_regex.match(dir)
+			# Each folder that matches the suite pattern will be looked into
+			# Also checks to make sure the found entry is actually a directory
+			if name_match is not None and os.path.isdir(dir):
+				s = Suite(dir, self)
+				s.run()
+				self.aggregate(s)
+				suites.append(dir)
+		
+		# Print which options were used
+		if options.test_home == None:
+			options_dir = "defaults)"
+		else:
+			options_dir = "'" + options.test_home + "' options file)"
+		print "\n(Tests run using %s" %options_dir
+
+		# Summarise the entire test run
+		if self.suitepattern and (len(suites) < 1):
+			print "\nNo suites matched specification '" + self.suitepattern + \
+					"'\n"
+		else:
+			print "Overall summary (%d suites, %d tests):" \
+					%(len(suites), self.test_total)
+			self.show()
+			self.what_failed()
+	        
+
+	def sort_dict(self, input_dict):
+		"""
+		This method sorts values in a dictionary
+		"""
+		keys = input_dict.keys()
+		keys.sort()
+		return keys
+
+
+# Make SBS_HOME, EPOCROOT have uppercase drive letters to match os.getcwd() and
+# thus stop all those insane test problems which result from one being uppercase
+# and the other lowercase
+
+if sys.platform.startswith("win"):
+	sh = os.environ['SBS_HOME']
+	if sh[1] == ':':
+		os.environ['SBS_HOME'] = sh[0].upper() + sh[1:]
+	er = os.environ['EPOCROOT']
+	if er[1] == ':':
+		os.environ['EPOCROOT'] = er[0].upper() + er[1:]
+
+# Clean epocroot before running tests
+raptor_tests.clean_epocroot()
+run_tests = SuiteRun(suitepattern = options.suite, testpattern = options.tests,
+		upload_location = options.upload)
+run_tests.run_tests()
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/config/abiv1kit/os_properties.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+  <!-- This variant modifies the root variant for this particular kit. -->
+  <var name="root.changes">
+
+    <!-- ask for ABIv1 import libraries
+    --> 
+    <set name='SUPPORTS_ABIV1_IMPLIBS' value='1'/>
+  </var>
+  
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/config/api.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+	<!-- test data for raptor_api_unit -->
+
+	<alias meaning="a" name="alias_A"/>
+	<alias meaning="a.b" name="alias_B"/>
+	<alias meaning="a.b.c" name="alias_C" type="O"/>
+	<alias meaning="a.b.c.d" name="alias_D" type="X"/>
+ 
+ 	<var name="product_A" type="product"/>
+ 	<var name="product_B"/>
+ 	<var name="product_C" type="product"/>
+ 	<var name="product_D"/>
+ 	
+ 	<var name="buildme">
+ 		<set name="RELEASEPATH" value="/home/raptor" host="lin.*"/>
+ 		<set name="RELEASEPATH" value="C:/home/raptor" host="win.*"/>
+ 		<set name="VARIANTPLATFORM" value="foo"/>
+ 		<set name="VARIANTTYPE" value="bar"/>
+ 	</var>
+ 	
+ 	<var name="foo"/>
+ 	<var name="bar"/>
+ 	
+ 	<alias name="s1" meaning="buildme.foo"/>
+ 	<alias name="s2" meaning="buildme.foo.bar"/>
+ 	
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/config/apply_test_variants.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+  <!-- These variants are used to test the APPLY keyword -->
+
+  <var name="apply_test_append_cdefs">
+	<append name="CDEFS" value="APPLYTESTAPPENDCDEFS" />
+  </var>
+  
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/config/arm.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+  <!-- build configurations for ARM compilers -->
+
+  <var name="ARMV5_BASE">
+    <env name='SBS_HOME' default='' type='path'/>
+    <env name='EPOCROOT'/>
+
+    <set name='FLMHOME' value='$(SBS_HOME)/lib/flm'/>
+    <set name='TRADITIONAL_PLATFORM' value='ARMV5'/>
+    <set name='VARIANT_CFG' value='$(EPOCROOT)/variant/variant.cfg'/>
+  </var>
+
+  <var name="ARMV5_UDEB" extends="ARMV5_BASE">
+    <append name='ABC' value='abc' />
+    <append name='VARIANT_CFG' value='2' separator='' />
+  </var>
+
+  <var name="ARMV5_UREL" extends="ARMV5_BASE">
+    <prepend name='ABC' value='abc' />
+    <prepend name='VARIANT_CFG' value='' separator='' />
+  </var>
+
+  <var name="MOD1">
+    <set name="X" value="X1"/>
+  </var>
+
+  <var name="MOD2">
+    <set name="X" value="X2"/>
+    <set name="Y" value="Y2"/>
+  </var>
+
+  <group name="ARMV5">
+    <varRef ref="ARMV5_UREL"/>
+    <varRef ref="ARMV5_UDEB"/>
+  </group>
+
+  <alias name="ALIAS_1" meaning="ARMV5_UREL.MOD1"/>
+  <alias name="ALIAS_2" meaning="ARMV5_UDEB.MOD1.MOD2"/>
+
+  <group name="G1">
+    <varRef ref="MOD1"/>
+    <varRef ref="MOD2"/>
+  </group>
+
+  <group name="G2">
+    <varRef ref="ARMV5_UREL" mod="MOD1"/>
+    <varRef ref="ARMV5_UDEB" mod="MOD1.MOD2"/>
+    <aliasRef ref="ALIAS_1"/>
+    <aliasRef ref="ALIAS_2" mod="MOD1.MOD2.MOD1"/>
+    <groupRef ref="ARMV5" mod="MOD2"/>
+    <groupRef ref="G1"/>
+  </group>
+
+  <!-- these are deliberately redefined in user.xml -->
+  
+  <alias name="alias_redef" meaning="MOD1"/>
+  <group name="group_redef"><varRef ref="MOD1"/></group>
+  <interface name="interface_redef" abstract="true"/>
+  <var name="var_redef"></var>
+  
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/config/default.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+    <!-- The build configurations built by default -->
+
+	<var name="default">
+		<set name="OVER" value="default"/>
+		<varRef ref="A"/>
+		<varRef ref="B"/>
+	</var>
+
+	<var name="baseA">
+		<set name="BASE" value="baseA"/>
+		<set name="OVER" value="baseA"/>
+	</var>
+
+	<var name="A" extends="baseA">
+		<set name="OVER" value="A"/>
+		<varRef ref="A2"/>
+		<varRef ref="A3"/>
+	</var>
+
+	<var name="baseB">
+		<set name="BASE" value="baseB"/>
+		<set name="OVER" value="baseB"/>
+	</var>
+
+	<var name="B" extends="baseB">
+		<set name="OVER" value="B"/>
+		<varRef ref="B2"/>
+		<varRef ref="B3"/>
+	</var>
+
+	<var name="A2">
+		<set name="OVER" value="A2"/>
+	</var>
+
+	<var name="A3">
+		<set name="OVER" value="A3"/>
+	</var>
+
+	<var name="B2">
+		<set name="OVER" value="B2"/>
+	</var>
+
+	<var name="B3">
+		<set name="OVER" value="B3"/>
+	</var>
+
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/config/interface.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+    <!-- a base interface -->
+
+	<interface name="Base.XYZ" flm="base.flm">
+		<param name='A'/>
+		<param name='B' default='baseB'/>
+		<param name='C' default='baseC'/>
+    </interface>
+    
+    <!-- extends the base interface -->
+
+	<interface name="Extended.XYZ" extends="Base.XYZ" flm="ext.flm">
+		<param name='D'/>
+		<param name='C' default='extC'/>
+    </interface>
+    
+    <!-- extends the base interface and uses its FLM -->
+
+	<interface name="Extended2.XYZ" extends="Base.XYZ">
+		<param name='D'/>
+		<param name='C' default='extC'/>
+    </interface>
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/config/os_properties.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+  <!-- This variant modifies the root variant for this particular kit. -->
+  <var name="root.changes">
+
+    <!-- pretend we don't have the new paging options (codepaging, datapaging)
+         so that we can test the old options (paged, unpaged)
+    --> 
+    <set name='POSTLINKER_SUPPORTS_WDP' value=''/>
+  </var>
+  
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/config/user.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!-- user.xml - user configuration file for raptor_data_unit.py test "testUserXmlCfg" -->
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+  <!-- these are deliberately redefined in arm.xml -->
+  
+  <alias name="alias_redef" meaning="MOD2"/>
+  <group name="group_redef"><varRef ref="MOD2"/></group>
+  <interface name="interface_redef" abstract="true"/>
+  <var name="var_redef"></var>
+</build>
Binary file sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun01/makefiles_testrun01.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun01/testrig01.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,32 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+ECHO junk_file: this file is the dummy file to be used in the cp-testing. > junk_file
+SET SBS_HOME=D:\yiluzhu\CBR\m04710\raptor
+SET PATH=%SBS_HOME%\win32\mingw\bin;%SBS_HOME%\win32\msys\bin;%PATH%
+
+@REM Generate the makefiles using case "all" ...
+FOR %%c IN (all env echo cp sed) DO (
+FOR %%i IN (100 500 1000 2500 5000 10000 15000 20000 25000) DO (
+FOR %%d in (50 100) DO (
+python makemakefile.py -t %%i -d %%d -m makefile_%%c_%%i_targets_%%d_divisions.mk)))
+
+@REM Run mingw32-make with various values of j
+FOR %%j in (100 250 500 1000) DO (
+FOR %%c IN (all env echo cp sed) DO (
+FOR %%i IN (500 1000 2500 5000 10000 15000 20000 25000) DO (
+FOR %%d in (50 100) DO (
+make -j %%j -f makefile_%%c_%%i_targets_%%d_divisions.mk > makefile_%%c_%%i_targets_%%d_divisions_jobs_%%j.log 2>&1))))
Binary file sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun02/makefiles_testrun02.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun02/testrig02.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,32 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+ECHO junk_file: this file is the dummy file to be used in the cp-testing. > junk_file
+SET SBS_HOME=D:\yiluzhu\CBR\m04710\raptor
+SET PATH=%SBS_HOME%\win32\mingw\bin;%SBS_HOME%\win32\msys\bin;%PATH%
+
+@REM Generate the makefiles using case "all" ...
+FOR %%c IN (all env echo cp sed) DO (
+FOR %%i IN (100 200 500 750 1000 1250 1500 1750 2000 2250 2500) DO (
+FOR %%d in (50 100) DO (
+python makemakefile.py -t %%i -d %%d -m makefile_%%c_%%i_targets_%%d_divisions.mk)))
+
+@REM Run mingw32-make with various values of j
+FOR %%j in (10 25 50 75 100 250) DO (
+FOR %%c IN (all env echo cp sed) DO (
+FOR %%i IN (100 200 500 750 1000 1250 1500 1750 2000 2250 2500) DO (
+FOR %%d in (50 100) DO (
+make -j %%j -f makefile_%%c_%%i_targets_%%d_divisions.mk > makefile_%%c_%%i_targets_%%d_divisions_jobs_%%j.log 2>&1))))
Binary file sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun03/makefiles_testrun03.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun03/testrig03.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,28 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+ECHO junk_file: this file is the dummy file to be used in the cp-testing. > junk_file
+SET SBS_HOME=D:\yiluzhu\CBR\m04710\raptor
+SET PATH=%SBS_HOME%\win32\mingw\bin;%SBS_HOME%\win32\msys\bin;%PATH%
+
+@REM Run mingw32-make with various values of j
+FOR /L %%r in (1,1,100) DO (
+FOR %%j in (50 100) DO (
+FOR %%f IN (makefile_env_1000_targets_50_divisions.mk makefile_env_1000_targets_100_divisions.mk) DO (
+make -j %%j -f %%f > %%f_jobs_%%j_run_%%r.log 2>&1
+)
+)
+)
Binary file sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun04/makefiles_testrun04.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun04/testrig04.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,32 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+ECHO junk_file: this file is the dummy file to be used in the cp-testing. > junk_file
+SET SBS_HOME=D:\danieljacobs\msystest\raptor
+SET PATH=%SBS_HOME%\win32\mingw\bin;%SBS_HOME%\win32\msys\bin;%PATH%
+
+@REM Generate the makefiles using case "all" ...
+FOR %%c IN (all env echo cp sed) DO (
+FOR %%i IN (100 750 1500 1750 2500) DO (
+FOR %%d in (50 100) DO (
+python makemakefile.py -t %%i -d %%d -c %%c -m makefile_%%c_%%i_targets_%%d_divisions.mk)))
+
+@REM Run mingw32-make with various values of j
+FOR %%j in (10 25 50 75 100 250) DO (
+FOR %%c IN (all env echo cp sed) DO (
+FOR %%i IN (100 750 1500 1750 2500) DO (
+FOR %%d in (50 100) DO (
+make -j %%j -f makefile_%%c_%%i_targets_%%d_divisions.mk > makefile_%%c_%%i_targets_%%d_divisions_jobs_%%j.log 2>&1))))
Binary file sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun05/makefiles_testrun05.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun05/testrig05.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,28 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+ECHO junk_file: this file is the dummy file to be used in the cp-testing. > junk_file
+SET SBS_HOME=D:\yiluzhu\CBR\m04710\raptor
+SET PATH=%SBS_HOME%\win32\mingw\bin;D:\danieljacobs\msystest\cygwin\bin;%PATH%
+
+@REM Run mingw32-make with various values of j
+FOR /L %%r in (1,1,100) DO (
+FOR %%j in (50 100) DO (
+FOR %%f IN (makefile_env_1000_targets_50_divisions.mk makefile_env_1000_targets_100_divisions.mk) DO (
+make -j %%j -f %%f > %%f_jobs_%%j_run_%%r.log 2>&1
+)
+)
+)
Binary file sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun06/makefiles_testrun06.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun06/testrig06.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+ECHO junk_file: this file is the dummy file to be used in the cp-testing. > junk_file
+SET SBS_HOME=D:\danieljacobs\msystest\raptor
+SET PATH=%SBS_HOME%\win32\mingw\bin;D:\danieljacobs\msystest\cygwin\bin;%PATH%
+
+@REM Run mingw32-make with various values of j
+FOR %%j in (10 25 50 75 100 250) DO (
+FOR %%c IN (all env echo cp sed) DO (
+FOR %%i IN (100 750 1500 1750 2500) DO (
+FOR %%d in (50 100) DO (
+make -j %%j -f makefile_%%c_%%i_targets_%%d_divisions.mk > makefile_%%c_%%i_targets_%%d_divisions_jobs_%%j.log 2>&1))))
Binary file sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun07/makefiles_testrun07.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun07/testrig07.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,28 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+ECHO junk_file: this file is the dummy file to be used in the cp-testing. > junk_file
+SET SBS_HOME=D:\danieljacobs\msystest\raptor
+SET PATH=%SBS_HOME%\win32\mingw\bin;D:\danieljacobs\msystest\cygwin\bin;%PATH%
+
+@REM Run mingw32-make with various values of j
+FOR /L %%r in (1,1,100) DO (
+FOR %%j in (50 100) DO (
+FOR %%f IN (makefile_env_1000_targets_50_divisions.mk makefile_env_1000_targets_100_divisions.mk) DO (
+make -j %%j -f %%f > %%f_jobs_%%j_run_%%r.log 2>&1
+)
+)
+)
Binary file sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun08/makefiles_testrun08.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/core_utils/GeneratedMakefiles/TestRun08/testrig08.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+ECHO junk_file: this file is the dummy file to be used in the cp-testing. > junk_file
+SET SBS_HOME=D:\danieljacobs\msystest\raptor
+SET PATH=%SBS_HOME%\win32\mingw\bin;D:\danieljacobs\msystest\cygwin\bin;%PATH%
+
+@REM Run mingw32-make with various values of j
+FOR %%j in (10 25 50 75 100 250) DO (
+FOR %%c IN (all env echo cp sed) DO (
+FOR %%i IN (100 750 1500 1750 2500) DO (
+FOR %%d in (50 100) DO (
+make -j %%j -f makefile_%%c_%%i_targets_%%d_divisions.mk > makefile_%%c_%%i_targets_%%d_divisions_jobs_%%j.log 2>&1))))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/core_utils/HowTo.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,96 @@
+HowTo.txt - Copyright 2008 Symbian Software Ltd.
+
+This document describes how to use this test suite for stress-testing Linux-emulation type systems on Windows.
+
+Structure of tests
+==================
+
+The Linux emulation layer tests are structured as follows:
+
+LinuxEmulationLayerStressTests\HowTo.txt (this file)
+LinuxEmulationLayerStressTests\makemakefile.py (described below)
+LinuxEmulationLayerStressTests\mingw.tar.bz2
+LinuxEmulationLayerStressTests\msys.tar.bz2
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun01\makefiles_testrun01.zip
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun01\testrig01.bat
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun02\makefiles_testrun02.zip
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun02\testrig02.bat
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun03\makefiles_testrun03.zip
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun03\testrig03.bat
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun04\makefiles_testrun04.zip
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun04\testrig04.bat
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun05\makefiles_testrun05.zip
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun05\testrig05.bat
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun06\makefiles_testrun06.zip
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun06\testrig06.bat
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun07\makefiles_testrun07.zip
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun07\testrig07.bat
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun08\makefiles_testrun08.zip
+LinuxEmulationLayerStressTests\GeneratedMakefiles\TestRun08\testrig08.bat
+LinuxEmulationLayerStressTests\src\msys-sed-4.1.5-src.tar.gz
+
+Each test run has its makefiles preserved in the corresponding zip file (e.g. makefiles_testrun01.zip). 
+
+The testrigNN.bat are very basic batch scripts that do not take any parameters. They are simply there as a 
+bootstrap to 
+
+1) Set the PATH to contain either MSYS's or Cygwin's bin folder (but not both!) 
+2) Set the PATH to contain MinGW's bin folder (for MinGW's make)
+3) Generate the makefiles in a number of for-loops (optional)
+4) Run the make over the makefiles in a number of for-loops
+
+In future, if any of these batch files are re-used, it will be necessary to adjust them so that 
+they set the PATH environment variable correctly to contain the place where MSYS or Cygwin 
+was unzipped. Then decide if you wish to generate further makefiles using the Python script,
+or if it's just enough to run the existing makefiles.
+
+For convenience, both MSYS and Cygwin are provided in the files
+
+LinuxEmulationLayerStressTests\mingw.tar.bz2
+LinuxEmulationLayerStressTests\msys.tar.bz2
+
+These are the versions that were tested and were shipped with SBSv2. Simply untar to a convenient
+location and update the batch files bootstraps to add these to your PATH.
+
+makemakefile.py
+===============
+
+This script, as its name suggests, makes a range of makefiles. Use the command
+
+python makemakefile.py -h
+
+to see a list of available options. At time of writing, the usage help is as follows:
+
+Usage: makemakefile.py [options]
+
+Options:
+  -h, --help            show this help message and exit
+  -t TARGETS, --targets=TARGETS
+                        Number of main (or "level1") targets to generate -
+                        these are the targets that actually perform some
+                        simulated actions.
+  -d DIVISIONS, --divisions=DIVISIONS
+                        The number of "level2" targets. Each level2 target
+                        will depend on t/d level1 targets. This makes makefile
+                        generation more logical.
+  -m MAKEFILE, --makefile=MAKEFILE
+                        Name of makefile to generate. If blank, makefile is
+                        printed to STDOUT.
+  -c CASE, --case=CASE  Type of commands to use in each rule. Default is
+                        "all"; other options are "env", "echo", "cp" and "sed"
+
+
+
+The -t option specifies total the number of makefile targets. This should be a positive integer. 
+
+The -d option specifies total the number of subdivisions of the makefile targets into level1/level2 targets. 
+This should be a positive integer. 
+
+The makefiles are structured in such as way, so that the dependency tree has three levels. The aim is to 
+introduce some complexity into the makefile's dependency tree rather than just having a "flat" dependency tree. 
+The top level in the dependency tree contains only one target called "main"; below this are the level2 targets
+which are all prerequisites of main; lastly are the level1 targets which split into groups and each group is 
+the set of prerequisites for a level2 target.
+
+The size of these groups of level1 targets is <= DIVISIONS depending if DIVISIONS divides into TARGETS exactly or not. 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/core_utils/makemakefile.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,152 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+#! python
+
+import optparse
+import sys
+
+def writeline(line, filehandle):
+	"""Assumes filehandle has a write method and that line is a string; 
+	Calls the filehandle's write method with line as an argument. Note:
+	filehandle can be STDOUT or STDERR or a real file. The client code
+	should take care of the creation of the filehandle object"""
+	print >> filehandle, line,
+
+def info(arg, filehandle):
+	writeline("# INFO: " + str(arg), filehandle)
+
+def warning(arg, filehandle):
+	writeline("# WARNING: " + str(arg), filehandle)
+
+def error(arg, filehandle):
+	writeline("# ERROR: " + str(arg), filehandle)
+
+# Get the command line options
+parser = optparse.OptionParser()
+parser.add_option("-t", "--targets", type="int", dest="targets",   
+				  help="Number of main (or \"level1\") targets to generate - these are the targets " + \
+				  "that actually perform some simulated actions.")
+parser.add_option("-d", "--divisions", type="int", dest="divisions", 
+				  help="The number of \"level2\" targets. Each level2 target will depend on " + \
+				  "t/d level1 targets. This makes makefile generation more logical.")
+parser.add_option("-m", "--makefile", dest="makefile", 
+				  help="Name of makefile to generate. If blank, makefile is printed to STDOUT.")
+parser.add_option("-c", "--case", dest="case", 
+				  help="Type of commands to use in each rule. Default is \"all\"; other options are " + \
+				  "\"env\", \"echo\", \"cp\" and \"sed\"")
+
+(options, args) = parser.parse_args()
+
+makefile = options.makefile
+makefilefh = None
+# Open the makefile if possible. Note, all info, warnings and errors 
+# will appear in the makefile as comments.
+if makefile != None:
+	try:
+		makefilefh = open(makefile, "w")
+	except:
+		makefile = None
+		makefilefh = None
+		error("Failed to open " + makefile + ". STDOUT will be used instead.", makefilefh)
+
+info("Auto-generated makefile for stress-testing.\n\n", makefilefh)
+
+if options.targets == None:
+	error("Missing option \"targets\". Please ensure you have specified the number of targets required.\n\n", makefilefh)
+	sys.exit(2)
+
+if options.divisions == None:
+	info("Missing option \"divisions\". Defaulting to 1.\n\n", makefilefh)
+	options.divisions = 1
+
+# Commands to use in the main "worker" rules
+command_env = "echo Echoing PATH from $@ in a subshell; (echo PATH=$$PATH;)"
+command_echo_1 = "echo This is rule $@; echo PATH=$$PATH && echo TMP=$$TMP;"
+command_echo_2 = "echo Echoing PATH from $@ in a subshell; (echo PATH=$$PATH;)"
+command_echo_3 = "echo Echoing PATH from $@ in a subshell; (echo Another subshell; (echo PATH=$$PATH;))"
+command_cp_1 = "cp -f junk_file junk_file_copy_1_$@"
+command_cp_2 = "cp -f junk_file junk_file_copy_2_$@"
+command_cp_3 = "cp -f junk_file junk_file_copy_3_$@"
+command_cp_4 = "cp -f junk_file junk_file_copy_4_$@"
+command_sed_1 = "echo asdfsdf-----asdfasdfasdf-.txt | sed 's!.*-----!!g';"
+command_sed_2 = "echo 'ssss:33 x' | sed 's!.*:[0-9][0-9] *!!g'"
+
+# Default command list
+command_list = []
+
+if options.case == "env":
+	command_list = [command_env]
+elif options.case == "echo":
+	command_list = [command_echo_1, command_echo_2, command_echo_3]
+elif options.case == "cp":
+	command_list = [command_cp_1, command_cp_2, command_cp_3, command_cp_4]
+elif options.case == "sed":
+	command_list = [command_sed_1, command_sed_2]
+elif options.case in ["all", None]:
+	command_list = [command_env, 
+				    command_echo_1, command_echo_2, command_echo_3, 
+				    command_cp_1, command_cp_2, command_cp_3, command_cp_4, 
+				    command_sed_1, command_sed_2]
+else:
+	error("Unknown option for \"case\" option: %s. Reverting to defaults..." % (options.case), makefilefh)
+	command_list = [command_env, 
+				    command_echo_1, command_echo_2, command_echo_3, 
+				    command_cp_1, command_cp_2, command_cp_3, command_cp_4, 
+				    command_sed_1, command_sed_2]
+
+# Clean command to delete all the junk copy files
+clean = "rm -f junk_file_copy_*"
+
+total_targets = options.targets
+divisions = options.divisions
+quotient = total_targets/divisions
+remainder = total_targets - quotient*divisions
+
+writeline("main:", makefilefh)
+for i in range(divisions):
+	writeline("level_2_rule_%09d " % (i), makefilefh)
+writeline("\n\n", makefilefh)
+
+for i in range(divisions):
+	writeline("level_2_rule_%09d: " % (i), makefilefh)
+	for j in range(quotient):
+		writeline("level_1_rule_%09d " % (j + i*quotient), makefilefh)
+	writeline("\n\n", makefilefh)
+
+# Generate extra rule for the "remainder" targets
+if remainder > 0:
+	writeline("main:", makefilefh)
+	writeline("level_2_rule_%09d " % (divisions), makefilefh)
+	writeline("\n\n", makefilefh)
+	writeline("level_2_rule_%09d: " % (divisions), makefilefh)	
+	for j in range(total_targets - remainder,total_targets):
+		writeline("level_1_rule_%09d " % (j), makefilefh)
+	writeline("\n\n", makefilefh)
+
+# Generate the level_1_rules - these are the ones that actually
+# execute commands.
+for i in range(total_targets):
+	writeline("level_1_rule_%09d: \n" % (i), makefilefh)
+	for command in command_list:
+		writeline("\t" + command + "\n", makefilefh)
+	writeline("\n\n", makefilefh)
+
+writeline("clean:\n", makefilefh)
+writeline("\t" + clean + "\n", makefilefh)
+writeline("\n", makefilefh)
+
+if makefile != None:
+	makefilefh.close()
\ No newline at end of file
Binary file sbsv2/raptor/test/core_utils/mingw.tar.bz2 has changed
Binary file sbsv2/raptor/test/core_utils/msys.tar.bz2 has changed
Binary file sbsv2/raptor/test/core_utils/src/msys-sed-4.1.5-src.tar.gz has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/envelope/1quarter.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,90 @@
+<?xml version="1.0"?>
+
+<SystemDefinition name="MCL" schema="1.4.0">
+  <systemModel>
+    <layer name="common">
+      <module name="allexports">
+        <component name="envelope">
+	<unit unitID='BUILDSYSTEMTOOLS' name='tools_build' bldFile='common/generic/tools/build/group' />
+	<unit unitID='CBRTOOLS' name='tools_cbr_tools' bldFile='common/generic/tools/cbr/tools/Group' />
+	<unit unitID='CBRPRF' name='tools_cbr_prf' bldFile='common/generic/tools/cbr/prf/group' />
+	<unit unitID='DEPCHECK' name='tools_depcheck' bldFile='common/generic/tools/depcheck' />
+	<unit unitID='DEPMODEL' name='tools_depmodel' bldFile='common/generic/tools/depmodel/group' />
+	<unit unitID='E32TOOLS_EKA2' name='tools_e32tools' bldFile='cedar/generic/TOOLS/E32Tools/GROUP' />
+	<unit unitID='EVALID' name='tools_evalid' bldFile='common/generic/tools/host_utilities/evalid' />
+	<unit unitID='RCOMP' name='tools_rcomp' bldFile='common/generic/TOOLS/RCOMP/GROUP' />
+	<unit unitID='REDISTRIBUTION' name='tools_redistribution_common' bldFile='common/generic/TOOLS/REDISTRIBUTION' />
+	<unit unitID='ROMKIT_EKA2' name='tools_romkit' bldFile='cedar/generic/TOOLS/ROMKIT/GROUP' />
+	<!-- not including <unit unitID='s60headercompat' name='tools_s60_header_compat' bldFile='common/generic/tools/s60_header_compat/group' /> -->
+	<unit unitID='BLUETOOTH_LOGGER' name='bluetooth_logger' bldFile='common/generic/bluetooth/latest/bluetooth/logger/group' />
+	<unit unitID='CINIDATA' name='tools_cinidata' bldFile='common/generic/TOOLS/CINIDATA' />
+	<unit unitID='AUTOTEST' name='tools_autotest' bldFile='common/generic/TOOLS/AUTOTEST/GROUP' />
+	<unit unitID='TESTCONFIGFILEPARSER' name='tools_testconfigfileparser' bldFile='common/generic/TOOLS/testconfigfileparser/GROUP' />
+	<unit unitID='KITSETUPAPP' name='tools_devkits_kitsetupapp' bldFile='common/generic/TOOLS/DevKits/KitSetupApp/group' />
+	<unit unitID='PRODUCTINSTALLER' name='tools_custkits_productinstaller' bldFile='common/generic/TOOLS/Custkits/ProductInstaller/group' />
+	<unit unitID='REDISTRIBUTION_WINC_EKA2' name='tools_redistribution_cedar' bldFile='cedar/generic/tools/redistribution' />
+	<unit unitID='MAKEKEYS' name='security_makekeys' bldFile='common/generic/SECURITY/MakeKeys/GROUP' />
+	<unit unitID='PACKETLOOPBACKCSY' name='PacketLoopbackCSY' bldFile='common/generic/networking/test/PacketLoopbackCSY/group' />
+	<unit unitID='STLPORT' name='tools_stlport' bldFile='common/generic/tools/stlport/group' />
+	<unit unitID='RUNPERL' name='tools_sdk_eng_runperl' bldFile='common/generic/TOOLS/SDK_ENG/RUNPERL/GROUP' />
+	<unit unitID='BUILD-TOOLS' name='tools_sdk_eng_build-tools' bldFile='common/generic/TOOLS/SDK_ENG/BUILD-TOOLS/GROUP' />
+	<unit unitID='JAVALIBRARY' name='tools_sdk_eng_javalibrary' bldFile='common/generic/TOOLS/SDK_ENG/JAVALIBRARY/GROUP' />
+	<unit unitID='ASSERTION' name='tools_sdk_eng_assertion' bldFile='common/generic/TOOLS/SDK_ENG/ASSERTION/GROUP' />
+	<unit unitID='ENUM' name='tools_sdk_eng_enum' bldFile='common/generic/TOOLS/SDK_ENG/ENUM/GROUP' />
+	<unit unitID='LOGGER' name='tools_sdk_eng_logger' bldFile='common/generic/TOOLS/SDK_ENG/LOGGER/GROUP' />
+	<unit unitID='FILESYS' name='tools_sdk_eng_filesys' bldFile='common/generic/TOOLS/SDK_ENG/FILESYS/GROUP' />
+	<unit unitID='ENVVAR' name='tools_sdk_eng_envvar' bldFile='common/generic/TOOLS/SDK_ENG/ENVVAR/GROUP' />
+	<unit unitID='INSTALLUTILS' name='tools_sdk_eng_installutils' bldFile='common/generic/TOOLS/SDK_ENG/INSTALLUTILS/GROUP' />
+	<unit unitID='MNEMONICFIX' name='tools_sdk_eng_mnemonicfix' bldFile='common/generic/TOOLS/SDK_ENG/MNEMONICFIX/GROUP' />
+	<unit unitID='PATHBROWSER' name='tools_sdk_eng_pathbrowser' bldFile='common/generic/TOOLS/SDK_ENG/PATHBROWSER/GROUP' />
+	<unit unitID='SHELLEXEC' name='tools_sdk_eng_shellexec' bldFile='common/generic/TOOLS/SDK_ENG/SHELLEXEC/GROUP' />
+	<unit unitID='SWINGWORKER' name='tools_sdk_eng_swingworker' bldFile='common/generic/TOOLS/SDK_ENG/SWINGWORKER/GROUP' />
+	<unit unitID='TESTCASERUNNER' name='tools_sdk_eng_testcaserunner' bldFile='common/generic/TOOLS/SDK_ENG/TESTCASERUNNER/GROUP' />
+	<unit unitID='TOOLBARPANEL' name='tools_sdk_eng_toolbarpanel' bldFile='common/generic/TOOLS/SDK_ENG/TOOLBARPANEL/GROUP' />
+	<unit unitID='JAVAHELP' name='tools_sdk_eng_javahelp' bldFile='common/generic/TOOLS/SDK_ENG/JAVAHELP/GROUP' />
+	<unit unitID='LANGCONFIG' name='tools_sdk_eng_langconfig' bldFile='common/generic/TOOLS/SDK_ENG/LANGCONFIG/GROUP' />
+	<unit unitID='MBMCODEC' name='tools_sdk_eng_mbmcodec' bldFile='common/generic/TOOLS/SDK_ENG/MBMCODEC/GROUP' />
+	<unit unitID='SDKINFO' name='tools_sdk_eng_sdkinfo' bldFile='common/generic/TOOLS/SDK_ENG/SDKINFO/GROUP' />
+	<unit unitID='JADE' name='tools_sdk_eng_jade' bldFile='common/generic/TOOLS/SDK_ENG/JADE/GROUP' />
+	<unit unitID='CSHLPCMP_GUI' name='tools_sdk_eng_cshlpcmp_gui' bldFile='common/generic/TOOLS/SDK_ENG/CSHLPCMP_GUI/GROUP' />
+	<unit unitID='SISAR' name='tools_sdk_eng_sisar' bldFile='common/generic/TOOLS/SDK_ENG/SISAR/GROUP' />
+	<unit unitID='SDKPKG-MANAGER' name='tools_sdk_eng_sdkpkg-manager' bldFile='common/generic/TOOLS/SDK_ENG/SDKPKG-MANAGER/GROUP' />
+	<unit unitID='SDKPKG-TOOLS' name='tools_sdk_eng_sdkpkg-tools' bldFile='common/generic/TOOLS/SDK_ENG/SDKPKG-TOOLS/GROUP' />
+	<unit unitID='EMULATOR_LAUNCHER' name='tools_sdk_eng_emulator_launcher' bldFile='common/generic/TOOLS/SDK_ENG/EMULATOR_LAUNCHER/GROUP' />
+	<unit unitID='PKGMGRGUI' name='tools_sdk_eng_pkgmgrgui' bldFile='common/generic/TOOLS/SDK_ENG/PKGMGRGUI/GROUP' />
+	<unit unitID='LAUNCH' name='tools_sdk_eng_launch' bldFile='common/generic/TOOLS/SDK_ENG/LAUNCH/GROUP' />
+	<unit unitID='TOOLS_STUBS' name='tools_sdk_eng_tools_stubs' bldFile='common/generic/TOOLS/SDK_ENG/TOOLS_STUBS/GROUP' />
+	<unit unitID='CWPLUGINS' name='tools_sdk_eng_cwplugins' bldFile='common/generic/TOOLS/SDK_ENG/CWPLUGINS/GROUP' />
+	<unit unitID='BSPBUILDER' name='tools_bspbuilder' bldFile='common/generic/TOOLS/BSPBUILDER/GROUP' />
+	<unit unitID='ALP2CSH' name='tools_sdk_eng_alp2csh' bldFile='common/generic/TOOLS/SDK_ENG/ALP2CSH/GROUP' />
+	<unit unitID='CJPEG' name='tools_sdk_eng_cjpeg' bldFile='common/generic/TOOLS/SDK_ENG/CJPEG/GROUP' />
+	<unit unitID='CSHLPCMP_FRONTEND' name='tools_sdk_eng_cshlpcmp_frontend' bldFile='common/generic/TOOLS/SDK_ENG/CSHLPCMP_FRONTEND/GROUP' />
+	<unit unitID='PERLLIBRARY' name='tools_sdk_eng_perllibrary' bldFile='common/generic/TOOLS/SDK_ENG/PERLLIBRARY/GROUP' />
+	<unit unitID='PERLSHARED' name='tools_sdk_eng_perl_shared' bldFile='common/generic/tools/sdk_eng/perl_shared/group' />
+	<unit unitID='RTF2PTML' name='tools_sdk_eng_rtf2ptml' bldFile='common/generic/TOOLS/SDK_ENG/RTF2PTML/GROUP' />
+	<unit unitID='SPLASH' name='tools_sdk_eng_splash' bldFile='common/generic/TOOLS/SDK_ENG/SPLASH/GROUP' />
+	<unit unitID='SDK_BUILDER' name='tools_sdk_eng_sdk_builder' bldFile='common/generic/TOOLS/sdk_eng/sdk_builder/GROUP' />
+<!--	<unit unitID='WINS_VARIANT_EKA2' name='base_wins' bldFile='cedar/generic/base/wins' /> -->
+	<unit unitID='LUBBOCK_EKA2' name='base_lubbock' bldFile='cedar/generic/BASE/LUBBOCK' />
+	<unit unitID='OMAP_H2' name='base_omaph2' bldFile='cedar/generic/base/omap/h2' />
+	<unit unitID='BASE_H2_UNISTORE2' name='base_h2_unistore2' bldFile='cedar/generic/base/omap/h2_restricted/unistore2' />
+	<unit unitID='BASE_H2_SDIO' name='base_h2_sdio' bldFile='cedar/generic/base/omap/h2_restricted/sdio' />
+	<unit unitID='OMAPH4HRP' name='base_omaph4hrp' bldFile='cedar/generic/base/omap_hrp/h4' />
+	<unit unitID='H4BOOTLOADER' name='base_omaph4hrp_bootldr' bldFile='cedar/generic/base/omap_hrp/h4_bootloader' />
+	<unit unitID='H4MEBOOTLOADER' name='base_omaph4hrp_mebootldr' bldFile='cedar/generic/base/omap_hrp/h4_mebootloader' />
+	<unit unitID='OMAPH4HRP_UNISTORE2' name='base_omaph4hrp_unistore2' bldFile='cedar/generic/base/omap_hrp/h4_restricted/unistore2' />
+	<unit unitID='OMAPH4HRP_SDIO' name='base_omaph4hrp_sdio' bldFile='cedar/generic/base/omap_hrp/h4_restricted/sdio' />
+	<unit unitID='LMNAND2_LOGIC' name='base_integrator_logic_lmnand2' bldFile='cedar/generic/base/integrator/logic/lmnand2' />
+	<unit unitID='UNISTORE2_DRIVERS' name='base_drivers_unistore2' bldFile='cedar/generic/base/e32/drivers/unistore2' />
+	<unit unitID='UNISTORE2_CRASHFLASH' name='base_crashflash_unistore2' bldFile='cedar/generic/base/e32/drivers/crashflash/unistore2' />
+	<unit unitID='APPARC' name='app-framework_apparc' bldFile='common/generic/APP-FRAMEWORK/APPARC/GROUP' />
+	<unit unitID='SYSSTART' name='app-framework_sysstart' bldFile='common/generic/app-framework/sysstart/group' />
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/envelope/2quarter.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,153 @@
+<?xml version="1.0"?>
+
+<SystemDefinition name="MCL" schema="1.4.0">
+  <systemModel>
+    <layer name="common">
+      <module name="allexports">
+        <component name="envelope">
+	<unit unitID='SCREENDRIVER' name='graphics_screendriver' bldFile='common/generic/GRAPHICS/ScreenDriver/Group' />
+	<unit unitID='C32BCA' name='networking_c32bca' bldFile='common/generic/NETWORKING/BasebandAdaptation/c32bca/group' />
+	<unit unitID='E32_EKA2' name='base_e32' bldFile='cedar/generic/BASE/E32' />
+	<unit unitID='E32_COMPSUPP' name='base_e32_compsupp' bldFile='cedar/generic/BASE/E32/compsupp' />
+	<unit unitID='SDCARD3C' name='base_e32_sd3c' bldFile='cedar/generic/base/e32/drivers/pbus/mmc/sdcard/sdcard3c' />
+	<unit unitID='SDCARD4C' name='base_e32_sd4c' bldFile='cedar/generic/base/e32/drivers/pbus/mmc/sdcard/sdcard4c' />
+	<unit unitID='LOCE32_ONGOING' name='base_loce32' bldFile='common/generic/BASE/LOCE32/ongoing' />
+	<unit unitID='F32_EKA2' name='base_f32' bldFile='cedar/generic/BASE/F32/GROUP' />
+	<unit unitID='F32TEST_EKA2' name='base_f32test' bldFile='cedar/generic/BASE/F32TEST/GROUP' />
+	<unit unitID='FATCHARSETCONV' name='syslibs_FATCharsetConv' bldFile='common/generic/syslibs/FATCharsetConv/GROUP' />
+	<unit unitID='HAL_EKA2' name='base_hal' bldFile='cedar/generic/BASE/HAL' />
+	<unit unitID='SYSAGENT2' name='syslibs_sysagent2' bldFile='common/generic/SYSLIBS/SYSAGENT2/GROUP' />
+	<unit unitID='SCHSVR_ONGOING' name='syslibs_schsvr' bldFile='common/generic/SYSLIBS/SCHSVR/ongoing/GROUP' />
+	<unit unitID='AUTHSERVER' name='security_authserver' bldFile='common/generic/security/authserver/group' />
+	<unit unitID='SYSSTART' name='app-framework_sysstart' bldFile='common/generic/app-framework/sysstart/group' />
+	<unit unitID='EMIME' name='app-framework_emime' bldFile='common/generic/APP-FRAMEWORK/EMIME/GROUP' />
+	<unit unitID='EZLIB' name='syslibs_ezlib' bldFile='common/generic/SYSLIBS/EZLIB/GROUP' />
+	<unit unitID='SECURITYCOMMON' name='security_common' bldFile='common/generic/SECURITY/COMMON/GROUP' />
+	<unit unitID='SECURITYCONFIG' name='security_config' bldFile='common/generic/security/securityconfig/group' />
+	<unit unitID='CRYPTOGRAPHY' name='security_crypto_weak' bldFile='common/generic/SECURITY/CRYPTO/GROUP' />
+	<unit unitID='STRONG_CRYPTO' name='security_crypto_strong' bldFile='common/generic/security/crypto/strong' />
+	<unit unitID='STDLIB' name='syslibs_stdlib' bldFile='common/generic/SYSLIBS/STDLIB/GROUP' />
+	<unit unitID='OECORE' name='openenv' bldFile='common/generic/openenv/core/group' />
+	<unit unitID='FEATREG' name='syslibs_featreg' bldFile='common/generic/syslibs/featreg/group' />
+	<unit unitID='ECOM_ONGOING' name='syslibs_ecom' bldFile='common/generic/SYSLIBS/ECOM/ongoing/GROUP' />
+	<unit unitID='PWRCLI' name='syslibs_pwrcli' bldFile='common/generic/SYSLIBS/PWRCLI/GROUP' />
+	<unit unitID='DOMAIN' name='base_domain' bldFile='cedar/generic/base/domain/group' />
+	<unit unitID='BAFL' name='syslibs_bafl' bldFile='common/generic/SYSLIBS/BAFL/GROUP' />
+	<unit unitID='CHARCONV_ONGOING' name='syslibs_charconv' bldFile='common/generic/SYSLIBS/Charconv/Ongoing/GROUP' />
+	<unit unitID='LOGENGONGOING' name='syslibs_logeng' bldFile='common/generic/SYSLIBS/LOGENG/ONGOING/GROUP' />
+	<unit unitID='FLOGGER' name='comms-infras_flogger' bldFile='common/generic/COMMS-INFRAS/Flogger/GROUP' />
+	<unit unitID='COMMSDEBUGUTILITY' name='comms-infras_commsdebugutility' bldFile='common/generic/comms-infras/commsdebugutility/GROUP' />
+	<unit unitID='CAF2' name='syslibs_caf2' bldFile='common/generic/syslibs/CAF2/GROUP' />
+	<unit unitID='CAF2CONFIG' name='syslibs_reccafconfig' bldFile='common/generic/syslibs/caf2/reccafconfig' />
+	<unit unitID='XML' name='syslibs_xml' bldFile='common/generic/syslibs/xml/group' />
+	<unit unitID='STORE' name='syslibs_store' bldFile='common/generic/SYSLIBS/Store/GROUP' />
+	<unit unitID='DBMS' name='syslibs_dbms' bldFile='common/generic/SYSLIBS/DBMS/GROUP' />
+	<unit unitID='DBMSSQL' name='syslibs_dbmssql' bldFile='common/generic/syslibs/dbms/esql/group' />
+	<unit unitID='CENTRALREPOSITORY' name='syslibs_centralrepository' bldFile='common/generic/syslibs/centralrepository/group' />
+	<unit unitID='SQL' name='syslibs_sql' bldFile='common/generic/syslibs/sql/group' />
+	<unit unitID='ROOTSERVER' name='comms-infras_rootserver' bldFile='common/generic/comms-infras/rootserver/GROUP' />
+	<unit unitID='COMMDB_SHIM' name='Comms Database SHIM' bldFile='common/generic/COMMS-INFRAS/Commdb/GROUP' />
+	<unit unitID='COMMSDAT' name='comms-infras_commsdat' bldFile='common/generic/COMMS-INFRAS/Commsdat/GROUP' />
+	<unit unitID='DEFAULTCOMMDB' name='comms-infras_defaultcommdb' bldFile='common/generic/COMMS-INFRAS/Commsdat/defaultcommdb/GROUP' />
+	<unit unitID='INSTALLDEFAULTCOMMDB' name='comms-infras_installdefaultcommdb' bldFile='common/generic/COMMS-INFRAS/Commsdat/installdefaultcommdb/GROUP' />
+	<unit unitID='C32' name='ser-comms_c32' bldFile='common/generic/SER-COMMS/C32/GROUP' />
+	<unit unitID='C32-config' name='ser-comms_c32-config' bldFile='common/generic/ser-comms/c32/data' />
+	<!-- excluding <unit unitID='ESOCK' name='comms-infras_esock' bldFile='common/generic/COMMS-INFRAS/ESOCK/version2/GROUP' /> -->
+	<unit unitID='ESOCK399' name='comms-infras_esock' bldFile='common/generic/COMMS-INFRAS/ESOCK/GROUP' />
+	<unit unitID='NIFMAN' name='comms-infras_nifman' bldFile='common/generic/COMMS-INFRAS/NIFMAN/GROUP' />
+	<unit unitID='DIALOG' name='networking_dialog' bldFile='common/generic/NETWORKING/DIALOG/GROUP' />
+	<unit unitID='DIALOG_DEFAULT' name='networking_dialog_default' bldFile='common/generic/networking/dialog/default' />
+	<unit unitID='NETCON' name='networking_netcon' bldFile='common/generic/NETWORKING/NETCON/GROUP' />
+	<unit unitID='COMMSFW' name='comms-infras_commsfw' bldFile='common/generic/comms-infras/commsfw/GROUP' />
+	<unit unitID='ELEMENTS' name='comms-infras_elements' bldFile='common/generic/COMMS-INFRAS/elements/group' />
+	<unit unitID='MBUFMAN' name='comms-infras_mbufmgr' bldFile='common/generic/comms-infras/mbufmgr/GROUP' />
+	<unit unitID='BCA' name='networking_bca' bldFile='common/generic/NETWORKING/BasebandAdaptation/bca/group' />
+	<!-- not including <unit unitID='ISC' name='networking_isc' bldFile='common/generic/NETWORKING/BasebandAdaptation/isc/group' /> -->
+	<unit unitID='DIAL' name='telephony_dial' bldFile='common/generic/TELEPHONY/DIAL/GROUP' />
+	<unit unitID='TELEPHONY_WATCHERS' name='telephony_watchers' bldFile='common/generic/telephony/watchers/group' />
+	<unit unitID='ETEL' name='telephony_etel' bldFile='common/generic/TELEPHONY/ETEL/GROUP' />
+	<unit unitID='ETEL3RDPARTY' name='telephony_etel3rdparty' bldFile='common/generic/TELEPHONY/ETel3rdParty/GROUP' />
+	<unit unitID='ETELMM' name='telephony_etelmm' bldFile='common/generic/TELEPHONY/ETELMM/GROUP' />
+	<unit unitID='ETELPCKT' name='telephony_etelpckt' bldFile='common/generic/TELEPHONY/etelpckt/group' />
+	<unit unitID='ETELSAT' name='telephony_etelsat' bldFile='common/generic/TELEPHONY/ETELSAT/GROUP' />
+	<unit unitID='ETELCDMA' name='telephony_etelcdma' bldFile='common/generic/telephony/etelcdma/group' />
+	<unit unitID='SMSSTACKV2' name='nbprotocols_smsstackv2' bldFile='common/generic/NBPROTOCOLS/SMSSTACKV2/GROUP' />
+	<unit unitID='CDMASMSSTACK' name='nbprotocols_cdmasmsstack' bldFile='common/generic/NBPROTOCOLS/CDMASMSSTACK/GROUP' />
+	<unit unitID='MMTSY' name='telephony_mmtsy' bldFile='common/generic/TELEPHONY/mmtsy/group' />
+	<unit unitID='CDMATSY' name='telephony_cdmatsy' bldFile='common/generic/TELEPHONY/cdmatsy/group' />
+	<unit unitID='SIMTSY' name='telephony_simtsy' bldFile='common/generic/TELEPHONY/simtsy/group' />
+	<unit unitID='TRP' name='telephony_trp' bldFile='common/generic/telephony/trp/group' />
+	<unit unitID='DND' name='networking_dnd' bldFile='common/generic/NETWORKING/dnd/group' />
+	<unit unitID='DHCP' name='networking_dhcp' bldFile='common/generic/NETWORKING/dhcp/group' />
+	<unit unitID='INSOCK' name='networking_insock' bldFile='common/generic/NETWORKING/insock/group' />
+	<unit unitID='NETWORKING_GENERAL' name='networking_general' bldFile='common/generic/networking/General/group' />
+	<unit unitID='IPEVENTNOTIFIER' name='networking_ipeventnotifier' bldFile='common/generic/networking/ipeventnotifier/group' />
+	<unit unitID='TCPIP6' name='networking_tcpip6' bldFile='common/generic/NETWORKING/TCPIP6/GROUP' />
+	<unit unitID='NETWORKING_EXAMPLECODE' name='IP Hook Examples' bldFile='common/generic/NETWORKING/examplecode/GROUP' />
+	<unit unitID='INHOOK6' name='networking_inhook6' bldFile='common/generic/NETWORKING/inhook6/group' />
+	<unit unitID='QOS' name='networking_qos' bldFile='common/generic/NETWORKING/QOS/GROUP' />
+	<unit unitID='QOSLIB' name='networking_qoslib' bldFile='common/generic/NETWORKING/QOSLIB/GROUP' />
+	<unit unitID='PFQOSLIB' name='networking_pfqoslib' bldFile='common/generic/NETWORKING/PFQOSLIB/GROUP' />
+	<unit unitID='NAPT' name='networking_napt' bldFile='common/generic/networking/napt/group' />
+	<!-- excluding <unit unitID='IPCPR' name='networking_ipcpr' bldFile='common/generic/NETWORKING/ip/version1/IPCPR/GROUP' /> -->
+	<!-- excluding <unit unitID='SHIMCPR' name='networking_shimcpr' bldFile='common/generic/comms-infras/nifman/version1/shimcpr/GROUP' /> -->
+	<!-- excluding <unit unitID='IPSCPR' name='networking_ipscpr' bldFile='common/generic/NETWORKING/umts/version1/ipscpr/GROUP' /> -->
+	<!-- excluding <unit unitID='REFERENCECPR' name='networking_ReferenceCPR' bldFile='common/generic/NETWORKING/ip/version1/referencecpr/GROUP' /> -->
+	<!-- excluding <unit unitID='REFERENCESCPR' name='networking_ReferenceSCPR' bldFile='common/generic/NETWORKING/umts/version1/referencescpr/GROUP' /> -->
+	<unit unitID='QOS3GPP' name='networking_qos3gpp' bldFile='common/generic/networking/umts/qos3gpp/group' />
+	<!-- excluding <unit unitID='UMTSGPRSSCPR' name='networking_UmtsGprsSCPR' bldFile='common/generic/NETWORKING/umts/version1/UmtsGprsSCPR/GROUP' /> -->
+	<unit unitID='IPPROTO' name='networking_ipproto' bldFile='common/generic/networking/ip/ipproto/group' />
+	<unit unitID='IPTRANSPORT' name='networking_iptransport' bldFile='common/generic/networking/ip/iptransport/group' />
+	<unit unitID='PDP' name='networking_pdp' bldFile='common/generic/networking/umts/pdp/group' />
+	<unit unitID='QOSIPSCPR' name='networking_qosipscpr' bldFile='common/generic/networking/umts/qosipscpr/group' />
+	<unit unitID='CSDAGT' name='networking_csdagt' bldFile='common/generic/NETWORKING/CSDAGT/GROUP' />
+	<unit unitID='PSDAGT' name='networking_psdagt' bldFile='common/generic/NETWORKING/PSDAGT/GROUP' />
+	<unit unitID='NULLAGT' name='networking_nullagt' bldFile='common/generic/NETWORKING/NULLAGT/GROUP' />
+	<unit unitID='GUQOS' name='networking_guqos' bldFile='common/generic/NETWORKING/GUQOS/GROUP' />
+	<unit unitID='UMTSIF' name='networking_umtsif' bldFile='common/generic/NETWORKING/UMTSIF/GROUP' />
+	<unit unitID='QOSEXTNAPI' name='networking_qosextnapi' bldFile='common/generic/networking/qosextnapi/group' />
+	<unit unitID='SPUD' name='networking_spud' bldFile='common/generic/NETWORKING/SPUD/GROUP' />
+	<unit unitID='EAP' name='networking_eap' bldFile='common/generic/networking/eap/group' />
+	<unit unitID='ETHER802' name='networking_ether802' bldFile='common/generic/NETWORKING/ETHER802/GROUP' />
+	<!-- excluding <unit unitID='PPP' name='networking_ppp' bldFile='common/generic/NETWORKING/PPP/version1/GROUP' /> -->
+	<unit unitID='PPP399' name='networking_ppp' bldFile='common/generic/NETWORKING/PPP/GROUP' />
+	<unit unitID='PREDCOMP' name='networking_predcomp' bldFile='common/generic/NETWORKING/PREDCOMP/GROUP' />
+	<unit unitID='MSCOMP' name='networking_mscomp' bldFile='common/generic/NETWORKING/MSComp/GROUP' />
+	<unit unitID='STACCOMP' name='networking_staccomp' bldFile='common/generic/NETWORKING/STACCOMP/GROUP' />
+	<unit unitID='SLIP' name='networking_slip' bldFile='common/generic/NETWORKING/SLIP/GROUP' />
+	<unit unitID='TUNNELNIF' name='networking_tunnelnif' bldFile='common/generic/NETWORKING/tunnelnif/group' />
+	<unit unitID='PACKETLOGGER' name='networking_packetlogger' bldFile='common/generic/NETWORKING/packetlogger/group' />
+	<unit unitID='RAWIPNIF' name='networking_rawipnif' bldFile='common/generic/NETWORKING/rawipnif/group' />
+	<unit unitID='WIFI_802_11' name='networking_802.11' bldFile='common/generic/networking/802.11/group' />
+	<unit unitID='USB' name='ser-comms_usb' bldFile='common/generic/SER-COMMS/USB/GROUP' />
+	<unit unitID='BLUETOOTH_MANAGER' name='bluetooth_manager' bldFile='common/generic/bluetooth/latest/bluetooth/manager' />
+	<unit unitID='BLUETOOTH_BTEXTNOTIFIERS' name='bluetooth_btextnotifiers' bldFile='common/generic/bluetooth/latest/bluetooth/BTExtNotifiers' />
+	<unit unitID='BLUETOOTH_CONFIG' name='bluetooth_config' bldFile='common/generic/bluetooth/latest/bluetooth/config' />
+	<unit unitID='BLUETOOTH_GAVDP' name='bluetooth_gavdp' bldFile='common/generic/bluetooth/latest/bluetooth/profiles/gavdp/group' />
+	<unit unitID='BLUETOOTH_ROM' name='bluetooth_rom' bldFile='common/generic/bluetooth/latest/bluetooth/rom' />
+	<unit unitID='BLUETOOTH_USER' name='bluetooth_user' bldFile='common/generic/bluetooth/latest/bluetooth/user' />
+	<unit unitID='HCI_V2_FRAMEWORK' name='bluetooth_hci_v2_framework' bldFile='common/generic/bluetooth/latest/bluetooth/hci_v2/framework/group' />
+	<unit unitID='BLUETOOTH_SDP' name='bluetooth_sdp' bldFile='common/generic/bluetooth/latest/bluetooth/sdp' />
+	<unit unitID='BLUETOOTH_REMOTECONTROL' name='bluetooth_remotecontrol' bldFile='common/generic/bluetooth/latest/bluetooth/remotecontrol/group' />
+	<unit unitID='BLUETOOTH_STACK' name='bluetooth_stack' bldFile='common/generic/bluetooth/latest/bluetooth/stack' />
+	<unit unitID='BLUETOOTH_HCI' name='bluetooth_hci' bldFile='common/generic/bluetooth/latest/bluetooth/hci' />
+	<unit unitID='BLUETOOTH_HCIPROXY' name='bluetooth_hciproxy' bldFile='common/generic/bluetooth/latest/bluetooth/HCIProxy' />
+	<unit unitID='HCI_V2_IMPLEMENTATIONS' name='bluetooth_hci_v2_implementations' bldFile='common/generic/bluetooth/latest/bluetooth/hci_v2/implementations/group' />
+	<unit unitID='IRDA' name='infra-red_irda' bldFile='common/generic/INFRA-RED/IRDA/GROUP' />
+	<unit unitID='INFRA-RED_CONFIG' name='infra-red_config' bldFile='common/generic/INFRA-RED/config' />
+	<unit unitID='BLUETOOTH_BTCOMM' name='bluetooth_btcomm' bldFile='common/generic/bluetooth/latest/bluetooth/btcomm' />
+	<unit unitID='MDF' name='multimedia_mdf' bldFile='common/generic/multimedia/mdf/group' />
+	<unit unitID='OPENMAX' name='multimedia_openmax' bldFile='common/generic/multimedia/openmax/group' />
+	<unit unitID='MMF' name='multimedia_mmf' bldFile='common/generic/MULTIMEDIA/MMF/GROUP' />
+	<unit unitID='COMMON' name='multimedia_common' bldFile='common/generic/MULTIMEDIA/MMCOMMON/GROUP' />
+	<unit unitID='CHAR' name='multimedia_mmf_char' bldFile='common/generic/MULTIMEDIA/char/mmf/group' />
+	<unit unitID='ICL' name='multimedia_icl' bldFile='common/generic/MULTIMEDIA/ICL/GROUP' />
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/envelope/all_nocompsupp.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,387 @@
+<?xml version="1.0"?>
+
+<SystemDefinition name="MCL" schema="1.4.0">
+  <systemModel>
+    <layer name="common">
+      <module name="allexports">
+        <component name="envelope">
+	<unit unitID='BUILDSYSTEMTOOLS' name='tools_build' bldFile='common/generic/tools/build/group' />
+	<unit unitID='CBRTOOLS' name='tools_cbr_tools' bldFile='common/generic/tools/cbr/tools/Group' />
+	<unit unitID='CBRPRF' name='tools_cbr_prf' bldFile='common/generic/tools/cbr/prf/group' />
+	<unit unitID='DEPCHECK' name='tools_depcheck' bldFile='common/generic/tools/depcheck' />
+	<unit unitID='DEPMODEL' name='tools_depmodel' bldFile='common/generic/tools/depmodel/group' />
+	<unit unitID='E32TOOLS_EKA2' name='tools_e32tools' bldFile='cedar/generic/TOOLS/E32Tools/GROUP' />
+	<unit unitID='EVALID' name='tools_evalid' bldFile='common/generic/tools/host_utilities/evalid' />
+	<unit unitID='RCOMP' name='tools_rcomp' bldFile='common/generic/TOOLS/RCOMP/GROUP' />
+	<unit unitID='REDISTRIBUTION' name='tools_redistribution_common' bldFile='common/generic/TOOLS/REDISTRIBUTION' />
+	<unit unitID='ROMKIT_EKA2' name='tools_romkit' bldFile='cedar/generic/TOOLS/ROMKIT/GROUP' />
+	<!-- not including <unit unitID='s60headercompat' name='tools_s60_header_compat' bldFile='common/generic/tools/s60_header_compat/group' /> -->
+	<unit unitID='BLUETOOTH_LOGGER' name='bluetooth_logger' bldFile='common/generic/bluetooth/latest/bluetooth/logger/group' />
+	<unit unitID='CINIDATA' name='tools_cinidata' bldFile='common/generic/TOOLS/CINIDATA' />
+	<unit unitID='AUTOTEST' name='tools_autotest' bldFile='common/generic/TOOLS/AUTOTEST/GROUP' />
+	<unit unitID='TESTCONFIGFILEPARSER' name='tools_testconfigfileparser' bldFile='common/generic/TOOLS/testconfigfileparser/GROUP' />
+	<unit unitID='KITSETUPAPP' name='tools_devkits_kitsetupapp' bldFile='common/generic/TOOLS/DevKits/KitSetupApp/group' />
+	<unit unitID='PRODUCTINSTALLER' name='tools_custkits_productinstaller' bldFile='common/generic/TOOLS/Custkits/ProductInstaller/group' />
+	<unit unitID='REDISTRIBUTION_WINC_EKA2' name='tools_redistribution_cedar' bldFile='cedar/generic/tools/redistribution' />
+	<unit unitID='MAKEKEYS' name='security_makekeys' bldFile='common/generic/SECURITY/MakeKeys/GROUP' />
+	<unit unitID='PACKETLOOPBACKCSY' name='PacketLoopbackCSY' bldFile='common/generic/networking/test/PacketLoopbackCSY/group' />
+	<unit unitID='STLPORT' name='tools_stlport' bldFile='common/generic/tools/stlport/group' />
+	<unit unitID='RUNPERL' name='tools_sdk_eng_runperl' bldFile='common/generic/TOOLS/SDK_ENG/RUNPERL/GROUP' />
+	<unit unitID='BUILD-TOOLS' name='tools_sdk_eng_build-tools' bldFile='common/generic/TOOLS/SDK_ENG/BUILD-TOOLS/GROUP' />
+	<unit unitID='JAVALIBRARY' name='tools_sdk_eng_javalibrary' bldFile='common/generic/TOOLS/SDK_ENG/JAVALIBRARY/GROUP' />
+	<unit unitID='ASSERTION' name='tools_sdk_eng_assertion' bldFile='common/generic/TOOLS/SDK_ENG/ASSERTION/GROUP' />
+	<unit unitID='ENUM' name='tools_sdk_eng_enum' bldFile='common/generic/TOOLS/SDK_ENG/ENUM/GROUP' />
+	<unit unitID='LOGGER' name='tools_sdk_eng_logger' bldFile='common/generic/TOOLS/SDK_ENG/LOGGER/GROUP' />
+	<unit unitID='FILESYS' name='tools_sdk_eng_filesys' bldFile='common/generic/TOOLS/SDK_ENG/FILESYS/GROUP' />
+	<unit unitID='ENVVAR' name='tools_sdk_eng_envvar' bldFile='common/generic/TOOLS/SDK_ENG/ENVVAR/GROUP' />
+	<unit unitID='INSTALLUTILS' name='tools_sdk_eng_installutils' bldFile='common/generic/TOOLS/SDK_ENG/INSTALLUTILS/GROUP' />
+	<unit unitID='MNEMONICFIX' name='tools_sdk_eng_mnemonicfix' bldFile='common/generic/TOOLS/SDK_ENG/MNEMONICFIX/GROUP' />
+	<unit unitID='PATHBROWSER' name='tools_sdk_eng_pathbrowser' bldFile='common/generic/TOOLS/SDK_ENG/PATHBROWSER/GROUP' />
+	<unit unitID='SHELLEXEC' name='tools_sdk_eng_shellexec' bldFile='common/generic/TOOLS/SDK_ENG/SHELLEXEC/GROUP' />
+	<unit unitID='SWINGWORKER' name='tools_sdk_eng_swingworker' bldFile='common/generic/TOOLS/SDK_ENG/SWINGWORKER/GROUP' />
+	<unit unitID='TESTCASERUNNER' name='tools_sdk_eng_testcaserunner' bldFile='common/generic/TOOLS/SDK_ENG/TESTCASERUNNER/GROUP' />
+	<unit unitID='TOOLBARPANEL' name='tools_sdk_eng_toolbarpanel' bldFile='common/generic/TOOLS/SDK_ENG/TOOLBARPANEL/GROUP' />
+	<unit unitID='JAVAHELP' name='tools_sdk_eng_javahelp' bldFile='common/generic/TOOLS/SDK_ENG/JAVAHELP/GROUP' />
+	<unit unitID='LANGCONFIG' name='tools_sdk_eng_langconfig' bldFile='common/generic/TOOLS/SDK_ENG/LANGCONFIG/GROUP' />
+	<unit unitID='MBMCODEC' name='tools_sdk_eng_mbmcodec' bldFile='common/generic/TOOLS/SDK_ENG/MBMCODEC/GROUP' />
+	<unit unitID='SDKINFO' name='tools_sdk_eng_sdkinfo' bldFile='common/generic/TOOLS/SDK_ENG/SDKINFO/GROUP' />
+	<unit unitID='JADE' name='tools_sdk_eng_jade' bldFile='common/generic/TOOLS/SDK_ENG/JADE/GROUP' />
+	<unit unitID='CSHLPCMP_GUI' name='tools_sdk_eng_cshlpcmp_gui' bldFile='common/generic/TOOLS/SDK_ENG/CSHLPCMP_GUI/GROUP' />
+	<unit unitID='SISAR' name='tools_sdk_eng_sisar' bldFile='common/generic/TOOLS/SDK_ENG/SISAR/GROUP' />
+	<unit unitID='SDKPKG-MANAGER' name='tools_sdk_eng_sdkpkg-manager' bldFile='common/generic/TOOLS/SDK_ENG/SDKPKG-MANAGER/GROUP' />
+	<unit unitID='SDKPKG-TOOLS' name='tools_sdk_eng_sdkpkg-tools' bldFile='common/generic/TOOLS/SDK_ENG/SDKPKG-TOOLS/GROUP' />
+	<unit unitID='EMULATOR_LAUNCHER' name='tools_sdk_eng_emulator_launcher' bldFile='common/generic/TOOLS/SDK_ENG/EMULATOR_LAUNCHER/GROUP' />
+	<unit unitID='PKGMGRGUI' name='tools_sdk_eng_pkgmgrgui' bldFile='common/generic/TOOLS/SDK_ENG/PKGMGRGUI/GROUP' />
+	<unit unitID='LAUNCH' name='tools_sdk_eng_launch' bldFile='common/generic/TOOLS/SDK_ENG/LAUNCH/GROUP' />
+	<unit unitID='TOOLS_STUBS' name='tools_sdk_eng_tools_stubs' bldFile='common/generic/TOOLS/SDK_ENG/TOOLS_STUBS/GROUP' />
+	<unit unitID='CWPLUGINS' name='tools_sdk_eng_cwplugins' bldFile='common/generic/TOOLS/SDK_ENG/CWPLUGINS/GROUP' />
+	<unit unitID='BSPBUILDER' name='tools_bspbuilder' bldFile='common/generic/TOOLS/BSPBUILDER/GROUP' />
+	<unit unitID='ALP2CSH' name='tools_sdk_eng_alp2csh' bldFile='common/generic/TOOLS/SDK_ENG/ALP2CSH/GROUP' />
+	<unit unitID='CJPEG' name='tools_sdk_eng_cjpeg' bldFile='common/generic/TOOLS/SDK_ENG/CJPEG/GROUP' />
+	<unit unitID='CSHLPCMP_FRONTEND' name='tools_sdk_eng_cshlpcmp_frontend' bldFile='common/generic/TOOLS/SDK_ENG/CSHLPCMP_FRONTEND/GROUP' />
+	<unit unitID='PERLLIBRARY' name='tools_sdk_eng_perllibrary' bldFile='common/generic/TOOLS/SDK_ENG/PERLLIBRARY/GROUP' />
+	<unit unitID='PERLSHARED' name='tools_sdk_eng_perl_shared' bldFile='common/generic/tools/sdk_eng/perl_shared/group' />
+	<unit unitID='RTF2PTML' name='tools_sdk_eng_rtf2ptml' bldFile='common/generic/TOOLS/SDK_ENG/RTF2PTML/GROUP' />
+	<unit unitID='SPLASH' name='tools_sdk_eng_splash' bldFile='common/generic/TOOLS/SDK_ENG/SPLASH/GROUP' />
+	<unit unitID='SDK_BUILDER' name='tools_sdk_eng_sdk_builder' bldFile='common/generic/TOOLS/sdk_eng/sdk_builder/GROUP' />
+<!--	<unit unitID='WINS_VARIANT_EKA2' name='base_wins' bldFile='cedar/generic/base/wins' /> -->
+	<unit unitID='LUBBOCK_EKA2' name='base_lubbock' bldFile='cedar/generic/BASE/LUBBOCK' />
+	<unit unitID='OMAP_H2' name='base_omaph2' bldFile='cedar/generic/base/omap/h2' />
+	<unit unitID='BASE_H2_UNISTORE2' name='base_h2_unistore2' bldFile='cedar/generic/base/omap/h2_restricted/unistore2' />
+	<unit unitID='BASE_H2_SDIO' name='base_h2_sdio' bldFile='cedar/generic/base/omap/h2_restricted/sdio' />
+	<unit unitID='OMAPH4HRP' name='base_omaph4hrp' bldFile='cedar/generic/base/omap_hrp/h4' />
+	<unit unitID='H4BOOTLOADER' name='base_omaph4hrp_bootldr' bldFile='cedar/generic/base/omap_hrp/h4_bootloader' />
+	<unit unitID='H4MEBOOTLOADER' name='base_omaph4hrp_mebootldr' bldFile='cedar/generic/base/omap_hrp/h4_mebootloader' />
+	<unit unitID='OMAPH4HRP_UNISTORE2' name='base_omaph4hrp_unistore2' bldFile='cedar/generic/base/omap_hrp/h4_restricted/unistore2' />
+	<unit unitID='OMAPH4HRP_SDIO' name='base_omaph4hrp_sdio' bldFile='cedar/generic/base/omap_hrp/h4_restricted/sdio' />
+	<unit unitID='LMNAND2_LOGIC' name='base_integrator_logic_lmnand2' bldFile='cedar/generic/base/integrator/logic/lmnand2' />
+	<unit unitID='UNISTORE2_DRIVERS' name='base_drivers_unistore2' bldFile='cedar/generic/base/e32/drivers/unistore2' />
+	<unit unitID='UNISTORE2_CRASHFLASH' name='base_crashflash_unistore2' bldFile='cedar/generic/base/e32/drivers/crashflash/unistore2' />
+	<unit unitID='UNISTORE2_NANDBOOT' name='base_nandboot_unistore2' bldFile='cedar/generic/base/e32utils/nandboot/nandloader/unistore2' />
+	<unit unitID='SCREENDRIVER' name='graphics_screendriver' bldFile='common/generic/GRAPHICS/ScreenDriver/Group' />
+	<unit unitID='C32BCA' name='networking_c32bca' bldFile='common/generic/NETWORKING/BasebandAdaptation/c32bca/group' />
+	<unit unitID='E32_EKA2' name='base_e32' bldFile='cedar/generic/BASE/E32' />
+<!--	<unit unitID='E32_COMPSUPP' name='base_e32_compsupp' bldFile='cedar/generic/BASE/E32/compsupp' /> -->
+	<unit unitID='SDCARD3C' name='base_e32_sd3c' bldFile='cedar/generic/base/e32/drivers/pbus/mmc/sdcard/sdcard3c' />
+	<unit unitID='SDCARD4C' name='base_e32_sd4c' bldFile='cedar/generic/base/e32/drivers/pbus/mmc/sdcard/sdcard4c' />
+	<unit unitID='LOCE32_ONGOING' name='base_loce32' bldFile='common/generic/BASE/LOCE32/ongoing' />
+	<unit unitID='F32_EKA2' name='base_f32' bldFile='cedar/generic/BASE/F32/GROUP' />
+	<unit unitID='F32TEST_EKA2' name='base_f32test' bldFile='cedar/generic/BASE/F32TEST/GROUP' />
+	<unit unitID='FATCHARSETCONV' name='syslibs_FATCharsetConv' bldFile='common/generic/syslibs/FATCharsetConv/GROUP' />
+	<unit unitID='HAL_EKA2' name='base_hal' bldFile='cedar/generic/BASE/HAL' />
+	<unit unitID='SYSAGENT2' name='syslibs_sysagent2' bldFile='common/generic/SYSLIBS/SYSAGENT2/GROUP' />
+	<unit unitID='SCHSVR_ONGOING' name='syslibs_schsvr' bldFile='common/generic/SYSLIBS/SCHSVR/ongoing/GROUP' />
+	<unit unitID='AUTHSERVER' name='security_authserver' bldFile='common/generic/security/authserver/group' />
+	<unit unitID='SYSSTART' name='app-framework_sysstart' bldFile='common/generic/app-framework/sysstart/group' />
+	<unit unitID='EMIME' name='app-framework_emime' bldFile='common/generic/APP-FRAMEWORK/EMIME/GROUP' />
+	<unit unitID='EZLIB' name='syslibs_ezlib' bldFile='common/generic/SYSLIBS/EZLIB/GROUP' />
+	<unit unitID='SECURITYCOMMON' name='security_common' bldFile='common/generic/SECURITY/COMMON/GROUP' />
+	<unit unitID='SECURITYCONFIG' name='security_config' bldFile='common/generic/security/securityconfig/group' />
+	<unit unitID='CRYPTOGRAPHY' name='security_crypto_weak' bldFile='common/generic/SECURITY/CRYPTO/GROUP' />
+	<unit unitID='STRONG_CRYPTO' name='security_crypto_strong' bldFile='common/generic/security/crypto/strong' />
+	<unit unitID='STDLIB' name='syslibs_stdlib' bldFile='common/generic/SYSLIBS/STDLIB/GROUP' />
+	<unit unitID='OECORE' name='openenv' bldFile='common/generic/openenv/core/group' />
+	<unit unitID='FEATREG' name='syslibs_featreg' bldFile='common/generic/syslibs/featreg/group' />
+	<unit unitID='ECOM_ONGOING' name='syslibs_ecom' bldFile='common/generic/SYSLIBS/ECOM/ongoing/GROUP' />
+	<unit unitID='PWRCLI' name='syslibs_pwrcli' bldFile='common/generic/SYSLIBS/PWRCLI/GROUP' />
+	<unit unitID='DOMAIN' name='base_domain' bldFile='cedar/generic/base/domain/group' />
+	<unit unitID='BAFL' name='syslibs_bafl' bldFile='common/generic/SYSLIBS/BAFL/GROUP' />
+	<unit unitID='CHARCONV_ONGOING' name='syslibs_charconv' bldFile='common/generic/SYSLIBS/Charconv/Ongoing/GROUP' />
+	<unit unitID='LOGENGONGOING' name='syslibs_logeng' bldFile='common/generic/SYSLIBS/LOGENG/ONGOING/GROUP' />
+	<unit unitID='FLOGGER' name='comms-infras_flogger' bldFile='common/generic/COMMS-INFRAS/Flogger/GROUP' />
+	<unit unitID='COMMSDEBUGUTILITY' name='comms-infras_commsdebugutility' bldFile='common/generic/comms-infras/commsdebugutility/GROUP' />
+	<unit unitID='CAF2' name='syslibs_caf2' bldFile='common/generic/syslibs/CAF2/GROUP' />
+	<unit unitID='CAF2CONFIG' name='syslibs_reccafconfig' bldFile='common/generic/syslibs/caf2/reccafconfig' />
+	<unit unitID='XML' name='syslibs_xml' bldFile='common/generic/syslibs/xml/group' />
+	<unit unitID='STORE' name='syslibs_store' bldFile='common/generic/SYSLIBS/Store/GROUP' />
+	<unit unitID='DBMS' name='syslibs_dbms' bldFile='common/generic/SYSLIBS/DBMS/GROUP' />
+	<unit unitID='DBMSSQL' name='syslibs_dbmssql' bldFile='common/generic/syslibs/dbms/esql/group' />
+	<unit unitID='CENTRALREPOSITORY' name='syslibs_centralrepository' bldFile='common/generic/syslibs/centralrepository/group' />
+	<unit unitID='SQL' name='syslibs_sql' bldFile='common/generic/syslibs/sql/group' />
+	<unit unitID='ROOTSERVER' name='comms-infras_rootserver' bldFile='common/generic/comms-infras/rootserver/GROUP' />
+	<unit unitID='COMMDB_SHIM' name='Comms Database SHIM' bldFile='common/generic/COMMS-INFRAS/Commdb/GROUP' />
+	<unit unitID='COMMSDAT' name='comms-infras_commsdat' bldFile='common/generic/COMMS-INFRAS/Commsdat/GROUP' />
+	<unit unitID='DEFAULTCOMMDB' name='comms-infras_defaultcommdb' bldFile='common/generic/COMMS-INFRAS/Commsdat/defaultcommdb/GROUP' />
+	<unit unitID='INSTALLDEFAULTCOMMDB' name='comms-infras_installdefaultcommdb' bldFile='common/generic/COMMS-INFRAS/Commsdat/installdefaultcommdb/GROUP' />
+	<unit unitID='C32' name='ser-comms_c32' bldFile='common/generic/SER-COMMS/C32/GROUP' />
+	<unit unitID='C32-config' name='ser-comms_c32-config' bldFile='common/generic/ser-comms/c32/data' />
+	<!-- excluding <unit unitID='ESOCK' name='comms-infras_esock' bldFile='common/generic/COMMS-INFRAS/ESOCK/version2/GROUP' /> -->
+	<unit unitID='ESOCK399' name='comms-infras_esock' bldFile='common/generic/COMMS-INFRAS/ESOCK/GROUP' />
+	<unit unitID='NIFMAN' name='comms-infras_nifman' bldFile='common/generic/COMMS-INFRAS/NIFMAN/GROUP' />
+	<unit unitID='DIALOG' name='networking_dialog' bldFile='common/generic/NETWORKING/DIALOG/GROUP' />
+	<unit unitID='DIALOG_DEFAULT' name='networking_dialog_default' bldFile='common/generic/networking/dialog/default' />
+	<unit unitID='NETCON' name='networking_netcon' bldFile='common/generic/NETWORKING/NETCON/GROUP' />
+	<unit unitID='COMMSFW' name='comms-infras_commsfw' bldFile='common/generic/comms-infras/commsfw/GROUP' />
+	<unit unitID='ELEMENTS' name='comms-infras_elements' bldFile='common/generic/COMMS-INFRAS/elements/group' />
+	<unit unitID='MBUFMAN' name='comms-infras_mbufmgr' bldFile='common/generic/comms-infras/mbufmgr/GROUP' />
+	<unit unitID='BCA' name='networking_bca' bldFile='common/generic/NETWORKING/BasebandAdaptation/bca/group' />
+	<!-- not including <unit unitID='ISC' name='networking_isc' bldFile='common/generic/NETWORKING/BasebandAdaptation/isc/group' /> -->
+	<unit unitID='DIAL' name='telephony_dial' bldFile='common/generic/TELEPHONY/DIAL/GROUP' />
+	<unit unitID='TELEPHONY_WATCHERS' name='telephony_watchers' bldFile='common/generic/telephony/watchers/group' />
+	<unit unitID='ETEL' name='telephony_etel' bldFile='common/generic/TELEPHONY/ETEL/GROUP' />
+	<unit unitID='ETEL3RDPARTY' name='telephony_etel3rdparty' bldFile='common/generic/TELEPHONY/ETel3rdParty/GROUP' />
+	<unit unitID='ETELMM' name='telephony_etelmm' bldFile='common/generic/TELEPHONY/ETELMM/GROUP' />
+	<unit unitID='ETELPCKT' name='telephony_etelpckt' bldFile='common/generic/TELEPHONY/etelpckt/group' />
+	<unit unitID='ETELSAT' name='telephony_etelsat' bldFile='common/generic/TELEPHONY/ETELSAT/GROUP' />
+	<unit unitID='ETELCDMA' name='telephony_etelcdma' bldFile='common/generic/telephony/etelcdma/group' />
+	<unit unitID='SMSSTACKV2' name='nbprotocols_smsstackv2' bldFile='common/generic/NBPROTOCOLS/SMSSTACKV2/GROUP' />
+	<unit unitID='CDMASMSSTACK' name='nbprotocols_cdmasmsstack' bldFile='common/generic/NBPROTOCOLS/CDMASMSSTACK/GROUP' />
+	<unit unitID='MMTSY' name='telephony_mmtsy' bldFile='common/generic/TELEPHONY/mmtsy/group' />
+	<unit unitID='CDMATSY' name='telephony_cdmatsy' bldFile='common/generic/TELEPHONY/cdmatsy/group' />
+	<unit unitID='SIMTSY' name='telephony_simtsy' bldFile='common/generic/TELEPHONY/simtsy/group' />
+	<unit unitID='TRP' name='telephony_trp' bldFile='common/generic/telephony/trp/group' />
+	<unit unitID='DND' name='networking_dnd' bldFile='common/generic/NETWORKING/dnd/group' />
+	<unit unitID='DHCP' name='networking_dhcp' bldFile='common/generic/NETWORKING/dhcp/group' />
+	<unit unitID='INSOCK' name='networking_insock' bldFile='common/generic/NETWORKING/insock/group' />
+	<unit unitID='NETWORKING_GENERAL' name='networking_general' bldFile='common/generic/networking/General/group' />
+	<unit unitID='IPEVENTNOTIFIER' name='networking_ipeventnotifier' bldFile='common/generic/networking/ipeventnotifier/group' />
+	<unit unitID='TCPIP6' name='networking_tcpip6' bldFile='common/generic/NETWORKING/TCPIP6/GROUP' />
+	<unit unitID='NETWORKING_EXAMPLECODE' name='IP Hook Examples' bldFile='common/generic/NETWORKING/examplecode/GROUP' />
+	<unit unitID='INHOOK6' name='networking_inhook6' bldFile='common/generic/NETWORKING/inhook6/group' />
+	<unit unitID='QOS' name='networking_qos' bldFile='common/generic/NETWORKING/QOS/GROUP' />
+	<unit unitID='QOSLIB' name='networking_qoslib' bldFile='common/generic/NETWORKING/QOSLIB/GROUP' />
+	<unit unitID='PFQOSLIB' name='networking_pfqoslib' bldFile='common/generic/NETWORKING/PFQOSLIB/GROUP' />
+	<unit unitID='NAPT' name='networking_napt' bldFile='common/generic/networking/napt/group' />
+	<!-- excluding <unit unitID='IPCPR' name='networking_ipcpr' bldFile='common/generic/NETWORKING/ip/version1/IPCPR/GROUP' /> -->
+	<!-- excluding <unit unitID='SHIMCPR' name='networking_shimcpr' bldFile='common/generic/comms-infras/nifman/version1/shimcpr/GROUP' /> -->
+	<!-- excluding <unit unitID='IPSCPR' name='networking_ipscpr' bldFile='common/generic/NETWORKING/umts/version1/ipscpr/GROUP' /> -->
+	<!-- excluding <unit unitID='REFERENCECPR' name='networking_ReferenceCPR' bldFile='common/generic/NETWORKING/ip/version1/referencecpr/GROUP' /> -->
+	<!-- excluding <unit unitID='REFERENCESCPR' name='networking_ReferenceSCPR' bldFile='common/generic/NETWORKING/umts/version1/referencescpr/GROUP' /> -->
+	<unit unitID='QOS3GPP' name='networking_qos3gpp' bldFile='common/generic/networking/umts/qos3gpp/group' />
+	<!-- excluding <unit unitID='UMTSGPRSSCPR' name='networking_UmtsGprsSCPR' bldFile='common/generic/NETWORKING/umts/version1/UmtsGprsSCPR/GROUP' /> -->
+	<unit unitID='IPPROTO' name='networking_ipproto' bldFile='common/generic/networking/ip/ipproto/group' />
+	<unit unitID='IPTRANSPORT' name='networking_iptransport' bldFile='common/generic/networking/ip/iptransport/group' />
+	<unit unitID='PDP' name='networking_pdp' bldFile='common/generic/networking/umts/pdp/group' />
+	<unit unitID='QOSIPSCPR' name='networking_qosipscpr' bldFile='common/generic/networking/umts/qosipscpr/group' />
+	<unit unitID='CSDAGT' name='networking_csdagt' bldFile='common/generic/NETWORKING/CSDAGT/GROUP' />
+	<unit unitID='PSDAGT' name='networking_psdagt' bldFile='common/generic/NETWORKING/PSDAGT/GROUP' />
+	<unit unitID='NULLAGT' name='networking_nullagt' bldFile='common/generic/NETWORKING/NULLAGT/GROUP' />
+	<unit unitID='GUQOS' name='networking_guqos' bldFile='common/generic/NETWORKING/GUQOS/GROUP' />
+	<unit unitID='UMTSIF' name='networking_umtsif' bldFile='common/generic/NETWORKING/UMTSIF/GROUP' />
+	<unit unitID='QOSEXTNAPI' name='networking_qosextnapi' bldFile='common/generic/networking/qosextnapi/group' />
+	<unit unitID='SPUD' name='networking_spud' bldFile='common/generic/NETWORKING/SPUD/GROUP' />
+	<unit unitID='EAP' name='networking_eap' bldFile='common/generic/networking/eap/group' />
+	<unit unitID='ETHER802' name='networking_ether802' bldFile='common/generic/NETWORKING/ETHER802/GROUP' />
+	<!-- excluding <unit unitID='PPP' name='networking_ppp' bldFile='common/generic/NETWORKING/PPP/version1/GROUP' /> -->
+	<unit unitID='PPP399' name='networking_ppp' bldFile='common/generic/NETWORKING/PPP/GROUP' />
+	<unit unitID='PREDCOMP' name='networking_predcomp' bldFile='common/generic/NETWORKING/PREDCOMP/GROUP' />
+	<unit unitID='MSCOMP' name='networking_mscomp' bldFile='common/generic/NETWORKING/MSComp/GROUP' />
+	<unit unitID='STACCOMP' name='networking_staccomp' bldFile='common/generic/NETWORKING/STACCOMP/GROUP' />
+	<unit unitID='SLIP' name='networking_slip' bldFile='common/generic/NETWORKING/SLIP/GROUP' />
+	<unit unitID='TUNNELNIF' name='networking_tunnelnif' bldFile='common/generic/NETWORKING/tunnelnif/group' />
+	<unit unitID='PACKETLOGGER' name='networking_packetlogger' bldFile='common/generic/NETWORKING/packetlogger/group' />
+	<unit unitID='RAWIPNIF' name='networking_rawipnif' bldFile='common/generic/NETWORKING/rawipnif/group' />
+	<unit unitID='WIFI_802_11' name='networking_802.11' bldFile='common/generic/networking/802.11/group' />
+	<unit unitID='USB' name='ser-comms_usb' bldFile='common/generic/SER-COMMS/USB/GROUP' />
+	<unit unitID='BLUETOOTH_MANAGER' name='bluetooth_manager' bldFile='common/generic/bluetooth/latest/bluetooth/manager' />
+	<unit unitID='BLUETOOTH_BTEXTNOTIFIERS' name='bluetooth_btextnotifiers' bldFile='common/generic/bluetooth/latest/bluetooth/BTExtNotifiers' />
+	<unit unitID='BLUETOOTH_CONFIG' name='bluetooth_config' bldFile='common/generic/bluetooth/latest/bluetooth/config' />
+	<unit unitID='BLUETOOTH_GAVDP' name='bluetooth_gavdp' bldFile='common/generic/bluetooth/latest/bluetooth/profiles/gavdp/group' />
+	<unit unitID='BLUETOOTH_ROM' name='bluetooth_rom' bldFile='common/generic/bluetooth/latest/bluetooth/rom' />
+	<unit unitID='BLUETOOTH_USER' name='bluetooth_user' bldFile='common/generic/bluetooth/latest/bluetooth/user' />
+	<unit unitID='HCI_V2_FRAMEWORK' name='bluetooth_hci_v2_framework' bldFile='common/generic/bluetooth/latest/bluetooth/hci_v2/framework/group' />
+	<unit unitID='BLUETOOTH_SDP' name='bluetooth_sdp' bldFile='common/generic/bluetooth/latest/bluetooth/sdp' />
+	<unit unitID='BLUETOOTH_REMOTECONTROL' name='bluetooth_remotecontrol' bldFile='common/generic/bluetooth/latest/bluetooth/remotecontrol/group' />
+	<unit unitID='BLUETOOTH_STACK' name='bluetooth_stack' bldFile='common/generic/bluetooth/latest/bluetooth/stack' />
+	<unit unitID='BLUETOOTH_HCI' name='bluetooth_hci' bldFile='common/generic/bluetooth/latest/bluetooth/hci' />
+	<unit unitID='BLUETOOTH_HCIPROXY' name='bluetooth_hciproxy' bldFile='common/generic/bluetooth/latest/bluetooth/HCIProxy' />
+	<unit unitID='HCI_V2_IMPLEMENTATIONS' name='bluetooth_hci_v2_implementations' bldFile='common/generic/bluetooth/latest/bluetooth/hci_v2/implementations/group' />
+	<unit unitID='IRDA' name='infra-red_irda' bldFile='common/generic/INFRA-RED/IRDA/GROUP' />
+	<unit unitID='INFRA-RED_CONFIG' name='infra-red_config' bldFile='common/generic/INFRA-RED/config' />
+	<unit unitID='BLUETOOTH_BTCOMM' name='bluetooth_btcomm' bldFile='common/generic/bluetooth/latest/bluetooth/btcomm' />
+	<unit unitID='MDF' name='multimedia_mdf' bldFile='common/generic/multimedia/mdf/group' />
+	<unit unitID='OPENMAX' name='multimedia_openmax' bldFile='common/generic/multimedia/openmax/group' />
+	<unit unitID='MMF' name='multimedia_mmf' bldFile='common/generic/MULTIMEDIA/MMF/GROUP' />
+	<unit unitID='COMMON' name='multimedia_common' bldFile='common/generic/MULTIMEDIA/MMCOMMON/GROUP' />
+	<unit unitID='CHAR' name='multimedia_mmf_char' bldFile='common/generic/MULTIMEDIA/char/mmf/group' />
+	<unit unitID='ICL' name='multimedia_icl' bldFile='common/generic/MULTIMEDIA/ICL/GROUP' />
+	<unit unitID='ECAM' name='multimedia_ecam' bldFile='common/generic/MULTIMEDIA/ECAM/GROUP' />
+	<unit unitID='TUNER' name='multimedia_tuner' bldFile='common/generic/MULTIMEDIA/tuner/GROUP' />
+	<unit unitID='WSERV8.1' name='graphics_wserv' bldFile='common/generic/GRAPHICS/Wserv/group' />
+	<unit unitID='OPENGLESDISPLAYPROPERTY' name='graphics_openglesdisplayproperty' bldFile='common/generic/graphics/OpenGLESDisplayProperty/group' />
+	<unit unitID='OPENGLSHEADERS' name='graphics_openglesheaders' bldFile='common/generic/graphics/OpenGLESHeaders/group' />
+	<unit unitID='OPENGLES9.X' name='graphics_opengles' bldFile='common/generic/graphics/OpenGLES/group/' />
+	<unit unitID='PDRSTORE' name='graphics_pdrstore' bldFile='common/generic/GRAPHICS/PDRSTORE/GROUP' />
+	<unit unitID='PRINTDRV' name='graphics_printdrv' bldFile='common/generic/GRAPHICS/PRINTDRV/GROUP' />
+	<unit unitID='ICULAYOUTENGINE' name='graphics_iculayoutengine' bldFile='common/generic/GRAPHICS/iculayoutengine/GROUP' />
+	<unit unitID='FBSERV' name='graphics_fbserv' bldFile='common/generic/GRAPHICS/Fbserv/GROUP' />
+	<unit unitID='FNTSTORE' name='graphics_fntstore' bldFile='common/generic/GRAPHICS/Fntstore/GROUP' />
+	<unit unitID='FREETYPE' name='graphics_freetype' bldFile='common/generic/GRAPHICS/Freetype/GROUP' />
+	<unit unitID='FONTS' name='graphics_fonts' bldFile='common/generic/GRAPHICS/Fonts/GROUP' />
+	<unit unitID='BITGDI' name='graphics_bitgdi' bldFile='common/generic/GRAPHICS/Bitgdi/GROUP' />
+	<unit unitID='GDI' name='graphics_gdi' bldFile='common/generic/GRAPHICS/GDI/GROUP' />
+	<unit unitID='PALETTE' name='graphics_palette' bldFile='common/generic/GRAPHICS/palette/group' />
+	<unit unitID='OPENVGHEADERS' name='graphics_openvgheaders' bldFile='common/generic/graphics/openvgheaders/group' />
+	<unit unitID='OPENVG' name='graphics_openvg' bldFile='common/generic/graphics/OpenVG/group/' />
+	<unit unitID='EGLVGHEADERS' name='graphics_eglheaders' bldFile='common/generic/graphics/eglheaders/group' />
+	<unit unitID='EGL' name='graphics_egl' bldFile='common/generic/graphics/egl/group/' />
+	<unit unitID='LOCATIONFRAMEWORK' name='lbs_locationframework' bldFile='common/generic/lbs/group' />
+	<unit unitID='LBSDATASOURCEPLUGINS' name='lbs_datasourceplugins' bldFile='common/generic/lbs/LbsLocDataSourcePlugins/group' />
+	<unit unitID='CONARC' name='app-framework_conarc' bldFile='common/generic/APP-FRAMEWORK/CONARC/GROUP' />
+	<unit unitID='CHTMLTOCRTCONVERTER' name='app-services_chtmltocrtconv' bldFile='common/generic/APP-SERVICES/CHTMLTOCRTCONV/GROUP' />
+	<unit unitID='CONVERT' name='app-engines_convert' bldFile='common/generic/APP-ENGINES/CONVERT/GROUP' />
+	<unit unitID='RICHTEXTTOHTMLCONV' name='app-services_richtexttohtmlconv' bldFile='common/generic/APP-SERVICES/RICHTEXTTOHTMLCONV/GROUP' />
+	<unit unitID='ETEXT' name='app-framework_etext' bldFile='common/generic/APP-FRAMEWORK/ETEXT/GROUP' />
+	<unit unitID='FORM' name='app-framework_form' bldFile='common/generic/APP-FRAMEWORK/FORM/GROUP' />
+	<unit unitID='ALARMSERVER' name='app-services_alarmserver' bldFile='common/generic/APP-SERVICES/AlarmServer/GROUP' />
+	<unit unitID='HLPMODEL' name='app-services_hlpmodel' bldFile='common/generic/APP-SERVICES/HLPMODEL/GROUP' />
+	<unit unitID='WORLDSERVER' name='app-services_worldserver' bldFile='common/generic/APP-SERVICES/WorldServer/GROUP' />
+	<unit unitID='TZ' name='app-services_tz' bldFile='common/generic/APP-SERVICES/tz/GROUP' />
+	<unit unitID='TIMEZONELOCALIZATION' name='app-services_timezonelocalization' bldFile='common/generic/APP-SERVICES/TimeZoneLocalization/GROUP' />
+	<unit unitID='TZLOCALIZATIONRSCFACTORY' name='app-services_tzlocalizationrscfactory' bldFile='common/generic/APP-SERVICES/TzLocalizationRscFactory/GROUP' />
+	<unit unitID='TZCOMPILER' name='app-services_tzcompiler' bldFile='common/generic/APP-SERVICES/tzcompiler/GROUP' />
+	<unit unitID='TZDB' name='app-services_tzdb' bldFile='common/generic/APP-SERVICES/tzdb/GROUP' />
+	<unit unitID='CONTENT_HANDLING' name='Content-Handling' bldFile='common/generic/Content-Handling/GROUP' />
+	<unit unitID='MSG_GMXML' name='messaging_gmxml' bldFile='common/generic/messaging/gmxml/group' />
+	<unit unitID='RECOGNISERS' name='application-protocols_recognisers' bldFile='common/generic/APPLICATION-PROTOCOLS/RECOGNISERS/GROUP' />
+	<unit unitID='PRINT' name='app-framework_print' bldFile='common/generic/APP-FRAMEWORK/PRINT/GROUP' />
+	<unit unitID='SECURESOFTWAREINSTALL' name='security_swi' bldFile='common/generic/SECURITY/SWI/GROUP' />
+	<unit unitID='SISINSTALLER' name='security_sisinstaller' bldFile='common/generic/SECURITY/SISInstaller/Group' />
+	<unit unitID='JAVAMIDLETINSTALLER' name='security_javaMIDletInstaller' bldFile='common/generic/SECURITY/JavaMIDletInstaller/Group' />
+	<unit unitID='CRYPTOTOKENS' name='security_cryptotokens' bldFile='common/generic/SECURITY/CRYPTOTOKENS/GROUP' />
+	<unit unitID='FILETOKENS' name='security_filetokens' bldFile='common/generic/security/filetokens/group' />
+	<unit unitID='CERTMAN' name='security_certman' bldFile='common/generic/SECURITY/Certman/GROUP' />
+	<unit unitID='TLS' name='networking_tls' bldFile='common/generic/networking/tls/group' />
+	<unit unitID='TLSPROVIDER' name='security_tlsprovider' bldFile='common/generic/security/tlsprovider/group' />
+	<unit unitID='IPSECV2' name='networking_ipsec' bldFile='common/generic/NETWORKING/ipsec/group' />
+	<unit unitID='HTTP' name='application-protocols_http2' bldFile='common/generic/application-protocols/http/protocol/group' />
+	<unit unitID='HTTP' name='application-protocols_http3' bldFile='common/generic/application-protocols/http/examples/testwebbrowser/group' />
+	<unit unitID='HTTP' name='application-protocols_http5' bldFile='common/generic/application-protocols/http/examples/pipeliningconfigfilter/group' />
+	<unit unitID='HTTP' name='application-protocols_http6' bldFile='common/generic/application-protocols/http/examples/cookies/group' />
+	<unit unitID='HTTP' name='application-protocols_http7' bldFile='common/generic/application-protocols/http/examples/uaprof/group' />
+	<unit unitID='HTTP' name='application-protocols_http9' bldFile='common/generic/application-protocols/http/examples/group' />
+	<unit unitID='HTTP' name='application-protocols_http10' bldFile='common/generic/application-protocols/http/transport/group' />
+	<unit unitID='HTTP' name='application-protocols_http12' bldFile='common/generic/application-protocols/http/framework/group' />
+	<unit unitID='WAPPUSH' name='wap-browser_wappush' bldFile='common/generic/WAP-BROWSER/WAPPUSH/GROUP' />
+	<unit unitID='FTP' name='networking_ftp_e' bldFile='common/generic/NETWORKING/ftp_e/group' />
+	<unit unitID='TELNET_E' name='networking_telnet_e' bldFile='common/generic/NETWORKING/TELNET_E/GROUP' />
+	<unit unitID='OBEX' name='obex' bldFile='common/generic/obex/group' />
+	<unit unitID='OBEX_EXTENSIONAPIS' name='obex_extensionapis' bldFile='common/generic/obex/obexextensionapis/group' />
+	<unit unitID='INETPROTUTIL' name='application-protocols_inetprotutil' bldFile='common/generic/APPLICATION-PROTOCOLS/INETPROTUTIL/GROUP' />
+	<unit unitID='INETURILIST' name='application-protocols_ineturilist' bldFile='common/generic/application-protocols/ineturilist/group' />
+	<unit unitID='BOOKMARK_SUPPORT' name='application-protocols_bookmarks' bldFile='common/generic/application-protocols/bookmarks/group' />
+	<unit unitID='BLUETOOTH_AVRCP' name='bluetooth_avrcp' bldFile='common/generic/bluetooth/latest/bluetooth/profiles/avrcp' />
+	<unit unitID='BLUETOOTH_ACCESSHOST' name='bluetooth_accesshost' bldFile='common/generic/bluetooth/latest/bluetooth/profiles/pbap/group' />
+	<unit unitID='BLUETOOTH_PAN' name='bluetooth_pan' bldFile='common/generic/bluetooth/latest/bluetooth/profiles/pan/group' />
+	<unit unitID='WAPMESSAGE' name='wap-stack_wapmessage' bldFile='common/generic/WAP-STACK/WAPMESSAGE/GROUP' />
+	<unit unitID='WAPSTACK' name='WAP Stack Wrapper' bldFile='common/generic/WAP-STACK/WAPSTACK/GROUP' />
+	<unit unitID='MROUTERSECURE' name='mRouterSecure' bldFile='common/generic/connectivity/mRouterSecure/group' />
+	<unit unitID='MROUTER-PLUGIN' name='mRouter-plugin' bldFile='common/generic/connectivity/BAL/Plugins/mRouter3/group' />
+	<unit unitID='PLPVARIANT' name='connectivity_legacy_plp_plpvariant' bldFile='common/generic/connectivity/legacy/plp/PLPVARIANT' />
+	<unit unitID='PLP' name='connectivity_legacy_plp_plpgrp' bldFile='common/generic/connectivity/legacy/plp/PLPGRP' />
+	<unit unitID='BRDCST' name='connectivity_legacy_brdcst' bldFile='common/generic/connectivity/legacy/BRDCST/GROUP' />
+	<unit unitID='MTPUSBSIC' name='mtp_usbsic' bldFile='common/generic/mtp/transports/usbsic/group' />
+	<unit unitID='MTPFRAMEWORK' name='mtp_framework' bldFile='common/generic/mtp/framework/group' />
+	<unit unitID='RTP' name='mm-protocols_rtp' bldFile='common/generic/mm-protocols/rtp/group' />
+	<!-- not including <unit unitID='SIP_COM' name='mm-protocols_sip_com' bldFile='common/generic/mm-protocols/sip/group' /> -->
+	<unit unitID='SIP_COM2' name='mm-protocols_SIP2_Com' bldFile='common/generic/mm-protocols/sip2/group' />
+	<!-- excluding <unit unitID='SIPCPR' name='mm-protocols_SIPCPR' bldFile='common/generic/mm-protocols/ConnProv/SIPCPR/group' /> -->
+	<!-- excluding <unit unitID='SIPDUMMYPRT' name='mm-protocols_SIPDummyPRT' bldFile='common/generic/mm-protocols/SipProvEngine/SIPDummyPRT/group' /> -->
+	<!-- excluding <unit unitID='SIPSTATEMACHINE' name='mm-protocols_SipStateMachine' bldFile='common/generic/mm-protocols/SipProvEngine/SipStateMachine/group' /> -->
+	<!-- excluding <unit unitID='SIPPARAMS' name='mm-protocols_SIPParams' bldFile='common/generic/mm-protocols/SubConnProv/SIPParams/group' /> -->
+	<!-- excluding <unit unitID='SIPSCPR' name='mm-protocols_SIPSCPR' bldFile='common/generic/mm-protocols/SubConnProv/SIPSCPR/group' /> -->
+	<unit unitID='GFXTRANSEFFECT' name='app-framework_gfxtranseffect' bldFile='common/generic/app-framework/gfxtranseffect/group' />
+	<unit unitID='EGUL' name='app-framework_egul' bldFile='common/generic/APP-FRAMEWORK/EGUL/GROUP' />
+	<unit unitID='NUMBERCONVERSION' name='app-framework_numberconversion' bldFile='common/generic/APP-FRAMEWORK/NumberConversion/group' />
+	<unit unitID='GRID' name='app-framework_grid' bldFile='common/generic/APP-FRAMEWORK/GRID/GROUP' />
+	<unit unitID='CLOCK' name='app-framework_clock' bldFile='common/generic/APP-FRAMEWORK/CLOCK/GROUP' />
+	<unit unitID='BMPANIM' name='app-framework_bmpanim' bldFile='common/generic/APP-FRAMEWORK/BmpAnim/GROUP' />
+	<unit unitID='ANIMATION' name='app-framework_animation' bldFile='common/generic/APP-FRAMEWORK/animation/group' />
+	<unit unitID='UIKON' name='app-framework_uikon' bldFile='common/generic/APP-FRAMEWORK/UIKON/GROUP' />
+	<unit unitID='UIKLAFGT' name='app-framework_uiklafgt' bldFile='common/generic/APP-FRAMEWORK/UIKLAFGT/GROUP' />
+	<unit unitID='CONE' name='app-framework_cone' bldFile='common/generic/APP-FRAMEWORK/CONE/GROUP' />
+	<unit unitID='FEPBASE' name='app-framework_fepbase' bldFile='common/generic/APP-FRAMEWORK/Fepbase/GROUP' />
+	<unit unitID='APPARC' name='app-framework_apparc' bldFile='common/generic/APP-FRAMEWORK/APPARC/GROUP' />
+	<unit unitID='VIEWSRV' name='app-framework_viewsrv' bldFile='common/generic/APP-FRAMEWORK/VIEWSRV/GROUP' />
+	<!-- excluding <unit unitID='CALINTERIMAPI' name='app-engines_calinterimapi' bldFile='common/generic/app-engines/calinterimapi/group' /> -->
+	<unit unitID='CALENDAR' name='app-engines_calendar' bldFile='common/generic/app-engines/calendar/group' />
+	<!-- excluding <unit unitID='AGNMODEL' name='app-engines_agnmodel' bldFile='common/generic/APP-ENGINES/AGNMODEL/GROUP' /> -->
+	<!-- excluding <unit unitID='AGNVERSIT' name='app-engines_agnversit' bldFile='common/generic/APP-ENGINES/AgnVersit/GROUP' /> -->
+	<unit unitID='AGNVERSIT2' name='app-engines_agnversit2' bldFile='common/generic/APP-ENGINES/AgnVersit2/GROUP' />
+	<!-- excluding <unit unitID='CNTMODEL' name='app-engines_cntmodel' bldFile='common/generic/APP-ENGINES/CNTMODEL/GROUP' /> -->
+	<unit unitID='CNTMODELSQL' name='app-engines_cntmodel' bldFile='common/generic/APP-ENGINES/CNTMODEL/GROUPSQL' />
+	<unit unitID='PHBKSYNC' name='telephony_phbksync' bldFile='common/generic/TELEPHONY/phbksync/group' />
+	<unit unitID='VERSIT' name='app-services_versit' bldFile='common/generic/APP-SERVICES/VERSIT/GROUP' />
+	<unit unitID='CALCON' name='app-services_calcon' bldFile='common/generic/APP-SERVICES/Calcon/GROUP' />
+	<unit unitID='BACKUPRESTORENOTIFICATION' name='app-services_BackupRestoreNotification' bldFile='common/generic/APP-SERVICES/BACKUPRESTORENOTIFICATION/GROUP' />
+	<unit unitID='DAMODEL' name='app-engines_damodel' bldFile='common/generic/APP-ENGINES/DAMODEL/GROUP' />
+	<unit unitID='SHENG' name='app-engines_sheng' bldFile='common/generic/APP-ENGINES/SHENG/GROUP' />
+	<unit unitID='WPENG' name='app-engines_wpeng' bldFile='common/generic/APP-ENGINES/WPENG/GROUP' />
+	<unit unitID='MSG_FRAMEWORK' name='messaging_framework' bldFile='common/generic/messaging/framework/group' />
+	<unit unitID='MSG_BIOMSG' name='messaging_biomsg' bldFile='common/generic/messaging/biomsg/group' />
+	<unit unitID='MSG_MMS_SETTINGS' name='messaging_mmssettings' bldFile='common/generic/messaging/mmssettings/group/' />
+	<unit unitID='MSG_BIOWATCHERSCDMA' name='messaging_biomsg_biowatchers_cdma' bldFile='common/generic/messaging/biomsg/biowatcherscdma/group' />
+	<unit unitID='MSG_SCHEDULEDSEND' name='messaging_schedulesend' bldFile='common/generic/messaging/schedulesend/group' />
+	<unit unitID='MSG_EMAIL' name='messaging_email' bldFile='common/generic/messaging/email/group' />
+	<unit unitID='MSG_IMAP' name='messaging_email_imap' bldFile='common/generic/messaging/email/imap/group' />
+	<unit unitID='MSG_OBEXMTM' name='messaging_obex' bldFile='common/generic/messaging/obex/group' />
+	<unit unitID='MSG_SMS8.1' name='messaging_sms_multimode' bldFile='common/generic/messaging/sms/multimode/group' />
+	<unit unitID='CONNECTIVITY' name='connectivity' bldFile='common/generic/CONNECTIVITY/GROUP' />
+	<unit unitID='SECUREBACKUPENGINE' name='connectivity_securebackupengine' bldFile='common/generic/connectivity/SecureBackupEngine/group' />
+	<unit unitID='MTPFILEDP' name='mtp_filedp' bldFile='common/generic/mtp/dataproviders/filedp/group' />
+	<unit unitID='SYNCMLCLIENT' name='SyncML' bldFile='common/generic/SyncML/Framework/Group' />
+	<unit unitID='SYNCMLDMCLIENT' name='SyncML_DM' bldFile='common/generic/SyncML/DevMan/Group' />
+	<unit unitID='DEVPROV_DEVMAN_FRAMEWORK' name='devprov_devman_framework' bldFile='common/generic/DEVPROV/DevMan/Group' />
+	<unit unitID='DEVPROV_CLIENTPROV_FRAMEWORK' name='devprov_clientprov_framework' bldFile='common/generic/DEVPROV/ClientProv/Group' />
+	<unit unitID='SYNCMLDSCLIENT' name='SyncML_DS' bldFile='common/generic/SyncML/DataSync/Group' />
+	<unit unitID='DEVPROV_DEVMAN_ADAPTERS' name='devprov_devman_adapters' bldFile='common/generic/DEVPROV/Adapters/DevMan/Group' />
+	<unit unitID='DEVPROV_CLIENTPROV_ADAPTERS' name='devprov_clientprov_adapters' bldFile='common/generic/DEVPROV/Adapters/ClientProv/Group' />
+	<unit unitID='MIDP2INSTALLER_9.2' name='MIDP2INSTALLER' bldFile='common/generic/j2me/systemamsV1_5' />
+	<unit unitID='MemSpy' name='graphics_memspy' bldFile='common/generic/graphics/testutils/memspy/group' />
+	<unit unitID='ASSABET_EKA2' name='base_assabet' bldFile='cedar/generic/BASE/ASSABET' />
+	<unit unitID='INTEGRATORAP_EKA2' name='base_integrator_integratorap' bldFile='cedar/generic/base/integrator/integratorap' />
+	<unit unitID='INTEGRATOR_CORE_EKA2' name='base_integrator_core_8.1b' bldFile='cedar/generic/base/integrator/core' />
+	<unit unitID='INTEGRATOR_CM920_EKA2' name='base_integrator_core_cm920' bldFile='cedar/generic/base/integrator/core/cm920' />
+	<unit unitID='INTEGRATOR_CM1136_EKA2' name='base_integrator_core_cm1136' bldFile='cedar/generic/base/integrator/core/cm1136' />
+	<unit unitID='INTEGRATOR_LMXX600_EKA2' name='base_integrator_logic_lmxx600' bldFile='cedar/generic/base/integrator/logic/lmxx600' />
+	<unit unitID='INTEGRATOR_LMNAND_EKA2' name='base_integrator_logic_lmnand' bldFile='cedar/generic/base/integrator/logic/lmnand' />
+	<unit unitID='UI_BENCH' name='graphics_ui_bench' bldFile='common/generic/graphics/ui_bench/group' />
+	<unit unitID='FAX' name='telephony_fax' bldFile='common/generic/TELEPHONY/FAX/GROUP' />
+	<unit unitID='DUMMY' name='additional_dummy' bldFile='common/generic/tools/cbr/dummy' />
+	<unit unitID='BASE_SDIOTESTS' name='base_sdiotests' bldFile='cedar/generic/base/e32utils/sdio' />
+	<unit unitID='E32UTILS_EKA2' name='base_e32utils' bldFile='cedar/generic/BASE/E32Utils/GROUP' />
+	<unit unitID='ERRORRESGT' name='app-framework_errorresgt' bldFile='common/generic/APP-FRAMEWORK/ERRORRESGT/GROUP' />
+	<unit unitID='GDITOOLS' name='graphics_gditools' bldFile='common/generic/GRAPHICS/GDITools/GROUP' />
+	<unit unitID='GDTRAN' name='GDTRAN' bldFile='common/generic/GRAPHICS/GDTran/GROUP' />
+	<unit unitID='INTEGRATIONTEST' name='networking_integrationtest' bldFile='common/generic/NETWORKING/Integrationtest/group' />
+	<unit unitID='MRPTEST' name='mtp_test' bldFile='common/generic/mtp/test/group' />
+	<unit unitID='BASEINTEGRATIONTEST' name='base_integration_test' bldFile='cedar/generic/base_integration_test/group' />
+	<unit unitID='MOBILEIP' name='networking_mobileip' bldFile='common/generic/networking/mobileip/group' />
+	<unit unitID='MSG_SENDAS2' name='messaging_sendas2' bldFile='common/generic/messaging/sendas2/group' />
+	<unit unitID='MSG_TEST' name='messaging_test' bldFile='common/generic/messaging/test/group' />
+	<unit unitID='MSG_URLHANDLER' name='messaging_urlhandler' bldFile='common/generic/messaging/urlhandler/group' />
+	<unit unitID='MVS_APP' name='multimedia_mvs_app' bldFile='common/generic/multimedia/mvs/application/group' />
+	<unit unitID='MVS_AGENTS' name='multimedia_mvs_agents' bldFile='common/generic/multimedia/mvs/agents/group' />
+	<unit unitID='TEMPLATE_EKA2' name='base_template' bldFile='cedar/generic/base/template/template_variant' />
+	<unit unitID='WAPBASE' name='wap-browser_wapbase' bldFile='common/generic/WAP-BROWSER/WAPBASE/GROUP' />
+	<unit unitID='WLDDATABASEKIT' name='WLDDATABASEKIT' bldFile='common/generic/APP-SERVICES/Wlddatabasekit/GROUP' />
+	<unit unitID='WLDTOOLS' name='app-services_wldtools' bldFile='common/generic/APP-SERVICES/WLDTOOLS/GROUP' />
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/envelope/allexport.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,788 @@
+<?xml version="1.0"?>
+
+<SystemDefinition name="MCL" schema="1.4.0">
+  
+  <systemModel>
+    <layer name="common">
+      <module name="allexports">
+        <component name="envelope">
+	<unit unitID="001" name="assabet" bldFile="cedar/generic/base/assabet" />
+<!--	<unit unitID="001" name="single" bldFile="cedar/generic/base/assabet/single" /> -->
+	<unit unitID="001" name="domain" bldFile="cedar/generic/base/domain/group" />
+	<unit unitID="001" name="e32" bldFile="cedar/generic/base/e32" />
+	<unit unitID="001" name="compsupp" bldFile="cedar/generic/base/e32/compsupp" />
+	<unit unitID="001" name="unistore2" bldFile="cedar/generic/base/e32/drivers/crashflash/unistore2" />
+	<unit unitID="001" name="sdcard3c" bldFile="cedar/generic/base/e32/drivers/pbus/mmc/sdcard/sdcard3c" />
+	<unit unitID="001" name="sdcard4c" bldFile="cedar/generic/base/e32/drivers/pbus/mmc/sdcard/sdcard4c" />
+	<unit unitID="001" name="unistore2" bldFile="cedar/generic/base/e32/drivers/unistore2" />
+	<unit unitID="001" name="e32utils" bldFile="cedar/generic/base/e32utils/group" />
+	<unit unitID="001" name="unistore2" bldFile="cedar/generic/base/e32utils/nandboot/nandloader/unistore2" />
+	<unit unitID="001" name="sdio" bldFile="cedar/generic/base/e32utils/sdio" />
+	<unit unitID="001" name="f32" bldFile="cedar/generic/base/f32/group" />
+	<unit unitID="001" name="hal" bldFile="cedar/generic/base/hal" />
+	<unit unitID="001" name="bootldr" bldFile="cedar/generic/base/integrator/bootldr" />
+	<unit unitID="001" name="core" bldFile="cedar/generic/base/integrator/core" />
+	<unit unitID="001" name="cm1136" bldFile="cedar/generic/base/integrator/core/cm1136" />
+	<unit unitID="001" name="cm920" bldFile="cedar/generic/base/integrator/core/cm920" />
+	<unit unitID="001" name="integratorap" bldFile="cedar/generic/base/integrator/integratorap" />
+	<unit unitID="001" name="lm_pana" bldFile="cedar/generic/base/integrator/logic/lm_pana" />
+	<unit unitID="001" name="lmnand" bldFile="cedar/generic/base/integrator/logic/lmnand" />
+	<unit unitID="001" name="lmnand2" bldFile="cedar/generic/base/integrator/logic/lmnand2" />
+	<unit unitID="001" name="lmxx600" bldFile="cedar/generic/base/integrator/logic/lmxx600" />
+	<unit unitID="001" name="lubbock" bldFile="cedar/generic/base/lubbock" />
+<!--	<unit unitID="001" name="single" bldFile="cedar/generic/base/lubbock/single" /> -->
+	<unit unitID="001" name="h2" bldFile="cedar/generic/base/omap/h2" />
+<!--	<unit unitID="001" name="single" bldFile="cedar/generic/base/omap/h2/single" /> -->
+	<unit unitID="001" name="sdio" bldFile="cedar/generic/base/omap/h2_restricted/sdio" />
+	<unit unitID="001" name="unistore2" bldFile="cedar/generic/base/omap/h2_restricted/unistore2" />
+	<unit unitID="001" name="h4" bldFile="cedar/generic/base/omap_hrp/h4" />
+	<unit unitID="001" name="h4_bootloader" bldFile="cedar/generic/base/omap_hrp/h4_bootloader" />
+	<unit unitID="001" name="h4_mebootloader" bldFile="cedar/generic/base/omap_hrp/h4_mebootloader" />
+	<unit unitID="001" name="sdio" bldFile="cedar/generic/base/omap_hrp/h4_restricted/sdio" />
+	<unit unitID="001" name="unistore2" bldFile="cedar/generic/base/omap_hrp/h4_restricted/unistore2" />
+	<unit unitID="001" name="template_variant" bldFile="cedar/generic/base/template/template_variant" />
+	<unit unitID="001" name="wins" bldFile="cedar/generic/base/wins" />
+	<unit unitID="001" name="mRouter" bldFile="cedar/generic/connectivity/mRouter/group" />
+	<unit unitID="001" name="mRouterSecure" bldFile="cedar/generic/connectivity/mRouterSecure/group" />
+	<unit unitID="001" name="e32tools" bldFile="cedar/generic/tools/e32tools/group" />
+	<unit unitID="001" name="redistribution" bldFile="cedar/generic/tools/redistribution" />
+	<unit unitID="001" name="romkit" bldFile="cedar/generic/tools/romkit/group" />
+	<unit unitID="001" name="agnmodel" bldFile="common/generic/app-engines/agnmodel/group" />
+	<unit unitID="001" name="agnversit" bldFile="common/generic/app-engines/agnversit/group" />
+	<unit unitID="001" name="agnversit2" bldFile="common/generic/app-engines/agnversit2/group" />
+	<unit unitID="001" name="calendar" bldFile="common/generic/app-engines/calendar/group" />
+	<unit unitID="001" name="CR-6BLC8W" bldFile="common/generic/app-engines/calendar/tsrc/Integration/CR-6BLC8W/group" />
+	<unit unitID="001" name="unit" bldFile="common/generic/app-engines/calendar/tsrc/unit/group" />
+	<unit unitID="001" name="CalInterimApi" bldFile="common/generic/app-engines/CalInterimApi/group" />
+	<unit unitID="001" name="CR-6BLC8W" bldFile="common/generic/app-engines/CalInterimApi/tsrc/Integration/CR-6BLC8W/group" />
+	<unit unitID="001" name="unit" bldFile="common/generic/app-engines/CalInterimApi/tsrc/unit/group" />
+	<unit unitID="001" name="chart" bldFile="common/generic/app-engines/chart/group" />
+	<unit unitID="001" name="cntmatchlog" bldFile="common/generic/app-engines/cntmodel/cntmatchlog/group" />
+	<unit unitID="001" name="cntmodel" bldFile="common/generic/app-engines/cntmodel/group" />
+	<unit unitID="001" name="groupsql" bldFile="common/generic/app-engines/cntmodel/groupsql" />
+	<unit unitID="001" name="cntmatchlog" bldFile="common/generic/app-engines/cntmodel/tsrc/cntmatchlog/group" />
+	<unit unitID="001" name="PerfFuncSuite" bldFile="common/generic/app-engines/cntmodel/tsrc/Integration/PerfFuncSuite/group" />
+	<unit unitID="001" name="groupsql" bldFile="common/generic/app-engines/cntmodel/tsrc/Integration/PerfFuncSuite/groupsql" />
+	<unit unitID="001" name="TCntPolice" bldFile="common/generic/app-engines/cntmodel/tsrc/Integration/TCntPolice/group" />
+	<unit unitID="001" name="groupsql" bldFile="common/generic/app-engines/cntmodel/tsrc/Integration/TCntPolice/groupsql" />
+	<unit unitID="001" name="convert" bldFile="common/generic/app-engines/convert/group" />
+	<unit unitID="001" name="damodel" bldFile="common/generic/app-engines/damodel/group" />
+	<unit unitID="001" name="sheng" bldFile="common/generic/app-engines/sheng/group" />
+	<unit unitID="001" name="wpeng" bldFile="common/generic/app-engines/wpeng/group" />
+	<unit unitID="001" name="animation" bldFile="common/generic/app-framework/animation/group" />
+	<unit unitID="001" name="apparc" bldFile="common/generic/app-framework/apparc/group" />
+	<unit unitID="001" name="bmpanim" bldFile="common/generic/app-framework/bmpanim/group" />
+	<unit unitID="001" name="clock" bldFile="common/generic/app-framework/clock/group" />
+	<unit unitID="001" name="conarc" bldFile="common/generic/app-framework/conarc/group" />
+	<unit unitID="001" name="cone" bldFile="common/generic/app-framework/cone/group" />
+	<unit unitID="001" name="egul" bldFile="common/generic/app-framework/egul/group" />
+	<unit unitID="001" name="emime" bldFile="common/generic/app-framework/emime/group" />
+	<unit unitID="001" name="errorresgt" bldFile="common/generic/app-framework/errorresgt/group" />
+	<unit unitID="001" name="etext" bldFile="common/generic/app-framework/etext/group" />
+	<unit unitID="001" name="fepbase" bldFile="common/generic/app-framework/fepbase/group" />
+	<unit unitID="001" name="form" bldFile="common/generic/app-framework/form/group" />
+	<unit unitID="001" name="GfxTransEffect" bldFile="common/generic/app-framework/GfxTransEffect/group" />
+	<unit unitID="001" name="grid" bldFile="common/generic/app-framework/grid/group" />
+	<unit unitID="001" name="numberconversion" bldFile="common/generic/app-framework/numberconversion/group" />
+	<unit unitID="001" name="print" bldFile="common/generic/app-framework/print/group" />
+	<unit unitID="001" name="SysStart" bldFile="common/generic/app-framework/SysStart/group" />
+	<unit unitID="001" name="uiklafGT" bldFile="common/generic/app-framework/uiklafGT/GROUP" />
+	<unit unitID="001" name="notifier1" bldFile="common/generic/app-framework/uikon/examples/notifier1/group" />
+	<unit unitID="001" name="uikon" bldFile="common/generic/app-framework/uikon/group" />
+	<unit unitID="001" name="viewsrv" bldFile="common/generic/app-framework/viewsrv/group" />
+	<unit unitID="001" name="word" bldFile="common/generic/app-framework/word/group" />
+	<unit unitID="001" name="alarmserver" bldFile="common/generic/app-services/alarmserver/Group" />
+	<unit unitID="001" name="BackupRestoreNotification" bldFile="common/generic/app-services/BackupRestoreNotification/group" />
+	<unit unitID="001" name="calcon" bldFile="common/generic/app-services/calcon/group" />
+	<unit unitID="001" name="chtmltocrtconv" bldFile="common/generic/app-services/chtmltocrtconv/group" />
+	<unit unitID="001" name="hlpmodel" bldFile="common/generic/app-services/hlpmodel/group" />
+	<unit unitID="001" name="richtexttohtmlconv" bldFile="common/generic/app-services/richtexttohtmlconv/Group" />
+	<unit unitID="001" name="TimeZoneLocalization" bldFile="common/generic/app-services/TimeZoneLocalization/group" />
+	<unit unitID="001" name="tz" bldFile="common/generic/app-services/tz/group" />
+	<unit unitID="001" name="tzcompiler" bldFile="common/generic/app-services/tzcompiler/group" />
+	<unit unitID="001" name="tzdb" bldFile="common/generic/app-services/tzdb/group" />
+	<unit unitID="001" name="TzLocalizationRscFactory" bldFile="common/generic/app-services/TzLocalizationRscFactory/group" />
+	<unit unitID="001" name="versit" bldFile="common/generic/app-services/versit/group" />
+	<unit unitID="001" name="wlddatabasekit" bldFile="common/generic/app-services/wlddatabasekit/group" />
+	<unit unitID="001" name="wldtools" bldFile="common/generic/app-services/wldtools/group" />
+	<unit unitID="001" name="worldserver" bldFile="common/generic/app-services/worldserver/group" />
+	<unit unitID="001" name="bookmarks" bldFile="common/generic/application-protocols/bookmarks/group" />
+	<unit unitID="001" name="cookies" bldFile="common/generic/application-protocols/http/examples/cookies/group" />
+	<unit unitID="001" name="PipeliningConfigFilter" bldFile="common/generic/application-protocols/http/examples/PipeliningConfigFilter/Group" />
+	<unit unitID="001" name="uaprof" bldFile="common/generic/application-protocols/http/examples/uaprof/group" />
+	<unit unitID="001" name="http" bldFile="common/generic/application-protocols/http/group" />
+	<unit unitID="001" name="inetprotutil" bldFile="common/generic/application-protocols/inetprotutil/group" />
+	<unit unitID="001" name="ineturilist" bldFile="common/generic/application-protocols/ineturilist/group" />
+	<unit unitID="001" name="recognisers" bldFile="common/generic/application-protocols/recognisers/group" />
+	<unit unitID="001" name="ongoing" bldFile="common/generic/base/loce32/ongoing" />
+	<unit unitID="001" name="mmpfiles" bldFile="common/generic/base/loce32/ongoing/mmpfiles" />
+	<unit unitID="001" name="commdbshim" bldFile="common/generic/comms-infras/commdb/commdbshim/group" />
+	<unit unitID="001" name="commdb" bldFile="common/generic/comms-infras/commdb/group" />
+	<unit unitID="001" name="te_cdma2000Settings" bldFile="common/generic/comms-infras/commdb/ts_commdb/te_cdma2000Settings/group" />
+	<unit unitID="001" name="defaultcommdb" bldFile="common/generic/comms-infras/commsdat/defaultcommdb/group" />
+	<unit unitID="001" name="commsdat" bldFile="common/generic/comms-infras/commsdat/group" />
+	<unit unitID="001" name="installdefaultcommdb" bldFile="common/generic/comms-infras/commsDat/installdefaultcommdb/group" />
+	<unit unitID="001" name="ced" bldFile="common/generic/comms-infras/commsdat/Tools/ced/group" />
+	<unit unitID="001" name="ceddump" bldFile="common/generic/comms-infras/commsdat/Tools/ceddump/group" />
+	<unit unitID="001" name="cfg2xml" bldFile="common/generic/comms-infras/commsdat/Tools/cfg2xml/group" />
+	<unit unitID="001" name="hidden_readonly_support" bldFile="common/generic/comms-infras/commsdat/Tools/cfg2xml/hidden_readonly_support/group" />
+	<unit unitID="001" name="commsdebugutility" bldFile="Common/Generic/comms-infras/commsdebugutility/group" />
+	<unit unitID="001" name="commsfw" bldFile="Common/Generic/comms-infras/commsfw/group" />
+	<unit unitID="001" name="te_Commsfw_transport" bldFile="common/generic/comms-infras/commsfw/te_Commsfw_transport/group" />
+	<unit unitID="001" name="Elements" bldFile="common/generic/comms-infras/Elements/group" />
+	<unit unitID="001" name="Helpers" bldFile="common/generic/comms-infras/Elements/Helpers/group" />
+	<unit unitID="001" name="MsgParser" bldFile="common/generic/comms-infras/Elements/MsgParser/group" />
+	<unit unitID="001" name="NetInterfaces" bldFile="common/generic/comms-infras/Elements/NetInterfaces/group" />
+	<unit unitID="001" name="NetMessages" bldFile="common/generic/comms-infras/Elements/NetMessages/group" />
+	<unit unitID="001" name="NetMeta" bldFile="common/generic/comms-infras/Elements/NetMeta/group" />
+	<unit unitID="001" name="NetSubscribe" bldFile="common/generic/comms-infras/Elements/NetSubscribe/group" />
+	<unit unitID="001" name="ResponseMsg" bldFile="common/generic/comms-infras/Elements/ResponseMsg/group" />
+	<unit unitID="001" name="version1" bldFile="common/generic/comms-infras/Elements/ResponseMsg/version1/group" />
+	<unit unitID="001" name="StartServer" bldFile="common/generic/comms-infras/Elements/StartServer/group" />
+	<unit unitID="001" name="StateMachine" bldFile="common/generic/comms-infras/Elements/StateMachine/group" />
+	<unit unitID="001" name="api_ext" bldFile="common/generic/comms-infras/esock/api_ext/group" />
+	<unit unitID="001" name="commsdataobjects" bldFile="common/generic/comms-infras/esock/commsdataobjects/group" />
+	<unit unitID="001" name="compatibility_headers" bldFile="common/generic/comms-infras/esock/compatibility_headers/group" />
+	<unit unitID="001" name="CoreProviders" bldFile="common/generic/comms-infras/ESock/CoreProviders/group" />
+	<unit unitID="001" name="MessageInterceptRegister" bldFile="common/generic/comms-infras/esock/debug/MessageInterceptRegister/group" />
+	<unit unitID="001" name="esock_internal_messages" bldFile="common/generic/comms-infras/esock/esock_internal_messages/group" />
+	<unit unitID="001" name="esock_messages" bldFile="common/generic/comms-infras/esock/esock_messages/group" />
+	<unit unitID="001" name="ETC" bldFile="common/generic/comms-infras/esock/ETC" />
+	<unit unitID="001" name="esock" bldFile="common/generic/comms-infras/esock/group" />
+	<unit unitID="001" name="MobilityCoreProviders" bldFile="common/generic/comms-infras/esock/MobilityCoreProviders/group" />
+	<unit unitID="001" name="simpleselectorbase" bldFile="common/generic/comms-infras/esock/simpleselectorbase/group" />
+	<unit unitID="001" name="commsdataobjects" bldFile="common/generic/comms-infras/esock/version2/commsdataobjects/group" />
+	<unit unitID="001" name="esock_messages" bldFile="common/generic/comms-infras/esock/version2/esock_messages/group" />
+	<unit unitID="001" name="ETC" bldFile="common/generic/comms-infras/esock/version2/ETC" />
+	<unit unitID="001" name="version2" bldFile="common/generic/comms-infras/esock/version2/group" />
+	<unit unitID="001" name="flogger" bldFile="common/generic/comms-infras/flogger/group" />
+	<unit unitID="001" name="mbufmgr" bldFile="Common/Generic/comms-infras/mbufmgr/group" />
+	<unit unitID="001" name="nifman" bldFile="common/generic/comms-infras/nifman/group" />
+	<unit unitID="001" name="netcfgext" bldFile="common/generic/comms-infras/nifman/netcfgext/group" />
+	<unit unitID="001" name="version1" bldFile="common/generic/comms-infras/nifman/version1/group" />
+	<unit unitID="001" name="shimcpr" bldFile="common/generic/comms-infras/nifman/version1/shimcpr/group" />
+	<unit unitID="001" name="configurator" bldFile="common/generic/comms-infras/rootserver/configurator/group" />
+	<unit unitID="001" name="ETC" bldFile="common/generic/comms-infras/rootserver/ETC" />
+	<unit unitID="001" name="rootserver" bldFile="Common/Generic/comms-infras/rootserver/group" />
+	<unit unitID="001" name="util" bldFile="common/generic/comms-infras/rootserver/Te_Configurator/util/group" />
+	<unit unitID="001" name="BAL" bldFile="common/generic/connectivity/BAL/Group" />
+	<unit unitID="001" name="mRouter3" bldFile="common/generic/connectivity/BAL/Plugins/mRouter3/group" />
+	<unit unitID="001" name="NTRAS" bldFile="common/generic/connectivity/BAL/Plugins/NTRAS/group" />
+	<unit unitID="001" name="FreeSpaceChecker" bldFile="common/generic/connectivity/FreeSpaceChecker/group" />
+	<unit unitID="001" name="connectivity" bldFile="common/generic/connectivity/group" />
+	<unit unitID="001" name="brdcst" bldFile="common/generic/connectivity/legacy/brdcst/group" />
+	<unit unitID="001" name="plpgrp" bldFile="common/generic/connectivity/legacy/PLP/plpgrp" />
+	<unit unitID="001" name="plpremlink" bldFile="common/generic/connectivity/legacy/PLP/plpremlink" />
+	<unit unitID="001" name="PLPVARIANT" bldFile="common/generic/connectivity/legacy/PLP/PLPVARIANT" />
+	<unit unitID="001" name="BT" bldFile="common/generic/connectivity/mRouterSecure/Bearers/BT/group" />
+	<unit unitID="001" name="Emulator" bldFile="common/generic/connectivity/mRouterSecure/Bearers/Emulator/group" />
+	<unit unitID="001" name="IR" bldFile="common/generic/connectivity/mRouterSecure/Bearers/IR/group" />
+	<unit unitID="001" name="Serial" bldFile="common/generic/connectivity/mRouterSecure/Bearers/Serial/group" />
+	<unit unitID="001" name="USB" bldFile="common/generic/connectivity/mRouterSecure/Bearers/USB/group" />
+	<unit unitID="001" name="SockComm" bldFile="common/generic/connectivity/mRouterSecure/CSY/SockComm/group" />
+	<unit unitID="001" name="WinsCsy" bldFile="common/generic/connectivity/mRouterSecure/CSY/WinsCsy/group" />
+	<unit unitID="001" name="mRouterSecure" bldFile="common/generic/connectivity/mRouterSecure/group" />
+	<unit unitID="001" name="mRouterAgent" bldFile="common/generic/connectivity/mRouterSecure/mRouterAgent/group" />
+	<unit unitID="001" name="mRouterClient" bldFile="common/generic/connectivity/mRouterSecure/mRouterClient/group" />
+	<unit unitID="001" name="SBSocketServer" bldFile="common/generic/connectivity/SBSocketServer/group" />
+	<unit unitID="001" name="SCRemoteFileServer" bldFile="common/generic/connectivity/SCRemoteFileServer/group" />
+	<unit unitID="001" name="SecureBackupEngine" bldFile="common/generic/connectivity/SecureBackupEngine/group" />
+	<unit unitID="001" name="ServerSocket" bldFile="common/generic/connectivity/ServerSocket/group" />
+	<unit unitID="001" name="ServiceBroker" bldFile="common/generic/connectivity/ServiceBroker/group" />
+	<unit unitID="001" name="SWInstallServer" bldFile="common/generic/connectivity/SWInstallServer/group" />
+	<unit unitID="001" name="SyncMLInitServer" bldFile="common/generic/connectivity/SyncMLInitServer/group" />
+	<unit unitID="001" name="CHFHelloWorld" bldFile="common/generic/Content-Handling/Framework/example/CHFHelloWorld" />
+	<unit unitID="001" name="Framework" bldFile="common/generic/content-handling/Framework/group" />
+	<unit unitID="001" name="content-handling" bldFile="common/generic/content-handling/Group" />
+	<unit unitID="001" name="ClientProv" bldFile="common/generic/DevProv/Adapters/ClientProv/group" />
+	<unit unitID="001" name="AppMgt" bldFile="common/generic/DevProv/Adapters/DevMan/AppMgt" />
+	<unit unitID="001" name="DevMan" bldFile="common/generic/DevProv/Adapters/DevMan/Group" />
+	<unit unitID="001" name="Shared" bldFile="common/generic/DevProv/Adapters/DevMan/Shared" />
+	<unit unitID="001" name="CPAgent" bldFile="common/generic/DevProv/ClientProv/CPAgent" />
+	<unit unitID="001" name="CpDocRecognizer" bldFile="common/generic/DevProv/ClientProv/CpDocRecognizer" />
+	<unit unitID="001" name="CpFileHandler" bldFile="common/generic/DevProv/ClientProv/CpFileHandler" />
+	<unit unitID="001" name="CpFileWatcher" bldFile="common/generic/DevProv/ClientProv/CpFileWatcher" />
+	<unit unitID="001" name="CpInputHistory" bldFile="common/generic/DevProv/ClientProv/CpInputHistory" />
+	<unit unitID="001" name="CpScDocReader" bldFile="common/generic/DevProv/ClientProv/CpScDocReader" />
+	<unit unitID="001" name="CpWapPushPlugin" bldFile="common/generic/DevProv/ClientProv/CpWapPushPlugin" />
+	<unit unitID="001" name="ClientProv" bldFile="common/generic/DevProv/ClientProv/Group" />
+	<unit unitID="001" name="ProvDoc" bldFile="common/generic/DevProv/ClientProv/ProvDoc" />
+	<unit unitID="001" name="UserAgent" bldFile="common/generic/DevProv/ClientProv/UserAgent" />
+	<unit unitID="001" name="Utils" bldFile="common/generic/DevProv/ClientProv/Utils" />
+	<unit unitID="001" name="dmtree" bldFile="common/generic/DevProv/DevMan/dmtree/group" />
+	<unit unitID="001" name="fota" bldFile="common/generic/devprov/DevMan/fota/group" />
+	<unit unitID="001" name="DevMan" bldFile="common/generic/DevProv/DevMan/group" />
+	<unit unitID="001" name="HostServerClient" bldFile="common/generic/DevProv/DevMan/HostServerClient/group" />
+	<unit unitID="001" name="RefHostServer" bldFile="common/generic/DevProv/DevMan/RefHostServer/group" />
+	<unit unitID="001" name="tools" bldFile="common/generic/DevProv/DevMan/tools/group" />
+	<unit unitID="001" name="DevProv" bldFile="common/generic/DevProv/Group" />
+	<unit unitID="001" name="bitgdi" bldFile="common/generic/graphics/bitgdi/group" />
+	<unit unitID="001" name="egl" bldFile="common/generic/graphics/egl/group" />
+	<unit unitID="001" name="symbian" bldFile="common/generic/graphics/egl/implementation/products/egl/1.0/build/symbian/group" />
+	<unit unitID="001" name="eglheaders" bldFile="common/generic/graphics/eglheaders/group" />
+	<unit unitID="001" name="fbserv" bldFile="common/generic/graphics/fbserv/group" />
+	<unit unitID="001" name="fntstore" bldFile="common/generic/graphics/fntstore/group" />
+	<unit unitID="001" name="fonts" bldFile="common/generic/graphics/fonts/group" />
+	<unit unitID="001" name="freetype" bldFile="common/generic/graphics/freetype/group" />
+	<unit unitID="001" name="gdi" bldFile="common/generic/graphics/gdi/group" />
+	<unit unitID="001" name="gditools" bldFile="common/generic/graphics/gditools/group" />
+	<unit unitID="001" name="gdtran" bldFile="common/generic/graphics/gdtran/group" />
+	<unit unitID="001" name="IcuLayoutEngine" bldFile="common/generic/graphics/IcuLayoutEngine/group" />
+	<unit unitID="001" name="OpenGLES" bldFile="common/generic/graphics/OpenGLES/group" />
+	<unit unitID="001" name="OpenGLESDisplayProperty" bldFile="common/generic/graphics/OpenGLESDisplayProperty/group" />
+	<unit unitID="001" name="OpenGLESHeaders" bldFile="common/generic/graphics/OpenGLESHeaders/group" />
+	<unit unitID="001" name="opengles_stub" bldFile="common/generic/graphics/openglesheaders/group/opengles_stub" />
+	<unit unitID="001" name="OpenVG" bldFile="common/generic/graphics/OpenVG/group" />
+	<unit unitID="001" name="symbian" bldFile="common/generic/graphics/OpenVG/implementation/products/openvg/1.2/openvg/build/symbian/group" />
+	<unit unitID="001" name="symbian" bldFile="common/generic/graphics/OpenVG/implementation/products/openvg/1.2/samples/build/symbian/group" />
+	<unit unitID="001" name="openvgheaders" bldFile="common/generic/graphics/openvgheaders/group" />
+	<unit unitID="001" name="palette" bldFile="common/generic/graphics/palette/group" />
+	<unit unitID="001" name="pdrstore" bldFile="common/generic/graphics/pdrstore/group" />
+	<unit unitID="001" name="printdrv" bldFile="common/generic/graphics/printdrv/group" />
+	<unit unitID="001" name="screendriver" bldFile="common/generic/graphics/screendriver/group" />
+	<unit unitID="001" name="ui_bench" bldFile="common/generic/graphics/ui_bench/group" />
+	<unit unitID="001" name="wserv" bldFile="common/generic/graphics/wserv/group" />
+	<unit unitID="001" name="config" bldFile="common/generic/infra-red/config" />
+	<unit unitID="001" name="irda" bldFile="common/generic/infra-red/irda" />
+	<unit unitID="001" name="irda" bldFile="common/generic/infra-red/irda/group" />
+	<unit unitID="001" name="irdialbca" bldFile="common/generic/infra-red/irda/irdialbca/group" />
+	<unit unitID="001" name="GpsClockManual" bldFile="common/generic/LBS/GPSClock/GpsClockManual/group" />
+	<unit unitID="001" name="GpsSetClock" bldFile="common/generic/LBS/GPSClock/GpsSetClock/group" />
+	<unit unitID="001" name="GPSClock" bldFile="common/generic/LBS/GPSClock/group" />
+	<unit unitID="001" name="LBS" bldFile="common/generic/LBS/group" />
+	<unit unitID="001" name="LbsAdmin" bldFile="common/generic/LBS/LbsAdmin/group" />
+	<unit unitID="001" name="LbsAGPSManager" bldFile="common/generic/LBS/LbsAGPSManager/group" />
+	<unit unitID="001" name="LbsAssistanceData" bldFile="common/generic/LBS/LbsAssistanceData/group" />
+	<unit unitID="001" name="LbsAssistanceDataSourceInterface" bldFile="common/generic/LBS/LbsAssistanceDataSourceInterface/group" />
+	<unit unitID="001" name="LBSClient" bldFile="common/generic/LBS/LBSClient/group" />
+	<unit unitID="001" name="LbsApi" bldFile="common/generic/LBS/LBSClient/LbsApi/group" />
+	<unit unitID="001" name="LbsDebug" bldFile="common/generic/LBS/LbsDebug/group" />
+	<unit unitID="001" name="LbsInternalApi" bldFile="common/generic/LBS/LbsInternalApi/group" />
+	<unit unitID="001" name="LbsLocCommon" bldFile="common/generic/LBS/LbsLocCommon/group" />
+	<unit unitID="001" name="ServerFramework" bldFile="common/generic/LBS/LbsLocCommon/ServerFramework/group" />
+	<unit unitID="001" name="LbsLocDataSource" bldFile="common/generic/LBS/LbsLocDataSource/group" />
+	<unit unitID="001" name="LbsLocDataSourcePlugins" bldFile="common/generic/LBS/LbsLocDataSourcePlugins/group" />
+	<unit unitID="001" name="sirf" bldFile="common/generic/LBS/LbsLocDataSourcePlugins/sirf/group" />
+	<unit unitID="001" name="LbsLocServer" bldFile="common/generic/LBS/LbsLocServer/group" />
+	<unit unitID="001" name="te_LbsLocServer" bldFile="common/generic/LBS/lbslocserver/te_LbsLocServer/group" />
+	<unit unitID="001" name="LbsLocUtils" bldFile="common/generic/LBS/LbsLocUtils/group" />
+	<unit unitID="001" name="LbsLogging" bldFile="common/generic/LBS/LbsLogging/group" />
+	<unit unitID="001" name="te_LbsLogging" bldFile="common/generic/LBS/LbsLogging/te_LbsLogging/group" />
+	<unit unitID="001" name="LbsMaths" bldFile="common/generic/LBS/LbsMaths/group" />
+	<unit unitID="001" name="te_lbsmaths" bldFile="common/generic/LBS/LbsMaths/te_lbsmaths/group" />
+	<unit unitID="001" name="LbsNetGateway" bldFile="common/generic/LBS/LbsNetGateway/group" />
+	<unit unitID="001" name="LbsNetInternalApi" bldFile="common/generic/LBS/LbsNetInternalApi/group" />
+	<unit unitID="001" name="LbsNetProtocol" bldFile="common/generic/LBS/LbsNetProtocol/group" />
+	<unit unitID="001" name="LbsNetSim" bldFile="common/generic/LBS/LbsNetSim/group" />
+	<unit unitID="001" name="LbsNetworkLocationManager" bldFile="common/generic/LBS/LbsNetworkLocationManager/group" />
+	<unit unitID="001" name="t_lbsDummygateway" bldFile="common/generic/LBS/LbsNetworkLocationManager/t_lbsDummygateway/group" />
+	<unit unitID="001" name="te_LbsNetworkLocationManager" bldFile="common/generic/LBS/LbsNetworkLocationManager/te_LbsNetworkLocationManager/group" />
+	<unit unitID="001" name="LbsNetworkRequestHandler" bldFile="common/generic/LBS/LbsNetworkRequestHandler/group" />
+	<unit unitID="001" name="LbsPartnerCommon" bldFile="common/generic/LBS/LbsPartnerCommon/group" />
+	<unit unitID="001" name="LBSPrivacyNotification" bldFile="common/generic/LBS/LBSPrivacyNotification/group" />
+	<unit unitID="001" name="LbsPrivacyController" bldFile="common/generic/LBS/LBSPrivacyNotification/LbsPrivacyController/group" />
+	<unit unitID="001" name="LbsPrivacyExtNotifiers" bldFile="common/generic/LBS/LBSPrivacyNotification/LbsPrivacyExtNotifiers/group" />
+	<unit unitID="001" name="LbsPrivacyNotifier" bldFile="common/generic/LBS/LBSPrivacyNotification/LbsPrivacyNotifier/group" />
+	<unit unitID="001" name="LbsProtocolModule" bldFile="common/generic/LBS/LbsProtocolModule/group" />
+	<unit unitID="001" name="LbsQualityProfileApi" bldFile="common/generic/LBS/LbsQualityProfileApi/group" />
+	<unit unitID="001" name="lbsroot" bldFile="common/generic/LBS/lbsroot/group" />
+	<unit unitID="001" name="lbsrootapi" bldFile="common/generic/LBS/lbsrootapi/group" />
+	<unit unitID="001" name="LbsX3P" bldFile="common/generic/LBS/LbsX3P/group" />
+	<unit unitID="001" name="LbsX3PApi" bldFile="common/generic/LBS/LbsX3P/LbsX3PApi/group" />
+	<unit unitID="001" name="suplasn1" bldFile="common/generic/LBS/suplasn1/group" />
+	<unit unitID="001" name="BDB" bldFile="common/generic/messaging/biomsg/BDB" />
+	<unit unitID="001" name="BIFU" bldFile="common/generic/messaging/biomsg/BIFU" />
+	<unit unitID="001" name="BIOC" bldFile="common/generic/messaging/biomsg/BIOC" />
+	<unit unitID="001" name="BIOS" bldFile="common/generic/messaging/biomsg/BIOS" />
+	<unit unitID="001" name="BioWatchers" bldFile="common/generic/messaging/biomsg/BioWatchers" />
+	<unit unitID="001" name="CdmaNbsWatcher" bldFile="common/generic/messaging/biomsg/BioWatchersCdma/CdmaNbsWatcher/Group" />
+	<unit unitID="001" name="CdmaSocketWatcher" bldFile="common/generic/messaging/biomsg/BioWatchersCdma/CdmaSocketWatcher/Group" />
+	<unit unitID="001" name="CdmaWatcherVMN" bldFile="common/generic/messaging/biomsg/BioWatchersCdma/CdmaWatcherVMN/Group" />
+	<unit unitID="001" name="CdmaWatcherWEMT" bldFile="common/generic/messaging/biomsg/BioWatchersCdma/CdmaWatcherWEMT/Group" />
+	<unit unitID="001" name="CdmaWatcherWMT" bldFile="common/generic/messaging/biomsg/BioWatchersCdma/CdmaWatcherWMT/Group" />
+	<unit unitID="001" name="CdmaWatcherWPT" bldFile="common/generic/messaging/biomsg/BioWatchersCdma/CdmaWatcherWPT/Group" />
+	<unit unitID="001" name="BioWatchersCdma" bldFile="common/generic/messaging/biomsg/BioWatchersCdma/Group" />
+	<unit unitID="001" name="BITS" bldFile="common/generic/messaging/biomsg/BITS" />
+	<unit unitID="001" name="BIUT" bldFile="common/generic/messaging/biomsg/BIUT" />
+	<unit unitID="001" name="cbcp" bldFile="common/generic/messaging/biomsg/cbcp" />
+	<unit unitID="001" name="enp" bldFile="common/generic/messaging/biomsg/enp" />
+	<unit unitID="001" name="gfp" bldFile="common/generic/messaging/biomsg/gfp" />
+	<unit unitID="001" name="biomsg" bldFile="common/generic/messaging/biomsg/group" />
+	<unit unitID="001" name="iacp" bldFile="common/generic/messaging/biomsg/iacp" />
+	<unit unitID="001" name="Rom" bldFile="common/generic/messaging/biomsg/Rom" />
+	<unit unitID="001" name="T_BIOMSG" bldFile="common/generic/messaging/biomsg/T_BIOMSG/Group" />
+	<unit unitID="001" name="wapp" bldFile="common/generic/messaging/biomsg/wapp" />
+	<unit unitID="001" name="autosend" bldFile="common/generic/messaging/email/autosend/group" />
+	<unit unitID="001" name="clientmtms" bldFile="common/generic/messaging/email/clientmtms/group" />
+	<unit unitID="001" name="email" bldFile="common/generic/messaging/email/group" />
+	<unit unitID="001" name="imap" bldFile="common/generic/messaging/email/imap/group" />
+	<unit unitID="001" name="imapmailstore" bldFile="common/generic/messaging/email/imap/imapmailstore/group" />
+	<unit unitID="001" name="imapofflinecontrol" bldFile="common/generic/messaging/email/imap/imapofflinecontrol/group" />
+	<unit unitID="001" name="imapprotocolcontroller" bldFile="common/generic/messaging/email/imap/imapprotocolcontroller/group" />
+	<unit unitID="001" name="imapservermtm" bldFile="common/generic/messaging/email/imap/imapservermtm/group" />
+	<unit unitID="001" name="imapsession" bldFile="common/generic/messaging/email/imap/imapsession/group" />
+	<unit unitID="001" name="imapsettings" bldFile="common/generic/messaging/email/imap/imapsettings/group" />
+	<unit unitID="001" name="imapsyncmanager" bldFile="common/generic/messaging/email/imap/imapsyncmanager/group" />
+	<unit unitID="001" name="imaptransporthandler" bldFile="common/generic/messaging/email/imap/imaptransporthandler/group" />
+	<unit unitID="001" name="imaputils" bldFile="common/generic/messaging/email/imap/imaputils/group" />
+	<unit unitID="001" name="imapservermtm" bldFile="common/generic/messaging/email/imapservermtm/group" />
+	<unit unitID="001" name="popservermtm" bldFile="common/generic/messaging/email/popservermtm/group" />
+	<unit unitID="001" name="servermtmutils" bldFile="common/generic/messaging/email/servermtmutils/group" />
+	<unit unitID="001" name="smtpservermtm" bldFile="common/generic/messaging/email/smtpservermtm/group" />
+	<unit unitID="001" name="framework" bldFile="common/generic/messaging/framework/group" />
+	<unit unitID="001" name="mtmbase" bldFile="common/generic/messaging/framework/mtmbase/group" />
+	<unit unitID="001" name="server" bldFile="common/generic/messaging/framework/server/group" />
+	<unit unitID="001" name="serverexe" bldFile="common/generic/messaging/framework/serverexe/group" />
+	<unit unitID="001" name="watcher" bldFile="common/generic/messaging/framework/watcher/group" />
+	<unit unitID="001" name="GMXML" bldFile="common/generic/messaging/GMXML/GROUP" />
+	<unit unitID="001" name="Rom" bldFile="common/generic/messaging/GMXML/Rom" />
+	<unit unitID="001" name="SMILdtd" bldFile="common/generic/messaging/GMXML/SMILdtd/GROUP" />
+	<unit unitID="001" name="XMLDom" bldFile="common/generic/messaging/GMXML/XMLDom/GROUP" />
+	<unit unitID="001" name="XMLParser" bldFile="common/generic/messaging/GMXML/XMLParser/GROUP" />
+	<unit unitID="001" name="messaging" bldFile="common/generic/messaging/group" />
+	<unit unitID="001" name="ETC" bldFile="common/generic/messaging/mmssettings/ETC" />
+	<unit unitID="001" name="mmssettings" bldFile="common/generic/messaging/mmssettings/group" />
+	<unit unitID="001" name="btclient" bldFile="common/generic/messaging/obex/btmtm/btclient/group" />
+	<unit unitID="001" name="btserver" bldFile="common/generic/messaging/obex/btmtm/btserver/group" />
+	<unit unitID="001" name="obex" bldFile="common/generic/messaging/obex/Group" />
+	<unit unitID="001" name="irclient" bldFile="common/generic/messaging/obex/irmtm/irclient/group" />
+	<unit unitID="001" name="irserver" bldFile="common/generic/messaging/obex/irmtm/irserver/group" />
+	<unit unitID="001" name="obexclient" bldFile="common/generic/messaging/obex/obexmtm/obexclient/group" />
+	<unit unitID="001" name="obexserver" bldFile="common/generic/messaging/obex/obexmtm/obexserver/group" />
+	<unit unitID="001" name="obexutil" bldFile="common/generic/messaging/obex/obexmtm/obexutil/group" />
+	<unit unitID="001" name="Rom" bldFile="common/generic/messaging/obex/Rom" />
+	<unit unitID="001" name="TObexMTM" bldFile="common/generic/messaging/obex/TObexMTM/GROUP" />
+	<unit unitID="001" name="sdp" bldFile="common/generic/Messaging/obex/TObexMTM/obexstub/BluetoothSdpStub/sdp" />
+	<unit unitID="001" name="IrobexStub" bldFile="common/generic/messaging/obex/TObexMTM/obexstub/IrobexStub/group" />
+	<unit unitID="001" name="schedulesend" bldFile="common/generic/messaging/schedulesend/group" />
+	<unit unitID="001" name="schedulesendexe" bldFile="common/generic/messaging/schedulesend/schedulesendexe/group" />
+	<unit unitID="001" name="schedulesendmtm" bldFile="common/generic/messaging/schedulesend/schedulesendmtm/group" />
+	<unit unitID="001" name="client" bldFile="common/generic/messaging/sendas2/client/group" />
+	<unit unitID="001" name="editutils" bldFile="common/generic/messaging/sendas2/editutils/group" />
+	<unit unitID="001" name="sendas2" bldFile="common/generic/messaging/sendas2/group" />
+	<unit unitID="001" name="server" bldFile="common/generic/messaging/sendas2/server/group" />
+	<unit unitID="001" name="clientmtm" bldFile="common/generic/messaging/sms/clientmtm/group" />
+	<unit unitID="001" name="clientmtm" bldFile="common/generic/messaging/sms/multimode/clientmtm/group" />
+	<unit unitID="001" name="multimode" bldFile="common/generic/messaging/sms/multimode/Group" />
+	<unit unitID="001" name="servermtm" bldFile="common/generic/messaging/sms/multimode/servermtm/group" />
+	<unit unitID="001" name="servermtm" bldFile="common/generic/messaging/sms/servermtm/group" />
+	<unit unitID="001" name="smsgetdetdescdefault" bldFile="common/generic/messaging/sms/smsgetdetdescdefault/group" />
+	<unit unitID="001" name="smsswitch" bldFile="common/generic/messaging/sms/smsswitch/group" />
+	<unit unitID="001" name="smcm" bldFile="common/generic/messaging/sms/smsswitch/smcm/group" />
+	<unit unitID="001" name="smss" bldFile="common/generic/messaging/sms/smsswitch/smss/group" />
+	<unit unitID="001" name="urlhandler" bldFile="common/generic/messaging/urlhandler/group" />
+	<unit unitID="001" name="urlhandler" bldFile="common/generic/messaging/urlhandler/urlhandler/group" />
+	<unit unitID="001" name="SIPCPR" bldFile="common/generic/mm-protocols/ConnProv/SIPCPR/group" />
+	<unit unitID="001" name="General" bldFile="common/generic/mm-protocols/General/Group" />
+	<unit unitID="001" name="core" bldFile="common/generic/mm-protocols/rtp/core/group" />
+	<unit unitID="001" name="rtp" bldFile="common/generic/mm-protocols/rtp/group" />
+	<unit unitID="001" name="SIP" bldFile="common/generic/mm-protocols/SIP/Group" />
+	<unit unitID="001" name="gameengine" bldFile="common/generic/mm-protocols/SIP/SampleApp/gameengine/Group" />
+	<unit unitID="001" name="gameUI_techview" bldFile="common/generic/mm-protocols/SIP/SampleApp/gameUI_techview/Group" />
+	<unit unitID="001" name="SampleApp" bldFile="common/generic/mm-protocols/SIP/SampleApp/group" />
+	<unit unitID="001" name="resolverplugin" bldFile="common/generic/mm-protocols/SIP/SampleApp/resolverplugin/Group" />
+	<unit unitID="001" name="sipengine" bldFile="common/generic/mm-protocols/SIP/SampleApp/sipengine/group" />
+	<unit unitID="001" name="socketengine" bldFile="common/generic/mm-protocols/SIP/SampleApp/socketengine/Group" />
+	<unit unitID="001" name="example_plugin" bldFile="common/generic/mm-protocols/SIP/SIP/NATTraversalController/example_plugin/group" />
+	<unit unitID="001" name="SIP2" bldFile="common/generic/mm-protocols/SIP2/Group" />
+	<unit unitID="001" name="gameengine" bldFile="common/generic/mm-protocols/SIP2/SampleApp/gameengine/Group" />
+	<unit unitID="001" name="gameUI_techview" bldFile="common/generic/mm-protocols/SIP2/SampleApp/gameUI_techview/Group" />
+	<unit unitID="001" name="SampleApp" bldFile="common/generic/mm-protocols/SIP2/SampleApp/group" />
+	<unit unitID="001" name="resolverplugin" bldFile="common/generic/mm-protocols/SIP2/SampleApp/resolverplugin/Group" />
+	<unit unitID="001" name="sipengine" bldFile="common/generic/mm-protocols/SIP2/SampleApp/sipengine/group" />
+	<unit unitID="001" name="socketengine" bldFile="common/generic/mm-protocols/SIP2/SampleApp/socketengine/Group" />
+	<unit unitID="001" name="example_plugin" bldFile="common/generic/mm-protocols/SIP2/SIP/NATTraversalController/example_plugin/group" />
+	<unit unitID="001" name="SIPDummyPRT" bldFile="common/generic/mm-protocols/SipProvEngine/SIPDummyPRT/group" />
+	<unit unitID="001" name="SipStateMachine" bldFile="common/generic/mm-protocols/SipProvEngine/SipStateMachine/group" />
+	<unit unitID="001" name="SIPParams" bldFile="common/generic/mm-protocols/SubConnProv/SIPParams/group" />
+	<unit unitID="001" name="SIPSCPR" bldFile="common/generic/mm-protocols/SubConnProv/SIPSCPR/group" />
+	<unit unitID="001" name="client" bldFile="common/generic/mtp/daemon/client/group" />
+	<unit unitID="001" name="daemon" bldFile="common/generic/mtp/daemon/group" />
+	<unit unitID="001" name="server" bldFile="common/generic/mtp/daemon/server/group" />
+	<unit unitID="001" name="dataproviderapi" bldFile="common/generic/mtp/dataproviders/dataproviderapi/group" />
+	<unit unitID="001" name="devdp" bldFile="common/generic/mtp/dataproviders/devdp/group" />
+	<unit unitID="001" name="dputility" bldFile="common/generic/mtp/dataproviders/dputility/group" />
+	<unit unitID="001" name="filedp" bldFile="common/generic/mtp/dataproviders/filedp/group" />
+	<unit unitID="001" name="dataproviders" bldFile="common/generic/mtp/dataproviders/group" />
+	<unit unitID="001" name="proxydp" bldFile="common/generic/mtp/dataproviders/proxydp/group" />
+	<unit unitID="001" name="datatypes" bldFile="common/generic/mtp/datatypes/group" />
+	<unit unitID="001" name="framework" bldFile="common/generic/mtp/framework/group" />
+	<unit unitID="001" name="mtp" bldFile="common/generic/mtp/group" />
+	<unit unitID="001" name="transports" bldFile="common/generic/mtp/transports/group" />
+	<unit unitID="001" name="transportapi" bldFile="common/generic/mtp/transports/transportapi/group" />
+	<unit unitID="001" name="usbsic" bldFile="common/generic/mtp/transports/usbsic/group" />
+	<unit unitID="001" name="usbdatatypes" bldFile="common/generic/mtp/transports/usbsic/usbdatatypes/group" />
+	<unit unitID="001" name="usbsic_cc" bldFile="common/generic/mtp/transports/usbsic/usbsic_cc/group" />
+	<unit unitID="001" name="usbsic_imp" bldFile="common/generic/mtp/transports/usbsic/usbsic_imp/group" />
+	<unit unitID="001" name="play" bldFile="common/generic/Multimedia/char/mmf/clientutils/audio/play/group" />
+	<unit unitID="001" name="record" bldFile="common/generic/Multimedia/char/mmf/clientutils/audio/record/group" />
+	<unit unitID="001" name="play" bldFile="common/generic/Multimedia/char/mmf/clientutils/video/play/group" />
+	<unit unitID="001" name="mmf" bldFile="common/generic/Multimedia/char/mmf/group" />
+	<unit unitID="001" name="ECam" bldFile="Common/Generic/Multimedia/ECam/Group" />
+	<unit unitID="001" name="BitmapTransform" bldFile="Common/Generic/Multimedia/ICL/BitmapTransform/group" />
+	<unit unitID="001" name="ICL" bldFile="Common/Generic/Multimedia/ICL/group" />
+	<unit unitID="001" name="MediaClientImage" bldFile="Common/Generic/Multimedia/ICL/MediaClientImage/Group" />
+	<unit unitID="001" name="mdf" bldFile="common/generic/Multimedia/mdf/group" />
+	<unit unitID="001" name="mmcommon" bldFile="Common/Generic/Multimedia/mmcommon/group" />
+	<unit unitID="001" name="MMF" bldFile="Common/Generic/Multimedia/MMF/group" />
+	<unit unitID="001" name="SoundDev" bldFile="Common/Generic/Multimedia/MMF/SoundDev/group" />
+	<unit unitID="001" name="sounddevbt" bldFile="Common/Generic/Multimedia/MMF/sounddevbt/group" />
+	<unit unitID="001" name="Agents" bldFile="common/generic/Multimedia/MVS/Agents/group" />
+	<unit unitID="001" name="Application" bldFile="common/generic/Multimedia/MVS/Application/group" />
+	<unit unitID="001" name="openmax" bldFile="common/generic/Multimedia/openmax/group" />
+	<unit unitID="001" name="Tuner" bldFile="Common/Generic/Multimedia/Tuner/group" />
+	<unit unitID="001" name="cdmaprot" bldFile="common/generic/nbprotocols/cdmasmsstack/cdmaprot/group" />
+	<unit unitID="001" name="cdmau" bldFile="common/generic/nbprotocols/cdmasmsstack/cdmau/group" />
+	<unit unitID="001" name="cdmawapprot" bldFile="common/generic/nbprotocols/cdmasmsstack/cdmawapprot/Group" />
+	<unit unitID="001" name="cdmasmsstack" bldFile="common/generic/nbprotocols/cdmasmsstack/group" />
+	<unit unitID="001" name="ota-xml" bldFile="common/generic/nbprotocols/cdmasmsstack/ota-xml/group" />
+	<unit unitID="001" name="smsstackv2" bldFile="common/generic/nbprotocols/smsstackv2/group" />
+	<unit unitID="001" name="gsmu" bldFile="common/generic/nbprotocols/smsstackv2/gsmu/group" />
+	<unit unitID="001" name="smsprot" bldFile="common/generic/nbprotocols/smsstackv2/smsprot/Group" />
+	<unit unitID="001" name="smsu" bldFile="common/generic/nbprotocols/smsstackv2/smsu/group" />
+	<unit unitID="001" name="wapprot" bldFile="common/generic/nbprotocols/smsstackv2/wapprot/Group" />
+	<unit unitID="001" name="6to4" bldFile="common/generic/networking/6to4/group" />
+	<unit unitID="001" name="802.11" bldFile="common/generic/networking/802.11/group" />
+	<unit unitID="001" name="WiFiAgent" bldFile="common/generic/networking/802.11/WiFiAgent/group" />
+	<unit unitID="001" name="WiFiCfgEng" bldFile="common/generic/networking/802.11/WiFiCfgEng/group" />
+	<unit unitID="001" name="WiFiCore" bldFile="common/generic/networking/802.11/WiFiCore/group" />
+	<unit unitID="001" name="WiFiDB" bldFile="common/generic/networking/802.11/WiFiDB/group" />
+	<unit unitID="001" name="WiFiLdd" bldFile="common/generic/networking/802.11/WiFiDrvs/WiFiLdd/group" />
+	<unit unitID="001" name="Marvell83xx" bldFile="common/generic/networking/802.11/WiFiDrvs/WiFiPdds/Marvell83xx/group" />
+	<unit unitID="001" name="WiFiPkt" bldFile="common/generic/networking/802.11/WiFiPkt/group" />
+	<unit unitID="001" name="WiFiRSSIEng" bldFile="common/generic/networking/802.11/WiFiRSSIEng/group" />
+	<unit unitID="001" name="WiFiSecEapMods" bldFile="common/generic/networking/802.11/WiFiSecEapMods/group" />
+	<unit unitID="001" name="WiFiSecurity" bldFile="common/generic/networking/802.11/WiFiSecurity/GROUP" />
+	<unit unitID="001" name="WiFiStatsEng" bldFile="common/generic/networking/802.11/WiFiStatsEng/group" />
+	<unit unitID="001" name="WiFiSurveyEng" bldFile="common/generic/networking/802.11/WiFiSurveyEng/group" />
+	<unit unitID="001" name="bca" bldFile="common/generic/networking/BasebandAdaptation/bca/group" />
+	<unit unitID="001" name="c32bca" bldFile="common/generic/networking/BasebandAdaptation/c32bca/group" />
+	<unit unitID="001" name="te_c32bca" bldFile="common/generic/networking/BasebandAdaptation/c32bca/te_c32bca/group" />
+	<unit unitID="001" name="isc" bldFile="common/generic/networking/BasebandAdaptation/isc/group" />
+<!-- deprecated 	<unit unitID="001" name="networking" bldFile="common/generic/networking" /> -->
+	<unit unitID="001" name="cgi" bldFile="common/generic/networking/cgi/group" />
+	<unit unitID="001" name="csdagt" bldFile="common/generic/networking/csdagt/group" />
+	<unit unitID="001" name="dhcp" bldFile="common/generic/networking/dhcp/group" />
+	<unit unitID="001" name="te_dhcp" bldFile="common/generic/networking/dhcp/te_dhcp" />
+	<unit unitID="001" name="config" bldFile="common/generic/networking/dhcp/te_dhcp/config" />
+	<unit unitID="001" name="agentnotifier" bldFile="common/generic/networking/dialog/agentnotifier/group" />
+	<unit unitID="001" name="default" bldFile="common/generic/networking/dialog/default" />
+	<unit unitID="001" name="dialog" bldFile="common/generic/networking/dialog/group" />
+	<unit unitID="001" name="TE_Dialog" bldFile="common/generic/networking/dialog/TE_Dialog/group" />
+	<unit unitID="001" name="data" bldFile="common/generic/networking/dnd/data" />
+	<unit unitID="001" name="dnd" bldFile="common/generic/networking/dnd/group" />
+	<unit unitID="001" name="wifieapaka" bldFile="common/generic/networking/eap/adapters/wifieapaka/group" />
+	<unit unitID="001" name="wifieapsim" bldFile="common/generic/networking/eap/adapters/wifieapsim/group" />
+	<unit unitID="001" name="eapaka" bldFile="common/generic/networking/eap/eapsimaka/eapaka/group" />
+	<unit unitID="001" name="eapsim" bldFile="common/generic/networking/eap/eapsimaka/eapsim/group" />
+	<unit unitID="001" name="eap" bldFile="common/generic/networking/eap/group" />
+	<unit unitID="001" name="ether802" bldFile="common/generic/networking/ether802/group" />
+	<unit unitID="001" name="version1" bldFile="common/generic/networking/ether802/version1/group" />
+	<unit unitID="001" name="etherdrv" bldFile="common/generic/networking/etherdrv/group" />
+	<unit unitID="001" name="examplecode" bldFile="common/generic/networking/examplecode/group" />
+	<unit unitID="001" name="inetd" bldFile="common/generic/networking/examplecode/inetd/group" />
+	<unit unitID="001" name="ipip" bldFile="common/generic/networking/examplecode/ipip/group" />
+	<unit unitID="001" name="tcpdumping" bldFile="common/generic/networking/examplecode/tcpdumping/group" />
+	<unit unitID="001" name="ftp_e" bldFile="common/generic/networking/ftp_e/group" />
+	<unit unitID="001" name="General" bldFile="common/generic/networking/General/group" />
+	<unit unitID="001" name="guqos" bldFile="common/generic/networking/guqos/group" />
+	<unit unitID="001" name="inetutil" bldFile="common/generic/networking/inetutil/group" />
+	<unit unitID="001" name="inhook6" bldFile="common/generic/networking/inhook6/group" />
+	<unit unitID="001" name="inhook6example" bldFile="common/generic/networking/inhook6example/group" />
+	<unit unitID="001" name="insock" bldFile="common/generic/networking/insock/group" />
+	<unit unitID="001" name="ipproto" bldFile="common/generic/networking/ip/ipproto/group" />
+	<unit unitID="001" name="iptransport" bldFile="common/generic/networking/ip/iptransport/group" />
+	<unit unitID="001" name="ipcpr" bldFile="common/generic/networking/ip/version1/ipcpr/group" />
+	<unit unitID="001" name="referencecpr" bldFile="common/generic/networking/ip/version1/referencecpr/group" />
+	<unit unitID="001" name="ipadm" bldFile="common/generic/networking/ipadm/group" />
+	<unit unitID="001" name="IPEventNotifier" bldFile="common/generic/networking/IPEventNotifier/group" />
+	<unit unitID="001" name="IPEventFactory" bldFile="common/generic/networking/IPEventNotifier/IPEventFactory/group" />
+	<unit unitID="001" name="IPEventTypes" bldFile="common/generic/networking/IPEventNotifier/IPEventTypes/group" />
+	<unit unitID="001" name="te_IPEventNotifier" bldFile="common/generic/networking/IPEventNotifier/te_IPEventNotifier/group" />
+	<unit unitID="001" name="iprotor" bldFile="common/generic/networking/iprotor/group" />
+	<unit unitID="001" name="eventmediator" bldFile="common/generic/networking/ipsec/eventmediator/group" />
+	<unit unitID="001" name="eventmediatorapi" bldFile="common/generic/networking/ipsec/eventmediatorapi/group" />
+	<unit unitID="001" name="ipsec" bldFile="common/generic/networking/ipsec/group" />
+	<unit unitID="001" name="ikepolparser" bldFile="common/generic/networking/ipsec/ikepolparser/group" />
+	<unit unitID="001" name="ikesocketplugin" bldFile="common/generic/networking/ipsec/ikesocketplugin/group" />
+	<unit unitID="001" name="ipsec6" bldFile="common/generic/networking/ipsec/ipsec6/group" />
+	<unit unitID="001" name="ipseccrypto" bldFile="common/generic/networking/ipsec/ipseccrypto/group" />
+	<unit unitID="001" name="ipsecpol" bldFile="common/generic/networking/ipsec/ipsecpol/group" />
+	<unit unitID="001" name="ipsecpolapi" bldFile="common/generic/networking/ipsec/ipsecpolapi/group" />
+	<unit unitID="001" name="ipsecpolparser" bldFile="common/generic/networking/ipsec/ipsecpolparser/group" />
+	<unit unitID="001" name="kmdserver" bldFile="common/generic/networking/ipsec/kmdserver/group" />
+	<unit unitID="001" name="lib_pfkey" bldFile="common/generic/networking/ipsec/lib_pfkey/group" />
+	<unit unitID="001" name="pkiservice" bldFile="common/generic/networking/ipsec/pkiservice/group" />
+	<unit unitID="001" name="pkiserviceapi" bldFile="common/generic/networking/ipsec/pkiserviceapi/group" />
+	<unit unitID="001" name="sit" bldFile="common/generic/networking/ipsec/sit/group" />
+	<unit unitID="001" name="te_ipsec_platsec" bldFile="common/generic/networking/ipsec/te_ipsec_platsec/group" />
+	<unit unitID="001" name="utlbase64" bldFile="common/generic/networking/ipsec/utlbase64/group" />
+	<unit unitID="001" name="utlcrypto" bldFile="common/generic/networking/ipsec/utlcrypto/group" />
+	<unit unitID="001" name="utlpkcs1" bldFile="common/generic/networking/ipsec/utlpkcs1/group" />
+	<unit unitID="001" name="utlpkcs10" bldFile="common/generic/networking/ipsec/utlpkcs10/group" />
+	<unit unitID="001" name="utlpkcs5" bldFile="common/generic/networking/ipsec/utlpkcs5/group" />
+	<unit unitID="001" name="vpnapi" bldFile="common/generic/networking/ipsec/vpnapi/group" />
+	<unit unitID="001" name="vpnconnagt" bldFile="common/generic/networking/ipsec/vpnconnagt/group" />
+	<unit unitID="001" name="vpnmanager" bldFile="common/generic/networking/ipsec/vpnmanager/group" />
+	<unit unitID="001" name="mobileip" bldFile="common/generic/networking/mobileip/group" />
+	<unit unitID="001" name="mscomp" bldFile="common/generic/networking/mscomp/group" />
+	<unit unitID="001" name="napt" bldFile="common/generic/networking/napt/group" />
+	<unit unitID="001" name="TE_Napt" bldFile="common/generic/networking/napt/TE_Napt/group" />
+	<unit unitID="001" name="Te_NaptCap" bldFile="common/generic/networking/napt/Te_NaptCap/group" />
+	<unit unitID="001" name="netcon" bldFile="common/generic/networking/netcon/group" />
+	<unit unitID="001" name="te_mobileiptosimpleipfallback" bldFile="common/generic/networking/netcon/te_mobileiptosimpleipfallback/group" />
+	<unit unitID="001" name="nslookup" bldFile="Common/Generic/networking/nslookup/group" />
+	<unit unitID="001" name="nullagt" bldFile="common/generic/networking/nullagt/group" />
+	<unit unitID="001" name="TS_nullagt" bldFile="common/generic/networking/nullagt/TS_nullagt/group" />
+	<unit unitID="001" name="packetlogger" bldFile="common/generic/networking/packetlogger/group" />
+	<unit unitID="001" name="pfqoslib" bldFile="common/generic/networking/pfqoslib/group" />
+	<unit unitID="001" name="ping" bldFile="common/generic/networking/ping/group" />
+	<unit unitID="001" name="data" bldFile="common/generic/networking/ppp/data" />
+	<unit unitID="001" name="ppp" bldFile="common/generic/networking/ppp/group" />
+	<unit unitID="001" name="dummyppp" bldFile="common/generic/networking/ppp/te_ppp/dummyppp/group" />
+	<unit unitID="001" name="te_incoming_ppp" bldFile="common/generic/networking/ppp/te_ppp/te_incoming_ppp/group" />
+	<unit unitID="001" name="te_pppcomp" bldFile="common/generic/networking/ppp/te_ppp/te_pppcomp/group" />
+	<unit unitID="001" name="te_vjcomp" bldFile="common/generic/networking/ppp/te_ppp/te_vjcomp/group" />
+	<unit unitID="001" name="TS_dummyppp" bldFile="common/generic/networking/ppp/te_ppp/TS_dummyppp/group" />
+	<unit unitID="001" name="data" bldFile="common/generic/networking/ppp/version1/data" />
+	<unit unitID="001" name="version1" bldFile="common/generic/networking/ppp/version1/group" />
+	<unit unitID="001" name="dummyppp" bldFile="common/generic/networking/ppp/version1/te_ppp/dummyppp/group" />
+	<unit unitID="001" name="te_incoming_ppp" bldFile="common/generic/networking/ppp/version1/te_ppp/te_incoming_ppp/group" />
+	<unit unitID="001" name="te_pppcomp" bldFile="common/generic/networking/ppp/version1/te_ppp/te_pppcomp/group" />
+	<unit unitID="001" name="te_vjcomp" bldFile="common/generic/networking/ppp/version1/te_ppp/te_vjcomp/group" />
+	<unit unitID="001" name="TS_dummyppp" bldFile="common/generic/networking/ppp/version1/te_ppp/TS_dummyppp/group" />
+	<unit unitID="001" name="predcomp" bldFile="common/generic/networking/predcomp/group" />
+	<unit unitID="001" name="probe" bldFile="common/generic/networking/probe/group" />
+	<unit unitID="001" name="psdagt" bldFile="common/generic/networking/psdagt/group" />
+	<unit unitID="001" name="data" bldFile="common/generic/networking/qos/data" />
+	<unit unitID="001" name="qos" bldFile="common/generic/networking/qos/group" />
+	<unit unitID="001" name="qosextnapi" bldFile="common/generic/networking/qosextnapi/group" />
+	<unit unitID="001" name="qoslib" bldFile="common/generic/networking/qoslib/group" />
+	<unit unitID="001" name="rawipnif" bldFile="common/generic/networking/rawipnif/group" />
+	<unit unitID="001" name="version1" bldFile="common/generic/networking/rawipnif/version1/group" />
+	<unit unitID="001" name="sblpapi" bldFile="common/generic/networking/sblpapi/group" />
+	<unit unitID="001" name="slip" bldFile="common/generic/networking/slip/group" />
+	<unit unitID="001" name="sockbench" bldFile="common/generic/networking/sockbench/group" />
+	<unit unitID="001" name="spud" bldFile="common/generic/networking/spud/group" />
+	<unit unitID="001" name="te_spudNetworkSide" bldFile="common/generic/networking/spud/te_spudNetworkSide/group" />
+	<unit unitID="001" name="te_spudRSubConn" bldFile="common/generic/networking/spud/te_spudRSubConn/group" />
+	<unit unitID="001" name="staccomp" bldFile="common/generic/networking/staccomp/group" />
+	<unit unitID="001" name="data" bldFile="common/generic/networking/tcpip6/data" />
+	<unit unitID="001" name="tcpip6" bldFile="common/generic/networking/tcpip6/group" />
+	<unit unitID="001" name="telnet_e" bldFile="common/generic/networking/telnet_e/group" />
+	<unit unitID="001" name="tls" bldFile="common/generic/networking/tls/group" />
+	<unit unitID="001" name="tunnelnif" bldFile="common/generic/networking/tunnelnif/group" />
+	<unit unitID="001" name="version1" bldFile="common/generic/networking/tunnelnif/version1/group" />
+	<unit unitID="001" name="udpecho" bldFile="common/generic/networking/udpecho/group" />
+	<unit unitID="001" name="udpsend" bldFile="common/generic/networking/udpsend/group" />
+	<unit unitID="001" name="pdp" bldFile="common/generic/networking/umts/pdp/group" />
+	<unit unitID="001" name="qos3gpp" bldFile="common/generic/networking/umts/qos3gpp/group" />
+	<unit unitID="001" name="qosipscpr" bldFile="common/generic/networking/umts/qosipscpr/group" />
+	<unit unitID="001" name="ipscpr" bldFile="common/generic/networking/umts/version1/ipscpr/group" />
+	<unit unitID="001" name="referencescpr" bldFile="common/generic/networking/umts/version1/referencescpr/group" />
+	<unit unitID="001" name="umtsgprsscpr" bldFile="common/generic/networking/umts/version1/umtsgprsscpr/group" />
+	<unit unitID="001" name="umtsapi" bldFile="common/generic/networking/umtsapi/group" />
+	<unit unitID="001" name="umtsif" bldFile="common/generic/networking/umtsif/group" />
+	<unit unitID="001" name="webserver" bldFile="common/generic/networking/webserver/group" />
+	<unit unitID="001" name="obex" bldFile="common/generic/obex" />
+	<unit unitID="001" name="obex" bldFile="common/generic/obex/group" />
+	<unit unitID="001" name="obex" bldFile="common/generic/obex/obex/group" />
+	<unit unitID="001" name="obexbttransport" bldFile="common/generic/obex/obexbttransport/group" />
+	<unit unitID="001" name="obexextensionapis" bldFile="common/generic/obex/obexextensionapis/group" />
+	<unit unitID="001" name="obexirdatransport" bldFile="common/generic/obex/obexirdatransport/group" />
+	<unit unitID="001" name="obextransport" bldFile="common/generic/obex/obextransport/group" />
+	<unit unitID="001" name="obexusbtransport" bldFile="common/generic/obex/obexusbtransport/group" />
+	<unit unitID="001" name="obexwin32usbtransport" bldFile="common/generic/obex/obexwin32usbtransport/group" />
+	<unit unitID="001" name="backend" bldFile="common/generic/openenv/core/backend/group" />
+	<unit unitID="001" name="ipcserver" bldFile="common/generic/openenv/core/backend/ipcserver/group" />
+	<unit unitID="001" name="ipccli" bldFile="common/generic/openenv/core/backend/ipcserver/ipccli/group" />
+	<unit unitID="001" name="ipcsrv" bldFile="common/generic/openenv/core/backend/ipcserver/ipcsrv/group" />
+	<unit unitID="001" name="ewsd" bldFile="common/generic/openenv/core/ewsd/group" />
+	<unit unitID="001" name="core" bldFile="common/generic/openenv/core/group" />
+	<unit unitID="001" name="libc" bldFile="common/generic/openenv/core/libc/group" />
+	<unit unitID="001" name="libdl" bldFile="common/generic/openenv/core/libdl/group" />
+	<unit unitID="001" name="liblogger" bldFile="common/generic/openenv/core/liblogger/group" />
+	<unit unitID="001" name="libm" bldFile="common/generic/openenv/core/libm/group" />
+	<unit unitID="001" name="libpthread" bldFile="common/generic/openenv/core/libpthread/group" />
+	<unit unitID="001" name="authserver" bldFile="common/generic/security/authserver/group" />
+	<unit unitID="001" name="security" bldFile="common/generic/security" />
+	<unit unitID="001" name="certman" bldFile="common/generic/security/certman/group" />
+	<unit unitID="001" name="common" bldFile="common/generic/security/common/group" />
+	<unit unitID="001" name="crypto" bldFile="common/generic/security/crypto/group" />
+	<unit unitID="001" name="strong" bldFile="common/generic/security/crypto/strong" />
+	<unit unitID="001" name="cryptospi" bldFile="common/generic/security/cryptospi/group" />
+	<unit unitID="001" name="strong" bldFile="common/generic/security/cryptospi/strong" />
+	<unit unitID="001" name="cryptotokens" bldFile="common/generic/security/cryptotokens/group" />
+	<unit unitID="001" name="filetokens" bldFile="common/generic/security/filetokens/group" />
+	<unit unitID="001" name="JavaMIDletInstaller" bldFile="common/generic/security/JavaMIDletInstaller/group" />
+	<unit unitID="001" name="winsignmidlet" bldFile="common/generic/security/JavaMIDletInstaller/source/winsignmidlet" />
+	<unit unitID="001" name="makekeys" bldFile="common/generic/security/makekeys/group" />
+	<unit unitID="001" name="securityconfig" bldFile="common/generic/security/securityconfig/group" />
+	<unit unitID="001" name="SISInstaller" bldFile="common/generic/security/SISInstaller/group" />
+	<unit unitID="001" name="swi" bldFile="common/generic/security/swi/group" />
+	<unit unitID="001" name="tlsprovider" bldFile="common/generic/security/tlsprovider/group" />
+	<unit unitID="001" name="data" bldFile="common/generic/ser-comms/c32/data" />
+	<unit unitID="001" name="c32" bldFile="common/generic/ser-comms/c32/group" />
+	<unit unitID="001" name="usb" bldFile="common/generic/ser-comms/usb" />
+	<unit unitID="001" name="acmserver" bldFile="common/generic/ser-comms/usb/csy/acmserver/group" />
+	<unit unitID="001" name="csy" bldFile="common/generic/ser-comms/usb/csy/group" />
+	<unit unitID="001" name="usb" bldFile="common/generic/ser-comms/usb/group" />
+	<unit unitID="001" name="logger" bldFile="common/generic/ser-comms/usb/logger/group" />
+	<unit unitID="001" name="mscc" bldFile="common/generic/ser-comms/usb/mscc/group" />
+	<unit unitID="001" name="usbman" bldFile="common/generic/ser-comms/usb/usbman/group" />
+	<unit unitID="001" name="DBA" bldFile="common/generic/SyncML/DataSync/DBA/group" />
+	<unit unitID="001" name="DataSync" bldFile="Common/Generic/SyncML/DataSync/Group" />
+	<unit unitID="001" name="HostServers" bldFile="common/generic/syncml/DataSync/HostServers/group" />
+	<unit unitID="001" name="PushMsgParsing" bldFile="Common/Generic/SyncML/DataSync/PushMsgParsing" />
+	<unit unitID="001" name="ServerDataProvider" bldFile="common/generic/syncml/DataSync/ServerDataProvider/group" />
+	<unit unitID="001" name="SyncEngine" bldFile="Common/Generic/SyncML/DataSync/SyncEngine" />
+	<unit unitID="001" name="DevMan" bldFile="Common/Generic/SyncML/DevMan/group" />
+	<unit unitID="001" name="PushMsgParsing" bldFile="Common/Generic/SyncML/DevMan/PushMsgParsing" />
+	<unit unitID="001" name="SyncAgent" bldFile="Common/Generic/SyncML/DevMan/SyncAgent" />
+	<unit unitID="001" name="SyncEngine" bldFile="Common/Generic/SyncML/DevMan/SyncEngine" />
+	<unit unitID="001" name="ClientAPI" bldFile="Common/Generic/SyncML/Framework/ClientAPI" />
+	<unit unitID="001" name="dataproviderregistry" bldFile="common/generic/SyncML/Framework/dataproviderregistry/group" />
+	<unit unitID="001" name="filter" bldFile="common/generic/SyncML/Framework/filter/group" />
+	<unit unitID="001" name="Framework" bldFile="Common/Generic/SyncML/Framework/Group" />
+	<unit unitID="001" name="Logger" bldFile="Common/Generic/SyncML/Framework/Logger" />
+	<unit unitID="001" name="Shared" bldFile="Common/Generic/SyncML/Framework/Shared" />
+	<unit unitID="001" name="SyncAgent" bldFile="Common/Generic/SyncML/Framework/SyncAgent" />
+	<unit unitID="001" name="SyncDataStore" bldFile="Common/Generic/SyncML/Framework/SyncDataStore" />
+	<unit unitID="001" name="SyncEngine" bldFile="Common/Generic/SyncML/Framework/SyncEngine" />
+	<unit unitID="001" name="TransportProvision" bldFile="Common/Generic/SyncML/Framework/TransportProvision" />
+	<unit unitID="001" name="SyncML" bldFile="Common/Generic/SyncML/Group" />
+	<unit unitID="001" name="stringpoolexample" bldFile="common/generic/syslibs/bafl/engineering/stringpoolexample" />
+	<unit unitID="001" name="bafl" bldFile="common/generic/syslibs/bafl/group" />
+	<unit unitID="001" name="initLocale" bldFile="common/generic/syslibs/bafl/initLocale/group" />
+	<unit unitID="001" name="caf2" bldFile="common/generic/syslibs/caf2/group" />
+	<unit unitID="001" name="reccafconfig" bldFile="common/generic/syslibs/caf2/reccafconfig" />
+	<unit unitID="001" name="centralrepository" bldFile="common/generic/syslibs/centralrepository/group" />
+	<unit unitID="001" name="ongoing" bldFile="common/generic/syslibs/charconv/ongoing/group" />
+	<unit unitID="001" name="esql" bldFile="common/generic/syslibs/dbms/esql/group" />
+	<unit unitID="001" name="dbms" bldFile="common/generic/syslibs/dbms/group" />
+	<unit unitID="001" name="ongoing" bldFile="common/generic/syslibs/ecom/ongoing/Group" />
+	<unit unitID="001" name="EcomSvrIniWriter" bldFile="common/generic/syslibs/ecom/ongoing/Tools/EcomSvrIniWriter" />
+	<unit unitID="001" name="Template" bldFile="common/generic/syslibs/ecom/ongoing/Unsupported/Tools/MsDev/Wizard/EComPluginWiz/Template" />
+	<unit unitID="001" name="ezlib" bldFile="common/generic/syslibs/ezlib/group" />
+	<unit unitID="001" name="FATCharsetConv" bldFile="common/generic/syslibs/FATCharsetConv/group" />
+	<unit unitID="001" name="featreg" bldFile="common/generic/syslibs/featreg/group" />
+	<unit unitID="001" name="ongoing" bldFile="common/generic/syslibs/logeng/ongoing/group" />
+	<unit unitID="001" name="pwrcli" bldFile="common/generic/syslibs/pwrcli/group" />
+	<unit unitID="001" name="ongoing" bldFile="common/generic/syslibs/schsvr/ongoing/group" />
+	<unit unitID="001" name="SQL" bldFile="common/generic/syslibs/SQL/GROUP" />
+	<unit unitID="001" name="stdlib" bldFile="common/generic/syslibs/stdlib/group" />
+	<unit unitID="001" name="store" bldFile="common/generic/syslibs/store/group" />
+	<unit unitID="001" name="SysAgent2" bldFile="common/generic/syslibs/SysAgent2/group" />
+	<unit unitID="001" name="xml" bldFile="common/generic/syslibs/xml/group" />
+	<unit unitID="001" name="cdmatsy" bldFile="common/generic/telephony/cdmatsy/group" />
+	<unit unitID="001" name="dial" bldFile="common/generic/telephony/dial/group" />
+	<unit unitID="001" name="DATA" bldFile="common/generic/telephony/etel/DATA" />
+	<unit unitID="001" name="playback" bldFile="common/generic/telephony/etel/EtelRecorder/playback/group" />
+	<unit unitID="001" name="etel" bldFile="common/generic/telephony/etel/group" />
+	<unit unitID="001" name="ExampleApps" bldFile="common/generic/telephony/ETel3rdParty/ExampleApps/Group" />
+	<unit unitID="001" name="ETel3rdParty" bldFile="common/generic/telephony/ETel3rdParty/Group" />
+	<unit unitID="001" name="etelcdma" bldFile="common/generic/telephony/etelcdma/group" />
+	<unit unitID="001" name="etelmm" bldFile="common/generic/telephony/etelmm/group" />
+	<unit unitID="001" name="etelpckt" bldFile="common/generic/telephony/etelpckt/group" />
+	<unit unitID="001" name="etelsat" bldFile="common/generic/telephony/etelsat/group" />
+	<unit unitID="001" name="FAX" bldFile="common/generic/telephony/FAX/Group" />
+	<unit unitID="001" name="mmtsy" bldFile="common/generic/telephony/mmtsy/group" />
+	<unit unitID="001" name="phbksync" bldFile="common/generic/telephony/phbksync/group" />
+	<unit unitID="001" name="simtsy" bldFile="common/generic/telephony/simtsy/group" />
+	<unit unitID="001" name="trpagt" bldFile="common/generic/telephony/trp/agt/trpagt/group" />
+	<unit unitID="001" name="csy27010" bldFile="common/generic/telephony/trp/csy/csy27010/group" />
+	<unit unitID="001" name="at" bldFile="common/generic/telephony/trp/group/at" />
+	<unit unitID="001" name="trp" bldFile="common/generic/telephony/trp/group" />
+	<unit unitID="001" name="stubbed" bldFile="common/generic/telephony/trp/group/stubbed" />
+	<unit unitID="001" name="rawipnif" bldFile="common/generic/telephony/trp/nif/rawipnif/group" />
+	<unit unitID="001" name="at" bldFile="common/generic/telephony/trp/tsy/group/at" />
+	<unit unitID="001" name="icera" bldFile="common/generic/telephony/trp/tsy/group/icera" />
+	<unit unitID="001" name="stubbed" bldFile="common/generic/telephony/trp/tsy/group/stubbed" />
+	<unit unitID="001" name="Watchers" bldFile="common/generic/telephony/Watchers/group" />
+	<unit unitID="001" name="bspbuilder" bldFile="common/generic/tools/bspbuilder/group" />
+	<unit unitID="001" name="build" bldFile="common/generic/tools/build/group" />
+	<unit unitID="001" name="dummy" bldFile="common/generic/tools/cbr/dummy" />
+	<unit unitID="001" name="prf" bldFile="common/generic/tools/cbr/prf/group" />
+	<unit unitID="001" name="HelloWorld" bldFile="common/generic/tools/cbr/tools/docs/Example/HelloWorld/group" />
+	<unit unitID="001" name="tools" bldFile="common/generic/tools/cbr/tools/group" />
+	<unit unitID="001" name="cinidata" bldFile="common/generic/tools/cinidata" />
+	<unit unitID="001" name="te_CInidata" bldFile="common/generic/tools/cinidata/te_CInidata/group" />
+	<unit unitID="001" name="ProductInstaller" bldFile="common/generic/tools/custkits/ProductInstaller/group" />
+	<unit unitID="001" name="depcheck" bldFile="common/generic/tools/depcheck" />
+	<unit unitID="001" name="DepModel" bldFile="common/generic/tools/DepModel/group" />
+	<unit unitID="001" name="KitSetupApp" bldFile="common/generic/tools/devkits/KitSetupApp/group" />
+	<unit unitID="001" name="evalid" bldFile="common/generic/tools/host_utilities/evalid" />
+	<unit unitID="001" name="rcomp" bldFile="common/generic/tools/rcomp/group" />
+	<unit unitID="001" name="redistribution" bldFile="common/generic/tools/redistribution" />
+	<unit unitID="001" name="s60_header_compat" bldFile="common/generic/tools/s60_header_compat/group" />
+	<unit unitID="001" name="isc" bldFile="common/generic/tools/s60_header_compat/isc" />
+	<unit unitID="001" name="alp2csh" bldFile="common/generic/tools/sdk_eng/alp2csh/group" />
+	<unit unitID="001" name="assertion" bldFile="common/generic/tools/sdk_eng/assertion/group" />
+	<unit unitID="001" name="build-tools" bldFile="common/generic/tools/sdk_eng/build-tools/group" />
+	<unit unitID="001" name="cjpeg" bldFile="common/generic/tools/sdk_eng/cjpeg/group" />
+	<unit unitID="001" name="cshlpcmp_backend" bldFile="common/generic/tools/sdk_eng/cshlpcmp_backend/group" />
+	<unit unitID="001" name="cshlpcmp_frontend" bldFile="common/generic/tools/sdk_eng/cshlpcmp_frontend/group" />
+	<unit unitID="001" name="cshlpcmp_gui" bldFile="common/generic/tools/sdk_eng/cshlpcmp_gui/group" />
+	<unit unitID="001" name="cwplugins" bldFile="common/generic/tools/sdk_eng/cwplugins/group" />
+	<unit unitID="001" name="emulator_launcher" bldFile="common/generic/tools/sdk_eng/emulator_launcher/group" />
+	<unit unitID="001" name="enum" bldFile="common/generic/tools/sdk_eng/enum/group" />
+	<unit unitID="001" name="envvar" bldFile="common/generic/tools/sdk_eng/envvar/group" />
+	<unit unitID="001" name="filesys" bldFile="common/generic/tools/sdk_eng/filesys/group" />
+	<unit unitID="001" name="InstallUtils" bldFile="common/generic/tools/sdk_eng/InstallUtils/group" />
+	<unit unitID="001" name="jade" bldFile="common/generic/tools/sdk_eng/jade/group" />
+	<unit unitID="001" name="javahelp" bldFile="common/generic/tools/sdk_eng/javahelp/group" />
+	<unit unitID="001" name="javalibrary" bldFile="common/generic/tools/sdk_eng/javalibrary/group" />
+	<unit unitID="001" name="langconfig" bldFile="common/generic/tools/sdk_eng/langconfig/group" />
+	<unit unitID="001" name="launch" bldFile="common/generic/tools/sdk_eng/launch/group" />
+	<unit unitID="001" name="logger" bldFile="common/generic/tools/sdk_eng/logger/group" />
+	<unit unitID="001" name="mbmcodec" bldFile="common/generic/tools/sdk_eng/mbmcodec/group" />
+	<unit unitID="001" name="mnemonicfix" bldFile="common/generic/tools/sdk_eng/mnemonicfix/group" />
+	<unit unitID="001" name="pathbrowser" bldFile="common/generic/tools/sdk_eng/pathbrowser/group" />
+	<unit unitID="001" name="perl_shared" bldFile="common/generic/tools/sdk_eng/perl_shared/group" />
+	<unit unitID="001" name="perllibrary" bldFile="common/generic/tools/sdk_eng/perllibrary/group" />
+	<unit unitID="001" name="pkgmgrgui" bldFile="common/generic/tools/sdk_eng/pkgmgrgui/group" />
+	<unit unitID="001" name="rtf2ptml" bldFile="common/generic/tools/sdk_eng/rtf2ptml/group" />
+	<unit unitID="001" name="runperl" bldFile="common/generic/tools/sdk_eng/runperl/group" />
+	<unit unitID="001" name="SDK_Builder" bldFile="common/generic/tools/sdk_eng/SDK_Builder/group" />
+	<unit unitID="001" name="sdkinfo" bldFile="common/generic/tools/sdk_eng/sdkinfo/group" />
+	<unit unitID="001" name="sdkpkg-manager" bldFile="common/generic/tools/sdk_eng/sdkpkg-manager/group" />
+	<unit unitID="001" name="sdkpkg-tools" bldFile="common/generic/tools/sdk_eng/sdkpkg-tools/group" />
+	<unit unitID="001" name="shellexec" bldFile="common/generic/tools/sdk_eng/shellexec/group" />
+	<unit unitID="001" name="sisar" bldFile="common/generic/tools/sdk_eng/sisar/group" />
+	<unit unitID="001" name="splash" bldFile="common/generic/tools/sdk_eng/splash/group" />
+	<unit unitID="001" name="swingworker" bldFile="common/generic/tools/sdk_eng/swingworker/group" />
+	<unit unitID="001" name="toolbarpanel" bldFile="common/generic/tools/sdk_eng/toolbarpanel/group" />
+	<unit unitID="001" name="tools_stubs" bldFile="common/generic/tools/sdk_eng/tools_stubs/group" />
+	<unit unitID="001" name="stlport" bldFile="common/generic/tools/stlport/group" />
+	<unit unitID="001" name="wapbase" bldFile="common/generic/wap-browser/wapbase/Group" />
+	<unit unitID="001" name="wapplugins" bldFile="common/generic/wap-browser/wapplugins/Group" />
+	<unit unitID="001" name="PushAppHandlerEx" bldFile="common/generic/wap-browser/wappush/examples/PushAppHandlerEx" />
+	<unit unitID="001" name="wappush" bldFile="common/generic/wap-browser/wappush/group" />
+	<unit unitID="001" name="MiscPushMsgUtils" bldFile="common/generic/wap-browser/wappush/MiscPushMsgUtils/group" />
+	<unit unitID="001" name="plugins" bldFile="common/generic/wap-browser/wappush/plugins/group" />
+	<unit unitID="001" name="WapUriLookup" bldFile="common/generic/wap-browser/wappush/plugins/WapUriLookup/group" />
+	<unit unitID="001" name="PushMsgEntry" bldFile="common/generic/wap-browser/wappush/PushMsgEntry/group" />
+	<unit unitID="001" name="pushmtm" bldFile="common/generic/wap-browser/wappush/pushmtm/group" />
+	<unit unitID="001" name="pushutils" bldFile="common/generic/wap-browser/wappush/pushutils/group" />
+	<unit unitID="001" name="pushwatcher" bldFile="common/generic/wap-browser/wappush/pushwatcher/group" />
+	<unit unitID="001" name="ROAPTContentHandler" bldFile="common/generic/wap-browser/wappush/ROAPTContentHandler/group" />
+	<unit unitID="001" name="ROContentHandler" bldFile="common/generic/wap-browser/wappush/ROContentHandler/group" />
+	<unit unitID="001" name="rom" bldFile="common/generic/wap-browser/wappush/rom" />
+	<unit unitID="001" name="SISLContentHandlers" bldFile="common/generic/wap-browser/wappush/SISLContentHandlers/group" />
+	<unit unitID="001" name="SISLPushMsgUtils" bldFile="common/generic/wap-browser/wappush/SISLPushMsgUtils/group" />
+	<unit unitID="001" name="tpush" bldFile="common/generic/wap-browser/wappush/tpush" />
+	<unit unitID="001" name="tpushscriptbased" bldFile="common/generic/wap-browser/wappush/tpushscriptbased" />
+	<unit unitID="001" name="WapPushSupport" bldFile="common/generic/wap-browser/WapPushSupport/Group" />
+	<unit unitID="001" name="wapmessage" bldFile="common/generic/wap-stack/wapmessage/group" />
+	<unit unitID="001" name="wapstack" bldFile="common/generic/wap-stack/wapstack/group" />
+	<unit unitID="001" name="possock" bldFile="common/generic/wap-stack/wapstack/rb-wps/possock/group" />
+	<unit unitID="001" name="wapstdlib" bldFile="common/generic/wap-stack/wapstack/rb-wps/wapstdlib/group" />
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/envelope/allexport2.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,389 @@
+<?xml version="1.0"?>
+
+<SystemDefinition name="MCL" schema="1.4.0">
+  <systemModel>
+    <layer name="common">
+      <module name="allexports">
+        <component name="envelope">
+	<unit unitID='BUILDSYSTEMTOOLS' name='tools_build' bldFile='common/generic/tools/build/group' />
+	<unit unitID='CBRTOOLS' name='tools_cbr_tools' bldFile='common/generic/tools/cbr/tools/Group' />
+	<unit unitID='CBRPRF' name='tools_cbr_prf' bldFile='common/generic/tools/cbr/prf/group' />
+	<unit unitID='DEPCHECK' name='tools_depcheck' bldFile='common/generic/tools/depcheck' />
+	<unit unitID='DEPMODEL' name='tools_depmodel' bldFile='common/generic/tools/depmodel/group' />
+	<unit unitID='E32TOOLS_EKA2' name='tools_e32tools' bldFile='cedar/generic/TOOLS/E32Tools/GROUP' />
+	<unit unitID='EVALID' name='tools_evalid' bldFile='common/generic/tools/host_utilities/evalid' />
+	<unit unitID='RCOMP' name='tools_rcomp' bldFile='common/generic/TOOLS/RCOMP/GROUP' />
+	<unit unitID='REDISTRIBUTION' name='tools_redistribution_common' bldFile='common/generic/TOOLS/REDISTRIBUTION' />
+	<unit unitID='ROMKIT_EKA2' name='tools_romkit' bldFile='cedar/generic/TOOLS/ROMKIT/GROUP' />
+	<!-- not including <unit unitID='s60headercompat' name='tools_s60_header_compat' bldFile='common/generic/tools/s60_header_compat/group' /> -->
+	<unit unitID='BLUETOOTH_LOGGER' name='bluetooth_logger' bldFile='common/generic/bluetooth/latest/bluetooth/logger/group' />
+	<unit unitID='CINIDATA' name='tools_cinidata' bldFile='common/generic/TOOLS/CINIDATA' />
+	<unit unitID='AUTOTEST' name='tools_autotest' bldFile='common/generic/TOOLS/AUTOTEST/GROUP' />
+	<unit unitID='TESTCONFIGFILEPARSER' name='tools_testconfigfileparser' bldFile='common/generic/TOOLS/testconfigfileparser/GROUP' />
+	<unit unitID='KITSETUPAPP' name='tools_devkits_kitsetupapp' bldFile='common/generic/TOOLS/DevKits/KitSetupApp/group' />
+	<unit unitID='PRODUCTINSTALLER' name='tools_custkits_productinstaller' bldFile='common/generic/TOOLS/Custkits/ProductInstaller/group' />
+	<unit unitID='REDISTRIBUTION_WINC_EKA2' name='tools_redistribution_cedar' bldFile='cedar/generic/tools/redistribution' />
+	<unit unitID='MAKEKEYS' name='security_makekeys' bldFile='common/generic/SECURITY/MakeKeys/GROUP' />
+	<unit unitID='PACKETLOOPBACKCSY' name='PacketLoopbackCSY' bldFile='common/generic/networking/test/PacketLoopbackCSY/group' />
+	<unit unitID='STLPORT' name='tools_stlport' bldFile='common/generic/tools/stlport/group' />
+	<unit unitID='RUNPERL' name='tools_sdk_eng_runperl' bldFile='common/generic/TOOLS/SDK_ENG/RUNPERL/GROUP' />
+	<unit unitID='BUILD-TOOLS' name='tools_sdk_eng_build-tools' bldFile='common/generic/TOOLS/SDK_ENG/BUILD-TOOLS/GROUP' />
+	<unit unitID='JAVALIBRARY' name='tools_sdk_eng_javalibrary' bldFile='common/generic/TOOLS/SDK_ENG/JAVALIBRARY/GROUP' />
+	<unit unitID='ASSERTION' name='tools_sdk_eng_assertion' bldFile='common/generic/TOOLS/SDK_ENG/ASSERTION/GROUP' />
+	<unit unitID='ENUM' name='tools_sdk_eng_enum' bldFile='common/generic/TOOLS/SDK_ENG/ENUM/GROUP' />
+	<unit unitID='LOGGER' name='tools_sdk_eng_logger' bldFile='common/generic/TOOLS/SDK_ENG/LOGGER/GROUP' />
+	<unit unitID='FILESYS' name='tools_sdk_eng_filesys' bldFile='common/generic/TOOLS/SDK_ENG/FILESYS/GROUP' />
+	<unit unitID='ENVVAR' name='tools_sdk_eng_envvar' bldFile='common/generic/TOOLS/SDK_ENG/ENVVAR/GROUP' />
+	<unit unitID='INSTALLUTILS' name='tools_sdk_eng_installutils' bldFile='common/generic/TOOLS/SDK_ENG/INSTALLUTILS/GROUP' />
+	<unit unitID='MNEMONICFIX' name='tools_sdk_eng_mnemonicfix' bldFile='common/generic/TOOLS/SDK_ENG/MNEMONICFIX/GROUP' />
+	<unit unitID='PATHBROWSER' name='tools_sdk_eng_pathbrowser' bldFile='common/generic/TOOLS/SDK_ENG/PATHBROWSER/GROUP' />
+	<unit unitID='SHELLEXEC' name='tools_sdk_eng_shellexec' bldFile='common/generic/TOOLS/SDK_ENG/SHELLEXEC/GROUP' />
+	<unit unitID='SWINGWORKER' name='tools_sdk_eng_swingworker' bldFile='common/generic/TOOLS/SDK_ENG/SWINGWORKER/GROUP' />
+	<unit unitID='TESTCASERUNNER' name='tools_sdk_eng_testcaserunner' bldFile='common/generic/TOOLS/SDK_ENG/TESTCASERUNNER/GROUP' />
+	<unit unitID='TOOLBARPANEL' name='tools_sdk_eng_toolbarpanel' bldFile='common/generic/TOOLS/SDK_ENG/TOOLBARPANEL/GROUP' />
+	<unit unitID='JAVAHELP' name='tools_sdk_eng_javahelp' bldFile='common/generic/TOOLS/SDK_ENG/JAVAHELP/GROUP' />
+	<unit unitID='LANGCONFIG' name='tools_sdk_eng_langconfig' bldFile='common/generic/TOOLS/SDK_ENG/LANGCONFIG/GROUP' />
+	<unit unitID='MBMCODEC' name='tools_sdk_eng_mbmcodec' bldFile='common/generic/TOOLS/SDK_ENG/MBMCODEC/GROUP' />
+	<unit unitID='SDKINFO' name='tools_sdk_eng_sdkinfo' bldFile='common/generic/TOOLS/SDK_ENG/SDKINFO/GROUP' />
+	<unit unitID='JADE' name='tools_sdk_eng_jade' bldFile='common/generic/TOOLS/SDK_ENG/JADE/GROUP' />
+	<unit unitID='CSHLPCMP_GUI' name='tools_sdk_eng_cshlpcmp_gui' bldFile='common/generic/TOOLS/SDK_ENG/CSHLPCMP_GUI/GROUP' />
+	<unit unitID='SISAR' name='tools_sdk_eng_sisar' bldFile='common/generic/TOOLS/SDK_ENG/SISAR/GROUP' />
+	<unit unitID='SDKPKG-MANAGER' name='tools_sdk_eng_sdkpkg-manager' bldFile='common/generic/TOOLS/SDK_ENG/SDKPKG-MANAGER/GROUP' />
+	<unit unitID='SDKPKG-TOOLS' name='tools_sdk_eng_sdkpkg-tools' bldFile='common/generic/TOOLS/SDK_ENG/SDKPKG-TOOLS/GROUP' />
+	<unit unitID='EMULATOR_LAUNCHER' name='tools_sdk_eng_emulator_launcher' bldFile='common/generic/TOOLS/SDK_ENG/EMULATOR_LAUNCHER/GROUP' />
+	<unit unitID='PKGMGRGUI' name='tools_sdk_eng_pkgmgrgui' bldFile='common/generic/TOOLS/SDK_ENG/PKGMGRGUI/GROUP' />
+	<unit unitID='LAUNCH' name='tools_sdk_eng_launch' bldFile='common/generic/TOOLS/SDK_ENG/LAUNCH/GROUP' />
+	<unit unitID='TOOLS_STUBS' name='tools_sdk_eng_tools_stubs' bldFile='common/generic/TOOLS/SDK_ENG/TOOLS_STUBS/GROUP' />
+	<unit unitID='CWPLUGINS' name='tools_sdk_eng_cwplugins' bldFile='common/generic/TOOLS/SDK_ENG/CWPLUGINS/GROUP' />
+	<unit unitID='BSPBUILDER' name='tools_bspbuilder' bldFile='common/generic/TOOLS/BSPBUILDER/GROUP' />
+	<unit unitID='ALP2CSH' name='tools_sdk_eng_alp2csh' bldFile='common/generic/TOOLS/SDK_ENG/ALP2CSH/GROUP' />
+	<unit unitID='CJPEG' name='tools_sdk_eng_cjpeg' bldFile='common/generic/TOOLS/SDK_ENG/CJPEG/GROUP' />
+	<unit unitID='CSHLPCMP_FRONTEND' name='tools_sdk_eng_cshlpcmp_frontend' bldFile='common/generic/TOOLS/SDK_ENG/CSHLPCMP_FRONTEND/GROUP' />
+	<unit unitID='PERLLIBRARY' name='tools_sdk_eng_perllibrary' bldFile='common/generic/TOOLS/SDK_ENG/PERLLIBRARY/GROUP' />
+	<unit unitID='PERLSHARED' name='tools_sdk_eng_perl_shared' bldFile='common/generic/tools/sdk_eng/perl_shared/group' />
+	<unit unitID='RTF2PTML' name='tools_sdk_eng_rtf2ptml' bldFile='common/generic/TOOLS/SDK_ENG/RTF2PTML/GROUP' />
+	<unit unitID='SPLASH' name='tools_sdk_eng_splash' bldFile='common/generic/TOOLS/SDK_ENG/SPLASH/GROUP' />
+	<unit unitID='SDK_BUILDER' name='tools_sdk_eng_sdk_builder' bldFile='common/generic/TOOLS/sdk_eng/sdk_builder/GROUP' />
+<!--	<unit unitID='WINS_VARIANT_EKA2' name='base_wins' bldFile='cedar/generic/base/wins' /> -->
+	<unit unitID='LUBBOCK_EKA2' name='base_lubbock' bldFile='cedar/generic/BASE/LUBBOCK' />
+	<unit unitID='OMAP_H2' name='base_omaph2' bldFile='cedar/generic/base/omap/h2' />
+	<unit unitID='BASE_H2_UNISTORE2' name='base_h2_unistore2' bldFile='cedar/generic/base/omap/h2_restricted/unistore2' />
+	<unit unitID='BASE_H2_SDIO' name='base_h2_sdio' bldFile='cedar/generic/base/omap/h2_restricted/sdio' />
+	<unit unitID='OMAPH4HRP' name='base_omaph4hrp' bldFile='cedar/generic/base/omap_hrp/h4' />
+	<unit unitID='H4BOOTLOADER' name='base_omaph4hrp_bootldr' bldFile='cedar/generic/base/omap_hrp/h4_bootloader' />
+	<unit unitID='H4MEBOOTLOADER' name='base_omaph4hrp_mebootldr' bldFile='cedar/generic/base/omap_hrp/h4_mebootloader' />
+	<unit unitID='OMAPH4HRP_UNISTORE2' name='base_omaph4hrp_unistore2' bldFile='cedar/generic/base/omap_hrp/h4_restricted/unistore2' />
+	<unit unitID='OMAPH4HRP_SDIO' name='base_omaph4hrp_sdio' bldFile='cedar/generic/base/omap_hrp/h4_restricted/sdio' />
+	<unit unitID='LMNAND2_LOGIC' name='base_integrator_logic_lmnand2' bldFile='cedar/generic/base/integrator/logic/lmnand2' />
+	<unit unitID='UNISTORE2_DRIVERS' name='base_drivers_unistore2' bldFile='cedar/generic/base/e32/drivers/unistore2' />
+	<unit unitID='UNISTORE2_CRASHFLASH' name='base_crashflash_unistore2' bldFile='cedar/generic/base/e32/drivers/crashflash/unistore2' />
+	<unit unitID='UNISTORE2_NANDBOOT' name='base_nandboot_unistore2' bldFile='cedar/generic/base/e32utils/nandboot/nandloader/unistore2' />
+	<unit unitID='SCREENDRIVER' name='graphics_screendriver' bldFile='common/generic/GRAPHICS/ScreenDriver/Group' />
+	<unit unitID='C32BCA' name='networking_c32bca' bldFile='common/generic/NETWORKING/BasebandAdaptation/c32bca/group' />
+	<unit unitID='E32_EKA2' name='base_e32' bldFile='cedar/generic/BASE/E32' />
+	<unit unitID='E32_COMPSUPP' name='base_e32_compsupp' bldFile='cedar/generic/BASE/E32/compsupp' />
+	<unit unitID='SDCARD3C' name='base_e32_sd3c' bldFile='cedar/generic/base/e32/drivers/pbus/mmc/sdcard/sdcard3c' />
+	<unit unitID='SDCARD4C' name='base_e32_sd4c' bldFile='cedar/generic/base/e32/drivers/pbus/mmc/sdcard/sdcard4c' />
+	<unit unitID='LOCE32_ONGOING' name='base_loce32' bldFile='common/generic/BASE/LOCE32/ongoing' />
+	<unit unitID='F32_EKA2' name='base_f32' bldFile='cedar/generic/BASE/F32/GROUP' />
+	<unit unitID='F32TEST_EKA2' name='base_f32test' bldFile='cedar/generic/BASE/F32TEST/GROUP' />
+	<unit unitID='FATCHARSETCONV' name='syslibs_FATCharsetConv' bldFile='common/generic/syslibs/FATCharsetConv/GROUP' />
+	<unit unitID='HAL_EKA2' name='base_hal' bldFile='cedar/generic/BASE/HAL' />
+	<unit unitID='SYSAGENT2' name='syslibs_sysagent2' bldFile='common/generic/SYSLIBS/SYSAGENT2/GROUP' />
+	<unit unitID='SCHSVR_ONGOING' name='syslibs_schsvr' bldFile='common/generic/SYSLIBS/SCHSVR/ongoing/GROUP' />
+	<unit unitID='AUTHSERVER' name='security_authserver' bldFile='common/generic/security/authserver/group' />
+	<unit unitID='SYSSTART' name='app-framework_sysstart' bldFile='common/generic/app-framework/sysstart/group' />
+	<unit unitID='EMIME' name='app-framework_emime' bldFile='common/generic/APP-FRAMEWORK/EMIME/GROUP' />
+	<unit unitID='EZLIB' name='syslibs_ezlib' bldFile='common/generic/SYSLIBS/EZLIB/GROUP' />
+	<unit unitID='SECURITYCOMMON' name='security_common' bldFile='common/generic/SECURITY/COMMON/GROUP' />
+	<unit unitID='SECURITYCONFIG' name='security_config' bldFile='common/generic/security/securityconfig/group' />
+	<unit unitID='CRYPTOGRAPHY' name='security_crypto_weak' bldFile='common/generic/SECURITY/CRYPTO/GROUP' />
+	<unit unitID='STRONG_CRYPTO' name='security_crypto_strong' bldFile='common/generic/security/crypto/strong' />
+	<unit unitID='CRYPTOGRAPHY' name='security_cryptospi' bldFile='common/generic/SECURITY/cryptospi/group' />
+	<unit unitID='STDLIB' name='syslibs_stdlib' bldFile='common/generic/SYSLIBS/STDLIB/GROUP' />
+	<unit unitID='OECORE' name='openenv' bldFile='common/generic/openenv/core/group' />
+	<unit unitID='FEATREG' name='syslibs_featreg' bldFile='common/generic/syslibs/featreg/group' />
+	<unit unitID='ECOM_ONGOING' name='syslibs_ecom' bldFile='common/generic/SYSLIBS/ECOM/ongoing/GROUP' />
+	<unit unitID='PWRCLI' name='syslibs_pwrcli' bldFile='common/generic/SYSLIBS/PWRCLI/GROUP' />
+	<unit unitID='DOMAIN' name='base_domain' bldFile='cedar/generic/base/domain/group' />
+	<unit unitID='BAFL' name='syslibs_bafl' bldFile='common/generic/SYSLIBS/BAFL/GROUP' />
+	<unit unitID='CHARCONV_ONGOING' name='syslibs_charconv' bldFile='common/generic/SYSLIBS/Charconv/Ongoing/GROUP' />
+	<unit unitID='LOGENGONGOING' name='syslibs_logeng' bldFile='common/generic/SYSLIBS/LOGENG/ONGOING/GROUP' />
+	<unit unitID='FLOGGER' name='comms-infras_flogger' bldFile='common/generic/COMMS-INFRAS/Flogger/GROUP' />
+	<unit unitID='COMMSDEBUGUTILITY' name='comms-infras_commsdebugutility' bldFile='common/generic/comms-infras/commsdebugutility/GROUP' />
+	<unit unitID='CAF2' name='syslibs_caf2' bldFile='common/generic/syslibs/CAF2/GROUP' />
+	<unit unitID='CAF2CONFIG' name='syslibs_reccafconfig' bldFile='common/generic/syslibs/caf2/reccafconfig' />
+	<unit unitID='XML' name='syslibs_xml' bldFile='common/generic/syslibs/xml/group' />
+	<unit unitID='STORE' name='syslibs_store' bldFile='common/generic/SYSLIBS/Store/GROUP' />
+	<unit unitID='DBMS' name='syslibs_dbms' bldFile='common/generic/SYSLIBS/DBMS/GROUP' />
+	<unit unitID='DBMSSQL' name='syslibs_dbmssql' bldFile='common/generic/syslibs/dbms/esql/group' />
+	<unit unitID='CENTRALREPOSITORY' name='syslibs_centralrepository' bldFile='common/generic/syslibs/centralrepository/group' />
+	<unit unitID='SQL' name='syslibs_sql' bldFile='common/generic/syslibs/sql/group' />
+	<unit unitID='ROOTSERVER' name='comms-infras_rootserver' bldFile='common/generic/comms-infras/rootserver/GROUP' />
+	<unit unitID='COMMDB_SHIM' name='Comms Database SHIM' bldFile='common/generic/COMMS-INFRAS/Commdb/GROUP' />
+	<unit unitID='COMMSDAT' name='comms-infras_commsdat' bldFile='common/generic/COMMS-INFRAS/Commsdat/GROUP' />
+	<unit unitID='DEFAULTCOMMDB' name='comms-infras_defaultcommdb' bldFile='common/generic/COMMS-INFRAS/Commsdat/defaultcommdb/GROUP' />
+	<unit unitID='INSTALLDEFAULTCOMMDB' name='comms-infras_installdefaultcommdb' bldFile='common/generic/COMMS-INFRAS/Commsdat/installdefaultcommdb/GROUP' />
+	<unit unitID='C32' name='ser-comms_c32' bldFile='common/generic/SER-COMMS/C32/GROUP' />
+	<unit unitID='C32-config' name='ser-comms_c32-config' bldFile='common/generic/ser-comms/c32/data' />
+	<!-- excluding <unit unitID='ESOCK' name='comms-infras_esock' bldFile='common/generic/COMMS-INFRAS/ESOCK/version2/GROUP' /> -->
+	<unit unitID='ESOCK399' name='comms-infras_esock' bldFile='common/generic/COMMS-INFRAS/ESOCK/GROUP' />
+	<unit unitID='NIFMAN' name='comms-infras_nifman' bldFile='common/generic/COMMS-INFRAS/NIFMAN/GROUP' />
+	<unit unitID='DIALOG' name='networking_dialog' bldFile='common/generic/NETWORKING/DIALOG/GROUP' />
+	<unit unitID='DIALOG_DEFAULT' name='networking_dialog_default' bldFile='common/generic/networking/dialog/default' />
+	<unit unitID='NETCON' name='networking_netcon' bldFile='common/generic/NETWORKING/NETCON/GROUP' />
+	<unit unitID='COMMSFW' name='comms-infras_commsfw' bldFile='common/generic/comms-infras/commsfw/GROUP' />
+	<unit unitID='ELEMENTS' name='comms-infras_elements' bldFile='common/generic/COMMS-INFRAS/elements/group' />
+	<unit unitID='MBUFMAN' name='comms-infras_mbufmgr' bldFile='common/generic/comms-infras/mbufmgr/GROUP' />
+	<unit unitID='BCA' name='networking_bca' bldFile='common/generic/NETWORKING/BasebandAdaptation/bca/group' />
+	<!-- not including <unit unitID='ISC' name='networking_isc' bldFile='common/generic/NETWORKING/BasebandAdaptation/isc/group' /> -->
+	<unit unitID='DIAL' name='telephony_dial' bldFile='common/generic/TELEPHONY/DIAL/GROUP' />
+	<unit unitID='TELEPHONY_WATCHERS' name='telephony_watchers' bldFile='common/generic/telephony/watchers/group' />
+	<unit unitID='ETEL' name='telephony_etel' bldFile='common/generic/TELEPHONY/ETEL/GROUP' />
+	<unit unitID='ETEL3RDPARTY' name='telephony_etel3rdparty' bldFile='common/generic/TELEPHONY/ETel3rdParty/GROUP' />
+	<unit unitID='ETELMM' name='telephony_etelmm' bldFile='common/generic/TELEPHONY/ETELMM/GROUP' />
+	<unit unitID='ETELPCKT' name='telephony_etelpckt' bldFile='common/generic/TELEPHONY/etelpckt/group' />
+	<unit unitID='ETELSAT' name='telephony_etelsat' bldFile='common/generic/TELEPHONY/ETELSAT/GROUP' />
+	<unit unitID='ETELCDMA' name='telephony_etelcdma' bldFile='common/generic/telephony/etelcdma/group' />
+	<unit unitID='SMSSTACKV2' name='nbprotocols_smsstackv2' bldFile='common/generic/NBPROTOCOLS/SMSSTACKV2/GROUP' />
+	<unit unitID='CDMASMSSTACK' name='nbprotocols_cdmasmsstack' bldFile='common/generic/NBPROTOCOLS/CDMASMSSTACK/GROUP' />
+	<unit unitID='MMTSY' name='telephony_mmtsy' bldFile='common/generic/TELEPHONY/mmtsy/group' />
+	<unit unitID='CDMATSY' name='telephony_cdmatsy' bldFile='common/generic/TELEPHONY/cdmatsy/group' />
+	<unit unitID='SIMTSY' name='telephony_simtsy' bldFile='common/generic/TELEPHONY/simtsy/group' />
+	<unit unitID='TRP' name='telephony_trp' bldFile='common/generic/telephony/trp/group' />
+	<unit unitID='DND' name='networking_dnd' bldFile='common/generic/NETWORKING/dnd/group' />
+	<unit unitID='DHCP' name='networking_dhcp' bldFile='common/generic/NETWORKING/dhcp/group' />
+	<unit unitID='INSOCK' name='networking_insock' bldFile='common/generic/NETWORKING/insock/group' />
+	<unit unitID='NETWORKING_GENERAL' name='networking_general' bldFile='common/generic/networking/General/group' />
+	<unit unitID='IPEVENTNOTIFIER' name='networking_ipeventnotifier' bldFile='common/generic/networking/ipeventnotifier/group' />
+	<unit unitID='TCPIP6' name='networking_tcpip6' bldFile='common/generic/NETWORKING/TCPIP6/GROUP' />
+	<unit unitID='NETWORKING_EXAMPLECODE' name='IP Hook Examples' bldFile='common/generic/NETWORKING/examplecode/GROUP' />
+	<unit unitID='INHOOK6' name='networking_inhook6' bldFile='common/generic/NETWORKING/inhook6/group' />
+	<unit unitID='QOS' name='networking_qos' bldFile='common/generic/NETWORKING/QOS/GROUP' />
+	<unit unitID='QOSLIB' name='networking_qoslib' bldFile='common/generic/NETWORKING/QOSLIB/GROUP' />
+	<unit unitID='PFQOSLIB' name='networking_pfqoslib' bldFile='common/generic/NETWORKING/PFQOSLIB/GROUP' />
+	<unit unitID='NAPT' name='networking_napt' bldFile='common/generic/networking/napt/group' />
+	<!-- excluding <unit unitID='IPCPR' name='networking_ipcpr' bldFile='common/generic/NETWORKING/ip/version1/IPCPR/GROUP' /> -->
+	<!-- excluding <unit unitID='SHIMCPR' name='networking_shimcpr' bldFile='common/generic/comms-infras/nifman/version1/shimcpr/GROUP' /> -->
+	<!-- excluding <unit unitID='IPSCPR' name='networking_ipscpr' bldFile='common/generic/NETWORKING/umts/version1/ipscpr/GROUP' /> -->
+	<!-- excluding <unit unitID='REFERENCECPR' name='networking_ReferenceCPR' bldFile='common/generic/NETWORKING/ip/version1/referencecpr/GROUP' /> -->
+	<!-- excluding <unit unitID='REFERENCESCPR' name='networking_ReferenceSCPR' bldFile='common/generic/NETWORKING/umts/version1/referencescpr/GROUP' /> -->
+	<unit unitID='QOS3GPP' name='networking_qos3gpp' bldFile='common/generic/networking/umts/qos3gpp/group' />
+	<!-- excluding <unit unitID='UMTSGPRSSCPR' name='networking_UmtsGprsSCPR' bldFile='common/generic/NETWORKING/umts/version1/UmtsGprsSCPR/GROUP' /> -->
+	<unit unitID='IPPROTO' name='networking_ipproto' bldFile='common/generic/networking/ip/ipproto/group' />
+	<unit unitID='IPTRANSPORT' name='networking_iptransport' bldFile='common/generic/networking/ip/iptransport/group' />
+	<unit unitID='PDP' name='networking_pdp' bldFile='common/generic/networking/umts/pdp/group' />
+	<unit unitID='QOSIPSCPR' name='networking_qosipscpr' bldFile='common/generic/networking/umts/qosipscpr/group' />
+	<unit unitID='CSDAGT' name='networking_csdagt' bldFile='common/generic/NETWORKING/CSDAGT/GROUP' />
+	<unit unitID='PSDAGT' name='networking_psdagt' bldFile='common/generic/NETWORKING/PSDAGT/GROUP' />
+	<unit unitID='NULLAGT' name='networking_nullagt' bldFile='common/generic/NETWORKING/NULLAGT/GROUP' />
+	<unit unitID='GUQOS' name='networking_guqos' bldFile='common/generic/NETWORKING/GUQOS/GROUP' />
+	<unit unitID='UMTSIF' name='networking_umtsif' bldFile='common/generic/NETWORKING/UMTSIF/GROUP' />
+	<unit unitID='QOSEXTNAPI' name='networking_qosextnapi' bldFile='common/generic/networking/qosextnapi/group' />
+	<unit unitID='SPUD' name='networking_spud' bldFile='common/generic/NETWORKING/SPUD/GROUP' />
+	<unit unitID='EAP' name='networking_eap' bldFile='common/generic/networking/eap/group' />
+	<unit unitID='ETHER802' name='networking_ether802' bldFile='common/generic/NETWORKING/ETHER802/GROUP' />
+	<!-- excluding <unit unitID='PPP' name='networking_ppp' bldFile='common/generic/NETWORKING/PPP/version1/GROUP' /> -->
+	<unit unitID='PPP399' name='networking_ppp' bldFile='common/generic/NETWORKING/PPP/GROUP' />
+	<unit unitID='PREDCOMP' name='networking_predcomp' bldFile='common/generic/NETWORKING/PREDCOMP/GROUP' />
+	<unit unitID='MSCOMP' name='networking_mscomp' bldFile='common/generic/NETWORKING/MSComp/GROUP' />
+	<unit unitID='STACCOMP' name='networking_staccomp' bldFile='common/generic/NETWORKING/STACCOMP/GROUP' />
+	<unit unitID='SLIP' name='networking_slip' bldFile='common/generic/NETWORKING/SLIP/GROUP' />
+	<unit unitID='TUNNELNIF' name='networking_tunnelnif' bldFile='common/generic/NETWORKING/tunnelnif/group' />
+	<unit unitID='PACKETLOGGER' name='networking_packetlogger' bldFile='common/generic/NETWORKING/packetlogger/group' />
+	<unit unitID='RAWIPNIF' name='networking_rawipnif' bldFile='common/generic/NETWORKING/rawipnif/group' />
+	<unit unitID='WIFI_802_11' name='networking_802.11' bldFile='common/generic/networking/802.11/group' />
+	<unit unitID='USB' name='ser-comms_usb' bldFile='common/generic/SER-COMMS/USB/GROUP' />
+	<unit unitID='BLUETOOTH_MANAGER' name='bluetooth_manager' bldFile='common/generic/bluetooth/latest/bluetooth/manager' />
+	<unit unitID='BLUETOOTH_BTEXTNOTIFIERS' name='bluetooth_btextnotifiers' bldFile='common/generic/bluetooth/latest/bluetooth/BTExtNotifiers' />
+	<unit unitID='BLUETOOTH_CONFIG' name='bluetooth_config' bldFile='common/generic/bluetooth/latest/bluetooth/config' />
+	<unit unitID='BLUETOOTH_GAVDP' name='bluetooth_gavdp' bldFile='common/generic/bluetooth/latest/bluetooth/profiles/gavdp/group' />
+	<unit unitID='BLUETOOTH_ROM' name='bluetooth_rom' bldFile='common/generic/bluetooth/latest/bluetooth/rom' />
+	<unit unitID='BLUETOOTH_USER' name='bluetooth_user' bldFile='common/generic/bluetooth/latest/bluetooth/user' />
+	<unit unitID='HCI_V2_FRAMEWORK' name='bluetooth_hci_v2_framework' bldFile='common/generic/bluetooth/latest/bluetooth/hci_v2/framework/group' />
+	<unit unitID='BLUETOOTH_SDP' name='bluetooth_sdp' bldFile='common/generic/bluetooth/latest/bluetooth/sdp' />
+	<unit unitID='BLUETOOTH_REMOTECONTROL' name='bluetooth_remotecontrol' bldFile='common/generic/bluetooth/latest/bluetooth/remotecontrol/group' />
+	<unit unitID='BLUETOOTH_STACK' name='bluetooth_stack' bldFile='common/generic/bluetooth/latest/bluetooth/stack' />
+	<unit unitID='BLUETOOTH_HCI' name='bluetooth_hci' bldFile='common/generic/bluetooth/latest/bluetooth/hci' />
+	<unit unitID='BLUETOOTH_HCIPROXY' name='bluetooth_hciproxy' bldFile='common/generic/bluetooth/latest/bluetooth/HCIProxy' />
+	<unit unitID='HCI_V2_IMPLEMENTATIONS' name='bluetooth_hci_v2_implementations' bldFile='common/generic/bluetooth/latest/bluetooth/hci_v2/implementations/group' />
+	<unit unitID='IRDA' name='infra-red_irda' bldFile='common/generic/INFRA-RED/IRDA/GROUP' />
+	<unit unitID='INFRA-RED_CONFIG' name='infra-red_config' bldFile='common/generic/INFRA-RED/config' />
+	<unit unitID='BLUETOOTH_BTCOMM' name='bluetooth_btcomm' bldFile='common/generic/bluetooth/latest/bluetooth/btcomm' />
+	<unit unitID='MDF' name='multimedia_mdf' bldFile='common/generic/multimedia/mdf/group' />
+	<unit unitID='OPENMAX' name='multimedia_openmax' bldFile='common/generic/multimedia/openmax/group' />
+	<unit unitID='MMF' name='multimedia_mmf' bldFile='common/generic/MULTIMEDIA/MMF/GROUP' />
+	<unit unitID='COMMON' name='multimedia_common' bldFile='common/generic/MULTIMEDIA/MMCOMMON/GROUP' />
+	<unit unitID='CHAR' name='multimedia_mmf_char' bldFile='common/generic/MULTIMEDIA/char/mmf/group' />
+	<unit unitID='ICL' name='multimedia_icl' bldFile='common/generic/MULTIMEDIA/ICL/GROUP' />
+	<unit unitID='ECAM' name='multimedia_ecam' bldFile='common/generic/MULTIMEDIA/ECAM/GROUP' />
+	<unit unitID='TUNER' name='multimedia_tuner' bldFile='common/generic/MULTIMEDIA/tuner/GROUP' />
+	<unit unitID='WSERV8.1' name='graphics_wserv' bldFile='common/generic/GRAPHICS/Wserv/group' />
+	<unit unitID='OPENGLESDISPLAYPROPERTY' name='graphics_openglesdisplayproperty' bldFile='common/generic/graphics/OpenGLESDisplayProperty/group' />
+	<unit unitID='OPENGLSHEADERS' name='graphics_openglesheaders' bldFile='common/generic/graphics/OpenGLESHeaders/group' />
+	<unit unitID='OPENGLES9.X' name='graphics_opengles' bldFile='common/generic/graphics/OpenGLES/group/' />
+	<unit unitID='PDRSTORE' name='graphics_pdrstore' bldFile='common/generic/GRAPHICS/PDRSTORE/GROUP' />
+	<unit unitID='PRINTDRV' name='graphics_printdrv' bldFile='common/generic/GRAPHICS/PRINTDRV/GROUP' />
+	<unit unitID='ICULAYOUTENGINE' name='graphics_iculayoutengine' bldFile='common/generic/GRAPHICS/iculayoutengine/GROUP' />
+	<unit unitID='FBSERV' name='graphics_fbserv' bldFile='common/generic/GRAPHICS/Fbserv/GROUP' />
+	<unit unitID='FNTSTORE' name='graphics_fntstore' bldFile='common/generic/GRAPHICS/Fntstore/GROUP' />
+	<unit unitID='FREETYPE' name='graphics_freetype' bldFile='common/generic/GRAPHICS/Freetype/GROUP' />
+	<unit unitID='FONTS' name='graphics_fonts' bldFile='common/generic/GRAPHICS/Fonts/GROUP' />
+	<unit unitID='BITGDI' name='graphics_bitgdi' bldFile='common/generic/GRAPHICS/Bitgdi/GROUP' />
+	<unit unitID='GDI' name='graphics_gdi' bldFile='common/generic/GRAPHICS/GDI/GROUP' />
+	<unit unitID='PALETTE' name='graphics_palette' bldFile='common/generic/GRAPHICS/palette/group' />
+	<unit unitID='OPENVGHEADERS' name='graphics_openvgheaders' bldFile='common/generic/graphics/openvgheaders/group' />
+	<unit unitID='OPENVG' name='graphics_openvg' bldFile='common/generic/graphics/OpenVG/group/' />
+	<unit unitID='EGLVGHEADERS' name='graphics_eglheaders' bldFile='common/generic/graphics/eglheaders/group' />
+	<unit unitID='EGL' name='graphics_egl' bldFile='common/generic/graphics/egl/group/' />
+	<unit unitID='LOCATIONFRAMEWORK' name='lbs_locationframework' bldFile='common/generic/lbs/group' />
+	<unit unitID='LBSDATASOURCEPLUGINS' name='lbs_datasourceplugins' bldFile='common/generic/lbs/LbsLocDataSourcePlugins/group' />
+	<unit unitID='CONARC' name='app-framework_conarc' bldFile='common/generic/APP-FRAMEWORK/CONARC/GROUP' />
+	<unit unitID='CHTMLTOCRTCONVERTER' name='app-services_chtmltocrtconv' bldFile='common/generic/APP-SERVICES/CHTMLTOCRTCONV/GROUP' />
+	<unit unitID='CONVERT' name='app-engines_convert' bldFile='common/generic/APP-ENGINES/CONVERT/GROUP' />
+	<unit unitID='RICHTEXTTOHTMLCONV' name='app-services_richtexttohtmlconv' bldFile='common/generic/APP-SERVICES/RICHTEXTTOHTMLCONV/GROUP' />
+	<unit unitID='ETEXT' name='app-framework_etext' bldFile='common/generic/APP-FRAMEWORK/ETEXT/GROUP' />
+	<unit unitID='FORM' name='app-framework_form' bldFile='common/generic/APP-FRAMEWORK/FORM/GROUP' />
+	<unit unitID='ALARMSERVER' name='app-services_alarmserver' bldFile='common/generic/APP-SERVICES/AlarmServer/GROUP' />
+	<unit unitID='HLPMODEL' name='app-services_hlpmodel' bldFile='common/generic/APP-SERVICES/HLPMODEL/GROUP' />
+	<unit unitID='WORLDSERVER' name='app-services_worldserver' bldFile='common/generic/APP-SERVICES/WorldServer/GROUP' />
+	<unit unitID='TZ' name='app-services_tz' bldFile='common/generic/APP-SERVICES/tz/GROUP' />
+	<unit unitID='TIMEZONELOCALIZATION' name='app-services_timezonelocalization' bldFile='common/generic/APP-SERVICES/TimeZoneLocalization/GROUP' />
+	<unit unitID='TZLOCALIZATIONRSCFACTORY' name='app-services_tzlocalizationrscfactory' bldFile='common/generic/APP-SERVICES/TzLocalizationRscFactory/GROUP' />
+	<unit unitID='TZCOMPILER' name='app-services_tzcompiler' bldFile='common/generic/APP-SERVICES/tzcompiler/GROUP' />
+	<unit unitID='TZDB' name='app-services_tzdb' bldFile='common/generic/APP-SERVICES/tzdb/GROUP' />
+	<unit unitID='CONTENT_HANDLING' name='Content-Handling' bldFile='common/generic/Content-Handling/GROUP' />
+	<unit unitID='MSG_GMXML' name='messaging_gmxml' bldFile='common/generic/messaging/gmxml/group' />
+	<unit unitID='RECOGNISERS' name='application-protocols_recognisers' bldFile='common/generic/APPLICATION-PROTOCOLS/RECOGNISERS/GROUP' />
+	<unit unitID='PRINT' name='app-framework_print' bldFile='common/generic/APP-FRAMEWORK/PRINT/GROUP' />
+	<unit unitID='SECURESOFTWAREINSTALL' name='security_swi' bldFile='common/generic/SECURITY/SWI/GROUP' />
+	<unit unitID='SISINSTALLER' name='security_sisinstaller' bldFile='common/generic/SECURITY/SISInstaller/Group' />
+	<unit unitID='JAVAMIDLETINSTALLER' name='security_javaMIDletInstaller' bldFile='common/generic/SECURITY/JavaMIDletInstaller/Group' />
+	<unit unitID='CRYPTOTOKENS' name='security_cryptotokens' bldFile='common/generic/SECURITY/CRYPTOTOKENS/GROUP' />
+	<unit unitID='FILETOKENS' name='security_filetokens' bldFile='common/generic/security/filetokens/group' />
+	<unit unitID='CERTMAN' name='security_certman' bldFile='common/generic/SECURITY/Certman/GROUP' />
+	<unit unitID='TLS' name='networking_tls' bldFile='common/generic/networking/tls/group' />
+	<unit unitID='TLSPROVIDER' name='security_tlsprovider' bldFile='common/generic/security/tlsprovider/group' />
+	<unit unitID='IPSECV2' name='networking_ipsec' bldFile='common/generic/NETWORKING/ipsec/group' />
+	<unit unitID='HTTP' name='application-protocols_http2' bldFile='common/generic/application-protocols/http/protocol/group' />
+	<unit unitID='HTTP' name='application-protocols_http3' bldFile='common/generic/application-protocols/http/examples/testwebbrowser/group' />
+	<unit unitID='HTTP' name='application-protocols_http5' bldFile='common/generic/application-protocols/http/examples/pipeliningconfigfilter/group' />
+	<unit unitID='HTTP' name='application-protocols_http6' bldFile='common/generic/application-protocols/http/examples/cookies/group' />
+	<unit unitID='HTTP' name='application-protocols_http7' bldFile='common/generic/application-protocols/http/examples/uaprof/group' />
+	<unit unitID='HTTP' name='application-protocols_http9' bldFile='common/generic/application-protocols/http/examples/group' />
+	<unit unitID='HTTP' name='application-protocols_http10' bldFile='common/generic/application-protocols/http/transport/group' />
+	<unit unitID='HTTP' name='application-protocols_http12' bldFile='common/generic/application-protocols/http/framework/group' />
+	<unit unitID='WAPPLUGINS' name='wap-browser_wapplugins' bldFile='common/generic/wap-browser/wapplugins/group' />
+	<unit unitID='WAPPUSH' name='wap-browser_wappush' bldFile='common/generic/wap-browser/wappush/group' />
+	<unit unitID='FTP' name='networking_ftp_e' bldFile='common/generic/NETWORKING/ftp_e/group' />
+	<unit unitID='TELNET_E' name='networking_telnet_e' bldFile='common/generic/NETWORKING/TELNET_E/GROUP' />
+	<unit unitID='OBEX' name='obex' bldFile='common/generic/obex/group' />
+	<unit unitID='OBEX_EXTENSIONAPIS' name='obex_extensionapis' bldFile='common/generic/obex/obexextensionapis/group' />
+	<unit unitID='INETPROTUTIL' name='application-protocols_inetprotutil' bldFile='common/generic/APPLICATION-PROTOCOLS/INETPROTUTIL/GROUP' />
+	<unit unitID='INETURILIST' name='application-protocols_ineturilist' bldFile='common/generic/application-protocols/ineturilist/group' />
+	<unit unitID='BOOKMARK_SUPPORT' name='application-protocols_bookmarks' bldFile='common/generic/application-protocols/bookmarks/group' />
+	<unit unitID='BLUETOOTH_AVRCP' name='bluetooth_avrcp' bldFile='common/generic/bluetooth/latest/bluetooth/profiles/avrcp' />
+	<unit unitID='BLUETOOTH_ACCESSHOST' name='bluetooth_accesshost' bldFile='common/generic/bluetooth/latest/bluetooth/profiles/pbap/group' />
+	<unit unitID='BLUETOOTH_PAN' name='bluetooth_pan' bldFile='common/generic/bluetooth/latest/bluetooth/profiles/pan/group' />
+	<unit unitID='WAPMESSAGE' name='wap-stack_wapmessage' bldFile='common/generic/WAP-STACK/WAPMESSAGE/GROUP' />
+	<unit unitID='WAPSTACK' name='WAP Stack Wrapper' bldFile='common/generic/WAP-STACK/WAPSTACK/GROUP' />
+	<unit unitID='MROUTERSECURE' name='mRouterSecure' bldFile='common/generic/connectivity/mRouterSecure/group' />
+	<unit unitID='MROUTER-PLUGIN' name='mRouter-plugin' bldFile='common/generic/connectivity/BAL/Plugins/mRouter3/group' />
+	<unit unitID='PLPVARIANT' name='connectivity_legacy_plp_plpvariant' bldFile='common/generic/connectivity/legacy/plp/PLPVARIANT' />
+	<unit unitID='PLP' name='connectivity_legacy_plp_plpgrp' bldFile='common/generic/connectivity/legacy/plp/PLPGRP' />
+	<unit unitID='BRDCST' name='connectivity_legacy_brdcst' bldFile='common/generic/connectivity/legacy/BRDCST/GROUP' />
+	<unit unitID='MTPUSBSIC' name='mtp_usbsic' bldFile='common/generic/mtp/transports/usbsic/group' />
+	<unit unitID='MTPFRAMEWORK' name='mtp_framework' bldFile='common/generic/mtp/framework/group' />
+	<unit unitID='RTP' name='mm-protocols_rtp' bldFile='common/generic/mm-protocols/rtp/group' />
+	<!-- not including <unit unitID='SIP_COM' name='mm-protocols_sip_com' bldFile='common/generic/mm-protocols/sip/group' /> -->
+	<unit unitID='SIP_COM2' name='mm-protocols_SIP2_Com' bldFile='common/generic/mm-protocols/sip2/group' />
+	<!-- excluding <unit unitID='SIPCPR' name='mm-protocols_SIPCPR' bldFile='common/generic/mm-protocols/ConnProv/SIPCPR/group' /> -->
+	<!-- excluding <unit unitID='SIPDUMMYPRT' name='mm-protocols_SIPDummyPRT' bldFile='common/generic/mm-protocols/SipProvEngine/SIPDummyPRT/group' /> -->
+	<!-- excluding <unit unitID='SIPSTATEMACHINE' name='mm-protocols_SipStateMachine' bldFile='common/generic/mm-protocols/SipProvEngine/SipStateMachine/group' /> -->
+	<!-- excluding <unit unitID='SIPPARAMS' name='mm-protocols_SIPParams' bldFile='common/generic/mm-protocols/SubConnProv/SIPParams/group' /> -->
+	<!-- excluding <unit unitID='SIPSCPR' name='mm-protocols_SIPSCPR' bldFile='common/generic/mm-protocols/SubConnProv/SIPSCPR/group' /> -->
+	<unit unitID='GFXTRANSEFFECT' name='app-framework_gfxtranseffect' bldFile='common/generic/app-framework/gfxtranseffect/group' />
+	<unit unitID='EGUL' name='app-framework_egul' bldFile='common/generic/APP-FRAMEWORK/EGUL/GROUP' />
+	<unit unitID='NUMBERCONVERSION' name='app-framework_numberconversion' bldFile='common/generic/APP-FRAMEWORK/NumberConversion/group' />
+	<unit unitID='GRID' name='app-framework_grid' bldFile='common/generic/APP-FRAMEWORK/GRID/GROUP' />
+	<unit unitID='CLOCK' name='app-framework_clock' bldFile='common/generic/APP-FRAMEWORK/CLOCK/GROUP' />
+	<unit unitID='BMPANIM' name='app-framework_bmpanim' bldFile='common/generic/APP-FRAMEWORK/BmpAnim/GROUP' />
+	<unit unitID='ANIMATION' name='app-framework_animation' bldFile='common/generic/APP-FRAMEWORK/animation/group' />
+	<unit unitID='UIKON' name='app-framework_uikon' bldFile='common/generic/APP-FRAMEWORK/UIKON/GROUP' />
+	<unit unitID='UIKLAFGT' name='app-framework_uiklafgt' bldFile='common/generic/APP-FRAMEWORK/UIKLAFGT/GROUP' />
+	<unit unitID='CONE' name='app-framework_cone' bldFile='common/generic/APP-FRAMEWORK/CONE/GROUP' />
+	<unit unitID='FEPBASE' name='app-framework_fepbase' bldFile='common/generic/APP-FRAMEWORK/Fepbase/GROUP' />
+	<unit unitID='APPARC' name='app-framework_apparc' bldFile='common/generic/APP-FRAMEWORK/APPARC/GROUP' />
+	<unit unitID='VIEWSRV' name='app-framework_viewsrv' bldFile='common/generic/APP-FRAMEWORK/VIEWSRV/GROUP' />
+	<!-- excluding <unit unitID='CALINTERIMAPI' name='app-engines_calinterimapi' bldFile='common/generic/app-engines/calinterimapi/group' /> -->
+	<unit unitID='CALENDAR' name='app-engines_calendar' bldFile='common/generic/app-engines/calendar/group' />
+	<!-- excluding <unit unitID='AGNMODEL' name='app-engines_agnmodel' bldFile='common/generic/APP-ENGINES/AGNMODEL/GROUP' /> -->
+	<!-- excluding <unit unitID='AGNVERSIT' name='app-engines_agnversit' bldFile='common/generic/APP-ENGINES/AgnVersit/GROUP' /> -->
+	<unit unitID='AGNVERSIT2' name='app-engines_agnversit2' bldFile='common/generic/APP-ENGINES/AgnVersit2/GROUP' />
+	<!-- excluding <unit unitID='CNTMODEL' name='app-engines_cntmodel' bldFile='common/generic/APP-ENGINES/CNTMODEL/GROUP' /> -->
+	<unit unitID='CNTMODELSQL' name='app-engines_cntmodel' bldFile='common/generic/APP-ENGINES/CNTMODEL/GROUPSQL' />
+	<unit unitID='PHBKSYNC' name='telephony_phbksync' bldFile='common/generic/TELEPHONY/phbksync/group' />
+	<unit unitID='VERSIT' name='app-services_versit' bldFile='common/generic/APP-SERVICES/VERSIT/GROUP' />
+	<unit unitID='CALCON' name='app-services_calcon' bldFile='common/generic/APP-SERVICES/Calcon/GROUP' />
+	<unit unitID='BACKUPRESTORENOTIFICATION' name='app-services_BackupRestoreNotification' bldFile='common/generic/APP-SERVICES/BACKUPRESTORENOTIFICATION/GROUP' />
+	<unit unitID='DAMODEL' name='app-engines_damodel' bldFile='common/generic/APP-ENGINES/DAMODEL/GROUP' />
+	<unit unitID='SHENG' name='app-engines_sheng' bldFile='common/generic/APP-ENGINES/SHENG/GROUP' />
+	<unit unitID='WPENG' name='app-engines_wpeng' bldFile='common/generic/APP-ENGINES/WPENG/GROUP' />
+	<unit unitID='MSG_FRAMEWORK' name='messaging_framework' bldFile='common/generic/messaging/framework/group' />
+	<unit unitID='MSG_BIOMSG' name='messaging_biomsg' bldFile='common/generic/messaging/biomsg/group' />
+	<unit unitID='MSG_MMS_SETTINGS' name='messaging_mmssettings' bldFile='common/generic/messaging/mmssettings/group/' />
+	<unit unitID='MSG_BIOWATCHERSCDMA' name='messaging_biomsg_biowatchers_cdma' bldFile='common/generic/messaging/biomsg/biowatcherscdma/group' />
+	<unit unitID='MSG_SCHEDULEDSEND' name='messaging_schedulesend' bldFile='common/generic/messaging/schedulesend/group' />
+	<unit unitID='MSG_EMAIL' name='messaging_email' bldFile='common/generic/messaging/email/group' />
+	<unit unitID='MSG_IMAP' name='messaging_email_imap' bldFile='common/generic/messaging/email/imap/group' />
+	<unit unitID='MSG_OBEXMTM' name='messaging_obex' bldFile='common/generic/messaging/obex/group' />
+	<unit unitID='MSG_SMS8.1' name='messaging_sms_multimode' bldFile='common/generic/messaging/sms/multimode/group' />
+	<unit unitID='CONNECTIVITY' name='connectivity' bldFile='common/generic/CONNECTIVITY/GROUP' />
+	<unit unitID='SECUREBACKUPENGINE' name='connectivity_securebackupengine' bldFile='common/generic/connectivity/SecureBackupEngine/group' />
+	<unit unitID='MTPFILEDP' name='mtp_filedp' bldFile='common/generic/mtp/dataproviders/filedp/group' />
+	<unit unitID='SYNCMLCLIENT' name='SyncML' bldFile='common/generic/SyncML/Framework/Group' />
+	<unit unitID='SYNCMLDMCLIENT' name='SyncML_DM' bldFile='common/generic/SyncML/DevMan/Group' />
+	<unit unitID='DEVPROV_DEVMAN_FRAMEWORK' name='devprov_devman_framework' bldFile='common/generic/DEVPROV/DevMan/Group' />
+	<unit unitID='DEVPROV_CLIENTPROV_FRAMEWORK' name='devprov_clientprov_framework' bldFile='common/generic/DEVPROV/ClientProv/Group' />
+	<unit unitID='SYNCMLDSCLIENT' name='SyncML_DS' bldFile='common/generic/SyncML/DataSync/Group' />
+	<unit unitID='DEVPROV_DEVMAN_ADAPTERS' name='devprov_devman_adapters' bldFile='common/generic/DEVPROV/Adapters/DevMan/Group' />
+	<unit unitID='DEVPROV_CLIENTPROV_ADAPTERS' name='devprov_clientprov_adapters' bldFile='common/generic/DEVPROV/Adapters/ClientProv/Group' />
+	<unit unitID='MIDP2INSTALLER_9.2' name='MIDP2INSTALLER' bldFile='common/generic/j2me/systemamsV1_5' />
+	<unit unitID='MemSpy' name='graphics_memspy' bldFile='common/generic/graphics/testutils/memspy/group' />
+	<unit unitID='ASSABET_EKA2' name='base_assabet' bldFile='cedar/generic/BASE/ASSABET' />
+	<unit unitID='INTEGRATORAP_EKA2' name='base_integrator_integratorap' bldFile='cedar/generic/base/integrator/integratorap' />
+	<unit unitID='INTEGRATOR_CORE_EKA2' name='base_integrator_core_8.1b' bldFile='cedar/generic/base/integrator/core' />
+	<unit unitID='INTEGRATOR_CM920_EKA2' name='base_integrator_core_cm920' bldFile='cedar/generic/base/integrator/core/cm920' />
+	<unit unitID='INTEGRATOR_CM1136_EKA2' name='base_integrator_core_cm1136' bldFile='cedar/generic/base/integrator/core/cm1136' />
+	<unit unitID='INTEGRATOR_LMXX600_EKA2' name='base_integrator_logic_lmxx600' bldFile='cedar/generic/base/integrator/logic/lmxx600' />
+	<unit unitID='INTEGRATOR_LMNAND_EKA2' name='base_integrator_logic_lmnand' bldFile='cedar/generic/base/integrator/logic/lmnand' />
+	<unit unitID='UI_BENCH' name='graphics_ui_bench' bldFile='common/generic/graphics/ui_bench/group' />
+	<unit unitID='FAX' name='telephony_fax' bldFile='common/generic/TELEPHONY/FAX/GROUP' />
+	<unit unitID='DUMMY' name='additional_dummy' bldFile='common/generic/tools/cbr/dummy' />
+	<unit unitID='BASE_SDIOTESTS' name='base_sdiotests' bldFile='cedar/generic/base/e32utils/sdio' />
+	<unit unitID='E32UTILS_EKA2' name='base_e32utils' bldFile='cedar/generic/BASE/E32Utils/GROUP' />
+	<unit unitID='ERRORRESGT' name='app-framework_errorresgt' bldFile='common/generic/APP-FRAMEWORK/ERRORRESGT/GROUP' />
+	<unit unitID='GDITOOLS' name='graphics_gditools' bldFile='common/generic/GRAPHICS/GDITools/GROUP' />
+	<unit unitID='GDTRAN' name='GDTRAN' bldFile='common/generic/GRAPHICS/GDTran/GROUP' />
+	<unit unitID='INTEGRATIONTEST' name='networking_integrationtest' bldFile='common/generic/NETWORKING/Integrationtest/group' />
+	<unit unitID='MRPTEST' name='mtp_test' bldFile='common/generic/mtp/test/group' />
+	<unit unitID='BASEINTEGRATIONTEST' name='base_integration_test' bldFile='cedar/generic/base_integration_test/group' />
+	<unit unitID='MOBILEIP' name='networking_mobileip' bldFile='common/generic/networking/mobileip/group' />
+	<unit unitID='MSG_SENDAS2' name='messaging_sendas2' bldFile='common/generic/messaging/sendas2/group' />
+	<unit unitID='MSG_TEST' name='messaging_test' bldFile='common/generic/messaging/test/group' />
+	<unit unitID='MSG_URLHANDLER' name='messaging_urlhandler' bldFile='common/generic/messaging/urlhandler/group' />
+	<unit unitID='MVS_APP' name='multimedia_mvs_app' bldFile='common/generic/multimedia/mvs/application/group' />
+	<unit unitID='MVS_AGENTS' name='multimedia_mvs_agents' bldFile='common/generic/multimedia/mvs/agents/group' />
+	<unit unitID='TEMPLATE_EKA2' name='base_template' bldFile='cedar/generic/base/template/template_variant' />
+	<unit unitID='WAPBASE' name='wap-browser_wapbase' bldFile='common/generic/WAP-BROWSER/WAPBASE/GROUP' />
+	<unit unitID='WLDDATABASEKIT' name='WLDDATABASEKIT' bldFile='common/generic/APP-SERVICES/Wlddatabasekit/GROUP' />
+	<unit unitID='WLDTOOLS' name='app-services_wldtools' bldFile='common/generic/APP-SERVICES/WLDTOOLS/GROUP' />
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/envelope/little.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+
+<SystemDefinition name="MCL" schema="1.4.0">
+  <systemModel>
+    <layer name="common">
+      <module name="allexports">
+        <component name="envelope">
+	<unit unitID='APPARC' name='app-framework_apparc' bldFile='common/generic/APP-FRAMEWORK/APPARC/GROUP' />
+	<unit unitID='SYSSTART' name='app-framework_sysstart' bldFile='common/generic/app-framework/sysstart/group' />
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/envelope/preexport.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,32 @@
+<?xml version="1.0"?>
+<!-- This file is used to export meta data in a pre-run through of raptor. 
+	i.e. raptor -s <thisfile> EXPORT
+     when system included mmh files are removed from MMPs this can be removed. -->
+<SystemDefinition name="MCL" schema="1.4.0">
+  <systemModel>
+    <layer name="common">
+      <module name="preexports">
+        <component name="envelope">
+	<unit unitID='LMNAND2_LOGIC' name='base_integrator_logic_lmnand2' bldFile='cedar/generic/base/integrator/logic/lmnand2' />
+	<unit unitID='LMNAND2_LOGIC' name='base_integrator_logic_lmnand2' bldFile='cedar/generic/base/integrator/logic/lmnand2' />
+	<unit unitID='INTEGRATOR_LMNAND_EKA2' name='base_integrator_logic_lmnand' bldFile='cedar/generic/base/integrator/logic/lmnand' />
+	<unit unitID='INTEGRATOR_LMXX600_EKA2' name='base_integrator_logic_lmxx600' bldFile='cedar/generic/base/integrator/logic/lmxx600' />
+	<unit unitID='OMAP_H2' name='base_omaph2' bldFile='cedar/generic/base/omap/h2' />
+	<unit unitID='BASE_H2_UNISTORE2' name='base_h2_unistore2' bldFile='cedar/generic/base/omap/h2_restricted/unistore2' />
+	<unit unitID='BASE_H2_SDIO' name='base_h2_sdio' bldFile='cedar/generic/base/omap/h2_restricted/sdio' />
+        <unit unitID='esockdebug' name='esockdebug' bldFile='common/generic/comms-infras/esock/debug/MessageInterceptRegister/group' />
+        <unit unitID='commsdebugutility' name='commsdebugutility' bldFile='common/generic/comms-infras/commsdebugutility/group' />
+        <unit unitID='usblogger' name='usblogger' bldFile='common/generic/ser-comms/usb/logger/group' />
+        <unit unitID='packetlogger' name='packetlogger' bldFile='common/generic/networking/packetlogger/group' />
+        <unit unitID='commsfw' name='cflog' bldFile='common/generic/comms-infras/commsfw/group' />
+
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/envelope/syslib0.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+
+<SystemDefinition name="MCL" schema="1.4.0">
+  
+  <systemModel>
+    <layer name="RaptorEnvelope">
+      <module name="Tests">
+        <component name="envelope">
+          <unit unitID="001" name="featreg" bldFile="common/generic/syslibs/featreg/group"/>
+          <unit unitID="001" name="store" bldFile="common/generic/syslibs/store/group"/>
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/envelope/syslib1.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+
+<SystemDefinition name="MCL" schema="1.4.0">
+  
+  <systemModel>
+    <layer name="common">
+      <module name="allexports">
+        <component name="envelope">
+          <unit unitID="001" name="emime" bldFile="common/generic/app-framework/emime/group"/>
+          <unit unitID="001" name="featreg" bldFile="common/generic/syslibs/ezlib/group"/>
+          <unit unitID="001" name="caf" bldFile="common/generic/syslibs/caf2/group"/>
+          <unit unitID="001" name="charconv" bldFile="common/generic/syslibs/charconv/ongoing/group/"/>
+          <unit unitID="001" name="featreg" bldFile="common/generic/syslibs/featreg/group"/>
+          <unit unitID="001" name="store" bldFile="common/generic/syslibs/store/group"/>
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/envelope/syslib2.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,38 @@
+<?xml version="1.0"?>
+
+<SystemDefinition name="MCL" schema="1.4.0">
+  
+  <systemModel>
+    <layer name="common">
+      <module name="allexports">
+        <component name="envelope">
+          <unit unitID="001" name="featreg" bldFile="common/generic/syslibs/ezlib/group"/>
+          <unit unitID="001" name="featreg" bldFile="common/generic/syslibs/ecom/ongoing/group"/>
+          <unit unitID="001" name="charconv" bldFile="common/generic/syslibs/charconv/ongoing/group"/>
+	  <unit unitID="001" name="ezlib" bldFile="common/generic/syslibs/ezlib/group" />
+	  <unit unitID="001" name="caf2" bldFile="common/generic/syslibs/caf2/group" />
+	  <unit unitID="001" name="stdlib" bldFile="common/generic/syslibs/stdlib/group" />
+	  <unit unitID="001" name="FATCharsetConv" bldFile="common/generic/syslibs/FATCharsetConv/group" />
+	  <unit unitID="001" name="pwrcli" bldFile="common/generic/syslibs/pwrcli/group" />
+	  <unit unitID="001" name="SysAgent2" bldFile="common/generic/syslibs/SysAgent2/group" />
+	  <unit unitID="001" name="bafl" bldFile="common/generic/syslibs/bafl/initLocale/group" />
+	  <unit unitID="001" name="bafl" bldFile="common/generic/syslibs/bafl/group" />
+	  <unit unitID="001" name="dbms" bldFile="common/generic/syslibs/dbms/esql/group" />
+	  <unit unitID="001" name="dbms" bldFile="common/generic/syslibs/dbms/group" />
+	  <unit unitID="001" name="xml" bldFile="common/generic/syslibs/xml/group" />
+	  <unit unitID="001" name="featreg" bldFile="common/generic/syslibs/featreg/group" />
+	  <unit unitID="001" name="charconv" bldFile="common/generic/syslibs/charconv/ongoing/group" />
+	  <unit unitID="001" name="logeng" bldFile="common/generic/syslibs/logeng/ongoing/group" />
+	  <unit unitID="001" name="centralrepository" bldFile="common/generic/syslibs/centralrepository/group" />
+	  <unit unitID="001" name="schsvr" bldFile="common/generic/syslibs/schsvr/ongoing/group" />
+	  <unit unitID="001" name="store" bldFile="common/generic/syslibs/store/group" />
+	  <unit unitID="001" name="sql" bldFile="common/generic/syslibs/SQL/group" />
+        </component>
+      </module>
+    </layer>
+  </systemModel>
+  
+  <build>
+  </build>
+
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/logging/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_MMPFILES
+simple.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/logging/simple.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			test
+TARGETTYPE		EXE
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/logging/test.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple test";
+
+TInt test1();
+TInt test2();
+TInt test3();
+TInt test4();
+TInt test5();
+TInt test6();
+
+TInt E32Main()
+{
+	test1();
+	test2();
+	test3();
+	test4();
+	test5();
+	test6();
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/config/empty_cfg.cfg	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,10 @@
+# test_hrh.hrh (based on Symbian_OS_v9.3.cfg)
+#
+# Copyright (c) Symbian Software Ltd 2004-2006.  All rights reserved.
+#
+# This file gives the location of the file that specifies
+# configuration options for Symbian OS 9.3
+#
+# The following is a path relative to %EPOCROOT%
+# 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/config/invalid_cfg.cfg	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,10 @@
+# test_hrh.hrh (based on Symbian_OS_v9.3.cfg)
+#
+# Copyright (c) Symbian Software Ltd 2004-2006.  All rights reserved.
+#
+# This file gives the location of the file that specifies
+# configuration options for Symbian OS 9.3
+#
+# The following is a path relative to %EPOCROOT%
+# 
+metadata\include\missing_hrh.hrh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/config/test_cfg.cfg	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,10 @@
+# test_hrh.hrh (based on Symbian_OS_v9.3.cfg)
+#
+# Copyright (c) Symbian Software Ltd 2004-2006.  All rights reserved.
+#
+# This file gives the location of the file that specifies
+# configuration options for Symbian OS 9.3
+#
+# The following is a path relative to %EPOCROOT%
+# 
+metadata\include\test_hrh.hrh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/include/subdir/test_hrh_include.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// test_hrh_include.h
+
+#ifndef TEST_HRH_INCLUDE
+#define TEST_HRH_INCLUDE
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/include/test_hrh.hrh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1224 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* test_hrh.hrh (base on Symbian_OS_v9.4.hrh)
+*
+*/
+
+#include <subdir/test_hrh_include.h>
+
+
+/**
+@publishedAll
+
+EKA2
+
+If EKA2 is defined, assume Kernel Architecture 2.
+If EKA2 is not defined, assume Kernel Architecture 1
+
+Kernel Architecture 2 is a defining property of the Cedar platform.
+Kernel Architecture 1 is a defining property of the Beech platform.
+*/
+#ifndef EKA2
+#define EKA2
+#endif
+
+/**
+@publishedAll
+@deprecated
+@since 8.0
+
+SYMBIAN_CRYPTO
+
+*/
+#define SYMBIAN_CRYPTO
+
+/**
+@publishedAll
+
+__CNF_FORMAT_V2__
+
+If __CNF_FORMAT_V2__ is defined, assume that Epoccnf.pl generates
+files in version 2 of the CNF format, and that both versions 1
+and 2 of this file format can be read by Conarc.
+If __CNF_FORMAT_V2__ is not defined, assume that Epoccnf.pl
+generates files in version 1 of the CNF format, and that only
+version 1 of this file format can be read by Conarc.
+*/
+#define __CNF_FORMAT_V2__
+
+/**
+@publishedAll
+@deprecated
+@since 8.0
+
+__KEYSTORE_API_V2__
+
+*/
+#define __KEYSTORE_API_V2__
+
+/**
+@publishedAll
+
+__BLUETOOTH_API_V2__
+
+If __BLUETOOTH_API_V2__ is defined assume that version 2 of the bluetooth
+subsystem will be built.  This is binary compatible with version 1 for all
+published-all APIs but is not source compatible.  Users of classes defined
+in BTDevice.h and BTManClient.h may need to make source changes.
+
+The BTRegistry.dll is removed, users should link instead against BTManClient.lib.
+The APIs provided by that DLL were classified as published-partner.
+
+@see CBTDevice
+@see SGL.GT172.103 - Bluetooth Compatibility Specification
+
+If __BLUETOOTH_API_V2__ is not defined then version 1 of the bluetooth subsystem
+will be built.
+
+*/
+#define __BLUETOOTH_API_V2__
+
+
+/**
+@publishedAll
+
+__OBEX_USER_DEFINED_HEADERS__
+
+If __OBEX_USER_DEFINED_HEADERS__ is defined then the new API support for extended Headers will be available.
+This new support includes USER DEFINED HEADERS and the COUNT header.
+If this functionality is compiled out then the old API is available as before.
+For more information on see documents shown below.
+
+@see SGL.GT171.097 - Obex Header Extension how to
+@see SGL.GT171.095 - Obex Extension Design Document
+*/
+#define __OBEX_USER_DEFINED_HEADERS__
+
+
+/**
+@publishedAll
+
+__HIDE_IPC_V1__
+
+If __HIDE_IPC_V1__ is defined then the deprecated insecure IPC APIs will be removed from various Symbian OS header files. Classes affected include CSession, CServer, RMessage and RMessageptr.
+
+For more information see the document listed below.
+
+@see SMG.SM0005.004 - Platform Security Development for Zephyr
+@see CSession
+@see CServer
+@see RMessage
+@see RMessagePtr
+*/
+#define __HIDE_IPC_V1__
+
+
+/**
+@internalAll
+
+DO_NOT_USE_THIS_MACRO
+
+If DO_NOT_USE_THIS_MACRO is defined, assume the Cedar platform.
+If DO_NOT_USE_THIS_MACRO is not defined, assume the Beech platform.
+
+This macro was originally introduced as a stopgap measure, to
+identify differences between Symbian OS v7.0s and Symbian OS v8.0b
+which were not specifically to do with the change from Kernel
+Architecture 1 to Kernel Architecture 2.
+
+This macro will be deprecated when a suitable alternative is provided.
+*/
+
+#ifndef DO_NOT_USE_THIS_MACRO
+#define DO_NOT_USE_THIS_MACRO
+#endif
+
+/**
+@publishedAll
+
+__CONDITIONS_SCHEDULES_VALID__
+
+If __CONDITIONS_SCHEDULES_VALID__ is defined then the Task Scheduler component 
+supports creating persistent schedules based on a set of conditions and a 
+timeout. The schedule is run when either all the conditions are met or the 
+timeout is reached.
+
+This functionality is part of PREQ694 - PREQ 694 - Automatic sending of SMS on
+network reconnection.
+*/
+
+#define __CONDITIONS_SCHEDULES_VALID__
+
+
+/**
+@publishedAll
+
+__JAVACUSTOMINSTALL__
+
+If __JAVACUSTOMINSTALL__ is defined then an additional UI callback is made after MIDlet
+installation has succeeded or failed. This callback is intended for information only and the 
+information passed can be licensee customised. The intention would be that the device user
+can use this information to diagnose install problems in conjunction with network operators.
+If this #define is not present then the callback is not present and is not called.
+For more information on see documents shown below.
+
+@see SGL.GT0188.253 CDMA Java MIDlet Installer Component Design
+*/
+#define __JAVACUSTOMINSTALL__
+
+/**
+@publishedAll
+
+__UI_FRAMEWORKS_V2__
+
+If __UI_FRAMEWORKS_V2__ is defined then PlatSec aware UI Frameworks API's will be available. 
+The following frameworks will be affected:
+
+Applications 
+File Recognizers
+Data Recognizers
+Notifiers
+Control Panel Plugins
+Feps
+App-initialization (CEikLibrary)
+Converters
+Error-Resolving
+*/
+#define __UI_FRAMEWORKS_V2__
+#define SYMBIAN_HIDE_UI_FRAMEWORKS_V1
+#define SYMBIAN_REMOVE_UI_FRAMEWORKS_V1
+
+/**
+@publishedAll
+
+__BLUETOOTH_HCI_ALLOWS_AFH__
+
+If __BLUETOOTH_HCI_ALLOWS_AFH__ is defined the HCI interface will require the Adaptive Frequency Hopping CHCIBase pure virtual functions to be implemented in any derived class in Licensee produced host controller interface (HCI) code. 
+If this is not defined no AFH commands may be sent to the host controller, and no AFH events will be received from the host controller. 
+The APIs provided by the HCI DLL were classified as published-partner.
+
+@see CHCIBase
+@see MHCIEventObserver
+
+*/
+#define __BLUETOOTH_HCI_ALLOWS_AFH__
+
+/**
+@publishedAll
+
+__MESSAGING_API_V2__
+
+If __MESSAGING_API_V2__ is defined then new functionality 
+is available within the Messaging sub-system to support a 
+platform secured OS, e.g. the Attachment API.
+*/
+#define __MESSAGING_API_V2__
+#define __HIDE_MESSAGING_API_V1__
+#define __REMOVE_MESSAGING_API_V1__
+
+/**
+@internalAll
+
+__BC_FUTURE_PROOFING__
+
+Support for the implementation of PREQ743 "Introduction of interface 
+robustness patterns to support future binary compatibility".
+*/
+#define __BC_FUTURE_PROOFING__
+
+/**
+@publishedAll
+
+__SECURE_DATA__
+
+When __SECURE_DATA__ is defined, public read-only files are
+assumed to be in their data-caged locations. The presence of
+this #define does not imply that data-caging is enforced, and
+does not imply that binaries have been relocated to sys\bin.
+
+This #define supports PREQ537 "Platform security - file system layout".
+*/
+#define __SECURE_DATA__
+
+/**
+@publishedPartner
+
+__SECURE_BIN__
+
+When __SECURE_BIN__ is defined, executable files stored as
+"data" in the XIP ROM are assumed to be in their data-caged 
+locations. The presence of this #define does not imply that 
+data-caging is enforced, and does not imply that binaries have 
+been relocated to sys\bin.
+
+This #define supports PREQ537 "Platform security - file system layout".
+*/
+#define __SECURE_BIN__
+
+/**
+@publishedAll
+
+__SECURE_TELEPHONY__
+
+If __SECURE_TELEPHONY__ is defined, all Platform Security functionality 
+within the Telephony subsystem will be enabled.
+If __SECURE_TELEPHONY__ is not defined, no Platform Security functionality 
+within the Telephony subsystem is enabled.
+*/
+#define __SECURE_TELEPHONY__
+
+/**
+@publishedAll
+
+SYMBIAN_NETWORKING_PLATSEC
+
+If SYMBIAN_NETWORKING_PLATSEC is defined, additional platform security 
+related functionality in enabled in the Comms-Infras and Networking 
+subsystems (e.g. API policing).
+*/
+#define SYMBIAN_NETWORKING_PLATSEC
+
+/**
+@publishedAll
+
+__WATCHER_API_V2__
+
+If __WATCHER_API_V2__ is defined then the 
+watcher framework supports ECOM watcher plugins.
+*/
+#define __WATCHER_API_V2__
+/**
+@publishedAll
+
+SYMBIAN_COREAPPS_API_V2
+
+If SYMBIAN_COREAPPS_API_V2 is defined then new functionality is available within 
+the Core Apps sub-system (Contacts Model, Agenda Model and World Server) to 
+support a platform secured OS.
+*/
+#define SYMBIAN_COREAPPS_API_V2
+
+
+/**
+@publishedAll
+
+SYMBIAN_COREAPPS_PLUGIN_API_V2
+
+If SYMBIAN_COREAPPS_PLUGIN_API_V2 is defined then  Ecom solely is used as loading 
+mechanism.The legacy plugin loading mechanism is used otherwise.
+*/
+#define SYMBIAN_COREAPPS_PLUGIN_API_V2
+
+/**
+@PublishedPartner
+
+SYMBIAN_SECURE_DBMS
+
+When SYMBIAN_SECURE_DBMS is defined, support for secure 
+shared databases is enabled within DBMS.  
+When not defined, all secure-shared-database-specific APIs 
+take the form of dummy implementations which return KErrNone.
+*/
+#define SYMBIAN_SECURE_DBMS
+
+/**
+@publishedPartner
+
+__SECURE_SOFTWARE_INSTALL__
+
+When __SECURE_SOFTWARE_INSTALL__ is defined, the Software
+Install APIs are replaced with versions appropriate to
+the Secure Platform.
+
+This #define supports PREQ56 "Software install enhancements"
+*/
+#define __SECURE_SOFTWARE_INSTALL__
+
+/**
+@publishedAll
+
+__SECURITY_PLATSEC_ARCH__
+
+If this macro is defined, then platform security aware security services 
+APIs will be present.  This includes architectural changes to several 
+components.
+
+If this macro is not defined, the original version (since 8.0) of the 
+security services APIs will be present. 
+
+The following components are affected:
+  cryptotokens
+  certman
+  filetokens
+
+*/
+#define __SECURITY_PLATSEC_ARCH__
+
+/**
+@publishedAll
+
+SYMBIAN_SECURE_ECOM
+
+When SYMBIAN_SECURE_ECOM is not defined, ECOM plugins are discovered by 
+searching for DLLs in System\libs\plugins, and inferring the name of 
+the resource file from the UID3 of the DLL.
+
+When SYMBIAN_SECURE_ECOM is defined, ECOM plugins will also be discovered
+by searching for resource files in \Resource\Plugins, and inferring the
+name of the DLL from the name of the resource file. When platform security
+is fully enforced, only this new style of discovery will work.
+
+@see common\generic\syslibs\documentation\syslibs_functional_specification.doc
+*/
+#define SYMBIAN_SECURE_ECOM
+
+/**
+@publishedAll
+
+SYMBIAN_SECURITY_CAF_RFILE_HANDLE
+
+If SYMBIAN_SECURITY_CAF_RFILE_HANDLE is defined then it enables the Content Access 
+Framework to read from files passed to it as an open RFile handles instead of CAF 
+opening the file itself. This allows files stored in a data caged directory to be 
+read by CAF.  
+
+*/
+#define SYMBIAN_SECURITY_CAF_RFILE_HANDLE
+
+/** 
+@publishedPartner
+
+SYMBIAN_C32ROOT_API_V2
+
+Strengthens the C32Root API and extends it to include 
+configuration of queue length for bindings. 
+
+This #define supports PREQ318.
+*/
+#define SYMBIAN_C32ROOT_API_V2
+
+/**
+@publishedPartner
+
+SYMBIAN_ESOCK_V3
+
+If SYMBIAN_ESOCK_V3 is defined, the socket server allows protocol 
+families to run in individual threads to protect one protocol family 
+from the behaviour of another. The allocation of protocol families to
+threads is determined by a naming convention on the ESK files.
+
+This #define supports PREQ318.
+*/
+#define SYMBIAN_ESOCK_V3
+
+/**
+@publishedPartner
+
+SYMBIAN_UIKON_UNIFICATION
+
+When SYMBIAN_UIKON_UNIFICATION is defined, the existing 
+CEikSrvAppUiBase class is replaced with a customisable class
+provided by the System GUI. 
+
+This #define supports PREQ819 and PREQ826
+*/
+#define SYMBIAN_UIKON_UNIFICATION
+
+/**
+@publishedPartner
+@released 9.0
+
+SYMBIAN_NETWORKING_RSUBCONNECTION
+
+If SYMBIAN_NETWORKING_RSUBCONNECTION is defined, the RQosChannel API is
+removed, and the RSubConnection API exported by ESOCK must be used instead.
+
+This #define supports PREQ 26.
+*/ 
+#define SYMBIAN_NETWORKING_RSUBCONNECTION
+
+/**
+@publishedAll
+
+SYMBIAN_UI_FRAMEWORKS_CONTROL_API_V2
+
+If SYMBIAN_UI_FRAMEWORKS_CONTROL_API_V2 is defined then 
+the following additional features will be available in CONE.
+1) Functions to set and get the background of a control.
+2) Functions to add components to a compound control in a simpler way.
+3) Hooks for the support of layout managers.
+4) A component that will provide fonts and cache them for easier use 
+   of these fonts by controls.
+
+@see CCoeControl
+*/
+#define SYMBIAN_UI_FRAMEWORKS_CONTROL_API_V2
+
+/**
+@publishedPartner
+
+SYMBIAN_SECURE_MIDLET_INSTALL
+
+If SYMBIAN_SECURE_MIDLET_INSTALL is defined then the Java MIDlet 
+Installer supports installation under Platform Security policies, 
+using the interface published by security\JavaMIDletInstaller.
+
+If SYMBIAN_SECURE_MIDLET_INSTALL is not defined then Java MIDlet 
+installation is achieved through the security\appinst interfaces.
+*/
+#define SYMBIAN_SECURE_MIDLET_INSTALL
+
+/**
+@publishedAll
+
+__SECURE_BACKUP__
+
+If __SECURE_BACKUP__ is defined, the Secure Backup server replaces
+the use of SCRemFs for backup and restore, changing the backup protocol.
+Applications which have private data need to provide additional backup 
+registration files, and may use Publish & Subscribe to receive 
+notification of backup requests.
+
+This #define supports PREQ716 - Provide support for secure backup and 
+restore for licensee PC Connectivity software 
+*/
+#define __SECURE_BACKUP__
+
+/**
+@published All 
+
+SYMBIAN_COMMS_REPOSITORY
+
+Comms data is now stored in the Central Repository rather than the DBMS server.  
+A new module, CommsDat.dll, replaces Commdb.dll as the interface for comms data stored on a device. 
+CommsDat has a different API to Commdb, but provides equivalent functionality. 
+There is no longer an SQL API for access to Comms Data. 
+Commdb tools have been migrated for use with CommsDat 
+Commdb is deprecated and should not be used, though it remains as a temporary BC shim on top of CommsDat.   
+*/
+#define SYMBIAN_COMMS_REPOSITORY
+
+/**
+@publishedAll
+
+__HIDE_WATCHER_API_V1__
+
+Hides support APIs for loading non-ECOM watcher plugins. Non-ECOM watcher 
+plugins are still loaded. The associated define __REMOVE_WATCHER_API_V1__
+removes the implementation of the support APIs.
+
+Assumes that __WATCHER_API_V2__ has been defined.
+*/
+#define __HIDE_WATCHER_API_V1__
+#define __REMOVE_WATCHER_API_V1__
+
+/** 
+@publishedAll
+
+SYMBIAN_NETWORKING_REMOVE_RGENERIC
+
+If this macro is defined the deprecated APIs RGenericAgent, 
+RNif, RNifMonitor and Nifman are removed. All of these APIs, 
+exported by NIFMAN, have been deprecated and replaced by 
+the RConnection API exported by ESOCK.
+
+@see Break request BR1070 
+*/ 
+#define SYMBIAN_NETWORKING_REMOVE_RGENERIC
+
+/**
+@publishedPartner
+
+SYMBIAN_IGNORE_BIN_TARGETPATH
+
+When SYMBIAN_IGNORE_BIN_TARGETPATH is defined the TARGETPATH keyword in MMP files is ignored for executables. 
+Executables for the emulator instead get built to the default location.
+e.g. \epoc32\release\winscw\udeb
+*/
+#define SYMBIAN_IGNORE_BIN_TARGETPATH
+
+/**
+@publishedAll
+
+SYMBIAN_HIDE_COREAPPS_API_V1
+
+If SYMBIAN_HIDE_COREAPPS_API_V1 is defined then the insecure CoreApps APIs
+will be removed from various Symbian OS header files. Components affected are 
+Contacts Model, Agenda Model and World Server.
+
+The related define SYMBIAN_REMOVE_COREAPPS_API_V1 removes the underlying implementations,
+causing a binary compatibility break to match the source compatibility break.
+*/
+#define SYMBIAN_HIDE_COREAPPS_API_V1
+#define SYMBIAN_REMOVE_COREAPPS_API_V1
+
+/**
+@publishedAll
+
+__SECURE_API__
+
+Hides unsecure APIs. Many of these have been replaced by Secure variants 
+but some are no longer available in a Secure platform.
+
+e.g.
+
+@see User::RenameThread
+@see User::CommandLine
+
+*/
+#define __SECURE_API__
+#define SYMBIAN_REMOVE_INSECURE_API
+
+/**
+@publishedPartner
+@since 8.1
+
+SYMBIAN_BLUETOOTH_REQUIRES_HCI_FLUSH_COMPLETE_EVENT 
+
+If this is defined, the MHCIEventObserver class must implement
+the FlushCompleteEvent virtual function, which will be used by 
+the link manager to send Flush Complete events up to the stack. 
+If this macro is not defined, Flush Complete events will be discarded.
+
+@see MHCIEventObserver
+@see CHCIFacade
+*/
+#define SYMBIAN_BLUETOOTH_REQUIRES_HCI_FLUSH_COMPLETE_EVENT
+
+/**
+@publishedPartner
+
+SYMBIAN_FONT_METRICS_V2 
+
+If this is defined, then classes which derive from COpenFont (usually 
+these are part of a font rasterizer implementation) must set the 
+protected member variables:
+iFontAscentOfCapitals
+iFontAscentIncAccents
+iFontDescent
+iFontLineGap
+to appropriate values during the creation of a font. 
+If this macro is not defined then these member variables do not exist.
+
+@see COpenFont
+*/
+#define SYMBIAN_FONT_METRICS_V2
+
+/**
+@publishedPartner
+
+SYMBIAN_GRAPHICS_ALPHA_SUPPORT_V1
+
+When SYMBIAN_GRAPHICS_ALPHA_SUPPORT_V1 is defined a new EColor16MA 
+display mode is available, having an alpha channel. The alpha support 
+is tailored to the needs of wserv server-side, although some alpha 
+support will also be available to client applications.
+
+This #define supports PREQ915.
+*/
+#define SYMBIAN_GRAPHICS_ALPHA_SUPPORT_V1
+
+/**
+@publishedPartner
+
+SYMBIAN_TELEPHONY_IMS
+
+If SYMBIAN_TELEPHONY_IMS is defined then IMS related APIs are included 
+in Telephony components.
+
+This #define supports PREQ61.
+*/
+#define SYMBIAN_TELEPHONY_IMS
+
+/**
+@internalComponent
+
+__LEAVE_EQUALS_THROW__
+
+If __LEAVE_EQUALS_THROW__ is defined, User::Leave() and TRAP() are 
+implemented in terms of C++ exceptions where the compiler supports this.
+If __LEAVE_EQUALS_THROW__ is not defined, the legacy Symbian exception 
+mechanism is used instead.
+
+Support for C++ exceptions by the compiler is indicated by the 
+internal macro __SUPPORT_CPP_EXCEPTIONS__ supplied by the tools.  
+Where this macro is not present, __LEAVE_EQUALS_THROW__ is automatically 
+undefined.
+
+This macro supports PREQ519 "Implement User::Leave() in terms of throw()".
+*/
+#define __LEAVE_EQUALS_THROW__
+
+/**
+@publishedPartner
+
+SYMBIAN_CAF_V2
+
+The SYMBIAN_CAF_V2 flag indicates the CAF API v2 is present. 
+CAF v2 supports files containing multiple content objects, which requires 
+a change of API for CAF agents: agents written for CAF v1 will not compile
+against CAF v2. See BR.1219.2 for migration information.
+
+This #define supports PREQ780.
+*/
+#define SYMBIAN_CAF_V2
+
+/**  
+@publishedAll 
+
+SYMBIAN_MDF_API_V2 
+
+This macro selects the Symbian OS 9.x phase of development in 
+the Media Device Framework API, including changes to enable 
+MDF Video Decoder Hardware devices to support applications, 
+streaming and demux.
+
+@see CMMFVideoPlayHwDevice
+*/ 
+#define SYMBIAN_MDF_API_V2
+
+/**
+SYMBIAN_GENERIC_SYSTEM_STARTUP
+
+@publishedPartner
+
+This #define enables the generic start-up architecture in
+which the System Starter process is responsible for the
+controlled startup of the system. 
+
+The #define supports PREQ808 and PREQ809.
+*/
+#define SYMBIAN_GENERIC_SYSTEM_STARTUP
+
+/**
+SYMBIAN_STAGED_SYSTEM_STARTUP
+
+@publishedPartner
+
+When SYMBIAN_STAGED_SYSTEM_STARTUP is defined, the staged 
+start-up architecture has been introduced into the OS and 
+'Start-up State Aware' components can make use of the 
+architecture.
+
+This #define supports PREQ 810.
+*/
+#define SYMBIAN_STAGED_SYSTEM_STARTUP
+
+/**
+SYMBIAN_TIMEZONE_SUPPORT_V1
+
+@publishedAll
+
+When SYMBIAN_TIMEZONE_SUPPORT_V1 is defined the App-services TzClient.dll 
+module (and accompanying import library) is made available for client 
+application use.
+
+This #define supports PREQ663
+*/
+#define SYMBIAN_TIMEZONE_SUPPORT_V1
+
+/**
+SYMBIAN_ECAM_CHUNKAPI
+
+@publishedAll
+@released
+
+Specifies that an extended API will be used in the multimedia 
+camera interface. This has a v2 observer which allows camera data 
+to be returned without buffer copy, and also allows clients to set 
+camera access priority
+
+@see CCamera
+@see MCameraObserver2
+
+This #define supports PREQ799.
+*/
+#define SYMBIAN_ECAM_CHUNKAPI
+
+/**
+@publishedAll
+
+SYMBIAN_SECURE_PUBLISH_AND_SUBSCRIBE
+
+If this macro is defined, then the Bluetooth stack reconfigures to take
+advantage of security mechanisms in Publish and Subscribe. Any other
+components requiring reconfiguration to make use of Publish and Subscribe
+can also use this macro.
+
+*/
+#define SYMBIAN_SECURE_PUBLISH_AND_SUBSCRIBE
+
+/**
+@publishedAll
+
+SYMBIAN_MMF_AUTOPAUSE_RESUME
+
+This #define enables extra features in the MMF APIs for auto pause 
+and resume of audio streams.
+*/
+#define SYMBIAN_MMF_AUTOPAUSE_RESUME
+
+/**
+@publishedPartner
+
+SYMBIAN_BLUETOOTH_ESCO_ENABLED
+
+Enable support for Bluetooth eSCO synchronous links.  
+Defining this macro extends the interface to CHCIBase to support 
+the Synchronous connection commands added in Bluetooth 1.2.
+*/
+#define SYMBIAN_BLUETOOTH_ESCO_ENABLED
+
+/**
+SYMBIAN_ROM_STATIC_PLUGIN_INFORMATION
+
+@publishedPartner
+ 
+This macro enables a consolidation phase in the ROM building 
+process to generate additional metadata for each ROM drive.  
+The metadata describes the content and structure of the ROM 
+conveniently filtered for any component that requires it.
+
+Components supply metadata with the "spidata" BUILDROM keyword.
+
+This macro supports PREQ806 and other requirements that 
+eliminate run-time scanning of ROM content.
+*/
+#define SYMBIAN_ROM_STATIC_PLUGIN_INFORMATION
+
+/**
+@publishedPartner
+
+SYMBIAN_BOOKMARK_DATABASE
+
+The Bookmark Database is an API used to provide system-wide 
+storage and management functionality for URI bookmarks. 
+If defined, this macro indicates that the Bookmark Database 
+API is present in the platform.
+*/
+#define SYMBIAN_BOOKMARK_DATABASE
+
+/**
+@publishedAll
+
+SYMBIAN_ASSUME_SECURE_DATA
+
+When this macro is defined, all data files are assumed to be in their secure
+locations, and all code which provided backward compatibility for the
+insecure locations is removed. For example, ICL extended resource files
+will not be loaded from System\Libs\Plugins, only from \Resource\ICL.
+
+This macro only makes sense if __SECURE_DATA__ is defined.
+*/
+#define SYMBIAN_ASSUME_SECURE_DATA
+
+/**
+@publishedPartner
+
+SYMBIAN_SWI_POST_INSTALL_REVOCATION
+
+When SYMBIAN_SWI_POST_INSTALL_REVOCATION is defined, 
+support for the SWI post install revocation service is enabled.
+
+This #define supports PREQ919
+*/
+#define SYMBIAN_SWI_POST_INSTALL_REVOCATION
+
+/**  
+@publishedAll 
+
+SYMBIAN_REMOVE_TRIVIAL_ENCRYPTION
+
+This macro removes the trivial encryption APIs that are exported by EUSER. 
+
+See BR1320 for more details
+
+*/
+#define SYMBIAN_REMOVE_TRIVIAL_ENCRYPTION
+
+/**
+@publishedPartner
+
+SYMBIAN_FLEXIBLE_ALARM
+
+When this macro is defined, Calendar Interim API, Alarm server and UIKON 
+Alert Server will support additional functionality.
+- Extra data can be attached to calendar alarm and allow UI app 
+to retrieve the associated data.
+- The Alarm server can send multiple expired alarms to Alert Server without 
+waiting for the previous alarm acknowledged first
+- A Resource file can be used to configure alarm play intervals and durations, 
+or to disable alarm sound control.
+
+This #define supports PREQ1118
+*/
+#define SYMBIAN_FLEXIBLE_ALARM
+
+/**
+@publishedPartner 
+
+SYMBIAN_C32_SERCOMMS_V2
+
+Description: 
+If SYMBIAN_C32_SERCOMMS_V2 is defined, the Comms Server allows grouped CSYs
+to get loaded into individual threads in order to avoid CSY blocking. 
+The allocation of CSYs to threads is determined by naming convention from 
+the configurator/INI file. 
+
+This #define supports PREQ890
+*/
+//#define SYMBIAN_C32_SERCOMMS_V2
+
+/**
+@publishedPartner
+
+SYMBIAN_SMS_REL6_SUPPORT
+
+SMS Release 6 support is defined in the 3GPP specifications
+(3GPP TS 23.040 V6.5.0 and 3GPP TS 23.038 V6.1.0).
+If defined, this macro indicates that Symbian OS SMS APIs
+shall support Release 6 functionality.
+*/
+#define SYMBIAN_SMS_REL6_SUPPORT
+
+/**
+@publishedPartner
+
+SYMBIAN_HCI_API_V2
+
+If SYMBIAN_HCI_API_V2 is defined then the HCI APIs provided in PREQ750 
+(Bluetooth HCI improvements) will be required for use by a version 2 
+Bluetooth Stack and a version 2 HCI. These APIs are neither binary nor 
+source compatible with the previous version 1 HCI APIs. Both the original 
+version 1  Bluetooth stack and HCI, and the new version 2 Bluetooth stack 
+and HCI will be built, but both rombuild and the emulator will be 
+configured to use the version 2 binaries. The version 2 HCI will support 
+all commands and events listed in Bluetooth v2.0 specification.
+
+If SYMBIAN_HCI_API_V2 is not defined then only the version 1 Bluetooth 
+stack and HCI will be built and used by rombuild and the emulator.
+The version 1 HCI supports most but NOT all commands and events listed 
+in Bluetooth v2.0 specification.
+
+See BR1613 for more information.
+*/
+//#define SYMBIAN_HCI_API_V2
+
+/**
+@publishedPartner
+
+SYMBIAN_NETWORKING_UMTSR5
+
+If SYMBIAN_NETWORKING_UMTSR5 is defined support for the QoS 
+and IMS parameters introduced by Release 5 of the 3GPP 
+specification will be enabled. This involves a BC break in 
+TContextConfig - see BR1582.1 for details.
+
+@see TContextConfig
+
+This #define supports PREQ192 and PREQ635.
+*/
+#define SYMBIAN_NETWORKING_UMTSR5
+
+/**
+@publishedPartner
+
+SYMBIAN_NETWORKING_3GPPDEFAULTQOS
+
+If SYMBIAN_NETWORKING_3GPPDEFAULTQOS is defined, support 
+for QoS modification on the default PDP context will be 
+enabled via the RSubconnection API.
+
+This #define supports PREQ870.
+*/
+#define SYMBIAN_NETWORKING_3GPPDEFAULTQOS
+
+/** 
+@publishedAll
+
+SYMBIAN_NETWORKING_WIFI 
+
+If SYMBIAN_NETWORKING_WIFI is defined the following WiFi 
+functionality is enabled: 
+1) New WiFi components can be built. 
+2) WiFi specific CommsDat tables are enabled. 
+
+This #define supports PREQ719 and PREQ1054. 
+*/ 
+#define SYMBIAN_NETWORKING_WIFI
+
+/**
+@internalTechnology
+
+SYMBIAN_COMMSDEBUGUTILITY_V2
+
+If SYMBIAN_COMMSDEBUGUTILITY_V2 is defined then COMSDBGUTIL.DLL 
+becomes a thin layer over the System Tracer. Users of CCFLogIf class 
+have to migrate to use the __FLOG macros instead.
+
+This change also affects the way that CommsDebugUtility logging is
+controlled, and the format of the logs produced. See BR1632 and BR1715.
+*/
+//#define SYMBIAN_COMMSDEBUGUTILITY_V2
+
+/**
+@publishedPartner
+
+SYMBIAN_LFFS_SIBLEY_NORFLASH
+
+If SYMBIAN_LFFS_SIBLEY_NORFLASH is defined support for LFFS on 
+Intel Sibley NOR flash is enabled.
+
+This #define supports PREQ912 and involves a BC break in the 
+parameter list for DMediaDriverFlash::Caps() - see BR1680 for details.
+*/
+//#define SYMBIAN_LFFS_SIBLEY_NORFLASH
+
+/** 
+@publishedAll 
+
+SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY 
+
+If SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY is defined 
+then the comms-infras framework supports the management plane 
+with the RCommsManager API providing support for connection 
+selection, bearer mobility and other functionality.
+
+This #define supports PREQ 1060. 
+*/ 
+//#define SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+/**
+@publishedPartner
+
+SYMBIAN_NETWORKING_IPSEC_IKE_V2
+
+If SYMBIAN_NETWORKING_IPSEC_IKE_V2 is defined, IPSEC will 
+be able to support Internet Key Exchange version 2 in 
+addition to IKE v1. This involves a change in the size of 
+the TPfkeyMsgBase class - see BR1736.1.
+
+Actual support for IKE v2 will depend on the provision 
+of a suitable plugin to the Key Management Daemon.
+
+This #define supports PREQ1223.
+*/
+#define SYMBIAN_NETWORKING_IPSEC_IKE_V2
+
+/**
+@publishedPartner
+
+SYMBIAN_PKCS12
+
+If SYMBIAN_PKCS12 is defined, the PKCS#12 Key Derivation 
+Algorithm is supplied.
+
+This #define supports PREQ1054. 
+*/
+#define SYMBIAN_PKCS12
+
+/**
+@publishedAll
+
+SYMBIAN_CNTMODEL_V2
+
+If SYMBIAN_CNTMODEL_V2 is defined, clients of the
+Contacts Model can exploit the efficiency improvements
+introduced by PREQ811, e.g. efficient use of transactions. 
+
+This #define supports PREQ811
+*/
+#define SYMBIAN_CNTMODEL_V2
+
+/**
+@publishedAll
+
+SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS 
+
+If SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS is defined, new
+APIs are provided in cone.lib and ws32.lib which allow 
+applications to draw to multiple displays simultaneously and 
+react to a change of the active display.
+
+This #define supports PREQ1227
+
+@see CCoeEnv::ScreenDevice
+@see CScreenItem
+*/
+//#define SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS
+
+/**
+@publishedPartner
+
+SYMBIAN_CENTREP_NOC
+
+If SYMBIAN_CENTREP_NOC is defined, the Central Repository 
+includes Notify-Only Client Optimization. This will cause 
+repositories to be unloaded after a timeout even if the 
+connection is still open.
+
+This #define supports PREQ1228. 
+*/
+#define SYMBIAN_CENTREP_NOC
+
+/**
+@publishedAll
+
+SYMBIAN_VARIABLE_BITRATE_CODEC
+
+If SYMBIAN_VARIABLE_BITRATE_CODEC is defined then 
+CMMFSwCodecWrapper based audio hardware devices in the 
+Multimedia Framework (MMF) can support variable bitrate codecs.
+
+@see CMMFSwCodecWrapper
+*/
+#define SYMBIAN_VARIABLE_BITRATE_CODEC
+
+/**
+@publishedAll
+
+SYMBIAN_SWTRACER_V1
+
+When defined, the new System Wide Tracer APIs are available.
+
+@see SWT::RTracer
+
+This #define supports PREQ505
+*/
+//#define SYMBIAN_SWTRACER_V1
+
+/** 
+@publishedPartner 
+  
+SYMBIAN_TELEPHONY_USAT5 
+
+If SYMBIAN_TELEPHONY_USAT5 is defined then support for 3GPP 
+Release 5 (U)SAT will be enabled. 
+
+@see RSat::TCallControlV5
+
+This #define supports PREQ1234.
+*/ 
+#define SYMBIAN_TELEPHONY_USAT5
+
+/**
+@publishedAll
+
+SYMBIAN_MULTIMEDIA_CODEC_API
+
+If SYMBIAN_MULTIMEDIA_CODEC_API is defined then support is 
+available for PREQ1024 delivered Processing Unit or 
+OpenMAX based codecs and Multimedia hardware devices.
+*/
+#define SYMBIAN_MULTIMEDIA_CODEC_API
+
+/**
+@publishedAll
+
+SYMBIAN_CURB_SYSTEMSERVER_PRIORITIES
+
+If SYMBIAN_CURB_SYSTEMSERVER_PRIORITIES is defined, threads at 
+priority SystemServer/More (i.e. process priorities EPriorityFileServer, 
+EPriorityWindowServer or EPrioritySupervisor with relative thread priority 
+EPriorityMore) are mapped to absolute priority 23, equal to the highest 
+priority available to normal applications. This lowers the Window Server 
+and File Server priorities so application threads can timeslice with them, 
+benefitting audio and other pseudo real-time applications.
+
+If SYMBIAN_CURB_SYSTEMSERVER_PRIORITIES is not defined, these system server 
+priorities remain at 24, preempting all normal user application threads.
+
+This #define supports PREQ955, and BR1821.
+*/
+#define SYMBIAN_CURB_SYSTEMSERVER_PRIORITIES
+
+/**
+@publishedPartner
+
+SYMBIAN_APPARC_APPINFO_CACHE
+
+If SYMBIAN_APPARC_APPINFO_CACHE is defined then apparc creates 
+a file of application information on the first boot, which is 
+used during subsequent boots for application information.
+*/
+#define SYMBIAN_APPARC_APPINFO_CACHE
+
+/** 
+@publishedAll
+
+SYMBIAN_ENABLE_MMF_MULTISCREEN_SUPPORT
+
+If SYMBIAN_ENABLE_MMF_MULTISCREEN_SUPPORT is defined then 
+the Multimedia Framework (MMF) can support video playback on 
+a secondary display. The default screen will be the screen 
+number in the cone environment.
+
+@see CVideoPlayerUtility
+*/
+#define SYMBIAN_ENABLE_MMF_MULTISCREEN_SUPPORT
+
+/**
+@publishedAll
+
+SYMBIAN_USE_MMF_RUF_RECOGNIZER
+
+If SYMBIAN_USE_MMF_RUF_RECOGNIZER is defined, the MMF recognizer is able to 
+recognize formats such as MPEG4, MPEG2, AAC and Divx.
+*/
+#define SYMBIAN_USE_MMF_RUF_RECOGNIZER
+
+/** 
+@publishedAll
+
+SYMBIAN_NETWORKING_EAP
+
+If SYMBIAN_NETWORKING_EAP is defined the following  
+functionality is affected: 
+1) Generic EAP-Framework Components built 
+2) Generic Support EAP-MSCHAPv2, PEAPv0, EAP-TTLS, EAP-TLS, EAP-SIM and EAP-AKA enabled
+3) WiFi specific EAP Framework and EAP Methods not built
+
+This #define supports PREQ1623. 
+*/
+//#define SYMBIAN_NETWORKING_EAP
+
+/**
+@publishedAll
+
+SYMBIAN_EXTENDED_COMPOSITE_FILESYSTEM
+
+If  SYMBIAN_EXTENDED_COMPOSITE_FILESYSTEM is defined, the Composite
+File System allows more than one ROFS partition to be included in
+the composite Z: drive.
+
+This #define supports PREQ1085
+*/
+#define SYMBIAN_EXTENDED_COMPOSITE_FILESYSTEM
+
+/** 
+@publishedPartner 
+
+SYMBIAN_SUPPORT_LINKED_FONTS 
+
+If SYMBIAN_SUPPORT_LINKED_FONTS is defined then APIs are provided 
+to create 'linked' font instances which combine glyph sets from 
+multiple existing font glyph sets.
+
+@see CLinkedTypefaceElement
+@see CLinkedTypefaceSpecification
+
+This #define supports PREQ1431.
+*/ 
+#define SYMBIAN_SUPPORT_LINKED_FONTS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/bad_lone_end.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// test for failure in PRJ_EXTENSIONS by processing for ARMV5 and
+// test for failure in PRJ_TESTEXTENSIONS by processing for WINSCW
+
+#ifdef EABI
+
+PRJ_EXTENSIONS
+// an END without a START
+END
+
+#else
+
+PRJ_TESTEXTENSIONS
+// an END without a START
+END
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/default_plats.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/default_plats_minus_plat.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,20 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT -WINSCW
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/exports.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+PRJ_EXPORTS
+export1.h															// %EPOCROOT%epoc32\include\export1.h
+export2.h				export_test/export2.h						// %EPOCROOT%epoc32\include\export_test\export2.h 
+export3.h				../export_test/export3.h					// %EPOCROOT%epoc32\export_test\export3.h
+export4.h				/export_test_abs/export4.h					// \export_test_abs\export4.h
+export5.h				/epoc32/export_test_abs/export5.h			// %EPOCROOT%epoc32\export_test_abs\export5.h
+export6.h				|../export_test_rel/\export6.h				// ..\export_test_rel\export6.h
+export7.h				|/export_test_rel/export7.h					// .\export_test_rel\export7.h
+export8.h				|export_test_rel/export8.h					// .\export_test_rel\export8.h
+:zip export9.zip													// %EPOCROOT% 
+:zip export10.zip		export_test									// %EPOCROOT%export_test
+:zip export11.zip		/export_test								// \export_test
+:zip export12.zip		/epoc32/export_test							// %EPOCROOT%epoc32\export_test
+export13.rsc			z:/resource/app/export13.rsc				// %EPOCROOT%epoc32\data\z\resource\app\export13.rsc
+
+PRJ_TESTEXPORTS
+testexport1.h														// .\testexport1.h (as exports over itself!)
+testexport2.h			export_test_rel/testexport2.h				// .\export_test_rel\testexport2.h 
+testexport3.h			../export_test_rel/testexport3.h			// ..\export_test_rel\testexport3.h
+testexport4.h			/export_test_abs/testexport4.h				// \export_test_abs\testexport4.h
+testexport5.h			/epoc32/export_test_abs/testexport5.h		// %EPOCROOT%epoc32\export_test_abs\testexport5.h
+testexport6.h			|../export_test_rel/testexport6.h			// ..\export_test_rel\testexport6.h
+testexport7.h			|/export_test_rel/testexport7.h				// .\export_test_rel\testexport7.h
+testexport8.h			|export_test_rel/testexport8.h				// .\export_test_rel\testexport8.h
+:zip testexport9.zip												// %EPOCROOT%
+:zip testexport10.zip	export_test									// %EPOCROOT%export_test
+:zip testexport11.zip	/export_test								// \export_test
+:zip testexport12.zip	/epoc32/export_test							// %EPOCROOT%epoc32\export_test
+testexport13.rsc		z:/resource/app/testexport13.rsc			// %EPOCROOT%epoc32\data\z\resource\app\testexport13.rsc
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/extensions.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+PRJ_EXTENSIONS
+
+START EXTENSION test/dummyextension1
+	TARGET dummyoutput1.exe
+	SOURCES dummysource11.cpp dummysource12.cpp dummysource13.cpp
+	DEPENDENCIES dummylib11.lib dummylib12.lib
+	TOOL dummytool1.exe
+	OPTION option11 option11value
+	OPTION option12 $(MAKE_VAR)
+END
+
+START EXTENSION test/dummyextension2
+	TARGET dummyoutput2.exe
+	SOURCES dummysource21.cpp dummysource22.cpp dummysource23.cpp
+	DEPENDENCIES dummylib21.lib dummylib22.lib
+	TOOL dummytool2.exe
+	OPTION option21 option21value
+	OPTION option22 $(MAKE_VAR)
+END
+
+// Note that variable prefixed TEMs are supported only for Raptor testing
+START EXTENSION $(SBS_HOME)/test/dummyextension3
+	TARGET dummyoutput3.exe
+	SOURCES dummysource31.cpp dummysource32.cpp dummysource33.cpp
+	DEPENDENCIES dummylib31.lib dummylib32.lib
+	TOOL dummytool3.exe
+	OPTION option31 option31value
+	OPTION option32 $(MAKE_VAR)
+END
+
+
+PRJ_TESTEXTENSIONS
+
+START EXTENSION test/dummytestextension1
+	TARGET dummytestoutput1.exe
+	SOURCES dummytestsource11.cpp dummytestsource12.cpp dummytestsource13.cpp
+	DEPENDENCIES dummytestlib11.lib dummytestlib12.lib
+	TOOL dummytesttool1.exe
+	OPTION optiontest11 optiontest11value
+	OPTION optiontest12 $(MAKE_VAR)
+END
+
+START EXTENSION test/dummytestextension2
+	TARGET dummytestoutput2.exe
+	SOURCES dummytestsource21.cpp dummytestsource22.cpp dummytestsource23.cpp
+	DEPENDENCIES dummytestlib21.lib dummytestlib22.lib
+	TOOL dummytesttool2.exe
+	OPTION optiontest21 optiontest21value
+	OPTION optiontest22 $(MAKE_VAR)
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/includes/dir1/dir2/up_dir.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// up_dir.inf
+
+#include "../../dir3/down_dir.inf"
+
+PRJ_EXPORTS
+up_dir_export_source.h	up_dir_export_destination.h
+
+PRJ_MMPFILES
+up_dir.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/includes/dir3/down_dir.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// down_dir.inf
+
+PRJ_EXPORTS
+down_dir_export_source.h	down_dir_export_destination.h
+
+PRJ_MMPFILES
+down_dir.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/includes/top_level.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// top_level.inf
+
+#include "dir1/dir2/up_dir.inf"
+
+PRJ_EXPORTS
+top_level_export_source.h	top_level_export_destination.h
+
+PRJ_MMPFILES
+top_level.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/multiple_plats.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+ARMV5 WINSCW TOOLS
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/no_plats.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,20 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/no_prj_platforms.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/bld.infs/single_plat.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+ARMV5
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/mmps/includes/dir1/dir2/up_dir.mmh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// up_dir.mmh
+
+SOURCEPATH	.
+SOURCE		up_dir.cpp
+
+#include "../../dir3/down_dir.mmh"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/mmps/includes/dir3/down_dir.mmh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// down_dir.mmh
+
+SOURCEPATH	.
+SOURCE		down_dir.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/mmps/includes/top_level.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,20 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// top_level.inf
+
+PRJ_MMPFILES
+top_level.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/mmps/includes/top_level.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// top_level.mmp
+
+TARGET		dummy.exe
+TARGETTYPE 	EXE
+SOURCE		top_level.cpp
+
+#include "dir1/dir2/up_dir.mmh"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/mmps/test_mmps/autotest.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET		dummy.exe
+TARGETTYPE 	EXE
+SOURCE		top_level.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/mmps/test_mmps/ignoretest.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET		dummy.exe
+TARGETTYPE 	EXE
+SOURCE		top_level.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/mmps/test_mmps/manualtest.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET		dummy.exe
+TARGETTYPE 	EXE
+SOURCE		top_level.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/mmps/test_mmps/supporttest.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET		dummy.exe
+TARGETTYPE 	EXE
+SOURCE		top_level.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/project/mmps/test_mmps/test_mmps.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_TESTMMPFILES
+autotest.mmp
+manualtest.mmp		manual
+supporttest.mmp		support
+ignoretest.mmp		ignore
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/system/system_definition_1.3.1.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,16 @@
+<SystemDefinition name="MCL" schema="1.3.1" >
+	<systemModel>
+	    <layer name="test">
+			<component name="Test Component 1">          
+				<unit unitID="TCOMP1" name="test_component_1" bldFile="simple" mrp="simple\simple.mrp"/>
+			</component>
+			<component name="Test Component 2">
+				<unit unitID="TCOMP2" name="test_component_2" bldFile="basics\helloworld" mrp="basics\helloworld.mrp"/>
+			</component>
+			<component name="Missing Component">
+				<unit unitID="MCOMP" name="missing_component" bldFile="basics\missing" mrp="basics\missing\missing.mrp"/>
+			</component>
+		</layer>
+	</systemModel>
+</SystemDefinition>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/system/system_definition_1.4.1.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,16 @@
+<SystemDefinition name="MCL" schema="1.4.1" >
+	<systemModel>
+	    <layer name="test">
+			<component name="Test Component 1">          
+				<unit unitID="TCOMP1" name="test_component_1" bldFile="simple" mrp="simple\simple.mrp"/>
+			</component>
+			<component name="Test Component 2">
+				<unit unitID="TCOMP2" name="test_component_2" bldFile="basics\helloworld" mrp="basics\helloworld.mrp"/>
+			</component>
+			<component name="Missing Component">
+				<unit unitID="MCOMP" name="missing_component" bldFile="basics\missing" mrp="basics\missing\missing.mrp"/>
+			</component>
+		</layer>
+	</systemModel>
+</SystemDefinition>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/system/system_definition_1.5.1.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,16 @@
+<SystemDefinition name="MCL" schema="1.5.1" >
+	<systemModel>
+	    <layer name="test">
+			<component name="Test Component 1">          
+				<unit unitID="TCOMP1" name="test_component_1" bldFile="simple" mrp="simple\simple.mrp"/>
+			</component>
+			<component name="Test Component 2">
+				<unit unitID="TCOMP2" name="test_component_2" bldFile="basics\helloworld" mrp="basics\helloworld.mrp"/>
+			</component>
+			<component name="Missing Component">
+				<unit unitID="MCOMP" name="missing_component" bldFile="basics\missing" mrp="basics\missing\missing.mrp"/>
+			</component>
+		</layer>
+	</systemModel>
+</SystemDefinition>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/system/system_definition_2.0.0.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,19 @@
+<SystemDefinition name="MCL" schema="2.0.0" > 
+	<systemModel>
+	    <layer name="test">
+			<component name="Test Component 1">
+				<unit bldFile="simple" mrp="simple/simple.mrp"/>
+			</component>
+			<component name="Test Component 2">
+				<unit bldFile="test/smoke_suite/test_resources/basics/helloworld" root="SBS_HOME" mrp="test/smoke_suite/test_resources/basics/helloworld.mrp"/>
+			</component>
+			<component name="Incorrect root attribute">
+				<unit bldFile="basics/helloworld" root="NON_EXISTENT_ENVVAR" mrp="basics/helloworld.mrp"/>
+			</component>
+			<component name="Missing Component">
+				<unit unitID="MCOMP" name="missing_component" bldFile="basics\missing" mrp="basics\missing\missing.mrp"/>
+			</component>
+		</layer>
+	</systemModel>
+</SystemDefinition>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/system/system_definition_3.0.0.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,13 @@
+<SystemDefinition name="MCL" schema="3.0.0" >  
+	<systemModel>
+	    <layer name="test">
+			<component name="Test Component 1">          
+				<unit unitID="TCOMP1" name="test_component_1" bldFile="simple" mrp="simple\simple.mrp"/>
+			</component>
+			<component name="Test Component 2">
+				<unit unitID="TCOMP2" name="test_component_2" bldFile="basics\helloworld" mrp="basics\helloworld.mrp"/>
+			</component>
+		</layer>
+	</systemModel>
+</SystemDefinition>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/system/system_definition_multi_layers.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,47 @@
+<SystemDefinition name="MCL" schema="2.0.0" > 
+	<systemModel>
+	    <layer name="First Layer">
+			<component name="simple">
+				<unit bldFile="test/smoke_suite/test_resources/simple" root="SBS_HOME" mrp="simple/test.mrp"/>
+			</component>
+			<component name="simple_dll">
+				<unit bldFile="test/smoke_suite/test_resources/simple_dll" root="SBS_HOME" mrp="simple_dll/test.mrp"/>
+			</component>
+		</layer>
+	    <layer name="Second Layer">
+			<component name="simple_export">
+				<unit bldFile="test/smoke_suite/test_resources/simple_export" root="SBS_HOME" mrp="simple_export/test.mrp"/>
+			</component>
+			<component name="simple_gui">
+				<unit bldFile="test/smoke_suite/test_resources/simple_gui" root="SBS_HOME" mrp="simple_gui/test.mrp"/>
+			</component>
+		</layer>
+	    <layer name="Third Layer">
+			<component name="simple_implib">
+				<unit bldFile="test/smoke_suite/test_resources/simple_implib" root="SBS_HOME" mrp="simple_implib/test.mrp"/>
+			</component>
+			<component name="simple_lib">
+				<unit bldFile="test/smoke_suite/test_resources/simple_lib" root="SBS_HOME" mrp="simple_lib/test.mrp"/>
+			</component>
+		</layer>
+	    <layer name="Fourth Layer">
+			<component name="simple_stringtable">
+				<unit bldFile="test/smoke_suite/test_resources/simple_stringtable" root="SBS_HOME" mrp="simple_stringtable/test.mrp"/>
+			</component>
+			<component name="simple_test">
+				<unit bldFile="test/smoke_suite/test_resources/simple_test" root="SBS_HOME" mrp="simple_test/test.mrp"/>
+			</component>
+		</layer>
+	    <layer name="Fifth Layer">
+		</layer>
+		<!--layer name="Sixth layer" deliberately omitted -->
+	    <layer name="Seventh Layer">
+			<component name="simple_stringtable">
+				<unit bldFile="test/smoke_suite/test_resources/simple_plugin" root="SBS_HOME" mrp="simple_plugin/test.mrp"/>
+			</component>
+			<component name="does_not_exist">
+				<unit bldFile="test/smoke_suite/test_resources/does_not_exist" root="SBS_HOME" mrp="does_not_exist/test.mrp"/>
+			</component>
+		</layer>
+	</systemModel>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/metadata/system/system_definition_nover.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,16 @@
+<SystemDefinition name="MCL" >  
+	<systemModel>
+	    <layer name="test">
+			<component name="Test Component 1">          
+				<unit unitID="TCOMP1" name="test_component_1" bldFile="simple" mrp="simple\simple.mrp"/>
+			</component>
+			<component name="Test Component 2">
+				<unit unitID="TCOMP2" name="test_component_2" bldFile="basics\helloworld" mrp="basics\helloworld.mrp"/>
+			</component>
+			<component name="Missing Component">
+				<unit unitID="MCOMP" name="missing_component" bldFile="basics\missing" mrp="basics\missing\missing.mrp"/>
+			</component>
+		</layer>
+	</systemModel>
+</SystemDefinition>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/oe_linking_against_se_lib/group/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_MMPFILES
+test_oeexe.mmp
+
+// end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/oe_linking_against_se_lib/group/test_oeexe.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* t_oeexe.mmp
+*
+*/
+
+
+TARGET			test_oeexe.exe
+TARGETTYPE		stdexe
+romtarget
+ramtarget		sys/bin/
+SOURCEPATH		..
+
+// Emulator images have different export data
+#ifdef WINS
+SOURCE			test_oeexe_wins.cpp
+#else
+SOURCE			test_oeexe.cpp
+#endif
+
+LIBRARY			euser.lib t_oedll.lib
+
+// Standard Symbian Library Created by Simple_lib\simple.mmp
+STATICLIBRARY		etest.lib
+
+SYSTEMINCLUDE	/epoc32/include ..
+VENDORID		0x70000001
+capability		all -TCB
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/oe_linking_against_se_lib/test_oedll.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.h*
+*/
+
+
+ 
+
+
+
+#include <e32cons.h>
+
+extern "C" {
+
+extern int IMPORT_C myfoo();
+
+}
+
+
+
+IMPORT_C int bar();
+
+class CMessenger : public CBase
+
+  	{
+
+public:
+
+		// Construction
+
+	IMPORT_C static CMessenger* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+
+		// Destructor - virtual and class not intended
+
+		// for derivation, so not exported
+
+	~CMessenger();
+
+		// general functions - exported
+
+	IMPORT_C void ShowMessage();
+
+private:
+
+		// C++ constructor - not exported;
+
+		// implicitly called from NewLC()
+
+	CMessenger(CConsoleBase& aConsole);
+
+		// 2nd phase construction, called by NewLC()
+
+	void ConstructL(const TDesC& aString); // second-phase constructor
+
+private:
+
+	CConsoleBase& iConsole; // Use the console (but not owned)
+
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+
+	};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/oe_linking_against_se_lib/test_oeexe.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,296 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+
+Overview:
+
+	Tests it is possible to retrieve the 0th ordinal from exes and dlls
+
+	that are marked as having named symbol export data.  This is loaded
+
+	as non-XIP so loader fixups of 0th ordinal imports can be tested
+
+
+
+API Information:
+
+	RProcess, RLibrary
+
+
+
+Details:
+
+	- 	Test reading 0th ordinal from a dll which has a E32EpocExpSymInfoHdr 
+
+		struct at the 0th ordinal and verify the contents of the header
+
+	-	Test attempts to get the 0th ordinal from a dll without the named symbol 
+
+		data returns NULL
+
+	-	Test reading the named symbol data from an exe that contains a
+
+		E32EpocExpSymInfoHdr struct at the 0th ordinal and verify the contents
+
+	-	Test import fixups has correctly fixed up the 0th ordinal of the static
+
+		dependencies to this stdexe
+
+	-	Test NULL is returned when attempting to read the 0th ordinal of
+
+		an exe that doesn't contain a E32EpocExpSymInfoHdr
+
+
+
+Platforms/Drives/Compatibility:
+
+	All
+
+
+
+Assumptions/Requirement/Pre-requisites:
+
+
+
+	
+
+Failures and causes:
+
+	
+
+	
+
+Base Port information:
+
+
+
+*/
+
+#include <test_oedll.h>
+
+#include <e32test.h>
+
+#include <e32panic.h>
+
+#include <f32image.h>
+
+
+
+RTest test(_L("T_OEEXPORT"));
+
+
+
+// This is defined as LOCAL_D(static) to ensure that tools allow static symbol in stdexe/dlls
+
+// as this was not always the case.
+
+LOCAL_D void VerifyHdr(E32EpocExpSymInfoHdr& aExpectedHdr, E32EpocExpSymInfoHdr &aReadHdr)
+
+	{
+
+	test(aExpectedHdr.iSize == aReadHdr.iSize);
+
+	test(aExpectedHdr.iFlags == aReadHdr.iFlags);
+
+	test(aExpectedHdr.iSymCount == aReadHdr.iSymCount);
+
+	test(aExpectedHdr.iSymbolTblOffset == aReadHdr.iSymbolTblOffset);
+
+	test(aExpectedHdr.iStringTableSz == aReadHdr.iStringTableSz);
+
+	test(aExpectedHdr.iStringTableOffset == aReadHdr.iStringTableOffset);
+
+	test(aExpectedHdr.iDllCount == aReadHdr.iDllCount);
+
+	test(aExpectedHdr.iDepDllZeroOrdTableOffset == aReadHdr.iDepDllZeroOrdTableOffset);
+
+	}
+
+
+
+TInt E32Main()
+
+	{
+
+	test.Title();
+
+
+
+	test.Start(_L("Test retrieving 0th ordinal and therefore named symbol export data"));
+
+	
+
+	E32EpocExpSymInfoHdr tmpHdr;
+
+	E32EpocExpSymInfoHdr *readHdr;
+
+	RLibrary library;
+
+
+
+	// The values for the header of the dll with a 0th ordinal
+
+	tmpHdr.iSize = 0x1a4;
+
+	tmpHdr.iFlags = 0x0;
+
+	tmpHdr.iSymCount = 0xc;	
+
+	tmpHdr.iSymbolTblOffset = 0x1c;
+
+	tmpHdr.iStringTableSz = 0x134;
+
+	tmpHdr.iStringTableOffset = 0x64;
+
+	tmpHdr.iDllCount = 0x3;	
+
+	tmpHdr.iDepDllZeroOrdTableOffset = 0x198;
+
+	test(library.Load(_L("t_oedll.dll")) == KErrNone);
+
+	test.Next(_L("Attempt to retrieve named symbol data from t_oedll.dll"));
+
+	readHdr = (E32EpocExpSymInfoHdr*)library.Lookup(0);
+
+	test(readHdr!=NULL);
+
+	test.Next(_L("Verify export data of t_oedll.dll at the 0th ordinal is that expected"));
+
+	VerifyHdr(tmpHdr, *readHdr);
+
+	library.Close();
+
+
+
+	test.Next(_L("Verify lookup on dll without oe export data returns NULL"));
+
+	test(library.Load(_L("t_dll1.dll")) == KErrNone);
+
+	readHdr = (E32EpocExpSymInfoHdr*)library.Lookup(0);
+
+	test(readHdr == NULL);
+
+	library.Close();
+
+
+
+	// The values for the header of the exe of the current process with a 0th ordinal
+
+	tmpHdr.iSize = 0x48;
+
+	tmpHdr.iFlags = 0x0;
+
+	tmpHdr.iSymCount = 0x2;
+
+	tmpHdr.iSymbolTblOffset = 0x1c;
+
+	tmpHdr.iStringTableSz = 0x14;
+
+	tmpHdr.iStringTableOffset = 0x28;
+
+	tmpHdr.iDllCount = 0x3;
+
+	tmpHdr.iDepDllZeroOrdTableOffset = 0x3c;
+
+	test.Next(_L("Attempt to retrieve named symbol data from current process"));
+
+	readHdr = (E32EpocExpSymInfoHdr*)(RProcess::ExeExportData());
+
+	test(readHdr!=NULL);
+
+	test.Next(_L("Verify export data at th 0th ordinal of this exe is that expected"));
+
+
+
+//#define PRINT_ZEROTH
+
+#ifdef PRINT_ZEROTH
+
+	test.Printf(_L("iSize=%08x;iFlags=%08x;iSymCount=%08x;iSymbolTblOffset=%08x\n"),readHdr->iSize,readHdr->iFlags,readHdr->iSymCount,readHdr->iSymbolTblOffset);
+
+	test.Printf(_L("iStringTableSz=%08x,iStringTableOffset=%08x,iDllCount=%08x,iDepDllZeroOrdTableOffset=%08x\n"), readHdr->iStringTableSz, readHdr->iStringTableOffset,readHdr->iDllCount,readHdr->iDepDllZeroOrdTableOffset);
+
+#endif
+
+	VerifyHdr(tmpHdr, *readHdr);
+
+
+
+	test.Next(_L("Verify static dependency t_oedll1 has been fixed up correctly"));
+
+	test(myfoo()==0x1234);
+
+
+
+	// Get the 0th ordinal data from the dependency t_oedll1 and verify it
+
+	readHdr=(E32EpocExpSymInfoHdr *)((TUint32)readHdr+readHdr->iDepDllZeroOrdTableOffset);
+
+	TUint32 readHdrEnd = (TUint32)readHdr + 12;
+
+	// This stdexe only links one stddll so the only non-NULL entry in iDepDllZeroOrdTable
+
+	// should point to 0th ordinal of t_oedll1
+
+	while (*(TUint32*)readHdr == NULL && (TUint32)readHdr < readHdrEnd)
+
+		{
+
+		readHdr=(E32EpocExpSymInfoHdr *)(((TUint32*)readHdr)+1);
+
+		}
+
+
+
+#ifdef PRINT_ZEROTH
+
+	test.Printf(_L("iSize=%08x;iFlags=%08x;iSymCount=%08x;iSymbolTblOffset=%08x\n"),(*(E32EpocExpSymInfoHdr**)readHdr)->iSize,(*(E32EpocExpSymInfoHdr**)readHdr)->iFlags,(*(E32EpocExpSymInfoHdr**)readHdr)->iSymCount,(*(E32EpocExpSymInfoHdr**)readHdr)->iSymbolTblOffset);
+
+	test.Printf(_L("iStringTableSz=%08x,iStringTableOffset=%08x,iDllCount=%08x,iDepDllZeroOrdTableOffset=%08x\n"), (*(E32EpocExpSymInfoHdr**)readHdr)->iStringTableSz, (*(E32EpocExpSymInfoHdr**)readHdr)->iStringTableOffset,(*(E32EpocExpSymInfoHdr**)readHdr)->iDllCount,(*(E32EpocExpSymInfoHdr**)readHdr)->iDepDllZeroOrdTableOffset);
+
+#endif
+
+
+
+	tmpHdr.iSize = 0x1a4;
+
+	tmpHdr.iFlags = 0x0;
+
+	tmpHdr.iSymCount = 0xc;	
+
+	tmpHdr.iSymbolTblOffset = 0x1c;
+
+	tmpHdr.iStringTableSz = 0x134;
+
+	tmpHdr.iStringTableOffset = 0x64;
+
+	tmpHdr.iDllCount = 0x3;	
+
+	tmpHdr.iDepDllZeroOrdTableOffset = 0x198;
+
+	VerifyHdr(tmpHdr,**(E32EpocExpSymInfoHdr**)readHdr);
+
+	
+
+	test.End();
+
+	return KErrNone;
+
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/oe_linking_against_se_lib/test_oeexe_wins.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,208 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+
+Overview:
+
+	Emulator version that tests it is possible to retrieve the 0th 
+
+	ordinal from exes and dlls that are marked as having named 
+
+	symbol export data.
+
+
+
+API Information:
+
+	RProcess, RLibrary
+
+
+
+Details:
+
+	- 	Test reading 0th ordinal from a dll which has a E32EmulExpSymInfoHdr 
+
+		struct at the 0th ordinal and verify the contents of the header
+
+	-	Test NULL is returned on attempts to get the 0th ordinal from a 
+
+		dll without the named symbol data
+
+	-	Test reading the named symbol data from an exe that contains a
+
+		E32EmulExpSymInfoHdr struct at the 0th ordinal and verify the contents
+
+	-	Test NULL is returned when attempting to read the 0th ordinal of
+
+		an exe that doesn't contain a E32EmulExpSymInfoHdr
+
+
+
+Platforms/Drives/Compatibility:
+
+	All
+
+
+
+Assumptions/Requirement/Pre-requisites:
+
+
+
+	
+
+Failures and causes:
+
+	
+
+	
+
+Base Port information:
+
+
+
+*/
+
+#include <test_oedll.h>
+
+#include <e32test.h>
+
+#include <e32panic.h>
+
+#include <f32image.h>
+
+
+
+RTest test(_L("T_OEEXPORT"));
+
+
+
+LOCAL_D void VerifyHdr(E32EmulExpSymInfoHdr& aExpectedHdr, E32EmulExpSymInfoHdr &aReadHdr)
+
+	{
+
+	test(aExpectedHdr.iSymCount == aReadHdr.iSymCount);
+
+	test(aExpectedHdr.iDllCount == aReadHdr.iDllCount);
+
+	}
+
+
+
+TInt E32Main()
+
+	{
+
+	test.Title();
+
+
+
+	test.Start(_L("Test retrieving 0th ordinal and therefore named symbol export data"));
+
+	
+
+	E32EmulExpSymInfoHdr tmpHdr;
+
+	E32EmulExpSymInfoHdr *readHdr;
+
+	RLibrary library;
+
+
+
+	// The values for the header of the dll with a 0th ordinal
+
+	tmpHdr.iSymCount = 0x0;
+
+	tmpHdr.iDllCount = 0x3;
+
+	test(library.Load(_L("t_oedll.dll")) == KErrNone);
+
+	test.Next(_L("Attempt to retrieve named symbol data from t_oedll.dll"));
+
+	readHdr = (E32EmulExpSymInfoHdr*)library.Lookup(0);
+
+	test(readHdr!=NULL);
+
+//#define PRINT_ZEROTH
+
+#ifdef PRINT_ZEROTH
+
+	test.Printf(_L("iSymCount=%08x;iDllCounts=%08x\n"),readHdr->iSymCount,readHdr->iDllCount);
+
+#endif
+
+	test.Next(_L("Verify export data of t_oedll.dll is that expected"));
+
+	VerifyHdr(tmpHdr, *readHdr);
+
+	library.Close();
+
+
+
+	test.Next(_L("Verify lookup on dll without oe export data returns NULL"));
+
+	test(library.Load(_L("t_dll1.dll")) == KErrNone);
+
+	readHdr = (E32EmulExpSymInfoHdr*)library.Lookup(0);
+
+	test(readHdr == NULL);
+
+	library.Close();
+
+
+
+	// The values for the header of the exe of the current process with a 0th ordinal
+
+	tmpHdr.iSymCount = 0x3;
+
+	tmpHdr.iDllCount = 0x5;
+
+	test.Next(_L("Attempt to retrieve named symbol data from current process"));
+
+	readHdr = (E32EmulExpSymInfoHdr*)(RProcess::ExeExportData());
+
+	test(readHdr!=NULL);
+
+	test.Next(_L("Verify export data 0th ordinal data of this exe is that expected"));
+
+#ifdef PRINT_ZEROTH
+
+	test.Printf(_L("iSymCount=%08x;iDllCounts=%08x;\n"),readHdr->iSymCount,readHdr->iDllCount);
+
+#endif
+
+	VerifyHdr(tmpHdr, *readHdr);
+
+
+
+/*
+
+On Emulator can't examine fixups & depdencies via export data as data not included
+
+in E32EmulExpSymInfoHdr.  This is all handled by the MS loader.
+
+
+
+*/
+
+	test.End();
+
+	return KErrNone;
+
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/retirement/metadep.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,50 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "71"
+	t.name = "metadep"
+	t.description =  """Tests metadata dependency generation.  Changes 
+			to bld.infs and mmps can be detected."""
+	t.usebash = True
+	t.command = """export SBSLOGFILE SBSMAKEFILE; bash smoke_suite/test_resources/metadep.sh 2>&1"""
+			
+	t.targets = [
+		]
+
+	t.mustmatch_multiline = [
+""".*Step 1 .*no warnings or errors.*
+sbs: build log in.*
+\+ sleep 1.*
+.*make -rf .*epoc32/build/metadata_all.mk.*
+.*make.*epoc32/build/metadata_all.mk. is up to date.*
+Step 2 .*
+.*RE-RUNNING SBS with previous parameters.*
+Step 3 .*
+.*RE-RUNNING SBS with previous parameters.*
+.*RE-RUNNING SBS with previous parameters.*"""
+	]
+	t.mustnotmatch_multiline = [
+"""RE-RUNNING SBS with previous parameters.*
+RE-RUNNING SBS with previous parameters.*
+RE-RUNNING SBS with previous parameters.*
+RE-RUNNING SBS with previous parameters.*"""
+	]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/run	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,59 @@
+#!/bin/bash
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# Test Suite execution file for linux
+#
+
+# Ensure that the host type is set for Raptor:
+eval $($SBS_HOME/bin/gethost.sh -e)
+
+if [ -z "$HOSTPLATFORM" ]; then
+	echo "Error: HOSTPLATFORM could not be determined."
+	exit 1
+fi
+
+if [ "$OSTYPE" == "cygwin" ]; then
+
+	SBS_HOME=${SBS_HOME//\\//}
+
+	__CYGWIN__=${SBS_CYGWIN:-$SBS_HOME/$HOSTPLATFORM_DIR/cygwin}
+	__PYTHON__=${SBS_PYTHON:-$SBS_HOME/$HOSTPLATFORM_DIR/python264/python.exe}
+
+	# Unify paths.
+
+	u="$__CYGWIN__/bin/cygpath.exe -m"
+
+	SBS_HOME=$($u "$SBS_HOME")
+	EPOCROOT=$($u "$EPOCROOT")
+
+	__PYTHON__=$($u "$__PYTHON__")
+else
+	LD_LIBRARY_PATH=$SBS_HOME/$HOSTPLATFORM_DIR/bv/lib:$LD_LIBRARY_PATH
+
+	export PATH LD_LIBRARY_PATH
+	__PYTHON__=python
+fi
+
+# Call run_tests.py with the arguments
+TEST_SUITE_PY="$SBS_HOME/test/common/run_tests.py"
+
+if [ -e "$TEST_SUITE_PY" ]; then
+	# run the source version
+	$__PYTHON__ -tt "$TEST_SUITE_PY" "$@"
+elif [ -e "$TEST_SUITE_PY"c ]; then
+	# run the compiled version
+	$__PYTHON__ -tt "$TEST_SUITE_PY"c "$@"
+else
+	echo "Cannot run Test Suite - $TEST_SUITE_PY not found" 1>&2
+fi
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/run.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+@rem
+@rem Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+
+@SETLOCAL
+@CALL %SBS_HOME%\bin\sbs_env.bat
+
+@SET __TEST_SUITE__=%~dp0common\run_tests.pyc
+@SET __TEST_SUITE_PY__=%~dp0common\run_tests.py
+
+@REM If the Python source exists, use it. Else use the byte-compiled Python code
+@IF EXIST %__TEST_SUITE_PY__% SET __TEST_SUITE__=%__TEST_SUITE_PY__%
+
+@REM Then run the test suite with all the arguments
+@%__PYTHON__% -tt %__TEST_SUITE__% %*
+
+@ENDLOCAL
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/simple/test_dbg.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple debuggable test";
+
+TInt E32Main()
+{
+
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/annofile2log.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,39 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "43563"
+	t.name = "annofile2log"
+	t.description = "test workaround for log corruption from a make engine whose name begins with 'e'"
+	
+	t.usebash = True
+	t.errors = 0
+	t.returncode = 0
+	t.exceptions = 0
+	t.command = 'cd smoke_suite/test_resources/annofile2log && ( FROMANNO="`mktemp`" ; bzip2 -dc scrubbed_ncp_dfs_resource.anno.bz2 | python testanno2log.py  >"${FROMANNO}" && FROMSTDOUT="`mktemp`"; bzip2 -dc scrubbed_ncp_dfs_resource.stdout.bz2 > "${FROMSTDOUT}" && diff -wB "${FROMANNO}" "${FROMSTDOUT}"; RET=$? ; rm "${FROMANNO}" "${FROMSTDOUT}"; exit $RET )'
+	
+	t.mustmatch_multiline = [ 
+		"^ *.?"
+                ]
+
+
+	t.run()
+
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/apply_usecases.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,38 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.description = "This testcase tests specific cases of using APPLY"
+	t.usebash = True
+
+	# Introduce LINKER_OPTIONS for tools2 linker
+	t.id = "0108"
+	t.name = "apply_usecases"
+	t.command = "sbs -b smoke_suite/test_resources/apply_usecases/linker_options/bld.inf -c tools2 -f -"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/tools2/rel/test_apply_linkeroptions.exe"
+		]
+	t.addbuildtargets("smoke_suite/test_resources/apply_usecases/linker_options/bld.inf", [
+		"test_apply_linkeroptions_/test_apply_linkeroptions_exe/tools2/deb/test_apply_linkeroptions.o",
+		"test_apply_linkeroptions_/test_apply_linkeroptions_exe/tools2/rel/test_apply_linkeroptions.o"
+	])
+	t.mustmatch = ["-lwsock32"]
+	t.run("windows")
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/armv5_asmtest.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,55 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "16"
+	t.name = "armv5_asmtest"
+	t.command = "sbs -b smoke_suite/test_resources/asmtest/bld.inf -c armv5"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/asmtest.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/asmtest.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/asmtest.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/asmtest.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/asmtest.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/asmtest.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/asmtest/bld.inf', [
+		"asmtest_/armv5/udeb/asmtest_udeb_objects.via",
+		"asmtest_/armv5/udeb/testassembler.o.d",
+		"asmtest_/armv5/udeb/testassembler.o",
+		"asmtest_/armv5/udeb/testassembler.o",
+		"asmtest_/armv5/udeb/testcia_.o",
+		"asmtest_/armv5/udeb/testcia_.cpp",
+		"asmtest_/armv5/udeb/testcia_.pre",
+		"asmtest_/armv5/udeb/testcia_.pre.d",
+		"asmtest_/armv5/udeb/testasm.o.d",
+		"asmtest_/armv5/udeb/testasm.o",
+		"asmtest_/armv5/urel/asmtest_urel_objects.via",
+		"asmtest_/armv5/urel/testassembler.o.d",
+		"asmtest_/armv5/urel/testassembler.o",
+		"asmtest_/armv5/urel/testassembler.o",
+		"asmtest_/armv5/urel/testcia_.o",
+		"asmtest_/armv5/urel/testcia_.cpp",
+		"asmtest_/armv5/urel/testcia_.pre",
+		"asmtest_/armv5/urel/testcia_.pre.d",
+		"asmtest_/armv5/urel/testasm.o.d",
+		"asmtest_/armv5/urel/testasm.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/armv5_stringtable.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "26"
+	t.name = "armv5_stringtable"
+	t.command = "sbs -b smoke_suite/test_resources/simple_stringtable/bld.inf" \
+			+ " -c armv5 EXPORT"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/include/strconsts.h"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_stringtable/bld.inf', [
+		"stringtabletest_/strconsts.h",
+		"stringtabletest_/strconsts.cpp"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/armv5_testcode.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,39 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "28"
+	t.name = "armv5_testcode"
+	t.command = "sbs -b smoke_suite/test_resources/simple_test/bld.inf -c " + \
+			"armv5.test -f - "
+	
+	# Don't allow -f to be appended
+	t.logfileOption = lambda :""
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/urel/simple_test_auto.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/simple_test_manual.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/simple_test_auto.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/simple_test_manual.exe",
+		"$(EPOCROOT)/epoc32/include/testexportheader.h",
+		"$(EPOCROOT)/epoc32/data/z/test/simple_test/armv5.auto.bat",
+		"$(EPOCROOT)/epoc32/data/z/test/simple_test/armv5.manual.bat"
+		]
+	t.mustmatch = [".*/epoc32/data/z/test/simple_test/armv5.auto.bat</build>.*"]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/armv7_asmtest.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,55 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "17"
+	t.name = "armv7_asmtest"
+	t.command = "sbs -b smoke_suite/test_resources/asmtest/bld.inf -c armv7"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/asmtest.exe",
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/asmtest.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/asmtest.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/asmtest.exe",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/asmtest.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/asmtest.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/asmtest/bld.inf', [
+		"asmtest_/armv7/udeb/asmtest_udeb_objects.via",
+		"asmtest_/armv7/udeb/testassembler.o.d",
+		"asmtest_/armv7/udeb/testassembler.o",
+		"asmtest_/armv7/udeb/testassembler.o",
+		"asmtest_/armv7/udeb/testcia_.o",
+		"asmtest_/armv7/udeb/testcia_.cpp",
+		"asmtest_/armv7/udeb/testcia_.pre",
+		"asmtest_/armv7/udeb/testcia_.pre.d",
+		"asmtest_/armv7/udeb/testasm.o.d",
+		"asmtest_/armv7/udeb/testasm.o",
+		"asmtest_/armv7/urel/asmtest_urel_objects.via",
+		"asmtest_/armv7/urel/testassembler.o.d",
+		"asmtest_/armv7/urel/testassembler.o",
+		"asmtest_/armv7/urel/testassembler.o",
+		"asmtest_/armv7/urel/testcia_.o",
+		"asmtest_/armv7/urel/testcia_.cpp",
+		"asmtest_/armv7/urel/testcia_.pre",
+		"asmtest_/armv7/urel/testcia_.pre.d",
+		"asmtest_/armv7/urel/testasm.o.d",
+		"asmtest_/armv7/urel/testasm.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/armv7_stringtable.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "27"
+	t.name = "armv7_stringtable"
+	t.command = "sbs -b smoke_suite/test_resources/simple_stringtable/bld.inf" \
+			+ " -c armv7 EXPORT"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/include/strconsts.h"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_stringtable/bld.inf', [
+		"stringtabletest_/strconsts.h",
+		"stringtabletest_/strconsts.cpp"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/armv7_testcode.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,39 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "29"
+	t.name = "armv7_testcode"
+	t.command = "sbs -b smoke_suite/test_resources/simple_test/bld.inf -c " + \
+			"armv7.test -f - "
+	
+	# Don't allow -f to be appended
+	t.logfileOption = lambda :""
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv7/urel/simple_test_auto.exe",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/simple_test_manual.exe",
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/simple_test_auto.exe",
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/simple_test_manual.exe",
+		"$(EPOCROOT)/epoc32/include/testexportheader.h",
+		"$(EPOCROOT)/epoc32/data/z/test/simple_test/armv7.auto.bat",
+		"$(EPOCROOT)/epoc32/data/z/test/simple_test/armv7.manual.bat"
+		]
+	t.mustmatch = [".*/epoc32/data/z/test/simple_test/armv7.auto.bat</build>.*"]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/bitmap.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,42 @@
+#
+# Copyright (c) 2000-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Component description file
+#
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "8"
+	t.name = "bitmap"
+	t.description = "This step is for testing BITMAP keyword and MIFCONV support for s60"
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/bitmap/bld.inf BITMAP && grep -ir 'MIFCONV_TEST:=1' $(EPOCROOT)/epoc32/build"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/include/testbitmap.mbg",
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/testbitmap.mBm",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/test/mifconv.xml",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/test/mifconv.flm"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/bitmap/bld.inf', [
+		"testbitmap_dll/testbitmap.mBm_bmconvcommands"
+	])
+	t.mustmatch = [
+		".*Makefile(_all)?.bitmap:MIFCONV_TEST:=1.*"
+	]
+	t.mustnotmatch = [
+		".*Makefile(_all)?.default:MIFCONV_TEST.*"
+	]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/capability_arm.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,76 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+import sys
+
+def run():
+	t = SmokeTest()
+	t.usebash = True
+
+
+	if sys.platform.startswith("win"):
+		elf2e32 = "$(EPOCROOT)/epoc32/tools/elf2e32.exe"
+	else:
+		elf2e32 = "$(EPOCROOT)/epoc32/tools/elf2e32"
+
+	description = """This test attempts to check that an exe gets the capabilities that we requested.  It's ARM specific since it uses elf2e32. Tries to demonstrate capabilties being turned off then on in the mmp."""
+	command = "sbs -b smoke_suite/test_resources/simple/capability.inf -c %s -m ${SBSMAKEFILE} -f ${SBSLOGFILE} && " + \
+			  elf2e32 + " --dump=s  --e32input=$(EPOCROOT)/epoc32/release/armv5/urel/test_capability.exe"
+	targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_capability.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_capability.exe.map"
+		]	
+	buildtargets = [
+		]
+	mustmatch = [
+		"\s*Secure ID: 10003a5c$",
+		"\s*Vendor ID: 00000000$",
+		"\s*Capabilities: 00000000 000fffbf$",
+		"\s*CommDD$",
+		"\s*PowerMgmt$",
+		"\s*MultimediaDD$",
+		"\s*ReadDeviceData$",
+		"\s*WriteDeviceData$",
+		"\s*TrustedUI$",
+		"\s*DiskAdmin$",
+		"\s*NetworkControl$",
+		"\s*AllFiles$",
+		"\s*SwEvent$",
+		"\s*NetworkServices$",
+		"\s*LocalServices$",
+		"\s*ReadUserData$",
+		"\s*WriteUserData$",
+		"\s*Location$",
+		"\s*SurroundingsDD$",
+		"\s*UserEnvironment$",
+		"\s*TCB$"
+	]
+	mustnotmatch = [
+		"DRM"
+	]
+	warnings = 0
+	
+	t.id = "0107"
+	t.name = "capability_arm"
+	t.description = description
+	t.command = command % "arm.v5.urel.gcce4_4_1"
+	t.targets = targets
+	t.mustmatch = mustmatch
+	t.mustnotmatch = mustnotmatch
+	t.warnings = warnings
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/clean_readonly.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,72 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+import os
+import stat
+
+def run():
+	
+	# build something; make it read-only; then try and clean it
+	
+	t = AntiTargetSmokeTest()
+	t.id = "10a"
+	t.name = "clean_readonly" 
+	t.command = "sbs -b smoke_suite/test_resources/simple_dll/bld.inf -c armv5"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll.dll"
+	]
+	t.addbuildtargets("smoke_suite/test_resources/simple_dll/bld.inf",
+	[
+	"createstaticdll_dll/armv5/udeb/CreateStaticDLL.o",
+	"createstaticdll_dll/armv5/urel/CreateStaticDLL.o"
+	])
+	t.run()
+	setupOK = (t.result != AntiTargetSmokeTest.FAIL)
+	
+	# This particular file createstaticdll.dll is changed to be readonly to test
+	# 		if sbs CLEAN command actually gets rid of read only files
+	fileForClean = os.environ['EPOCROOT'] + "/epoc32/release/armv5/urel/createstaticdll.dll"
+	if os.path.exists(fileForClean):
+		os.chmod(fileForClean, stat.S_IREAD)
+	
+	t.id = "10"
+	t.command = "sbs -b smoke_suite/test_resources/simple_dll/bld.inf -c armv5 CLEAN"
+	t.targets = []
+	t.antitargets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll.dll"
+	]
+	t.addbuildantitargets("smoke_suite/test_resources/simple_dll/bld.inf",
+	[
+	"createstaticdll_dll/armv5/udeb/CreateStaticDLL.o",
+	"createstaticdll_dll/armv5/urel/CreateStaticDLL.o"
+	])
+	t.run()
+	
+	if not setupOK:
+		t.result = AntiTargetSmokeTest.FAIL
+		
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/cli_makevar_override.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,38 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+# Checks that functionality for overriding makefile varaibles at the command no longer works
+# The mechanism for dealing with this was removed as the fix for SF bug 2134
+# On the CLI, "something=something" is now treated as a target rather than a variable assignment
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.name = "cli_makevar_overide"
+	t.id = "0117"
+	t.description = "Attempt to override a makefile var at the command line."
+	t.usebash = True
+	
+	t.command = "sbs -b smoke_suite/test_resources/basics/helloworld/Bld.inf REALLYCLEAN -m ${SBSMAKEFILE} -f ${SBSLOGFILE} HOSTPLATFORM_DIR=unlikelydir"  
+	
+	t.mustmatch = ["sbs: warning: CLEAN, CLEANEXPORT and a REALLYCLEAN should not be combined with other targets as the result is unpredictable"]
+	
+	t.warnings = 1
+	t.run()
+	
+	return t
+	
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/commandfile.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,38 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "4"
+	t.name = "commandfile"
+	t.command = "sbs " \
+			+ "--command=smoke_suite/test_resources/simple/commands-v7.txt " \
+			+ "-c armv7_udeb"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/test.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple/bld.inf', [
+		"test_/armv7/udeb/test.o",
+		"test_/armv7/urel/test.o"
+	])
+	t.run()
+	return t
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/commandline.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,38 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# General commandline option handling tests which aren't appropriate as unit tests.
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "85a"
+	t.name = "commandline_nodefaults"
+	t.description = """Test that raptor complains if you run it without specifying any components and there is no default bld.inf or system definition in the current directory."""
+	t.usebash = True
+			
+	t.command = """
+		TMPDIR="build/commandline_testdefaults";
+		cd $(EPOCROOT)/epoc32 && rm -rf "$TMPDIR" 2>/dev/null; mkdir -p "$TMPDIR" && cd "$TMPDIR" &&
+		sbs ${SBSLOGFILE} -n ; rm -rf "$TMPDIR"
+	""" 
+		
+	t.mustmatch = [".*warning: No default bld.inf or system definition.*found.* "]
+	t.warnings = 1
+	t.run()
+
+	t.id = "0085"
+	t.name = "commandline"
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/configpath.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,103 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+import os
+import os.path
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.logfileOption = lambda :""
+	t.id = "0074a"
+	t.name = "configpath"
+	t.description = """Test --configpath option for sbs. Specify two remote
+			locations and use the variants in those folders along with ones in
+			each of the default folders."""
+
+	# the variants here affect compile steps so we only need to see a single compile
+	# to know whether the variant is doing its thing or not.
+	t.addbuildtargets("smoke_suite/test_resources/simple/bld.inf",
+	                  ["test_/armv5/udeb/test.o"])
+
+	result = SmokeTest.PASS
+
+	# the extra config folders are
+	# smoke_suite/test_resources/configpathtest/v{2,3}
+	sbshome = os.environ["SBS_HOME"].replace("\\","/")
+
+	aFolder = sbshome + "/test/smoke_suite/test_resources/configpathtest/v2"
+	bFolder = sbshome + "/test/smoke_suite/test_resources/configpathtest/v3"
+
+	common = "sbs -b smoke_suite/test_resources/simple/bld.inf " + \
+			"-c armv5.configpathtest1.configpathtest2.configpathtest3"
+
+	# run the command using the built-in default systemConfig
+	t.command = common + " --configpath=" + aFolder + os.pathsep + bFolder + \
+			" -f -"
+
+	t.mustmatch = [
+		".*armv5_udeb.configpathtest1.configpathtest2.configpathtest3.*",
+		".*armv5_urel.configpathtest1.configpathtest2.configpathtest3.*",
+		".*Duplicate variant 'configpathtest3'.*",
+		".*-DTESTPASSED.*",
+		".*-DOSVARIANT95WASAPPLIED.*"
+		]
+	t.mustnotmatch = [
+		".*sbs: error: Unknown variant.*",
+		".*-DTESTFAILED.*"
+		]
+	# Duplicate variant is Info not Warn
+	t.warnings = 0
+	t.run()
+
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	# run the command again using a systemConfig from $HOME/.sbs_init.xml
+	# and the configpath as two separate options.
+	t.usebash = True
+	homedir = sbshome + "/test/smoke_suite/test_resources/configpathtest/home"
+	t.command = "export HOME=" + homedir + "; " + common + \
+			" --configpath=" + aFolder + " --configpath=" + bFolder + " -f -"
+	t.id = "0074b"
+	t.mustmatch = [
+		".*armv5_udeb.configpathtest1.configpathtest2.configpathtest3.*",
+		".*armv5_urel.configpathtest1.configpathtest2.configpathtest3.*",
+		".*Duplicate variant 'configpathtest3'.*"
+		]
+	t.mustnotmatch = [
+		".*sbs: error: Unknown variant.*"
+		]
+	t.run()
+
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	# Clean
+	t.mustmatch = []
+	t.targets = []
+	t.id = "0074c"
+	t.name = "CLEAN"
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 " + \
+			"REALLYCLEAN"
+	t.run() # Does not contribute to results
+
+	t.id = "74"
+	t.name = "configpath"
+	t.result = result
+	t.print_result()
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/defs_armv5.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,41 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest 
+
+def run():
+	t = SmokeTest()
+	t.id = "21"
+	t.name = "defs_armv5"
+	t.command = "sbs -b smoke_suite/test_resources/defs/group/bld.inf -c armv5"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/deftest.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/deftest.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/deftest{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/deftest.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/deftest.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/deftest.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/deftest.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/deftest.dll.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/defs/group/bld.inf', [
+		"deftest_/armv5/udeb/deftest_udeb_objects.via",
+		"deftest_/armv5/udeb/test.o",
+		"deftest_/armv5/urel/deftest_urel_objects.via",
+		"deftest_/armv5/urel/test.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/defs_armv7.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,41 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest 
+
+def run():
+	t = SmokeTest()
+	t.id = "22"
+	t.name = "defs_armv7"
+	t.command = "sbs -b smoke_suite/test_resources/defs/group/bld.inf -c armv7"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/deftest.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/deftest.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/deftest{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/deftest.dso",
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/deftest.dll",
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/deftest.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/deftest.dll",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/deftest.dll.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/defs/group/bld.inf', [
+		"deftest_/armv7/udeb/deftest_udeb_objects.via",
+		"deftest_/armv7/udeb/test.o",
+		"deftest_/armv7/urel/deftest_urel_objects.via",
+		"deftest_/armv7/urel/test.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/delete_on_failed_compile.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,109 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+import os
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+	t = AntiTargetSmokeTest()
+	t.id = "116"
+	t.name = "delete_on_failed_compile"
+	t.description = "Test that object files are not present following a forced failed compile."
+	
+	t.usebash = True
+	base_command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 -k"
+	
+	t.id = "116a" # Ensure everything is reallyclean before the test
+	t.name = "delete_on_failed_compile_reallyclean_01"
+	t.errors = 0
+	t.returncode = 0
+	t.antitargets = [ ]
+	t.command = base_command + " reallyclean"
+	t.run()
+	
+	t.id = "116b"  # Object files should *not* be present after this forced failed compile
+	t.name = "delete_on_failed_compile_build"
+	t.errors = 0
+	t.returncode = 1
+	# None of these files should be present
+	t.addbuildantitargets('smoke_suite/test_resources/simple/bld.inf', 
+		[	"test_/armv5/udeb/test.o",
+			"test_/armv5/udeb/test1.o",
+			"test_/armv5/udeb/test2.o",
+			"test_/armv5/udeb/test3.o",
+			"test_/armv5/udeb/test4.o",
+			"test_/armv5/udeb/test5.o",
+			"test_/armv5/udeb/test6.o",
+			"test_/armv5/urel/test.o",
+			"test_/armv5/urel/test1.o",
+			"test_/armv5/urel/test2.o",
+			"test_/armv5/urel/test3.o",
+			"test_/armv5/urel/test4.o",
+			"test_/armv5/urel/test5.o",
+			"test_/armv5/urel/test6.o"  ])
+	sbshome = os.environ["SBS_HOME"].replace("\\","/").rstrip("/")
+	t.command = base_command.replace("armv5", "armv5.fake_compiler") + \
+	" --configpath=%s/test/smoke_suite/test_resources/simple/compilervariants" % sbshome
+	t.run()
+	
+	t.id = "116c"
+	t.name = "delete_on_failed_compile_reallyclean_02"
+	t.errors = 0
+	t.returncode = 0
+	t.antitargets = [] # Remove the list of anti-targets
+	t.command = base_command + " reallyclean"
+	t.run()
+	
+	t.id = "116d"  # Use a redefined make_engine variant - object files *should* be present
+	t.name = "delete_on_failed_compile_build_redefined_make_engine"
+	t.errors = 0
+	t.returncode = 1
+	t.antitargets = [] # Remove the list of anti-targets
+	# All of these files should be present
+	t.addbuildtargets('smoke_suite/test_resources/simple/bld.inf', 
+		[	"test_/armv5/udeb/test.o",
+			"test_/armv5/udeb/test1.o",
+			"test_/armv5/udeb/test2.o",
+			"test_/armv5/udeb/test3.o",
+			"test_/armv5/udeb/test4.o",
+			"test_/armv5/udeb/test5.o",
+			"test_/armv5/udeb/test6.o",
+			"test_/armv5/urel/test.o",
+			"test_/armv5/urel/test1.o",
+			"test_/armv5/urel/test2.o",
+			"test_/armv5/urel/test3.o",
+			"test_/armv5/urel/test4.o",
+			"test_/armv5/urel/test5.o",
+			"test_/armv5/urel/test6.o"  ])
+	
+	t.command = base_command.replace("armv5", "armv5.fake_compiler") + " -e make_test " \
+	+ " --configpath=%s/test/smoke_suite/test_resources/simple/compilervariants " % sbshome \
+	+ " --configpath=%s/test/smoke_suite/test_resources/simple/makevariants" % sbshome
+	t.run()
+	
+	t.id = "116e"
+	t.name = "delete_on_failed_compile_reallyclean_03"
+	t.errors = 0
+	t.returncode = 0
+	t.antitargets = [] # Remove the list of anti-targets
+	t.targets = [] # Remove the list of targets
+	t.command = base_command + " reallyclean"
+	t.run()
+	
+	t.id = "116"
+	t.name = "delete_on_failed_compile"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/depcrunch_test.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,46 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.usebash = True
+	
+	t.description = "Test that dependency crunching for resource dependency files produces expected output" 
+
+	t.id = "43562999"
+	t.name = "depcrunch"
+	t.command = "python $SBS_HOME/bin/depcrunch.py --extensions mbg,rsg --assume EPOCROOT < smoke_suite/test_resources/depcrunch/dep2.rpp.d"
+	t.mustmatch_multiline = [
+		r"EPOCROOT/epoc32/build/resource/c_98665870f0168225/dependentresource_/dependentresource_dependentresource_sc.rpp: \\\n"+
+		r" EPOCROOT/testresource1.mbg \\\n"+
+		r" EPOCROOT/testresource2.rsg \\\n"+
+		r" EPOCROOT/testresource3.rsg \\\n"+
+		r" EPOCROOT/testresource4.mbg \\\n"+
+		r" EPOCROOT/testresource5.rsg \\\n"+
+		r" EPOCROOT/testresource6.mbg \\\n"+
+		r" EPOCROOT/testresource7.rsg \\\n"+
+		r" EPOCROOT/testresource8.mbg \\\n"+
+		r" EPOCROOT/testresource9.rsg \n"
+		]
+	t.run()
+
+
+	t.print_result()
+	
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/dependencies.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,194 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+from raptor_meta import BldInfFile
+import os
+
+def run():
+	t = AntiTargetSmokeTest()
+	t.usebash = True
+	
+	genericTargets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/dependency.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/dependency.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/dependency.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/dependency.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/dependency.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/dependency.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/dependency.exe",
+		"$(EPOCROOT)/epoc32/include/dependency.rsg",
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/dependency.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/dependency.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/dependency.rsc",
+		"$(EPOCROOT)/epoc32/include/main.rsg",
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/main.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/main.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/main.rsc"
+		]
+	windowsTargets = [
+		"$(EPOCROOT)/epoc32/release/tools2/rel/dependency.exe",
+		"$(EPOCROOT)/epoc32/tools/dependency.exe"
+	]
+	linuxTargets = [
+		"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/rel/dependency",
+		"$(EPOCROOT)/epoc32/tools/dependency"
+	]
+
+	# Set general host platform specifics from first test run, but assume Windows initially
+	hostPlatform = "windows"
+	hostPlatformTargets = genericTargets + windowsTargets
+	hostPlatformOffset = ""
+
+	t.id = "0098a"
+	t.name = "baseline_build"
+	t.description = "Build a component with source and resource files that are dependent on header files exported in the build"
+	t.command = """
+		cp smoke_suite/test_resources/dependencies/src/dependency1.cpp smoke_suite/test_resources/dependencies/dependency.cpp
+		cp smoke_suite/test_resources/dependencies/src/dependency1.rss smoke_suite/test_resources/dependencies/dependency.rss
+		sbs -b smoke_suite/test_resources/dependencies/bld.inf -c default -c tools2_rel"""		
+	t.mustnotmatch = [
+		"<warning>Missing dependency detected: .*</warning>"
+	]
+	t.targets = hostPlatformTargets
+	t.run(hostPlatform)
+	if t.result == AntiTargetSmokeTest.SKIP:
+		hostPlatform = "linux"
+		hostPlatformTargets = genericTargets + linuxTargets
+		hostPlatformOffset = "$(HOSTPLATFORM_DIR)/"
+		t.targets = hostPlatformTargets
+		t.run(hostPlatform)
+	
+	# Ensure we don't clean up from the previous build in the following two tests
+	t.targets = []
+	
+	# Core expected outcome for the following two tests
+	t.mustmatch = [
+		".*recipe name='compile' target='.*dependency\.o'",
+		".*recipe name='win32compile2object' target='.*dependency\.o'",
+		".*recipe name='compile2object' target='.*dependency\.o'",
+		".*recipe name='resourcecompile' target='.*dependency\.rsc'"
+	]
+	t.countmatch = [
+		[".*recipe name='compile'", 2],
+		[".*recipe name='win32compile2object'", 2],
+		[".*recipe name='compile2object'", 1],
+		[".*recipe name='resourcecompile'", 1]
+	]
+
+	
+	t.id = "0098b"
+	t.name ="touched_header_dependencies"
+	t.description = "Touch the exported header files and check that only the related source and resource files are re-built"
+	t.command = """
+		sleep 1
+		touch $(EPOCROOT)/epoc32/include/dependency.h
+		touch $(EPOCROOT)/epoc32/include/dependency.rh
+		sbs -f- -b smoke_suite/test_resources/dependencies/bld.inf -c default -c tools2_rel"""
+	t.run()
+
+	
+	t.id = "0098c"
+	t.name ="redundant_header_dependencies"
+	t.description = """
+		Build the component again, but manipulate it so that (a) it no longer has a dependency on the exported header files and
+		(b) the header files have been removed and (c) the header files are no longer exported.  Check that only the related source
+		and resource files are re-built"""
+	t.command = """
+		cp smoke_suite/test_resources/dependencies/src/dependency2.cpp smoke_suite/test_resources/dependencies/dependency.cpp
+		cp smoke_suite/test_resources/dependencies/src/dependency2.rss smoke_suite/test_resources/dependencies/dependency.rss
+		rm -rf $(EPOCROOT)/epoc32/include/dependency.h
+		rm -rf $(EPOCROOT)/epoc32/include/dependency.rh
+		sbs -f- --noexport -b smoke_suite/test_resources/dependencies/bld.inf -c default -c tools2_rel"""
+	t.mustnotmatch = []
+	# Note that the resource build does not exhibit a missing dependency as its dependency files are generated in a separate stage where
+	# the target file isn't actually a target of that stage
+	t.mustmatch.extend([
+		"<warning>Missing dependency detected: .*/epoc32/include/dependency.h</warning>"
+		])
+	t.warnings = 1
+	t.run()
+	
+
+	t.id = "0098d"
+	t.name ="invalid_dependency_files"
+	t.description = "Invalidate dependency files, then make sure we can clean and re-build successfully"
+	buildLocation = "$(EPOCROOT)/epoc32/build/" + BldInfFile.outputPathFragment('smoke_suite/test_resources/dependencies/bld.inf') + "/dependency_"
+	t.command = """
+		sleep 1
+		touch smoke_suite/test_resources/dependencies/dependency.cpp
+		echo INVALIDATE_ARMV5_DEPENDENCY_FILE >> """+buildLocation+"""/armv5/urel/dependency.o.d
+		echo INVALIDATE_WINSCW_DEPENDENCY_FILE >> """+buildLocation+"""/winscw/urel/dependency.o.d
+		echo INVALIDATE_TOOLS2_DEPENDENCY_FILE >> """+buildLocation+"""/dependency_exe/tools2/rel/"""+hostPlatformOffset+"""dependency.o.d
+		echo INVALIDATE_RESOURCE_DEPENDENCY_FILE >> """+buildLocation+"""/dependency__resource_apps_sc.rpp.d
+		sbs -b smoke_suite/test_resources/dependencies/bld.inf -c default -c tools2_rel
+		sbs -b smoke_suite/test_resources/dependencies/bld.inf -c default -c tools2_rel clean
+		sbs -b smoke_suite/test_resources/dependencies/bld.inf -c default -c tools2_rel"""
+	t.mustmatch = []
+	t.countmatch = []
+	t.warnings = 0
+	t.errors = 1 # We expect an error from the first build due to the deliberate dependency file corruption
+	t.targets = hostPlatformTargets
+	t.run(hostPlatform)
+
+
+	t.id = "0098e"
+	t.name ="no_depend_include"
+	t.description = "Invalidate dependency files in order to confirm they aren't processed when --no-depend-include is used"
+	buildLocation = "$(EPOCROOT)/epoc32/build/" + BldInfFile.outputPathFragment('smoke_suite/test_resources/dependencies/bld.inf') + "/dependency_"
+	t.command = """
+		sleep 1
+		touch smoke_suite/test_resources/dependencies/dependency.cpp
+		echo INVALIDATE_ARMV5_DEPENDENCY_FILE >> """+buildLocation+"""/armv5/urel/dependency.o.d
+		echo INVALIDATE_WINSCW_DEPENDENCY_FILE >> """+buildLocation+"""/winscw/urel/dependency.o.d
+		echo INVALIDATE_TOOLS2_DEPENDENCY_FILE >> """+buildLocation+"""/dependency_exe/tools2/rel/"""+hostPlatformOffset+"""dependency.o.d
+		sbs --no-depend-include -b smoke_suite/test_resources/dependencies/bld.inf -c default -c tools2_rel"""
+	t.errors = 0		
+	t.targets = hostPlatformTargets
+	t.run(hostPlatform)
+
+
+	t.id = "0098f"
+	t.name ="no_depend_generate"
+	t.description = "Invalidate and remove dependency files in order to confirm they are neither included nor re-generated when --no-depend-generate is used"
+	buildLocation = "$(EPOCROOT)/epoc32/build/" + BldInfFile.outputPathFragment('smoke_suite/test_resources/dependencies/bld.inf') + "/dependency_"
+	t.command = """
+		sleep 1
+		touch smoke_suite/test_resources/dependencies/dependency.cpp
+		touch smoke_suite/test_resources/dependencies/main.cpp
+		echo INVALIDATE_ARMV5_DEPENDENCY_FILE >> """+buildLocation+"""/armv5/urel/dependency.o.d
+		echo INVALIDATE_WINSCW_DEPENDENCY_FILE >> """+buildLocation+"""/winscw/urel/dependency.o.d
+		echo INVALIDATE_TOOLS2_DEPENDENCY_FILE >> """+buildLocation+"""/dependency_exe/tools2/rel/"""+hostPlatformOffset+"""dependency.o.d
+		sbs --no-depend-generate -b smoke_suite/test_resources/dependencies/bld.inf -c default -c tools2_rel"""
+	t.antitargets = [
+		buildLocation+"/armv5/urel/main.o.d",
+		buildLocation+"/armv5/udeb/main.o.d",
+		buildLocation+"/winscw/urel/main.o.d",
+		buildLocation+"/winscw/udeb/main.o.d",
+		buildLocation+"/dependency_exe/tools2/rel/"+hostPlatformOffset+"main.o.d"
+		]
+	t.targets = hostPlatformTargets
+	t.run(hostPlatform)
+	
+	# clean-up
+	os.remove("smoke_suite/test_resources/dependencies/dependency.cpp")
+	os.remove("smoke_suite/test_resources/dependencies/dependency.rss")
+
+	t.id = "98"
+	t.name = "dependencies"
+	t.print_result()
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/dll_armv5.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,87 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+	t = AntiTargetSmokeTest()
+	t.usebash = True
+	
+	command = "sbs -b smoke_suite/test_resources/simple_dll/bld.inf -c %s -f-"
+	maintargets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll.dll"
+		]
+	abiv1libtargets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll{000a0000}.lib"
+		]	
+	buildtargets =  [
+		"createstaticdll_dll/armv5/udeb/CreateStaticDLL.o",
+		"createstaticdll_dll/armv5/urel/CreateStaticDLL.o"
+		]
+	mustmatch = [
+		r".*\busrt\d_\d\.lib\b.*",
+		r".*\bscppnwdl\.dso\b.*"
+			]
+	mustnotmatch = [
+		".*ksrt.*"
+		]
+	
+	# Note that ABIv1 import libraries are only generated for RVCT-based armv5
+	# builds on Windows if the kit asks for it (off by default)
+	
+	t.id = "0009a"
+	t.name = "dll_armv5_rvct"
+	t.command = command % "armv5"
+	t.targets = maintargets[:]	# Shallow, as we optionally extend later and then re-use
+	t.addbuildtargets('smoke_suite/test_resources/simple_dll/bld.inf', buildtargets)
+	t.mustmatch = mustmatch
+	t.mustnotmatch = mustnotmatch
+	t.run()
+	
+	t.id = "0009b"
+	t.name = "dll_armv5_rvct_abiv1"
+	t.command += " --configpath=test/config/abiv1kit"
+	t.targets.extend(abiv1libtargets)
+	t.run("windows")
+		
+	t.id = "0009c"
+	t.name = "dll_armv5_clean"
+	t.command = "sbs -b smoke_suite/test_resources/simple_dll/bld.inf -c armv5 clean"
+	t.targets = []
+	t.mustmatch = []
+	t.mustnotmatch = []
+	t.run()	
+		
+	t.id = "0009d"
+	t.name = "dll_armv5_gcce"
+	t.command = command % "gcce_armv5"
+	t.targets = maintargets
+	t.antitargets = abiv1libtargets
+	t.addbuildtargets('smoke_suite/test_resources/simple_dll/bld.inf', buildtargets)
+	t.mustmatch = mustmatch
+	t.mustnotmatch = mustnotmatch
+	t.run()	
+	
+	t.id = "9"
+	t.name = "dll_armv5"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/dll_armv5_smp.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.name = "dll_armv5_smp"
+	t.id = "63"
+	t.command = "sbs -b smoke_suite/test_resources/simple_dll/bld.inf -c " + \
+			"armv5 -c armv5.smp"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/armv5smp/udeb/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5smp/urel/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5smp/udeb/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/armv5smp/urel/createstaticdll.dll"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_dll/bld.inf', [
+		"createstaticdll_dll/armv5/udeb/CreateStaticDLL.o",
+		"createstaticdll_dll/armv5/urel/CreateStaticDLL.o",
+		"createstaticdll_dll/armv5smp/udeb/CreateStaticDLL.o",
+		"createstaticdll_dll/armv5smp/urel/CreateStaticDLL.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/dll_armv5_winscw_freeze.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,109 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+from raptor_tests import where
+
+def run():
+	t = SmokeTest()
+	t.id = "0012a"
+	t.name = "dll_armv5_winscw_freeze"
+	t.description = """Builds a component with unfrozen exports from clean,
+		followed by a FREEZE, a further CLEAN and then a check that new .def
+		files are present. The PERL environment variable is set to the absolute
+		Perl path in order to test a known issue with the execution of tools
+		such as efreeze under Cygwin when multiple arguments are listed.
+		Part b tests whether removing an export works when using the variant;
+		remove_freeze"""
+	t.usebash = True
+	
+	perl_location = where("perl")
+	
+	t.command = """
+sbs -b smoke_suite/test_resources/unfrozen/freeze.inf -p unfrozensymbols_for_freeze.mmp -c armv5 -c winscw CLEAN > /dev/null &&
+export PERL="%s" &&
+sbs -b smoke_suite/test_resources/unfrozen/freeze.inf -p unfrozensymbols_for_freeze.mmp -c armv5 -c winscw > /dev/null &&
+sbs -b smoke_suite/test_resources/unfrozen/freeze.inf -p unfrozensymbols_for_freeze.mmp -c armv5_urel -c winscw_urel FREEZE -m ${SBSMAKEFILE} -f ${SBSLOGFILE}
+""" % perl_location
+
+	t.targets = [
+		"smoke_suite/test_resources/unfrozen/frozen/bwins/frozenu.def",
+		"smoke_suite/test_resources/unfrozen/frozen/eabi/frozenu.def"		
+		]
+
+	t.warnings = 2	
+	t.run()
+	
+	
+	t.id = "0012b"
+	t.name = "armv5_re-freeze_with_removed_export"
+	
+	t.command = "sbs -b smoke_suite/test_resources/unfrozen/freeze.inf" \
+			+ " -p frozen_with_removed_export.mmp -c armv5_urel ;" \
+			+ " sbs -b smoke_suite/test_resources/unfrozen/freeze.inf" \
+			+ " -p frozen_with_removed_export.mmp FREEZE" \
+			+ " -c armv5_urel.remove_freeze" \
+			+ " -m ${SBSMAKEFILE} -f ${SBSLOGFILE} &&" \
+			+ " grep -ir '_ZN10CMessenger11ShowMessageEv @ 1 NONAME ABSENT' $(SBS_HOME)/test/smoke_suite/test_resources/unfrozen/frozen/eabi/frozenu.def"
+			
+	t.targets = []
+	t.mustmatch = [
+		"_ZN10CMessenger11ShowMessageEv @ 1 NONAME ABSENT"
+	]
+	t.warnings = 0
+	t.errors = 1
+			
+	t.run()
+	
+	
+	t.id = "0012c"
+	t.name = "winscw_re-freeze_with_removed_export"
+	
+	t.command = "sbs -b smoke_suite/test_resources/unfrozen/freeze.inf" \
+			+ " -p frozen_with_removed_export.mmp -c winscw_urel ;" \
+			+ " sbs -b smoke_suite/test_resources/unfrozen/freeze.inf" \
+			+ " -p frozen_with_removed_export.mmp FREEZE" \
+			+ " -c winscw_urel.remove_freeze" \
+			+ " -m ${SBSMAKEFILE} -f ${SBSLOGFILE} &&" \
+			+ " grep -ir '?ShowMessage@CMessenger@@QAEXXZ @ 3 NONAME ABSENT' $(SBS_HOME)/test/smoke_suite/test_resources/unfrozen/frozen/bwins/frozenu.def"
+
+	t.mustmatch = [
+		"\?ShowMessage@CMessenger@@QAEXXZ @ 3 NONAME ABSENT"
+	]
+			
+	t.run()
+	
+
+	t.id = "0012d"
+	t.name = "efreeze_info"
+	
+	t.command = "sbs -b smoke_suite/test_resources/unfrozen/freeze.inf" \
+			+ " -p unfrozensymbols_for_freeze.mmp -c winscw freeze"
+			
+	t.mustmatch = [
+		"EFREEZE: DEF file up to date"
+	]
+	t.warnings = 0
+	t.errors = 0
+			
+	t.run()
+
+
+	t.id = "12"
+	t.name = "dll_armv5_winscw_freeze"
+	t.print_result()
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/dll_armv6.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,68 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+	t = AntiTargetSmokeTest()
+
+	rootcommand = "sbs -b smoke_suite/test_resources/simple_dll/bld.inf"
+	targets = [
+		"$(EPOCROOT)/epoc32/release/armv6/udeb/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv6/urel/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv6/udeb/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/armv6/urel/createstaticdll.dll"
+		]
+	antitargets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll{000a0000}.lib"
+		]
+	buildtargets = [
+		"createstaticdll_dll/armv6/udeb/CreateStaticDLL.o",
+		"createstaticdll_dll/armv6/urel/CreateStaticDLL.o",
+		"createstaticdll_dll/armv6/udeb/armv6_specific.o",
+		"createstaticdll_dll/armv6/urel/armv6_specific.o"
+	]
+	
+	t.id = "0097a"
+	t.name = "dll_armv6_rvct"
+	t.command = rootcommand + " -c armv6"
+	t.targets = targets
+	t.antitargets = antitargets
+	t.addbuildtargets("smoke_suite/test_resources/simple_dll/bld.inf", buildtargets)
+	t.run()
+
+	t.id = "0097b"
+	t.name = "dll_armv6_clean"
+	t.command = rootcommand + " -c armv6 clean"
+	t.targets = []
+	t.antitargets = []
+	t.run()
+
+	t.id = "0097c"
+	t.name = "dll_armv6_gcce"
+	t.command = rootcommand + " -c arm.v6.udeb.gcce4_3_2 -c arm.v6.urel.gcce4_3_2"
+	t.targets = targets
+	t.antitargets = antitargets
+	t.addbuildtargets("smoke_suite/test_resources/simple_dll/bld.inf", buildtargets)
+	t.run()
+
+	t.id = "97"
+	t.name = "dll_armv6"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/dll_armv7.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,61 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	
+	rootcommand = "sbs -b smoke_suite/test_resources/simple_dll/bld.inf"
+	targets = [
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/createstaticdll.dll"
+		]
+	buildtargets = [
+		"createstaticdll_dll/armv7/udeb/CreateStaticDLL.o",
+		"createstaticdll_dll/armv7/urel/CreateStaticDLL.o",
+		"createstaticdll_dll/armv7/udeb/armv7_specific.o",
+		"createstaticdll_dll/armv7/urel/armv7_specific.o"		
+	]
+	
+	t.id = "0011a"
+	t.name = "dll_armv7_rvct"
+	t.command = rootcommand + " -c armv7"
+	t.targets = targets
+	t.addbuildtargets("smoke_suite/test_resources/simple_dll/bld.inf", buildtargets)
+	t.run()
+
+	t.id = "0011b"
+	t.name = "dll_armv7_clean"
+	t.command = rootcommand + " -c armv7 clean"
+	t.targets = []
+	t.run()
+
+	t.id = "0011c"
+	t.name = "dll_armv7_gcce"
+	t.command = rootcommand + " -c arm.v7.udeb.gcce4_3_2 -c arm.v7.urel.gcce4_3_2"
+	t.targets = targets
+	t.addbuildtargets("smoke_suite/test_resources/simple_dll/bld.inf", buildtargets)
+	t.run()
+
+	t.id = "11"
+	t.name = "dll_armv7"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/dll_winscw.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,39 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "34"
+	t.name = "dll_winscw"
+	t.command = "sbs -b smoke_suite/test_resources/simple_dll/bld.inf -c winscw"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/createstaticdll.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/createstaticdll.dll.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_dll/bld.inf', [
+		"createstaticdll_dll/winscw/udeb/CreateStaticDLL.o",
+		"createstaticdll_dll/winscw/udeb/createstaticdll.UID.CPP",
+		"createstaticdll_dll/winscw/udeb/createstaticdll_UID_.o",
+		"createstaticdll_dll/winscw/urel/CreateStaticDLL.o",
+		"createstaticdll_dll/winscw/urel/createstaticdll.UID.CPP",
+		"createstaticdll_dll/winscw/urel/createstaticdll_UID_.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/dll_winscw_win32resource.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "78"
+	t.name = "dll_winscw_win32resource"
+	t.description = """Test the construction of a custom WINSCW DLL containing Windows resources specified by win32_resource."""
+	t.command = "sbs -b smoke_suite/test_resources/simple_dll/win32resource/bld.inf -c winscw"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/createstaticdll.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/createstaticdll.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/createstaticdll.dll.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_dll/win32resource/bld.inf', [
+		"createstaticdll_dll/winscw/udeb/CreateStaticDLL.o",
+		"createstaticdll_dll/winscw/udeb/createstaticdll.UID.CPP",
+		"createstaticdll_dll/winscw/udeb/createstaticdll_UID_.o",
+		"createstaticdll_dll/winscw/udeb/gui.res",
+		"createstaticdll_dll/winscw/udeb/gui.res.d",
+		"createstaticdll_dll/winscw/urel/CreateStaticDLL.o",
+		"createstaticdll_dll/winscw/urel/createstaticdll.UID.CPP",
+		"createstaticdll_dll/winscw/urel/createstaticdll_UID_.o",
+		"createstaticdll_dll/winscw/urel/gui.res",
+		"createstaticdll_dll/winscw/urel/gui.res.d",
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/emulated_drives.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "42"
+	t.name = "emulated_drives"
+	t.command = "sbs -b " + \
+			"smoke_suite/test_resources/emulated_drives_export/bld.inf EXPORT"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/data/c/private/10001234/policy/emulated_drives_export2.mbm",
+		"$(EPOCROOT)/epoc32/winscw/c/private/10001234/policy/emulated_drives_export2.mbm",
+		"$(EPOCROOT)/epoc32/data/z/private/10001234/policy/emulated_drives_export1.mbm",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/private/10001234/policy/emulated_drives_export1.mbm",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/private/10001234/policy/emulated_drives_export1.mbm"
+		]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_armv5.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,141 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.usebash = True
+	result = SmokeTest.PASS
+
+	description = """This test is testing 2 states of keywords, DEBUGGABLE on its own and with DEBUGGABLE_UDEBONLY together; in their mmp's
+			make a new mmp change the target so that it generates another exe, and search together with that exe name when testing second test"""
+	command = "sbs -b smoke_suite/test_resources/simple/bld.inf -b smoke_suite/test_resources/simple/debuggable_bld.inf -c %s -m ${SBSMAKEFILE} -f ${SBSLOGFILE} && " + \
+			"grep -i '.*elf2e32.*--debuggable.*' ${SBSLOGFILE};"
+	targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/debuggable.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/debuggable.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/debuggable.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/debuggable.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/debuggable.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/debuggable.exe.map"
+		]	
+	buildtargets = [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o",
+		"test_/armv5/udeb/test.o.d",
+		"test_/armv5/udeb/test3.o.d",
+		"test_/armv5/udeb/test4.o.d",
+		"test_/armv5/udeb/test5.o.d",
+		"test_/armv5/udeb/test1.o.d",
+		"test_/armv5/udeb/test6.o.d",
+		"test_/armv5/udeb/test2.o.d",
+		"test_/armv5/udeb/test3.o",
+		"test_/armv5/udeb/test4.o",
+		"test_/armv5/udeb/test5.o",
+		"test_/armv5/udeb/test1.o",
+		"test_/armv5/udeb/test6.o",
+		"test_/armv5/udeb/test2.o",
+		"test_/armv5/urel/test.o.d",
+		"test_/armv5/urel/test3.o.d",
+		"test_/armv5/urel/test4.o.d",
+		"test_/armv5/urel/test5.o.d",
+		"test_/armv5/urel/test1.o.d",
+		"test_/armv5/urel/test6.o.d",
+		"test_/armv5/urel/test2.o.d",
+		"test_/armv5/urel/test3.o",
+		"test_/armv5/urel/test4.o",
+		"test_/armv5/urel/test5.o",
+		"test_/armv5/urel/test1.o",
+		"test_/armv5/urel/test6.o",
+		"test_/armv5/urel/test2.o",
+		"test_/armv5/udeb/test_udeb_objects.via",
+		"test_/armv5/urel/test_urel_objects.via"
+		]
+	mustmatch = [
+		".*elf2e32.*urel.*test.exe.*--debuggable.*",
+		".*elf2e32.*udeb.*test.exe.*--debuggable.*",
+		".*elf2e32.*udeb.*debuggable.exe.*--debuggable.*"
+	]
+	mustnotmatch = [
+		".*elf2e32.*urel.*debuggable.exe.*--debuggable.*"
+	]
+	warnings = 1
+	
+	t.id = "0001a"
+	t.name = "exe_armv5_rvct"
+	t.description = description
+	t.command = command % "armv5"
+	t.targets = targets
+	t.addbuildtargets("smoke_suite/test_resources/simple/bld.inf", buildtargets)
+	t.mustmatch = mustmatch
+	t.mustnotmatch = mustnotmatch
+	t.warnings = warnings
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		
+	t.id = "0001b"
+	t.name = "exe_armv5_clean"
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 clean"
+	t.targets = []
+	t.mustmatch = []
+	t.mustnotmatch = []
+	t.warnings = 0
+	t.run()	
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL	
+	
+
+	t.id = "0001c"
+	t.name = "exe_armv5_gcce"
+	t.command = command % "gcce_armv5"
+	t.targets = targets
+	t.addbuildtargets("smoke_suite/test_resources/simple/bld.inf", buildtargets)
+	t.mustmatch = mustmatch
+	t.mustnotmatch = mustnotmatch
+	t.warnings = warnings
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL	
+
+
+	# Test for the Check Filter to ensure that it reports 
+	# missing files properly when used from sbs_filter.py:
+	import os
+	abs_epocroot = os.path.abspath(os.environ["EPOCROOT"])
+	t.id = "0001d"
+	t.command = "rm $(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map; sbs_filter  --filters=FilterCheck < ${SBSLOGFILE}"
+	t.targets = []
+	t.mustmatch = ["MISSING:[ 	]+" + abs_epocroot.replace("\\","\\\\") + ".epoc32.release.armv5.udeb.test\.exe\.map.*"]
+	t.mustnotmatch = []
+	t.warnings = 1
+	t.returncode = 2
+	t.run()
+
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL	
+	t.id = "1"
+	t.name = "exe_armv5"
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_armv5_filtered.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "2"
+	t.name = "exe_armv5_filtered"
+	t.description = "Run exe_armv5 with a customised filter. Will create then" \
+			+ " remove filter file"
+	t.usebash = True
+	t.command = "cp -f smoke_suite/test_resources/filter_test/testfilter.py ../python/plugins/testfilter.py " \
+				"&& chmod 600 ../python/plugins/testfilter.py " \
+				"&& sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 --filters=TestFilter " \
+				"&& rm -f ../python/plugins/testfilter.py*"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o"
+	])
+	t.mustmatch = [
+		".*Test Passed!.*"
+		]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_armv5_smp.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,42 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "62"
+	t.name = "exe_armv5_smp"
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 -c" \
+			+ " armv5.smp"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5smp/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5smp/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5smp/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5smp/urel/test.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o",
+		"test_/armv5smp/udeb/test.o",
+		"test_/armv5smp/urel/test.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_armv5_winscw_check.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,76 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest
+import re
+
+def run():
+	t = CheckWhatSmokeTest()
+	t.id = "6"
+	t.name = "exe_armv5_winscw_check"
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 -c winscw --check"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe.map"
+		]
+	t.missing = 7
+	t.returncode = 1
+	t.stdout = [
+	# armv5 artefacts
+		"MISSING: $(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"MISSING: $(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"MISSING: $(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"MISSING: $(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map",
+	# winscw artefacts
+		"MISSING: $(EPOCROOT)/epoc32/release/winscw/udeb/test.exe",
+		"MISSING: $(EPOCROOT)/epoc32/release/winscw/urel/test.exe",
+		"MISSING: $(EPOCROOT)/epoc32/release/winscw/urel/test.exe.map"
+	]
+	t.run()
+
+	t.id = "6a"
+	t.name = "exe_armv5_winscw_check_error"
+	t.command = "sbs -b no/such/bld.inf --check"
+	t.targets = []
+	t.missing = 0
+	t.errors = 2
+	t.returncode = 1
+	t.regexlinefilter = re.compile("^NEVER") # no literal stdout matching
+	t.stdout = []
+	t.mustmatch = [
+		"sbs: error:.*build info file does not exist",
+		"sbs: error: no CHECK information found",
+	]
+	t.run()
+
+	t.id = "6b"
+	t.name = "exe_armv5_winscw_what_error"
+	t.command = "sbs -b no/such/bld.inf --what"
+	t.mustmatch = [
+		"sbs: error:.*build info file does not exist",
+		"sbs: error: no WHAT information found",
+	]
+	t.run()
+
+	t.id = "6"
+	t.name = "exe_armv5_winscw_check"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_armv5_winscw_plus_clean.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,102 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest, AntiTargetSmokeTest
+
+def run():
+	result = SmokeTest.PASS
+	
+	t = SmokeTest()
+	t.id = "0005a"
+	t.name = "exe_armv5_winscw"
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 " + \
+			"-c winscw"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o",
+		"test_/winscw/udeb/test.o",
+		"test_/winscw/udeb/test_UID_.o",
+		"test_/winscw/udeb/test.UID.CPP",
+		"test_/winscw/urel/test.o",
+		"test_/winscw/urel/test_UID_.o",
+		"test_/winscw/urel/test.UID.CPP"
+	])
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		
+	
+	"Check that CLEAN removes built files"
+	c = AntiTargetSmokeTest()
+	c.id = "0005b"
+	c.name = "exe_armv5_winscw_clean"
+	c.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 " + \
+			"-c winscw CLEAN"
+	c.antitargets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe.map"
+		]
+	c.addbuildantitargets('smoke_suite/test_resources/simple/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o",
+		"test_/winscw/udeb/test.o",
+		"test_/winscw/udeb/test_UID_.o",
+		"test_/winscw/udeb/test.UID.CPP",
+		"test_/winscw/urel/test.o",
+		"test_/winscw/urel/test_UID_.o",
+		"test_/winscw/urel/test.UID.CPP"
+	])
+	c.run()
+	if c.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	
+	"Rebuild"
+	t.id = "0005c"
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	
+	"Check that REALLYCLEAN removes built files"
+	c.id = "0005d"
+	c.name = "exe_armv5_winscw_reallyclean"
+	c.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 " + \
+			"-c winscw REALLYCLEAN"
+	c.run()
+	if c.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	
+	t.id = "5"
+	t.name = "exe_armv5_winscw_plus_clean"
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_armv5_winscw_single_file.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,149 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	result = SmokeTest.PASS
+
+	t = SmokeTest()
+	t.name = "exe_armv5_winscw_single_file_baseline_build"
+
+	# Build component
+	t.id = "0089a"
+	t.command = "sbs -b smoke_suite/test_resources/simple_gui/Bld.inf -c armv5 -c winscw"
+	t.addbuildtargets('smoke_suite/test_resources/simple_gui/Bld.inf', [
+		"helloworld_exe/helloworld.mbm_bmconvcommands",
+		"helloworld_exe/helloworld_HelloWorld_sc.rpp",
+		"helloworld_exe/helloworld_HelloWorld_sc.rpp.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_Application.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Application.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppUi.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppUi.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppView.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppView.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_Document.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Document.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_Main.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Main.o.d",
+		"helloworld_exe/armv5/udeb/helloworld_udeb_objects.via",
+		"helloworld_exe/armv5/urel/HelloWorld_Application.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Application.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_AppUi.o",
+		"helloworld_exe/armv5/urel/HelloWorld_AppUi.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_AppView.o",
+		"helloworld_exe/armv5/urel/HelloWorld_AppView.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_Document.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Document.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_Main.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Main.o.d",
+		"helloworld_exe/armv5/urel/helloworld_urel_objects.via",
+		"helloworld_exe/winscw/udeb/helloworld.UID.CPP",
+		"helloworld_exe/winscw/udeb/HelloWorld_Application.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_Application.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Application.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppUi.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppUi.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppUi.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppView.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppView.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppView.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_Document.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_Document.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Document.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_Main.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_Main.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Main.o.d",
+		"helloworld_exe/winscw/udeb/helloworld_udeb_objects.lrf",
+		"helloworld_exe/winscw/udeb/helloworld_UID_.dep",
+		"helloworld_exe/winscw/udeb/helloworld_UID_.o",
+		"helloworld_exe/winscw/udeb/helloworld_UID_.o.d",
+		"helloworld_exe/winscw/urel/helloworld.UID.CPP",
+		"helloworld_exe/winscw/urel/HelloWorld_Application.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_Application.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Application.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_AppUi.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_AppUi.o",
+		"helloworld_exe/winscw/urel/HelloWorld_AppUi.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_AppView.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_AppView.o",
+		"helloworld_exe/winscw/urel/HelloWorld_AppView.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_Document.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_Document.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Document.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_Main.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_Main.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Main.o.d",
+		"helloworld_exe/winscw/urel/helloworld_UID_.dep",
+		"helloworld_exe/winscw/urel/helloworld_UID_.o",
+		"helloworld_exe/winscw/urel/helloworld_UID_.o.d",
+		"helloworld_exe/winscw/urel/helloworld_urel_objects.lrf",
+		"helloworld_reg_exe/helloworld_reg_HelloWorld_reg_sc.rpp",
+		"helloworld_reg_exe/helloworld_reg_HelloWorld_reg_sc.rpp.d"
+	])
+
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	# Ensure we don't clean up from the previous build in any subsequent runs
+	t.addbuildtargets('smoke_suite/test_resources/simple_gui/Bld.inf', [])
+	t.targets = []
+	t.usebash = True
+
+	# Touch both a straight source and a resource file and confirm we can recompile in isolation without additional impact
+	t.id = "0089b"
+	t.name = "exe_armv5_winscw_single_file_touch_rebuild"
+	t.command = """
+		sleep 1
+		touch smoke_suite/test_resources/simple_gui/HelloWorld_Document.cpp
+		touch smoke_suite/test_resources/simple_gui/HelloWorld.rss
+		sbs -f - --source-target=smoke_suite/test_resources/simple_gui/HelloWorld_Document.cpp --source-target=smoke_suite/test_resources/simple_gui/HelloWorld.rss -b smoke_suite/test_resources/simple_gui/Bld.inf"""
+	t.countmatch = [
+		[".*recipe name='resource(preprocess|header|compile)'", 3],
+		[".*recipe name='compile'.*", 2],
+		[".*recipe name='win32compile2object'.*", 2]
+	]
+	t.mustnotmatch = [
+		".*recipe name='(win32simplelink|postlink|link)'.*"
+	]
+
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	# Attempt separate source and resource file compile where nothing should be done
+	t.id = "0089c"
+	t.name = "exe_armv5_winscw_single_file_notouch_rebuild"
+	t.command = "sbs -f - --source-target=smoke_suite/test_resources/simple_gui/HelloWorld_Document.cpp --source-target=smoke_suite/test_resources/simple_gui/HelloWorld.rss -b smoke_suite/test_resources/simple_gui/Bld.inf"
+	t.mustmatch = []
+	t.countmatch = [
+		[".*make.*Nothing to be done for.*SOURCETARGET_.*", 10]
+	]
+	t.mustnotmatch = [
+		".*recipe name='(resourcepreprocess|win32compile2object|compile|win32simplelink|postlink|link)'.*"
+	]
+
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	t.id = "89"
+	t.name = "exe_armv5_winscw_single_file"
+	t.description = """Builds a component and tests single file compilation for straight source and resource files"""
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_armv5_winscw_what.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,37 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest
+
+def run():
+	t = CheckWhatSmokeTest()
+	t.id = "7"
+	t.name = "exe_armv5_winscw_what"
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 " + \
+			"-c winscw --what"
+	t.stdout = [
+			# armv5 artefacts
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map",
+			# winscw artefacts
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe.map"
+	]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_armv7.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,35 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "3"
+	t.name = "exe_armv7"
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv7"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/test.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple/bld.inf', [
+		"test_/armv7/udeb/test.o",
+		"test_/armv7/urel/test.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_checksource.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,40 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+# NB - the checksource filter can find the same problem twice
+# So the count of 5 errors here is not actually accurate (AFAIK there are only 4)
+
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "88"
+	t.name = "exe_checksource"
+	t.description = "Build a exe with a checksource filter"
+	t.usebash = True
+	
+	bldinf = "smoke_suite/test_resources/checksource/helloworld/bld.inf"
+	cmd1 = "sbs -b %s REALLYCLEAN -m ${SBSMAKEFILE} -f ${SBSLOGFILE}" % bldinf
+	cmd2 = "sbs -b %s --filter=FilterCheckSource -m ${SBSMAKEFILE} -f ${SBSLOGFILE}" % bldinf
+	cmd3 = "grep -i '.*checksource errors found.*' ${SBSLOGFILE}"
+	t.command = cmd1 + " && " + cmd2 + " && " + cmd3
+
+	t.mustmatch_singleline = ["[1-9] checksource errors found"]
+	
+	t.returncode = 1
+	t.run("windows")
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/exe_winscw.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,45 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "33"
+	t.name = "exe_winscw"
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c winscw -m ${SBSMAKEFILE} -f ${SBSLOGFILE}; grep -E \"mwldsym2\" ${SBSLOGFILE}"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple/bld.inf', [
+		"test_/winscw/udeb/test.o",
+		"test_/winscw/udeb/test_.o",
+		"test_/winscw/udeb/test_UID_.o",
+		"test_/winscw/udeb/test.UID.CPP",
+		"test_/winscw/urel/test.o",
+		"test_/winscw/urel/test_.o",
+		"test_/winscw/urel/test_UID_.o",
+		"test_/winscw/urel/test.UID.CPP"
+	])
+	# Check that the default operator new library is used
+	t.mustmatch = [
+		'.*mwldsym2.*scppnwdl.lib.*test.exe.*'
+		]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/export.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,149 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest, AntiTargetSmokeTest
+import os
+
+def run():
+	
+	# This .inf file is created for clean_simple_export and
+	# reallyclean_simple_export tests to use so that we can put the
+	# username into the output filenames - which helps a lot when
+	# several people run tests on the same computer (e.g. linux machines)
+	bld = open('smoke_suite/test_resources/simple_export/expbld.inf', 'w')
+	user = os.environ['USER']
+	bld.write("""
+	
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_MMPFILES
+simple.mmp
+
+PRJ_EXPORTS
+#if !defined( WINSCW )
+// Exports conditional on build configuration macros aren't actually supported,
+// but we confirm that we preprocess in the context of an armv5 build when both
+// winscw and armv5 configurations are (implicitly, as there's no "-c" argument)
+// used.  This is in order to work around assumptions currently made in the
+// source base.
+simple_exp1.h exported_1.h
+#endif
+simple_exp2.h exported_2.h
+simple_exp3.h exported_3.h
+executable_file executable_file
+"file with a space.doc" "exportedfilewithspacesremoved.doc"
+"file with a space.doc" "exported file with a space.doc"
+
+simple_exp1.h /tmp/%s/  //
+simple_exp2.h \\tmp\\%s/  //
+simple_exp3.h /tmp/%s/simple_exp3.h 
+simple_exp4.h //
+
+""" % (user, user, user))
+	bld.close()
+
+
+	t = SmokeTest()
+	t.id = "0023a"
+	t.name = "export"
+	t.command = "sbs -b smoke_suite/test_resources/simple_export/expbld.inf export"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/include/exported_1.h",
+		"$(EPOCROOT)/epoc32/include/exported_2.h",
+		"$(EPOCROOT)/epoc32/include/exported_3.h",
+		"$(EPOCROOT)/epoc32/include/exportedfilewithspacesremoved.doc",
+		"$(EPOCROOT)/epoc32/include/exported file with a space.doc",
+		"/tmp/$(USER)/simple_exp1.h",
+		"/tmp/$(USER)/simple_exp2.h",
+		"/tmp/$(USER)/simple_exp3.h",
+		"$(EPOCROOT)/epoc32/include/executable_file",
+		"$(EPOCROOT)/epoc32/include/simple_exp4.h"
+		]
+	t.run()
+	
+
+	t = SmokeTest()
+	t.id = "0023a1"
+	t.name = "export"
+	t.usebash = True
+	t.command = "ls -l ${EPOCROOT}/epoc32/include/executable_file"
+	t.mustmatch = [ "^.rwxrwxr.x[\.\+]? .*executable_file.*$" ]
+	t.targets = []
+	t.run("linux")
+	t.usebash = False
+
+
+	# Testing if clean deletes any exports which it is not supposed to
+	t.id = "0023b"
+	t.name = "export_clean" 
+	t.command = "sbs -b smoke_suite/test_resources/simple_export/expbld.inf clean"
+	t.mustmatch = []
+	t.targets = [
+		"$(EPOCROOT)/epoc32/include/exported_1.h",
+		"$(EPOCROOT)/epoc32/include/exported_2.h",
+		"$(EPOCROOT)/epoc32/include/exported_3.h",
+		"$(EPOCROOT)/epoc32/include/executable_file",
+		"$(EPOCROOT)/epoc32/include/exportedfilewithspacesremoved.doc",
+		"$(EPOCROOT)/epoc32/include/exported file with a space.doc",
+		"/tmp/$(USER)/simple_exp1.h",
+		"/tmp/$(USER)/simple_exp2.h",
+		"/tmp/$(USER)/simple_exp3.h"
+		]
+	t.run()
+
+
+	t = AntiTargetSmokeTest()
+	t.id = "0023c"
+	t.name = "export_reallyclean" 
+	t.command = "sbs -b smoke_suite/test_resources/simple_export/expbld.inf reallyclean"
+	t.antitargets = [
+		'$(EPOCROOT)/epoc32/include/exported_1.h',
+		'$(EPOCROOT)/epoc32/include/exported_2.h',
+		'$(EPOCROOT)/epoc32/include/exported_3.h',
+		"$(EPOCROOT)/epoc32/include/executable_file",
+		'$(EPOCROOT)/epoc32/include/exportedfilewithspacesremoved.doc',
+		'$(EPOCROOT)/epoc32/include/exported file with a space.doc',
+		'/tmp/$(USER)/simple_exp1.h',
+		'/tmp/$(USER)/simple_exp2.h',
+		'/tmp/$(USER)/simple_exp3.h',
+		'$(EPOCROOT)/epoc32/include/simple_exp4.h'
+	]
+	t.run()
+
+	# Check that the --noexport feature really does prevent exports from happening
+	t = AntiTargetSmokeTest()
+	t.id = "0023d"
+	t.name = "export_noexport" 
+	t.command = "sbs -b smoke_suite/test_resources/simple_export/expbld.inf --noexport -n"
+	t.antitargets = [
+		'$(EPOCROOT)/epoc32/include/exported_1.h',
+		'$(EPOCROOT)/epoc32/include/exported_2.h',
+		'$(EPOCROOT)/epoc32/include/exported_3.h',
+		"$(EPOCROOT)/epoc32/include/executable_file",
+		'$(EPOCROOT)/epoc32/include/exportedfilewithspacesremoved.doc',
+		'$(EPOCROOT)/epoc32/include/exported file with a space.doc',
+		'/tmp/$(USER)/simple_exp1.h',
+		'/tmp/$(USER)/simple_exp2.h',
+		'/tmp/$(USER)/simple_exp3.h',
+		'$(EPOCROOT)/epoc32/include/simple_exp4.h'
+	]
+	t.run()
+		
+	t.id = "23"
+	t.name = "export"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/export_multi.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,32 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "81"
+	t.name = "export_multi"
+	t.description = "Test that the export section only gets included once even if all platforms are selected (see DPDEF138366)"
+	# Note I'm not including 'tools' to avoid a dependency on MSVC6
+	# Given this test will not be necessary once the export section is removed from the make files anyway, I'm not too worried.
+	t.command = "sbs -b smoke_suite/test_resources/basics/helloworld/Bld.inf -c winscw -c armv5 -c tools2 -c armv7 -c gccxml EXPORT"
+	t.mustnotmatch = [
+		".*warning: overriding commands for target.*",
+		".*warning: ignoring old commands for target.*"
+	]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/extension_reallyclean.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,43 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+	t = AntiTargetSmokeTest()
+	t.id = "19"
+	t.name = "extension_reallyclean"
+	t.description = "These 2 sets of tests are for testing REALLYCLEAN on TEM" \
+			+ " files"
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/simple_extension/bld.inf " \
+			+ "-c armv5_urel -m ${SBSMAKEFILE} -f ${SBSLOGFILE}; ls " \
+			+ "$(EPOCROOT)/epoc32/build/tem_export_test; sbs -b " \
+			+ "smoke_suite/test_resources/simple_extension/bld.inf -c " \
+			+ "armv5_urel REALLYCLEAN -m ${SBSMAKEFILE}_2 -f ${SBSLOGFILE}_2"
+	t.mustnotmatch = [
+		"ls.*/epoc32/build/tem_export_test: No such file or directory"
+	]
+	t.antitargets = [
+		"$(EPOCROOT)/epoc32/build/tem_export_test",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/clean.mk",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/clean.meta",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/build.mk",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/build.meta",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/simple_extension.txt"
+	]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/extension_whattarget.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,54 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest
+import re
+
+def run():
+	
+	t = CheckWhatSmokeTest()
+	t.id = "68"
+	t.description = "Test output from WHAT target"
+	t.name = "extension_whattarget"
+	t.command = "sbs -b smoke_suite/test_resources/simple_extension/bld.inf" + \
+			" WHAT -f - -m ${SBSMAKEFILE}"
+	t.regexlinefilter = \
+			re.compile("^<(whatlog|export|build>|resource>|bitmap>)")
+	t.hostossensitive = False
+	t.usebash = True
+	t.targets = [
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/clean.mk",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/clean.meta",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/build.mk",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/build.meta",
+		]
+	t.stdout = [
+		"<whatlog bldinf='$(SBS_HOME)/test/smoke_suite/test_resources/simple_extension/bld.inf' mmp='' config=''>",
+		"<export destination='$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/clean.mk' source='$(SBS_HOME)/test/smoke_suite/test_resources/simple_extension/clean.mk'/>",
+		"<export destination='$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/clean.meta' source='$(SBS_HOME)/test/smoke_suite/test_resources/simple_extension/clean.meta'/>",
+		"<export destination='$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/build.mk' source='$(SBS_HOME)/test/smoke_suite/test_resources/simple_extension/build.mk'/>",
+		"<export destination='$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/build.meta' source='$(SBS_HOME)/test/smoke_suite/test_resources/simple_extension/build.meta'/>",
+		"<whatlog bldinf='$(SBS_HOME)/test/smoke_suite/test_resources/simple_extension/bld.inf' mmp='' config='armv5_udeb'>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/udeb/simple_extension.txt</build>",
+		"<whatlog bldinf='$(SBS_HOME)/test/smoke_suite/test_resources/simple_extension/bld.inf' mmp='' config='armv5_urel'>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/urel/simple_extension.txt</build>",
+		"<whatlog bldinf='$(SBS_HOME)/test/smoke_suite/test_resources/simple_extension/bld.inf' mmp='' config='winscw_urel'>",
+		"<build>$(EPOCROOT)/epoc32/release/winscw/urel/simple_extension.txt</build>",
+		"<whatlog bldinf='$(SBS_HOME)/test/smoke_suite/test_resources/simple_extension/bld.inf' mmp='' config='winscw_udeb'>",
+		"<build>$(EPOCROOT)/epoc32/release/winscw/udeb/simple_extension.txt</build>"
+	]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/featurevariants.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,422 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest, ReplaceEnvs
+import os
+
+def run():
+	t = AntiTargetSmokeTest()
+	t.usebash = True
+	
+	preBuiltTargets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/dummy.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/dummy.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/debfake.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/relfake.lib"
+		]
+	
+	invariantTargets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_invariant.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_invariant.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_invariant.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_invariant.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_invariant.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_invariant.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_invariant.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_invariant{000a0000}.dso"
+		]
+	
+	variantTargetsDefaultTree = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_variant1.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_variant1.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_variant2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createstaticdll_variant2.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createexe_variant3.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createexe_variant3.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/createexe_variant3.exe.sym",
+
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_variant1.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_variant1.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_variant2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll_variant2.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createexe_variant3.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createexe_variant3.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createexe_variant3.exe.sym"
+		]
+	
+	variantTargetsProductTrees = [		
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant1.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant1.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant1.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant1.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createstaticdll_variant2.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createexe_variant3.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createexe_variant3.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createexe_variant3.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5.one/udeb/createexe_variant3.exe.vmap",
+
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant1.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant1.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant1.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant2.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createstaticdll_variant2.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createexe_variant3.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createexe_variant3.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createexe_variant3.exe.sym",		
+		"$(EPOCROOT)/epoc32/release/armv5.one/urel/createexe_variant3.exe.vmap",
+
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant1.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant1.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant1.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant2.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createstaticdll_variant2.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createexe_variant3.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createexe_variant3.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createexe_variant3.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5.two/udeb/createexe_variant3.exe.vmap",
+		
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant1.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant1.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant1.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant2.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createstaticdll_variant2.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createexe_variant3.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createexe_variant3.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createexe_variant3.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5.two/urel/createexe_variant3.exe.vmap",
+
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant1.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant1.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant1.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant2.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createstaticdll_variant2.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createexe_variant3.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createexe_variant3.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createexe_variant3.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5.three/udeb/createexe_variant3.exe.vmap",
+		
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant1.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant1.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant1.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant1.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant2.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createstaticdll_variant2.dll.vmap",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createexe_variant3.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createexe_variant3.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createexe_variant3.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5.three/urel/createexe_variant3.exe.vmap",
+		]
+	
+	variantTargetsGeneric = [
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/dummy_var1.rsc",
+		"$(EPOCROOT)/epoc32/include/dummy_var1.rsg",
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/dummy_var2.rsc",
+		"$(EPOCROOT)/epoc32/include/dummy_var2.rsg",
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/dummy_var3.rsc",
+		"$(EPOCROOT)/epoc32/include/dummy_var3.rsg",
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/dummy_inv.rsc",
+		"$(EPOCROOT)/epoc32/include/dummy_inv.rsg",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_variant1.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_variant1{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_variant2.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll_variant2{000a0000}.dso"
+		]
+	
+	invariantBuildTargets = [
+		"createstaticdll_invariant_dll/armv5/udeb/CreateStaticDLL_invariant.o",
+		"createstaticdll_invariant_dll/armv5/udeb/CreateStaticDLL_invariant.o.d",
+		"createstaticdll_invariant_dll/armv5/udeb/createstaticdll_invariant_udeb_objects.via",
+		"createstaticdll_invariant_dll/armv5/udeb/createstaticdll_invariant{000a0000}.def",
+		"createstaticdll_invariant_dll/armv5/udeb/createstaticdll_invariant{000a0000}.dso",
+		"createstaticdll_invariant_dll/armv5/urel/CreateStaticDLL_invariant.o",
+		"createstaticdll_invariant_dll/armv5/urel/CreateStaticDLL_invariant.o.d",
+		"createstaticdll_invariant_dll/armv5/urel/createstaticdll_invariant_urel_objects.via",
+		"createstaticdll_invariant_dll/armv5/urel/createstaticdll_invariant{000a0000}.def",
+		"createstaticdll_invariant_dll/armv5/urel/createstaticdll_invariant{000a0000}.dso",
+		"dummy_inv_dll/dummy_inv_dummy_sc.rpp",
+		"dummy_inv_dll/dummy_inv_dummy_sc.rpp.d"
+		]
+
+	variantBuildTargetsDefaultTree = [
+		"createstaticdll_variant1_dll/armv5/udeb/CreateStaticDLL_variant1.o",
+		"createstaticdll_variant1_dll/armv5/udeb/CreateStaticDLL_variant1.o.d",
+		"createstaticdll_variant1_dll/armv5/udeb/createstaticdll_variant1_udeb_objects.via",
+		"createstaticdll_variant1_dll/armv5/udeb/createstaticdll_variant1{000a0000}.def",
+		"createstaticdll_variant1_dll/armv5/udeb/createstaticdll_variant1{000a0000}.dso",
+		"createstaticdll_variant1_dll/armv5/urel/CreateStaticDLL_variant1.o",
+		"createstaticdll_variant1_dll/armv5/urel/CreateStaticDLL_variant1.o.d",
+		"createstaticdll_variant1_dll/armv5/urel/createstaticdll_variant1_urel_objects.via",
+		"createstaticdll_variant1_dll/armv5/urel/createstaticdll_variant1{000a0000}.def",
+		"createstaticdll_variant1_dll/armv5/urel/createstaticdll_variant1{000a0000}.dso",
+		
+		"createstaticdll_variant2_dll/armv5/udeb/CreateStaticDLL_variant2.o",
+		"createstaticdll_variant2_dll/armv5/udeb/CreateStaticDLL_variant2.o.d",
+		"createstaticdll_variant2_dll/armv5/udeb/createstaticdll_variant2_udeb_objects.via",
+		"createstaticdll_variant2_dll/armv5/udeb/createstaticdll_variant2{000a0000}.def",
+		"createstaticdll_variant2_dll/armv5/udeb/createstaticdll_variant2{000a0000}.dso",
+		"createstaticdll_variant2_dll/armv5/urel/CreateStaticDLL_variant2.o",
+		"createstaticdll_variant2_dll/armv5/urel/CreateStaticDLL_variant2.o.d",
+		"createstaticdll_variant2_dll/armv5/urel/createstaticdll_variant2_urel_objects.via",
+		"createstaticdll_variant2_dll/armv5/urel/createstaticdll_variant2{000a0000}.def",
+		"createstaticdll_variant2_dll/armv5/urel/createstaticdll_variant2{000a0000}.dso",
+		
+		"createexe_variant3_exe/armv5/udeb/CreateEXE_variant3.o",
+		"createexe_variant3_exe/armv5/udeb/CreateEXE_variant3.o.d",
+		"createexe_variant3_exe/armv5/udeb/createexe_variant3_udeb_objects.via",
+		"createexe_variant3_exe/armv5/urel/CreateEXE_variant3.o",
+		"createexe_variant3_exe/armv5/urel/CreateEXE_variant3.o.d",
+		"createexe_variant3_exe/armv5/urel/createexe_variant3_urel_objects.via"
+		]
+	
+	variantBuildTargetsProductTrees = [		
+		"createstaticdll_variant1_dll/armv5.one/udeb/CreateStaticDLL_variant1.o",
+		"createstaticdll_variant1_dll/armv5.one/udeb/CreateStaticDLL_variant1.o.d",
+		"createstaticdll_variant1_dll/armv5.one/udeb/createstaticdll_variant1_udeb_objects.via",
+		"createstaticdll_variant1_dll/armv5.one/udeb/createstaticdll_variant1{000a0000}.def",
+		"createstaticdll_variant1_dll/armv5.one/udeb/createstaticdll_variant1{000a0000}.dso",
+		"createstaticdll_variant1_dll/armv5.one/urel/CreateStaticDLL_variant1.o",
+		"createstaticdll_variant1_dll/armv5.one/urel/CreateStaticDLL_variant1.o.d",
+		"createstaticdll_variant1_dll/armv5.one/urel/createstaticdll_variant1_urel_objects.via",
+		"createstaticdll_variant1_dll/armv5.one/urel/createstaticdll_variant1{000a0000}.def",
+		"createstaticdll_variant1_dll/armv5.one/urel/createstaticdll_variant1{000a0000}.dso",
+		
+		"createstaticdll_variant2_dll/armv5.one/udeb/CreateStaticDLL_variant2.o",
+		"createstaticdll_variant2_dll/armv5.one/udeb/CreateStaticDLL_variant2.o.d",
+		"createstaticdll_variant2_dll/armv5.one/udeb/createstaticdll_variant2_udeb_objects.via",
+		"createstaticdll_variant2_dll/armv5.one/udeb/createstaticdll_variant2{000a0000}.def",
+		"createstaticdll_variant2_dll/armv5.one/udeb/createstaticdll_variant2{000a0000}.dso",
+		"createstaticdll_variant2_dll/armv5.one/urel/CreateStaticDLL_variant2.o",
+		"createstaticdll_variant2_dll/armv5.one/urel/CreateStaticDLL_variant2.o.d",
+		"createstaticdll_variant2_dll/armv5.one/urel/createstaticdll_variant2_urel_objects.via",
+		"createstaticdll_variant2_dll/armv5.one/urel/createstaticdll_variant2{000a0000}.def",
+		"createstaticdll_variant2_dll/armv5.one/urel/createstaticdll_variant2{000a0000}.dso",
+		
+		"createexe_variant3_exe/armv5.one/udeb/CreateEXE_variant3.o",
+		"createexe_variant3_exe/armv5.one/udeb/CreateEXE_variant3.o.d",
+		"createexe_variant3_exe/armv5.one/udeb/createexe_variant3_udeb_objects.via",
+		"createexe_variant3_exe/armv5.one/urel/CreateEXE_variant3.o",
+		"createexe_variant3_exe/armv5.one/urel/CreateEXE_variant3.o.d",
+		"createexe_variant3_exe/armv5.one/urel/createexe_variant3_urel_objects.via",
+		
+		"createstaticdll_variant1_dll/armv5.two/udeb/CreateStaticDLL_variant1.o",
+		"createstaticdll_variant1_dll/armv5.two/udeb/CreateStaticDLL_variant1.o.d",
+		"createstaticdll_variant1_dll/armv5.two/udeb/createstaticdll_variant1_udeb_objects.via",
+		"createstaticdll_variant1_dll/armv5.two/udeb/createstaticdll_variant1{000a0000}.def",
+		"createstaticdll_variant1_dll/armv5.two/udeb/createstaticdll_variant1{000a0000}.dso",
+		"createstaticdll_variant1_dll/armv5.two/urel/CreateStaticDLL_variant1.o",
+		"createstaticdll_variant1_dll/armv5.two/urel/CreateStaticDLL_variant1.o.d",
+		"createstaticdll_variant1_dll/armv5.two/urel/createstaticdll_variant1_urel_objects.via",
+		"createstaticdll_variant1_dll/armv5.two/urel/createstaticdll_variant1{000a0000}.def",
+		"createstaticdll_variant1_dll/armv5.two/urel/createstaticdll_variant1{000a0000}.dso",
+		
+		"createstaticdll_variant2_dll/armv5.two/udeb/CreateStaticDLL_variant2.o",
+		"createstaticdll_variant2_dll/armv5.two/udeb/CreateStaticDLL_variant2.o.d",
+		"createstaticdll_variant2_dll/armv5.two/udeb/createstaticdll_variant2_udeb_objects.via",
+		"createstaticdll_variant2_dll/armv5.two/udeb/createstaticdll_variant2{000a0000}.def",
+		"createstaticdll_variant2_dll/armv5.two/udeb/createstaticdll_variant2{000a0000}.dso",
+		"createstaticdll_variant2_dll/armv5.two/urel/CreateStaticDLL_variant2.o",
+		"createstaticdll_variant2_dll/armv5.two/urel/CreateStaticDLL_variant2.o.d",
+		"createstaticdll_variant2_dll/armv5.two/urel/createstaticdll_variant2_urel_objects.via",
+		"createstaticdll_variant2_dll/armv5.two/urel/createstaticdll_variant2{000a0000}.def",
+		"createstaticdll_variant2_dll/armv5.two/urel/createstaticdll_variant2{000a0000}.dso",
+		
+		"createexe_variant3_exe/armv5.two/udeb/CreateEXE_variant3.o",
+		"createexe_variant3_exe/armv5.two/udeb/CreateEXE_variant3.o.d",
+		"createexe_variant3_exe/armv5.two/udeb/createexe_variant3_udeb_objects.via",
+		"createexe_variant3_exe/armv5.two/urel/CreateEXE_variant3.o",
+		"createexe_variant3_exe/armv5.two/urel/CreateEXE_variant3.o.d",
+		"createexe_variant3_exe/armv5.two/urel/createexe_variant3_urel_objects.via",
+		
+		"createstaticdll_variant1_dll/armv5.three/udeb/CreateStaticDLL_variant1.o",
+		"createstaticdll_variant1_dll/armv5.three/udeb/CreateStaticDLL_variant1.o.d",
+		"createstaticdll_variant1_dll/armv5.three/udeb/createstaticdll_variant1_udeb_objects.via",
+		"createstaticdll_variant1_dll/armv5.three/udeb/createstaticdll_variant1{000a0000}.def",
+		"createstaticdll_variant1_dll/armv5.three/udeb/createstaticdll_variant1{000a0000}.dso",
+		"createstaticdll_variant1_dll/armv5.three/urel/CreateStaticDLL_variant1.o",
+		"createstaticdll_variant1_dll/armv5.three/urel/CreateStaticDLL_variant1.o.d",
+		"createstaticdll_variant1_dll/armv5.three/urel/createstaticdll_variant1_urel_objects.via",
+		"createstaticdll_variant1_dll/armv5.three/urel/createstaticdll_variant1{000a0000}.def",
+		"createstaticdll_variant1_dll/armv5.three/urel/createstaticdll_variant1{000a0000}.dso",
+		
+		"createstaticdll_variant2_dll/armv5.three/udeb/CreateStaticDLL_variant2.o",
+		"createstaticdll_variant2_dll/armv5.three/udeb/CreateStaticDLL_variant2.o.d",
+		"createstaticdll_variant2_dll/armv5.three/udeb/createstaticdll_variant2_udeb_objects.via",
+		"createstaticdll_variant2_dll/armv5.three/udeb/createstaticdll_variant2{000a0000}.def",
+		"createstaticdll_variant2_dll/armv5.three/udeb/createstaticdll_variant2{000a0000}.dso",
+		"createstaticdll_variant2_dll/armv5.three/urel/CreateStaticDLL_variant2.o",
+		"createstaticdll_variant2_dll/armv5.three/urel/CreateStaticDLL_variant2.o.d",
+		"createstaticdll_variant2_dll/armv5.three/urel/createstaticdll_variant2_urel_objects.via",
+		"createstaticdll_variant2_dll/armv5.three/urel/createstaticdll_variant2{000a0000}.def",
+		"createstaticdll_variant2_dll/armv5.three/urel/createstaticdll_variant2{000a0000}.dso",
+		
+		"createexe_variant3_exe/armv5.three/udeb/CreateEXE_variant3.o",
+		"createexe_variant3_exe/armv5.three/udeb/CreateEXE_variant3.o.d",
+		"createexe_variant3_exe/armv5.three/udeb/createexe_variant3_udeb_objects.via",
+		"createexe_variant3_exe/armv5.three/urel/CreateEXE_variant3.o",
+		"createexe_variant3_exe/armv5.three/urel/CreateEXE_variant3.o.d",
+		"createexe_variant3_exe/armv5.three/urel/createexe_variant3_urel_objects.via"
+		]
+	
+	variantBuildTargetsGeneric = [
+		"dummy_var1_dll/dummy_var1_dummy_sc.rpp",
+		"dummy_var1_dll/dummy_var1_dummy_sc.rpp.d",
+		"dummy_var2_dll/dummy_var2_dummy_sc.rpp",
+		"dummy_var2_dll/dummy_var2_dummy_sc.rpp.d",
+		"dummy_var3_exe/dummy_var3_dummy_sc.rpp",
+		"dummy_var3_exe/dummy_var3_dummy_sc.rpp.d"
+		]
+	
+	sbscommand = "sbs -b smoke_suite/test_resources/bv/bld.inf -c armv5 " + \
+				"-c armv5.test_bv_1 -c armv5.test_bv_2 -c armv5.test_bv_3 -f- " + \
+				"--configpath=test/smoke_suite/test_resources/bv/config/variants"
+	
+	t.id = "56a"
+	t.description = """Build variant and invariant components.
+		In this default mode of operation, all components build for the non-product armv5 config whereas
+		only variant components build for the armv5.* bv configs."""
+	t.name = "featurevariant_build"
+	t.command = sbscommand
+	t.targets = preBuiltTargets + invariantTargets + variantTargetsGeneric + variantTargetsDefaultTree + variantTargetsProductTrees							
+	t.addbuildtargets('smoke_suite/test_resources/bv/bld.inf',
+				invariantBuildTargets + variantBuildTargetsGeneric + variantBuildTargetsDefaultTree + variantBuildTargetsProductTrees	
+				)
+	# Test that static libs are linked from the invariant place.
+	t.mustmatch = [
+		"armlink.*epoc32/release/armv5/urel/bv_static_lib.lib",
+		"armlink.*epoc32/release/armv5/udeb/bv_static_lib.lib"
+		]
+	t.run()
+	
+	t.id = "56b"
+	t.description = """Build variant and invariant components using an os_properties.xml that sets FEATUREVARIANTSAFE=1.
+		With FEATUREVARIANTSAFE only invariant components build for the non-product armv5 config and
+		only variant components build for the armv5.* bv configs.""" 
+	t.name = "featurevariant_build_featurevariantsafe"
+	t.command = sbscommand + " --configpath=test/smoke_suite/test_resources/bv/config/properties"
+	t.targets = preBuiltTargets + invariantTargets + variantTargetsGeneric + variantTargetsProductTrees
+	t.addbuildtargets('smoke_suite/test_resources/bv/bld.inf',
+				invariantBuildTargets + variantBuildTargetsGeneric + variantBuildTargetsProductTrees	
+				)
+	t.antitargets = variantTargetsDefaultTree
+	t.addbuildantitargets('smoke_suite/test_resources/bv/bld.inf',
+				variantBuildTargetsDefaultTree
+				)
+	# Test that static libs are linked from the invariant place.
+	t.mustmatch = [
+		"armlink.*epoc32/release/armv5/urel/bv_static_lib.lib",
+		"armlink.*epoc32/release/armv5/udeb/bv_static_lib.lib"
+		]
+	t.run()
+
+	
+	# tests for the createvmap script
+	createvmap = "python $(SBS_HOME)/bin/createvmap.py"
+	vmapfile = "$(EPOCROOT)/epoc32/build/test.vmap"
+	vmap = " -o " + vmapfile
+	
+	if 'SBS_BVCPP' in os.environ:
+		bvcpp = " -c " + os.environ['SBS_BVCPP'].replace('\\','/')
+	else:
+		bvcpp = " -c $(SBS_HOME)/$(HOSTPLATFORM_DIR)/bv/bin/cpp"
+		if t.onWindows:
+			bvcpp += ".exe"
+
+	bvdata = "$(SBS_HOME)/test/smoke_suite/test_resources/bv"
+	
+	preinc = " -p " + bvdata + "/var1/var1.h"
+	listA = " -f " + bvdata + "/listA.txt"
+	listB = " -f " + bvdata + "/listB.txt"
+	listC = " -f " + bvdata + "/listC.txt"
+	srcWith = " -s " + bvdata + "/with_macros.cpp"
+	srcWithout = " -s " + bvdata + "/without_macros.cpp"
+	badSrc = " -s " + bvdata + "/with_errors.cpp"
+
+	t.id = "56c"
+	t.name = "createvmap exits with an error"
+	t.usebash = True
+	t.command = createvmap
+	t.returncode = 1
+	t.targets = []
+	t.mustmatch = []
+	t.run()
+
+	
+	t.id = "56d"
+	t.name = "createvmap shows cpp errors"
+	t.usebash = True
+	t.command = createvmap + vmap + bvcpp + preinc + listA + badSrc
+	t.returncode = 1
+	t.targets = []
+	t.mustmatch = ["#error this code is broken"]
+	t.run()
+	
+	
+	t.id = "56e"
+	t.name = "createvmap errors on missing feature list"
+	t.usebash = True
+	t.command = createvmap + vmap + bvcpp + preinc + listC + srcWith
+	t.returncode = 1
+	t.targets = []
+	t.mustmatch = ["The feature list '.*listC.txt' does not exist"]
+	t.run()
+	
+	
+	t.id = "56f"
+	t.name = "createvmap warns on featureless code"
+	t.usebash = True
+	t.command = createvmap + vmap + bvcpp + preinc + listA + srcWithout
+	t.returncode = 0
+	t.targets = [vmapfile]
+	t.mustmatch = ["warning: No feature macros were found in the source"]
+	t.run()
+	
+	
+	t.id = "56g"
+	t.name = "createvmap creates the right vmap file"
+	t.usebash = True
+	t.command = createvmap + vmap + bvcpp + preinc + listA + listB + srcWith + srcWithout + " && cat " + vmapfile
+	t.returncode = 0
+	t.targets = [vmapfile]
+	t.mustmatch = ["A_1=defined", "B_1000=undefined"]
+	t.run()
+	
+	
+	# print the overall result
+	t.id = "56"
+	t.name = "featurevariants"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/filter_missing.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,60 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import GenericSmokeTest
+
+def run():
+	result = GenericSmokeTest.PASS 
+	
+	t = GenericSmokeTest()
+	t.id = "0072a"
+	t.name = "filter_missing" 
+	t.command = "sbs --filters=NonExistingFilter"
+	t.mustmatch = [
+			".*requested filters not found.*NonExistingFilter.*"
+	]
+	t.errors = 1
+	t.returncode = 1
+	t.run()
+	if t.result == GenericSmokeTest.FAIL:
+		result = GenericSmokeTest.FAIL
+
+	t.id = "0072b"
+	t.name = "filter_crashes"
+	t.usebash = True
+	t.command = "cp -f smoke_suite/test_resources/filter_test/testfilter_exceptions.py " \
+			+ "$SBS_HOME/python/plugins ; " \
+			+ "sbs -n --filters=FilterTestCrash,FilterLogFile,FilterTerminal " \
+			+ "-b smoke_suite/test_resources/simple/bld.inf " \
+			+ "-m ${SBSMAKEFILE} -f ${SBSLOGFILE} ; " \
+    		+ "rm -f $SBS_HOME/python/plugins/testfilter_exceptions.py"
+	t.errors = 0
+	t.returncode = 0
+	t.exceptions = 1
+	t.mustmatch = [
+			".*A test exception in a filter was generated.*",
+			".*sbs: build log in.*"
+	]
+
+	t.run()
+	if t.result == GenericSmokeTest.FAIL:
+		result = GenericSmokeTest.FAIL
+	
+	t.id = "72"
+	t.name = "filter_missing"
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/filter_params.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,140 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	
+	t = SmokeTest()
+	t.description = "Test the passing of parameters to log filters"
+	
+	command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5_urel --filters="
+	
+	# no parameters means count all tags	
+	t.name = "filter_params_all_tags"
+	t.command = command + "FilterTagCounter"
+	t.mustmatch_singleline = [
+		"^info \d+ \d+",
+		"^whatlog \d+ \d+",
+		"^clean \d+ \d+"	
+		]
+	t.run()
+	
+	# empty parameter lists are valid
+	t.name = "filter_params_all_tags2"
+	t.command = command + "FilterTagCounter[]"
+	t.run()
+	
+	# parameters mean report only those tags	
+	t.name = "filter_params_info"
+	t.command = command + "FilterTagCounter[info]"
+	t.mustmatch_singleline = [
+		"^info \d+ \d+"
+		]
+	t.mustnotmatch_singleline = [
+		"^whatlog \d+ \d+",
+		"^clean \d+ \d+"	
+		]
+	t.run()
+	
+	# multiple parameters are valid	
+	t.name = "filter_params_info_clean"
+	t.command = command + "FilterTagCounter[info,clean]"
+	t.mustmatch_singleline = [
+		"^info \d+ \d+",
+		"^clean \d+ \d+"
+		]
+	t.mustnotmatch_singleline = [
+		"^whatlog \d+ \d+"
+		]
+	t.run()
+	
+	# using the same filter with different parameters is valid
+	t.name = "filter_params_info_clean2"
+	t.command = command + "FilterTagCounter[info],FilterTagCounter[clean]"
+	t.run()
+	
+	# using the same filter with the same parameters is valid too
+	t.name = "filter_params_info_clean3"
+	t.command = command + "FilterTagCounter[info,clean],FilterTagCounter[info,clean]"
+	t.run()
+	
+	
+	# parameters must work with the sbs_filter script as well
+	
+	command = "sbs_filter --filters=%s < smoke_suite/test_resources/logexamples/filter_component.log"
+	t.logfileOption = lambda :""
+	t.makefileOption = lambda :""
+
+	# should still work with no parameters
+	t.name = "sbs_filter_no_params"
+	t.command = command % "FilterComp"
+	t.mustmatch_singleline = [
+		]
+	t.mustnotmatch_singleline = [
+		"[<>]" # no elements should be printed at all as no bld.inf is selected
+		]
+	t.run()
+	
+	# should work with an empty parameter list
+	t.name = "sbs_filter_no_params2"
+	t.command = command % "FilterComp[]"
+	t.run()
+	
+	# with a parameter
+	t.name = "sbs_filter_one_param"
+	t.command = command % "FilterComp[email]"
+	t.stdout = [
+		"<error bldinf='y:/src/email/bld.inf'>email error #1</error>",
+		"<error bldinf='y:/src/email/bld.inf'>email error #2</error>",
+		"<warning bldinf='y:/src/email/bld.inf'>email warning #1</warning>",
+		"<warning bldinf='y:/src/email/bld.inf'>email warning #2</warning>",
+		"<whatlog bldinf='y:/src/email/bld.inf' config='armv5_urel' mmp='y:/src/email/a.mmp'>",
+		"<build>/epoc32/data/email_1</build>",
+		"<build>/epoc32/data/email_2</build>",
+		"</whatlog>",
+		"<recipe bldinf='y:/src/email/bld.inf' name='dummy'>",
+		"+ make_email",
+		"email was made fine",
+		"<status exit='ok'></status>",
+		"</recipe>",
+		"<fake bldinf='y:src/email/bld.inf'>",
+		"  <foo>",
+		"   <bar>",
+		"     <fb>fb email</fb>",
+		"   </bar>",
+		" </foo>",
+		"</fake>"
+		]
+	t.mustmatch_singleline = []
+	t.mustnotmatch_singleline = []
+	t.warnings = 2
+	t.errors = 2
+	t.run()
+	
+	# with multiple filters
+	t.name = "sbs_filter_multi"
+	t.command = command % "FilterComp[txt],FilterTagCounter[file,recipe]"
+	t.stdout = []
+	t.mustmatch_singleline = [ "txt", "^file \d+", "^recipe \d+" ]
+	t.mustnotmatch_singleline = [ "email" ]
+	t.warnings = 2
+	t.errors = 0
+	t.run()
+	
+	t.name = "filter_params"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/flm_extension.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,31 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "20"
+	t.name = "flm_extension"
+	t.command = "sbs -b " + \
+			"smoke_suite/test_resources/simple_extension/flm_bld.inf -c armv5"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/build/flm_test_1_2",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/tools/flm_export.xml",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/tools/flm_export.flm"
+		]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/gccxml.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,129 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest, AntiTargetSmokeTest
+
+def run():
+	result = SmokeTest.PASS
+	
+	t = SmokeTest()
+	t.id = "0057a"
+	t.name = "gccxml"
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/simple_gui/bld.inf " + \
+			"-c gccxml_urel -m ${SBSMAKEFILE} -f ${SBSLOGFILE} && " + \
+			"grep -o 'gcc.*-fpermissive' ${SBSLOGFILE}"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/gccxml/includeheaders.txt",
+		"$(EPOCROOT)/epoc32/release/gccxml/urel/helloworldexe.gxp"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_gui/bld.inf', [
+		"helloworld_exe/gccxml/HelloWorld.mmp.xml",
+		"helloworld_exe/helloworld_HelloWorld_sc.rpp.d",
+		"helloworld_exe/gccxml/HelloWorld.rss.rfi",
+		"helloworld_reg_exe/helloworld_reg_HelloWorld_reg_sc.rpp.d",
+		"helloworld_exe/gccxml/HelloWorld_reg.rss.rfi",
+		"helloworld_exe/gccxml/urel/HelloWorld_Application.xml.d",
+		"helloworld_exe/gccxml/urel/HelloWorld_Application.xml",
+		"helloworld_exe/gccxml/urel/HelloWorld_AppUi.xml.d",
+		"helloworld_exe/gccxml/urel/HelloWorld_AppUi.xml",
+		"helloworld_exe/gccxml/urel/HelloWorld_AppView.xml.d",
+		"helloworld_exe/gccxml/urel/HelloWorld_AppView.xml",
+		"helloworld_exe/gccxml/urel/HelloWorld_Document.xml.d",
+		"helloworld_exe/gccxml/urel/HelloWorld_Document.xml",
+		"helloworld_exe/gccxml/urel/HelloWorld_Main.xml.d",
+		"helloworld_exe/gccxml/urel/HelloWorld_Main.xml"
+	])
+	t.mustmatch = [
+		".*gcc.*-fpermissive.*"
+	]
+	# Windows-only until formal delivery of a Linux version of gccxml_cc1plus
+	t.run("windows")
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	elif t.result == SmokeTest.SKIP:
+		return t
+	
+	
+	t = AntiTargetSmokeTest()
+	t.id = "0057b"
+	t.name = "gccxml_reallyclean"
+	t.command = "sbs -b smoke_suite/test_resources/simple_gui/bld.inf " + \
+			"-c gccxml_urel REALLYCLEAN"
+	t.antitargets = ["$(EPOCROOT)/epoc32/release/gccxml/urel/helloworldexe.gxp"]
+	t.addbuildantitargets('smoke_suite/test_resources/simple_gui/bld.inf', [
+		"helloworld_exe/gccxml/HelloWorld.mmp.xml",
+		"helloworld_exe/helloworld_HelloWorld_sc.rpp.d",
+		"helloworld_exe/gccxml/HelloWorld.rss.rfi",
+		"helloworld_reg_exe/helloworld_reg_HelloWorld_reg_sc.rpp.d",
+		"helloworld_exe/gccxml/HelloWorld_reg.rss.rfi",
+		"helloworld_exe/gccxml/urel/HelloWorld_Application.xml.d",
+		"helloworld_exe/gccxml/urel/HelloWorld_Application.xml",
+		"helloworld_exe/gccxml/urel/HelloWorld_AppUi.xml.d",
+		"helloworld_exe/gccxml/urel/HelloWorld_AppUi.xml",
+		"helloworld_exe/gccxml/urel/HelloWorld_AppView.xml.d",
+		"helloworld_exe/gccxml/urel/HelloWorld_AppView.xml",
+		"helloworld_exe/gccxml/urel/HelloWorld_Document.xml.d",
+		"helloworld_exe/gccxml/urel/HelloWorld_Document.xml",
+		"helloworld_exe/gccxml/urel/HelloWorld_Main.xml.d",
+		"helloworld_exe/gccxml/urel/HelloWorld_Main.xml"
+	])
+	t.run("windows")
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		
+		
+	t = SmokeTest()
+	t.id = "0057c"
+	t.name = "gccxml_var2"
+	t.command = "sbs -b smoke_suite/test_resources/simple_gui/BldVar2.inf " + \
+			"-c gccxml_urel -f -"
+	
+	# Don't allow -m or -f to be appended
+	t.logfileOption = lambda :""
+	t.makefileOption = lambda :""
+	
+	t.mustmatch = [".*__KERNEL_MODE__.*"]
+	t.errors = 1 # not really VAR2 code, so it wont build cleanly
+	t.returncode = 1
+	t.run("windows")
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		
+		
+	t = SmokeTest()
+	t.id = "0057d"
+	t.name = "gccxml_stdcpp"
+	t.command = "sbs -b smoke_suite/test_resources/simple_gui/Bld_stdcpp.inf " + \
+			"-c gccxml_urel -f -"
+	
+	# Don't allow -m or -f to be appended
+	t.logfileOption = lambda :""
+	t.makefileOption = lambda :""
+	
+	t.mustmatch = [".*__SYMBIAN_STDCPP_SUPPORT__.*"]
+	t.errors = 0 # reset after previous run
+	t.run("windows")
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+		
+	t.id = "57"
+	t.name = "gccxml"
+	t.result = result
+	t.print_result()
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/gnumakefile.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,67 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "53"	
+	t.name = "gnumakefile"
+	t.command = "sbs -b smoke_suite/test_resources/gnumakefile/bld.inf"
+	t.targets = [
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_bld_ARMV5_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_bld_ARMV5_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_bld_WINSCW_UDEB.txt",
+	  	"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_bld_WINSCW_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_final_ARMV5_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_final_ARMV5_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_final_WINSCW_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_final_WINSCW_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_lib_ARMV5_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_lib_ARMV5_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_lib_WINSCW_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_lib_WINSCW_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_makmake_ARMV5_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_makmake_ARMV5_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_makmake_WINSCW_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_makmake_WINSCW_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_resource_ARMV5_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_resource_ARMV5_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_resource_WINSCW_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/master_resource_WINSCW_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/slave_bld_ARMV5_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/slave_bld_ARMV5_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/slave_bld_WINSCW_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/slave_bld_WINSCW_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/slave_final_ARMV5_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/slave_final_ARMV5_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/slave_final_WINSCW_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/slave_final_WINSCW_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/slave_lib_ARMV5_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/slave_lib_ARMV5_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/slave_lib_WINSCW_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/slave_lib_WINSCW_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/slave_makmake_ARMV5_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/slave_makmake_ARMV5_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/slave_makmake_WINSCW_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/slave_makmake_WINSCW_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/slave_resource_ARMV5_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/slave_resource_ARMV5_UREL.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/slave_resource_WINSCW_UDEB.txt",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/gnumakefile/slave_resource_WINSCW_UREL.txt"
+		]
+	t.run("windows") # we don't have make 3.79 on Linux
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/gnumakefile_what.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,72 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest
+import re,os
+
+def run():
+	t = CheckWhatSmokeTest()
+	t.id = "54"
+	t.name = "gnumakefile_what"
+	t.command = "sbs -b smoke_suite/test_resources/gnumakefile/bld.inf --what"
+	componentpath = re.sub(r'\\','/',os.path.abspath("smoke_suite/test_resources/gnumakefile"))
+	
+	t.output_expected_only_once = True
+	t.stdout = [
+	# Generated txt files by the gnumakefile
+		componentpath+"/master_bld_ARMV5_UDEB.txt",
+		componentpath+"/master_bld_ARMV5_UREL.txt",
+		componentpath+"/master_bld_WINSCW_UDEB.txt",
+		componentpath+"/master_bld_WINSCW_UREL.txt",
+		componentpath+"/master_final_ARMV5_UDEB.txt",
+		componentpath+"/master_final_ARMV5_UREL.txt",
+		componentpath+"/master_final_WINSCW_UDEB.txt",
+		componentpath+"/master_final_WINSCW_UREL.txt",
+		componentpath+"/master_lib_ARMV5_UDEB.txt",
+		componentpath+"/master_lib_ARMV5_UREL.txt",
+		componentpath+"/master_lib_WINSCW_UDEB.txt",
+		componentpath+"/master_lib_WINSCW_UREL.txt",
+		componentpath+"/master_makmake_ARMV5_UDEB.txt",
+		componentpath+"/master_makmake_ARMV5_UREL.txt",
+		componentpath+"/master_makmake_WINSCW_UDEB.txt",
+		componentpath+"/master_makmake_WINSCW_UREL.txt",
+		componentpath+"/master_resource_ARMV5_UDEB.txt",
+		componentpath+"/master_resource_ARMV5_UREL.txt",
+		componentpath+"/master_resource_WINSCW_UDEB.txt",
+		componentpath+"/master_resource_WINSCW_UREL.txt",
+		componentpath+"/slave_bld_ARMV5_UDEB.txt",
+		componentpath+"/slave_bld_ARMV5_UREL.txt",
+		componentpath+"/slave_bld_WINSCW_UDEB.txt",
+		componentpath+"/slave_bld_WINSCW_UREL.txt",
+		componentpath+"/slave_final_ARMV5_UDEB.txt",
+		componentpath+"/slave_final_ARMV5_UREL.txt",
+		componentpath+"/slave_final_WINSCW_UDEB.txt",
+		componentpath+"/slave_final_WINSCW_UREL.txt",
+		componentpath+"/slave_lib_ARMV5_UDEB.txt",
+		componentpath+"/slave_lib_ARMV5_UREL.txt",
+		componentpath+"/slave_lib_WINSCW_UDEB.txt",
+		componentpath+"/slave_lib_WINSCW_UREL.txt",
+		componentpath+"/slave_makmake_ARMV5_UDEB.txt",
+		componentpath+"/slave_makmake_ARMV5_UREL.txt",
+		componentpath+"/slave_makmake_WINSCW_UDEB.txt",
+		componentpath+"/slave_makmake_WINSCW_UREL.txt",
+		componentpath+"/slave_resource_ARMV5_UDEB.txt",
+		componentpath+"/slave_resource_ARMV5_UREL.txt",
+		componentpath+"/slave_resource_WINSCW_UDEB.txt",
+		componentpath+"/slave_resource_WINSCW_UREL.txt"
+	]
+	t.run("windows") # we don't have make 3.79 on Linux
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/gnumakefile_whatlog.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,123 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest
+import re, os
+
+def run():
+	t = CheckWhatSmokeTest()
+	t.id = "70"
+	t.name = "gnumakefile_whatlog"
+	t.command = "sbs -b smoke_suite/test_resources/gnumakefile/bld.inf -f - " \
+			"-m ${SBSMAKEFILE} -c armv5.whatlog -c winscw.whatlog"
+	componentpath = re.sub(r'\\','/',os.path.abspath("smoke_suite/test_resources/gnumakefile"))
+	t.regexlinefilter = re.compile("^<(whatlog|build>)")
+	t.hostossensitive = False
+	t.usebash = True
+	t.targets = [
+		componentpath+"/master_bld_ARMV5_UDEB.txt",
+		componentpath+"/master_bld_ARMV5_UREL.txt",
+		componentpath+"/master_bld_WINSCW_UDEB.txt",
+		componentpath+"/master_bld_WINSCW_UREL.txt",
+		componentpath+"/master_final_ARMV5_UDEB.txt",
+		componentpath+"/master_final_ARMV5_UREL.txt",
+		componentpath+"/master_final_WINSCW_UDEB.txt",
+		componentpath+"/master_final_WINSCW_UREL.txt",
+		componentpath+"/master_lib_ARMV5_UDEB.txt",
+		componentpath+"/master_lib_ARMV5_UREL.txt",
+		componentpath+"/master_lib_WINSCW_UDEB.txt",
+		componentpath+"/master_lib_WINSCW_UREL.txt",
+		componentpath+"/master_makmake_ARMV5_UDEB.txt",
+		componentpath+"/master_makmake_ARMV5_UREL.txt",
+		componentpath+"/master_makmake_WINSCW_UDEB.txt",
+		componentpath+"/master_makmake_WINSCW_UREL.txt",
+		componentpath+"/master_resource_ARMV5_UDEB.txt",
+		componentpath+"/master_resource_ARMV5_UREL.txt",
+		componentpath+"/master_resource_WINSCW_UDEB.txt",
+		componentpath+"/master_resource_WINSCW_UREL.txt",
+		componentpath+"/slave_bld_ARMV5_UDEB.txt",
+		componentpath+"/slave_bld_ARMV5_UREL.txt",
+		componentpath+"/slave_bld_WINSCW_UDEB.txt",
+		componentpath+"/slave_bld_WINSCW_UREL.txt",
+		componentpath+"/slave_final_ARMV5_UDEB.txt",
+		componentpath+"/slave_final_ARMV5_UREL.txt",
+		componentpath+"/slave_final_WINSCW_UDEB.txt",
+		componentpath+"/slave_final_WINSCW_UREL.txt",
+		componentpath+"/slave_lib_ARMV5_UDEB.txt",
+		componentpath+"/slave_lib_ARMV5_UREL.txt",
+		componentpath+"/slave_lib_WINSCW_UDEB.txt",
+		componentpath+"/slave_lib_WINSCW_UREL.txt",
+		componentpath+"/slave_makmake_ARMV5_UDEB.txt",
+		componentpath+"/slave_makmake_ARMV5_UREL.txt",
+		componentpath+"/slave_makmake_WINSCW_UDEB.txt",
+		componentpath+"/slave_makmake_WINSCW_UREL.txt",
+		componentpath+"/slave_resource_ARMV5_UDEB.txt",
+		componentpath+"/slave_resource_ARMV5_UREL.txt",
+		componentpath+"/slave_resource_WINSCW_UDEB.txt",
+		componentpath+"/slave_resource_WINSCW_UREL.txt"
+		]
+	t.stdout = [
+		"<whatlog bldinf='"+componentpath+"/bld.inf' mmp='' config='armv5_udeb.whatlog'>",
+		"<build>"+componentpath+"/master_bld_ARMV5_UDEB.txt</build>",
+		"<build>"+componentpath+"/master_final_ARMV5_UDEB.txt</build>",
+		"<build>"+componentpath+"/master_lib_ARMV5_UDEB.txt</build>",
+		"<build>"+componentpath+"/master_makmake_ARMV5_UDEB.txt</build>",
+		"<build>"+componentpath+"/master_resource_ARMV5_UDEB.txt</build>",
+		"<whatlog bldinf='"+componentpath+"/bld.inf' mmp='' config='armv5_urel.whatlog'>",
+		"<build>"+componentpath+"/master_bld_ARMV5_UREL.txt</build>",
+		"<build>"+componentpath+"/master_final_ARMV5_UREL.txt</build>",
+		"<build>"+componentpath+"/master_lib_ARMV5_UREL.txt</build>",
+		"<build>"+componentpath+"/master_makmake_ARMV5_UREL.txt</build>",
+		"<build>"+componentpath+"/master_resource_ARMV5_UREL.txt</build>",
+		"<whatlog bldinf='"+componentpath+"/bld.inf' mmp='' config='winscw_urel.whatlog'>",
+		"<build>"+componentpath+"/master_bld_WINSCW_UREL.txt</build>",
+		"<build>"+componentpath+"/master_final_WINSCW_UREL.txt</build>",
+		"<build>"+componentpath+"/master_lib_WINSCW_UREL.txt</build>",
+		"<build>"+componentpath+"/master_makmake_WINSCW_UREL.txt</build>",
+		"<build>"+componentpath+"/master_resource_WINSCW_UREL.txt</build>",
+		"<whatlog bldinf='"+componentpath+"/bld.inf' mmp='' config='winscw_udeb.whatlog'>",
+		"<build>"+componentpath+"/master_bld_WINSCW_UDEB.txt</build>",
+		"<build>"+componentpath+"/master_final_WINSCW_UDEB.txt</build>",
+		"<build>"+componentpath+"/master_lib_WINSCW_UDEB.txt</build>",
+		"<build>"+componentpath+"/master_makmake_WINSCW_UDEB.txt</build>",
+		"<build>"+componentpath+"/master_resource_WINSCW_UDEB.txt</build>",
+		"<whatlog bldinf='"+componentpath+"/bld.inf' mmp='' config='armv5_udeb.whatlog'>",
+		"<build>"+componentpath+"/slave_bld_ARMV5_UDEB.txt</build>",
+		"<build>"+componentpath+"/slave_final_ARMV5_UDEB.txt</build>",
+		"<build>"+componentpath+"/slave_lib_ARMV5_UDEB.txt</build>",
+		"<build>"+componentpath+"/slave_makmake_ARMV5_UDEB.txt</build>",
+		"<build>"+componentpath+"/slave_resource_ARMV5_UDEB.txt</build>",
+		"<whatlog bldinf='"+componentpath+"/bld.inf' mmp='' config='armv5_urel.whatlog'>",
+		"<build>"+componentpath+"/slave_bld_ARMV5_UREL.txt</build>",
+		"<build>"+componentpath+"/slave_final_ARMV5_UREL.txt</build>",
+		"<build>"+componentpath+"/slave_lib_ARMV5_UREL.txt</build>",
+		"<build>"+componentpath+"/slave_makmake_ARMV5_UREL.txt</build>",
+		"<build>"+componentpath+"/slave_resource_ARMV5_UREL.txt</build>",
+		"<whatlog bldinf='"+componentpath+"/bld.inf' mmp='' config='winscw_urel.whatlog'>",
+		"<build>"+componentpath+"/slave_bld_WINSCW_UREL.txt</build>",
+		"<build>"+componentpath+"/slave_final_WINSCW_UREL.txt</build>",
+		"<build>"+componentpath+"/slave_lib_WINSCW_UREL.txt</build>",
+		"<build>"+componentpath+"/slave_makmake_WINSCW_UREL.txt</build>",
+		"<build>"+componentpath+"/slave_resource_WINSCW_UREL.txt</build>",
+		"<whatlog bldinf='"+componentpath+"/bld.inf' mmp='' config='winscw_udeb.whatlog'>",
+		"<build>"+componentpath+"/slave_bld_WINSCW_UDEB.txt</build>",
+		"<build>"+componentpath+"/slave_final_WINSCW_UDEB.txt</build>",
+		"<build>"+componentpath+"/slave_lib_WINSCW_UDEB.txt</build>",
+		"<build>"+componentpath+"/slave_makmake_WINSCW_UDEB.txt</build>",
+		"<build>"+componentpath+"/slave_resource_WINSCW_UDEB.txt</build>"
+	]
+	t.run("windows") # we don't have make 3.79 on Linux
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/gui_whatlog.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,141 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest
+import re, os
+
+def run():
+	t = CheckWhatSmokeTest()
+	t.id = "66"
+	t.name = "gui_whatlog"
+	t.command = "sbs -b smoke_suite/test_resources/simple_gui/Bld.inf -f - -m" \
+			+ " ${SBSMAKEFILE} -c armv5.whatlog -c winscw.whatlog"
+	componentpath = re.sub(r'\\','/',os.path.abspath("smoke_suite/test_resources/simple_gui"))
+	t.regexlinefilter = \
+			re.compile("^<(whatlog|export|build>|resource>|bitmap>)")
+	t.hostossensitive = False
+	t.usebash = True
+	t.targets = [
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/include/helloworld.rsg",
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/helloworld.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/helloworld.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/helloworld.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_gui/Bld.inf', [
+		"helloworld_exe/helloworld.mbm_bmconvcommands",
+		"helloworld_exe/helloworld_HelloWorld_sc.rpp",
+		"helloworld_exe/helloworld_HelloWorld_sc.rpp.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_Application.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Application.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppUi.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppUi.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppView.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppView.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_Document.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Document.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_Main.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Main.o.d",
+		"helloworld_exe/armv5/udeb/helloworld_udeb_objects.via",
+		"helloworld_exe/armv5/urel/HelloWorld_Application.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Application.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_AppUi.o",
+		"helloworld_exe/armv5/urel/HelloWorld_AppUi.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_AppView.o",
+		"helloworld_exe/armv5/urel/HelloWorld_AppView.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_Document.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Document.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_Main.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Main.o.d",
+		"helloworld_exe/armv5/urel/helloworld_urel_objects.via",
+		"helloworld_exe/winscw/udeb/helloworld.UID.CPP",
+		"helloworld_exe/winscw/udeb/HelloWorld_Application.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_Application.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Application.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppUi.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppUi.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppUi.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppView.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppView.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppView.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_Document.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_Document.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Document.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_Main.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_Main.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Main.o.d",
+		"helloworld_exe/winscw/udeb/helloworld_UID_.dep",
+		"helloworld_exe/winscw/udeb/helloworld_UID_.o",
+		"helloworld_exe/winscw/udeb/helloworld_UID_.o.d",
+		"helloworld_exe/winscw/urel/helloworld.UID.CPP",
+		"helloworld_exe/winscw/urel/HelloWorld_Application.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_Application.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Application.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_AppUi.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_AppUi.o",
+		"helloworld_exe/winscw/urel/HelloWorld_AppUi.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_AppView.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_AppView.o",
+		"helloworld_exe/winscw/urel/HelloWorld_AppView.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_Document.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_Document.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Document.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_Main.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_Main.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Main.o.d",
+		"helloworld_exe/winscw/urel/helloworld_UID_.dep",
+		"helloworld_exe/winscw/urel/helloworld_UID_.o",
+		"helloworld_exe/winscw/urel/helloworld_UID_.o.d",
+		"helloworld_reg_exe/helloworld_reg_HelloWorld_reg_sc.rpp.d"
+	])
+	t.stdout = [
+		"<whatlog bldinf='"+componentpath+"/Bld.inf' mmp='"+componentpath+"/HelloWorld.mmp' config='armv5_udeb.whatlog'>",
+		"<bitmap>$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.mbm</bitmap>",
+		"<resource>$(EPOCROOT)/epoc32/include/helloworld.rsg</resource>",
+		"<resource>$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.rsc</resource>",
+		"<resource>$(EPOCROOT)/epoc32/data/z/private/10003a3f/apps/helloworld_reg.rsc</resource>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/udeb/helloworld.exe</build>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/udeb/helloworld.exe.map</build>",
+		"<whatlog bldinf='"+componentpath+"/Bld.inf' mmp='"+componentpath+"/HelloWorld.mmp' config='winscw_urel.whatlog'>",
+		"<bitmap>$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.mbm</bitmap>",
+		"<bitmap>$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/helloworld.mbm</bitmap>",
+		"<bitmap>$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/helloworld.mbm</bitmap>",
+		"<resource>$(EPOCROOT)/epoc32/include/helloworld.rsg</resource>",
+		"<resource>$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.rsc</resource>",
+		"<resource>$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/helloworld.rsc</resource>",
+		"<resource>$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/helloworld.rsc</resource>",
+		"<resource>$(EPOCROOT)/epoc32/data/z/private/10003a3f/apps/helloworld_reg.rsc</resource>",
+		"<resource>$(EPOCROOT)/epoc32/release/winscw/udeb/z/private/10003a3f/apps/helloworld_reg.rsc</resource>",
+		"<resource>$(EPOCROOT)/epoc32/release/winscw/urel/z/private/10003a3f/apps/helloworld_reg.rsc</resource>",
+		"<build>$(EPOCROOT)/epoc32/release/winscw/urel/helloworld.exe</build>",
+		"<build>$(EPOCROOT)/epoc32/release/winscw/urel/helloworld.exe.map</build>",
+		"<whatlog bldinf='"+componentpath+"/Bld.inf' mmp='"+componentpath+"/HelloWorld.mmp' config='armv5_urel.whatlog'>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/urel/helloworld.exe</build>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/urel/helloworld.exe.map</build>",
+		"<whatlog bldinf='"+componentpath+"/Bld.inf' mmp='"+componentpath+"/HelloWorld.mmp' config='winscw_udeb.whatlog'>",
+		"<build>$(EPOCROOT)/epoc32/release/winscw/udeb/helloworld.exe</build>",
+	]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/implib_armv5.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,36 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "14"
+	t.name = "implib_armv5"
+	t.command = "sbs -b smoke_suite/test_resources/simple_implib/bld.inf" \
+		+ " -c armv5 LIBRARY"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib{000a0000}.dso"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_implib/bld.inf', [
+		['simple_implib_lib/armv5/udeb/simple_implib.prep',
+                 'simple_implib_lib/armv5/urel/simple_implib.prep']
+	])
+	t.run()
+	
+	t.print_result()	
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/implib_armv5_smp.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+	t = AntiTargetSmokeTest()
+	t.id = "64"
+	t.name = "implib_armv5_smp"
+	t.command = "sbs -b smoke_suite/test_resources/simple_implib/bld.inf -c " \
+			+ "armv5.smp LIBRARY"
+	# ABIv1 .lib files are not generated on Linux
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib{000a0000}.dso"
+		]
+	t.run()
+	
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/implib_armv5_what.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,32 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest
+
+def run():
+	t = CheckWhatSmokeTest()
+	t.id = "15"
+	t.name = "implib_armv5_what"
+	t.command = "sbs -b smoke_suite/test_resources/simple_implib/bld.inf -c " + \
+			"armv5 --what LIBRARY"
+	t.stdout = [
+		'$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib.dso',
+		'$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib{000a0000}.dso'
+	]
+	t.run()
+	
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/implib_armv5_with_armv5_smp.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "65"
+	t.name = "implib_armv5_with_armv5_smp"
+	t.command = "sbs -b smoke_suite/test_resources/simple_implib/bld.inf -c " \
+			+ "armv5 -c armv5.smp LIBRARY"
+	# ABIv1 .lib files are not generated on Linux
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib{000a0000}.dso"
+		]
+	t.run()
+	
+	t.print_result()	
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/implib_nodef.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,49 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	
+	t.id = "71a"
+	t.name = "implib_implicit_def"
+	t.command = "sbs -b smoke_suite/test_resources/simple_implib/nodef/group/bld.inf" \
+			+ " -p implib_implicit_def.mmp"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/implib_implicit_def.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/implib_implicit_def{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/implib_implicit_def.lib"
+		]
+	t.run()
+
+	t.id = "71b"
+	t.name = "implib_no_def"
+	t.command = "sbs -b smoke_suite/test_resources/simple_implib/nodef/group/bld.inf" \
+			+ " -p implib_no_def.mmp"
+	t.targets = []
+	t.mustmatch = [
+		"No DEF File for IMPLIB target type in"	
+		]
+	t.errors = 2 # 1 for winscw and 1 for armv5
+	t.returncode = 1
+	t.run()
+
+	t.id = "71"
+	t.name = "implib_nodef"
+	t.print_result()
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/implib_whatlog.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,51 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest
+import re, os
+
+def run():
+	t = CheckWhatSmokeTest()
+	t.id = "67"
+	t.name = "implib_whatlog"
+	t.command = "sbs -b smoke_suite/test_resources/simple_implib/bld.inf -f -" \
+			" -m ${SBSMAKEFILE} -c armv5.whatlog -c winscw.whatlog LIBRARY"
+	componentpath = re.sub(r'\\','/',os.path.abspath("smoke_suite/test_resources/simple_implib"))
+	t.regexlinefilter = re.compile("^<(whatlog|build>)")
+	t.hostossensitive = False
+	t.usebash = True
+	# ABIv1 .lib files are not generated on Linux
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/simple_implib.lib"
+		]
+	t.stdout = [
+		"<whatlog bldinf='"+componentpath+"/bld.inf' mmp='"+componentpath+"/simple_implib.mmp' config='winscw_udeb.whatlog'>",
+		"<build>$(EPOCROOT)/epoc32/release/winscw/udeb/simple_implib.lib</build>",
+		"<whatlog bldinf='"+componentpath+"/bld.inf' mmp='"+componentpath+"/simple_implib.mmp' config='winscw_urel.whatlog'>",
+		"<build>$(EPOCROOT)/epoc32/release/winscw/udeb/simple_implib.lib</build>",
+		"<whatlog bldinf='"+componentpath+"/bld.inf' mmp='"+componentpath+"/simple_implib.mmp' config='armv5_udeb.whatlog'>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib.dso</build>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib{000a0000}.dso</build>",
+		"<whatlog bldinf='"+componentpath+"/bld.inf' mmp='"+componentpath+"/simple_implib.mmp' config='armv5_urel.whatlog'>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib.dso</build>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/lib/simple_implib{000a0000}.dso</build>"
+	]
+	t.run()
+	
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/implib_winscw.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "36"
+	t.name = "implib_winscw"
+	t.command = "sbs -b smoke_suite/test_resources/simple_implib/bld.inf -c " \
+			+ "winscw LIBRARY"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/simple_implib.lib"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_implib/bld.inf', [
+		["simple_implib/simple_implib_lib/winscw/udeb/simple_implib.prep.def",
+		"simple_implib/simple_implib_lib/winscw/urel/simple_implib.prep.def"]
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/implib_winscw_what.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest
+
+def run():
+	t = CheckWhatSmokeTest()
+	t.id = "37"
+	t.name = "implib_winscw_what"
+	t.command = "sbs -b smoke_suite/test_resources/simple_implib/bld.inf -c " \
+			+ "winscw --what LIBRARY"
+	t.stdout = [
+		'$(EPOCROOT)/epoc32/release/winscw/udeb/simple_implib.lib'
+	]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/input_validation.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,58 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.description = "Set of tests for commandline option validation e.g. checking that the specified make engine exists"
+	
+	
+	t.usebash = True
+	t.errors = 1
+	t.returncode = 1
+	t.exceptions = 0
+	base_command = "sbs -b smoke_suite/test_resources/simple/bld.inf -f ${SBSLOGFILE} -m ${SBSMAKEFILE}"
+	
+	t.id = "42562a"
+	t.name = "validate_makeengine_nonexist"
+	t.command = base_command + " -e amakeenginethatdoesnotexist"
+	t.mustmatch = ["Unable to use make engine: 'amakeenginethatdoesnotexist' does not appear to be a make engine - no settings found for it"]
+
+	t.run()
+
+	t.id = "43562b"
+	t.mustmatch = ["Unable to use make engine: 'arm' is not a build engine \(it's a variant but it does not extend 'make_engine'"]
+	t.name = "validate_makeengine_is_a_non_makengine_variant"
+	t.command = base_command + " -e arm"
+	t.run()
+
+	# aliases can be of the form name='blah' meaning='x.y.z'  i.e. where the alias is for a sequence of variants
+	# this tests that we detect that at least one of these variants has make_engine as a parent
+	# it is possible for one of them not to and we mustn't bomb-out just because of that
+	t.id = "43562c"
+	t.mustmatch = []
+	t.name = "validate_real_dfs_modded_makeengine_alias"
+	t.command = "export HOME=$SBS_HOME/test/custom_options/dfsconfig;  " + base_command + " -e dfstestmake -c arm.v5.urel.gcce4_4_1"
+	t.errors = 0
+	t.warnings = 0
+	t.returncode = 0
+	t.run()
+	
+	t.id = "43562"
+	t.name = "input_validation"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/kdll_armv5.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "0096"
+	t.name = "kdll_armv5"
+	t.usebash = 1
+
+	t.command = "sbs -b smoke_suite/test_resources/simple_kdll/bld.inf -c armv5_urel -f-"
+
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_kdll.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_kdll.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_kdll.dll.sym"
+		]
+
+	t.mustmatch = [
+		r".*\bksrt\d_\d\.lib\b.*",
+		r".*\bekll\.lib\b.*"
+		]
+
+	t.mustnotmatch = [
+		r".*usrt.*",
+		r".*scppnwdl.*"
+		]
+
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/keepgoing.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,106 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.description = """Raptor should keep going and build as much as possible with the -k option specified."""
+	
+	command = "sbs -b smoke_suite/test_resources/simple/bld.inf -k"
+	config = " --configpath=test/smoke_suite/test_resources/keepgoing"
+	targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.sym"
+		]	
+	buildtargets = [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o",
+		"test_/armv5/udeb/test.o.d",
+		"test_/armv5/udeb/test3.o.d",
+		"test_/armv5/udeb/test4.o.d",
+		"test_/armv5/udeb/test5.o.d",
+		"test_/armv5/udeb/test1.o.d",
+		"test_/armv5/udeb/test6.o.d",
+		"test_/armv5/udeb/test2.o.d",
+		"test_/armv5/udeb/test3.o",
+		"test_/armv5/udeb/test4.o",
+		"test_/armv5/udeb/test5.o",
+		"test_/armv5/udeb/test1.o",
+		"test_/armv5/udeb/test6.o",
+		"test_/armv5/udeb/test2.o",
+		"test_/armv5/urel/test.o.d",
+		"test_/armv5/urel/test3.o.d",
+		"test_/armv5/urel/test4.o.d",
+		"test_/armv5/urel/test5.o.d",
+		"test_/armv5/urel/test1.o.d",
+		"test_/armv5/urel/test6.o.d",
+		"test_/armv5/urel/test2.o.d",
+		"test_/armv5/urel/test3.o",
+		"test_/armv5/urel/test4.o",
+		"test_/armv5/urel/test5.o",
+		"test_/armv5/urel/test1.o",
+		"test_/armv5/urel/test6.o",
+		"test_/armv5/urel/test2.o",
+		"test_/armv5/udeb/test_udeb_objects.via",
+		"test_/armv5/urel/test_urel_objects.via"
+		]
+	
+	# using a non-existent config with -c should build any independent configs
+	t.id = "115a"
+	t.name = "keepgoing_bad_config"
+	t.command = command + " -c armv5 -c armv5.bogus"
+	t.targets = targets
+	t.addbuildtargets("smoke_suite/test_resources/simple/bld.inf", buildtargets)
+	t.mustmatch = ["sbs: error: Unknown build variant 'bogus'"]
+	t.warnings = 0
+	t.errors = 1
+	t.returncode = 1
+	t.run()
+	
+	# using groups with bad sub-groups should build any independent groups
+	t.id = "115b"
+	t.name = "keepgoing_bad_subgroup"
+	t.command = command + config + " -c lots_of_products"
+	t.mustmatch = ["Unknown reference 'qwertyuio'",
+	               "Unknown reference 'asdfghjkl'",
+	               "Unknown reference 'zxcvbnm_p'"]
+	t.warnings = 0
+	t.errors = 3
+	t.returncode = 1
+	t.run()
+	
+	# using groups with bad sub-sub-groups should build any independent groups
+	t.id = "115c"
+	t.name = "keepgoing_bad_subsubgroup"
+	t.command = command + config + " -c lots_of_products_2"
+	t.mustmatch = ["Unknown reference 'qwertyuio'",
+	               "Unknown reference 'asdfghjkl'",
+	               "Unknown reference 'zxcvbnm_p'"]
+	t.warnings = 0
+	t.errors = 3
+	t.returncode = 1
+	t.run()
+	
+	# summarise	
+	t.id = "115"
+	t.name = "keepgoing"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/lib_armv5_armv7.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,107 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+from raptor_tests import ReplaceEnvs
+import os
+
+def run():
+	# Generate source files for simple_lib tests
+	dir = ReplaceEnvs("$(SBS_HOME)/test/smoke_suite/test_resources/simple_lib")
+	zs = "zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz"
+	for i in range(1, 100):
+		file = open(os.path.join(dir, zs + "_" + str(i) + ".cpp"), "w")
+		file.write("int f(void) { return 1; }\n")
+		file.close()
+
+	# Convenience method to list generated source build output
+	def __generatedFiles(aConfig):
+		udeb = "etest_lib/%s/udeb/" % aConfig
+		urel = "etest_lib/%s/urel/" % aConfig
+	
+		generated = []
+		for i in range(1, 100):
+			generated.append(udeb + zs + "_" + str(i) + ".o")
+			generated.append(udeb + zs + "_" + str(i) + ".o.d")
+			generated.append(urel + zs + "_" + str(i) + ".o")
+			generated.append(urel + zs + "_" + str(i) + ".o.d")
+		return generated
+		
+	t = SmokeTest()
+	result = SmokeTest.PASS
+	
+	armv5targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/etest.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/etest.lib"
+		]
+	armv5buildtargets = [
+		"etest_lib/armv5/udeb/etest_udeb_objects.via",
+		"etest_lib/armv5/udeb/test_lib.o",
+		"etest_lib/armv5/urel/etest_urel_objects.via",
+		"etest_lib/armv5/urel/test_lib.o"
+		]
+	armv5buildtargets.extend(__generatedFiles("armv5"))
+		
+	t.id = "0013a"
+	t.name = "lib_armv5_rvct"
+	t.command = "sbs -b smoke_suite/test_resources/simple_lib/bld.inf -c armv5 LIBRARY"
+	t.targets = armv5targets
+	t.addbuildtargets('smoke_suite/test_resources/simple_lib/bld.inf', armv5buildtargets)
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		
+	t.id = "0013b"
+	t.name = "lib_armv5_clean"
+	t.command = "sbs -b smoke_suite/test_resources/simple_lib/bld.inf -c armv5 clean"
+	t.targets = []
+	t.run()	
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	t.id = "0013c"
+	t.name = "lib_armv5_gcce"
+	t.command = "sbs -b smoke_suite/test_resources/simple_lib/bld.inf -c gcce_armv5 LIBRARY"
+	t.targets = armv5targets
+	t.addbuildtargets('smoke_suite/test_resources/simple_lib/bld.inf', armv5buildtargets)
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	t.name = "lib_armv7"
+	t.id = "0013d"
+	t.command = "sbs -b smoke_suite/test_resources/simple_lib/bld.inf -c armv7 LIBRARY"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv7/udeb/etest.lib",
+		"$(EPOCROOT)/epoc32/release/armv7/urel/etest.lib"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_lib/bld.inf', [
+		"etest_lib/armv7/udeb/etest_udeb_objects.via",
+		"etest_lib/armv7/udeb/test_lib.o",
+		"etest_lib/armv7/urel/etest_urel_objects.via",
+		"etest_lib/armv7/urel/test_lib.o"
+	])
+	t.addbuildtargets('smoke_suite/test_resources/simple_lib/bld.inf', __generatedFiles("armv7"))
+	
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+
+	t.id = "13"
+	t.name = "lib_armv5_armv7"
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/lib_versioned.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,55 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+import sys
+
+def run():
+	t = SmokeTest()
+	t.id = "58"
+	t.name = "lib_versioned"
+	t.command = "sbs -b smoke_suite/test_resources/versioned_lib/bld.inf" + \
+		    " -b smoke_suite/test_resources/versioned_lib/dllversioning.inf" + \
+		    " -c armv5 -c winscw "
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testver.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testver{00020000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testver{00030000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/version.ed.lib.04.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/version.ed.lib{000a0000}.04.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/versioned.lib.03.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/versioned.lib{000a0000}.03.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/versionedlib.02.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/versionedlib01.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/versionedlib01{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/versionedlib{000a0000}.02.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/testver.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/testver.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/testver{00020000}.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/testver{00020000}.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/testver.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/testver.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/testver{00020000}.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/testver{00020000}.dll.sym",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/version.ed.lib.04.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/versioned.lib.03.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/versionedlib.02.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/versionedlib01.lib"
+		]
+	t.run()
+	
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/lib_winscw.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,34 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "35"
+	t.name = "lib_winscw"
+	t.command = "sbs -b smoke_suite/test_resources/simple_lib/bld.inf -c " + \
+			"winscw LIBRARY"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/etest.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/etest.lib"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_lib/bld.inf', [
+		"etest_lib/winscw/udeb/test_lib.o",
+		"etest_lib/winscw/urel/test_lib.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/listing.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,49 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "31"
+	t.name = "listing"
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 " + \
+			"-c winscw -k listing"
+	t.targets = [
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test.armv5.urel.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test.armv5.udeb.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test.WINSCW.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test1.armv5.urel.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test1.armv5.udeb.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test1.WINSCW.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test2.armv5.urel.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test2.armv5.udeb.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test2.WINSCW.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test3.armv5.urel.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test3.armv5.udeb.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test3.WINSCW.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test4.armv5.urel.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test4.armv5.udeb.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test4.WINSCW.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test5.armv5.urel.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test5.armv5.udeb.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test5.WINSCW.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test6.armv5.urel.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test6.armv5.udeb.test.exe.lst",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/simple/test6.WINSCW.lst"
+		]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/longfilenames.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,129 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+import os
+import re
+import sys
+
+def run():
+	# Content for files to be generated.
+	cpp = "longerfilenamethanyoumightnormallyexpecttobepresent"
+	path = "/test/smoke_suite/test_resources/longfilenames/"
+	targetinfo = """TARGET			longfilenames.exe
+TARGETTYPE		exe
+UID				0xE8000047
+LIBRARY			euser.lib
+SYSTEMINCLUDE	/epoc32/include
+"""
+	
+	# Some numbers for path and file operations
+	length_limit = 245 # Safety-margin of 10 chars for changing dir structures in Raptor
+	extLen = 8 # eg. _001.o.d
+	numLen = 43 # release directory length (c_0000000000000000/longfilenames_exe/winscw/urel/) (minus a few as a safety-margin)
+	pathmultiplier = 5	# expand cpp to the maximum length
+	mmpStart = 1
+	mmpStop = 270
+	cppStart = 1
+	cppStop = 270
+
+
+	# Find SBS_Home and its length as a string
+	sbsHome = os.environ["SBS_HOME"]
+	sbsLen = len(sbsHome)
+	
+	# Work out path lengths required
+	dirname = sbsHome + path
+	string = cpp * pathmultiplier
+	dirlen = len(dirname)
+	fileLen = length_limit - dirlen - numLen - extLen
+	if fileLen < 0:
+		print "Error: Your test path is too long for the longfilenames test to work"
+		sys.exit()
+	fileName = string[0:fileLen]
+
+	# Generate the mmp file using the mmp string
+	f = open(dirname + 'longfilenames.mmp', 'w')
+	f.writelines(targetinfo)
+	f.writelines("\nSOURCE		" + cpp + ".cpp\n")
+	while mmpStart <= mmpStop:
+		sourceinfo = "SOURCE		" + fileName + '_%03d' %mmpStart + ".cpp " + '\n'
+		f.writelines(sourceinfo)
+		mmpStart += 1
+	f.close()
+
+	# File generating utility
+	while cppStart <= cppStop:
+		t = str(cppStart)
+		filename = dirname + fileName + '_%03d' %cppStart + '.cpp'
+		content = 'int x' + t + ' = 1;'
+		f = open (filename, 'w')
+		f.write (content)
+		f.close()
+		cppStart += 1
+
+
+	t = SmokeTest()
+	t.id = "79"
+	t.name = "longfilenames"
+	t.command = "sbs -b smoke_suite/test_resources/longfilenames/bld.inf -c winscw"
+	t.description = """Ensure that winscw links with large amounts of object files with long names are buildable.
+		Note that the link in the build of this component should always be greater than 16500 chars, regardless
+		of environment - we know such calls are currently problematic on Windows with GNU Make and Cygwin's
+		Bash unless a linker response file is not used to hold the object files."""
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/winscw/urel/longfilenames.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/longfilenames.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/longfilenames/bld.inf', [
+		"longfilenames_exe/winscw/urel/longerfilenamethanyoumightnormallyexpecttobepresent.dep",
+		"longfilenames_exe/winscw/urel/longerfilenamethanyoumightnormallyexpecttobepresent.o",
+		"longfilenames_exe/winscw/urel/longerfilenamethanyoumightnormallyexpecttobepresent.o.d",
+		"longfilenames_exe/winscw/urel/longfilenames.UID.CPP",
+		"longfilenames_exe/winscw/urel/longfilenames_UID_.dep",
+		"longfilenames_exe/winscw/urel/longfilenames_UID_.o",
+		"longfilenames_exe/winscw/urel/longfilenames_UID_.o.d",
+		"longfilenames_exe/winscw/urel/longfilenames_urel_objects.lrf"]
+		)
+	
+	basefilename = "longfilenames_exe/winscw/urel/" + fileName + "_%03d.%s"
+	for i in range(1, 271):		
+		t.addbuildtargets('smoke_suite/test_resources/longfilenames/bld.inf', [
+			basefilename % (i, "dep"),
+			basefilename % (i, "o"),
+			basefilename % (i, "o.d")
+			]
+		)
+
+	t.run()
+		
+	# Remove all created files
+	
+	# Matches longerfilena......_nnn.cpp
+	cpp_regex = re.compile("^.+_\d{3}.cpp$", re.I)
+	for file in os.listdir(dirname):
+		if cpp_regex.match(file) is not None:
+			try:
+				os.remove(dirname + file)
+			except:
+				pass
+	
+	try:
+		os.remove(dirname + 'longfilenames.mmp')
+	except:
+		pass
+	
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/longpath.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,128 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+
+	#------------------------------------------------------------------------------
+	# Content for files to be generated.
+	#------------------------------------------------------------------------------
+	cpp = "longerfilenamethanyoumightnormallyexpecttobepresent"
+	path = "/test/smoke_suite/test_resources/longerpathnamesthanyoumightnormallyexpectinabuildtree/anotherlevelwithareallyreallyreallylongnamethistimeprobablyabitoverthetop/"
+	path_eabi = "/test/smoke_suite/test_resources/longerpathnamesthanyoumightnormallyexpectinabuildtree/eabi/"
+	
+	#------------------------------------------------------------------------------
+	# Some numbers for path and file operations
+	#------------------------------------------------------------------------------
+	cppStart = 1
+	cppStop = 49
+	
+	import os
+	import shutil
+	import sys
+	
+	#------------------------------------------------------------------------------
+	# Find SBS_Home
+	#------------------------------------------------------------------------------
+	sbsHome = os.environ["SBS_HOME"]
+	
+	#------------------------------------------------------------------------------
+	# Create directories for both Linux and Windows
+	#------------------------------------------------------------------------------
+	d = os.path.dirname(sbsHome + path)
+	if not os.path.exists(d):
+		os.makedirs(d)
+		
+	d = os.path.dirname(sbsHome + path_eabi)
+	if not os.path.exists(d):
+		os.makedirs(d)
+
+	#------------------------------------------------------------------------------
+	# File generating utility
+	#------------------------------------------------------------------------------
+	while cppStart <= cppStop:
+			t = str(cppStart)
+			filename = sbsHome + path + 'test' + '%02d' %cppStart + '.cpp'
+			content = 'int x' + t + ' = 0;'
+			cppStart = cppStart + 1
+			f = open (filename, 'w')
+			f.write (content + '\n')
+			f.close()
+	cppStart = cppStart + 1
+
+	#------------------------------------------------------------------------------
+	# File copying utility
+	#------------------------------------------------------------------------------
+	dirname = sbsHome + '/test/smoke_suite/test_resources/long/paths/'
+	cpp = dirname + 'test.cpp'
+	bld = dirname + 'bld.inf'
+	deftest = dirname + 'deftest.mmp'
+	e32def = dirname + 'e32def.h'
+	
+	deftestu = dirname + 'deftestu.def'
+	
+	dst_cpp = sbsHome + path + 'test.cpp'
+	dst_bld = sbsHome + path + 'bld.inf'
+	dst_deftest = sbsHome + path + 'deftest.mmp'
+	dst_e32def = sbsHome + path + 'e32def.h'
+	dst_deftestu = sbsHome + path_eabi + 'deftestu.def'
+	
+		
+	if os.path.exists(dst_cpp):
+		pass
+	else:
+		shutil.copy(cpp, dst_cpp)
+		shutil.copy(bld, dst_bld)
+		shutil.copy(deftest, dst_deftest)
+		shutil.copy(e32def, dst_e32def)
+		shutil.copy(deftestu , dst_deftestu)
+		dirname = sbsHome + path
+		
+	t = SmokeTest()
+	t.id = "41"
+	t.name = "longpath"
+	t.command = "sbs -b " + \
+			"smoke_suite/test_resources/longerpathnamesthanyoumightnormallyexpectinabuildtree/anotherlevelwithareallyreallyreallylongnamethistimeprobablyabitoverthetop/bld.inf" + \
+			" -c armv5"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/deftest.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/deftest.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/deftest{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/deftest.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/deftest.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/deftest.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/deftest.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/deftest.dll.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/longerpathnamesthanyoumightnormallyexpectinabuildtree/anotherlevelwithareallyreallyreallylongnamethistimeprobablyabitoverthetop/bld.inf', [
+		"deftest_/armv5/udeb/deftest_udeb_objects.via",
+		"deftest_/armv5/udeb/test.o",
+		"deftest_/armv5/udeb/test09.o",
+		"deftest_/armv5/udeb/test19.o",
+		"deftest_/armv5/udeb/test29.o",
+		"deftest_/armv5/udeb/test39.o",
+		"deftest_/armv5/udeb/test49.o",
+		"deftest_/armv5/urel/deftest_urel_objects.via",
+		"deftest_/armv5/urel/test.o",
+		"deftest_/armv5/urel/test09.o",
+		"deftest_/armv5/urel/test19.o",
+		"deftest_/armv5/urel/test29.o",
+		"deftest_/armv5/urel/test39.o",
+		"deftest_/armv5/urel/test49.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/make_engine_errors.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,54 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "113"
+	t.name = "make_engine_errors"
+	t.description = "Errors reported by gmake and emake should be escaped to ensure that the logs are valid XML"
+	
+	t.mustmatch_singleline = ["Circular b &lt;- a dependency",
+							  "non_existent_&amp;_needs_escaping.txt"]
+	
+	t.mustnotmatch_singleline = ["Circular b <- a dependency",
+							     "non_existent_&_needs_escaping.txt"]
+	
+	t.usebash = True
+	t.errors = 1
+	t.returncode = 1
+	base_command = "sbs --no-depend-generate -b smoke_suite/test_resources/make_engine_errors/bld.inf -f-"
+	
+	t.id = "113a"
+	t.name = "gmake_engine_errors"
+	t.command = base_command + " -e make"
+	t.run()
+
+	t.id = "113b"
+	t.name = "emake_engine_errors"
+	t.command = base_command + " -e emake"
+	t.run()
+	
+	t.id = "113c"
+	t.name = "emake_engine_errors_with_merged_streams"
+	t.command = base_command + " -e emake --mo=--emake-mergestreams=1"
+	t.run()
+		
+	t.id = "113"
+	t.name = "make_engine_errors"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/mmp_keywords.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,313 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.description = "This testcase tests all mmp keywords including new implementation of 'paged/unpaged code/data'"
+	t.usebash = True
+	
+	t.id = "75a"
+	t.name = "mmp_1"
+	t.command = "sbs -b smoke_suite/test_resources/mmp/mmp1/group/bld.inf -c armv5 -f-"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/shutdownsrv.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/shutdownsrv.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/shutdownsrv.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/shutdownsrv.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/exportlibrary_shutdownsrv.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/exportlibrary_shutdownsrv{000a0000}.dso",
+	]
+	t.addbuildtargets("smoke_suite/test_resources/mmp/mmp1/group/bld.inf", [
+		"shutdownsrv_dll/armv5/udeb/shutdownsrv.o",
+		"shutdownsrv_dll/armv5/urel/shutdownsrv.o",
+		"shutdownsrv_dll/armv5/udeb/shutdownsrvpatchdata.o",
+		"shutdownsrv_dll/armv5/urel/shutdownsrvpatchdata.o",
+		"shutdownsrv_dll/armv5/udeb/shutdowntimer.o",
+		"shutdownsrv_dll/armv5/urel/shutdowntimer.o"
+		])
+	t.mustmatch = [
+		".*elf2e32.*(--defaultpaged|--codepaging=default.*--datapaging=default).*",
+		".*armlink.*--verbose.*"
+	]
+	t.run()
+
+	t.id = "75b"
+	t.name = "mmp_2"
+	t.command = "sbs -b smoke_suite/test_resources/mmp/mmp2/group/bld.inf -c armv5 -f-"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/imageprocessorperf.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/imageprocessorperf.lib"		
+	]
+	t.addbuildtargets("smoke_suite/test_resources/mmp/mmp2/group/bld.inf", [
+		"imageprocessorperf_lib/armv5/udeb/ColorConverter.o",
+		"imageprocessorperf_lib/armv5/urel/ColorConverter.o",
+		"imageprocessorperf_lib/armv5/udeb/ImageProcessor.o",
+		"imageprocessorperf_lib/armv5/urel/ImageProcessor.o"
+		])
+	t.mustmatch = [
+		".*armcc.*-O0.*-g.*--cpu 6.*-Otime.*",
+		".*armcc.*-O3.*--cpu 6.*-Otime.*",
+		".*OPTION ARMASM has no effect.*",
+		".*OPTION_REPLACE ARMASM has no effect.*"
+	]
+	t.mustnotmatch = [
+		".*armcc.*--export_all_vtbl.*"
+	]
+	t.warnings = 2
+	t.run()
+	
+	t.id = "75c"
+	t.name = "mmp_3"
+	t.command = "sbs -b smoke_suite/test_resources/mmp/mmp3/bld.inf -c armv5 -c winscw -f-"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/tbm.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/tbm.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/tbm.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/tbm.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/t_oom.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/t_oom.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/t_oom.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/t_oom.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/dfpaeabi_vfpv2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/dfpaeabi_vfpv2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/dfpaeabi_vfpv2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/dfpaeabi_vfpv2.dll.map",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_oom.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_oom.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/t_oom.exe"
+		]
+	t.addbuildtargets("smoke_suite/test_resources/mmp/mmp3/bld.inf", [
+		"tbm_exe/armv5/udeb/tbm.o",
+		"tbm_exe/armv5/urel/tbm.o",
+		"t_oom_exe/armv5/udeb/t_oom.o",
+		"t_oom_exe/armv5/urel/t_oom.o",
+		"dfpaeabi_vfpv2_dll/armv5/udeb/dfpaeabi.o",
+		"dfpaeabi_vfpv2_dll/armv5/urel/dfpaeabi.o",
+		"t_oom_exe/winscw/udeb/t_oom.o",
+		"t_oom_exe/winscw/udeb/t_oom_UID_.o",
+		"t_oom_exe/winscw/urel/t_oom.o",
+		"t_oom_exe/winscw/urel/t_oom_UID_.o"
+		])
+	t.mustmatch = [
+		".*armlink.*udeb/eexe.lib.*-o.*armv5/udeb/t_oom.exe.sym.*euser.dso.*efsrv.dso.*estor.dso.*euser.dso.*",
+		".*armlink.*urel/eexe.lib.*-o.*armv5/urel/t_oom.exe.sym.*euser.dso.*efsrv.dso.*euser.dso.*",
+		".*mwldsym2.*udeb/eexe.lib.*euser.lib.*efsrv.lib.*estor.lib.*euser.lib.*-o.*winscw/udeb/t_oom.exe.*",
+		".*mwldsym2.*urel/eexe.lib.*euser.lib.*efsrv.lib.*euser.lib.*-o.*winscw/urel/t_oom.exe.*"
+		]
+	t.mustnotmatch = []
+	t.warnings = 0
+	t.run()
+	
+	t.id = "75d"
+	t.name = "mmp_4"
+	t.command = "sbs -b smoke_suite/test_resources/mmp/mmp4/group/bld.inf -c winscw"
+	t.targets = [			
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/d_newldd.ldd",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/d_newldd.ldd",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/d_lddturnaroundtimertest.ldd",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/d_lddturnaroundtimertest.ldd",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/d_lddturnaroundtimertest.ldd.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/t_sharedio3.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_sharedio3.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_sharedio3.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/t_rbuf.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_rbuf.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_rbuf.exe.map"
+		]
+	t.addbuildtargets("smoke_suite/test_resources/mmp/mmp4/group/bld.inf", [
+		"d_newldd_ldd/winscw/udeb/d_newldd.o",
+		"d_newldd_ldd/winscw/udeb/d_newldd.UID.CPP",
+		"d_newldd_ldd/winscw/udeb/d_newldd_UID_.o",
+		"d_newldd_ldd/winscw/urel/d_newldd.o",
+		"d_newldd_ldd/winscw/urel/d_newldd.UID.CPP",
+		"d_newldd_ldd/winscw/urel/d_newldd_UID_.o",
+		"d_newldd_ldd/winscw/udeb/t_new_classes.o",
+		"d_newldd_ldd/winscw/urel/t_new_classes.o",
+		"d_lddturnaroundtimertest_ldd/winscw/udeb/d_lddturnaroundtimertest.o",
+		"d_lddturnaroundtimertest_ldd/winscw/udeb/d_lddturnaroundtimertest.UID.CPP",
+		"d_lddturnaroundtimertest_ldd/winscw/udeb/d_lddturnaroundtimertest_UID_.o",
+		"d_lddturnaroundtimertest_ldd/winscw/urel/d_lddturnaroundtimertest.o",
+		"d_lddturnaroundtimertest_ldd/winscw/urel/d_lddturnaroundtimertest.UID.CPP",
+		"d_lddturnaroundtimertest_ldd/winscw/urel/d_lddturnaroundtimertest_UID_.o",
+		"t_sharedio3_exe/winscw/udeb/t_sharedio.o",
+		"t_sharedio3_exe/winscw/udeb/t_sharedio3.UID.CPP",
+		"t_sharedio3_exe/winscw/udeb/t_sharedio3_UID_.o",
+		"t_sharedio3_exe/winscw/urel/t_sharedio.o",
+		"t_sharedio3_exe/winscw/urel/t_sharedio3.UID.CPP",
+		"t_sharedio3_exe/winscw/urel/t_sharedio3_UID_.o",
+		"t_rbuf_exe/winscw/udeb/t_rbuf.o",
+		"t_rbuf_exe/winscw/udeb/t_rbuf.UID.CPP",
+		"t_rbuf_exe/winscw/udeb/t_rbuf_UID_.o",
+		"t_rbuf_exe/winscw/urel/t_rbuf.o",
+		"t_rbuf_exe/winscw/urel/t_rbuf.UID.CPP",
+		"t_rbuf_exe/winscw/urel/t_rbuf_UID_.o"
+		])
+	t.mustmatch = []
+	t.run()
+	
+	# Test keywords: version, firstlib, nocompresstarget
+	t.id = "75e"
+	t.name = "mmp_5"
+	t.command = "sbs -b smoke_suite/test_resources/mmp/mmp5/bld.inf -c armv5"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/fuzzv5.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/fuzzv5.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/fuzzlib.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/fuzzlib.lib"
+		]
+	t.addbuildtargets("smoke_suite/test_resources/mmp/mmp5/bld.inf", [
+		"fuzzv5_exe/armv5/udeb/fuzzv5.o",
+		"fuzzv5_exe/armv5/urel/fuzzv5.o",
+		"fuzzlib_lib/armv5/udeb/uc_exe_.cpp",
+		"fuzzlib_lib/armv5/urel/uc_exe_.cpp",
+		"fuzzlib_lib/armv5/udeb/uc_exe_.o",
+		"fuzzlib_lib/armv5/urel/uc_exe_.o",
+		])
+	t.run()
+
+	t.id = "75f"
+	t.name = "mmp_6"
+	t.command = "sbs -b smoke_suite/test_resources/mmp/mmp6_7/bld.inf -c armv5 -k -p diagsuppress.mmp -f-"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/diagsuppress_test.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/diagsuppress_test.dll",
+		]
+	t.mustmatch = [
+					"--diag_suppress 6780",
+					"--diag_suppress 6331"
+					]
+	t.run()
+	
+	t.id = "75g"
+	t.name = "mmp_7"
+	t.command = "sbs -b smoke_suite/test_resources/mmp/mmp6_7/bld.inf -c armv5 -k -p diagsuppress_noarmlibs.mmp -f-"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/urel/diagsuppress_noarmlibs_test.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/diagsuppress_noarmlibs_test.dll"
+		]
+	t.mustmatch = ["--diag_suppress 6331"]
+	t.mustnotmatch = ["--diag_suppress 6780"]
+	t.run()
+
+	# Test keyword: version
+	t.id = "75h"
+	t.name = "mmp_8"
+	t.command = "sbs -b smoke_suite/test_resources/mmp/mmp8/bld.inf"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_mmp_version.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test_mmp_version.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test_mmp_version.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test_mmp_version.exe"
+		]
+	t.mustmatch = []
+	t.mustnotmatch = []
+	t.warnings = 2
+	t.run()
+
+	# Test keyword: armfpu softvfp|vfpv2
+	# Both armv5 RVCT (9a+b) and GCCE (10) builds, as they differ in behaviour.
+	t.id = "75i"
+	t.name = "mmp_9a"
+	t.command = "sbs -b $(SBS_HOME)/test/smoke_suite/test_resources/mmp/mmp9_10/bld.inf -p armfpu_soft.mmp -c armv5_urel -f-"			
+	t.targets = []
+	t.mustmatch = ["--fpu softvfp", "--fpu=softvfp"]
+	t.mustnotmatch = ["--fpu vfpv2", "--fpu=vfpv2"]
+	t.warnings = 0
+	t.run()
+		
+	t.id = "75j"
+	t.name = "mmp_9b"
+	t.command = "sbs -b $(SBS_HOME)/test/smoke_suite/test_resources/mmp/mmp9_10/bld.inf -c armv5_urel REALLYCLEAN &&" \
+			+ " sbs -b $(SBS_HOME)/test/smoke_suite/test_resources/mmp/mmp9_10/bld.inf -p armfpu_vfpv2.mmp -c armv5_urel -f-"
+
+	t.mustmatch = ["--fpu vfpv2", "--fpu=vfpv2"]
+	t.mustnotmatch = ["--fpu softvfp", "--fpu=softvfp"]	
+	t.run()
+	
+	t.id = "75k"
+	t.name = "mmp_10"
+	t.command = "sbs -b $(SBS_HOME)/test/smoke_suite/test_resources/mmp/mmp9_10/bld.inf  -c armv5_urel_gcce4_3_2 REALLYCLEAN &&" \
+			+ " sbs -b $(SBS_HOME)/test/smoke_suite/test_resources/mmp/mmp9_10/bld.inf -c armv5_urel_gcce4_3_2 -f-"
+	t.countmatch = [
+		["-mfloat-abi=soft", 2],
+		["--fpu=softvfp", 2]
+	]
+	t.mustmatch = []
+	t.mustnotmatch = ["--fpu=vfpv2"]
+	t.run()
+	
+	# Test keywords: compresstarget, nocompresstarget, bytepaircompresstarget, inflatecompresstarget
+	t.id = "75l"
+	t.name = "mmp_11"
+	t.command = "sbs -b $(SBS_HOME)/test/smoke_suite/test_resources/mmp/mmp11/bld.inf -c armv5_urel -f-"
+	t.mustmatch_singleline = [
+		"elf2e32.*--output.*\/compress\.exe.*--compressionmethod=inflate",
+		"elf2e32.*--output.*\/nocompress\.exe.*--uncompressed",
+		"elf2e32.*--output.*\/bytepaircompress\.exe.*--compressionmethod=bytepair",
+		"elf2e32.*--output.*\/inflatecompress\.exe.*--compressionmethod=inflate",
+		"elf2e32.*--output.*\/combinedcompress\.exe.*--compressionmethod=bytepair",		
+		"COMPRESSTARGET keyword in .*combinedcompresstarget.mmp overrides earlier use of NOCOMPRESSTARGET",
+		"INFLATECOMPRESSTARGET keyword in .*combinedcompresstarget.mmp overrides earlier use of COMPRESSTARGET",
+		"BYTEPAIRCOMPRESSTARGET keyword in .*combinedcompresstarget.mmp overrides earlier use of INFLATECOMPRESSTARGET"
+	]
+	t.countmatch = []
+	t.mustnotmatch = []
+	t.warnings = 3
+	t.run()
+
+	# Test keyword: APPLY
+	t.id = "75m"
+	t.name = "apply"
+	t.command = "sbs -b smoke_suite/test_resources/mmp/apply/bld.inf -f- -k --configpath=test/config"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_mmp_apply.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test_mmp_apply.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test_mmp_apply.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test_mmp_apply.exe"
+		]
+	t.mustmatch_singleline = ["-DAPPLYTESTEXPORTEDVAR",
+	                          "-DAPPLYTESTAPPENDCDEFS"]
+	t.countmatch = [["<error.*APPLY unknown variant 'no_such_var'", 2]]
+	t.errors = 2 # no_such_var for armv5 and winscw
+	t.warnings = 0
+	t.returncode = 1
+	t.run()
+
+	# Test keyword: EPOCNESTEDEXCEPTIONS
+	t.id = "75n"
+	t.name = "epocnestedexceptions"
+	t.command = "sbs -b smoke_suite/test_resources/mmp/epocnestedexceptions/bld.inf -c armv5 -f-"
+
+	# When EPOCNESTEDEXCEPTIONS is specified in the MMP file, a different static
+	# run-time library should be used.
+	t.mustmatch_singleline = ["usrt_nx_\d_\d\.lib"]
+	t.mustnotmatch = ["usrt._.."]
+
+	t.countmatch = []
+
+	# The new static run-time libraries don't yet exist.
+	t.errors = 1
+	t.warnings = 2
+	t.targets = []
+
+	t.run()
+
+	t.id = "75"
+	t.name = "mmp_keywords"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/mmp_select.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,39 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "44"
+	t.name = "mmp_select"
+	t.description = "Test -p option"
+	t.command = "sbs -b smoke_suite/test_resources/basics/helloworld/Bld.inf " \
+			+ "-p hElLoWoRlD.mMp"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/HelloWorld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/HelloWorld.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/HelloWorld.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/HelloWorld.exe"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/basics/helloworld/Bld.inf', [
+		"helloworld_exe/armv5/udeb/HelloWorld.o",
+		"helloworld_exe/armv5/urel/HelloWorld.o",
+		"helloworld_exe/winscw/udeb/HelloWorld.o",
+		"helloworld_exe/winscw/urel/HelloWorld.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/named_extension.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,45 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+
+def run():	
+	t = AntiTargetSmokeTest()
+	t.id = "43"
+	t.name = "named_extension"
+	t.description = "Test -p option with named extensions - should clean then" \
+			+ " create success.txt"
+	t.command = "sbs -b smoke_suite/test_resources/basics/helloworld/Bld.inf " \
+			+ "REALLYCLEAN && sbs -b " \
+			+ "smoke_suite/test_resources/basics/helloworld/Bld.inf -p run_this"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/success.txt"
+		]
+	t.antitargets = [
+		"$(EPOCROOT)/epoc32/failure.txt",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/HelloWorld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/HelloWorld.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/HelloWorld.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/HelloWorld.exe"
+	]
+	t.addbuildantitargets("smoke_suite/test_resources/basics/helloworld/Bld.inf", [
+		"$(EPOCROOT)/epoc32/build/basics/helloworld/helloworld_exe/armv5/udeb/HelloWorld.o",
+		"$(EPOCROOT)/epoc32/build/basics/helloworld/helloworld_exe/armv5/urel/HelloWorld.o",
+		"$(EPOCROOT)/epoc32/build/basics/helloworld/helloworld_exe/winscw/udeb/HelloWorld.o",
+		"$(EPOCROOT)/epoc32/build/basics/helloworld/helloworld_exe/winscw/urel/HelloWorld.o"
+		])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/nobuild.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,72 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+	t = AntiTargetSmokeTest()
+	t.id = "76"
+	t.name = "nobuild"
+
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf CLEAN " + \
+			"&& sbs -b smoke_suite/test_resources/simple/bld.inf -n -m ${SBSMAKEFILE} -f ${SBSLOGFILE} " + \
+			"&& grep -i 'No build performed' ${SBSLOGFILE}"
+	
+	t.targets = []
+	t.addbuildtargets('smoke_suite/test_resources/simple/bld.inf', [])
+	t.antitargets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test.exe"
+	]
+	t.addbuildantitargets('smoke_suite/test_resources/simple/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o",
+		"test_/armv5/udeb/test3.o",
+		"test_/armv5/udeb/test4.o",
+		"test_/armv5/udeb/test5.o",
+		"test_/armv5/udeb/test1.o",
+		"test_/armv5/udeb/test6.o",
+		"test_/armv5/udeb/test2.o",
+		"test_/armv5/urel/test3.o",
+		"test_/armv5/urel/test4.o",
+		"test_/armv5/urel/test5.o",
+		"test_/armv5/urel/test1.o",
+		"test_/armv5/urel/test6.o",
+		"test_/armv5/urel/test2.o",
+		"test_/winscw/udeb/test.o",
+		"test_/winscw/urel/test.o",
+		"test_/winscw/udeb/test3.o",
+		"test_/winscw/udeb/test4.o",
+		"test_/winscw/udeb/test5.o",
+		"test_/winscw/udeb/test1.o",
+		"test_/winscw/udeb/test6.o",
+		"test_/winscw/udeb/test2.o",
+		"test_/winscw/urel/test3.o",
+		"test_/winscw/urel/test4.o",
+		"test_/winscw/urel/test5.o",
+		"test_/winscw/urel/test1.o",
+		"test_/winscw/urel/test6.o",
+		"test_/winscw/urel/test2.o"
+		])
+	t.mustmatch = [
+		".*No build performed.*"
+	]
+
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/non_ascii.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,56 @@
+# -*- coding: iso-8859-1 -*- This line *must* be on the first line of the file!
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+
+from raptor_tests import SmokeTest
+
+def run():
+
+	t = SmokeTest()
+
+	# Should have returncode of 1 and output 1 error, but not cause a traceback
+	t.returncode = 1
+	t.errors = 1
+	t.mustmatch = ["sbs: error: Non-ASCII character in argument or command file"]
+
+	result = SmokeTest.PASS
+
+	t.id = "0091a"
+	t.name = "non_ascii_argument"
+
+	# The dash in "-c" is an en dash, not a normal ASCII dash.
+	t.command = "sbs -b smoke_suite/test_resources/simple_dll/bld.inf –c armv5"
+
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	t.id = "0091b"
+	t.name = "non_ascii_commandfile"
+
+	t.command = "sbs --command=smoke_suite/test_resources/non_ascii/cmd.txt"
+
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	t.id = "91"
+	t.name = "non_ascii"
+	t.result = result
+	t.print_result()
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/openenvironment.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,242 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest, getsymbianversion
+
+def run():
+	t = SmokeTest()
+	t.id = "39"
+	t.name = "openenvironment"
+	t.description = """Test STDEXE, STDLIB and STDDLL creation; Test open environment project linking against a symbian environment
+		library; Test symbian environment project linking against an open environment library"""
+	t.usebash = True
+	t.command = "sbs -k -b smoke_suite/test_resources/oe/group/bld.inf -c armv5 -c winscw " + \
+		"-m ${SBSMAKEFILE} -f ${SBSLOGFILE}; grep -E \"(armlink|checklib|mwldsym2)\" ${SBSLOGFILE}"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/urel/t_oedll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/symbian_test.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/t_oeexe.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/t_oelib.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/t_oeexe.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/t_oeexe.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/t_oedll.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/t_oedll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/symbian_test.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/t_oeexe.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/t_oelib.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/t_oeexe.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/t_oeexe.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/t_oedll.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/t_oedll.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/t_oedll{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/symbian_test.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_oedll.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_oeexe.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_oelib.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_oeexe.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/t_oedll.dll.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/symbian_test.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/t_oedll.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/t_oedll.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/t_oelib.lib"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/oe/group/bld.inf', [
+		"t_oedll_dll/armv5/urel/t_oedll{000a0000}.dso",
+		"t_oedll_dll/armv5/urel/t_oedll_urel_objects.via",
+		"t_oedll_dll/armv5/urel/t_oedll.o",
+		"t_oedll_dll/armv5/urel/t_oedll.o.d",
+                # either prep file can exist - luck determines which
+                 ['t_oedll_dll/armv5/urel/t_oedll.prep',
+                  't_oedll_dll/armv5/udeb/t_oedll.prep'],
+		"t_oedll_dll/armv5/urel/t_oedll{000a0000}.def",
+		"t_oedll_dll/armv5/udeb/t_oedll{000a0000}.dso",
+		"t_oedll_dll/armv5/udeb/t_oedll_udeb_objects.via",
+		"t_oedll_dll/armv5/udeb/t_oedll.o",
+		"t_oedll_dll/armv5/udeb/t_oedll.o.d",
+		"t_oedll_dll/armv5/udeb/t_oedll{000a0000}.def",
+		"symbian_test_lib/armv5/urel/symbian_test_urel_objects.via",
+		"symbian_test_lib/armv5/urel/symbian_lib.o.d",
+		"symbian_test_lib/armv5/urel/symbian_lib.o",
+		"symbian_test_lib/armv5/udeb/symbian_test_udeb_objects.via",
+		"symbian_test_lib/armv5/udeb/symbian_lib.o.d",
+		"symbian_test_lib/armv5/udeb/symbian_lib.o",
+		"wrong_newlib_test_oeexe_exe/armv5/urel/wrong_newlib_test_oeexe_urel_objects.via",
+		"wrong_newlib_test_oeexe_exe/armv5/urel/t_oeexe.o",
+		"wrong_newlib_test_oeexe_exe/armv5/urel/t_oeexe.o.d",
+		"wrong_newlib_test_oeexe_exe/armv5/udeb/t_oeexe.o",
+		"wrong_newlib_test_oeexe_exe/armv5/udeb/wrong_newlib_test_oeexe_udeb_objects.via",
+		"wrong_newlib_test_oeexe_exe/armv5/udeb/t_oeexe.o.d",
+		"wrong_newlib_seexe_exe/armv5/urel/wrong_newlib_seexe_urel_objects.via",
+		"wrong_newlib_seexe_exe/armv5/urel/wrong_newlib_symbian.o",
+		"wrong_newlib_seexe_exe/armv5/urel/wrong_newlib_symbian.o.d",
+		"wrong_newlib_seexe_exe/armv5/udeb/wrong_newlib_seexe_udeb_objects.via",
+		"wrong_newlib_seexe_exe/armv5/udeb/wrong_newlib_symbian.o",
+		"wrong_newlib_seexe_exe/armv5/udeb/wrong_newlib_symbian.o.d",
+		"t_oeexe_exe/armv5/urel/t_oeexe_urel_objects.via",
+		"t_oeexe_exe/armv5/urel/t_oeexe.o",
+		"t_oeexe_exe/armv5/urel/t_oeexe.o.d",
+		"t_oeexe_exe/armv5/udeb/t_oeexe.o",
+		"t_oeexe_exe/armv5/udeb/t_oeexe.o.d",
+		"t_oeexe_exe/armv5/udeb/t_oeexe_udeb_objects.via",
+		"t_oelib_lib/armv5/urel/t_oelib_urel_objects.via",
+		"t_oelib_lib/armv5/urel/t_oelib.o",
+		"t_oelib_lib/armv5/urel/t_oelib.o.d",
+		"t_oelib_lib/armv5/udeb/t_oelib.o",
+		"t_oelib_lib/armv5/udeb/t_oelib_udeb_objects.via",
+		"t_oelib_lib/armv5/udeb/t_oelib.o.d",
+		"t_oedll_dll/winscw/urel/t_oedll.dep",
+		"t_oedll_dll/winscw/urel/t_oedll.lib",
+		"t_oedll_dll/winscw/urel/t_oedll_SYM_.cpp",
+		"t_oedll_dll/winscw/urel/t_oedll.dll",
+		"t_oedll_dll/winscw/urel/t_oedll_UID_.o",
+		"t_oedll_dll/winscw/urel/t_oedll_SYM_.o",
+		"t_oedll_dll/winscw/urel/t_oedll.o",
+		"t_oedll_dll/winscw/urel/t_oedll_UID_.o.d",
+		"t_oedll_dll/winscw/urel/t_oedll.o.d",
+		"t_oedll_dll/winscw/urel/t_oedll_UID_.dep",
+		"t_oedll_dll/winscw/urel/t_oedll.sym",
+		"t_oedll_dll/winscw/urel/t_oedll.UID.CPP",
+		"t_oedll_dll/winscw/urel/t_oedll_SYM_.o.d",
+		"t_oedll_dll/winscw/urel/t_oedll_SYM_.dep",
+                # The prep.def file can be in urel or udeb
+                ['t_oedll_dll/winscw/urel/t_oedll.prep.def',
+                 't_oedll_dll/winscw/udeb/t_oedll.prep.def'],
+		"t_oedll_dll/winscw/urel/t_oedll.def",
+		"t_oedll_dll/winscw/urel/t_oedll.inf",
+		"t_oedll_dll/winscw/udeb/t_oedll.dep",
+		"t_oedll_dll/winscw/udeb/t_oedll.lib",
+		"t_oedll_dll/winscw/udeb/t_oedll_SYM_.cpp",
+		"t_oedll_dll/winscw/udeb/t_oedll.dll",
+		"t_oedll_dll/winscw/udeb/t_oedll_UID_.o",
+		"t_oedll_dll/winscw/udeb/t_oedll_SYM_.o",
+		"t_oedll_dll/winscw/udeb/t_oedll.o",
+		"t_oedll_dll/winscw/udeb/t_oedll_UID_.o.d",
+		"t_oedll_dll/winscw/udeb/t_oedll.o.d",
+		"t_oedll_dll/winscw/udeb/t_oedll_UID_.dep",
+		"t_oedll_dll/winscw/udeb/t_oedll.sym",
+		"t_oedll_dll/winscw/udeb/t_oedll.UID.CPP",
+		"t_oedll_dll/winscw/udeb/t_oedll_SYM_.o.d",
+		"t_oedll_dll/winscw/udeb/t_oedll_SYM_.dep",
+		"t_oedll_dll/winscw/udeb/t_oedll.def",
+		"t_oedll_dll/winscw/udeb/t_oedll.inf",
+		"symbian_test_lib/winscw/urel/symbian_lib.dep",
+		"symbian_test_lib/winscw/urel/symbian_lib.o.d",
+		"symbian_test_lib/winscw/urel/symbian_lib.o",
+		"symbian_test_lib/winscw/udeb/symbian_lib.dep",
+		"symbian_test_lib/winscw/udeb/symbian_lib.o.d",
+		"symbian_test_lib/winscw/udeb/symbian_lib.o",
+		"wrong_newlib_test_oeexe_exe/winscw/urel/wrong_newlib_test_oeexe_UID_.dep",
+		"wrong_newlib_test_oeexe_exe/winscw/urel/wrong_newlib_test_oeexe_UID_.o.d",
+		"wrong_newlib_test_oeexe_exe/winscw/urel/t_oeexe_wins.dep",
+		"wrong_newlib_test_oeexe_exe/winscw/urel/t_oeexe_wins.o",
+		"wrong_newlib_test_oeexe_exe/winscw/urel/wrong_newlib_test_oeexe.UID.CPP",
+		"wrong_newlib_test_oeexe_exe/winscw/urel/wrong_newlib_test_oeexe_UID_.o",
+		"wrong_newlib_test_oeexe_exe/winscw/urel/t_oeexe_wins.o.d",
+		"wrong_newlib_test_oeexe_exe/winscw/udeb/wrong_newlib_test_oeexe_UID_.dep",
+		"wrong_newlib_test_oeexe_exe/winscw/udeb/wrong_newlib_test_oeexe_UID_.o.d",
+		"wrong_newlib_test_oeexe_exe/winscw/udeb/t_oeexe_wins.dep",
+		"wrong_newlib_test_oeexe_exe/winscw/udeb/t_oeexe_wins.o",
+		"wrong_newlib_test_oeexe_exe/winscw/udeb/wrong_newlib_test_oeexe.UID.CPP",
+		"wrong_newlib_test_oeexe_exe/winscw/udeb/wrong_newlib_test_oeexe_UID_.o",
+		"wrong_newlib_test_oeexe_exe/winscw/udeb/t_oeexe_wins.o.d",
+		"wrong_newlib_seexe_exe/winscw/urel/wrong_newlib_seexe_UID_.dep",
+		"wrong_newlib_seexe_exe/winscw/urel/wrong_newlib_seexe_UID_.o",
+		"wrong_newlib_seexe_exe/winscw/urel/wrong_newlib_symbian.dep",
+		"wrong_newlib_seexe_exe/winscw/urel/wrong_newlib_symbian.o",
+		"wrong_newlib_seexe_exe/winscw/urel/wrong_newlib_symbian.o.d",
+		"wrong_newlib_seexe_exe/winscw/urel/wrong_newlib_seexe.UID.CPP",
+		"wrong_newlib_seexe_exe/winscw/urel/wrong_newlib_seexe_UID_.o.d",
+		"wrong_newlib_seexe_exe/winscw/udeb/wrong_newlib_seexe_UID_.dep",
+		"wrong_newlib_seexe_exe/winscw/udeb/wrong_newlib_seexe_UID_.o",
+		"wrong_newlib_seexe_exe/winscw/udeb/wrong_newlib_symbian.dep",
+		"wrong_newlib_seexe_exe/winscw/udeb/wrong_newlib_symbian.o",
+		"wrong_newlib_seexe_exe/winscw/udeb/wrong_newlib_symbian.o.d",
+		"wrong_newlib_seexe_exe/winscw/udeb/wrong_newlib_seexe.UID.CPP",
+		"wrong_newlib_seexe_exe/winscw/udeb/wrong_newlib_seexe_UID_.o.d",
+		"t_oeexe_exe/winscw/urel/t_oeexe_UID_.o",
+		"t_oeexe_exe/winscw/urel/t_oeexe_UID_.dep",
+		"t_oeexe_exe/winscw/urel/t_oeexe_wins.dep",
+		"t_oeexe_exe/winscw/urel/t_oeexe_wins.o",
+		"t_oeexe_exe/winscw/urel/t_oeexe_UID_.o.d",
+		"t_oeexe_exe/winscw/urel/t_oeexe.UID.CPP",
+		"t_oeexe_exe/winscw/urel/t_oeexe_wins.o.d",
+		"t_oeexe_exe/winscw/udeb/t_oeexe_UID_.o",
+		"t_oeexe_exe/winscw/udeb/t_oeexe_UID_.dep",
+		"t_oeexe_exe/winscw/udeb/t_oeexe_wins.dep",
+		"t_oeexe_exe/winscw/udeb/t_oeexe_wins.o",
+		"t_oeexe_exe/winscw/udeb/t_oeexe_UID_.o.d",
+		"t_oeexe_exe/winscw/udeb/t_oeexe.UID.CPP",
+		"t_oeexe_exe/winscw/udeb/t_oeexe_wins.o.d",
+		"t_oelib_lib/winscw/urel/t_oelib.o",
+		"t_oelib_lib/winscw/urel/t_oelib.o.d",
+		"t_oelib_lib/winscw/urel/t_oelib.dep",
+		"t_oelib_lib/winscw/udeb/t_oelib.o",
+		"t_oelib_lib/winscw/udeb/t_oelib.o.d",
+		"t_oelib_lib/winscw/udeb/t_oelib.dep"
+	])
+	
+	# On 9.4 the open environment checks for
+	# mixed symbianc++ and stdc++ new/delete won't fail
+	if getsymbianversion() != "9.4":
+		t.mustmatch = [
+			'.*checklib: error: library .*epoc32.release.armv5.urel.symbian_test.lib is incompatible with standard.*',
+			'.*checklib: error: library .*epoc32.release.armv5.urel.t_oelib.lib is incompatible with Symbian.*',
+			'.*checklib: error: library .*epoc32.release.armv5.udeb.symbian_test.lib is incompatible with standard.*',
+			'.*checklib: error: library .*epoc32.release.armv5.udeb.t_oelib.lib is incompatible with Symbian.*',
+			'.*checklib: error: library .*epoc32.release.winscw.urel.symbian_test.lib is incompatible with standard.*',
+			'.*checklib: error: library .*epoc32.release.winscw.urel.t_oelib.lib is incompatible with Symbian.*',
+			'.*checklib: error: library .*epoc32.release.winscw.udeb.t_oelib.lib is incompatible with Symbian.*',
+			'.*checklib: error: library .*epoc32.release.winscw.udeb.symbian_test.lib is incompatible with standard.*',
+			'.*armlink.*oe_exe_without_stdcpp.*scppnwdl.dso.*',
+			'.*armlink.*symbian_exe_with_stdcpp.*stdnew.dso.*',
+			'.*armlink.*oedll.*stdnew.dso.*',
+			'.*armlink.*oeexe.*stdnew.dso.*',
+			'.*armlink.*symbian_newlib.exe.*scppnwdl.dso.*'
+		]
+		t.mustnotmatch = [
+			'.*armlink.*oe_exe_without_stdcpp.*stdnew.dso.*',
+			'.*armlink.*symbian_exe_with_stdcpp.*scppnwdl.dso.*',
+			'.*armlink.*oedll.*scppnwdl.dso.*',
+			'.*armlink.*oeexe.*scppnwdl.dso.*',
+			'.*armlink.*symbian_newlib.exe.*stdnew.dso.*',
+			'.*mwldsym2.*scppnwdl.lib.*symbian_exe_with_stdcpp.exe.*'
+		]
+	else: 
+		# these files will build for 9.4
+		t.targets.extend([
+			"$(EPOCROOT)/epoc32/release/winscw/urel/wrong_newlib_test_oeexe.exe",
+			"$(EPOCROOT)/epoc32/release/winscw/urel/wrong_newlib_test_oeexe.exe.map",
+			"$(EPOCROOT)/epoc32/release/winscw/udeb/wrong_newlib_test_oeexe.exe",
+			"$(EPOCROOT)/epoc32/release/winscw/udeb/wrong_newlib_test_oeexe.exe.map",
+			"$(EPOCROOT)/epoc32/release/winscw/urel/wrong_newlib_test_seexe.exe",
+			"$(EPOCROOT)/epoc32/release/winscw/urel/wrong_newlib_test_seexe.exe.map",
+			"$(EPOCROOT)/epoc32/release/winscw/udeb/wrong_newlib_test_seexe.exe",
+			"$(EPOCROOT)/epoc32/release/winscw/udeb/wrong_newlib_test_seexe.exe.map",
+			"$(EPOCROOT)/epoc32/release/armv5/urel/wrong_newlib_test_oeexe.exe",
+			"$(EPOCROOT)/epoc32/release/armv5/udeb/wrong_newlib_test_oeexe.exe",
+			"$(EPOCROOT)/epoc32/release/armv5/urel/wrong_newlib_test_seexe.exe",
+			"$(EPOCROOT)/epoc32/release/armv5/udeb/wrong_newlib_test_seexe.exe",
+			"$(EPOCROOT)/epoc32/release/armv5/urel/wrong_newlib_test_oeexe.exe.map",
+			"$(EPOCROOT)/epoc32/release/armv5/udeb/wrong_newlib_test_oeexe.exe.map",
+			"$(EPOCROOT)/epoc32/release/armv5/urel/wrong_newlib_test_seexe.exe.map",
+			"$(EPOCROOT)/epoc32/release/armv5/udeb/wrong_newlib_test_seexe.exe.map",
+			"$(EPOCROOT)/epoc32/release/armv5/urel/wrong_newlib_test_oeexe.exe.sym",
+			"$(EPOCROOT)/epoc32/release/armv5/udeb/wrong_newlib_test_oeexe.exe.sym",
+			"$(EPOCROOT)/epoc32/release/armv5/urel/wrong_newlib_test_seexe.exe.sym",
+			"$(EPOCROOT)/epoc32/release/armv5/udeb/wrong_newlib_test_seexe.exe.sym"
+		])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/output_control.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,52 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+from os import environ
+
+from raptor_tests import SmokeTest
+
+def run():
+
+	commonbuildfiles = [ 
+		"createstaticdll_dll/armv5/urel/CreateStaticDLL.o",
+		"createstaticdll_dll/armv5/urel/CreateStaticDLL.o.d",
+		"createstaticdll_dll/winscw/urel/CreateStaticDLL.o",
+		"createstaticdll_dll/winscw/urel/CreateStaticDLL.o.d",
+		"createstaticdll_dll/winscw/urel/createstaticdll.UID.CPP",
+		"createstaticdll_dll/winscw/urel/createstaticdll_UID_.o.d"
+	]
+	
+	t = SmokeTest()
+	t.id = "82"
+	t.name = "output_control"
+	t.description = "Test building intermediate files into a location other than $EPOCROOT/epoc32/build. Use SBS_BUILD_DIR. environment variable."
+	t.sbs_build_dir = environ['EPOCROOT'].replace("\\","/").rstrip("/") + '/anotherbuilddir'
+	t.environ['SBS_BUILD_DIR'] = t.sbs_build_dir
+	t.command = "sbs -b smoke_suite/test_resources/simple_dll/bld.inf -c armv5_urel -c winscw_urel"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/createstaticdll{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/createstaticdll.dll",
+                "$(EPOCROOT)/epoc32/release/winscw/urel/createstaticdll.dll",
+                "$(EPOCROOT)/epoc32/release/winscw/urel/createstaticdll.dll.map"
+								
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_dll/bld.inf', commonbuildfiles) 
+	t.run()
+	
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/paging.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,131 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+
+	t = SmokeTest()
+	t.usebash = True
+
+	cmd_prefix = "sbs -b smoke_suite/test_resources/simple_paging/bld.inf -c armv5_urel "
+	cmd_suffix = " -m ${SBSMAKEFILE} -f ${SBSLOGFILE} && cat ${SBSLOGFILE} "
+
+	t.id = "0093a"
+	t.name = "paging_default"
+	t.command = cmd_prefix + "-p default.mmp" + cmd_suffix
+	t.mustmatch_singleline = [
+			"--codepaging=default", 
+			"--datapaging=default"
+			]
+	t.run()
+
+	t.id = "0093b"
+	t.name = "paging_unpaged"
+	t.command = cmd_prefix + "-p unpaged.mmp" + cmd_suffix
+	t.mustmatch_singleline = [
+			"--codepaging=unpaged", 
+			"--datapaging=unpaged"
+			]
+	t.run()
+
+	t.id = "0093c"
+	t.name = "paging_paged"
+	t.command = cmd_prefix + "-p paged.mmp" + cmd_suffix
+	# Either pagedcode or pageddata can imply bytepaircompresstarget 
+	t.mustmatch_singleline = [
+			"--codepaging=paged", 
+			"--datapaging=default",
+			"--compressionmethod=bytepair"
+			]
+	t.run()
+
+	t.id = "0093d"
+	t.name = "paging_unpagedcode_pageddata"
+	t.command = cmd_prefix + "-p unpagedcode_pageddata.mmp" + cmd_suffix
+	t.mustmatch_singleline = [
+			"--codepaging=unpaged", 
+			"--datapaging=paged",
+			"--compressionmethod=bytepair"
+			]
+	t.run()
+
+	t.id = "0093e"
+	t.name = "paging_pagedcode_unpageddata"
+	t.command = cmd_prefix + "-p pagedcode_unpageddata.mmp" + cmd_suffix
+	t.mustmatch_singleline = [
+			"--codepaging=paged", 
+			"--datapaging=unpaged",
+			"--compressionmethod=bytepair"
+			]
+	t.run()
+
+	t.id = "0093f"
+	t.name = "paging_pagedcode_defaultdata"
+	t.command = cmd_prefix + "-p pagedcode_defaultdata.mmp" + cmd_suffix
+	t.mustmatch_singleline = [
+			"--codepaging=paged", 
+			"--datapaging=default",
+			"--compressionmethod=bytepair"
+			]
+	t.run()
+
+	t.id = "0093g"
+	t.name = "paging_paged_unpaged_no_bytepair"
+	t.command = cmd_prefix + "-p paged_unpaged.mmp" + cmd_suffix
+	t.mustmatch_singleline = [
+			"--codepaging=unpaged", 
+			"--datapaging=unpaged"
+			]
+	t.mustnotmatch = [
+			"--compressionmethod=bytepair"	
+			]
+	t.warnings = 2 # 1 in the log and 1 on screen
+	t.run()
+
+	# test the pre-WDP paging options --paged and --unpaged
+	# there is an os_properties.xml file in test/config that
+	# turns POSTLINKER_SUPPORTS_WDP off
+	
+	t.id = "0093g"
+	t.name = "paging_paged_no_wdp"
+	t.command = cmd_prefix + "-p paged.mmp --configpath=test/config" + cmd_suffix
+	t.mustmatch_singleline = [
+			"--paged", 
+			"--compressionmethod=bytepair"
+			]
+	t.mustnotmatch = []
+	t.warnings = 0
+	t.targets = [ "$(EPOCROOT)/epoc32/release/armv5/urel/paged.dll" ]
+	t.run()
+	
+	t.id = "0093h"
+	t.name = "paging_unpaged_no_wdp"
+	t.command = cmd_prefix + "-p unpaged.mmp --configpath=test/config" + cmd_suffix
+	t.mustmatch_singleline = [
+			"--unpaged", 
+			]
+	t.mustnotmatch = [
+			"--compressionmethod=bytepair"	
+			]
+	t.targets = [ "$(EPOCROOT)/epoc32/release/armv5/urel/unpaged.dll" ]
+	t.run()
+
+	t.id = "0093"
+	t.name = "paging"
+	t.print_result()
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/parallel_parsing.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,65 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.usebash = True
+	result = SmokeTest.PASS
+
+	description = """This test covers parallel parsing."""
+	command = "cd $(SBS_HOME)/test/smoke_suite/test_resources/pp/ && sbs --command=$(SBS_HOME)/test/smoke_suite/test_resources/pp/ppbldinf_commandfile -c armv5 -c winscw --pp=on --noexport -m ${SBSMAKEFILE} -f - | grep recipe "
+
+	mmpcount = 10 # how many mmps in this parallel parsing test
+
+	
+	target_templ = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test_pp#.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test_pp#.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_pp#.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_pp#.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test_pp#.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_pp#.exe.sym"
+	]
+
+	targets = []
+
+	# Build up target list for 10 similar executables
+	for num in range(1,mmpcount):
+		for atarget in target_templ:
+			targets.append(atarget.replace('pp#','pp'+ str(num)))
+
+	mustmatch = [
+		".*<recipe .*name='makefile_generation.*",
+	]
+	mustnotmatch = [
+		".*<recipe .*name='makefile_generation_export.*",
+		".*<error[^><]*>.*"
+	]
+
+	warnings = 0
+		
+	t.id = "104"
+	t.name = "parallel_parsing"
+	t.description = description
+	t.command = command 
+	t.targets = targets
+	t.mustmatch = mustmatch
+	t.mustnotmatch = mustnotmatch
+	t.warnings = warnings
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/pdll_arm.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,109 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+	t = AntiTargetSmokeTest()
+	t.usebash = True
+	
+	command = "sbs -b smoke_suite/test_resources/simple_dll/pbld.inf -c %s -f -"
+	maintargets = [
+		"$(EPOCROOT)/epoc32/release/%s/udeb/createstaticpdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/%s/urel/createstaticpdll.dll.sym",
+		"$(EPOCROOT)/epoc32/release/%s/udeb/createstaticpdll.dll",
+		"$(EPOCROOT)/epoc32/release/%s/urel/createstaticpdll.dll"
+		]
+	armv5targets = [
+		"$(EPOCROOT)/epoc32/release/%s/lib/createstaticpdll.dso",
+		"$(EPOCROOT)/epoc32/release/%s/lib/createstaticpdll{000a0000}.dso"
+		]
+	buildtargets =  [
+		"createstaticpdll_dll/%s/udeb/CreateStaticDLL.o",
+		"createstaticpdll_dll/%s/urel/CreateStaticDLL.o"
+		]
+	mustmatch = [
+		r".*\busrt\d_\d\.lib\b.*",
+		r".*\bscppnwdl\.dso\b.*"
+		]
+	mustnotmatch = [
+		".*ksrt.*"
+		]
+	
+	t.id = "0109a"
+	t.name = "pdll_armv5_rvct"
+	t.command = command % "armv5"
+	t.targets = map(lambda p: p % "armv5", maintargets + armv5targets)[:]	# Shallow, as we optionally extend later and then re-use
+	t.addbuildtargets('smoke_suite/test_resources/simple_dll/pbld.inf', map(lambda p: p % "armv5", buildtargets))
+	t.mustmatch = mustmatch
+	t.mustnotmatch = mustnotmatch
+	t.run()
+		
+	t.id = "0109b"
+	t.name = "pdll_armv5_clean"
+	t.command = command % "armv5" + " clean"
+	t.targets = []
+	t.mustmatch = []
+	t.mustnotmatch = []
+	t.run()
+	
+	t.id = "0109c"
+	t.name = "pdll_armv5_gcce"
+	t.command = command % "gcce_armv5"
+	t.targets = map(lambda p: p % "armv5", maintargets + armv5targets)
+	t.addbuildtargets('smoke_suite/test_resources/simple_dll/pbld.inf', map(lambda p: p % "armv5", buildtargets))
+	t.mustmatch = mustmatch
+	t.mustnotmatch = mustnotmatch
+	t.run()
+
+	t.id = "0109d"
+	t.name = "pdll_armv5_gcce_clean"
+	t.command = command % "gcce_armv5" + " clean"
+	t.targets = []
+	t.mustmatch = []
+	t.mustnotmatch = []
+	t.run()
+
+	t.id = "0109e"
+	t.name = "pdll_armv7_rvct"
+	t.command = command % "armv7"
+	t.targets = map(lambda p: p % "armv7", maintargets)[:]	# Shallow, as we optionally extend later and then re-use
+	t.addbuildtargets('smoke_suite/test_resources/simple_dll/pbld.inf', map(lambda p: p % "armv7", buildtargets))
+	t.mustmatch = mustmatch
+	t.mustnotmatch = mustnotmatch
+	t.run()
+	
+	t.id = "0109f"
+	t.name = "pdll_armv7_clean"
+	t.command = command % "armv7" + " clean"
+	t.targets = []
+	t.mustmatch = []
+	t.mustnotmatch = []
+	t.run()
+	
+	t.id = "0109g"
+	t.name = "pdll_armv7_gcce"
+	t.command = command % "arm.v7.udeb.gcce4_3_2 -c arm.v7.urel.gcce4_3_2"
+	t.targets = map(lambda p: p % "armv7", maintargets)
+	t.addbuildtargets('smoke_suite/test_resources/simple_dll/pbld.inf', map(lambda p: p % "armv7", buildtargets))
+	t.mustmatch = mustmatch
+	t.mustnotmatch = mustnotmatch
+	t.run()
+
+	t.id = "109"
+	t.name = "pdll_arm"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/pdll_winscw.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,39 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "105"
+	t.name = "pdll_winscw"
+	t.command = "sbs -b smoke_suite/test_resources/simple_dll/pbld.inf -c winscw"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/createstaticpdll.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/createstaticpdll.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/createstaticpdll.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/createstaticpdll.dll.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_dll/pbld.inf', [
+		"createstaticpdll_dll/winscw/udeb/CreateStaticDLL.o",
+		"createstaticpdll_dll/winscw/udeb/createstaticpdll.UID.CPP",
+		"createstaticpdll_dll/winscw/udeb/createstaticpdll_UID_.o",
+		"createstaticpdll_dll/winscw/urel/CreateStaticDLL.o",
+		"createstaticpdll_dll/winscw/urel/createstaticpdll.UID.CPP",
+		"createstaticpdll_dll/winscw/urel/createstaticpdll_UID_.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/plugin_armv5_winscw_freeze.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,67 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "90"
+	t.name = "plugin_armv5_winscw_freeze"
+	t.description = """Builds several ECOM plugins, with and without explicit DEFFILE statements, confirming
+		the correct FREEZE behaviour in each case.  The correct behaviour for a PLUGIN/PLUGIN3 is
+		indicative of all TARGETTYPEs where the build system defines known exports: FREEZE should do nothing
+		unless an explicit DEFFILE statement is present in the .mmp file.
+		Also confirms default UID2 settings for PLUGIN3 TARGETTYPEs and default resource generation locations
+		for both PLUGIN and PLUGIN3."""
+	t.usebash = True
+	
+	t.command = """
+		sbs -b smoke_suite/test_resources/simple_plugin/bld.inf -c armv5_urel -c winscw_urel CLEAN > /dev/null &&
+		sbs -f- -b smoke_suite/test_resources/simple_plugin/bld.inf -c armv5_urel -c winscw_urel &&
+		sbs -b smoke_suite/test_resources/simple_plugin/bld.inf -c armv5_urel -c winscw_urel FREEZE -m ${SBSMAKEFILE} -f ${SBSLOGFILE}"""
+
+	t.targets = [
+		"smoke_suite/test_resources/simple_plugin/bwins/plugin2u.def",
+		"smoke_suite/test_resources/simple_plugin/eabi/plugin2u.def",
+		"$(EPOCROOT)/epoc32/data/z/resource/plugins/plugin.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/plugins/plugin.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/plugins/plugin.rsc",
+		"$(EPOCROOT)/epoc32/data/z/resource/plugins/plugin3.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/plugins/plugin3.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/plugins/plugin3.rsc"	
+		]
+	
+	t.antitargets = [
+		"smoke_suite/test_resources/simple_plugin/bwins/pluginu.def",
+		"smoke_suite/test_resources/simple_plugin/eabi/pluginu.def"		
+		]
+	
+	t.mustmatch = [
+		".*EFREEZE: Appending 3 New Export\(s\) to .*/test/smoke_suite/test_resources/simple_plugin/eabi/plugin2u.def.*",
+		".*EFREEZE: Appending 1 New Export\(s\) to .*/test/smoke_suite/test_resources/simple_plugin/bwins/plugin2u.def.*",
+		".*__EMULATOR_IMAGE_HEADER2\(0x10000079,0x10009D93,0x00000000.*",
+		".*elf2e32.*--targettype=PLUGIN3.*--output=.*plugin3.dll.*--uid2=0x10009D93.*"
+		
+		]
+
+	t.mustnotmatch = [
+		".*EFREEZE: .*/test/smoke_suite/test_resources/simple_plugin/eabi/pluginu.def.*",
+		".*EFREEZE: .*/test/smoke_suite/test_resources/simple_plugin/bwins/pluginu.def.*"
+		]
+	
+	t.warnings = 4	
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/pre_export.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,41 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "32"
+	t.name = "pre_export"
+	t.command = "sbs -b smoke_suite/test_resources/pre-export/bld.inf -c " + \
+			"armv5 -k"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/include/my.mmh",
+		"$(EPOCROOT)/epoc32/include/second.mmh",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/petest.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/petest.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/petest.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/petest.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/pre-export/bld.inf', [
+		"petest_/armv5/udeb/test.o",
+		"petest_/armv5/urel/test.o"
+	])
+	# we expect these errors because there are 2 MMP files deliberately missing
+	t.errors = 4
+	t.returncode = 1
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/qt_helloworld.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,55 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# This test case requires install of Qt. 
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+
+	t.description = "Ensure Raptor builds Qt applications successfully"	
+
+	t.id = "0110"
+	t.name = "qt_helloworld"
+	t.command = "cd smoke_suite/test_resources/qt && qmake -spec symbian-sbsv2 && sbs"
+	t.targets = [
+			"$(SBS_HOME)/test/smoke_suite/test_resources/qt/bld.inf",
+			"$(SBS_HOME)/test/smoke_suite/test_resources/qt/helloworldqt.loc",
+			"$(SBS_HOME)/test/smoke_suite/test_resources/qt/helloworldqt.rss",
+			"$(SBS_HOME)/test/smoke_suite/test_resources/qt/helloworldqt_reg.rss",
+			"$(SBS_HOME)/test/smoke_suite/test_resources/qt/helloworldqt_template.pkg",
+			"$(SBS_HOME)/test/smoke_suite/test_resources/qt/Makefile",
+			"$(EPOCROOT)/epoc32/release/armv5/udeb/helloworldqt.exe",
+			"$(EPOCROOT)/epoc32/release/armv5/udeb/helloworldqt.exe.map",
+			"$(EPOCROOT)/epoc32/release/armv5/urel/helloworldqt.exe",
+			"$(EPOCROOT)/epoc32/release/armv5/urel/helloworldqt.exe.map",
+			"$(EPOCROOT)/epoc32/release/winscw/udeb/helloworldqt.exe",
+			"$(EPOCROOT)/epoc32/release/winscw/urel/helloworldqt.exe",
+			"$(EPOCROOT)/epoc32/release/winscw/urel/helloworldqt.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/qt/bld.inf', [
+		"helloworldqt_exe/armv5/udeb/helloworld.o",
+		"helloworldqt_exe/armv5/udeb/helloworld.o.d",
+		"helloworldqt_exe/armv5/urel/helloworld.o",
+		"helloworldqt_exe/armv5/urel/helloworld.o.d",
+		"helloworldqt_exe/winscw/udeb/helloworld.o",
+		"helloworldqt_exe/winscw/udeb/helloworld.o.d",	
+		"helloworldqt_exe/winscw/urel/helloworld.o",
+		"helloworldqt_exe/winscw/urel/helloworld.o.d"
+	])
+	t.run("windows")
+
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/query_cli.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,110 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+import raptor_tests
+
+def run():
+	
+	t = raptor_tests.SmokeTest()
+	t.description = "Test the --query command-line option"
+
+	t.name = "query_cli_alias"
+	t.command = "sbs --query=aliases"
+	t.mustmatch_singleline = [
+		"<sbs version='2\.\d+\.\d+'>",
+		"<alias.*name='armv5_urel'.*/>",
+		"<alias.*name='armv5_udeb'.*/>",
+		"<alias.*name='winscw_urel'.*/>",
+		"<alias.*name='winscw_udeb'.*/>",
+		"<alias.*name='tools2_rel'.*/>",
+		"<alias.*name='tools2_deb'.*/>",
+		"</sbs>"
+		]
+	t.mustnotmatch_singleline = [
+		"<alias.*name='make'.*/>",
+		"<alias.*name='emake'.*/>"
+		]
+	t.run()
+	
+	t.name = "query_cli_product"
+	t.command = "sbs --query=products --configpath=test/smoke_suite/test_resources/bv"
+	t.mustmatch_singleline = [
+		"<sbs version='2\.\d+\.\d+'>",
+		"<product.*name='test_bv_1'.*/>",
+		"<product.*name='test_bv_2'.*/>",
+		"<product.*name='test_bv_3'.*/>",
+		"</sbs>"
+		]
+	t.mustnotmatch_singleline = [
+		"<product.*name='arm'.*/>",
+		"<product.*name='root'.*/>"
+		]
+	t.run()
+	
+	t.name = "query_cli_config"
+	t.command = "sbs --query=config[armv5_urel]"
+	t.mustmatch_singleline = [
+		"<sbs version='2\.\d+\.\d+'>",
+		"fullname='arm\.v5\.urel\.rvct.*'",
+		"outputpath='.*/epoc32/release/armv5/urel'",
+		"</sbs>"
+		]
+	t.mustnotmatch_singleline = []
+	t.run()
+	
+	t.name = "query_cli_config_bv"
+	t.command = "sbs --query=config[armv5_urel.test_bv_1] --configpath=test/smoke_suite/test_resources/bv"
+	t.mustmatch_singleline = [
+		"<sbs version='2\.\d+\.\d+'>",
+		"fullname='arm\.v5\.urel\.rvct._.\.test_bv_1'",
+		"outputpath='.*/epoc32/release/armv5\.one/urel'",
+		"</sbs>"
+		]
+	t.mustnotmatch_singleline = []
+	t.run()
+	
+	t.name = "query_cli_config_others"
+	t.command = "sbs --query=config[winscw_urel] --query=config[tools2_rel]"
+	
+	if t.onWindows:
+		t2 = "tools2"
+	else:
+		t2 = raptor_tests.ReplaceEnvs("tools2/$(HOSTPLATFORM_DIR)")
+		
+	t.mustmatch_singleline = [
+		"<sbs version='2\.\d+\.\d+'>",
+		"outputpath='.*/epoc32/release/winscw/urel'",
+		"outputpath='.*/epoc32/release/%s/rel'" % t2,
+		"</sbs>"
+		]
+	t.mustnotmatch_singleline = []
+	t.run()
+	
+	t.name = "query_cli_bad"
+	t.command = "sbs --query=nonsense"
+	t.mustmatch_singleline = [
+		"<sbs version='2\.\d+\.\d+'>",
+		"exception 'unknown query' with query 'nonsense'",
+		"</sbs>"
+		]
+	t.mustnotmatch_singleline = []
+	t.errors = 1
+	t.returncode = 1
+	t.run()
+	
+	t.name = "query_cli"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/raptor_crash.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,55 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.description = "tests that previous crash conditions now generate tidy errors."
+	
+	# no crash when there are bld.inf lines starting with a slash	
+	t.id = "45a"
+	t.name = "raptor_crash"
+	t.command = "sbs -b smoke_suite/test_resources/simple_crash/bld.inf"
+	t.errors = 2
+	t.returncode = 1
+	t.run()
+	
+	# should get an error code when running inside cmd
+	t.id = "45b"
+	t.name = "error_cmd"
+	t.usebash = True
+	t.command = "cmd /c sbs -s no_such_thing"
+	t.mustmatch = ["System Definition file no_such_thing does not exist"]
+	t.errors = 1
+	t.returncode = 1
+	t.run("windows")
+	
+	# should get an error code when running in bash
+	t.id = "45c"
+	t.name = "error_bash"
+	t.usebash = True
+	t.command = "sbs -s no_such_thing"
+	t.mustmatch = ["System Definition file no_such_thing does not exist"]
+	t.errors = 1
+	t.returncode = 1
+	t.run()
+	
+	# print the over all result
+	t.id = "45"
+	t.name = "raptor_crash"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/resource.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,92 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+from raptor_tests import ReplaceEnvs
+from raptor_meta import BldInfFile
+
+def run():
+	t = SmokeTest()
+	t.id = "30"
+	t.name =  "resource"
+	t.command = "sbs  -b smoke_suite/test_resources/simple_gui/Bld.inf RESOURCE"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/include/helloworld.rsg",
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/data/z/private/10003a3f/apps/helloworld_reg.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/private/10003a3f/apps/helloworld_reg.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/private/10003a3f/apps/helloworld_reg.rsc"	
+		]
+	
+
+	t.addbuildtargets('smoke_suite/test_resources/simple_gui/Bld.inf', [
+		"helloworld_exe/helloworld.mbm_bmconvcommands",
+		"helloworld_exe/helloworld_HelloWorld_sc.rpp",
+		"helloworld_exe/helloworld_HelloWorld_sc.rpp.d",
+		"helloworld_reg_exe/helloworld_reg_HelloWorld_reg_sc.rpp",
+		"helloworld_reg_exe/helloworld_reg_HelloWorld_reg_sc.rpp.d"])
+
+	t.mustnotmatch = ["HelloWorld.rss.* warning: trigraph"]
+	
+	t.run()
+
+	t.id="30a"
+	t.name =  "no_depend_gen_resource"
+	t.usebash = True
+	t.description =  """Check that dependent resources still build correctly even when we turn dependency generation off.  This
+			    test cannot really do this reliably, if you think about it, since it can't force make to try building resources
+			    in the 'wrong' order.  What it does attempt is to check that 
+			    the ultimately generated dependency file is ok.
+			    N.B.  It also attempts to ensure that the dependency file is 'minimal'  i.e. that it only references .mbg and .rsg files
+			    that might come from other parts of the same build.  This is important for performance in situations where --no-depend-generate
+			    is used because the weight of 'complete' dependency information would overwhelm make.
+			 """
+	buildLocation = ReplaceEnvs("$(EPOCROOT)/epoc32/build/") + BldInfFile.outputPathFragment('smoke_suite/test_resources/resource/group/bld.inf')
+	res_depfile= buildLocation+"/dependentresource_/dependentresource_dependentresource_sc.rpp.d"
+
+	t.targets = [
+		"$(EPOCROOT)/epoc32/include/testresource.rsg",
+		"$(EPOCROOT)/epoc32/include/testresource.hrh",
+		"$(EPOCROOT)/epoc32/data/z/resource/testresource/testresource.r01",
+		"$(EPOCROOT)/epoc32/data/z/resource/testresource/testresource.rsc",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/testresource.exe",
+		res_depfile
+		]
+
+	t.addbuildtargets('smoke_suite/test_resources/resource/group/bld.inf', [	
+		"testresource_/testresource_testresource_02.rpp",
+		"testresource_/testresource_testresource_01.rpp",
+		"testresource_/testresource_testresource_01.rpp.d",
+		"testresource_/testresource_testresource_sc.rpp"])
+
+	t.command = "sbs -b smoke_suite/test_resources/resource/group/bld.inf  -c armv5_urel reallyclean ; sbs --no-depend-generate -j 16 -b smoke_suite/test_resources/resource/group/bld.inf -c armv5_urel -f ${SBSLOGFILE} -m ${SBSMAKEFILE} && grep 'epoc32.include.testresource.rsg' %s && wc -l %s " % (res_depfile, res_depfile)
+
+	t.mustnotmatch = []
+
+	t.mustmatch = [
+			"[23] .*.dependentresource_.dependentresource_dependentresource_sc.rpp.d"
+		      ]
+
+	t.run()
+
+	t.name = 'resource'
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/retry.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,52 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+	t = AntiTargetSmokeTest()
+	t.id = "59"
+	t.name = "retry"
+	#
+	# -t 3 means try each recipe up to 3 times, if it fails.
+	#
+	# There are 3 FLM calls: 
+	#    retry_1 fails once then succeeds.
+	#    retry_2 fails twice then succeeds.
+	#    retry_3 fails all 3 times.
+	#
+	# use -k in case the retry_3 case happens to be run first.
+	#
+	t.command = "sbs -b smoke_suite/test_resources/retry/bld.inf -c armv5_urel -t 3 -k"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/build/retry_1.1",
+		"$(EPOCROOT)/epoc32/build/retry_1.ok",
+		"$(EPOCROOT)/epoc32/build/retry_2.1",
+		"$(EPOCROOT)/epoc32/build/retry_2.2",
+		"$(EPOCROOT)/epoc32/build/retry_2.ok",
+		"$(EPOCROOT)/epoc32/build/retry_3.1",
+		"$(EPOCROOT)/epoc32/build/retry_3.2",
+		"$(EPOCROOT)/epoc32/build/retry_3.3"
+	]
+	t.antitargets = [
+		"$(EPOCROOT)/epoc32/build/retry_1.2",
+		"$(EPOCROOT)/epoc32/build/retry_1.3",
+		"$(EPOCROOT)/epoc32/build/retry_2.3",
+		"$(EPOCROOT)/epoc32/build/retry_3.ok"
+	]
+	t.returncode = 1
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/romfile.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,92 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+
+from raptor_tests import SmokeTest
+import os
+
+def run():
+	t = SmokeTest()
+	t.id = "55"
+	t.name = "romfile"
+	t.description = """
+		Tests the creation and content of an .iby romfile for the armv5.test
+		configuration. Also tests for creation of relevant test batch files.
+		"""
+	t.usebash = True
+	t.command = "sbs -b $(EPOCROOT)/src/ongoing/group/romfile/other_name.inf " \
+			+ "-c armv5.test ROMFILE -f - " \
+			+ "&& cat $(EPOCROOT)/epoc32/rom/src/ongoing/group/romfile/armv5test.iby"
+	
+	# Don't allow -m or -f to be appended
+	t.logfileOption = lambda :""
+	t.makefileOption = lambda :""
+	t.targets = [
+		"$(EPOCROOT)/epoc32/rom/src/ongoing/group/romfile/armv5test.iby",
+		"$(EPOCROOT)/epoc32/data/z/test/src/armv5.auto.bat",
+		"$(EPOCROOT)/epoc32/data/z/test/src/armv5.manual.bat"
+		]
+
+	# Check the content of the generated .iby file.
+
+	t.mustmatch = [
+		# Check whatlog output includes batch files and .iby file
+		r".*/epoc32/rom/src/ongoing/group/romfile/armv5test.iby</build>.*",
+		r".*/epoc32/data/z/test/src/armv5.auto.bat</build>.*",
+		r".*/epoc32/data/z/test/src/armv5.manual.bat</build>.*",
+		
+		# The comment that is put at the start of the file.
+		r".*// epoc32/rom/src/ongoing/group/romfile/armv5test\.iby\n.*",
+
+		# The batch files that are added by the build system.
+		r".*\ndata=/epoc32/data/z/test/src/armv5\.auto\.bat test/src\.auto\.bat\n.*",
+		r".*\ndata=/epoc32/data/z/test/src/armv5\.manual\.bat test/src\.manual\.bat\n.*",
+
+		# Some normal files.
+		r".*\nfile=/epoc32/release/##MAIN##/##BUILD##/t_rand\.exe\s+sys/bin/t_rand\.exe\n.*",
+		r".*\nfile=/epoc32/release/##MAIN##/##BUILD##/t_swapfsys\.exe\s+sys/bin/t_swapfsys\.exe\n.*",
+		r".*\nfile=/epoc32/release/##MAIN##/##BUILD##/t_localtime\.exe\s+sys/bin/t_localtime\.exe\n.*",
+
+		# Some files where the MMP file has the PAGED or UNPAGED keywords.
+		r".*\nfile=/epoc32/release/##MAIN##/##BUILD##/t_pagestress\.exe\s+sys/bin/t_pagestress\.exe paged\n.*",
+		r".*\nfile=/epoc32/release/##MAIN##/##BUILD##/t_fsys\.exe\s+sys/bin/t_fsys\.exe unpaged\n.*",
+
+		# Some files where the MMP file has the ROMTARGET or RAMTARGET keywords.
+		r".*\ndata=/epoc32/release/##MAIN##/##BUILD##/t_prel\.dll\s+/sys/bin/t_prel\.dll attrib=r\n.*",
+		r".*\nfile=/epoc32/release/##MAIN##/##BUILD##/t_sysbin\.exe\s+sys/bin/t_sysbin\.exe\n.*",
+		r".*\ndata=/epoc32/release/##MAIN##/##BUILD##/t_sysbin\.exe\s+/sys/bin/t_sysbin_ram\.exe attrib=r\n.*",
+		r".*\nfile=/epoc32/release/##MAIN##/##BUILD##/t_sysbin\.exe\s+/sys/bin/t_sysbina\.exe\n.*",
+		r".*\nfile=/epoc32/release/##MAIN##/##BUILD##/t_sysbin\.exe\s+/system/programs/t_sysbinb\.exe\n.*"
+		]
+	t.mustnotmatch = [
+		# Try to detect file paths that contain two or more slashes in a row,
+		# without flagging C++ style comments.
+		r"\w//+\w"
+		]
+
+	t.run("windows")
+
+	if t.result == SmokeTest.SKIP:
+		t.command = "sbs -b $(EPOCROOT)/src/ongoing/group/romfile/other_name.inf" \
+				+ " -c armv5.test ROMFILE -f -" \
+				+ " && cat $(EPOCROOT)/epoc32/rom/src/ongoing/group/romfile/armv5test.iby"
+
+		# These two warnings are because gnumakefiles are not supported on
+		# Linux:
+		t.warnings = 2
+		t.run("linux")
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/sbs_with_nonexisting_bldinf.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,28 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "80"
+	t.name = "sbs_with_nonexisting_bldinf"
+	t.description = "Test if sbs generates warning if invoked without bld.inf specified i.e. using default bld.inf which doesn't exist"
+	t.command = "mkdir ${EPOCROOT}/emptydir; rm ${EPOCROOT}/emptydir/*;  cd ${EPOCROOT}/emptydir; sbs -f ${SBSLOGFILE} -m {SBSMAKEFILE}"
+	t.usebash = True
+	t.warnings = 1 
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/smp.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,51 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+	t = AntiTargetSmokeTest()
+	t.id = "61"
+	t.name = "smp"
+	#
+	# the command asks for ARMV5 and ARMV5SMP but the component only builds
+	# code for ARMV5SMP according to its bld.inf file. so, check that the
+	# ARMV5SMP binaries exist and the ARMV5 ones do not.
+	#
+	t.command = "sbs -b smoke_suite/test_resources/smp/bld.inf -c armv5 -c " + \
+			"armv5.smp"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5smp/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5smp/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5smp/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5smp/urel/test.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/smp/bld.inf', [
+		"test_/armv5smp/udeb/test.o",
+		"test_/armv5smp/urel/test.o"
+	])
+	t.antitargets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map"
+	]
+	t.addbuildantitargets('smoke_suite/test_resources/smp/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o"
+		])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/splitlog_filter.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,122 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+import sys
+
+def run():
+	result = SmokeTest.PASS
+	
+	t = SmokeTest()
+	# Override logfileoption and makefileoption to stop them adding '-f' and '-m'
+	t.logfileOption = lambda : ""
+	t.makefileOption = lambda : ""
+	t.id = "0083a"
+	t.name = "splitlog_filter"
+	t.description = "Tests scanlog_filter output"
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c armv5 " + \
+			"--filters=FilterSplitlog " + \
+			"-f $(EPOCROOT)/epoc32/build/splitlog.xml " + \
+			"&& cat $(EPOCROOT)/epoc32/build/splitlog.xml"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o"
+		])
+	t.mustmatch = [
+		".*<info.*"		
+		]
+	t.mustnotmatch = [
+		".*<clean.*",
+		".*</clean>.*",
+		".*<whatlog.*",
+		".*</whatlog>.*",
+		".*<recipe.*",
+		".*</recipe>.*"
+		]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	
+	t.id = "0083b"
+	t.name = "splitlog_cleancheck"
+	t.command = "cat $(EPOCROOT)/epoc32/build/splitlog.clean.xml"
+	t.targets = []
+	t.mustmatch = [
+		".*<clean.*",
+		".*</clean>.*"
+		]
+	t.mustnotmatch = [
+		".*<info.*"
+		".*<whatlog.*",
+		".*</whatlog>.*",
+		".*<recipe.*",
+		".*</recipe>.*"
+		]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+		
+	
+	t.id = "0083c"
+	t.name = "splitlog_whatlogcheck"
+	t.command = "cat $(EPOCROOT)/epoc32/build/splitlog.whatlog.xml"
+	t.mustmatch = [
+		".*<whatlog.*",
+		".*</whatlog>.*"
+		]
+	t.mustnotmatch = [
+		".*<info.*",
+		".*<clean.*",
+		".*</clean>.*",
+		".*<recipe.*",
+		".*</recipe>.*"
+		]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	t.id = "0083d"
+	t.name = "splitlog_recipecheck"
+	t.command = "cat $(EPOCROOT)/epoc32/build/splitlog.recipe.xml"
+	t.mustmatch = [
+		".*<recipe.*",
+		".*</recipe>.*"
+		]
+	t.mustnotmatch = [
+		".*<info.*",
+		".*<clean.*",
+		".*</clean>.*",
+		".*<whatlog.*",
+		".*</whatlog>.*"
+		]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	
+	t.id = "83"
+	t.name = "splitlog_filter"
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/stringtable_zip_whatlog.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,74 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+# The stringtable example doesn't currently build in full, hence it's built for
+# EXPORT in isolation; We also test archives here - although an export, they
+# will be exported in response to the first configuration processed (this
+# example ensures it's armv5_udeb, so we can match against that config).
+from raptor_tests import CheckWhatSmokeTest, ReplaceEnvs
+import re
+import os
+
+def run():
+	markerfile = re.sub("(\\\\|\/|:|;| )", "_",
+			ReplaceEnvs("$(SBS_HOME)_test_smoke_suite_test_resources_simple_zip_export_archive.zip$(EPOCROOT)_epoc32_testunzip.unzipped"))
+	
+	t = CheckWhatSmokeTest()
+	t.id = "0069a"
+	t.name = "stringtable_zip_whatlog"
+	t.command = "sbs -b smoke_suite/test_resources/simple_stringtable/bld.inf -b smoke_suite/test_resources/simple_zip_export/bld.inf -f - -m ${SBSMAKEFILE} -c armv5_udeb.whatlog EXPORT"
+	componentpath1 = re.sub(r'\\','/',os.path.abspath("smoke_suite/test_resources/simple_stringtable"))
+	componentpath2 = re.sub(r'\\','/',os.path.abspath("smoke_suite/test_resources/simple_zip_export"))
+	t.regexlinefilter = re.compile("^<(whatlog|archive|stringtable>|member>|zipmarker>)")
+	t.hostossensitive = False
+	t.usebash = True
+	t.targets = [
+		"$(EPOCROOT)/epoc32/include/strconsts.h",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile1.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile2.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile3.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile4.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefilelinuxbin",
+		"$(EPOCROOT)/epoc32/build/" + markerfile
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_stringtable/bld.inf', [
+		"stringtabletest_/strconsts.cpp",
+		"stringtabletest_/strconsts.h",
+		"stringtabletest_/strconsts.st"
+	])
+	t.stdout = [
+		"<whatlog bldinf='"+componentpath1+"/bld.inf' mmp='"+componentpath1+"/simple_stringtable.mmp' config='armv5_udeb.whatlog'>",
+		"<stringtable>$(EPOCROOT)/epoc32/include/strconsts.h</stringtable>",
+		"<whatlog bldinf='"+componentpath2+"/bld.inf' mmp='' config=''>",
+		"<archive zipfile='"+componentpath2+"/archive.zip'>",
+		"<member>$(EPOCROOT)/epoc32/testunzip/archive/archivefile1.txt</member>",
+		"<member>$(EPOCROOT)/epoc32/testunzip/archive/archivefile2.txt</member>",
+		"<member>$(EPOCROOT)/epoc32/testunzip/archive/archivefile3.txt</member>",
+		"<member>$(EPOCROOT)/epoc32/testunzip/archive/archivefile4.txt</member>",
+		"<member>$(EPOCROOT)/epoc32/testunzip/archive/archivefilelinuxbin</member>",
+		"<zipmarker>$(EPOCROOT)/epoc32/build/" + markerfile + "</zipmarker>"
+	]
+	t.run()
+	
+	"Tests to check that up-to-date zip exports are reported"
+	t.id = "0069b"
+	t.name = "stringtable_zip_whatlog_rebuild"
+	t.targets = []
+	t.run()
+	
+	t.id = "69"
+	t.name = "stringtable_zip_whatlog"	
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/sysdef_dud.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "50"
+	t.name = "sysdef_dud"
+	t.description = "Test an invalid system_definition.xml file"
+	t.command = "sbs -s " + \
+			"smoke_suite/test_resources/sysdef/system_definition_dud.xml"
+	t.targets = []
+	t.errors = 1
+	t.returncode = 1
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/sysdef_exports.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,57 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "47"
+	t.name = "sysdef_exports"
+	t.description = "Test general system_definition.xml processing of exports"
+	t.command = "sbs -a $(SBS_HOME)/test/smoke_suite/test_resources/sysdef -s smoke_suite/test_resources/sysdef/system_definition_mmp_export_dependencies_test.xml"
+	t.targets = [
+		"$(SBS_HOME)/test/smoke_suite/test_resources/sysdef/dependent_on_exports/metadata_export_pre1.mmh",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/sysdef/dependent_on_exports/metadata_export_pre2.mmh",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/dependent_on_exports.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/dependent_on_exports.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/dependent_on_exports.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/dependent_on_exports.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/dependent_on_exports.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/dependent_on_exports.exe.sym",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/dependent_on_exports.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/dependent_on_exports.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/dependent_on_exports.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/sysdef/dependent_on_exports/bld.inf', [
+		"dependent_on_exports_exe/armv5/udeb/dependent_on_exports_udeb_objects.via",
+		"dependent_on_exports_exe/armv5/udeb/test.o",
+		"dependent_on_exports_exe/armv5/udeb/test.o.d",
+		"dependent_on_exports_exe/armv5/urel/dependent_on_exports_urel_objects.via",
+		"dependent_on_exports_exe/armv5/urel/test.o",
+		"dependent_on_exports_exe/armv5/urel/test.o.d",
+		"dependent_on_exports_exe/winscw/udeb/dependent_on_exports.UID.CPP",
+		"dependent_on_exports_exe/winscw/udeb/dependent_on_exports_UID_.dep",
+		"dependent_on_exports_exe/winscw/udeb/dependent_on_exports_UID_.o",
+		"dependent_on_exports_exe/winscw/udeb/test.dep",
+		"dependent_on_exports_exe/winscw/udeb/test.o",
+		"dependent_on_exports_exe/winscw/urel/dependent_on_exports.UID.CPP",
+		"dependent_on_exports_exe/winscw/urel/dependent_on_exports_UID_.dep",
+		"dependent_on_exports_exe/winscw/urel/dependent_on_exports_UID_.o",
+		"dependent_on_exports_exe/winscw/urel/test.dep",
+		"dependent_on_exports_exe/winscw/urel/test.o"
+	])
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/sysdef_layers.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,85 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "48"
+	t.name = "sysdef_layers"
+	t.usebash = True
+	t.description = "Test system_definition.xml layer processing and log reporting"
+	t.command = 'sbs -f- -s smoke_suite/test_resources/sysdef/system_definition_order_layer_test.xml ' + \
+			'-l "Metadata Export" -l "Build Generated Source" -l "Component with Layer Dependencies" -o'
+	t.targets = [
+		"$(SBS_HOME)/test/smoke_suite/test_resources/sysdef/build_gen_source/exported.inf",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/sysdef/build_gen_source/exported.mmh",
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/data/z/private/10003a3f/apps/helloworld_reg.rsc",
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/include/helloworld.rsg",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/helloworld.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/helloworld.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/helloworld.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/helloworld.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/private/10003a3f/apps/helloworld_reg.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/helloworld.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/private/10003a3f/apps/helloworld_reg.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/helloworld.rsc",
+		]
+	t.addbuildtargets('smoke_suite/test_resources/sysdef/build_gen_source/bld.inf', [
+		"helloworld_/helloworld_HelloWorld_sc.rpp"
+		])
+	t.addbuildtargets('smoke_suite/test_resources/sysdef/dependent/bld.inf', [
+		"helloworld_exe/armv5/udeb/HelloWorld_Application.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppUi.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppView.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Document.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Main.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Application.o",
+		"helloworld_exe/armv5/urel/HelloWorld_AppUi.o",
+		"helloworld_exe/armv5/urel/HelloWorld_AppView.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Document.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Main.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Application.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppUi.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppView.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Document.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Main.o",
+		"helloworld_exe/winscw/udeb/helloworld.UID.CPP",
+		"helloworld_exe/winscw/udeb/helloworld_UID_.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Application.o",
+		"helloworld_exe/winscw/urel/HelloWorld_AppUi.o",
+		"helloworld_exe/winscw/urel/HelloWorld_AppView.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Document.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Main.o",
+		"helloworld_exe/winscw/urel/helloworld.UID.CPP",
+		"helloworld_exe/winscw/urel/helloworld_UID_.o",
+		"helloworld_reg_exe/helloworld_reg_HelloWorld_reg_sc.rpp"
+		])
+	t.countmatch = [
+		["<recipe .*layer='Component with Layer Dependencies' component='dependent'.*>", 34],
+		["<recipe .*layer='Build Generated Source' component='build generated source'.*>", 4]		
+		]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/talon_test.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,100 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+from raptor_tests import ReplaceEnvs
+import os
+import sys
+
+def run():
+	t = SmokeTest()
+	t.description =  """talon_test: two part test
+	1) Test talon's -c option
+	2) Test talon with a script file that has some blank lines and a single non-blank command line
+	"""
+
+	# Don't need these as we are not invoking Raptor
+	t.logfileOption = lambda : ""
+	t.makefileOption = lambda : ""
+
+	# Set up variables for talon
+	bindir = ReplaceEnvs("$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bin")
+	bash = bindir + "/bash"
+	talon = bindir + "/talon"
+
+	# Adjust if on Windows - three "tries" for Bash on Windows.
+	# 1 Default try
+	if "win" in sys.platform.lower():
+		bash = ReplaceEnvs("$(SBS_HOME)/win32/cygwin/bin/bash.exe")
+		talon = ReplaceEnvs("$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bin/talon.exe")
+	
+	# 2 Bash from a Cygwin
+	if os.environ.has_key("SBS_CYGWIN"):
+		bash = ReplaceEnvs("$(SBS_CYGWIN)/bin/bash.exe")
+	
+	# 3 Bash from an env. var.
+	if os.environ.has_key("SBS_SHELL"):
+		bash = os.environ["SBS_SHELL"]
+	
+	# Talon's command line
+	commandline="\"|name=commandlinetest;COMPONENT_META=commandline/group/bld.inf;PROJECT_META=commandline.mmp;|echo Command line invocation output\""
+	
+	# Talon's "shell script"
+	scriptfile=ReplaceEnvs("$(SBS_HOME)/test/smoke_suite/test_resources/talon_test/script")
+	
+	# Environment variables needed by talon - TALON_SHELL must be bash; the other two can be arbitrary.
+	os.environ["TALON_SHELL"]=bash
+	os.environ["TALON_BUILDID"]=str(t.id)
+	os.environ["TALON_RECIPEATTRIBUTES"]="component=talontest"
+
+	# First part of test - command line
+	t.name = "talon_test command line"
+	t.id = "100a"
+	t.command = "%s -c %s" % (talon, commandline)
+	t.targets = []
+	t.mustmatch_multiline = ["<recipe component=talontest>.*<!\[CDATA\[.*\+ echo Command line invocation output" + 
+			".*\]\]><time start='\d+\.\d+' elapsed='\d+\.\d+' />" + 
+			".*<status exit='ok' attempt='1' />.*</recipe>"]
+
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	# Second part of test - script file
+	t.name = "talon_test script file"
+	t.id = "100b"
+	t.command = "%s %s" % (talon, scriptfile)
+	t.targets = []
+	t.mustmatch_multiline = ["<recipe component=talontest>.*<!\[CDATA\[.*\+ echo Script file output" + 
+			".*\]\]><time start='\d+\.\d+' elapsed='\d+\.\d+' />" + 
+			".*<status exit='ok' attempt='1' />.*</recipe>"]
+
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+
+	# Print final result
+	t.name = "talon_test"
+	t.id = "100"
+	t.print_result()
+
+	# Delete the added environment variables
+	del os.environ["TALON_SHELL"]
+	del os.environ["TALON_BUILDID"]
+	del os.environ["TALON_RECIPEATTRIBUTES"]
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/tem_conflicts.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,38 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "0094"
+	t.name = "tem_conflicts"
+	t.usebash = 1
+	t.command = "sbs -b smoke_suite/test_resources/tem_conflict/bld.inf " + \
+		"-c armv5 -j 2 -f $SBSLOGFILE; cat $SBSLOGFILE"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/test/tem_conflicts.mk",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/test/tem_conflicts.meta",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/test/tem_conflicts.sh"
+		]
+	t.mustnotmatch = [
+		"cp: cannot open .* for reading: Permission denied",
+		"cp: cannot stat .*: No such file or directory",
+		"rm: cannot remove .*: No such file or directory",
+		"rm: cannot remove .*: Permission denied"
+		]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/tem_stages.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,92 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	result = SmokeTest.PASS
+
+	# export the TEM
+
+	t = SmokeTest()
+	t.id = "73a"
+	t.name = "tem_stages"
+	t.command = "sbs -b smoke_suite/test_resources/tem_stages/bld.inf EXPORT"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/test/tem_stages.mk",
+		"$(EPOCROOT)/epoc32/tools/makefile_templates/test/tem_stages.meta"
+		]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	# run the main test
+
+	t.id = "73b"
+	t.name = "tem_stages"
+	t.command = "sbs -b smoke_suite/test_resources/tem_stages/bld.inf"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/build/generated/tem_stages_generated.cpp",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated.h",
+
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_armv5_urel.rsg",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_armv5_udeb.rsg",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_winscw_urel.rsg",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_winscw_udeb.rsg",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_armv5_urel.lib",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_armv5_udeb.lib",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_winscw_urel.lib",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_winscw_udeb.lib",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_armv5_urel.bin",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_armv5_udeb.bin",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_winscw_urel.bin",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_winscw_udeb.bin",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_armv5_urel.final",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_armv5_udeb.final",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_winscw_urel.final",
+		"$(EPOCROOT)/epoc32/include/tem_stages_generated_winscw_udeb.final",
+
+		"$(EPOCROOT)/epoc32/release/armv5/urel/tem_stages.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/tem_stages.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/tem_stages.lib",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/tem_stages.exe",
+
+		"$(EPOCROOT)/epoc32/release/armv5/urel/tem_stages.lib2",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/tem_stages.exe2",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/tem_stages.lib2",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/tem_stages.exe2",
+
+		"$(EPOCROOT)/epoc32/release/winscw/urel/tem_stages.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/tem_stages.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/tem_stages.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/tem_stages.exe",
+
+		"$(EPOCROOT)/epoc32/release/winscw/urel/tem_stages.lib2",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/tem_stages.exe2",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/tem_stages.lib2",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/tem_stages.exe2",
+		]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	# return the combined result
+
+	t.id = "73"
+	t.name = "tem_stages"
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/temtest.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,136 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest, CheckWhatSmokeTest
+
+def run():
+	result = SmokeTest.PASS
+	t = SmokeTest()
+	t.id = "0018a"
+	t.name = "temclean"
+	t.command = "sbs -b smoke_suite/test_resources/tem/bldclean.inf -c armv5 CLEAN"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/raptor_smoketest_tem_succeeded",
+		"$(EPOCROOT)/epoc32/raptor_smoketest_tem_failed"
+		]
+	t.missing = 2
+	t.warnings = 1
+	t.returncode = 0
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+	
+	
+	t.id = "0018b"
+	t.name = "temtest"
+	t.command = "sbs -b smoke_suite/test_resources/tem/bld.inf -c armv5"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/raptor_smoketest_tem_succeeded"
+		]
+	t.warnings = 2
+	t.missing = 0
+	t.returncode = 1
+	t.mustmatch = [ "repeated call to TEM with same values.* Stop\." ]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+
+	t.id = "0018c"
+	t.name = "temclean2"
+	t.command = "sbs -b smoke_suite/test_resources/tem/bldclean.inf -c armv5 CLEAN"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/raptor_smoketest_tem_succeeded",
+		"$(EPOCROOT)/epoc32/raptor_smoketest_tem_failed"
+		]
+	t.missing = 2
+	t.warnings = 1
+	t.returncode = 0
+	t.mustmatch = []
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+
+	t.id = "0018d"
+	t.name = "badtem"
+	t.command = "sbs -b smoke_suite/test_resources/tem/bad_bld.inf -c armv5"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/raptor_smoketest_tem_failed"
+		]
+	t.warnings = 3
+	t.missing = 0
+	t.returncode = 1
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+
+	t.id = "0018e"
+	t.name = "temclean3"
+	t.command = "sbs -b smoke_suite/test_resources/tem/bldclean.inf -c armv5 CLEAN"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/raptor_smoketest_tem_succeeded",
+		"$(EPOCROOT)/epoc32/raptor_smoketest_tem_failed"
+		]
+	t.missing = 2
+	t.warnings = 1
+	t.returncode = 0
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+
+	t = CheckWhatSmokeTest()
+	t.id = "0018f"
+	t.name = "temwhat"
+	t.command = "sbs -b smoke_suite/test_resources/simple_extension/bld.inf --what"
+	t.output_expected_only_once = True	
+	t.stdout = [
+		# exports
+		'$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/clean.mk',
+		'$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/clean.meta',
+		'$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/build.mk',
+		'$(EPOCROOT)/epoc32/tools/makefile_templates/sbsv2test/build.meta',
+		# release tree built
+		'$(EPOCROOT)/epoc32/release/armv5/udeb/simple_extension.txt',
+		'$(EPOCROOT)/epoc32/release/armv5/urel/simple_extension.txt',
+		'$(EPOCROOT)/epoc32/release/winscw/udeb/simple_extension.txt',
+		'$(EPOCROOT)/epoc32/release/winscw/urel/simple_extension.txt'
+	]
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+
+	t = SmokeTest()
+	t.id = "0018g"
+	t.name = "badtem2"
+	t.command = "sbs -b smoke_suite/test_resources/tem/bad2_bld.inf -c armv5"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/raptor_smoketest_tem_failed"
+		]
+	t.warnings = 3
+	t.returncode = 1
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	t.id = "18"
+	t.name = "temtest"
+	t.result = result
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/terminal_filter_tests.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,54 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+
+	t = SmokeTest()
+	t.description = "Tests against log files to ensure it 'does the right thing'"
+	
+	t.id = "87a"
+	t.name = "terminal_filter_tests_log"
+	t.command = "$(SBS_HOME)/test/smoke_suite/test_resources/refilter/testfilterterminal"
+	t.countmatch = [
+		# One of each type of error occurs early in the 'sbs' call where there
+		# is a recipe inside another recipe. Then the errors occur in the
+		# opposite order where are 2 closing tags next to each other before 2
+		# opening tags appear next to each other
+			["sbs: error: Opening recipe tag found before closing recipe tag for previous recipe:", 2],
+			["Discarding previous recipe \(Possible logfile corruption\)", 2],
+			["sbs: error: Closing recipe tag found before opening recipe tag:", 2],
+			["Unable to print recipe data \(Possible logfile corruption\)", 2]
+	]
+	t.errors = 4
+	t.run()
+	
+	t.id = "87b"
+	t.name = "terminal_filter_tests_configs"
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf"
+	t.countmatch = []
+	t.errors = 0
+	t.mustmatch_singleline = ["built 'armv5_urel'",
+							  "built 'armv5_udeb'",
+							  "built 'winscw_urel'",
+							  "built 'winscw_udeb'" ]
+	t.run()
+	
+	t.id = "87"
+	t.name = "terminal_filter_tests"
+	t.print_result()
+	return t
Binary file sbsv2/raptor/test/smoke_suite/test_resources/annofile2log/scrubbed_ncp_dfs_resource.anno.bz2 has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/annofile2log/scrubbed_ncp_dfs_resource.stdout.bz2 has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/annofile2log/testanno2log.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,45 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Component description file
+#
+
+
+import sys
+import os
+sys.path.append(os.path.join(os.environ['SBS_HOME'],"python"))
+
+from raptor_make import XMLEscapeLog
+from raptor_make import AnnoFileParseOutput
+
+
+retcode=0
+
+
+if len(sys.argv) > 1:
+	annofile = sys.argv[1]
+else:
+	annofile = sys.stdin
+
+sys.stdout.write("<build>\n")
+try:
+	for l in XMLEscapeLog(AnnoFileParseOutput(annofile)):
+		sys.stdout.write(l)
+
+except Exception,e:
+	sys.stderr.write("error: " + str(e) + "\n")
+	retcode = 1
+sys.stdout.write("</build>\n")
+
+sys.exit(retcode)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/apply_usecases/apply_test_usecases_variants.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+  <!-- This variant is used so that we can tell if the APPLY keyword
+       can find variants exported into the epoc32 tree -->
+
+  <var name="apply_tools2_linker_options">
+	<append name="LINKER_OPTIONS" value="-lwsock32" />
+  </var>
+
+
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/apply_usecases/linker_options/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,10 @@
+
+PRJ_EXPORTS
+../apply_test_usecases_variants.xml /epoc32/tools/makefile_templates/
+
+PRJ_PLATFORMS
+TOOLS2
+
+PRJ_MMPFILES
+test_apply_linkeroptions.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/apply_usecases/linker_options/test_apply_linkeroptions.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,4 @@
+int main()
+{
+    return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/apply_usecases/linker_options/test_apply_linkeroptions.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+TARGET          test_apply_linkeroptions
+TARGETTYPE      EXE
+
+SOURCE          test_apply_linkeroptions.cpp
+
+// Link to mingw libs: libwsock32.a 
+APPLY		apply_tools2_linker_options
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/asmtest/asmtest.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			asmtest
+TARGETTYPE		EXE
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE		/epoc32/include
+SOURCE			testasm.s testcia.cia testassembler.cpp
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/asmtest/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7
+
+PRJ_MMPFILES
+asmtest.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/asmtest/testasm.s	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,45 @@
+; test arm assembler
+;
+; (C) Copyright Symbian Software Limited 2008. All rights reserved.
+;
+        AREA |.text|, CODE, READONLY, ALIGN=6
+
+        CODE32
+
+        ; UPT
+
+;
+;
+
+
+
+;EXPORT fake_assembler_function1
+        EXPORT  _Z24fake_assembler_function1v
+
+;fake_assembler_function1
+_Z24fake_assembler_function1v
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        mov             r0,r0           ; nop
+        bx lr
+
+        END
+
+; End of file - testasm.s
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/asmtest/testassembler.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Assembler test";
+
+void fake_assembler_function1(void);
+void fake_assembler_function2(void);
+
+TInt E32Main()
+{
+	fake_assembler_function1();
+	fake_assembler_function2();
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/asmtest/testcia.cia	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <e32cia.h>
+// #include <arm.h>
+// #include <cache.h>
+
+// #include <nk_priv.h>
+
+#ifndef __CIA__
+#error __CIA__ must be defined for .cia files
+#endif
+
+__NAKED__ void fake_assembler_function2(void)
+    {
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+    asm("mov r0, r0 ");         // nop
+
+    asm("bx lr");
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/basics/commonframework/CommonFramework.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+#ifndef __CommonFramework_H
+#define __CommonFramework_H
+
+#include <e32base.h>
+#include <e32cons.h>
+
+_LIT(KTxtEPOC32EX,"EXAMPLES");
+_LIT(KTxtExampleCode,"Symbian OS Example Code");
+_LIT(KFormatFailed,"failed: leave code=%d");
+_LIT(KTxtOK,"ok");
+_LIT(KTxtPressAnyKey," [press any key]");
+
+// public
+LOCAL_D CConsoleBase* console; // write all your messages to this
+LOCAL_C void doExampleL(); // code this function for the real example
+
+// private
+LOCAL_C void callExampleL(); // initialize with cleanup stack, then do example
+
+GLDEF_C TInt E32Main() // main function called by E32
+    {
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
+	TRAPD(error,callExampleL()); // more initialization, then do example
+	__ASSERT_ALWAYS(!error,User::Panic(KTxtEPOC32EX,error));
+	delete cleanup; // destroy clean-up stack
+	__UHEAP_MARKEND;
+	return 0; // and return
+    }
+
+LOCAL_C void callExampleL() // initialize and call example code under cleanup stack
+    {
+	console=Console::NewL(KTxtExampleCode,TSize(KConsFullScreen,KConsFullScreen));
+	CleanupStack::PushL(console);
+	TRAPD(error,doExampleL()); // perform example function
+	if (error)
+		console->Printf(KFormatFailed, error);
+	else
+		console->Printf(KTxtOK);
+	console->Printf(KTxtPressAnyKey);
+	console->Getch(); // get and ignore character
+	CleanupStack::PopAndDestroy(); // close console
+    }
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/basics/commonframework/DISTRIBUTION.POLICY	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2 @@
+Category G
+OSD:	Reference/Test	Tools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/Bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_MMPFILES
+
+HelloWorld.mmp
+
+PRJ_EXPORTS
+result_creation.flm /epoc32/tools/makefile_templates/tools/result_creation.flm
+result_creation.xml /epoc32/tools/makefile_templates/tools/result_creation.xml
+
+PRJ_EXTENSIONS
+START EXTENSION helloworld.extensiontest run_this
+	OPTION TEST_RESULT "success"
+END
+
+START EXTENSION helloworld.extensiontest skip_this
+	OPTION TEST_RESULT "failure"
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/DISTRIBUTION.POLICY	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2 @@
+Category G
+OSD:	Reference/Test	Tools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/HelloWorld.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "CommonFramework.h"
+
+// do the example
+LOCAL_C void doExampleL()
+    {
+	_LIT(KHelloWorldText,"Hello world!\n");
+	console->Printf(KHelloWorldText);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/HelloWorld.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        HelloWorld.exe
+TARGETTYPE    exe
+UID           0xE8000047
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        HelloWorld.cpp
+
+USERINCLUDE   .
+USERINCLUDE   ..\commonframework
+SYSTEMINCLUDE \epoc32\include
+
+LIBRARY       euser.lib
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/result_creation.flm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# # Will output whether the test has passed or failed
+# 
+#
+
+## Parameters that are expected:
+# TEST_RESULT
+# EPOCROOT
+
+ALL::
+	echo $(TEST_RESULT) > $(EPOCROOT)/epoc32/$(TEST_RESULT).txt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/basics/helloworld/result_creation.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build"
+		xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+		xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+	<!-- Extension interfaces : replacements for Template Extension Makefiles -->
+
+	<interface name="helloworld.extensiontest" flm="result_creation.flm">
+		<param name="TEST_RESULT" />
+		<param name="EPOCROOT" />
+	</interface>
+
+</build>
Binary file sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF24.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF2M.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF32.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF3M.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF48.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/bitmap/aifsrccl/DEF4M.BMP has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bitmap/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_PLATFORMS
+
+PRJ_EXPORTS
+mifconv.xml /epoc32/tools/makefile_templates/test/mifconv.xml
+mifconv.flm /epoc32/tools/makefile_templates/test/mifconv.flm
+
+PRJ_MMPFILES
+bmt.mmp
+
+PRJ_EXTENSIONS
+START EXTENSION test.mifconv
+  OPTION MIFCONV_TEST 1
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bitmap/bmt.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+target			testbitmap.dll
+targettype      DLL
+source			fake.cpp
+
+START BITMAP	testbitmap.mBm
+HEADER
+
+// Test backslash conversion to / here:
+TARGETPATH		\resource\apps
+SOURCEPATH		aifsrccl
+SOURCE			c8,1 DEF24.BMP DEF2M.BMP DEF32.BMP DEF3M.BMP DEF48.BMP DEF4M.BMP
+END
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bitmap/mifconv.flm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2 @@
+# SBSv2 test flm
+# This helps test mifconv for s60
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bitmap/mifconv.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?> 
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+ <interface name="test.mifconv" extends="Symbian.UserFLM" flm="mifconv.flm">
+  <param name="MIFCONV_TEST" /> 
+ </interface>
+
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/CREATESTATICDLLARM.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,6 @@
+EXPORTS
+	_ZN10CMessenger11ShowMessageEv @ 1 NONAME
+	_ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 @ 2 NONAME
+	_ZTI10CMessenger @ 3 NONAME ; #<TI>#
+	_ZTV10CMessenger @ 4 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/CREATESTATICDLLWINS.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,5 @@
+EXPORTS
+; NEW:
+	?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @ 1 NONAME ; public: static class CMessenger * __cdecl CMessenger::NewLC(class CConsoleBase &,class TDesC16 const &)
+	?ShowMessage@CMessenger@@QAEXXZ @ 2 NONAME ; public: void __thiscall CMessenger::ShowMessage(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_MMPFILES
+
+variant1/CreateStaticDLL_variant1.mmp
+invariant/CreateStaticDLL_invariant.mmp
+variant2/CreateStaticDLL_variant2.mmp
+variant3/CreateEXE_variant3.mmp
+invariant/CreateStaticLib.mmp
+
+PRJ_EXTENSIONS
+
+START EXTENSION utility.prebuilt
+OPTION PRE_PLATFORM armv5
+OPTION PRE_TYPE urel
+OPTION BINARIES release/dummy.lib release/fake.lib->relfake.lib
+END
+
+START EXTENSION utility.prebuilt
+OPTION PRE_PLATFORM armv5
+OPTION PRE_TYPE udeb
+OPTION BINARIES debug/dummy.lib debug/fake.lib->debfake.lib
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/config/properties/os_properties.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+        
+  <!-- Modify the root variant to turn on safe generation of Feature Variant binaries -->
+  <var name="root.changes">
+    <set name='FEATUREVARIANTSAFE' value='1'/>
+  </var>
+  
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/config/variants/bv_test.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+	<build xmlns="http://symbian.com/xml/build"
+			xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+			xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+		<!-- test feature variants -->
+		<var name="test_bv_1" type="product">
+			<set name='FEATUREVARIANTNAME' value='.one' />
+			<set name='FEATURELISTFILES'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/listA.txt
+					$(SBS_HOME)/test/smoke_suite/test_resources/bv/listB.txt' />
+			<set name='VARIANT_HRH'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh/var1.hrh' />
+			<set name='SYSTEMINCLUDE'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/var1
+					$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh' />   
+  		</var>
+		<var name="test_bv_2" type="product">
+			<set name='FEATUREVARIANTNAME' value='.two' />
+			<set name='FEATURELISTFILES'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/listA.txt
+					$(SBS_HOME)/test/smoke_suite/test_resources/bv/listB.txt' />
+			<set name='VARIANT_HRH'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh/var2.hrh' />
+			<set name='SYSTEMINCLUDE'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/var2
+					$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh' />
+		</var>
+		<var name="test_bv_3" type="product">
+			<set name='FEATUREVARIANTNAME' value='.three' />
+			<set name='FEATURELISTFILES'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/listA.txt
+					$(SBS_HOME)/test/smoke_suite/test_resources/bv/listB.txt' />
+			<set name='VARIANT_HRH'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh/var3.hrh' />
+			<set name='SYSTEMINCLUDE'
+					value='$(SBS_HOME)/test/smoke_suite/test_resources/bv/var3
+					$(SBS_HOME)/test/smoke_suite/test_resources/bv/hrh' />
+		</var>
+	</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/debug/dummy.lib	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1 @@
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/debug/fake.lib	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1 @@
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/hrh/bv_hrh_relative/relative.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// relative.h
+
+#define RELATIVE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/hrh/var1.hrh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include <variant/Symbian_OS.hrh>
+
+// benign include relative to this file
+#include <bv_hrh_relative/relative.h>
+
+// include from test/bv/var1 defines A_3 and B_100 used in source
+#include <var1.h>
+
+// extra defines that are never used
+#define V_ONE_ABC
+#define V_TWO_DEF
+#define V_THREE_GHI
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/hrh/var2.hrh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include <variant/Symbian_OS.hrh>
+
+// benign include relative to this file
+#include <bv_hrh_relative/relative.h>
+
+// include from test/bv/var2 defines A_3 used in source
+#include <var2.h>
+
+// extra defines that are never used
+#define V_TWO_ABC
+#define V_ONE_DEF
+#define V_THREE_GHI
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/hrh/var3.hrh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include <variant/Symbian_OS.hrh>
+
+// benign include relative to this file
+#include <bv_hrh_relative/relative.h>
+
+// include from test/bv/var3 defines A_3 used in source
+#include <var3.h>
+
+// extra defines that are never used
+#define V_TWO_ABC
+#define V_ONE_DEF
+#define V_THREE_GHI
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/CreateStaticDLL_invariant.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.cpp
+* This program creates a dll.
+*
+*/
+
+
+#include "CreateStaticDLL_invariant.h"
+#include <e32uid.h>
+
+// construct/destruct
+
+EXPORT_C CMessenger* CMessenger::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+	{
+	CMessenger* self=new (ELeave) CMessenger(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL(aString);
+	return self;
+	}
+
+CMessenger::~CMessenger() // destruct - virtual, so no export
+	{
+	delete iString;
+	}
+
+EXPORT_C void CMessenger::ShowMessage()
+	{
+	_LIT(KFormat1,"%S\n");
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+// constructor support
+// don't export these, because used only by functions in this DLL, eg our NewLC()
+
+CMessenger::CMessenger(CConsoleBase& aConsole) // first-phase C++ constructor
+	: iConsole(aConsole)
+	{
+	}
+
+void CMessenger::ConstructL(const TDesC& aString) // second-phase constructor
+	{
+	iString=aString.AllocL(); // copy given string into own descriptor
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/CreateStaticDLL_invariant.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.h
+*
+*/
+
+ 
+
+#include <e32cons.h>
+
+
+class CMessenger : public CBase
+  	{
+public:
+		// Construction
+	IMPORT_C static CMessenger* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+		// Destructor - virtual and class not intended
+		// for derivation, so not exported
+	~CMessenger();
+		// general functions - exported
+	IMPORT_C void ShowMessage();
+private:
+		// C++ constructor - not exported;
+		// implicitly called from NewLC()
+	CMessenger(CConsoleBase& aConsole);
+		// 2nd phase construction, called by NewLC()
+	void ConstructL(const TDesC& aString); // second-phase constructor
+private:
+	CConsoleBase& iConsole; // Use the console (but not owned)
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/CreateStaticDLL_invariant.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.mmp
+*
+*/
+
+
+TARGET        createstaticdll_invariant.dll
+TARGETTYPE    dll
+
+UID             0xE800004C
+CAPABILITY   All -TCB
+
+
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        CreateStaticDLL_invariant.cpp
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/techview
+
+LIBRARY       euser.lib
+
+// Dummy resource entry to exercise the resource build in a BV context
+START RESOURCE	dummy.rss
+TARGET			dummy_inv.rsc
+HEADER
+TARGETPATH		/resource/apps
+END
+
+#if defined(WINS)
+    deffile ../CREATESTATICDLLWINS.def
+#else
+    deffile ../CREATESTATICDLLARM.def
+#endif
+nostrictdef
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/CreateStaticLib.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticLib.cpp
+*
+*/
+
+
+void bv_static_lib_function(void)
+{
+	int x = 1;
+	int y = 8;
+	int z = 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/CreateStaticLib.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticLib.mmp
+*
+*/
+
+
+TARGET        bv_static_lib.lib
+TARGETTYPE    lib
+
+SOURCEPATH    .
+SOURCE        CreateStaticLib.cpp
+SYSTEMINCLUDE /epoc32/include
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/invariant/dummy.rss	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// dummy.rss
+
+NAME DUMM
+
+#include <eikon.rh>
+#include <eikcore.rsg>
+#include <appinfo.rh>
+
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+RESOURCE TBUF r_dummy_text { buf="Dummy!"; }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/listA.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+A_1
+A_2
+A_3
+_A_1_
+_A_2_
+_A_3_
+A_LONGER_NAME_THAN_YOU_MIGHT_EXPECT_HERE_MAYBE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/listB.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,11 @@
+B
+B_1
+B_10
+B_100
+B_1000
+B_10000
+B_100000
+B_1000000
+B_10000000
+B_100000000
+B_1000000000
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/release/dummy.lib	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1 @@
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/release/fake.lib	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1 @@
+0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/var1/var1.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// included from test/bv/var1.hrh defines A_3 and B_100 used in source
+
+#define A_1
+#define A_3
+#define A_5
+#define B_1
+#define B_100
+#define B_10000
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/var2/var2.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// included from test/bv/var2.hrh defines A_3 used in source
+
+#define A_1
+#define A_2
+#define A_3
+#define A_4
+#define A_5
+#define A_once
+#define A_i
+#define A_caught
+#define A_a
+#define A_fish
+#define A_alive
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/var3/var3.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// included from test/bv/var3.hrh defines A_3 used in source
+
+#define A_1
+#define A_2
+#define A_3
+#define A_4
+#define A_5
+#define A_once
+#define A_i
+#define A_caught
+#define A_a
+#define A_fish
+#define A_alive
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant1/CreateStaticDLL_variant1.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.cpp
+* This program creates a dll.
+*
+*/
+
+
+#include "CreateStaticDLL_variant1.h"
+#include <e32uid.h>
+
+// construct/destruct
+
+EXPORT_C CMessenger* CMessenger::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+	{
+	CMessenger* self=new (ELeave) CMessenger(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL(aString);
+	return self;
+	}
+
+CMessenger::~CMessenger() // destruct - virtual, so no export
+	{
+	delete iString;
+	}
+
+EXPORT_C void CMessenger::ShowMessage()
+	{
+#ifdef A_3
+// use a builtin macro to test a cpp defect
+#ifdef __FILE__
+	_LIT(KFormat1,"A_3 %S\n");
+#endif
+#else
+// use a builtin macro to test a cpp defect
+#ifdef __LINE__
+	_LIT(KFormat1,"not A_3 %S\n");
+#endif
+#endif
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+// constructor support
+// don't export these, because used only by functions in this DLL, eg our NewLC()
+
+CMessenger::CMessenger(CConsoleBase& aConsole) // first-phase C++ constructor
+	: iConsole(aConsole)
+	{
+	}
+
+void CMessenger::ConstructL(const TDesC& aString) // second-phase constructor
+	{
+	iString=aString.AllocL(); // copy given string into own descriptor
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant1/CreateStaticDLL_variant1.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.h
+*
+*/
+
+ 
+
+#include <e32cons.h>
+
+
+class CMessenger : public CBase
+  	{
+public:
+		// Construction
+	IMPORT_C static CMessenger* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+		// Destructor - virtual and class not intended
+		// for derivation, so not exported
+	~CMessenger();
+		// general functions - exported
+	IMPORT_C void ShowMessage();
+private:
+		// C++ constructor - not exported;
+		// implicitly called from NewLC()
+	CMessenger(CConsoleBase& aConsole);
+		// 2nd phase construction, called by NewLC()
+	void ConstructL(const TDesC& aString); // second-phase constructor
+private:
+	CConsoleBase& iConsole; // Use the console (but not owned)
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant1/CreateStaticDLL_variant1.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.mmp
+*
+*/
+
+
+TARGET        createstaticdll_variant1.dll
+TARGETTYPE    dll
+
+UID             0xE800004C
+CAPABILITY   All -TCB
+
+
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        CreateStaticDLL_variant1.cpp
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/techview
+
+LIBRARY       euser.lib
+// static libs are always feature invariant
+STATICLIBRARY bv_static_lib
+
+// Dummy resource entry to exercise the resource build in a BV context
+START RESOURCE	dummy.rss
+TARGET			dummy_var1.rsc
+HEADER
+TARGETPATH		/resource/apps
+END
+
+FEATUREVARIANT
+
+#if defined(WINS)
+    deffile ../CREATESTATICDLLWINS.def
+#else
+    deffile ../CREATESTATICDLLARM.def
+#endif
+nostrictdef
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant1/dummy.rss	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// dummy.rss
+
+NAME DUMM
+
+#include <eikon.rh>
+#include <eikcore.rsg>
+#include <appinfo.rh>
+
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+RESOURCE TBUF r_dummy_text { buf="Dummy!"; }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant2/CreateStaticDLL_variant2.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.cpp
+* This program creates a dll.
+*
+*/
+
+
+#include "CreateStaticDLL_variant2.h"
+#include <e32uid.h>
+
+// construct/destruct
+
+EXPORT_C CMessenger* CMessenger::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+	{
+	CMessenger* self=new (ELeave) CMessenger(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL(aString);
+	return self;
+	}
+
+CMessenger::~CMessenger() // destruct - virtual, so no export
+	{
+	delete iString;
+	}
+
+EXPORT_C void CMessenger::ShowMessage()
+	{
+#ifdef B_100
+	_LIT(KFormat1,"B_100 %S\n");
+#else
+	_LIT(KFormat1,"%S\n");
+#endif
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+// constructor support
+// don't export these, because used only by functions in this DLL, eg our NewLC()
+
+CMessenger::CMessenger(CConsoleBase& aConsole) // first-phase C++ constructor
+	: iConsole(aConsole)
+	{
+	}
+
+void CMessenger::ConstructL(const TDesC& aString) // second-phase constructor
+	{
+	iString=aString.AllocL(); // copy given string into own descriptor
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant2/CreateStaticDLL_variant2.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.h
+*
+*/
+
+ 
+
+#include <e32cons.h>
+
+
+class CMessenger : public CBase
+  	{
+public:
+		// Construction
+	IMPORT_C static CMessenger* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+		// Destructor - virtual and class not intended
+		// for derivation, so not exported
+	~CMessenger();
+		// general functions - exported
+	IMPORT_C void ShowMessage();
+private:
+		// C++ constructor - not exported;
+		// implicitly called from NewLC()
+	CMessenger(CConsoleBase& aConsole);
+		// 2nd phase construction, called by NewLC()
+	void ConstructL(const TDesC& aString); // second-phase constructor
+private:
+	CConsoleBase& iConsole; // Use the console (but not owned)
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant2/CreateStaticDLL_variant2.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.mmp
+*
+*/
+
+
+TARGET        createstaticdll_variant2.dll
+TARGETTYPE    dll
+
+UID             0xE800004C
+CAPABILITY   All -TCB
+
+
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        CreateStaticDLL_variant2.cpp
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/techview
+
+LIBRARY       euser.lib
+
+// Dummy resource entry to exercise the resource build in a BV context
+START RESOURCE	dummy.rss
+TARGET			dummy_var2.rsc
+HEADER
+TARGETPATH		/resource/apps
+END
+
+FEATUREVARIANT
+
+#if defined(WINS)
+    deffile ../CREATESTATICDLLWINS.def
+#else
+    deffile ../CREATESTATICDLLARM.def
+#endif
+nostrictdef
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant2/dummy.rss	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// dummy.rss
+
+NAME DUMM
+
+#include <eikon.rh>
+#include <eikcore.rsg>
+#include <appinfo.rh>
+
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+RESOURCE TBUF r_dummy_text { buf="Dummy!"; }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant3/CreateEXE_variant3.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This program creates an exe.
+*
+*/
+
+
+#include "CreateEXE_variant3.h"
+#include <e32uid.h>
+
+// construct/destruct
+
+EXPORT_C CMessenger* CMessenger::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+	{
+	CMessenger* self=new (ELeave) CMessenger(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL(aString);
+	return self;
+	}
+
+CMessenger::~CMessenger() // destruct - virtual, so no export
+	{
+	delete iString;
+	}
+
+TInt E32Main()
+{
+	return 0;
+}
+
+EXPORT_C void CMessenger::ShowMessage()
+	{
+#ifdef B_100
+	_LIT(KFormat1,"B_100 %S\n");
+#else
+	_LIT(KFormat1,"%S\n");
+#endif
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+// constructor support
+// don't export these, because used only by functions in this EXE, eg our NewLC()
+
+CMessenger::CMessenger(CConsoleBase& aConsole) // first-phase C++ constructor
+	: iConsole(aConsole)
+	{
+	}
+
+void CMessenger::ConstructL(const TDesC& aString) // second-phase constructor
+	{
+	iString=aString.AllocL(); // copy given string into own descriptor
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant3/CreateEXE_variant3.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+#include <e32cons.h>
+
+
+class CMessenger : public CBase
+  	{
+public:
+		// Construction
+	IMPORT_C static CMessenger* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+		// Destructor - virtual and class not intended
+		// for derivation, so not exported
+	~CMessenger();
+		// general functions - exported
+	IMPORT_C void ShowMessage();
+private:
+		// C++ constructor - not exported;
+		// implicitly called from NewLC()
+	CMessenger(CConsoleBase& aConsole);
+		// 2nd phase construction, called by NewLC()
+	void ConstructL(const TDesC& aString); // second-phase constructor
+private:
+	CConsoleBase& iConsole; // Use the console (but not owned)
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant3/CreateEXE_variant3.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        createexe_variant3.exe
+TARGETTYPE    exe
+
+UID             0xE800004C
+CAPABILITY   All -TCB
+
+
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        CreateEXE_variant3.cpp
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/techview
+
+LIBRARY       euser.lib
+
+// Dummy resource entry to exercise the resource build in a BV context
+START RESOURCE	dummy.rss
+TARGET			dummy_var3.rsc
+HEADER
+TARGETPATH		/resource/apps
+END
+
+FEATUREVARIANT
+
+#if defined(WINS)
+    deffile ../CREATESTATICDLLWINS.def
+#else
+    deffile ../CREATESTATICDLLARM.def
+#endif
+nostrictdef
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/variant3/dummy.rss	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// dummy.rss
+
+NAME DUMM
+
+#include <eikon.rh>
+#include <eikcore.rsg>
+#include <appinfo.rh>
+
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+RESOURCE TBUF r_dummy_text { buf="Dummy!"; }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/with_errors.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// this file has cpp errors
+//
+#error this code is broken
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/with_macros.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// this file uses feature variant macros
+//
+#ifdef A_1
+#ifdef B_1000
+int x = 1;
+#endif
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/bv/without_macros.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// this file uses no feature variant macros
+//
+int y = 1;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/checksource/commonframework/CommonFramework.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+#ifndef __CommonFramework_H
+#define __CommonFramework_H
+
+#include <e32Base.h>
+#include <e32cons.h>
+
+_LIT(KTxtEPOC32EX,"EXAMPLES");
+_LIT(KTxtExampleCode,"Symbian OS Example Code");
+_LIT(KFormatFailed,"failed: leave code=%d");
+_LIT(KTxtOK,"ok");
+_LIT(KTxtPressAnyKey," [press any key]");
+
+// public
+LOCAL_D CConsoleBase* console; // write all your messages to this
+LOCAL_C void doExampleL(); // code this function for the real example
+
+// private
+LOCAL_C void callExampleL(); // initialize with cleanup stack, then do example
+
+GLDEF_C TInt E32Main() // main function called by E32
+    {
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
+	TRAPD(error,callExampleL()); // more initialization, then do example
+	__ASSERT_ALWAYS(!error,User::Panic(KTxtEPOC32EX,error));
+	delete cleanup; // destroy clean-up stack
+	__UHEAP_MARKEND;
+	return 0; // and return
+    }
+
+LOCAL_C void callExampleL() // initialize and call example code under cleanup stack
+    {
+	console=Console::NewL(KTxtExampleCode,TSize(KConsFullScreen,KConsFullScreen));
+	CleanupStack::PushL(console);
+	TRAPD(error,doExampleL()); // perform example function
+	if (error)
+		console->Printf(KFormatFailed, error);
+	else
+		console->Printf(KTxtOK);
+	console->Printf(KTxtPressAnyKey);
+	console->Getch(); // get and ignore character
+	CleanupStack::PopAndDestroy(); // close console
+    }
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/checksource/helloworld/Bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_MMPFILES
+
+HelloWorld.mmp
+HelloWorld2.mmp
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/checksource/helloworld/HelloWorld.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        HelloWorld.exe
+TARGETTYPE    exe
+UID           0xE8000047
+VENDORID 0x70000001
+
+SOURCEPATH    ..\Source
+SOURCE        helloWorld.cpp
+
+USERINCLUDE   .
+USERINCLUDE   ..\commonframework
+SYSTEMINCLUDE \epoc32\include
+
+LINKEROPTION CW --verbose
+
+LIBRARY       euser.lib
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/checksource/helloworld/HelloWorld2.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        HelloWorld2.exe
+TARGETTYPE    exe
+UID           0xE8000047
+VENDORID 0x70000001
+
+SOURCEPATH    ..\source
+SOURCE        Helloworld.cpp
+
+USERINCLUDE   .
+USERINCLUDE   ..\commonframework
+SYSTEMINCLUDE \epoc32\include
+
+LIBRARY       euser.lib
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/checksource/source/HelloWorld.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "CommonFramework.H"
+
+// do the example
+LOCAL_C void doExampleL()
+    {
+	_LIT(KHelloWorldText,"Hello world!\n");
+	console->Printf(KHelloWorldText);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/configpathtest/v2/variant2.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+  <!-- This variant is used for testing purposes -->
+  <var name="configpathtest2">
+	<set name='D' value='1'/>
+  </var>
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/configpathtest/v3/variant3.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+       
+  <!-- This variant is used for testing purposes -->
+  <var name="configpathtest3">
+	<set name='S' value='3'/>
+	<append name="CDEFS" value="TESTPASSED" />
+  </var>
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/defs/eabi/deftestu.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1 @@
+EXPORTS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/defs/group/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7
+
+PRJ_MMPFILES
+deftest.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/defs/group/deftest.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+target		deftest
+targettype		dll
+
+source	test.cpp 
+unpaged
+macro __TESTNAME__="deftest"
+
+deffile  deftest.def
+uid 0x1000008d 0x100039e5
+VENDORID 0x70000001
+capability		all
+unpaged
+epocallowdlldata
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/defs/group/e32def.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2870 @@
+/*
+* Copyright (c) 1994-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32\include\e32def.h
+* NOTE: THIS FILE SHOULD BE ACCEPTABLE TO A C COMPILER
+*
+*/
+
+
+
+
+#ifndef __E32DEF_H__
+#define __E32DEF_H__
+
+/*
+ * __LEAVE_EQUALS_THROW__ requires the compiler to support C++ exceptions
+ */
+#ifndef __SUPPORT_CPP_EXCEPTIONS__
+#undef __LEAVE_EQUALS_THROW__
+#endif
+
+
+
+
+
+#ifdef __PROFILING__
+
+/**
+@publishedPartner
+@removed
+*/
+#define __PROFILE_START(aBin) RDebug::ProfileStart(aBin)
+
+/**
+@publishedPartner
+@removed
+*/
+#define __PROFILE_END(aBin)   RDebug::ProfileEnd(aBin)
+
+/**
+@publishedPartner
+@removed
+*/
+#define __PROFILE_RESET(aNumberOfBins) RDebug::ProfileReset(0,aNumberOfBins)
+
+/**
+@publishedPartner
+@removed
+*/
+#define __PROFILE_DISPLAY(aNumberOfBins) \
+			{	TFixedArray<TProfile, aNumberOfBins> result; \
+				RDebug::ProfileResult(result.Begin(), 0, aNumberOfBins); \
+				for (TInt i=0; i<aNumberOfBins; i++)   \
+				RDebug::Print(_L("Profile bin %d:  Calls: %d, Clock ticks: %d\n" ),i,res[i].iCount,result[i].iTime);  \
+			}
+#else /* __PROFILING__ */
+#define __PROFILE_START(aBin) 
+#define __PROFILE_END(aBin)   
+#define __PROFILE_RESET(aNumberOfBins) 
+#define __PROFILE_DISPLAY(aNumberOfBins)
+#endif
+
+
+
+#if defined(__VC32__)
+/**
+@publishedAll
+@released
+*/
+#define __NO_CLASS_CONSTS__
+#if (_MSC_VER >= 1200)
+/**
+@publishedAll
+@released
+*/
+#define __NORETURN__ __declspec(noreturn)
+#else
+#define __NORETURN__
+#endif
+/**
+@publishedAll
+@released
+*/
+#define __NORETURN_TERMINATOR()
+/**
+@publishedAll
+@released
+*/
+#define IMPORT_C __declspec(dllexport)
+/**
+@publishedAll
+@released
+*/
+#define EXPORT_C __declspec(dllexport)
+/**
+@publishedAll
+@released
+*/
+#define NONSHARABLE_CLASS(x) class x
+/**
+@publishedAll
+@released
+*/
+#define NONSHARABLE_STRUCT(x) struct x
+/**
+@publishedAll
+@released
+*/
+#define __NO_THROW throw()
+/**
+@publishedAll
+@released
+*/
+#define __THROW(t) throw(t)
+#pragma warning( disable : 4355 )	/* 'this' used in base member initializer list */
+#pragma warning( disable : 4511 )	/* copy constructor could not be generated */
+#pragma warning( disable : 4512 )	/* assignment operator could not be generated */
+#pragma warning( disable : 4514 )	/* unreferenced inline function has been removed */
+#pragma warning( disable : 4699 )	/* Note: Using precompiled header %s */
+#pragma warning( disable : 4710 )	/* function not inlined */
+#pragma warning( disable : 4121 )	/* alignment sensitive to packing */
+#pragma warning( disable : 4273 )
+#pragma warning( disable : 4097 )	/* typedef-name 'identifier1' used as synonym for class-name 'identifier2' */
+#pragma warning( disable : 4291 )	/* 'TAny *CBase::operator new(TUint,TLeave)' : no matching operator delete found; memory will not be freed if initialization throws an exception */
+
+#if _MSC_VER  >= 1100
+/**
+@publishedAll
+@released
+*/
+#define TEMPLATE_SPECIALIZATION template<>
+#else
+#define TEMPLATE_SPECIALIZATION
+#endif
+#endif
+
+
+
+#if defined(__CW32__)
+#undef __embedded_cplusplus
+/** @internalTechnology */
+#define __embedded_cplusplus	1
+#define __NO_CLASS_CONSTS__
+#define __NORETURN__
+#define __NORETURN_TERMINATOR()
+#define IMPORT_C __declspec(dllexport)
+#define EXPORT_C __declspec(dllexport)
+#define NONSHARABLE_CLASS(x) class x
+#define NONSHARABLE_STRUCT(x) struct x
+#define __NO_THROW throw()
+#define __THROW(t) throw(t)
+
+#define TEMPLATE_SPECIALIZATION template<>
+/**
+@publishedAll
+@released
+*/
+#define _asm	asm
+#ifndef __int64
+#pragma longlong on
+/** @internalTechnology */
+#define __int64  long long
+#endif
+#ifndef __SUPPORT_CPP_EXCEPTIONS__
+#pragma exceptions off    /* no support for C++ exception handling */
+#pragma RTTI off          /* no support for C++ runtime type information */
+#endif
+#if __MWERKS__ >= 0x3200
+#pragma warning off (10480)	/* deleteing void pointer is undefined */
+#pragma warning off (10350) /* N pad byte(s) inserted after data member */
+#endif
+#endif
+
+
+
+#if defined(__GCC32__)
+#define __NO_CLASS_CONSTS__
+#define __NORETURN__  __attribute__ ((noreturn))
+#ifdef __GCCV3__
+#define __NORETURN_TERMINATOR()
+#else
+#define __NORETURN_TERMINATOR()		abort()
+#endif
+#define IMPORT_C
+#if !defined __WINS__ && defined _WIN32 /* VC++ Browser Hack */
+#define EXPORT_C
+/** @internalTechnology */
+#define asm(x)
+#else
+#define EXPORT_C __declspec(dllexport)
+#endif
+#define NONSHARABLE_CLASS(x) class x
+#define NONSHARABLE_STRUCT(x) struct x
+#define __NO_THROW
+#define __THROW(t)
+#ifdef __EABI__
+#define TEMPLATE_SPECIALIZATION template<>
+#else
+#define TEMPLATE_SPECIALIZATION
+#endif
+#endif
+
+
+
+#ifdef __GCC32__
+/**
+@publishedAll
+@released
+*/
+#define __DOUBLE_WORDS_SWAPPED__
+#endif
+
+
+
+/** @internalTechnology */
+#define __NO_MUTABLE_KEYWORD
+#if defined(__NO_MUTABLE_KEYWORD)
+/**
+@publishedAll
+@deprecated
+*/
+#define __MUTABLE
+#else
+#define __MUTABLE mutable
+#endif
+
+
+
+/**
+@publishedAll
+@deprecated
+*/
+#define CONST_CAST(type,exp) (const_cast<type>(exp))
+
+/**
+@publishedAll
+@deprecated
+*/
+#define STATIC_CAST(type,exp) (static_cast<type>(exp))
+
+/**
+@publishedAll
+@deprecated
+*/
+#define REINTERPRET_CAST(type,exp) (reinterpret_cast<type>(exp))
+
+#if defined(__NO_MUTABLE_KEYWORD)
+/**
+@publishedAll
+@deprecated
+*/
+#define MUTABLE_CAST(type,exp) (const_cast<type>(exp))
+#else
+#define MUTABLE_CAST(type,exp) (exp)
+#endif
+
+/**
+@publishedAll
+@deprecated
+*/
+#define GLREF_D extern
+/**
+@publishedAll
+@deprecated
+*/
+#define GLDEF_D
+/**
+@publishedAll
+@deprecated
+*/
+#define LOCAL_D static
+/**
+@publishedAll
+@deprecated
+*/
+#define GLREF_C extern
+/**
+@publishedAll
+@deprecated
+*/
+#define GLDEF_C
+/**
+@publishedAll
+@deprecated
+*/
+#define LOCAL_C static
+/**
+@publishedAll
+@deprecated
+*/
+#define FOREVER for(;;)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Symbolic definition for a true value.
+*/
+#define TRUE 1
+
+
+
+
+/**
+@publishedAll
+@released
+
+Symbolic definition for a false value.
+*/
+#define FALSE 0
+#ifndef NULL
+
+
+
+
+/**
+@publishedAll
+@released
+
+Symbolic definition for a NULL value.
+*/
+#define NULL 0
+#endif
+
+
+
+
+#ifndef VA_START
+/**
+@publishedAll
+@released
+
+A macro used by Symbian OS code for handling a variable argument list
+in a function call.
+
+Sets a pointer to point to the first of the variable arguments.
+
+Typical usage:
+
+@code
+Foo(CAbcdef aAbcdef,...)
+   {
+   VA_LIST list;
+   VA_START(list, aAbcdef);
+   // other code
+   } 
+@endcode
+
+@param ap   A pointer used to hold the address of an argument in
+            the variable argument list. After execution of the code generated 
+            by this macro, the pointer points to the first argument in
+            the variable argument list.
+            This symbol is usually declared as a VA_LIST type. 
+
+@param pn   The argument that immediately precedes the variable argument list.
+
+@see VA_LIST
+@see VA_ARG
+*/
+#define VA_START(ap,pn) ((ap)[0]=(TInt8 *)&pn+((sizeof(pn)+sizeof(TInt)-1)&~(sizeof(TInt)-1)),(void)0)
+#endif
+
+
+
+
+#ifndef VA_ARG
+/**
+@publishedAll
+@released
+
+A macro used by Symbian OS code for handling a variable argument list
+in a function call.
+
+Increments a pointer to a variable argument list to point to the next argument
+in the list. The current argument is assumed to be of a type defined by
+the second parameter to this macro.
+
+Typical usage:
+
+@code
+Foo(CAbcdef aAbcdef,...)
+   {
+   VA_LIST list;
+   VA_START(list, aAbcdef);
+   ...
+   TInt x = VA_ARG(list,TInt);
+   ...
+   const TDesC *pS=VA_ARG(aList,const TDesC*);
+   ... 
+   etc
+   } 
+@endcode
+
+@param ap   A pointer used to hold the address of an argument in
+            the variable argument list. It is assumed to point to the current
+            argument in the variable argument list. After execution of the code
+            generated by this macro, the pointer points to the next argument in
+            the list. This symbol is usually declared as a VA_LIST type. 
+
+@param type The type of the current argument.
+            This can be any valid type, for example, TInt, const TDesC*, etc.
+            
+@see VA_LIST
+@see VA_START            
+*/
+#define VA_ARG(ap,type) ((ap)[0]+=((sizeof(type)+sizeof(TInt)-1)&~(sizeof(TInt)-1)),(*(type *)((ap)[0]-((sizeof(type)+sizeof(TInt)-1)&~(sizeof(TInt)-1)))))
+#endif
+
+
+
+
+#ifndef VA_END
+/**
+@publishedAll
+@released
+
+A macro used by Symbian OS code for handling a variable argument list
+in a function call.
+
+Sets a pointer to zero.
+
+@param ap   A pointer used to hold the address of an argument in
+            the variable argument list. After execution of the code generated 
+            by this macro, the pointer is reset to 0.
+            This symbol is usually declared as a VA_LIST type. 
+            
+@see VA_LIST
+@see VA_START
+@see VA_ARG            
+*/
+#define VA_END(ap) ((ap)[0]=0,(void)0)
+#endif
+	
+
+
+/**
+@publishedAll
+@released
+
+Calculates the offset of member f within class c.
+
+This is used in the TSglQue and TDblQue constructors to set the offset of
+the link object from the start of a list element.
+
+@param c The name of the class.
+@param f The name of the member within the specified class.
+
+@see TSglQue
+@see TDblQue
+*/
+#ifndef _FOFF
+#define _FOFF(c,f)			(((TInt)&(((c *)0x1000)->f))-0x1000)
+#endif
+
+
+
+/**
+@internalTechnology
+@released
+*/
+#define _ALIGN_DOWN(x,a)	((x)&~((a)-1))
+/**
+@internalTechnology
+@released
+*/
+#define _ALIGN_UP(x,a)		_ALIGN_DOWN((x)+(a)-1, a)
+
+
+
+
+/** 
+@publishedAll
+@released
+
+Pointer to any type.
+
+TAny* is equivalent to void* in standard C or C++. TAny* is used in preference 
+to void* because it is more suggestive of the actual meaning,
+e.g. TAny* foo();.
+
+TAny is not used where it really means "nothing", as in the declaration of 
+functions which do not return a value; void is used instead, e.g. void Foo();.
+*/
+typedef void TAny;
+
+
+
+
+/**
+@publishedAll
+@released
+
+8-bit signed integer type, used in Symbian OS to mean an 8-bit
+signed integer, independent of the implementation.
+*/
+typedef signed char TInt8;
+
+
+
+
+/**
+@publishedAll
+@released
+
+8-bit unsigned integer type; used in Symbian OS to mean an 8-bit
+unsigned integer, independent of the implementation.
+*/
+typedef unsigned char TUint8;
+
+
+
+
+/**
+@publishedAll
+@released
+
+16-bit signed integer type, used in Symbian OS to mean a 16-bit
+signed integer, independent of the implementation.
+*/
+typedef short int TInt16;
+
+
+
+
+/**
+@publishedAll
+@released
+
+16-bit unsigned integer type. used in Symbian OS to mean a 16-bit
+unsigned integer, independent of the implementation.
+*/
+typedef unsigned short int TUint16;
+
+
+
+
+/**
+@publishedAll
+@released
+
+32-bit signed integer type, used in Symbian OS to mean a 32-bit
+signed integer, independent of the implementation.
+*/
+typedef long int TInt32;
+
+
+
+
+/**
+@publishedAll
+@released
+
+32-bit unsigned integer type; used in Symbian OS to mean a 32-bit
+unsigned integer, independent of the implementation.
+*/
+typedef unsigned long int TUint32;
+
+
+
+
+/**
+@publishedAll
+@released
+
+Signed integer type of the natural machine word length.
+
+This is as defined by the C++ implementation's int type. In all
+implementations, this is guaranteed to be at least 32 bits.
+
+A TInt should be used in preference to a sized integer (TInt32, TInt16) for 
+all general use. Sized integers should only be used when packing is essential. 
+C++'s type conversion rules imply that all sized integers smaller than the 
+natural machine word are in any case broadened to the natural machine word 
+size when passed as function parameters.
+
+A TInt should be used in preference to an unsigned integer (TUint) for all 
+general use. Unsigned integers should only be used for flags (which use Boolean 
+operations but not arithmetic) and, in very rare cases, for numbers whose 
+range exceeds that available from signed integers. Although it is natural 
+to attempt to use unsigned integers for quantities which cannot by nature 
+be negative, the C++ language does not provide the support necessary to enforce 
+the "expected" behaviour in these circumstances, and experience has shown 
+that it is better to use signed integers unless there is good reason not to.
+
+@see TUint
+@see TInt32
+@see TInt16
+*/
+typedef signed int TInt;
+
+
+
+
+/**
+@publishedAll
+@released
+
+Unsigned integer type of the natural machine word length. 
+
+This is guaranteed to be at least 32 bits in all implementations.
+
+In almost all circumstances, a TInt should be used in preference to a TUint. 
+The main exception is in flags bytes.
+
+@see TInt
+*/
+typedef unsigned int TUint;
+
+
+
+
+/**
+@publishedAll
+@released
+
+32-bit floating point number, providing IEEE754 single precision on all Symbian 
+OS implementations.
+
+TReal should normally be used in preference to TReal32.
+
+Use of floating-point numbers should generally be avoided unless a natural 
+part of the problem specification. Most Symbian OS implementations do not 
+have a hardware floating point unit: as a result, their floating-point performance 
+is hundreds of times slower than integer performance.
+*/
+typedef float TReal32;
+
+
+
+
+/**
+@publishedAll
+@released
+
+64-bit floating point number, providing IEEE754 double precision on all Symbian 
+OS implementations.
+
+Use of floating-point numbers should generally be avoided unless a natural 
+part of the problem specification. Most Symbian OS implementations do not 
+have a hardware floating point unit: as a result, their floating-point performance 
+is hundreds of times slower than integer performance.
+
+This type is identical to TReal.
+
+@see TReal
+*/
+typedef double TReal64;
+
+
+
+
+/**
+@publishedAll
+@released
+
+64-bit floating point number; identical to TReal64.
+
+Use of floating-point numbers should generally be avoided unless a natural 
+part of the problem specification. Most Symbian OS implementations do not 
+have a hardware floating point unit: as a result, their floating-point performance 
+is hundreds of times slower than integer performance.
+
+Most serious floating-point calculations require double-precision. All standard 
+math functions (see Math class) take double-precision arguments. Single-precision 
+should only be used where space and performance are at a premium, and when 
+their limited precision is acceptable.
+
+@see TReal64
+@see Math
+*/
+typedef double TReal;
+
+
+
+
+/**
+@publishedAll
+@released
+
+8-bit unsigned character.
+
+Use instead of C++ built-in char type because it is guaranteed to be unsigned. 
+Use instead of TInt8 where the application is really for text rather than 
+8-bit arithmetic or binary quantities.
+
+For most purposes, you should use TText rather than TText8. TText is mapped 
+onto either TText8 or TText16 depending on whether a non-Unicode or Unicode 
+variant is being built. Use TText8 only when you are dealing explicitly with 
+8-bit text, regardless of build.
+
+@see TText */
+typedef unsigned char TText8;
+
+
+
+
+/**
+@publishedAll
+@released
+
+16-bit unsigned character.
+
+Use instead of C++ wchar_t type because it is guaranteed to be unsigned. Use 
+instead of TInt16 where the application is really for text rather than 8-bit 
+arithmetic or binary quantities.
+
+For most purposes, you should use TText rather than TText16. TText is mapped 
+onto either TText8 or TText16 depending on whether a non-Unicode or Unicode 
+variant is being built. Use TText16 only when you are dealing explicitly with 
+16-bit text, regardless of build.
+
+@see TText
+*/
+typedef unsigned short int TText16;
+
+
+
+
+/**
+@publishedAll
+@released
+
+Boolean type which takes the value either ETrue or EFalse.
+
+Although only a single bit would theoretically be necessary to represent a 
+Boolean, a machine word is used instead, so that these quantities can be easily 
+passed. Also, TBool must map onto int because of C++'s interpretation of 
+operands in conditional expressions.
+
+On implementations of Symbian OS in which the compiler supports the ANSI-recommended 
+bool type, TBool will be typedef'ed to bool instead of int.
+*/
+typedef int TBool;
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Defines a linear (virtual) address type.
+*/
+typedef TUint32 TLinAddr;
+
+/**
+@internalTechnology
+
+A sorted list of all the code segments in ROM that contain an Exception Descriptor.
+
+*/
+typedef struct TRomExceptionSearchTable
+	{
+	/**
+	The number of entries in the following table.
+	*/
+	TInt32 iNumEntries;
+	
+	/**
+	Address of the code segment of each TRomImageHeader that has an Exception Descriptor.
+	*/
+	TLinAddr iEntries[1];
+	} TRomExceptionSearchTable;
+
+/**
+@internalComponent
+*/
+typedef struct TExceptionDescriptor 
+	{
+	TLinAddr iExIdxBase;
+	TLinAddr iExIdxLimit;
+	TLinAddr iROSegmentBase;
+	TLinAddr iROSegmentLimit;
+	} TExceptionDescriptor;
+
+
+#if defined(__GCC32__)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines a 64-bit signed integer type.
+*/
+typedef long long Int64;
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines a 64-bit unsigned integer type.
+*/
+typedef unsigned long long Uint64;
+
+
+
+
+/**
+@publishedAll
+@released
+*/
+#define	I64LIT(x)	x##LL
+/**
+@publishedAll
+@released
+*/
+#define	UI64LIT(x)	x##ULL
+
+#elif defined(__VC32__)
+typedef __int64 Int64;
+typedef unsigned __int64 Uint64;
+#define	I64LIT(x)	(__int64)##x
+#define	UI64LIT(x)	(unsigned __int64)##x
+
+#elif defined(__CW32__)
+#pragma longlong on
+typedef long long Int64;
+typedef unsigned long long Uint64;
+#define	I64LIT(x)	x##LL
+#define	UI64LIT(x)	x##ULL
+#endif
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines a 64-bit signed integer type.
+
+NOTE: For those migrating from versions of Symbian OS before 8.1b (i.e. 8.1a, 7.0s etc)
+TInt64 is now defined as a built-in type instead of as a class type. This means
+that the member functions of the old TInt64 class are no longer exported
+from EUSER.LIB, and represents a compatibility break.
+
+To ease migration of source code, a number of macros are provided. Similar
+macros have also been defined in Symbian OS versions 7.0s and 8.1a, but
+implemented in terms of the old TInt64 class. This is important for code that
+is common to : one or both of these Symbian OS versions, and to 8.1b and
+subsequent versions.
+
+The following list shows the new macros and the functions that they replace.
+It also shows some alternative techniques.
+In this list: x, v and r are declared as TInt64, c is declared as TInt, High
+and Low are declared as TUint.
+
+@code
+OLD USAGE						REPLACEMENT
+
+TInt64(High,Low);				MAKE_TINT64(High,Low);
+x.Set(High,Low);				MAKE_TINT64(High,Low);
+x.Low();						I64LOW(x);
+x.High();						I64HIGH(x); 
+x.GetTInt();					I64INT(x); 
+x.GetTReal();					I64REAL(x); 
+x.Lsr(c);						I64LSR(x,c); 
+x.Mul10();						x*=10; 
+x.MulTop(a);					I64MULTOP(x,a); 
+x.DivMod(v,r);					r=x%v; x/=v;
+@endcode 
+*/
+typedef	Int64	TInt64;
+
+
+
+
+/**
+@publishedAll
+@released
+ 
+Defines a 64-bit unsigned integer type.
+*/
+typedef	Uint64	TUint64;
+
+
+
+
+/** @internalComponent */
+#define _MAKE_TINT64_ZX(x)	((TInt64)((TUint32)(x)))
+
+/** @internalComponent */
+#define _MAKE_TUINT64_ZX(x)	((TUint64)((TUint32)(x)))
+
+
+
+
+/**
+@publishedAll
+@released
+*/
+#define MAKE_TINT64(h,l)	( (_MAKE_TINT64_ZX(h)<<32) | _MAKE_TINT64_ZX(l) )
+
+
+
+
+/**
+@publishedAll
+@released
+*/
+#define MAKE_TUINT64(h,l)	( (_MAKE_TUINT64_ZX(h)<<32) | _MAKE_TUINT64_ZX(l) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to access the high order 32 bits of a 64 bit number.
+*/
+#define	I64HIGH(x)			( (TUint32)((x)>>32) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to access the low order 32 bits of a 64 bit number.
+*/
+#define	I64LOW(x)			( (TUint32)(x) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to cast a 64 bit value as an signed integer.
+*/
+#define	I64INT(x)			( (TInt)(x) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to cast a 64 bit value as a TReal type.
+*/
+#define	I64REAL(x)			( (TReal)(x) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to logically shift a 64 bit integer right.
+*/
+#define	I64LSR(x, shift)	( *reinterpret_cast<TUint64*>(&(x)) >>= (shift) )
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to multiply a 64 bit integer by 10.
+*/
+#define	I64MUL10(x)			( (x) *= 10 )
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to divide a 64 bit integer by another and find the remainder.
+*/
+#define	I64DIVMOD(x, divisor, remainder)	( ((remainder) = (x) % (divisor), (x) /= (divisor)) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to cast a double to a 64 bit integer.
+*/
+#define	I64DOUBLECAST(x)	( static_cast<TInt64>(x) )
+
+
+
+
+/**
+@publishedAll
+@deprecated Use _LIT8 instead.
+
+8-bit literal.
+
+The macro defines an explicit 8-bit constant literal which is suitable
+for non-Unicode literal text, regardless of the build.
+
+@see _L
+@see _LIT8
+@see _LIT
+*/
+#define _L8(a) (TPtrC8((const TText8 *)(a)))
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines an explicit 8-bit string which is suitable when non-Unicode text
+is required, regardless of the build.
+
+This is used by the deprecated literal descriptor _L8.
+*/
+#define _S8(a) ((const TText8 *)a)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Constructs a constant literal descriptor of type TLitC8<TInt> with
+the specified name and text.
+
+The 8-bit build variant is generated for both non-Unicode and Unicode builds.
+
+@param name The name of the C++ variable to be generated.
+@param s    The literal text enclosed within a pair of double quotes. 
+
+@see _LIT
+*/
+#define _LIT8(name,s) const static TLitC8<sizeof(s)> name={sizeof(s)-1,s}
+
+
+
+
+/**
+@publishedAll
+@deprecated Use _LIT16 instead.
+
+16-bit literal.
+
+The macro defines an explicit 16-bit constant literal which is suitable
+for Unicode literal text, regardless of the build.
+
+@see _L
+@see _LIT16
+@see _LIT
+*/
+#define _L16(a) (TPtrC16((const TText16 *)L ## a))
+
+
+
+/**
+@publishedAll
+@released
+
+Defines an explicit 16-bit string which is suitable when Unicode text
+is required, regardless of the build.
+
+This is used by the deprecated literal descriptor _L16.
+*/
+#define _S16(a) ((const TText16 *)L ## a)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Constructs a constant literal descriptor of type TLitC16<TInt> with
+the specified name and text.
+
+The 16-bit build variant is generated for both non-Unicode and Unicode builds.
+
+@param name The name of the C++ variable to be generated.
+@param s    The literal text enclosed within a pair of double quotes. 
+
+@see _LIT
+*/
+#define _LIT16(name,s) const static TLitC16<sizeof(L##s)/2> name={sizeof(L##s)/2-1,L##s}
+
+
+
+
+#if defined(_UNICODE) && !defined(__KERNEL_MODE__)
+/**
+@publishedAll
+@released
+
+Build independent general text character.
+
+In non-Unicode builds, this is mapped to TText8. In Unicode builds, this is 
+mapped to TText16. Use the classes with explicit width only when you wish 
+the width to be independent of the build variant.
+
+Use this class rather than TChar for general use.
+*/
+typedef TText16 TText;
+
+
+
+/**
+@publishedAll
+@deprecated Use _LIT instead.
+
+Build independent literal. 
+
+The macro defines either an 8-bit constant literal (for non-Unicode text),
+or a 16-bit constant literal (for Unicode text) depending on the build.
+
+@see _LIT
+@see _L16
+@see _L8
+*/
+#define _L(a) (TPtrC((const TText *)L ## a))
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines either an 8-bit string (for non-Unicode text),
+or a 16-bit string (for Unicode text) depending on the build.
+
+This is used by the deprecated build independent literal _L.
+*/
+#define _S(a) ((const TText *)L ## a)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Constructs a build independent constant literal descriptor of type TLitC<TInt>
+with the specified name and text.
+
+An 8-bit build variant is generated for a non-Unicode build;
+A 16-bit build variant is generated for a Unicode build.
+
+@param name The name of the C++ variable to be generated.
+@param s    The literal text enclosed within a pair of double quotes. 
+
+@see _LIT16
+@see _LIT8
+*/
+#define _LIT(name,s) const static TLitC<sizeof(L##s)/2> name={sizeof(L##s)/2-1,L##s}
+
+
+
+
+#else
+/**
+@publishedAll
+@released
+
+Build independent general text character.
+
+In non-Unicode builds, this is mapped to TText8. In Unicode builds, this is 
+mapped to TText16. Use the classes with explicit width only when you wish 
+the width to be independent of the build variant.
+
+Use this class rather than TChar for general use.
+*/
+typedef TText8 TText;
+
+
+
+/**
+@publishedAll
+@released
+
+@deprecated Use _LIT instead.
+
+Build independent literal. 
+
+The macro defines either an 8-bit constant literal (for non-Unicode text),
+or a 16-bit constant literal (for Unicode text) depending on the build.
+
+@see _LIT
+@see _L16
+@see _L8
+*/
+#define _L(a) (TPtrC((const TText *)(a)))
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines either an 8-bit string (for non-Unicode text),
+or a 16-bit string (for Unicode text) depending on the build.
+
+This is used by the deprecated build independent literal _L.
+*/
+#define _S(a) ((const TText *)a)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Constructs a build independent constant literal descriptor of type TLitC<TInt>
+with the specified name and text.
+
+An 8-bit build variant is generated for a non-Unicode build;
+A 16-bit build variant is generated for a Unicode build.
+
+@param name The name of the C++ variable to be generated.
+@param s    The literal text enclosed within a pair of double quotes. 
+
+@see _LIT16
+@see _LIT8
+*/
+#define _LIT(name,s) const static TLitC<sizeof(s)> name={sizeof(s)-1,s}
+#endif
+
+
+
+
+#ifndef __VA_LIST_defined
+/** 
+@publishedAll
+@released
+
+Defines a 'C' style array of pointers to TInt8 types.
+
+The type is most commonly used by code that needs to deal with a variable
+number of arguments passed to a function.
+
+@see TInt8
+*/
+typedef TInt8 *VA_LIST[1];
+#endif
+
+/** 
+@publishedAll
+@released
+
+Asserts that a condition is true.
+
+Code is generated for all builds.
+
+This macro is used as a C++ statement to assert the truth of some condition,
+and to take appropriate action if the condition is false. Unlike __ASSERT_DEBUG
+it is defined in both release and debug builds.
+
+The most common use for this macro is to check that the external environment of
+a function or class is behaving as expected; for example, that parameters
+passed to a function are credible, or that called functions are behaving as
+expected; the macro is commonly placed at the beginning of a function.
+
+The effect of the macro is to generate code which tests
+the conditional expression c; if the expression is false, then
+function p is called. In the majority of cases, the function p is one that
+raises a panic.
+
+Note that the macro definition is, in effect, equivalent to: 
+
+@code
+if !(c)p;
+@endcode
+
+@param c a conditional expression which results in true or false.
+@param p a function which is called if the conditional expression c is false.
+
+@see __ASSERT_DEBUG
+*/
+#define __ASSERT_ALWAYS(c,p) (void)((c)||(p,0))
+
+
+
+#ifdef __WINS__
+#ifdef __CW32__
+/** 
+@internalAll
+@released
+*/
+#define __BREAKPOINT()			\
+	{							\
+	__asm { byte 0xcc };		\
+	}
+#else // !__CW32__
+/** 
+@internalAll
+@released
+*/
+#define __BREAKPOINT()			\
+	{							\
+	__asm { int 3 };			\
+	}
+#endif //__CW32__
+#else
+/** 
+@internalAll
+@released
+*/
+#define __BREAKPOINT()
+#endif
+
+#if defined(_DEBUG)
+
+/** 
+@internalComponent
+@deprecated
+*/
+#define __ASSERT_DEBUG_MB(aCond,aPanicNo) (void)((aCond)||(PanicMB(aPanicNo,_L(#aPanicNo),_L(#aCond)),0))
+
+
+
+
+/** 
+@publishedAll
+@released
+
+Asserts that a condition is true.
+
+Code is generated for debug builds only.
+
+This macro is used as a C++ statement to assert the truth of some condition,
+and to take appropriate action if the condition is false. It is used in
+the same way as __ASSERT_ALWAYS, except that it is only defined for debug builds.
+
+The macro may be used to insert extra checks at various points in source code
+as desired; the code will only be generated in debug builds and not in release
+builds.
+
+@param c A conditional expression which results in true or false.
+@param p A function which is called if the conditional expression c is false.
+
+@see __ASSERT_ALWAYS
+*/
+#define __ASSERT_DEBUG(c,p) (void)((c)||(p,0))
+
+
+
+/** 
+@internalAll
+@removed
+*/
+#define __DECLARE_NAME(t)
+
+
+
+
+/** 
+@publishedAll
+@released
+
+Calls the function for testing object invariance.
+
+Classes can define a standard member function __DbgTestInvariant(),
+which checks that the object is in a valid state, and panics if it is not.
+In debug builds, this macro simply expands to call that function. For details on how
+to define __DbgTestInvariant(), and an example of its use, see __DECLARE_TEST.
+
+The macro is typically invoked at the beginning of all the member functions of
+the class. For non-const functions (those which can change the object’s state),
+you can ensure that the object has been left in a stable state by invoking
+the macro at the end of the function.
+
+In release builds, no code is generated for the macro. 
+*/
+#define __TEST_INVARIANT __DbgTestInvariant()
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the start of checking the current thread's heap. 
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __UHEAP_MARKEND or __UHEAP_MARKENDC.
+
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __UHEAP_MARKEND or __UHEAP_MARKENDC.
+
+@see User::__DbgMarkStart()
+@see __UHEAP_MARKEND
+@see __UHEAP_MARKENDC
+*/
+#define __UHEAP_MARK User::__DbgMarkStart(FALSE)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the number of allocated cells at the current nested level on the 
+current thread's heap is the same as the specified value.
+
+This macro is defined only for debug builds.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+The macro assumes that:
+
+1. the heap being checked is a user heap
+
+2. checking is being done for the number of allocated cells at the current nested 
+   level; i.e. that aCountAll is set to false
+
+3. the line number is the line number of this source code statement.
+
+4. the file name is the full path name of the file containing this source statement
+
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see User::__DbgMarkCheck()
+@see __KHEAP_CHECK
+*/
+#define __UHEAP_CHECK(aCount) User::__DbgMarkCheck(FALSE,FALSE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the total number of allocated cells on the current thread's heap 
+is the same as the specified value.
+
+This macro is defined only for debug builds.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+@param aCount The total number of heap cells expected to be allocated.
+
+@see User::__DbgMarkCheck()
+@see __KHEAP_CHECKALL
+*/
+#define __UHEAP_CHECKALL(aCount) User::__DbgMarkCheck(FALSE,TRUE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of checking the current thread's heap. 
+
+The macro expects zero heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __UHEAP_MARK.
+
+@see User::__DbgMarkEnd()
+@see __UHEAP_MARK
+*/
+#define __UHEAP_MARKEND User::__DbgMarkEnd(FALSE,0)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of checking the current thread's heap. 
+
+The macro expects aCount heap cells to remain allocated at the current nest 
+level.
+
+This macro must match an earlier call to __UHEAP_MARK.
+
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level.
+
+@see User::__DbgMarkEnd()
+@see __UHEAP_MARK
+*/
+#define __UHEAP_MARKENDC(aCount) User::__DbgMarkEnd(FALSE,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates heap allocation failure for the current thread's heap.
+
+The failure occurs on the next call to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aCount Determines when the allocation will fail.
+              Heap allocation fails on attempt number aCount - later
+              allocations will succeed.
+              For example, if aCount is 3, then heap allocation fails
+              on the 3rd attempt, but all subsequent allocations succeed. 
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_FAILNEXT(aCount) User::__DbgSetAllocFail(FALSE,RAllocator::EFailNext,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates heap allocation failure for the current thread's heap. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aType  The type of failure to be simulated.
+@param aValue The failure rate.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_SETFAIL(aType,aValue) User::__DbgSetAllocFail(FALSE,aType,aValue)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated heap allocation failure for the current thread's heap. 
+
+This macro is defined only for debug builds.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_RESET User::__DbgSetAllocFail(FALSE,RAllocator::ENone,1)
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated heap allocation failure for the current thread's heap. 
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+This macro is defined only for debug builds.
+*/
+#define __UHEAP_TOTAL_RESET User::__DbgSetAllocFail(FALSE,RAllocator::EReset,1)
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the start of Kernel heap checking. 
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __KHEAP_MARKEND or __KHEAP_MARKENDC. 
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __KHEAP_MARKEND or __KHEAP_MARKENDC.
+
+@see User::__DbgMarkStart()
+@see __KHEAP_MARKEND
+@see __KHEAP_MARKENDC
+*/
+#define __KHEAP_MARK User::__DbgMarkStart(TRUE)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Checks that the number of allocated cells at the current nested level of the 
+Kernel heap is the same as the specified value. This macro is defined only 
+for debug builds. Checking the Kernel heap is only useful when developing 
+Kernel side code such as device drivers and media drivers.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see User::__DbgMarkCheck()
+@see __UHEAP_CHECK
+*/
+#define __KHEAP_CHECK(aCount) User::__DbgMarkCheck(TRUE,FALSE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Checks that the total number of allocated cells on the Kernel heap is the same 
+as the specified value.
+
+It is only useful when developing Kernel side code such as device drivers 
+and media drivers. 
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+This macro is defined only for debug builds.
+
+@param aCount The total number of heap cells expected to be allocated
+
+@see User::__DbgMarkCheck()
+@see __UHEAP_CHECKALL
+*/
+#define __KHEAP_CHECKALL(aCount) User::__DbgMarkCheck(TRUE,TRUE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the end of Kernel heap checking. The macro expects zero heap cells to 
+remain allocated at the current nest level.
+
+This macro is defined only for debug builds. Checking the Kernel heap is only 
+useful when developing Kernel side code such as device drivers and media drivers.
+
+This macro must match an earlier call to __KHEAP_MARK.
+
+@see User::__DbgMarkEnd()
+@see __KHEAP_MARK
+*/
+#define __KHEAP_MARKEND User::__DbgMarkEnd(TRUE,0)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the end of Kernel heap checking. The macro expects aCount heap cells 
+to remain allocated at the current nest level.
+
+This macro is defined only for debug builds.
+
+This macro must match an earlier call to __KHEAP_MARK.
+
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level.
+
+@see User::__DbgMarkEnd()
+@see __KHEAP_MARK
+*/
+#define __KHEAP_MARKENDC(aCount) User::__DbgMarkEnd(TRUE,aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Simulates Kernel heap allocation failure. The failure occurs on the next call 
+to new or any of the functions which allocate memory from the heap. This macro 
+is defined only for debug builds.
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+@param aCount The rate of failure - heap allocation fails every aCount attempt.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_FAILNEXT(aCount) User::__DbgSetAllocFail(TRUE,RAllocator::EFailNext,aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Simulates Kernel heap allocation failure. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from this heap.
+
+This macro is defined only for debug builds.
+
+@param aType  The type of failure to be simulated.
+@param aValue The failure rate.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_SETFAIL(aType,aValue) User::__DbgSetAllocFail(TRUE,aType,aValue)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Cancels simulated Kernel heap allocation failure. 
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_RESET User::__DbgSetAllocFail(TRUE,RAllocator::ENone,1)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Cancels simulated kernel heap allocation failure. 
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+Checking the kernel heap is only useful when developing kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+*/
+#define __KHEAP_TOTAL_RESET User::__DbgSetAllocFail(TRUE,RAllocator::EReset,1)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the start of heap checking for the specific heap. 
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __RHEAP_MARKEND or __RHEAP_MARKENDC.
+
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __RHEAP_MARKEND or __RHEAP_MARKENDC.
+
+@param aHeap A pointer to the specific RHeap
+
+@see RHeap
+@see RAllocator::__DbgMarkStart()
+@see __RHEAP_MARKEND
+@see __RHEAP_MARKENDC
+*/
+#define __RHEAP_MARK(aHeap) (aHeap)->__DbgMarkStart()
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the number of allocated cells at the current nested level on the 
+specified heap is the same as the specified value. 
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail. 
+
+This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see RAllocator::__DbgMarkCheck()
+*/
+#define __RHEAP_CHECK(aHeap,aCount) (aHeap)->__DbgMarkCheck(FALSE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the total number of allocated cells on the specified heap is the 
+same as the specified value.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The total number of heap cells expected to be allocated.
+
+@see RAllocator::__DbgMarkCheck()
+*/
+#define __RHEAP_CHECKALL(aHeap,aCount) (aHeap)->__DbgMarkCheck(TRUE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of heap checking for the specific heap.
+
+The macro expects zero heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __RHEAP_MARK.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgMarkEnd()
+@see __RHEAP_MARK
+*/
+#define __RHEAP_MARKEND(aHeap) (aHeap)->__DbgMarkEnd(0)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of heap checking for the specific heap.
+
+The macro expects aCount heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __RHEAP_MARK.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level
+
+@see RAllocator::__DbgMarkEnd()
+@see __RHEAP_MARK
+*/
+#define __RHEAP_MARKENDC(aHeap,aCount) (aHeap)->__DbgMarkEnd(aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates an allocation failure for the specific heap.
+
+The failure occurs on the next call to new or any of the functions which allocate 
+memory from the heap. This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The rate of failure - heap allocation fails every aCount attempt.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_FAILNEXT(aHeap,aCount) (aHeap)->__DbgSetAllocFail(RAllocator::EFailNext,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates an allocation failure for the specific heap. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aType  The type of failure to be simulated. 
+@param aValue The failure rate.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_SETFAIL(aHeap,aType,aValue) (aHeap)->__DbgSetAllocFail(aType,aValue)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated allocation failure for the specific heap.
+
+This macro is defined only for debug builds.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_RESET(aHeap) (aHeap)->__DbgSetAllocFail(RAllocator::ENone,1)
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated allocation failure for the specific heap.
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+This macro is defined only for debug builds.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_TOTAL_RESET(aHeap) (aHeap)->__DbgSetAllocFail(RAllocator::EReset,1)
+
+
+
+
+#if defined (__WINS__) 
+
+/**
+@publishedAll
+@released
+*/
+#define __DEBUGGER() {if (User::JustInTime()) __BREAKPOINT()}
+
+#else
+#define __DEBUGGER()
+#endif
+
+
+#if defined(__DLL__)
+/**
+@publishedAll
+@released
+
+Declares a function for testing object invariance.
+
+For complex classes, it is often useful to provide a function that can
+be called to check that the object is in a valid state.
+The __DECLARE_TEST macro supplies a standard prototype for such a function
+named __DbgTestInvariant(). A companion macro __TEST_INVARIANT is provided
+to call the function.
+
+For DLLs, as opposed to EXEs, __DbgTestInvariant() is exported,
+i.e. the macro expands to:
+
+@code
+public: IMPORT_C void __DbgTestInvariant() const; void __DbgTest(TAny *aPtr) const
+@endcode
+
+This macro should placed as the last item in a class declaration (as it 
+switches back to public access). Note that a terminating semi-colon must be used.
+
+You should define the __DbgTestInvariant() function to check that the object
+is in a healthy state. If it finds an error, it should call User::Invariant(),
+which will cause a panic. 
+
+If a class is derived from a base class, then the base class __DbgTestInvariant()
+should be called first, and then any further checking done. 
+
+The second function declared, __DbgTest(), is intended to allow test code a way
+of directly accessing non-public members of a class. The function is
+implemented by any test code that requires it, rather than in the class’s own
+source code. The function is therefore not exported.
+
+__DECLARE_TEST is defined for both debug and release builds. This point is
+particularly important for DLLs, as otherwise the exported interfaces would
+differ between the build versions, giving potential binary compatibility
+problems. To avoid using memory unnecessarily in release builds, you can,
+however, use preprocessor directives to define the code within
+__DbgTestInvariant() only for debug builds. __DbgTestInvariant() is never
+called in release builds.
+
+@see __TEST_INVARIANT
+*/
+#define __DECLARE_TEST public: IMPORT_C void __DbgTestInvariant() const; void __DbgTest(TAny *aPtr) const
+#else
+#define __DECLARE_TEST public: void __DbgTestInvariant() const; void __DbgTest(TAny *aPtr) const
+#endif
+
+#else
+#define __ASSERT_DEBUG(c,p)
+#define __DECLARE_NAME(t)
+#define __TEST_INVARIANT
+#if defined(__DLL__)
+#define __DECLARE_TEST public: IMPORT_C void __DbgTestInvariant() const; void __DbgTest(TAny *aPtr) const
+#else
+#define __DECLARE_TEST public: void __DbgTestInvariant() const; void __DbgTest(TAny *aPtr) const
+#endif
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the start of checking the current thread's heap. 
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __UHEAP_MARKEND or __UHEAP_MARKENDC.
+
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __UHEAP_MARKEND or __UHEAP_MARKENDC.
+
+@see User::__DbgMarkStart()
+@see __UHEAP_MARKEND
+@see __UHEAP_MARKENDC
+*/
+#define __UHEAP_MARK
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the number of allocated cells at the current nested level on the 
+current thread's heap is the same as the specified value.
+
+This macro is defined only for debug builds.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+The macro assumes that:
+
+1. the heap being checked is a user heap
+
+2. checking is being done for the number of allocated cells at the current nested 
+   level; i.e. that aCountAll is set to false
+
+3. the line number is the line number of this source code statement.
+
+4. the file name is the full path name of the file containing this source statement
+
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see User::__DbgMarkCheck()
+@see __KHEAP_CHECK
+*/
+#define __UHEAP_CHECK(aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the total number of allocated cells on the current thread's heap 
+is the same as the specified value.
+
+This macro is defined only for debug builds.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+@param aCount The total number of heap cells expected to be allocated.
+
+@see User::__DbgMarkCheck()
+@see __KHEAP_CHECKALL
+*/
+#define __UHEAP_CHECKALL(aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of checking the current thread's heap. 
+
+The macro expects zero heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __UHEAP_MARK.
+
+@see User::__DbgMarkEnd()
+@see __UHEAP_MARK
+*/
+#define __UHEAP_MARKEND
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of checking the current thread's heap. 
+
+The macro expects aCount heap cells to remain allocated at the current nest 
+level.
+
+This macro must match an earlier call to __UHEAP_MARK.
+
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level.
+
+@see User::__DbgMarkEnd()
+@see __UHEAP_MARK
+*/
+#define __UHEAP_MARKENDC(aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates heap allocation failure for the current thread's heap.
+
+The failure occurs on the next call to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aCount Determines when the allocation will fail.
+              Heap allocation fails on attempt number aCount - later
+              allocations will succeed.
+              For example, if aCount is 3, then heap allocation fails
+              on the 3rd attempt, but all subsequent allocations succeed. 
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_FAILNEXT(aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates heap allocation failure for the current thread's heap. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aType  The type of failure to be simulated.
+@param aValue The failure rate.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_SETFAIL(aType,aValue)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated heap allocation failure for the current thread's heap. 
+
+This macro is defined only for debug builds.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_RESET
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated heap allocation failure for the current thread's heap. 
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+This macro is defined only for debug builds.
+*/
+#define __UHEAP_TOTAL_RESET
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the start of Kernel heap checking. 
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __KHEAP_MARKEND or __KHEAP_MARKENDC. 
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __KHEAP_MARKEND or __KHEAP_MARKENDC.
+
+@see User::__DbgMarkStart()
+@see __KHEAP_MARKEND
+@see __KHEAP_MARKENDC
+*/
+#define __KHEAP_MARK
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Checks that the number of allocated cells at the current nested level of the 
+Kernel heap is the same as the specified value. This macro is defined only 
+for debug builds. Checking the Kernel heap is only useful when developing 
+Kernel side code such as device drivers and media drivers.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see User::__DbgMarkCheck()
+@see __UHEAP_CHECK
+*/
+#define __KHEAP_CHECK(aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Checks that the total number of allocated cells on the Kernel heap is the same 
+as the specified value.
+
+It is only useful when developing Kernel side code such as device drivers 
+and media drivers. 
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+This macro is defined only for debug builds.
+
+@param aCount The total number of heap cells expected to be allocated
+
+@see User::__DbgMarkCheck()
+@see __UHEAP_CHECKALL
+*/
+#define __KHEAP_CHECKALL(aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the end of Kernel heap checking. The macro expects zero heap cells to 
+remain allocated at the current nest level.
+
+This macro is defined only for debug builds. Checking the Kernel heap is only 
+useful when developing Kernel side code such as device drivers and media drivers.
+
+This macro must match an earlier call to __KHEAP_MARK.
+
+@see User::__DbgMarkEnd()
+@see __KHEAP_MARK
+*/
+#define __KHEAP_MARKEND
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the end of Kernel heap checking. The macro expects aCount heap cells 
+to remain allocated at the current nest level.
+
+This macro is defined only for debug builds.
+
+This macro must match an earlier call to __KHEAP_MARK.
+
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level.
+
+@see User::__DbgMarkEnd()
+@see __KHEAP_MARK
+*/
+#define __KHEAP_MARKENDC(aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Simulates Kernel heap allocation failure. The failure occurs on the next call 
+to new or any of the functions which allocate memory from the heap. This macro 
+is defined only for debug builds.
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+@param aCount The rate of failure - heap allocation fails every aCount attempt.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_FAILNEXT(aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Simulates Kernel heap allocation failure. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from this heap.
+
+This macro is defined only for debug builds.
+
+@param aType  The type of failure to be simulated.
+@param aValue The failure rate.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_SETFAIL(aType,aValue)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Cancels simulated Kernel heap allocation failure. 
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_RESET
+
+
+
+/**
+@publishedPartner
+@released
+
+Cancels simulated kernel heap allocation failure. 
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+Checking the kernel heap is only useful when developing kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+*/
+#define __KHEAP_TOTAL_RESET
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the start of heap checking for the specific heap. 
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __RHEAP_MARKEND or __RHEAP_MARKENDC.
+
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __RHEAP_MARKEND or __RHEAP_MARKENDC.
+
+@param aHeap A pointer to the specific RHeap
+
+@see RHeap
+@see RAllocator::__DbgMarkStart()
+@see __RHEAP_MARKEND
+@see __RHEAP_MARKENDC
+*/
+#define __RHEAP_MARK(aHeap)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the number of allocated cells at the current nested level on the 
+specified heap is the same as the specified value. 
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail. 
+
+This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see RAllocator::__DbgMarkCheck()
+*/
+#define __RHEAP_CHECK(aHeap,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the total number of allocated cells on the specified heap is the 
+same as the specified value.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The total number of heap cells expected to be allocated.
+
+@see RAllocator::__DbgMarkCheck()
+*/
+#define __RHEAP_CHECKALL(aHeap,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of heap checking for the specific heap.
+
+The macro expects zero heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __RHEAP_MARK.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgMarkEnd()
+@see __RHEAP_MARK
+*/
+#define __RHEAP_MARKEND(aHeap)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of heap checking for the specific heap.
+
+The macro expects aCount heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __RHEAP_MARK.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level
+
+@see RAllocator::__DbgMarkEnd()
+@see __RHEAP_MARK
+*/
+#define __RHEAP_MARKENDC(aHeap,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates an allocation failure for the specific heap.
+
+The failure occurs on the next call to new or any of the functions which allocate 
+memory from the heap. This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The rate of failure - heap allocation fails every aCount attempt.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_FAILNEXT(aHeap,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates an allocation failure for the specific heap. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aType  The type of failure to be simulated. 
+@param aValue The failure rate.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_SETFAIL(aHeap,aType,aValue)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated allocation failure for the specific heap.
+
+This macro is defined only for debug builds.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_RESET(aHeap)
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated allocation failure for the specific heap.
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+This macro is defined only for debug builds.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_TOTAL_RESET(aHeap)
+
+
+
+#define __DEBUGGER()
+#endif
+
+#if defined (__WINS__)
+/** @internalTechnology */
+#define __EMULATOR_IMAGE_HEADER2(aUid0,aUid1,aUid2,aPriority,aCap0,aCap1,aSid,aVid,aVer,aFlags)	TEmulatorImageHeader uid={{aUid0,aUid1,aUid2},aPriority,{aSid,aVid,{aCap0,aCap1}},0,0,aVer,aFlags};
+/** @internalTechnology */
+#define __EMULATOR_IMAGE_HEADER(aUid0,aUid1,aUid2,aPriority,aCap,aFlags)					TEmulatorImageHeader uid={{aUid0,aUid1,aUid2},aPriority,{aUid2,0,{aCap,0}},0,0,0x00010000u,aFlags};
+#else
+#define __EMULATOR_IMAGE_HEADER2(aUid0,aUid1,aUid2,aPriority,aCap0,aCap1,aSid,aVer,aFlags)
+#define __EMULATOR_IMAGE_HEADER(aUid0,aUid1,aUid2,aPriority,aCap,aFlags)
+#endif
+
+#if defined(__OPT__)
+/**
+@internalComponent
+@deprecated
+*/
+#define __ASSERT_OPT(c,p) (void)((c)||(p,0))
+#else
+#define __ASSERT_OPT(c,p)
+#endif
+
+#if defined(_UNICODE)
+#if !defined(UNICODE)
+/**
+@publishedAll
+@deprecated
+*/
+#define UNICODE
+#endif
+#endif
+
+#if defined(_DEBUG)
+/**
+@internalComponent
+@deprecated
+*/
+#define __DECLARE_TEST_DEBUG __DECLARE_TEST
+#else
+#define __DECLARE_TEST_DEBUG
+#endif
+
+
+
+
+#if !defined(ASSERT)
+/**
+@publishedAll
+@released
+
+Generates _ASSERT_DEBUG code that calls User::Invariant() if the specified
+condition is not true.
+
+@param x A conditional expression which results in true or false.
+*/
+#define ASSERT(x) __ASSERT_DEBUG(x,User::Invariant())
+#endif
+
+
+
+
+#ifndef __VALUE_IN_REGS__ 
+/**
+@publishedPartner
+@released
+*/
+#define __VALUE_IN_REGS__ 
+#endif
+
+
+
+
+#if defined(_DEBUG)
+/**
+@publishedAll
+@released
+*/
+#define __DEBUG_ONLY(x) x
+#else
+#define __DEBUG_ONLY(x)
+#endif
+
+
+
+
+#ifdef __KERNEL_MODE__
+
+/** @internalComponent */
+#define	KIMPORT_C	IMPORT_C
+
+/** @internalComponent */
+#define	KEXPORT_C	EXPORT_C
+
+/** @internalComponent */
+#define	UIMPORT_C
+
+/** @internalComponent */
+#define	UEXPORT_C
+#else
+#define	KIMPORT_C
+#define	KEXPORT_C
+#define	UIMPORT_C	IMPORT_C
+#define	UEXPORT_C	EXPORT_C
+#endif
+
+
+
+
+/**
+@publishedAll
+@released
+
+Asserts that a condition is true at compilation time.
+
+@param x Condition to assert
+*/
+#define __ASSERT_COMPILE(x)		void __compile_time_assert(int __check[(x)?1:-1])
+
+#ifdef __REMOVE_PLATSEC_DIAGNOSTICS__
+/**
+@publishedPartner
+@released
+*/
+#ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+#define __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+#endif /*__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__*/
+#endif /*__REMOVE_PLATSEC_DIAGNOSTICS__*/
+
+/**
+@internalComponent
+*/
+static const char* const KSuppressPlatSecDiagnosticMagicValue = (const char*)1;
+
+#ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+/**
+@internalComponent
+*/
+#define __PLATSEC_DIAGNOSTIC_FILE_AND_LINE_HELPER(l) #l
+/**
+@internalComponent
+*/
+#define __PLATSEC_DIAGNOSTIC_FILE_AND_LINE_HELPER2(f,l) f "(" __PLATSEC_DIAGNOSTIC_FILE_AND_LINE_HELPER(l) ")"
+/**
+@publishedPartner
+@released
+*/
+#define __PLATSEC_DIAGNOSTIC_FILE_AND_LINE __PLATSEC_DIAGNOSTIC_FILE_AND_LINE_HELPER2(__FILE__,__LINE__)
+
+/**
+@publishedPartner
+@released
+
+A macro that should be used to enclose a platform security diagnostic
+'C' style string that can be passed to a capability checking function such
+as RThread::HasCapability() and Kern::CurrentThreadHasCapability().
+
+The content of the string is emitted if the capability test finds that
+the capability is not present.
+
+The macro provides a convenient mechanism that allows the strings to
+be removed from future versions of Symbian OS.
+
+For example:
+
+@code
+if(!Kern::CurrentThreadHasCapability(ECapabilityPowerMgmt,__PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EDisplayHalSetState")))
+    {
+    return KErrPermissionDenied;
+    }			
+@endcode
+
+In this example, the string:
+
+@code
+Checked by Hal function EDisplayHalSetState
+@endcode
+
+is emitted if the calling process does not have the ECapabilityPowerMgmt capability.
+
+@param s A C-style string.
+
+@see RProcess::HasCapability()
+@see RThread::HasCapability()
+@see RMessagePtr2::HasCapability()
+@see User::CreatorHasCapability()
+*/
+#define __PLATSEC_DIAGNOSTIC_STRING(s) s
+
+/**
+When this value is used in Platform Security APIs as the value for the aDiagnosticText
+argument, these APIs will not emit any form of diagnostic message.
+@publishedPartner
+@released
+*/
+// Note this value is the same as KSuppressPlatSecDiagnosticMagicValue
+// and used to be a set by it but that caused an error with GCCE compiler
+static const char* const KSuppressPlatSecDiagnostic = (const char*)1;
+
+#else /* __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__ */
+
+#define __PLATSEC_DIAGNOSTIC_STRING(s) NULL
+
+#ifndef __KERNEL_MODE__
+#ifndef __REMOVE_PLATSEC_DIAGNOSTICS__
+/**
+When this value is used in Platform Security APIs as the value for the aDiagnostic
+argument, these APIs will not emit any form of diagnostic message.
+@publishedPartner
+@released
+*/
+#define KSuppressPlatSecDiagnostic		NULL, NULL
+
+#else /* __REMOVE_PLATSEC_DIAGNOSTICS__ */
+
+/**
+When this value is used in Platform Security APIs as the value for the aDiagnostic
+argument, these APIs will not emit any form of diagnostic message.
+@publishedPartner
+@release
+*/
+#define KSuppressPlatSecDiagnostic		NULL
+
+#endif /* !__REMOVE_PLATSEC_DIAGNOSTICS__ */
+#endif /* !__KERNEL_MODE__ */
+#endif /* !__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__ */
+
+/*
+ * MSVC operator new and operator new[] header guards
+ */
+#ifdef __PLACEMENT_NEW
+#define __PLACEMENT_NEW_INLINE
+#endif /* __PLACEMENT_NEW */
+
+#if defined(__VC32__) && (_MSC_VER < 1300)
+#define __PLACEMENT_VEC_NEW_INLINE
+#endif /* version of MSVC that doesn't support overloaded operator new[] */
+
+/**
+Calling convention qualifier for functions involving floating point 
+variables passed or returned by value.
+@publishedAll
+@released
+*/
+#ifndef __SOFTFP
+#define __SOFTFP
+#endif /* __SOFTFP */
+
+#endif /* __E32DEF_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/defs/group/test.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]=__TESTNAME__;
+
+class fred {
+	public:
+	int something;
+	int aMethod(void);
+};
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/depcrunch/dep2.rpp.d	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,11 @@
+EPOCROOT/epoc32/build/resource/c_98665870f0168225/dependentresource_/dependentresource_dependentresource_sc.rpp: testresource1.mbg \
+ /home/tnmurphy/x/build/sbsv2/raptor/test/smoke_suite/test_resources/resource/dependentresource.rss \
+ /home/tnmurphy/x/test-epocroot/epoc32/include/variant/Symbian_OS.hrh \
+ /home/tnmurphy/x/test-epocroot/epoc32/include/testresource_badef.rh \
+ /home/tnmurphy/x/test-epocroot/epoc32/include/e32capability.h testresource2.rsg \
+ /home/tnmurphy/x/build/sbsv2/raptor/test/smoke_suite/test_resources/resource/inc/../inc/testresource.rh \
+ testresource3.rsg /home/tnmurphy/x/build/sbsv2/raptor/test/smoke_suite/test_resources/resource/inc/../inc/testresource.hrh \
+ /home/tnmurphy/x/build/sbsv2/raptor/test/smoke_suite/test_resources/resource/testresource.rls \
+ testresource4.mbg testresource5.rsg \
+  testresource6.mbg testresource7.rsg
+  testresource8.mbg testresource9.rsg
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/dependencies/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_EXPORTS
+inc/dependency.h
+inc/dependency.rh
+
+PRJ_PLATFORMS
+ARMV5 WINSCW TOOLS2
+
+PRJ_MMPFILES
+dependencies.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/dependencies/dependencies.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+* Test component that can build as a basic EXE for both OS and tools platforms
+*
+*/
+
+TARGET			dependency
+TARGETTYPE		exe
+UID				0x100039ce 0x00000001
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			main.cpp
+SOURCE			dependency.cpp
+
+#ifndef TOOLS2
+SYSTEMINCLUDE	/epoc32/include/techview
+
+START RESOURCE	main.rss
+HEADER
+TARGETPATH		/resource/apps
+END
+
+START RESOURCE	dependency.rss
+HEADER
+TARGETPATH		/resource/apps
+END
+
+LIBRARY			euser.lib
+#endif 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/dependencies/inc/dependency.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#define DEPENDENCY_VALUE 1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/dependencies/inc/dependency.rh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#define DEPENDENCY_TEXT SomeText
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/dependencies/main.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#ifndef __TOOLS2__
+#include <e32def.h>
+TInt E32Main()
+#else
+int main(void)
+#endif
+	{
+	return 0;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/dependencies/main.rss	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+NAME MAIN
+
+#include <eikon.rh>
+#include <eikcore.rsg>
+#include <appinfo.rh>
+
+RESOURCE TBUF { buf=""; }
+RESOURCE TBUF r_somestaticresource { buf="text"; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/dependencies/src/dependency1.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,20 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include <dependency.h>
+
+int SomeVariable = DEPENDENCY_VALUE;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/dependencies/src/dependency1.rss	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+NAME DEPE
+
+#include <eikon.rh>
+#include <eikcore.rsg>
+#include <appinfo.rh>
+#include <dependency.rh>
+
+RESOURCE TBUF { buf=""; }
+RESOURCE TBUF r_someresource { buf="DEPENDENCY_TEXT"; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/dependencies/src/dependency2.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+int SomeVariable = 0;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/dependencies/src/dependency2.rss	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+NAME DEPE
+
+#include <eikon.rh>
+#include <eikcore.rsg>
+#include <appinfo.rh>
+
+RESOURCE TBUF { buf=""; }
+RESOURCE TBUF r_someresource { buf="SomeText"; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/emulated_drives_export/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_MMPFILES
+emulated_drives_export.mmp
+
+PRJ_EXPORTS
+emulated_drives_export1.mbm z:/private/10001234/policy/emulated_drives_export1.mbm
+emulated_drives_export2.mbm c:/private/10001234/policy/emulated_drives_export2.mbm
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/emulated_drives_export/emulated_drives_export.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple test";
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/emulated_drives_export/emulated_drives_export.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			test
+TARGETTYPE		EXE
+UID			0x100039ce 0x00000001
+LIBRARY			euser.dso
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			emulated_drives_export.cpp
Binary file sbsv2/raptor/test/smoke_suite/test_resources/emulated_drives_export/emulated_drives_export1.mbm has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/emulated_drives_export/emulated_drives_export2.mbm has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/filter_test/testfilter.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,38 @@
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Filter class to test customised filtering
+# Will output a simple message when certain input text is found
+#
+
+import sys
+import filter_interface
+
+
+class TestFilter(filter_interface.Filter):
+	
+	def open(self, raptor_instance):
+		return True
+		
+		
+	def write(self, text):
+		"""Write a message to stdout to say the test passed"""
+		
+		if "<info>The make-engine exited successfully.</info>" in text:
+			sys.stdout.write("\nTest Passed!\n")
+		return True
+	
+	
+	def close(self):
+		return True
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/filter_test/testfilter_exceptions.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Filter class for testing the filter framework by creatnig an exception
+#
+
+import os
+import sys
+import raptor
+import filter_interface
+
+class FilterTestCrash(filter_interface.Filter):
+
+	def open(self, raptor_instance):
+		"""Open a log file for the various I/O methods to write to."""
+		self.counter = 0
+		return True
+
+	def write(self, text):
+		"""Write text into the log file"""
+
+		self.counter += 1
+		if self.counter == 10:
+			raise Exception("A test exception in a filter was generated on line %d of the log\n" % self.counter)
+		
+
+		return True
+
+	def summary(self):
+		return False
+
+	def close(self):
+		return False
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/gnumakefile/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+gnumakefile ../gnumakefile/master.mak
+gnumakefile slave.mak
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/gnumakefile/master.mak	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,42 @@
+# Envoke CED to install correct CommDB
+#
+ 
+do_nothing :
+	rem do_nothing
+ 
+ #
+ # The targets invoked by abld 
+
+
+MAKMAKE : 
+	echo MASTER.MAK MAKMAKE > master_makmake_$(PLATFORM)_$(CFG).txt
+
+RESOURCE : 
+	echo MASTER.MAK RESOURCE > master_resource_$(PLATFORM)_$(CFG).txt
+
+SAVESPACE : BLD
+
+BLD : 
+	echo MASTER.MAK BLD > master_bld_$(PLATFORM)_$(CFG).txt
+ 
+FREEZE : 
+	echo MASTER.MAK FREEZE > master_freeze_$(PLATFORM)_$(CFG).txt
+
+LIB : 
+	echo MASTER.MAK LIB > master_lib_$(PLATFORM)_$(CFG).txt
+
+CLEANLIB : do_nothing
+	 
+FINAL : 
+	echo MASTER.MAK FINAL > master_final_$(PLATFORM)_$(CFG).txt
+
+CLEAN : 
+	rm -f *.txt
+ 
+RELEASABLES : 
+	@echo $(DIRECTORY)/master_makmake_$(PLATFORM)_$(CFG).txt
+	@echo $(DIRECTORY)/master_resource_$(PLATFORM)_$(CFG).txt
+	@echo $(DIRECTORY)/master_bld_$(PLATFORM)_$(CFG).txt
+	@echo $(DIRECTORY)/master_lib_$(PLATFORM)_$(CFG).txt
+	@echo $(DIRECTORY)/master_final_$(PLATFORM)_$(CFG).txt
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/gnumakefile/simple.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			test
+TARGETTYPE		EXE
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/gnumakefile/slave.mak	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,42 @@
+# Envoke CED to install correct CommDB
+#
+ 
+do_nothing :
+	rem do_nothing
+ 
+ #
+ # The targets invoked by abld 
+
+
+MAKMAKE : 
+	echo SLAVE.MAK MAKMAKE > slave_makmake_$(PLATFORM)_$(CFG).txt
+
+RESOURCE : 
+	echo SLAVE.MAK RESOURCE > slave_resource_$(PLATFORM)_$(CFG).txt
+
+SAVESPACE : BLD
+
+BLD : 
+	echo SLAVE.MAK BLD > slave_bld_$(PLATFORM)_$(CFG).txt
+ 
+FREEZE : 
+	echo SLAVE.MAK FREEZE > slave_freeze_$(PLATFORM)_$(CFG).txt
+
+LIB : 
+	echo SLAVE.MAK LIB > slave_lib_$(PLATFORM)_$(CFG).txt
+
+CLEANLIB : do_nothing
+ 
+FINAL : 
+	echo SLAVE.MAK FINAL >> slave_final_$(PLATFORM)_$(CFG).txt
+
+CLEAN : 
+	rm -f *.txt
+ 
+RELEASABLES : 
+	@echo $(DIRECTORY)/slave_makmake_$(PLATFORM)_$(CFG).txt
+	@echo $(DIRECTORY)/slave_resource_$(PLATFORM)_$(CFG).txt
+	@echo $(DIRECTORY)/slave_bld_$(PLATFORM)_$(CFG).txt
+	@echo $(DIRECTORY)/slave_lib_$(PLATFORM)_$(CFG).txt
+	@echo $(DIRECTORY)/slave_final_$(PLATFORM)_$(CFG).txt
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/gnumakefile/test.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple test";
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/inc/macrotests.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+/* Different platforms (e.g. tools2 and the rest) can use 
+   this to test that their FLMs
+   support the MACRO keyword and that they support
+   complex macros with quotes and parentheses.
+
+   Make your mmp include macrotest.mmh to declare the appropriate macros
+*/
+
+
+#if !defined(MACRO_ADDED_FOR_TESTING)
+#error Expected MACRO "MACRO_ADDED_FOR_TESTING" from the MMP but it is not defined
+#endif
+
+#define MULTIPLYBY100(x) x##00
+
+#if COMPLEXMACRO != 100 
+#error Expected  MACRO "##COMPLEXMACRO=MULTUPLYBY100(1)" from the MMP but it is not defined
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/inc/macrotests.mmh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+/* For testing the MACRO keyword and for testing complex macros with parentheses etc.
+  use with macrotests.h */
+
+MACRO			MACRO_ADDED_FOR_TESTING COMPLEXMACRO=MULTIPLYBY100(1)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/keepgoing/groups.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+  <!-- This group deliberately contains some non-existent products 
+  -->
+  <group name="lots_of_products">
+	<groupRef ref='armv5'/>
+	<groupRef ref='armv5' mod="qwertyuio"/>
+	<groupRef ref='armv5' mod="asdfghjkl"/>
+	<groupRef ref='armv5' mod="zxcvbnm_p"/>
+  </group>
+  
+  <!-- This group just contains the one above to check multiple levels
+  -->
+  <group name="lots_of_products_2">
+    <groupRef ref="lots_of_products"/>
+  </group>
+  
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/logexamples/filter_component.log	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,42 @@
+<buildlog>
+
+<error bldinf="y:/src/email/bld.inf">email error #1</error>
+<error bldinf="y:/src/email/bld.inf">email error #2</error>
+
+<warning bldinf="y:/src/txt/bld.inf">txt warning #1</warning>
+<warning bldinf="y:/src/txt/bld.inf">txt warning #2</warning>
+
+<warning bldinf="y:/src/email/bld.inf">email warning #1</warning>
+<warning bldinf="y:/src/email/bld.inf">email warning #2</warning>
+
+<whatlog bldinf='y:/src/email/bld.inf' mmp='y:/src/email/a.mmp' config='armv5_urel'>
+<build>/epoc32/data/email_1</build>
+<build>/epoc32/data/email_2</build>
+</whatlog>
+
+<clean bldinf='y:/src/txt/bld.inf' mmp='y:/src/txt/b.mmp' config='armv5_udeb'>
+<file>/epoc32/data/txt_1</file>
+<file>/epoc32/data/txt_2</file>
+</clean>
+
+<recipe name='dummy' bldinf='y:/src/txt/bld.inf'>
++ make_txt
+txt was made fine
+<status exit='ok'/>
+</recipe>
+
+<recipe name='dummy' bldinf='y:/src/email/bld.inf'>
++ make_email
+email was made fine
+<status exit='ok'/>
+</recipe>
+
+<fake bldinf='y:src/email/bld.inf'>
+  <foo>
+    <bar>
+      <fb>fb email</fb>
+    </bar>
+  </foo>
+</fake>
+
+</buildlog>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/logexamples/what_component_repeated.log	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,15 @@
+<whatlog bldinf='y:/ext/app/emailwizard/bld.inf' mmp='' config='armv5_urel.generic'>
+<build>/epoc32/data/something</build>
+</whatlog>
+
+
+
+<whatlog bldinf='y:/sf/mw/gsprofilesrv/ftuwizardmodel/bld.inf' mmp='y:/sf/mw/gsprofilesrv/ftuwizardmodel/ftuwizardmodel_0x20027009.mmp' config='armv5_urel.generic'>
+<build>/epoc32/release/armv5/something</build>
+</whatlog>
+
+
+
+<whatlog bldinf='y:/ext/app/emailwizard/bld.inf' mmp='' config='armv5_urel.generic'>
+<build>/epoc32/data/something_else</build>
+</whatlog>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/long/paths/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 
+
+PRJ_MMPFILES
+deftest.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/long/paths/deftest.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,79 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+target		deftest
+targettype		dll
+
+source	test.cpp 
+source	test01.cpp 
+source	test02.cpp 
+source	test03.cpp 
+source	test04.cpp 
+source	test05.cpp 
+source	test06.cpp 
+source	test07.cpp 
+source	test08.cpp 
+source	test09.cpp 
+source	test10.cpp 
+source	test11.cpp 
+source	test12.cpp 
+source	test13.cpp 
+source	test14.cpp 
+source	test15.cpp 
+source	test16.cpp 
+source	test17.cpp 
+source	test18.cpp 
+source	test19.cpp 
+source	test20.cpp 
+source	test21.cpp 
+source	test22.cpp 
+source	test23.cpp 
+source	test24.cpp 
+source	test25.cpp 
+source	test26.cpp 
+source	test27.cpp 
+source	test28.cpp 
+source	test29.cpp 
+source	test30.cpp 
+source	test31.cpp 
+source	test32.cpp 
+source	test33.cpp 
+source	test34.cpp 
+source	test35.cpp 
+source	test36.cpp 
+source	test37.cpp 
+source	test38.cpp 
+source	test39.cpp 
+source	test40.cpp 
+source	test41.cpp 
+source	test42.cpp 
+source	test43.cpp 
+source	test44.cpp 
+source	test45.cpp 
+source	test46.cpp 
+source	test47.cpp 
+source	test48.cpp 
+source	test49.cpp 
+unpaged
+macro __TESTNAME__="deftest"
+
+deffile  deftest.def
+uid 0x1000008d 0x100039e5
+VENDORID 0x70000001
+capability		all
+unpaged
+epocallowdlldata
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/long/paths/deftestu.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1 @@
+EXPORTS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/long/paths/e32def.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2870 @@
+/*
+* Copyright (c) 1994-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32\include\e32def.h
+* NOTE: THIS FILE SHOULD BE ACCEPTABLE TO A C COMPILER
+*
+*/
+
+
+
+
+#ifndef __E32DEF_H__
+#define __E32DEF_H__
+
+/*
+ * __LEAVE_EQUALS_THROW__ requires the compiler to support C++ exceptions
+ */
+#ifndef __SUPPORT_CPP_EXCEPTIONS__
+#undef __LEAVE_EQUALS_THROW__
+#endif
+
+
+
+
+
+#ifdef __PROFILING__
+
+/**
+@publishedPartner
+@removed
+*/
+#define __PROFILE_START(aBin) RDebug::ProfileStart(aBin)
+
+/**
+@publishedPartner
+@removed
+*/
+#define __PROFILE_END(aBin)   RDebug::ProfileEnd(aBin)
+
+/**
+@publishedPartner
+@removed
+*/
+#define __PROFILE_RESET(aNumberOfBins) RDebug::ProfileReset(0,aNumberOfBins)
+
+/**
+@publishedPartner
+@removed
+*/
+#define __PROFILE_DISPLAY(aNumberOfBins) \
+			{	TFixedArray<TProfile, aNumberOfBins> result; \
+				RDebug::ProfileResult(result.Begin(), 0, aNumberOfBins); \
+				for (TInt i=0; i<aNumberOfBins; i++)   \
+				RDebug::Print(_L("Profile bin %d:  Calls: %d, Clock ticks: %d\n" ),i,res[i].iCount,result[i].iTime);  \
+			}
+#else /* __PROFILING__ */
+#define __PROFILE_START(aBin) 
+#define __PROFILE_END(aBin)   
+#define __PROFILE_RESET(aNumberOfBins) 
+#define __PROFILE_DISPLAY(aNumberOfBins)
+#endif
+
+
+
+#if defined(__VC32__)
+/**
+@publishedAll
+@released
+*/
+#define __NO_CLASS_CONSTS__
+#if (_MSC_VER >= 1200)
+/**
+@publishedAll
+@released
+*/
+#define __NORETURN__ __declspec(noreturn)
+#else
+#define __NORETURN__
+#endif
+/**
+@publishedAll
+@released
+*/
+#define __NORETURN_TERMINATOR()
+/**
+@publishedAll
+@released
+*/
+#define IMPORT_C __declspec(dllexport)
+/**
+@publishedAll
+@released
+*/
+#define EXPORT_C __declspec(dllexport)
+/**
+@publishedAll
+@released
+*/
+#define NONSHARABLE_CLASS(x) class x
+/**
+@publishedAll
+@released
+*/
+#define NONSHARABLE_STRUCT(x) struct x
+/**
+@publishedAll
+@released
+*/
+#define __NO_THROW throw()
+/**
+@publishedAll
+@released
+*/
+#define __THROW(t) throw(t)
+#pragma warning( disable : 4355 )	/* 'this' used in base member initializer list */
+#pragma warning( disable : 4511 )	/* copy constructor could not be generated */
+#pragma warning( disable : 4512 )	/* assignment operator could not be generated */
+#pragma warning( disable : 4514 )	/* unreferenced inline function has been removed */
+#pragma warning( disable : 4699 )	/* Note: Using precompiled header %s */
+#pragma warning( disable : 4710 )	/* function not inlined */
+#pragma warning( disable : 4121 )	/* alignment sensitive to packing */
+#pragma warning( disable : 4273 )
+#pragma warning( disable : 4097 )	/* typedef-name 'identifier1' used as synonym for class-name 'identifier2' */
+#pragma warning( disable : 4291 )	/* 'TAny *CBase::operator new(TUint,TLeave)' : no matching operator delete found; memory will not be freed if initialization throws an exception */
+
+#if _MSC_VER  >= 1100
+/**
+@publishedAll
+@released
+*/
+#define TEMPLATE_SPECIALIZATION template<>
+#else
+#define TEMPLATE_SPECIALIZATION
+#endif
+#endif
+
+
+
+#if defined(__CW32__)
+#undef __embedded_cplusplus
+/** @internalTechnology */
+#define __embedded_cplusplus	1
+#define __NO_CLASS_CONSTS__
+#define __NORETURN__
+#define __NORETURN_TERMINATOR()
+#define IMPORT_C __declspec(dllexport)
+#define EXPORT_C __declspec(dllexport)
+#define NONSHARABLE_CLASS(x) class x
+#define NONSHARABLE_STRUCT(x) struct x
+#define __NO_THROW throw()
+#define __THROW(t) throw(t)
+
+#define TEMPLATE_SPECIALIZATION template<>
+/**
+@publishedAll
+@released
+*/
+#define _asm	asm
+#ifndef __int64
+#pragma longlong on
+/** @internalTechnology */
+#define __int64  long long
+#endif
+#ifndef __SUPPORT_CPP_EXCEPTIONS__
+#pragma exceptions off    /* no support for C++ exception handling */
+#pragma RTTI off          /* no support for C++ runtime type information */
+#endif
+#if __MWERKS__ >= 0x3200
+#pragma warning off (10480)	/* deleteing void pointer is undefined */
+#pragma warning off (10350) /* N pad byte(s) inserted after data member */
+#endif
+#endif
+
+
+
+#if defined(__GCC32__)
+#define __NO_CLASS_CONSTS__
+#define __NORETURN__  __attribute__ ((noreturn))
+#ifdef __GCCV3__
+#define __NORETURN_TERMINATOR()
+#else
+#define __NORETURN_TERMINATOR()		abort()
+#endif
+#define IMPORT_C
+#if !defined __WINS__ && defined _WIN32 /* VC++ Browser Hack */
+#define EXPORT_C
+/** @internalTechnology */
+#define asm(x)
+#else
+#define EXPORT_C __declspec(dllexport)
+#endif
+#define NONSHARABLE_CLASS(x) class x
+#define NONSHARABLE_STRUCT(x) struct x
+#define __NO_THROW
+#define __THROW(t)
+#ifdef __EABI__
+#define TEMPLATE_SPECIALIZATION template<>
+#else
+#define TEMPLATE_SPECIALIZATION
+#endif
+#endif
+
+
+
+#ifdef __GCC32__
+/**
+@publishedAll
+@released
+*/
+#define __DOUBLE_WORDS_SWAPPED__
+#endif
+
+
+
+/** @internalTechnology */
+#define __NO_MUTABLE_KEYWORD
+#if defined(__NO_MUTABLE_KEYWORD)
+/**
+@publishedAll
+@deprecated
+*/
+#define __MUTABLE
+#else
+#define __MUTABLE mutable
+#endif
+
+
+
+/**
+@publishedAll
+@deprecated
+*/
+#define CONST_CAST(type,exp) (const_cast<type>(exp))
+
+/**
+@publishedAll
+@deprecated
+*/
+#define STATIC_CAST(type,exp) (static_cast<type>(exp))
+
+/**
+@publishedAll
+@deprecated
+*/
+#define REINTERPRET_CAST(type,exp) (reinterpret_cast<type>(exp))
+
+#if defined(__NO_MUTABLE_KEYWORD)
+/**
+@publishedAll
+@deprecated
+*/
+#define MUTABLE_CAST(type,exp) (const_cast<type>(exp))
+#else
+#define MUTABLE_CAST(type,exp) (exp)
+#endif
+
+/**
+@publishedAll
+@deprecated
+*/
+#define GLREF_D extern
+/**
+@publishedAll
+@deprecated
+*/
+#define GLDEF_D
+/**
+@publishedAll
+@deprecated
+*/
+#define LOCAL_D static
+/**
+@publishedAll
+@deprecated
+*/
+#define GLREF_C extern
+/**
+@publishedAll
+@deprecated
+*/
+#define GLDEF_C
+/**
+@publishedAll
+@deprecated
+*/
+#define LOCAL_C static
+/**
+@publishedAll
+@deprecated
+*/
+#define FOREVER for(;;)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Symbolic definition for a true value.
+*/
+#define TRUE 1
+
+
+
+
+/**
+@publishedAll
+@released
+
+Symbolic definition for a false value.
+*/
+#define FALSE 0
+#ifndef NULL
+
+
+
+
+/**
+@publishedAll
+@released
+
+Symbolic definition for a NULL value.
+*/
+#define NULL 0
+#endif
+
+
+
+
+#ifndef VA_START
+/**
+@publishedAll
+@released
+
+A macro used by Symbian OS code for handling a variable argument list
+in a function call.
+
+Sets a pointer to point to the first of the variable arguments.
+
+Typical usage:
+
+@code
+Foo(CAbcdef aAbcdef,...)
+   {
+   VA_LIST list;
+   VA_START(list, aAbcdef);
+   // other code
+   } 
+@endcode
+
+@param ap   A pointer used to hold the address of an argument in
+            the variable argument list. After execution of the code generated 
+            by this macro, the pointer points to the first argument in
+            the variable argument list.
+            This symbol is usually declared as a VA_LIST type. 
+
+@param pn   The argument that immediately precedes the variable argument list.
+
+@see VA_LIST
+@see VA_ARG
+*/
+#define VA_START(ap,pn) ((ap)[0]=(TInt8 *)&pn+((sizeof(pn)+sizeof(TInt)-1)&~(sizeof(TInt)-1)),(void)0)
+#endif
+
+
+
+
+#ifndef VA_ARG
+/**
+@publishedAll
+@released
+
+A macro used by Symbian OS code for handling a variable argument list
+in a function call.
+
+Increments a pointer to a variable argument list to point to the next argument
+in the list. The current argument is assumed to be of a type defined by
+the second parameter to this macro.
+
+Typical usage:
+
+@code
+Foo(CAbcdef aAbcdef,...)
+   {
+   VA_LIST list;
+   VA_START(list, aAbcdef);
+   ...
+   TInt x = VA_ARG(list,TInt);
+   ...
+   const TDesC *pS=VA_ARG(aList,const TDesC*);
+   ... 
+   etc
+   } 
+@endcode
+
+@param ap   A pointer used to hold the address of an argument in
+            the variable argument list. It is assumed to point to the current
+            argument in the variable argument list. After execution of the code
+            generated by this macro, the pointer points to the next argument in
+            the list. This symbol is usually declared as a VA_LIST type. 
+
+@param type The type of the current argument.
+            This can be any valid type, for example, TInt, const TDesC*, etc.
+            
+@see VA_LIST
+@see VA_START            
+*/
+#define VA_ARG(ap,type) ((ap)[0]+=((sizeof(type)+sizeof(TInt)-1)&~(sizeof(TInt)-1)),(*(type *)((ap)[0]-((sizeof(type)+sizeof(TInt)-1)&~(sizeof(TInt)-1)))))
+#endif
+
+
+
+
+#ifndef VA_END
+/**
+@publishedAll
+@released
+
+A macro used by Symbian OS code for handling a variable argument list
+in a function call.
+
+Sets a pointer to zero.
+
+@param ap   A pointer used to hold the address of an argument in
+            the variable argument list. After execution of the code generated 
+            by this macro, the pointer is reset to 0.
+            This symbol is usually declared as a VA_LIST type. 
+            
+@see VA_LIST
+@see VA_START
+@see VA_ARG            
+*/
+#define VA_END(ap) ((ap)[0]=0,(void)0)
+#endif
+	
+
+
+/**
+@publishedAll
+@released
+
+Calculates the offset of member f within class c.
+
+This is used in the TSglQue and TDblQue constructors to set the offset of
+the link object from the start of a list element.
+
+@param c The name of the class.
+@param f The name of the member within the specified class.
+
+@see TSglQue
+@see TDblQue
+*/
+#ifndef _FOFF
+#define _FOFF(c,f)			(((TInt)&(((c *)0x1000)->f))-0x1000)
+#endif
+
+
+
+/**
+@internalTechnology
+@released
+*/
+#define _ALIGN_DOWN(x,a)	((x)&~((a)-1))
+/**
+@internalTechnology
+@released
+*/
+#define _ALIGN_UP(x,a)		_ALIGN_DOWN((x)+(a)-1, a)
+
+
+
+
+/** 
+@publishedAll
+@released
+
+Pointer to any type.
+
+TAny* is equivalent to void* in standard C or C++. TAny* is used in preference 
+to void* because it is more suggestive of the actual meaning,
+e.g. TAny* foo();.
+
+TAny is not used where it really means "nothing", as in the declaration of 
+functions which do not return a value; void is used instead, e.g. void Foo();.
+*/
+typedef void TAny;
+
+
+
+
+/**
+@publishedAll
+@released
+
+8-bit signed integer type, used in Symbian OS to mean an 8-bit
+signed integer, independent of the implementation.
+*/
+typedef signed char TInt8;
+
+
+
+
+/**
+@publishedAll
+@released
+
+8-bit unsigned integer type; used in Symbian OS to mean an 8-bit
+unsigned integer, independent of the implementation.
+*/
+typedef unsigned char TUint8;
+
+
+
+
+/**
+@publishedAll
+@released
+
+16-bit signed integer type, used in Symbian OS to mean a 16-bit
+signed integer, independent of the implementation.
+*/
+typedef short int TInt16;
+
+
+
+
+/**
+@publishedAll
+@released
+
+16-bit unsigned integer type. used in Symbian OS to mean a 16-bit
+unsigned integer, independent of the implementation.
+*/
+typedef unsigned short int TUint16;
+
+
+
+
+/**
+@publishedAll
+@released
+
+32-bit signed integer type, used in Symbian OS to mean a 32-bit
+signed integer, independent of the implementation.
+*/
+typedef long int TInt32;
+
+
+
+
+/**
+@publishedAll
+@released
+
+32-bit unsigned integer type; used in Symbian OS to mean a 32-bit
+unsigned integer, independent of the implementation.
+*/
+typedef unsigned long int TUint32;
+
+
+
+
+/**
+@publishedAll
+@released
+
+Signed integer type of the natural machine word length.
+
+This is as defined by the C++ implementation's int type. In all
+implementations, this is guaranteed to be at least 32 bits.
+
+A TInt should be used in preference to a sized integer (TInt32, TInt16) for 
+all general use. Sized integers should only be used when packing is essential. 
+C++'s type conversion rules imply that all sized integers smaller than the 
+natural machine word are in any case broadened to the natural machine word 
+size when passed as function parameters.
+
+A TInt should be used in preference to an unsigned integer (TUint) for all 
+general use. Unsigned integers should only be used for flags (which use Boolean 
+operations but not arithmetic) and, in very rare cases, for numbers whose 
+range exceeds that available from signed integers. Although it is natural 
+to attempt to use unsigned integers for quantities which cannot by nature 
+be negative, the C++ language does not provide the support necessary to enforce 
+the "expected" behaviour in these circumstances, and experience has shown 
+that it is better to use signed integers unless there is good reason not to.
+
+@see TUint
+@see TInt32
+@see TInt16
+*/
+typedef signed int TInt;
+
+
+
+
+/**
+@publishedAll
+@released
+
+Unsigned integer type of the natural machine word length. 
+
+This is guaranteed to be at least 32 bits in all implementations.
+
+In almost all circumstances, a TInt should be used in preference to a TUint. 
+The main exception is in flags bytes.
+
+@see TInt
+*/
+typedef unsigned int TUint;
+
+
+
+
+/**
+@publishedAll
+@released
+
+32-bit floating point number, providing IEEE754 single precision on all Symbian 
+OS implementations.
+
+TReal should normally be used in preference to TReal32.
+
+Use of floating-point numbers should generally be avoided unless a natural 
+part of the problem specification. Most Symbian OS implementations do not 
+have a hardware floating point unit: as a result, their floating-point performance 
+is hundreds of times slower than integer performance.
+*/
+typedef float TReal32;
+
+
+
+
+/**
+@publishedAll
+@released
+
+64-bit floating point number, providing IEEE754 double precision on all Symbian 
+OS implementations.
+
+Use of floating-point numbers should generally be avoided unless a natural 
+part of the problem specification. Most Symbian OS implementations do not 
+have a hardware floating point unit: as a result, their floating-point performance 
+is hundreds of times slower than integer performance.
+
+This type is identical to TReal.
+
+@see TReal
+*/
+typedef double TReal64;
+
+
+
+
+/**
+@publishedAll
+@released
+
+64-bit floating point number; identical to TReal64.
+
+Use of floating-point numbers should generally be avoided unless a natural 
+part of the problem specification. Most Symbian OS implementations do not 
+have a hardware floating point unit: as a result, their floating-point performance 
+is hundreds of times slower than integer performance.
+
+Most serious floating-point calculations require double-precision. All standard 
+math functions (see Math class) take double-precision arguments. Single-precision 
+should only be used where space and performance are at a premium, and when 
+their limited precision is acceptable.
+
+@see TReal64
+@see Math
+*/
+typedef double TReal;
+
+
+
+
+/**
+@publishedAll
+@released
+
+8-bit unsigned character.
+
+Use instead of C++ built-in char type because it is guaranteed to be unsigned. 
+Use instead of TInt8 where the application is really for text rather than 
+8-bit arithmetic or binary quantities.
+
+For most purposes, you should use TText rather than TText8. TText is mapped 
+onto either TText8 or TText16 depending on whether a non-Unicode or Unicode 
+variant is being built. Use TText8 only when you are dealing explicitly with 
+8-bit text, regardless of build.
+
+@see TText */
+typedef unsigned char TText8;
+
+
+
+
+/**
+@publishedAll
+@released
+
+16-bit unsigned character.
+
+Use instead of C++ wchar_t type because it is guaranteed to be unsigned. Use 
+instead of TInt16 where the application is really for text rather than 8-bit 
+arithmetic or binary quantities.
+
+For most purposes, you should use TText rather than TText16. TText is mapped 
+onto either TText8 or TText16 depending on whether a non-Unicode or Unicode 
+variant is being built. Use TText16 only when you are dealing explicitly with 
+16-bit text, regardless of build.
+
+@see TText
+*/
+typedef unsigned short int TText16;
+
+
+
+
+/**
+@publishedAll
+@released
+
+Boolean type which takes the value either ETrue or EFalse.
+
+Although only a single bit would theoretically be necessary to represent a 
+Boolean, a machine word is used instead, so that these quantities can be easily 
+passed. Also, TBool must map onto int because of C++'s interpretation of 
+operands in conditional expressions.
+
+On implementations of Symbian OS in which the compiler supports the ANSI-recommended 
+bool type, TBool will be typedef'ed to bool instead of int.
+*/
+typedef int TBool;
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Defines a linear (virtual) address type.
+*/
+typedef TUint32 TLinAddr;
+
+/**
+@internalTechnology
+
+A sorted list of all the code segments in ROM that contain an Exception Descriptor.
+
+*/
+typedef struct TRomExceptionSearchTable
+	{
+	/**
+	The number of entries in the following table.
+	*/
+	TInt32 iNumEntries;
+	
+	/**
+	Address of the code segment of each TRomImageHeader that has an Exception Descriptor.
+	*/
+	TLinAddr iEntries[1];
+	} TRomExceptionSearchTable;
+
+/**
+@internalComponent
+*/
+typedef struct TExceptionDescriptor 
+	{
+	TLinAddr iExIdxBase;
+	TLinAddr iExIdxLimit;
+	TLinAddr iROSegmentBase;
+	TLinAddr iROSegmentLimit;
+	} TExceptionDescriptor;
+
+
+#if defined(__GCC32__)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines a 64-bit signed integer type.
+*/
+typedef long long Int64;
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines a 64-bit unsigned integer type.
+*/
+typedef unsigned long long Uint64;
+
+
+
+
+/**
+@publishedAll
+@released
+*/
+#define	I64LIT(x)	x##LL
+/**
+@publishedAll
+@released
+*/
+#define	UI64LIT(x)	x##ULL
+
+#elif defined(__VC32__)
+typedef __int64 Int64;
+typedef unsigned __int64 Uint64;
+#define	I64LIT(x)	(__int64)##x
+#define	UI64LIT(x)	(unsigned __int64)##x
+
+#elif defined(__CW32__)
+#pragma longlong on
+typedef long long Int64;
+typedef unsigned long long Uint64;
+#define	I64LIT(x)	x##LL
+#define	UI64LIT(x)	x##ULL
+#endif
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines a 64-bit signed integer type.
+
+NOTE: For those migrating from versions of Symbian OS before 8.1b (i.e. 8.1a, 7.0s etc)
+TInt64 is now defined as a built-in type instead of as a class type. This means
+that the member functions of the old TInt64 class are no longer exported
+from EUSER.LIB, and represents a compatibility break.
+
+To ease migration of source code, a number of macros are provided. Similar
+macros have also been defined in Symbian OS versions 7.0s and 8.1a, but
+implemented in terms of the old TInt64 class. This is important for code that
+is common to : one or both of these Symbian OS versions, and to 8.1b and
+subsequent versions.
+
+The following list shows the new macros and the functions that they replace.
+It also shows some alternative techniques.
+In this list: x, v and r are declared as TInt64, c is declared as TInt, High
+and Low are declared as TUint.
+
+@code
+OLD USAGE						REPLACEMENT
+
+TInt64(High,Low);				MAKE_TINT64(High,Low);
+x.Set(High,Low);				MAKE_TINT64(High,Low);
+x.Low();						I64LOW(x);
+x.High();						I64HIGH(x); 
+x.GetTInt();					I64INT(x); 
+x.GetTReal();					I64REAL(x); 
+x.Lsr(c);						I64LSR(x,c); 
+x.Mul10();						x*=10; 
+x.MulTop(a);					I64MULTOP(x,a); 
+x.DivMod(v,r);					r=x%v; x/=v;
+@endcode 
+*/
+typedef	Int64	TInt64;
+
+
+
+
+/**
+@publishedAll
+@released
+ 
+Defines a 64-bit unsigned integer type.
+*/
+typedef	Uint64	TUint64;
+
+
+
+
+/** @internalComponent */
+#define _MAKE_TINT64_ZX(x)	((TInt64)((TUint32)(x)))
+
+/** @internalComponent */
+#define _MAKE_TUINT64_ZX(x)	((TUint64)((TUint32)(x)))
+
+
+
+
+/**
+@publishedAll
+@released
+*/
+#define MAKE_TINT64(h,l)	( (_MAKE_TINT64_ZX(h)<<32) | _MAKE_TINT64_ZX(l) )
+
+
+
+
+/**
+@publishedAll
+@released
+*/
+#define MAKE_TUINT64(h,l)	( (_MAKE_TUINT64_ZX(h)<<32) | _MAKE_TUINT64_ZX(l) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to access the high order 32 bits of a 64 bit number.
+*/
+#define	I64HIGH(x)			( (TUint32)((x)>>32) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to access the low order 32 bits of a 64 bit number.
+*/
+#define	I64LOW(x)			( (TUint32)(x) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to cast a 64 bit value as an signed integer.
+*/
+#define	I64INT(x)			( (TInt)(x) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to cast a 64 bit value as a TReal type.
+*/
+#define	I64REAL(x)			( (TReal)(x) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to logically shift a 64 bit integer right.
+*/
+#define	I64LSR(x, shift)	( *reinterpret_cast<TUint64*>(&(x)) >>= (shift) )
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to multiply a 64 bit integer by 10.
+*/
+#define	I64MUL10(x)			( (x) *= 10 )
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to divide a 64 bit integer by another and find the remainder.
+*/
+#define	I64DIVMOD(x, divisor, remainder)	( ((remainder) = (x) % (divisor), (x) /= (divisor)) )
+
+
+
+
+/**
+@publishedAll
+@released
+
+Generates code to cast a double to a 64 bit integer.
+*/
+#define	I64DOUBLECAST(x)	( static_cast<TInt64>(x) )
+
+
+
+
+/**
+@publishedAll
+@deprecated Use _LIT8 instead.
+
+8-bit literal.
+
+The macro defines an explicit 8-bit constant literal which is suitable
+for non-Unicode literal text, regardless of the build.
+
+@see _L
+@see _LIT8
+@see _LIT
+*/
+#define _L8(a) (TPtrC8((const TText8 *)(a)))
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines an explicit 8-bit string which is suitable when non-Unicode text
+is required, regardless of the build.
+
+This is used by the deprecated literal descriptor _L8.
+*/
+#define _S8(a) ((const TText8 *)a)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Constructs a constant literal descriptor of type TLitC8<TInt> with
+the specified name and text.
+
+The 8-bit build variant is generated for both non-Unicode and Unicode builds.
+
+@param name The name of the C++ variable to be generated.
+@param s    The literal text enclosed within a pair of double quotes. 
+
+@see _LIT
+*/
+#define _LIT8(name,s) const static TLitC8<sizeof(s)> name={sizeof(s)-1,s}
+
+
+
+
+/**
+@publishedAll
+@deprecated Use _LIT16 instead.
+
+16-bit literal.
+
+The macro defines an explicit 16-bit constant literal which is suitable
+for Unicode literal text, regardless of the build.
+
+@see _L
+@see _LIT16
+@see _LIT
+*/
+#define _L16(a) (TPtrC16((const TText16 *)L ## a))
+
+
+
+/**
+@publishedAll
+@released
+
+Defines an explicit 16-bit string which is suitable when Unicode text
+is required, regardless of the build.
+
+This is used by the deprecated literal descriptor _L16.
+*/
+#define _S16(a) ((const TText16 *)L ## a)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Constructs a constant literal descriptor of type TLitC16<TInt> with
+the specified name and text.
+
+The 16-bit build variant is generated for both non-Unicode and Unicode builds.
+
+@param name The name of the C++ variable to be generated.
+@param s    The literal text enclosed within a pair of double quotes. 
+
+@see _LIT
+*/
+#define _LIT16(name,s) const static TLitC16<sizeof(L##s)/2> name={sizeof(L##s)/2-1,L##s}
+
+
+
+
+#if defined(_UNICODE) && !defined(__KERNEL_MODE__)
+/**
+@publishedAll
+@released
+
+Build independent general text character.
+
+In non-Unicode builds, this is mapped to TText8. In Unicode builds, this is 
+mapped to TText16. Use the classes with explicit width only when you wish 
+the width to be independent of the build variant.
+
+Use this class rather than TChar for general use.
+*/
+typedef TText16 TText;
+
+
+
+/**
+@publishedAll
+@deprecated Use _LIT instead.
+
+Build independent literal. 
+
+The macro defines either an 8-bit constant literal (for non-Unicode text),
+or a 16-bit constant literal (for Unicode text) depending on the build.
+
+@see _LIT
+@see _L16
+@see _L8
+*/
+#define _L(a) (TPtrC((const TText *)L ## a))
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines either an 8-bit string (for non-Unicode text),
+or a 16-bit string (for Unicode text) depending on the build.
+
+This is used by the deprecated build independent literal _L.
+*/
+#define _S(a) ((const TText *)L ## a)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Constructs a build independent constant literal descriptor of type TLitC<TInt>
+with the specified name and text.
+
+An 8-bit build variant is generated for a non-Unicode build;
+A 16-bit build variant is generated for a Unicode build.
+
+@param name The name of the C++ variable to be generated.
+@param s    The literal text enclosed within a pair of double quotes. 
+
+@see _LIT16
+@see _LIT8
+*/
+#define _LIT(name,s) const static TLitC<sizeof(L##s)/2> name={sizeof(L##s)/2-1,L##s}
+
+
+
+
+#else
+/**
+@publishedAll
+@released
+
+Build independent general text character.
+
+In non-Unicode builds, this is mapped to TText8. In Unicode builds, this is 
+mapped to TText16. Use the classes with explicit width only when you wish 
+the width to be independent of the build variant.
+
+Use this class rather than TChar for general use.
+*/
+typedef TText8 TText;
+
+
+
+/**
+@publishedAll
+@released
+
+@deprecated Use _LIT instead.
+
+Build independent literal. 
+
+The macro defines either an 8-bit constant literal (for non-Unicode text),
+or a 16-bit constant literal (for Unicode text) depending on the build.
+
+@see _LIT
+@see _L16
+@see _L8
+*/
+#define _L(a) (TPtrC((const TText *)(a)))
+
+
+
+
+/**
+@publishedAll
+@released
+
+Defines either an 8-bit string (for non-Unicode text),
+or a 16-bit string (for Unicode text) depending on the build.
+
+This is used by the deprecated build independent literal _L.
+*/
+#define _S(a) ((const TText *)a)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Constructs a build independent constant literal descriptor of type TLitC<TInt>
+with the specified name and text.
+
+An 8-bit build variant is generated for a non-Unicode build;
+A 16-bit build variant is generated for a Unicode build.
+
+@param name The name of the C++ variable to be generated.
+@param s    The literal text enclosed within a pair of double quotes. 
+
+@see _LIT16
+@see _LIT8
+*/
+#define _LIT(name,s) const static TLitC<sizeof(s)> name={sizeof(s)-1,s}
+#endif
+
+
+
+
+#ifndef __VA_LIST_defined
+/** 
+@publishedAll
+@released
+
+Defines a 'C' style array of pointers to TInt8 types.
+
+The type is most commonly used by code that needs to deal with a variable
+number of arguments passed to a function.
+
+@see TInt8
+*/
+typedef TInt8 *VA_LIST[1];
+#endif
+
+/** 
+@publishedAll
+@released
+
+Asserts that a condition is true.
+
+Code is generated for all builds.
+
+This macro is used as a C++ statement to assert the truth of some condition,
+and to take appropriate action if the condition is false. Unlike __ASSERT_DEBUG
+it is defined in both release and debug builds.
+
+The most common use for this macro is to check that the external environment of
+a function or class is behaving as expected; for example, that parameters
+passed to a function are credible, or that called functions are behaving as
+expected; the macro is commonly placed at the beginning of a function.
+
+The effect of the macro is to generate code which tests
+the conditional expression c; if the expression is false, then
+function p is called. In the majority of cases, the function p is one that
+raises a panic.
+
+Note that the macro definition is, in effect, equivalent to: 
+
+@code
+if !(c)p;
+@endcode
+
+@param c a conditional expression which results in true or false.
+@param p a function which is called if the conditional expression c is false.
+
+@see __ASSERT_DEBUG
+*/
+#define __ASSERT_ALWAYS(c,p) (void)((c)||(p,0))
+
+
+
+#ifdef __WINS__
+#ifdef __CW32__
+/** 
+@internalAll
+@released
+*/
+#define __BREAKPOINT()			\
+	{							\
+	__asm { byte 0xcc };		\
+	}
+#else // !__CW32__
+/** 
+@internalAll
+@released
+*/
+#define __BREAKPOINT()			\
+	{							\
+	__asm { int 3 };			\
+	}
+#endif //__CW32__
+#else
+/** 
+@internalAll
+@released
+*/
+#define __BREAKPOINT()
+#endif
+
+#if defined(_DEBUG)
+
+/** 
+@internalComponent
+@deprecated
+*/
+#define __ASSERT_DEBUG_MB(aCond,aPanicNo) (void)((aCond)||(PanicMB(aPanicNo,_L(#aPanicNo),_L(#aCond)),0))
+
+
+
+
+/** 
+@publishedAll
+@released
+
+Asserts that a condition is true.
+
+Code is generated for debug builds only.
+
+This macro is used as a C++ statement to assert the truth of some condition,
+and to take appropriate action if the condition is false. It is used in
+the same way as __ASSERT_ALWAYS, except that it is only defined for debug builds.
+
+The macro may be used to insert extra checks at various points in source code
+as desired; the code will only be generated in debug builds and not in release
+builds.
+
+@param c A conditional expression which results in true or false.
+@param p A function which is called if the conditional expression c is false.
+
+@see __ASSERT_ALWAYS
+*/
+#define __ASSERT_DEBUG(c,p) (void)((c)||(p,0))
+
+
+
+/** 
+@internalAll
+@removed
+*/
+#define __DECLARE_NAME(t)
+
+
+
+
+/** 
+@publishedAll
+@released
+
+Calls the function for testing object invariance.
+
+Classes can define a standard member function __DbgTestInvariant(),
+which checks that the object is in a valid state, and panics if it is not.
+In debug builds, this macro simply expands to call that function. For details on how
+to define __DbgTestInvariant(), and an example of its use, see __DECLARE_TEST.
+
+The macro is typically invoked at the beginning of all the member functions of
+the class. For non-const functions (those which can change the object’s state),
+you can ensure that the object has been left in a stable state by invoking
+the macro at the end of the function.
+
+In release builds, no code is generated for the macro. 
+*/
+#define __TEST_INVARIANT __DbgTestInvariant()
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the start of checking the current thread's heap. 
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __UHEAP_MARKEND or __UHEAP_MARKENDC.
+
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __UHEAP_MARKEND or __UHEAP_MARKENDC.
+
+@see User::__DbgMarkStart()
+@see __UHEAP_MARKEND
+@see __UHEAP_MARKENDC
+*/
+#define __UHEAP_MARK User::__DbgMarkStart(FALSE)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the number of allocated cells at the current nested level on the 
+current thread's heap is the same as the specified value.
+
+This macro is defined only for debug builds.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+The macro assumes that:
+
+1. the heap being checked is a user heap
+
+2. checking is being done for the number of allocated cells at the current nested 
+   level; i.e. that aCountAll is set to false
+
+3. the line number is the line number of this source code statement.
+
+4. the file name is the full path name of the file containing this source statement
+
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see User::__DbgMarkCheck()
+@see __KHEAP_CHECK
+*/
+#define __UHEAP_CHECK(aCount) User::__DbgMarkCheck(FALSE,FALSE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the total number of allocated cells on the current thread's heap 
+is the same as the specified value.
+
+This macro is defined only for debug builds.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+@param aCount The total number of heap cells expected to be allocated.
+
+@see User::__DbgMarkCheck()
+@see __KHEAP_CHECKALL
+*/
+#define __UHEAP_CHECKALL(aCount) User::__DbgMarkCheck(FALSE,TRUE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of checking the current thread's heap. 
+
+The macro expects zero heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __UHEAP_MARK.
+
+@see User::__DbgMarkEnd()
+@see __UHEAP_MARK
+*/
+#define __UHEAP_MARKEND User::__DbgMarkEnd(FALSE,0)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of checking the current thread's heap. 
+
+The macro expects aCount heap cells to remain allocated at the current nest 
+level.
+
+This macro must match an earlier call to __UHEAP_MARK.
+
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level.
+
+@see User::__DbgMarkEnd()
+@see __UHEAP_MARK
+*/
+#define __UHEAP_MARKENDC(aCount) User::__DbgMarkEnd(FALSE,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates heap allocation failure for the current thread's heap.
+
+The failure occurs on the next call to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aCount Determines when the allocation will fail.
+              Heap allocation fails on attempt number aCount - later
+              allocations will succeed.
+              For example, if aCount is 3, then heap allocation fails
+              on the 3rd attempt, but all subsequent allocations succeed. 
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_FAILNEXT(aCount) User::__DbgSetAllocFail(FALSE,RAllocator::EFailNext,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates heap allocation failure for the current thread's heap. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aType  The type of failure to be simulated.
+@param aValue The failure rate.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_SETFAIL(aType,aValue) User::__DbgSetAllocFail(FALSE,aType,aValue)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated heap allocation failure for the current thread's heap. 
+
+This macro is defined only for debug builds.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_RESET User::__DbgSetAllocFail(FALSE,RAllocator::ENone,1)
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated heap allocation failure for the current thread's heap. 
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+This macro is defined only for debug builds.
+*/
+#define __UHEAP_TOTAL_RESET User::__DbgSetAllocFail(FALSE,RAllocator::EReset,1)
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the start of Kernel heap checking. 
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __KHEAP_MARKEND or __KHEAP_MARKENDC. 
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __KHEAP_MARKEND or __KHEAP_MARKENDC.
+
+@see User::__DbgMarkStart()
+@see __KHEAP_MARKEND
+@see __KHEAP_MARKENDC
+*/
+#define __KHEAP_MARK User::__DbgMarkStart(TRUE)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Checks that the number of allocated cells at the current nested level of the 
+Kernel heap is the same as the specified value. This macro is defined only 
+for debug builds. Checking the Kernel heap is only useful when developing 
+Kernel side code such as device drivers and media drivers.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see User::__DbgMarkCheck()
+@see __UHEAP_CHECK
+*/
+#define __KHEAP_CHECK(aCount) User::__DbgMarkCheck(TRUE,FALSE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Checks that the total number of allocated cells on the Kernel heap is the same 
+as the specified value.
+
+It is only useful when developing Kernel side code such as device drivers 
+and media drivers. 
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+This macro is defined only for debug builds.
+
+@param aCount The total number of heap cells expected to be allocated
+
+@see User::__DbgMarkCheck()
+@see __UHEAP_CHECKALL
+*/
+#define __KHEAP_CHECKALL(aCount) User::__DbgMarkCheck(TRUE,TRUE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the end of Kernel heap checking. The macro expects zero heap cells to 
+remain allocated at the current nest level.
+
+This macro is defined only for debug builds. Checking the Kernel heap is only 
+useful when developing Kernel side code such as device drivers and media drivers.
+
+This macro must match an earlier call to __KHEAP_MARK.
+
+@see User::__DbgMarkEnd()
+@see __KHEAP_MARK
+*/
+#define __KHEAP_MARKEND User::__DbgMarkEnd(TRUE,0)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the end of Kernel heap checking. The macro expects aCount heap cells 
+to remain allocated at the current nest level.
+
+This macro is defined only for debug builds.
+
+This macro must match an earlier call to __KHEAP_MARK.
+
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level.
+
+@see User::__DbgMarkEnd()
+@see __KHEAP_MARK
+*/
+#define __KHEAP_MARKENDC(aCount) User::__DbgMarkEnd(TRUE,aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Simulates Kernel heap allocation failure. The failure occurs on the next call 
+to new or any of the functions which allocate memory from the heap. This macro 
+is defined only for debug builds.
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+@param aCount The rate of failure - heap allocation fails every aCount attempt.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_FAILNEXT(aCount) User::__DbgSetAllocFail(TRUE,RAllocator::EFailNext,aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Simulates Kernel heap allocation failure. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from this heap.
+
+This macro is defined only for debug builds.
+
+@param aType  The type of failure to be simulated.
+@param aValue The failure rate.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_SETFAIL(aType,aValue) User::__DbgSetAllocFail(TRUE,aType,aValue)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Cancels simulated Kernel heap allocation failure. 
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_RESET User::__DbgSetAllocFail(TRUE,RAllocator::ENone,1)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Cancels simulated kernel heap allocation failure. 
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+Checking the kernel heap is only useful when developing kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+*/
+#define __KHEAP_TOTAL_RESET User::__DbgSetAllocFail(TRUE,RAllocator::EReset,1)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the start of heap checking for the specific heap. 
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __RHEAP_MARKEND or __RHEAP_MARKENDC.
+
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __RHEAP_MARKEND or __RHEAP_MARKENDC.
+
+@param aHeap A pointer to the specific RHeap
+
+@see RHeap
+@see RAllocator::__DbgMarkStart()
+@see __RHEAP_MARKEND
+@see __RHEAP_MARKENDC
+*/
+#define __RHEAP_MARK(aHeap) (aHeap)->__DbgMarkStart()
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the number of allocated cells at the current nested level on the 
+specified heap is the same as the specified value. 
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail. 
+
+This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see RAllocator::__DbgMarkCheck()
+*/
+#define __RHEAP_CHECK(aHeap,aCount) (aHeap)->__DbgMarkCheck(FALSE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the total number of allocated cells on the specified heap is the 
+same as the specified value.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The total number of heap cells expected to be allocated.
+
+@see RAllocator::__DbgMarkCheck()
+*/
+#define __RHEAP_CHECKALL(aHeap,aCount) (aHeap)->__DbgMarkCheck(TRUE,aCount,(TText8*)__FILE__,__LINE__)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of heap checking for the specific heap.
+
+The macro expects zero heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __RHEAP_MARK.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgMarkEnd()
+@see __RHEAP_MARK
+*/
+#define __RHEAP_MARKEND(aHeap) (aHeap)->__DbgMarkEnd(0)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of heap checking for the specific heap.
+
+The macro expects aCount heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __RHEAP_MARK.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level
+
+@see RAllocator::__DbgMarkEnd()
+@see __RHEAP_MARK
+*/
+#define __RHEAP_MARKENDC(aHeap,aCount) (aHeap)->__DbgMarkEnd(aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates an allocation failure for the specific heap.
+
+The failure occurs on the next call to new or any of the functions which allocate 
+memory from the heap. This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The rate of failure - heap allocation fails every aCount attempt.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_FAILNEXT(aHeap,aCount) (aHeap)->__DbgSetAllocFail(RAllocator::EFailNext,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates an allocation failure for the specific heap. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aType  The type of failure to be simulated. 
+@param aValue The failure rate.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_SETFAIL(aHeap,aType,aValue) (aHeap)->__DbgSetAllocFail(aType,aValue)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated allocation failure for the specific heap.
+
+This macro is defined only for debug builds.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_RESET(aHeap) (aHeap)->__DbgSetAllocFail(RAllocator::ENone,1)
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated allocation failure for the specific heap.
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+This macro is defined only for debug builds.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_TOTAL_RESET(aHeap) (aHeap)->__DbgSetAllocFail(RAllocator::EReset,1)
+
+
+
+
+#if defined (__WINS__) 
+
+/**
+@publishedAll
+@released
+*/
+#define __DEBUGGER() {if (User::JustInTime()) __BREAKPOINT()}
+
+#else
+#define __DEBUGGER()
+#endif
+
+
+#if defined(__DLL__)
+/**
+@publishedAll
+@released
+
+Declares a function for testing object invariance.
+
+For complex classes, it is often useful to provide a function that can
+be called to check that the object is in a valid state.
+The __DECLARE_TEST macro supplies a standard prototype for such a function
+named __DbgTestInvariant(). A companion macro __TEST_INVARIANT is provided
+to call the function.
+
+For DLLs, as opposed to EXEs, __DbgTestInvariant() is exported,
+i.e. the macro expands to:
+
+@code
+public: IMPORT_C void __DbgTestInvariant() const; void __DbgTest(TAny *aPtr) const
+@endcode
+
+This macro should placed as the last item in a class declaration (as it 
+switches back to public access). Note that a terminating semi-colon must be used.
+
+You should define the __DbgTestInvariant() function to check that the object
+is in a healthy state. If it finds an error, it should call User::Invariant(),
+which will cause a panic. 
+
+If a class is derived from a base class, then the base class __DbgTestInvariant()
+should be called first, and then any further checking done. 
+
+The second function declared, __DbgTest(), is intended to allow test code a way
+of directly accessing non-public members of a class. The function is
+implemented by any test code that requires it, rather than in the class’s own
+source code. The function is therefore not exported.
+
+__DECLARE_TEST is defined for both debug and release builds. This point is
+particularly important for DLLs, as otherwise the exported interfaces would
+differ between the build versions, giving potential binary compatibility
+problems. To avoid using memory unnecessarily in release builds, you can,
+however, use preprocessor directives to define the code within
+__DbgTestInvariant() only for debug builds. __DbgTestInvariant() is never
+called in release builds.
+
+@see __TEST_INVARIANT
+*/
+#define __DECLARE_TEST public: IMPORT_C void __DbgTestInvariant() const; void __DbgTest(TAny *aPtr) const
+#else
+#define __DECLARE_TEST public: void __DbgTestInvariant() const; void __DbgTest(TAny *aPtr) const
+#endif
+
+#else
+#define __ASSERT_DEBUG(c,p)
+#define __DECLARE_NAME(t)
+#define __TEST_INVARIANT
+#if defined(__DLL__)
+#define __DECLARE_TEST public: IMPORT_C void __DbgTestInvariant() const; void __DbgTest(TAny *aPtr) const
+#else
+#define __DECLARE_TEST public: void __DbgTestInvariant() const; void __DbgTest(TAny *aPtr) const
+#endif
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the start of checking the current thread's heap. 
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __UHEAP_MARKEND or __UHEAP_MARKENDC.
+
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __UHEAP_MARKEND or __UHEAP_MARKENDC.
+
+@see User::__DbgMarkStart()
+@see __UHEAP_MARKEND
+@see __UHEAP_MARKENDC
+*/
+#define __UHEAP_MARK
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the number of allocated cells at the current nested level on the 
+current thread's heap is the same as the specified value.
+
+This macro is defined only for debug builds.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+The macro assumes that:
+
+1. the heap being checked is a user heap
+
+2. checking is being done for the number of allocated cells at the current nested 
+   level; i.e. that aCountAll is set to false
+
+3. the line number is the line number of this source code statement.
+
+4. the file name is the full path name of the file containing this source statement
+
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see User::__DbgMarkCheck()
+@see __KHEAP_CHECK
+*/
+#define __UHEAP_CHECK(aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the total number of allocated cells on the current thread's heap 
+is the same as the specified value.
+
+This macro is defined only for debug builds.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+@param aCount The total number of heap cells expected to be allocated.
+
+@see User::__DbgMarkCheck()
+@see __KHEAP_CHECKALL
+*/
+#define __UHEAP_CHECKALL(aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of checking the current thread's heap. 
+
+The macro expects zero heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __UHEAP_MARK.
+
+@see User::__DbgMarkEnd()
+@see __UHEAP_MARK
+*/
+#define __UHEAP_MARKEND
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of checking the current thread's heap. 
+
+The macro expects aCount heap cells to remain allocated at the current nest 
+level.
+
+This macro must match an earlier call to __UHEAP_MARK.
+
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level.
+
+@see User::__DbgMarkEnd()
+@see __UHEAP_MARK
+*/
+#define __UHEAP_MARKENDC(aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates heap allocation failure for the current thread's heap.
+
+The failure occurs on the next call to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aCount Determines when the allocation will fail.
+              Heap allocation fails on attempt number aCount - later
+              allocations will succeed.
+              For example, if aCount is 3, then heap allocation fails
+              on the 3rd attempt, but all subsequent allocations succeed. 
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_FAILNEXT(aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates heap allocation failure for the current thread's heap. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aType  The type of failure to be simulated.
+@param aValue The failure rate.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_SETFAIL(aType,aValue)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated heap allocation failure for the current thread's heap. 
+
+This macro is defined only for debug builds.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __UHEAP_RESET
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated heap allocation failure for the current thread's heap. 
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+This macro is defined only for debug builds.
+*/
+#define __UHEAP_TOTAL_RESET
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the start of Kernel heap checking. 
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __KHEAP_MARKEND or __KHEAP_MARKENDC. 
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __KHEAP_MARKEND or __KHEAP_MARKENDC.
+
+@see User::__DbgMarkStart()
+@see __KHEAP_MARKEND
+@see __KHEAP_MARKENDC
+*/
+#define __KHEAP_MARK
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Checks that the number of allocated cells at the current nested level of the 
+Kernel heap is the same as the specified value. This macro is defined only 
+for debug builds. Checking the Kernel heap is only useful when developing 
+Kernel side code such as device drivers and media drivers.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see User::__DbgMarkCheck()
+@see __UHEAP_CHECK
+*/
+#define __KHEAP_CHECK(aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Checks that the total number of allocated cells on the Kernel heap is the same 
+as the specified value.
+
+It is only useful when developing Kernel side code such as device drivers 
+and media drivers. 
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+This macro is defined only for debug builds.
+
+@param aCount The total number of heap cells expected to be allocated
+
+@see User::__DbgMarkCheck()
+@see __UHEAP_CHECKALL
+*/
+#define __KHEAP_CHECKALL(aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the end of Kernel heap checking. The macro expects zero heap cells to 
+remain allocated at the current nest level.
+
+This macro is defined only for debug builds. Checking the Kernel heap is only 
+useful when developing Kernel side code such as device drivers and media drivers.
+
+This macro must match an earlier call to __KHEAP_MARK.
+
+@see User::__DbgMarkEnd()
+@see __KHEAP_MARK
+*/
+#define __KHEAP_MARKEND
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Marks the end of Kernel heap checking. The macro expects aCount heap cells 
+to remain allocated at the current nest level.
+
+This macro is defined only for debug builds.
+
+This macro must match an earlier call to __KHEAP_MARK.
+
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level.
+
+@see User::__DbgMarkEnd()
+@see __KHEAP_MARK
+*/
+#define __KHEAP_MARKENDC(aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Simulates Kernel heap allocation failure. The failure occurs on the next call 
+to new or any of the functions which allocate memory from the heap. This macro 
+is defined only for debug builds.
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+@param aCount The rate of failure - heap allocation fails every aCount attempt.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_FAILNEXT(aCount)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Simulates Kernel heap allocation failure. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from this heap.
+
+This macro is defined only for debug builds.
+
+@param aType  The type of failure to be simulated.
+@param aValue The failure rate.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_SETFAIL(aType,aValue)
+
+
+
+
+/**
+@publishedPartner
+@released
+
+Cancels simulated Kernel heap allocation failure. 
+
+Checking the Kernel heap is only useful when developing Kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+
+@see User::__DbgSetAllocFail()
+*/
+#define __KHEAP_RESET
+
+
+
+/**
+@publishedPartner
+@released
+
+Cancels simulated kernel heap allocation failure. 
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+Checking the kernel heap is only useful when developing kernel side code such 
+as device drivers and media drivers.
+
+This macro is defined only for debug builds.
+*/
+#define __KHEAP_TOTAL_RESET
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the start of heap checking for the specific heap. 
+
+This macro is defined only for debug builds.
+
+This macro must be matched by a corresponding call to __RHEAP_MARKEND or __RHEAP_MARKENDC.
+
+Calls to this macro can be nested but each call must be matched by corresponding 
+call to __RHEAP_MARKEND or __RHEAP_MARKENDC.
+
+@param aHeap A pointer to the specific RHeap
+
+@see RHeap
+@see RAllocator::__DbgMarkStart()
+@see __RHEAP_MARKEND
+@see __RHEAP_MARKENDC
+*/
+#define __RHEAP_MARK(aHeap)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the number of allocated cells at the current nested level on the 
+specified heap is the same as the specified value. 
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail. 
+
+This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The number of heap cells expected to be allocated at
+              the current nest level.
+
+@see RAllocator::__DbgMarkCheck()
+*/
+#define __RHEAP_CHECK(aHeap,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Checks that the total number of allocated cells on the specified heap is the 
+same as the specified value.
+
+The macro also takes the name of the file containing this source code statement 
+and the line number of this source code statement; they are displayed as part 
+of the panic category, if the checks fail.
+
+This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The total number of heap cells expected to be allocated.
+
+@see RAllocator::__DbgMarkCheck()
+*/
+#define __RHEAP_CHECKALL(aHeap,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of heap checking for the specific heap.
+
+The macro expects zero heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __RHEAP_MARK.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgMarkEnd()
+@see __RHEAP_MARK
+*/
+#define __RHEAP_MARKEND(aHeap)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Marks the end of heap checking for the specific heap.
+
+The macro expects aCount heap cells to remain allocated at the current nest 
+level. This macro is defined only for debug builds.
+
+This macro must match an earlier call to __RHEAP_MARK.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The number of heap cells expected to remain allocated at
+              the current nest level
+
+@see RAllocator::__DbgMarkEnd()
+@see __RHEAP_MARK
+*/
+#define __RHEAP_MARKENDC(aHeap,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates an allocation failure for the specific heap.
+
+The failure occurs on the next call to new or any of the functions which allocate 
+memory from the heap. This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aCount The rate of failure - heap allocation fails every aCount attempt.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_FAILNEXT(aHeap,aCount)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Simulates an allocation failure for the specific heap. 
+
+The failure occurs on subsequent calls to new or any of the functions which 
+allocate memory from the heap. This macro is defined only for debug builds.
+
+@param aHeap  A pointer to the specific RHeap.
+@param aType  The type of failure to be simulated. 
+@param aValue The failure rate.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_SETFAIL(aHeap,aType,aValue)
+
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated allocation failure for the specific heap.
+
+This macro is defined only for debug builds.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_RESET(aHeap)
+
+
+
+/**
+@publishedAll
+@released
+
+Cancels simulated allocation failure for the specific heap.
+It walks the the heap and sets the nesting level for all allocated
+cells to zero.
+
+This macro is defined only for debug builds.
+
+@param aHeap A pointer to the specific RHeap.
+
+@see RAllocator::__DbgSetAllocFail()
+*/
+#define __RHEAP_TOTAL_RESET(aHeap)
+
+
+
+#define __DEBUGGER()
+#endif
+
+#if defined (__WINS__)
+/** @internalTechnology */
+#define __EMULATOR_IMAGE_HEADER2(aUid0,aUid1,aUid2,aPriority,aCap0,aCap1,aSid,aVid,aVer,aFlags)	TEmulatorImageHeader uid={{aUid0,aUid1,aUid2},aPriority,{aSid,aVid,{aCap0,aCap1}},0,0,aVer,aFlags};
+/** @internalTechnology */
+#define __EMULATOR_IMAGE_HEADER(aUid0,aUid1,aUid2,aPriority,aCap,aFlags)					TEmulatorImageHeader uid={{aUid0,aUid1,aUid2},aPriority,{aUid2,0,{aCap,0}},0,0,0x00010000u,aFlags};
+#else
+#define __EMULATOR_IMAGE_HEADER2(aUid0,aUid1,aUid2,aPriority,aCap0,aCap1,aSid,aVer,aFlags)
+#define __EMULATOR_IMAGE_HEADER(aUid0,aUid1,aUid2,aPriority,aCap,aFlags)
+#endif
+
+#if defined(__OPT__)
+/**
+@internalComponent
+@deprecated
+*/
+#define __ASSERT_OPT(c,p) (void)((c)||(p,0))
+#else
+#define __ASSERT_OPT(c,p)
+#endif
+
+#if defined(_UNICODE)
+#if !defined(UNICODE)
+/**
+@publishedAll
+@deprecated
+*/
+#define UNICODE
+#endif
+#endif
+
+#if defined(_DEBUG)
+/**
+@internalComponent
+@deprecated
+*/
+#define __DECLARE_TEST_DEBUG __DECLARE_TEST
+#else
+#define __DECLARE_TEST_DEBUG
+#endif
+
+
+
+
+#if !defined(ASSERT)
+/**
+@publishedAll
+@released
+
+Generates _ASSERT_DEBUG code that calls User::Invariant() if the specified
+condition is not true.
+
+@param x A conditional expression which results in true or false.
+*/
+#define ASSERT(x) __ASSERT_DEBUG(x,User::Invariant())
+#endif
+
+
+
+
+#ifndef __VALUE_IN_REGS__ 
+/**
+@publishedPartner
+@released
+*/
+#define __VALUE_IN_REGS__ 
+#endif
+
+
+
+
+#if defined(_DEBUG)
+/**
+@publishedAll
+@released
+*/
+#define __DEBUG_ONLY(x) x
+#else
+#define __DEBUG_ONLY(x)
+#endif
+
+
+
+
+#ifdef __KERNEL_MODE__
+
+/** @internalComponent */
+#define	KIMPORT_C	IMPORT_C
+
+/** @internalComponent */
+#define	KEXPORT_C	EXPORT_C
+
+/** @internalComponent */
+#define	UIMPORT_C
+
+/** @internalComponent */
+#define	UEXPORT_C
+#else
+#define	KIMPORT_C
+#define	KEXPORT_C
+#define	UIMPORT_C	IMPORT_C
+#define	UEXPORT_C	EXPORT_C
+#endif
+
+
+
+
+/**
+@publishedAll
+@released
+
+Asserts that a condition is true at compilation time.
+
+@param x Condition to assert
+*/
+#define __ASSERT_COMPILE(x)		void __compile_time_assert(int __check[(x)?1:-1])
+
+#ifdef __REMOVE_PLATSEC_DIAGNOSTICS__
+/**
+@publishedPartner
+@released
+*/
+#ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+#define __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+#endif /*__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__*/
+#endif /*__REMOVE_PLATSEC_DIAGNOSTICS__*/
+
+/**
+@internalComponent
+*/
+static const char* const KSuppressPlatSecDiagnosticMagicValue = (const char*)1;
+
+#ifndef __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__
+/**
+@internalComponent
+*/
+#define __PLATSEC_DIAGNOSTIC_FILE_AND_LINE_HELPER(l) #l
+/**
+@internalComponent
+*/
+#define __PLATSEC_DIAGNOSTIC_FILE_AND_LINE_HELPER2(f,l) f "(" __PLATSEC_DIAGNOSTIC_FILE_AND_LINE_HELPER(l) ")"
+/**
+@publishedPartner
+@released
+*/
+#define __PLATSEC_DIAGNOSTIC_FILE_AND_LINE __PLATSEC_DIAGNOSTIC_FILE_AND_LINE_HELPER2(__FILE__,__LINE__)
+
+/**
+@publishedPartner
+@released
+
+A macro that should be used to enclose a platform security diagnostic
+'C' style string that can be passed to a capability checking function such
+as RThread::HasCapability() and Kern::CurrentThreadHasCapability().
+
+The content of the string is emitted if the capability test finds that
+the capability is not present.
+
+The macro provides a convenient mechanism that allows the strings to
+be removed from future versions of Symbian OS.
+
+For example:
+
+@code
+if(!Kern::CurrentThreadHasCapability(ECapabilityPowerMgmt,__PLATSEC_DIAGNOSTIC_STRING("Checked by Hal function EDisplayHalSetState")))
+    {
+    return KErrPermissionDenied;
+    }			
+@endcode
+
+In this example, the string:
+
+@code
+Checked by Hal function EDisplayHalSetState
+@endcode
+
+is emitted if the calling process does not have the ECapabilityPowerMgmt capability.
+
+@param s A C-style string.
+
+@see RProcess::HasCapability()
+@see RThread::HasCapability()
+@see RMessagePtr2::HasCapability()
+@see User::CreatorHasCapability()
+*/
+#define __PLATSEC_DIAGNOSTIC_STRING(s) s
+
+/**
+When this value is used in Platform Security APIs as the value for the aDiagnosticText
+argument, these APIs will not emit any form of diagnostic message.
+@publishedPartner
+@released
+*/
+// Note this value is the same as KSuppressPlatSecDiagnosticMagicValue
+// and used to be a set by it but that caused an error with GCCE compiler
+static const char* const KSuppressPlatSecDiagnostic = (const char*)1;
+
+#else /* __REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__ */
+
+#define __PLATSEC_DIAGNOSTIC_STRING(s) NULL
+
+#ifndef __KERNEL_MODE__
+#ifndef __REMOVE_PLATSEC_DIAGNOSTICS__
+/**
+When this value is used in Platform Security APIs as the value for the aDiagnostic
+argument, these APIs will not emit any form of diagnostic message.
+@publishedPartner
+@released
+*/
+#define KSuppressPlatSecDiagnostic		NULL, NULL
+
+#else /* __REMOVE_PLATSEC_DIAGNOSTICS__ */
+
+/**
+When this value is used in Platform Security APIs as the value for the aDiagnostic
+argument, these APIs will not emit any form of diagnostic message.
+@publishedPartner
+@release
+*/
+#define KSuppressPlatSecDiagnostic		NULL
+
+#endif /* !__REMOVE_PLATSEC_DIAGNOSTICS__ */
+#endif /* !__KERNEL_MODE__ */
+#endif /* !__REMOVE_PLATSEC_DIAGNOSTIC_STRINGS__ */
+
+/*
+ * MSVC operator new and operator new[] header guards
+ */
+#ifdef __PLACEMENT_NEW
+#define __PLACEMENT_NEW_INLINE
+#endif /* __PLACEMENT_NEW */
+
+#if defined(__VC32__) && (_MSC_VER < 1300)
+#define __PLACEMENT_VEC_NEW_INLINE
+#endif /* version of MSVC that doesn't support overloaded operator new[] */
+
+/**
+Calling convention qualifier for functions involving floating point 
+variables passed or returned by value.
+@publishedAll
+@released
+*/
+#ifndef __SOFTFP
+#define __SOFTFP
+#endif /* __SOFTFP */
+
+#endif /* __E32DEF_H__ */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/long/paths/test.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]=__TESTNAME__;
+
+class fred {
+	public:
+	int something;
+	int aMethod(void);
+};
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/longfilenames/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+WINSCW
+
+PRJ_MMPFILES
+longfilenames.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/longfilenames/longerfilenamethanyoumightnormallyexpecttobepresent.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include <e32base.h>
+#include <e32cons.h>
+
+_LIT(KTxtEPOC32EX,"EXAMPLES");
+_LIT(KTxtExampleCode,"Symbian OS Example Code");
+_LIT(KFormatFailed,"failed: leave code=%d");
+_LIT(KTxtOK,"ok");
+_LIT(KTxtPressAnyKey," [press any key]");
+
+// public
+LOCAL_D CConsoleBase* console; // write all your messages to this
+LOCAL_C void doExampleL(); // code this function for the real example
+
+// private
+LOCAL_C void callExampleL(); // initialize with cleanup stack, then do example
+
+GLDEF_C TInt E32Main() // main function called by E32
+    {
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
+	TRAPD(error,callExampleL()); // more initialization, then do example
+	__ASSERT_ALWAYS(!error,User::Panic(KTxtEPOC32EX,error));
+	delete cleanup; // destroy clean-up stack
+	__UHEAP_MARKEND;
+	return 0; // and return
+    }
+
+LOCAL_C void callExampleL() // initialize and call example code under cleanup stack
+    {
+	console=Console::NewL(KTxtExampleCode,TSize(KConsFullScreen,KConsFullScreen));
+	CleanupStack::PushL(console);
+	TRAPD(error,doExampleL()); // perform example function
+	if (error)
+		console->Printf(KFormatFailed, error);
+	else
+		console->Printf(KTxtOK);
+	console->Printf(KTxtPressAnyKey);
+	console->Getch(); // get and ignore character
+	CleanupStack::PopAndDestroy(); // close console
+    }
+
+LOCAL_C void doExampleL()
+    {
+	_LIT(KHelloWorldText,"Hello world!\n");
+	console->Printf(KHelloWorldText);
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/make_crash/exception_crash.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+armv5
+
+PRJ_EXPORTS
+make_crash.flm /epoc32/tools/makefile_templates/tools/make_crash.flm
+make_crash.xml /epoc32/tools/makefile_templates/tools/make_crash.xml
+
+PRJ_EXTENSIONS
+
+start extension tools.make_crash
+option CRASH_TYPE exception_caught 
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/make_crash/make_crash.flm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,95 @@
+# Invokes different types of make crashes
+
+
+## Converting a list of source files to a list of object files without altering
+## their relative order. Also deals with multiple file types mapping to the same
+## object type e.g. .CPP and .cpp and .c++ all map to .o
+	
+# $1 - the list of suffixes to replace
+# $2 - the suffix to replace them with
+# $3 - the list of strings to perform the replacement on
+define allsuffixsubst_internal
+    $(if $1,$$(patsubst %$(firstword $1),%$2,$(call allsuffixsubst_internal,$(wordlist 2,$(words $1),$1),$2,$3)),$3)
+endef
+define allsuffixsubst
+    $(eval allsuffixsubst_RESULT:=$(call allsuffixsubst_internal,$1,$2,$3))$(allsuffixsubst_RESULT)
+endef
+
+
+x:=a b c d e f g h i j
+
+x100:=$(foreach i,$(x),$(x))
+x10000:=$(foreach i,$(x100),$(x100))
+x1000000:=$(foreach i,$(x10000),$(x100))
+
+
+ifeq ($(CRASH_TYPE), memory_exhausted)
+    mystring:= \
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\
+    xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+    $(foreach c,$(x100),$(eval mystring:=$$(mystring)$$(mystring)))
+endif
+
+
+ifeq ($(CRASH_TYPE), exception_caught)
+    manyfiles:=$(foreach f,$(x1000000),fred.cia fred.cpp fred.c++)
+    objects:=$(call allsuffixsubst,.Cia .CiA .cIA. .CpP .cPp .CC .C++ .cia .cpp .c++ .cc .CPP .CIA .Cpp,.o,$(manyfiles))
+endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/make_crash/make_crash.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?> 
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+<!--  Extension interfaces : replacements for Template Extension Makefiles 
+  --> 
+
+ <interface name="tools.make_crash" extends="Symbian.UserFLM" flm="make_crash.flm">
+  <param name="CRASH_TYPE" /> 
+ </interface>
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/make_crash/memory_crash.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+armv5
+
+PRJ_EXPORTS
+make_crash.flm /epoc32/tools/makefile_templates/tools/make_crash.flm
+make_crash.xml /epoc32/tools/makefile_templates/tools/make_crash.xml
+
+PRJ_EXTENSIONS
+
+start extension tools.make_crash
+option CRASH_TYPE memory_exhausted 
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/make_engine_errors/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,9 @@
+
+PRJ_EXPORTS
+with_make_errors.flm /epoc32/tools/makefile_templates/tools/with_make_errors.flm
+with_make_errors.xml /epoc32/tools/makefile_templates/tools/with_make_errors.xml
+
+PRJ_EXTENSIONS
+start extension tools/with_make_errors
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/make_engine_errors/with_make_errors.flm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,10 @@
+
+ALL:: a b c
+
+a: b
+b: a
+
+c: non_existent_&_needs_escaping.txt
+
+$(call raptor_phony_recipe,name,ALL,,echo "this FLM is rubbish")
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/make_engine_errors/with_make_errors.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?> 
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd"> 
+
+<interface name="tools.with_make_errors" flm="with_make_errors.flm">
+</interface>
+
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/metadep.sh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,62 @@
+#!/bin/bash
+
+# Test SBSv2 Metadata dependency generation to see if
+# changing a metadata file would trigger a rebuild.
+
+export BASH_EPOCROOT=${EPOCROOT//\\//}
+export BASH_SBSHOME=${SBS_HOME//\\//}
+export BASH_SBSMINGW=${SBS_MINGW//\\//}
+export METAMAKEFILE=${BASH_EPOCROOT}/epoc32/build/metadata_all.mk 
+export SBSMAKEFILE=${SBSMAKEFILE:-${BASH_EPOCROOT}/epoc32/build/smoketests/metadep.mk}
+export SBSLOGFILE=${SBSLOGFILE:-${BASH_EPOCROOT}/epoc32/build/smoketests/metadep.log}
+export SBSCOMMAND="sbs -b smoke_suite/test_resources/simple/bld.inf -n -m $SBSMAKEFILE -f $SBSLOGFILE"
+
+# Ensure that the host type is set for Raptor:
+eval $($BASH_SBSHOME/bin/gethost.sh -e)
+
+if [ -z "$HOSTPLATFORM" ]; then
+	echo "Error: HOSTPLATFORM could not be determined." 1>&2
+	exit 1
+fi
+
+# N.B. The use of sleep 1 is required. If I build X, dependent on Y then
+# update Y too quickly, a subsequent attempt to make X won't notice the
+# change in Y.  It's not clear if this is make's fault or just the way that
+# file timestamps are recorded.
+
+if [ "$OSTYPE" = "cygwin" ]
+then
+export MAKECOMMAND="${BASH_SBSMINGW:-${BASH_SBSHOME}/${HOSTPLATFORM_DIR}/mingw}/bin/make"
+else
+export MAKECOMMAND="$BASH_SBSHOME/$HOSTPLATFORM_DIR/bin/make"
+fi
+
+echo "Step 1 - No changes, so there should be no need to rerun:"
+( set -x
+$SBSCOMMAND &&
+sleep 1 &&
+$MAKECOMMAND -rf  ${METAMAKEFILE}
+)
+echo ""
+
+
+
+echo "Step 2 - Run sbs, change a bld inf, see the rerunning message"
+#( set -x
+$SBSCOMMAND &&
+sleep 1 &&
+touch smoke_suite/test_resources/simple/bld.inf &&
+$MAKECOMMAND -rf  ${METAMAKEFILE}
+#)
+echo ""
+
+echo "Step 3 - Run sbs, change an mmp, see the rerunning message twice"
+( set -x
+$SBSCOMMAND &&
+sleep 1 &&
+touch smoke_suite/test_resources/simple/simple.mmp &&
+$MAKECOMMAND -rf  ${METAMAKEFILE}
+$MAKECOMMAND -rf  ${METAMAKEFILE}
+)
+echo ""
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/apply/apply_test_exported_variants.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+  <!-- This variant is used so that we can tell if the APPLY keyword
+       can find variants exported into the epoc32 tree -->
+
+  <var name="apply_test_exported_var">
+	<append name="CDEFS" value="APPLYTESTEXPORTEDVAR" />
+  </var>
+  
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/apply/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+
+PRJ_EXPORTS
+apply_test_exported_variants.xml /epoc32/tools/makefile_templates/
+
+PRJ_MMPFILES
+test_mmp_apply.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/apply/test_mmp_apply.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,9 @@
+
+#include "e32def.h"
+
+char test[] = "test mmp keyword APPLY";
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/apply/test_mmp_apply.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,16 @@
+
+TARGET			test_mmp_apply
+TARGETTYPE		EXE
+
+APPLY no_such_var
+
+LIBRARY			euser.lib
+
+SYSTEMINCLUDE		/epoc32/include
+
+APPLY apply_test_append_cdefs
+
+SOURCE			test_mmp_apply.cpp
+
+APPLY apply_test_exported_var
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/epocnestedexceptions/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,3 @@
+PRJ_MMPFILES
+test.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/epocnestedexceptions/test.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+#include <e32def.h>
+
+TInt E32Main()
+{
+	return 0;
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/epocnestedexceptions/test.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,11 @@
+TARGET			test_mmp_epocnestedexceptions.exe
+TARGETTYPE		EXE
+
+LIBRARY			euser.lib
+
+SYSTEMINCLUDE   /epoc32/include
+
+SOURCE			test.cpp
+
+EPOCNESTEDEXCEPTIONS
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/eabi/shutdownsrvu.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+EXPORTS
+	_ZN19CServShutdownServer10ConstructLEv @ 1 NONAME
+	_ZN19CServShutdownServer10NotifySaveEN13MSaveObserver9TSaveTypeE @ 2 NONAME
+	_ZN19CServShutdownServer13ClientArrayLCEv @ 3 NONAME
+	_ZN19CServShutdownServer14CancelPowerOffEv @ 4 NONAME
+	_ZN19CServShutdownServer20HandleShutdownEventLEN13MSaveObserver9TSaveTypeEi11TPowerState @ 5 NONAME
+	_ZN19CServShutdownServer23HandlePowerNotifRequestERK7RThread @ 6 NONAME
+	_ZN19CServShutdownServer4NewLEv @ 7 NONAME
+	_ZN19CServShutdownServerC1Ei @ 8 NONAME
+	_ZN19CServShutdownServerC2Ei @ 9 NONAME
+	_ZN19CServShutdownServerD0Ev @ 10 NONAME
+	_ZN19CServShutdownServerD1Ev @ 11 NONAME
+	_ZN19CServShutdownServerD2Ev @ 12 NONAME
+	_ZN20CServShutdownSession8ServiceLERK9RMessage2 @ 13 NONAME
+	_ZN20CServShutdownSessionC1Ev @ 14 NONAME
+	_ZN20CServShutdownSessionC2Ev @ 15 NONAME
+	_ZN20CServShutdownSessionD0Ev @ 16 NONAME
+	_ZN20CServShutdownSessionD1Ev @ 17 NONAME
+	_ZN20CServShutdownSessionD2Ev @ 18 NONAME
+	_ZNK19CServShutdownServer10IsPowerOffEv @ 19 NONAME
+	_ZNK19CServShutdownServer12IsClientHungE9TThreadId @ 20 NONAME
+	_ZNK19CServShutdownServer16GetShutdownStateERiS0_ @ 21 NONAME
+	_ZTI19CServShutdownServer @ 22 NONAME ; #<TI>#
+	_ZTI20CServShutdownSession @ 23 NONAME ; #<TI>#
+	_ZTV19CServShutdownServer @ 24 NONAME ; #<VT>#
+	_ZTV20CServShutdownSession @ 25 NONAME ; #<VT>#
+	_ZThn104_N19CServShutdownServer13ClientArrayLCEv @ 26 NONAME ; #<thunk>#
+	_ZThn104_N19CServShutdownServer20HandleShutdownEventLEN13MSaveObserver9TSaveTypeEi11TPowerState @ 27 NONAME ; #<thunk>#
+	_ZThn104_NK19CServShutdownServer12IsClientHungE9TThreadId @ 28 NONAME ; #<thunk>#
+	_ZThn104_NK19CServShutdownServer16GetShutdownStateERiS0_ @ 29 NONAME ; #<thunk>#
+	KShtdwnTimeoutBase @ 30 NONAME DATA 4
+	KShtdwnTimeoutClient @ 31 NONAME DATA 4
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/group/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../inc/shutdownsrv.h
+
+PRJ_MMPFILES
+../group/shutdownsrv.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/group/shutdownsrv.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+TARGET			shutdownsrv.dll
+CAPABILITY 		PowerMgmt TrustedUI ProtServ DiskAdmin
+TARGETTYPE		DLL
+TARGETPATH		/system/libs
+
+EXPORTLIBRARY		exportlibrary_shutdownsrv.lib
+
+UID			0x1000008D	0x10004903
+VENDORID 0x70000001
+
+SOURCEPATH		../src
+
+userinclude		.
+userinclude		../inc
+
+systeminclude		/epoc32/include
+
+#if defined(SYMBIAN_SSM_GRACEFUL_SHUTDOWN)
+systeminclude		/epoc32/include/ssm
+#endif
+
+source			shutdownsrv.cpp shutdowntimer.cpp shutdownsrvpatchdata.cpp
+
+library			euser.lib bafl.lib efsrv.lib hal.lib
+
+#if defined(SYMBIAN_SSM_GRACEFUL_SHUTDOWN)
+library			ssmcmn.lib	estor.lib
+#endif
+
+deffile 		shutdownsrv.def
+
+START WINS
+			copy_for_static_linkage
+END
+
+START MARM
+END
+
+LINKEROPTION armcc --verbose
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/inc/shutdownsrv.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#if !defined(SHUTDOWNSRV_H)
+#define SHUTDOWNSRV_H
+
+#include <e32base.h>
+#include <savenotf.h>
+#include <e32power.h>
+#include <s32mem.h>
+
+class CShutdownTimer;
+
+/**
+This class describes an interface, which is used by LaF Shutdown Manager to notify the Shutdown Server of 
+device shutdown, so that the server can take appropriate power management steps. The concrete implementation 
+of this interface is provided by CServShutdownServer class.
+@publishedPartner
+@released
+*/
+class MShutdownEventObserver
+	{
+public:
+	/**
+	This method has to be called, when the observed object requires the Shutdown Server to notify registered 
+	clients about the shutdown event, such as MSaveObserver::ESaveData, MSaveObserver::ESaveAll, 
+	MSaveObserver::EReleaseRAM,...
+	@param aAction The type of the requested action
+	@param aPowerOff If it is non-zero, this is the beginning of a powerdown sequence.
+	@param aEvent The type of the powerdown event 
+	@leave KErrNotSupported Leaves if aEvent is invalid  
+	*/
+	virtual void HandleShutdownEventL(MSaveObserver::TSaveType aAction,TBool aPowerOff, TPowerState aEvent = EPwStandby)=0;
+	/**
+	This method creates an array of CArrayFix<TThreadId> type and appends to it the	thread id-s of 
+	all the registered clients. The created CArrayFix<TThreadId> instance will be pushed on the 
+	cleanup stack. The caller becomes responsible for the memory allocated for this array.
+	@return A pointer to a CArrayFix<TThreadId> array with the client thread id-s.
+	@leave Some system-wide error codes including KErrNoMemory.
+	*/
+	virtual CArrayFix<TThreadId>* ClientArrayLC()=0;
+	/**
+	Checks if a particular client is hung in that the client has not re-registered with the 
+	Shutdown Server indicating it is ready for the next stage of the shutdown.
+	@param aId Client's thread id.
+	@return Non-zero if the client with this thread id has no pending request.
+	*/
+	virtual TBool IsClientHung(TThreadId aId) const=0;
+	/**
+	This method returns information about the shutdown status.
+	@param aPowerOff An output parameter, where power-off status will be stored. 
+	                 It will be non-zero, if a powerdown sequence has been initiated.
+	@param aAllSessionsHavePendingRequest An output parameter. It will be non-zero, if all clients 
+	                 have pending requests to receive further events from the Shutdown Manager.
+	*/
+	virtual void GetShutdownState(TBool& aPowerOff, TBool& aAllSessionsHavePendingRequest) const=0;
+	};
+
+/**
+This class describes an object, which handles requests, such as of MSaveObserver::TSaveType type.
+When CServShutdownServer::HandleShutdownEventL() gets called, the CServShutdownServer implementation
+will notify all registered clients, completing their asynchronous messages 
+(CServShutdownSession::iPtr), then it will wait until all clients re-register itself and
+if this is a beginning of a powerdown sequence, the method will store the locales and the HAL
+properties subsequently switching off the power.
+@internalTechnology
+*/
+class CServShutdownServer : public CServer2, public MShutdownEventObserver
+	{
+public:
+	IMPORT_C static CServShutdownServer* NewL();
+	IMPORT_C ~CServShutdownServer();
+	IMPORT_C void HandlePowerNotifRequest(const RThread& aClient);
+	IMPORT_C void NotifySave(MSaveObserver::TSaveType aSaveType);
+	IMPORT_C TBool IsPowerOff() const;
+	IMPORT_C void CancelPowerOff();
+	void SwitchOff();
+#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+	TInt ClientArrayCount();
+	void ClientArrayL(const RMessage2& aMessage);
+#endif //SYMBIAN_SSM_GRACEFUL_SHUTDOWN	
+public:
+	IMPORT_C virtual void ConstructL();
+public: // from MShutdownEventObserver
+	IMPORT_C void HandleShutdownEventL(MSaveObserver::TSaveType aAction,TBool aPowerOff, TPowerState aEvent = EPwStandby);
+	IMPORT_C CArrayFix<TThreadId>* ClientArrayLC();
+	IMPORT_C TBool IsClientHung(TThreadId aId) const;
+	IMPORT_C void GetShutdownState(TBool& aPowerOff, TBool& aAllSessionsHavePendingRequest) const;
+
+protected:
+	IMPORT_C CServShutdownServer(TInt aPriority);
+private:
+	TBool AllSessionsHavePendingRequest() const;
+	void DoSwitchOff();
+private: // from CServer
+	CSession2* NewSessionL(const TVersion& aVersion,const RMessage2& aMessage) const;
+private:
+	TBool iPowerOff;
+	TPowerState iPowerEvent;	
+	CShutdownTimer* iShutdownTimer;	
+	};
+
+/**
+This class describes a server side session object, which handles reqistration requests
+of clients, which are interested in power down events.
+@internalTechnology
+*/
+class CServShutdownSession : public CSession2
+	{
+public:
+	IMPORT_C ~CServShutdownSession();
+protected:
+	IMPORT_C CServShutdownSession();
+public:
+	static CServShutdownSession* NewL();
+	TBool HasPendingRequest() const;
+	void NotifySave(MSaveObserver::TSaveType aSaveType);
+protected: // from CSession
+	IMPORT_C void ServiceL(const RMessage2& aMessage);
+private:
+	void RequestNotifyPowerDown(const RMessage2& aMessage);
+	void RequestNotifyPowerDownCancel();
+	void DoServiceL(const RMessage2& aMessage, TBool& aCompleteRequest);
+	void PowerOffL(const RMessage2& aMessage);
+	void PowerStateL(const RMessage2& aMessage) const;
+
+#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+	void HandleShutdownEventL(const RMessage2& aMessage);
+	void ClientArrayL(const RMessage2& aMessage);
+	void IsClientHung(const RMessage2& aMessage) const;
+	void GetShutdownState(const RMessage2& aMessage) const;
+	void ClientArrayCount(const RMessage2& aMessage) const;
+#endif //SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+
+public:
+	TThreadId ClientThreadId() const;
+
+private:
+	RMessagePtr2 iPtr;
+	TInt iCurrentEvent;
+	TInt iOutstandingEvent;
+	};
+
+#endif// SHUTDOWNSRV_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdownsrv.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,759 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "shutdownsrv.h"
+#include "savenotf.h"
+#include "savepriv.h"
+#include "shutdowntimer.h"
+#include <hal.h>
+#include <f32file.h>
+#include <bautils.h>
+
+#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+#include <s32mem.h>
+#include <ssmgracefulshutdown_patch.h>
+#endif
+
+//The function used to start the profiler, while profiling the shutdown.
+#ifdef __PROFILE_SHUTDOWN
+_LIT(KProfilerCmd,"start -noui");
+void StartProfiler()
+	{
+	RProcess p;
+	TInt r=p.Create(KProfilerName,KProfilerCmd);
+	if (r==KErrNone)
+		{
+		p.Resume();
+		p.Close();
+		}
+	}
+#endif
+
+//The function used to unload the profiler, while profiling the shutdown.
+#ifdef __PROFILE_SHUTDOWN
+void UnloadProfiler()
+	{
+	TFullName name;
+	TFindServer findSvr(KProfilerName);
+	Profiler::Unload();
+	while(findSvr.Next(name) == KErrNone)
+		{
+		User::After(1000000);
+		findSvr.Find(KProfilerName);
+		}
+	}
+#endif
+
+//
+// class CServShutdownServer
+//
+
+/**
+Standard phase-one factory method for creating CServShutdownServer instances.
+@return A newly-constructed shutdown server object.
+@leave Some system-wide error codes including KErrNoMemory.
+*/
+EXPORT_C CServShutdownServer* CServShutdownServer::NewL()
+	{ // static
+	CServShutdownServer* self=new(ELeave) CServShutdownServer(CActive::EPriorityStandard);
+	return self;
+	}
+
+/**
+Destructor.
+Releases CShutdownTimer object if it has been allocated.
+*/
+EXPORT_C CServShutdownServer::~CServShutdownServer()
+	{
+	delete iShutdownTimer;
+	}
+
+/**
+This method iterates through all session instances and checks that all they have pending
+requests (which means that all clients have completed their powerdown related processing
+and re-registered itself back to the shutdown server).. If that's true (all sessions have
+pending requests) and iPowerOff flag is nonzero, the method will call SwitchOff() - the
+power will be switched off. 
+@see CServShutdownServer::SwitchOff()
+@see CServShutdownSession::HasPendingRequest()
+*/
+EXPORT_C void CServShutdownServer::HandlePowerNotifRequest(const RThread& /*aClient*/)
+	{
+	// if all sessions have a pending request then they've all saved their data and we can switch off
+	TBool completed=ETrue;
+	TDblQueIter<CSession2> iter(iSessionIter);
+	iter.SetToFirst();
+
+	for (CSession2* session=iter++; session!=NULL; session=iter++)
+		{
+		if (!static_cast<CServShutdownSession*>(session)->HasPendingRequest())
+			{
+			completed=EFalse;
+			break;
+			}
+		}
+	if (completed && iPowerOff)
+		{
+		SwitchOff();
+		}
+	}
+
+/**
+This method will call SwitchOff(), if there are no sessions, so - no clients.
+If there are registered clients (sessions), the method will call CServShutdownSession::NotifySave()
+for each of them.
+If the timer object has been initialised, it calculates the shutdown timeout value 
+and adds the timer to the active scheduler.
+@param aSaveType The action, which will be given to the clients, when calling their 
+                 MSaveObserver::SaveL() implementations.
+@see CServShutdownServer::SwitchOff()
+@see CServShutdownSession::NotifySave()
+*/
+EXPORT_C void CServShutdownServer::NotifySave(MSaveObserver::TSaveType aSaveType)
+	{
+	TDblQueIter<CSession2> iter(iSessionIter);
+	iter.SetToFirst();
+	CSession2* p=iter++;
+	if (p==NULL)
+		{
+		if (iPowerOff)
+			{
+			SwitchOff();
+			}
+		}
+	else
+		{
+		TInt numClients = 0;
+
+		iter.SetToFirst();
+	    for (CSession2* session=iter++; session!=NULL; session=iter++)
+			{
+			static_cast<CServShutdownSession*>(session)->NotifySave(aSaveType);
+			numClients++;  
+			}
+			
+		if(iShutdownTimer && !iShutdownTimer->IsActive())
+			{
+			iShutdownTimer->Start(numClients);
+			}
+		}
+	}
+
+/**
+@return Non-zero If the powerdown sequence has been initiated.
+*/
+EXPORT_C TBool CServShutdownServer::IsPowerOff() const
+	{
+	return iPowerOff;
+	}
+
+/**
+Cancels any power off request.
+*/
+EXPORT_C void CServShutdownServer::CancelPowerOff()
+	{
+	iPowerOff=EFalse;
+	
+	// Cancel the timer.
+	if (iShutdownTimer)
+		{
+		iShutdownTimer->Cancel();
+		}
+	}
+
+/**
+@param aPriority The active object priority.
+*/
+EXPORT_C CServShutdownServer::CServShutdownServer(TInt aPriority):
+	CServer2(aPriority), iShutdownTimer(0)
+	{
+    }
+
+/**
+Completes the server construction by adding the server to the active scheduler and initializing the
+CShutdownTimer object if applicable.
+@leave See CServer2::StartL() leave error codes.
+@see CServer2::StartL()
+@panic KErrNotSupported Incorrect patchable variables configuration.
+*/
+EXPORT_C void CServShutdownServer::ConstructL()
+	{
+	iShutdownTimer = CShutdownTimer::NewL(*this);
+	#ifdef TEST_SHUTDOWN_SERVER 
+	StartL(__TEST_SHUTDOWN_SERVER_NAME);
+	#else
+	StartL(__SHUTDOWN_SERVER_NAME);
+	#endif
+	}
+
+/**
+This method switches off the power using the Power API.
+If there is a defined SYSLIBS_TEST macro, the method does nothing.
+*/
+void CServShutdownServer::DoSwitchOff()
+	{
+	//Finalize the drives before shutting down
+	RFs fs;
+	TInt r=fs.Connect(); 
+	if (r==KErrNone) 
+		{
+		//Ignore the error code, as it is not a critical call
+		r=fs.FinaliseDrives();
+		fs.Close();
+		}
+#ifdef 	SYSLIBS_TEST 
+		// Test mode, only prints debug message.
+		RDebug::Printf("CServShutdownServer::SwitchOff() gets run in SYSLIBS_TEST mode.\n");
+#else 	//SYSLIBS_TEST
+	// restart or standby/shutdown using Power API 
+	if (Power::EnableWakeupEvents(iPowerEvent) == KErrNone)
+		{
+		// Prepare to wake up if power event is standby
+		TRequestStatus s;
+		Power::RequestWakeupEventNotification(s);
+		Power::PowerDown(); // if event is Restart, this function should never return
+		User::WaitForRequest(s);
+		}
+#endif //SYSLIBS_TEST
+	} 
+void CServShutdownServer::SwitchOff()
+	{
+	// If the timer has applied, cancel any outstanding requests, 
+	// no matter SwitchOff() has been triggered by the timer or the shutdown server.
+	if (iShutdownTimer)
+		{
+		iShutdownTimer->Cancel();
+		}
+
+	if (iPowerOff)
+		{
+#ifdef __PROFILE_SHUTDOWN
+		UnloadProfiler();
+#endif //__PROFILE_SHUTDOWN
+		}
+	//SSM shutdown is used only when patchable constant KSsmGracefulShutdown is true 
+#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+	if (iPowerOff && !IsSsmGracefulShutdown())
+#else
+	if (iPowerOff)
+#endif
+		{
+		//Shutdown using old shutdownsrv, not SSM
+		DoSwitchOff();
+		}
+	iPowerOff = EFalse;
+	}
+
+/**
+This method creates a new server side session object.
+@param aVersion Shutdown server version number.
+@return A pointer to the created session object.
+@leave KErrNotSupported Unknown shutdown server version
+@leave Some system-wide error codes including KErrNoMemory.
+*/
+CSession2* CServShutdownServer::NewSessionL(const TVersion& aVersion,const RMessage2& /*aMessage*/) const
+	{
+	TVersion v(KShutdownMajorVN,KShutdownMinorVN,KShutdownBuildVN);
+	if (!User::QueryVersionSupported(v,aVersion))
+		User::Leave(KErrNotSupported);
+
+	CSession2* pSession = CServShutdownSession::NewL();
+	return pSession;
+	}
+
+/**
+This method has to be called, when the registered clients have to be notified that a 
+particular action has to be done, such as MSaveObserver::ESaveData, MSaveObserver::ESaveAll, 
+MSaveObserver::EReleaseRAM,...
+If this is a beginning of a powerdown sequence, the method will store the locales and the HAL
+properties.
+If the requested action is not MSaveObserver::ESaveNone, the method will call 
+CServShutdownServer::NotifySave().
+@param aAction The type of the requested action
+@param aPowerOff If it is non-zero, this is the beginning of a powerdown sequence.
+@param aEvent The type of the powerdown event (power off or restart)
+@leave KErrNotSupported Leaves if aEvent is invalid  
+@see CServShutdownServer::NotifySave()
+@see TPowerState
+*/
+EXPORT_C void CServShutdownServer::HandleShutdownEventL(MSaveObserver::TSaveType aAction,TBool aPowerOff, TPowerState aEvent)
+	{
+	if( aPowerOff )
+		{
+		__ASSERT_ALWAYS((aEvent>EPwActive)&&(aEvent<EPwLimit), User::Leave(KErrNotSupported));
+#ifdef __PROFILE_SHUTDOWN
+		StartProfiler();
+#endif
+
+#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+		if (!IsSsmGracefulShutdown())
+			{
+			// Save the state of the HAL
+			// The state of the locale should be saved before the HAL
+			BaflUtils::PersistLocale();
+			BaflUtils::PersistHAL();
+			}
+#else
+		// Save the state of the HAL
+		// The state of the locale should be saved before the HAL
+		BaflUtils::PersistLocale();
+		BaflUtils::PersistHAL();
+#endif
+		}
+
+	iPowerOff=aPowerOff;
+	iPowerEvent = aEvent;
+	// add LAF setting for powering down screen (& keyboard??)
+	if (aAction != MSaveObserver::ESaveNone)
+		{
+		NotifySave(aAction);
+		}
+	}
+
+/**
+This method returns an information about the shutdown status.
+@param aPowerOff An output parameter, where iPowerOff value will be stored. 
+                 It will be non-zero, if a powerdown sequence has been initiated.
+@param aAllSessionsHavePendingRequest An output parameter. It will be non-zero, if
+                 all clients has pending requests.
+*/
+EXPORT_C void CServShutdownServer::GetShutdownState(TBool& aPowerOff, TBool& aAllSessionsHavePendingRequest) const
+	{
+	aAllSessionsHavePendingRequest = AllSessionsHavePendingRequest();
+	aPowerOff = iPowerOff;
+	}
+
+/**
+This method creates an array of CArrayFix<TThreadId> type and appends to it the
+thread id-s of the all registered clients.
+The created CArrayFix<TThreadId> instance will be pushed on the cleanup stack.
+@return A pointer to a CArrayFix<TThreadId> array with the client thread id-s.
+@leave Some system-wide error codes including KErrNoMemory.
+*/
+EXPORT_C CArrayFix<TThreadId>* CServShutdownServer::ClientArrayLC()
+	{
+	CArrayFix<TThreadId>* clientArray=new(ELeave) CArrayFixFlat<TThreadId>(2);
+	CleanupStack::PushL(clientArray);
+	TDblQueIter<CSession2> iter(iSessionIter);
+	iter.SetToFirst();
+	TKeyArrayFix key(0,ECmpTInt);
+    for (CSession2* session=iter++; session!=NULL; session=iter++)
+		{
+		TThreadId id=static_cast<CServShutdownSession*>(session)->ClientThreadId();
+		TInt pos;
+		if (clientArray->Find(id,key,pos)!=0)
+			{
+			clientArray->AppendL(id);
+			}
+		}
+	return clientArray;
+	
+	
+	}
+
+#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+/**
+This method will write thread id-s of all clients that are registered for shutdown notification in to a streem.
+@param aMessage consists of buffer, clientside array count and server side array count 
+*/
+void CServShutdownServer::ClientArrayL(const RMessage2& aMessage)
+	{
+	const TInt arrayItemCount = ClientArrayCount();
+	//write all registered client array in a buffer only when client side 
+	//array count is equal to server side array count
+	if(arrayItemCount == aMessage.Int1())
+		{
+		const TInt sizeRequired = arrayItemCount * sizeof(TThreadId);
+		CBufFlat* const buf=CBufFlat::NewL(sizeRequired);
+		CleanupStack::PushL(buf);
+		RBufWriteStream writeStream(*buf);
+		CleanupClosePushL(writeStream); 
+		TDblQueIter<CSession2> iter(iSessionIter);
+		iter.SetToFirst();
+    	for (CSession2* session=iter++; session!=NULL; session=iter++)
+			{
+			TThreadId id=static_cast<CServShutdownSession*>(session)->ClientThreadId();
+			//Thread id (which is TUint64) is broken in to two TUint32 and written as RWriteStream doesnt 
+			//support TUint64. Client API will recreate TUint64 value from these TUint32 values.
+			if(id.Id())
+				{
+				//RWriteStream there is no API to writes a TUint64 value as a 64 bit value to stream
+				writeStream.WriteUint32L(I64HIGH(id.Id()));
+				writeStream.WriteUint32L(I64LOW(id.Id()));
+				}
+			}
+		writeStream.CommitL();
+		aMessage.WriteL(0, buf->Ptr(0));
+		CleanupStack::PopAndDestroy(2,buf);	//writeStream, buf 
+		}
+	else
+		{
+		aMessage.Write(2, TPckg<TInt>(arrayItemCount));
+		}	
+	
+	}
+		
+/**
+This method will return the number of client that are registered for Shutdown notification with ShutDown server.
+@return Number of registered clients.
+*/
+TInt CServShutdownServer::ClientArrayCount()
+	{
+	TDblQueIter<CSession2> iter(iSessionIter);
+	iter.SetToFirst();
+	TInt count =0;
+    for (CSession2* session=iter++; session!=NULL; session=iter++)
+		{
+		TThreadId id=static_cast<CServShutdownSession*>(session)->ClientThreadId();
+		//Clients which are not registered for notification will not have RMessage in the session and hence 
+		//thread id will be NULL(e.g.CLafShutdownEventObserverAdaptor). Avoid such clients. 		
+		if(id.Id())
+			{
+			++count;
+			}
+		}
+	return count;
+	}
+#endif	//SYMBIAN_SSM_GRACEFUL_SHUTDOWN	
+/**
+@return Non-zero, if all registered clients have pending requests.
+*/
+TBool CServShutdownServer::AllSessionsHavePendingRequest() const
+	{
+	TBool ret=ETrue;
+	TDblQueIter<CSession2> iter(iSessionIter);
+	iter.SetToFirst();
+	for (CSession2* session=iter++; session!=NULL; session=iter++)
+		{
+		const CServShutdownSession* mySession=static_cast<CServShutdownSession*>(session);
+		if (!mySession->HasPendingRequest())
+			{
+			ret=EFalse;
+			break;
+			}
+		}
+	return ret;
+	}
+
+
+/**
+@param aId Client's thread id.
+@return Non-zero if the client with this thread id has no pending request.
+*/
+EXPORT_C TBool CServShutdownServer::IsClientHung(TThreadId aId) const
+	{
+	TBool ret=EFalse;
+	TDblQueIter<CSession2> iter(iSessionIter);
+	iter.SetToFirst();
+	for (CSession2* session=iter++; session!=NULL; session=iter++)
+		{
+		const CServShutdownSession* mySession=static_cast<CServShutdownSession*>(session);
+
+		if (mySession->ClientThreadId()==aId)
+			{
+			if (!mySession->HasPendingRequest())
+				{
+				ret=ETrue;
+				break;
+				}
+			}
+		}
+	return ret;
+	}
+
+//
+// class CServShutdownSession
+//
+
+/**
+*/
+EXPORT_C CServShutdownSession::CServShutdownSession()
+	: CSession2(),
+	iCurrentEvent(-1), iOutstandingEvent(-1)
+	{}
+
+/**
+*/
+EXPORT_C CServShutdownSession::~CServShutdownSession()
+	{
+	}
+
+/**
+Standard phase-one factor method for creating CServShutdownSession instances.
+@return A pointer to the created CServShutdownSession instance.
+@leave KErrNoMemory Not enough memory to complete the operation.
+*/
+CServShutdownSession* CServShutdownSession::NewL()
+	{
+	return new (ELeave) CServShutdownSession;
+	}
+
+/**
+@return Non-zero, if the client has a pending request.
+*/
+TBool CServShutdownSession::HasPendingRequest() const
+	{
+	return !iPtr.IsNull();
+	}
+
+/**
+This method will complete the pending asychronous client request, effectivelly notifying it
+about the action, which the client has to do.
+@param aSaveType The type of the requested save action.
+*/
+void CServShutdownSession::NotifySave(MSaveObserver::TSaveType aSaveType)
+	{
+	const TInt saveType=(TInt)aSaveType;
+	if (HasPendingRequest())
+		{
+		iPtr.Complete(saveType);
+		iCurrentEvent=saveType;
+		}
+	else
+		{
+		if (iCurrentEvent==(TInt)MSaveObserver::ESaveAll || 
+			(iCurrentEvent==(TInt)MSaveObserver::ESaveQuick && 
+			 aSaveType==MSaveObserver::ESaveData))
+            {
+			iOutstandingEvent=saveType;
+			}
+		}
+	}
+
+/**
+This method dispatches all client requests to the appropriate method calls.
+@param aMessage The client's message
+@param aCompleteRequest An output parameter. If zero, the client request
+                will be completed later.
+*/
+void CServShutdownSession::DoServiceL(const RMessage2& aMessage, TBool& aCompleteRequest)
+	{
+	switch (aMessage.Function())
+		{
+	case TSaveOpCodeNotify:
+		RequestNotifyPowerDown(aMessage);
+		// don't complete async message yet
+		aCompleteRequest=EFalse;
+		break;
+	case TSaveOpCodeNotifyCancel:
+		RequestNotifyPowerDownCancel();
+		break;
+	case TSaveOpCodeHandleError:
+		User::Leave(KErrNotSupported);
+		break;
+	case TSaveOpCodePowerOff:
+		PowerOffL(aMessage);
+		break;
+	case TSaveOpCodeQueryPowerState:
+		PowerStateL(aMessage);
+		break;
+#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+	case EEventObsAdaptHandleShutdown:
+	case EEventObsAdaptClientArrayCount:
+	case EEventObsAdaptClientArray:
+	case EEventObsAdaptIsClientHung:
+	case EEventObsAdaptGetShutdownState:
+		{
+		if (IsSsmGracefulShutdown())	// SSM should be used for device shutdown
+			{
+			switch(aMessage.Function())
+				{
+				case EEventObsAdaptHandleShutdown:
+					HandleShutdownEventL(aMessage);
+					break;
+				case EEventObsAdaptClientArrayCount:
+					ClientArrayCount(aMessage);
+					break;
+				case EEventObsAdaptClientArray:
+					ClientArrayL(aMessage);
+					break;
+				case EEventObsAdaptIsClientHung:
+					IsClientHung(aMessage);
+					break;
+				case EEventObsAdaptGetShutdownState:
+					GetShutdownState(aMessage);
+					break;			
+				}
+			}
+		break;	
+		}
+#endif // SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+	default:
+		User::Leave(KErrNotSupported);
+		break;
+		}
+	}
+
+#ifdef SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+
+void CServShutdownSession::HandleShutdownEventL(const RMessage2& aMessage)
+	{
+	MSaveObserver::TSaveType action = static_cast <MSaveObserver::TSaveType> (aMessage.Int0());
+	TBool powerOff = static_cast <TBool> (aMessage.Int1());
+	TPowerState powerEvent = static_cast <TPowerState> (aMessage.Int2());
+
+	CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
+	server->HandleShutdownEventL(action, powerOff, powerEvent);
+	}
+
+void CServShutdownSession::ClientArrayCount(const RMessage2& aMessage) const
+	{
+	CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
+	const TInt count = server->ClientArrayCount();
+	aMessage.Write(0, TPckg<TInt>(count));
+	}
+/*
+This function will write all registered client array in a buffer only when client side array count is equal to server side array count
+else aMessage will contain an empty buffer and server side array count .
+@param aMessage consists of buffer, clientside array count and server side array count 
+*/
+void CServShutdownSession::ClientArrayL(const RMessage2& aMessage)
+	{
+	CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
+	server->ClientArrayL(aMessage);
+	}
+
+void CServShutdownSession::IsClientHung(const RMessage2& aMessage) const
+	{
+	CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
+	TThreadId threadId = static_cast <TThreadId>(aMessage.Int0());
+	TBool clientHung = server->IsClientHung(threadId);
+
+	aMessage.Write(1, TPckg<TBool>(clientHung));
+	}
+
+void CServShutdownSession::GetShutdownState(const RMessage2& aMessage) const
+	{
+	TBool powerOff;
+	TBool allSessionsHavePendingRequest;
+
+	CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
+	server->GetShutdownState(powerOff, allSessionsHavePendingRequest);
+	aMessage.Write(0, TPckg<TBool>(powerOff));
+	aMessage.Write(1, TPckg<TBool>(allSessionsHavePendingRequest));
+	}
+
+#endif 	//SYMBIAN_SSM_GRACEFUL_SHUTDOWN
+
+/**
+Handles the servicing of client requests passed to the shutdown server.
+@param	aMessage The message containing the client request.
+*/
+EXPORT_C void CServShutdownSession::ServiceL(const RMessage2& aMessage)
+	{
+	TBool aCompleteRequest=ETrue;
+	TRAPD(error, DoServiceL(aMessage, aCompleteRequest));
+	if (aCompleteRequest)
+		{
+		aMessage.Complete(error);
+		}
+	}
+
+/**
+This method processes a client-side registration request. It is an asynchronous request,
+which will be completed later, when powerdown/low memory event occurs.
+@param	aMessage The message containing the client request.
+*/
+void CServShutdownSession::RequestNotifyPowerDown(const RMessage2& aMessage)
+	{
+	iCurrentEvent=-1;
+	iPtr = aMessage;
+
+	if (iOutstandingEvent!=-1)
+		{
+		NotifySave((MSaveObserver::TSaveType)iOutstandingEvent);
+		iOutstandingEvent=-1;
+		}
+	//The thread variable is just a dummy variable(input for CServShutdownServer::HandlePowerNotifRequest)
+	//and is not used inside the function at all, it is there to preserve BC.
+	RThread thread;
+	static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()))->HandlePowerNotifRequest(thread);
+	}
+
+/**
+This method cancels the client registration, completing the requests with 
+KErrCancel error code.
+*/
+void CServShutdownSession::RequestNotifyPowerDownCancel()
+	{
+	if (HasPendingRequest())
+		iPtr.Complete(KErrCancel);
+	}
+
+/**
+@return The client's thread id.
+*/
+TThreadId CServShutdownSession::ClientThreadId() const
+    {
+    TThreadId id = NULL;
+    RThread clientThread;
+    //Clients which are not registered for notification will not have RMessage in the session and hence 
+	//thread id will be NULL(e.g.CLafShutdownEventObserverAdaptor). Avoid such clients. 
+    if(!iPtr.IsNull() && KErrNone == iPtr.Client(clientThread))
+    	{	
+		id = clientThread.Id();	
+    	}
+    clientThread.Close();	
+    return id;
+    }
+
+
+/**
+This method should be used only with  SYSLIBS_TEST macro defined and can be used to 
+initiate a powerdown sequence.
+Without SYSLIBS_TEST macro defined the method will panic the client with 
+KErrNotSupported error code.
+@param	aMessage The message containing the client request.
+*/
+#ifdef SYSLIBS_TEST
+void CServShutdownSession::PowerOffL(const RMessage2& aMessage)
+    {
+	MSaveObserver::TSaveType action = static_cast <MSaveObserver::TSaveType> (aMessage.Int0());
+    TBool powerOff = static_cast <TBool> (aMessage.Int1());
+	CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
+    server->HandleShutdownEventL(action, powerOff);
+    }
+#else
+void CServShutdownSession::PowerOffL(const RMessage2& aMessage)
+    {
+    aMessage.Panic(__SHUTDOWN_SERVER_NAME, KErrNotSupported);
+    }
+#endif//SYSLIBS_TEST
+
+/**
+This method should be used only with SYSLIBS_TEST macro defined and can be used to 
+get the power state of the server.
+Without SYSLIBS_TEST macro defined the method will panic the client with 
+KErrNotSupported error code.
+@param	aMessage The message containing the client request.
+*/
+#ifdef SYSLIBS_TEST
+void CServShutdownSession::PowerStateL(const RMessage2& aMessage) const
+    {
+    CServShutdownServer* server = static_cast<CServShutdownServer*>(const_cast<CServer2*>(Server()));
+    TBool powerOff = server->IsPowerOff();
+    TPckg<TBool> powerOffPckg(powerOff);
+    aMessage.WriteL(0,powerOffPckg);
+    }
+#else
+void CServShutdownSession::PowerStateL(const RMessage2& aMessage) const
+    {
+    aMessage.Panic(__SHUTDOWN_SERVER_NAME, KErrNotSupported);
+    }
+#endif//SYSLIBS_TEST
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdownsrvpatchdata.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <e32base.h>
+
+//all the constant value needs to be in a separate file
+//Care should be taken not to define the exported data in the same source file in which
+//they are referred, lest the compiler inline's it. If inlined, the data cannot be patched.
+//Hence, the definition of data must be put in a separate source file and they must be 
+//referred in other source files by using 'extern' qualifier
+
+
+/**
+Patchable constant used in the shutdown server. 
+Used to calculate the shutdown timer with KShtdwnTimeoutClient.
+It represents the base timeout value in microseconds.
+
+The timeout is calculated as:
+KShtdwnTimeoutBase + KShtdwnTimeoutClient * numClients,
+where numClients is the number of connecting clients.
+
+If the timeout value is;
+-1, the timer is not used, the server will wait for all client's registration 
+    before executing the shutdown;
+0,  the timer expires immediately, the server will execute the shutdown immediately, 
+    not waiting for any client's re-registration.
+other value greater than 0, the server will wait a certain period of time for the clients' registration 
+    and execute the shutdown if the timer expires or all clients re-register.
+    
+Licensees who wish to alter these patchable constants will need to define 
+these ROM build-time macros in their product HRH or IBY files.
+
+The new values must follow the rule:
+KShtdwnTimeoutBase >= -1 and
+KShtdwnTimeoutClient >= 0.
+
+Otherwise, the server panics with KErrNotSupported. 
+
+@internalComponent
+@see KShtdwnTimeoutClient
+*/
+EXPORT_C extern const TInt32 KShtdwnTimeoutBase = 1000000;
+
+/**
+Patchable data used in the shutdown server. 
+Used to calculate the shutdown timer with KShtdwnTimeoutBase.
+It represents the timeout value for each client in microseconds.
+@internalComponent
+@see KShtdwnTimeoutBase
+*/
+EXPORT_C extern const TInt32 KShtdwnTimeoutClient = 500000;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdownsrvpatchdata.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef SHUTDOWNSRVPATCHDATA_H
+#define SHUTDOWNSRVPATCHDATA_H
+
+#include <e32base.h>
+
+IMPORT_C extern const TInt32 KShtdwnTimeoutBase;
+IMPORT_C extern const TInt32 KShtdwnTimeoutClient;
+
+#endif // SHUTDOWNSRVPATCHDATA_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdowntimer.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "shutdowntimer.h"
+#include "savepriv.h"
+#include "shutdownsrv.h"
+#include "shutdownsrvpatchdata.h"
+
+/*
+Patchable data KShtdwnTimeoutBase can be configured as -1 not to apply the timer 
+as backward compatibility.
+*/
+const TInt32 KShtdwnTimeoutNoApply = -1;
+
+/**
+Standard phase-one factory method for creating CShutdownTimer instances.
+It might return a NULL pointer if the patchable constant KShtdwnTimeoutBase has been configured 
+as -1 which indicates no timer should be started.
+@param aShtdwnSrv The reference to CServShutdownServer.
+@return 0 if no timer should be started, otherwise a pointer to CShutdownTimer object.
+@leave Some system-wide error codes including KErrNoMemory.
+@panic KErrNotSupported Incorrect patchable variables configuration.
+*/
+CShutdownTimer* CShutdownTimer::NewL(CServShutdownServer& aShtdwnSrv)
+	{ 
+	__ASSERT_ALWAYS( (KShtdwnTimeoutBase >= KShtdwnTimeoutNoApply) && (KShtdwnTimeoutClient >= 0), \
+		User::Panic(__SHUTDOWN_SERVER_NAME, KErrNotSupported));
+
+	CShutdownTimer* self = 0;
+	if(KShtdwnTimeoutBase > KShtdwnTimeoutNoApply)
+		{
+		self = new(ELeave) CShutdownTimer(aShtdwnSrv);
+		CleanupStack::PushL(self);
+		self->ConstructL();
+		CleanupStack::Pop(self);
+		}
+	
+	return self;
+	}
+
+/**
+Constructor
+@param aShtdwnSrv The reference to CServShutdownServer
+*/
+CShutdownTimer::CShutdownTimer(CServShutdownServer& aShtdwnSrv):
+	CTimer(CActive::EPriorityStandard), iShtdwnSrv(aShtdwnSrv)
+	{
+	CActiveScheduler::Add(this);
+    }
+   
+/**
+Removes the timer object from the active scheduler's list if it has been added.
+*/
+void CShutdownTimer::DoCancel()
+	{
+	// Do nothing
+	}
+	
+/**
+Calculates the timeout value by the number of the clients and starts the timer.
+@param aNumClients The number of the clients.
+*/
+void CShutdownTimer::Start(TInt aNumClients)
+	{
+	TInt32 timeout = KShtdwnTimeoutBase + KShtdwnTimeoutClient * aNumClients;
+	After(timeout);
+	}
+
+	
+/**
+Gets called when the timeout expires.
+Calls CServShutdownServer::SwitchOff() to execute the switch off.
+*/
+void CShutdownTimer::RunL()
+	{
+	iShtdwnSrv.SwitchOff();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp1/src/shutdowntimer.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#if !defined(SHUTDOWNTIMER_H)
+#define SHUTDOWNTIMER_H
+
+#include <e32base.h>
+
+class CServShutdownServer;
+/**
+This class describes a timer object. 
+Its RunL() implemantation calls CServShutdownServer::SwitchOff() to execute the switch off 
+when timeout expires.
+@internalTechnology
+*/
+NONSHARABLE_CLASS(CShutdownTimer): public CTimer
+	{
+public:
+	static CShutdownTimer* NewL(CServShutdownServer& aShtdwnSrv);
+	void DoCancel();
+	void Start(TInt aNumClients);
+protected:
+	virtual void RunL();
+private:
+	CShutdownTimer(CServShutdownServer& aShtdwnSrv);
+private:
+	CServShutdownServer& iShtdwnSrv;
+	};
+#endif//SHUTDOWNTIMER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp11/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+ARMV5
+
+PRJ_MMPFILES
+compresstarget.mmp
+nocompresstarget.mmp
+bytepaircompresstarget.mmp
+inflatecompresstarget.mmp
+combinedcompresstarget.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp11/bytepaircompresstarget.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			bytepaircompress.exe
+TARGETTYPE		exe
+SOURCEPATH		.
+SOURCE			compress.cpp
+UID				0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+
+BYTEPAIRCOMPRESSTARGET
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp11/combinedcompresstarget.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			combinedcompress.exe
+TARGETTYPE		exe
+SOURCEPATH		.
+SOURCE			compress.cpp
+UID				0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+
+NOCOMPRESSTARGET
+COMPRESSTARGET
+INFLATECOMPRESSTARGET
+BYTEPAIRCOMPRESSTARGET
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp11/compress.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#include "e32def.h"
+TInt E32Main()
+	{
+	return 0;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp11/compresstarget.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			compress.exe
+TARGETTYPE		exe
+SOURCEPATH		.
+SOURCE			compress.cpp
+UID				0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+
+COMPRESSTARGET
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp11/inflatecompresstarget.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			inflatecompress.exe
+TARGETTYPE		exe
+SOURCEPATH		.
+SOURCE			compress.cpp
+UID				0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+
+INFLATECOMPRESSTARGET
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp11/nocompresstarget.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			nocompress.exe
+TARGETTYPE		exe
+SOURCEPATH		.
+SOURCE			compress.cpp
+UID				0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+
+NOCOMPRESSTARGET
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/codecs/ColorConverter.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,229 @@
+/*
+* Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <icl/imageprocessor.h>
+
+
+_LIT(KBitmapUtilPanicCategory, "TImageBitmapUtil");
+GLDEF_C void Panic(TImageBitmapUtilPanic aError)
+	{
+	User::Panic(KBitmapUtilPanicCategory, aError);
+	}
+
+/**
+@see TColorConvertor.
+*/
+class TGray2Convertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return RgbToMonochrome(aColor)>>7; }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Gray2(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{	
+					TInt* end = aIndexBuffer+aCount;
+					while(aIndexBuffer<end)
+						*(aIndexBuffer++) = RgbToMonochrome(*(aColorBuffer++))>>7;
+					}
+	};
+
+/**
+@see TColorConvertor.
+*/
+class TGray4Convertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return RgbToMonochrome(aColor)>>6; }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Gray4(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{
+					TInt* end = aIndexBuffer+aCount;
+					while(aIndexBuffer<end)
+						*(aIndexBuffer++) = RgbToMonochrome(*(aColorBuffer++))>>6;
+					}
+	};
+
+/**
+@see TColorConvertor.
+*/
+class TGray16Convertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return RgbToMonochrome(aColor)>>4; }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Gray16(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{	
+					TInt* end = aIndexBuffer+aCount;
+					while(aIndexBuffer<end)
+						*(aIndexBuffer++) = RgbToMonochrome(*(aColorBuffer++))>>4;
+					}
+	};
+
+/**
+@see TColorConvertor.
+*/
+class TGray256Convertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return RgbToMonochrome(aColor); }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Gray256(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{	
+					TInt* end = aIndexBuffer+aCount;
+					while(aIndexBuffer<end)
+						*(aIndexBuffer++) = RgbToMonochrome(*(aColorBuffer++));
+					}
+	};
+
+/**
+@see TColorConvertor.
+*/
+class TColor16Convertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return aColor.Color16(); }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Color16(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{	
+					TInt* end = aIndexBuffer+aCount;
+					while(aIndexBuffer<end)
+						{
+						*(aIndexBuffer++) = (aColorBuffer++)->Color16();
+						}
+					}
+	};
+
+/**
+@see TColorConvertor.
+*/
+class TColor256Convertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return aColor.Color256(); }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Color256(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{	
+					TInt* end = aIndexBuffer+aCount;
+					while(aIndexBuffer<end)
+						*(aIndexBuffer++) = (aColorBuffer++)->Color256();
+					}
+	};
+
+/**
+@see TColorConvertor.
+*/
+class TColor4KConvertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return aColor._Color4K(); }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Color4K(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{	
+					TInt* end = aIndexBuffer+aCount;
+					while(aIndexBuffer<end)
+						{
+						*(aIndexBuffer++) = (aColorBuffer++)->_Color4K();
+						}
+					}
+	};
+
+/**
+@see TColorConvertor.
+*/
+class TColor64KConvertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return aColor._Color64K(); }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Color64K(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{
+					TInt* end = aIndexBuffer+aCount;
+					while(aIndexBuffer<end)
+						{
+						*(aIndexBuffer++) = (aColorBuffer++)->_Color64K();
+						}
+					}
+	};
+
+/**
+@see TColorConvertor.
+*/
+class TColor16MConvertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return aColor.Internal(); }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Color16M(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{
+					Mem::Copy(aIndexBuffer,aColorBuffer,aCount*sizeof(TRgb));
+					}
+	};
+
+/**
+@see TColorConvertor.
+*/
+class TColor16MUConvertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return aColor._Color16MU(); }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Color16MU(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{
+					// do a Mem::Copy as this ensures that top byte (which
+					// in a 16MA context is interpreted as the alpha value)
+					// is 0xFF (opaque) instead of 0x00 (transparent)
+					Mem::Copy(aIndexBuffer,aColorBuffer,aCount*sizeof(TRgb));
+					}
+	};
+
+/**
+@see TColorConvertor.
+*/
+class TColor16MAConvertor : public TColorConvertor
+	{
+public:
+	virtual TInt ColorIndex(TRgb aColor) const { return aColor._Color16MA(); }
+	virtual TRgb Color(TInt aColorIndex) const { return TRgb::Color16MA(aColorIndex); }
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const
+					{
+					Mem::Copy(aIndexBuffer,aColorBuffer,aCount*sizeof(TRgb));
+					}
+	};
+	
+TColorConvertor* CreateColorConvertorL(TDisplayMode aDisplayMode)
+	{
+	switch (aDisplayMode)
+		{
+	case EGray2:		return new(ELeave) TGray2Convertor;
+	case EGray4:		return new(ELeave) TGray4Convertor;
+	case EGray16:		return new(ELeave) TGray16Convertor;
+	case EGray256:		return new(ELeave) TGray256Convertor;
+	case EColor16:		return new(ELeave) TColor16Convertor;
+	case EColor256:		return new(ELeave) TColor256Convertor;
+	case EColor4K:		return new(ELeave) TColor4KConvertor;
+	case EColor64K:		return new(ELeave) TColor64KConvertor;
+	case EColor16M:		return new(ELeave) TColor16MConvertor;
+	case EColor16MU:	return new(ELeave) TColor16MUConvertor;
+	case EColor16MA:	return new(ELeave) TColor16MAConvertor;
+	default:		
+		User::Leave(KErrNotSupported);
+		return NULL; //Keep the compiler happy!!
+		};	
+	}
+	
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/codecs/ImageProcessor.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2535 @@
+/*
+* Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <icl/imageprocessor.h>
+#include "ImageProcessorPriv.h"
+#include "ImageUtils.h"
+#include "ImageClientMain.h"
+
+//Size of dynamically allocated buffers used by CPixelWriter & CMonochromePixelWriter
+const TInt KPixelWriterBufferSize = 1024;
+const TInt KPixelWriterBufferThreeQuarter = 768;
+
+/**
+Constructor for this class.
+*/
+EXPORT_C CImageProcessorExtension::CImageProcessorExtension()
+:iOperation(EDecodeNormal)
+	{
+	}
+
+/**
+Destructor for this class.
+*/
+EXPORT_C CImageProcessorExtension::~CImageProcessorExtension()
+	{
+	}
+
+/**
+Sets the area of interest of the image to be decoded.
+
+@param aRect
+	   A reference to a TRect that specifies the location and size of the region to be decoded.
+
+*/
+EXPORT_C void CImageProcessorExtension::SetClippingRect(const TRect& aRect)
+	{
+	iClippingRect = aRect;
+	}
+
+/**
+Sets the scaling coefficient for the decode.
+
+@param aScalingCoeff
+	   The scaling coefficient.
+
+@see TImageConvScaler::SetScalingL
+*/
+EXPORT_C void CImageProcessorExtension::SetScaling(TInt aScalingCoeff)
+	{
+	iScalingCoeff = aScalingCoeff;
+	}
+
+/**
+Sets the desired size of the destination image for the decode.
+
+@param aDesiredSize
+	   The desired size of the destination image.
+
+@see TImageConvScaler::SetScalingL
+*/
+EXPORT_C void CImageProcessorExtension::SetScaling(const TSize& aDesiredSize)
+	{
+	iDesiredSize = aDesiredSize;
+	}
+
+/**
+Sets the operation to be applied to the image.
+
+@param aOperation
+	   The operation to apply to the image.
+
+@see TImageConvScaler::SetScalingL
+*/
+EXPORT_C void CImageProcessorExtension::SetOperation(TTransformOptions aOperation)
+	{
+	iOperation = aOperation;
+	}
+
+/**
+Sets an initial one-off number of scanlines to be skipped.
+This must be called prior to calling SetYPosIncrement(),
+if it is to be used.
+
+@param  aNumberOfScanlines
+        The number of scanlines to skip.
+        
+@see CImageProcessor::SetYPosIncrement()
+*/
+EXPORT_C void CImageProcessorExtension::SetInitialScanlineSkipPadding(TInt aNumberOfScanlines)
+	{
+	iNumberOfScanlinesToSkip = aNumberOfScanlines;
+	}
+
+//
+// ImageProcessorUtility
+//
+
+//
+//	CColorImageProcessor
+//
+
+/**
+ * @see CImageProcessor.
+ * @internalComponent
+ */
+void CColorImageProcessor::CreateBlockBufferL(TInt aBlockArea)
+	{
+	delete[] iBlockBuffer;
+	iBlockBuffer = NULL;
+
+	if(aBlockArea)
+		iBlockBuffer = new (ELeave) TRgb[aBlockArea];
+
+	iBlockArea = aBlockArea;
+	}
+
+/**
+ * Destructor.
+ * @see CImageProcessor.
+ * @internalComponent
+ */
+CColorImageProcessor::~CColorImageProcessor()
+	{
+	delete[] iBlockBuffer;
+	}
+
+/**
+ * @see CImageProcessor.
+ * @internalComponent
+ */
+TBool CColorImageProcessor::SetPixelRun(TRgb aColor,TInt aCount)
+	{
+	TBool returnValue = EFalse;
+
+	while(aCount--)
+		returnValue |= SetPixel(aColor);
+
+	return returnValue;
+	}
+
+/**
+ * @see CImageProcessor.
+ * @internalComponent
+ */
+TBool CColorImageProcessor::SetPixels(TRgb* aColorBuffer,TInt aBufferLength)
+	{
+	TBool returnValue = EFalse;
+
+	while(aBufferLength--)
+		returnValue |= SetPixel(*aColorBuffer++);
+
+	return returnValue;
+	}
+
+/**
+ * @see CImageProcessor.
+ * @internalComponent
+ */
+TBool CColorImageProcessor::SetMonoPixel(TInt aGray256)
+	{
+	return SetPixel(TRgb(aGray256,aGray256,aGray256));
+	}
+
+/**
+ * @see CImageProcessor.
+ * @internalComponent
+ */
+TBool CColorImageProcessor::SetMonoPixelRun(TInt aGray256,TInt aCount)
+	{
+	return SetPixelRun(TRgb(aGray256,aGray256,aGray256),aCount);
+	}
+
+/**
+ * @see CImageProcessor.
+ * @internalComponent
+ */
+TBool CColorImageProcessor::SetMonoPixels(TUint32* aGray256Buffer,TInt aBufferLength)
+	{
+	TBool returnValue = EFalse;
+
+	while(aBufferLength--)
+		{
+		TUint32 gray256 = *aGray256Buffer++;
+		returnValue = SetPixel(TRgb(gray256,gray256,gray256));
+		}
+	return returnValue;
+	}
+
+/**
+ * @see CImageProcessor.
+ * @internalComponent
+ */
+TBool CColorImageProcessor::SetMonoPixelBlock(TUint32* aGray256Buffer)
+	{
+	ASSERT(iBlockBuffer);
+
+	TRgb* blockBufferPtr = iBlockBuffer;
+	TRgb* blockBufferPtrLimit = blockBufferPtr+iBlockArea;
+
+	while(blockBufferPtr<blockBufferPtrLimit)
+		{
+		TUint32 gray256 = *aGray256Buffer++;
+		*blockBufferPtr++ = TRgb(gray256,gray256,gray256);
+		}
+
+	return SetPixelBlock(iBlockBuffer);
+	}
+
+//
+//	CMonochromeImageProcessor
+//
+
+/**
+ * @see CImageProcessor.
+ */
+void CMonochromeImageProcessor::CreateBlockBufferL(TInt aBlockArea)
+	{
+	delete[] iBlockBuffer;
+	iBlockBuffer = NULL;
+
+	iBlockBuffer = new (ELeave) TUint32[aBlockArea];
+	iBlockArea = aBlockArea;
+	}
+
+/**
+ * Destructor.
+ * @see CImageProcessor.
+ */
+CMonochromeImageProcessor::~CMonochromeImageProcessor()
+	{
+	delete []iBlockBuffer;
+	}
+
+/**
+ * @see CImageProcessor.
+ */
+TBool CMonochromeImageProcessor::SetMonoPixelRun(TInt aGray256,TInt aCount)
+	{
+	TBool returnValue = EFalse;
+
+	while(aCount--)
+		returnValue = SetMonoPixel(aGray256);
+
+	return returnValue;
+	}
+
+/**
+ * @see CImageProcessor.
+ */
+TBool CMonochromeImageProcessor::SetMonoPixels(TUint32* aGray256Buffer,TInt aBufferLength)
+	{
+	TBool returnValue = EFalse;
+
+	while(aBufferLength--)
+		returnValue = SetMonoPixel(*aGray256Buffer++);
+
+	return returnValue;
+	}
+
+/**
+ * @see CImageProcessor.
+ */
+TBool CMonochromeImageProcessor::SetPixel(TRgb aColor)
+	{
+	return SetMonoPixel(TColorConvertor::RgbToMonochrome(aColor));
+	}
+
+/**
+ * @see CImageProcessor.
+ */
+TBool CMonochromeImageProcessor::SetPixelRun(TRgb aColor,TInt aCount)
+	{
+	return SetMonoPixelRun(TColorConvertor::RgbToMonochrome(aColor),aCount);
+	}
+
+/**
+ * @see CImageProcessor.
+ */
+TBool CMonochromeImageProcessor::SetPixels(TRgb* aColorBuffer,TInt aBufferLength)
+	{
+	TBool returnValue = EFalse;
+
+	while(aBufferLength--)
+		returnValue = SetMonoPixel(TColorConvertor::RgbToMonochrome(*aColorBuffer++));
+
+	return returnValue;
+	}
+
+/**
+ * @see CImageProcessor.
+ */
+TBool CMonochromeImageProcessor::SetPixelBlock(TRgb* aColorBuffer)
+	{
+	ASSERT(iBlockBuffer);
+
+	TUint32* blockBufferPtr = iBlockBuffer;
+	TUint32* blockBufferPtrLimit = blockBufferPtr+iBlockArea;
+
+	while(blockBufferPtr<blockBufferPtrLimit)
+		*blockBufferPtr++ = TColorConvertor::RgbToMonochrome(*aColorBuffer++);
+
+	return SetMonoPixelBlock(iBlockBuffer);
+	}
+
+//
+// CPixelWriter
+//
+
+/**
+ *
+ * Static factory function to create CPixelWriter objects.
+ *
+ * @return  Pointer to a fully constructed CPixelWriter object. 
+ */
+CPixelWriter* CPixelWriter::NewL()
+	{
+	return new(ELeave) CPixelWriter;
+	}
+
+/**
+ *
+ * Default constructor for this class.
+ */
+CPixelWriter::CPixelWriter():
+	iYInc(1)
+	{}	
+	
+/**
+ *
+ * Destructor.
+ */
+CPixelWriter::~CPixelWriter()
+	{
+	Reset();
+	ASSERT(iColorConv==NULL);
+	ASSERT(iRgbBuffer==NULL);
+	ASSERT(iIndexBuffer==NULL);
+	}
+
+/**
+ *
+ * @see CImageProcessor
+ */
+void CPixelWriter::PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect)
+	{
+	DoPrepareL(aBitmap,aImageRect,NULL);
+	}
+
+/**
+ *
+ * @see CImageProcessor
+ */
+void CPixelWriter::PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize)
+	{
+	DoPrepareL(aBitmap,aImageRect,&aRgbBlockSize);
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+void CPixelWriter::SetYPosIncrement(TInt aYInc)
+	{
+	iYInc = aYInc - iNumberOfScanlinesToSkip;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+void CPixelWriter::SetLineRepeat(TInt aLineRepeat)
+	{
+	ASSERT(aLineRepeat>=0);
+	iLineRepeat = aLineRepeat;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+void CPixelWriter::SetPixelPadding(TInt aNumberOfPixels)
+	{
+	iPixelPadding = aNumberOfPixels;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CPixelWriter::SetPixel(TRgb aColor)
+	{
+	*iRgbBufferPtr++ = aColor;
+
+	if (iRgbBufferPtr == iRgbBufferPtrLimit)
+		return FlushPixels();
+
+	return EFalse;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CPixelWriter::SetPixelRun(TRgb aColor,TInt aCount)
+	{
+	while(aCount)
+		{
+		TRgb* ptr = iRgbBufferPtr;
+		TRgb* limit = ptr+aCount;
+		if(limit>iRgbBufferPtrLimit)
+			limit = iRgbBufferPtrLimit;
+
+		TInt n = limit-ptr;
+		aCount -= n;
+
+		if(n&1)
+			*ptr++ = aColor;
+		if(n&2)
+			{
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			}
+		if(n&4)
+			{
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			}
+		while(ptr<limit)
+			{
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			*ptr++ = aColor;
+			}
+
+		iRgbBufferPtr = ptr;
+
+		if(ptr!=iRgbBufferPtrLimit)
+			break;
+
+		if(FlushPixels())
+			return ETrue;
+		}
+
+	return EFalse;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CPixelWriter::SetPixels(TRgb* aColorBuffer, TInt aBufferLength)
+	{
+	if (aBufferLength >= KPixelWriterBufferThreeQuarter)
+		{
+		TRgb* rgbBuffer = iRgbBuffer;
+
+		if (iRgbBufferPtr != rgbBuffer) 
+			{
+			// flush rest of the pixels 
+			if(FlushPixels())
+				{
+				return ETrue;
+				}
+			}
+
+		// use external buffer without copying data
+		TBool rValue = EFalse;
+
+		while (aBufferLength && !rValue)
+			{
+			TInt bufferLength = (aBufferLength>KPixelWriterBufferSize)?KPixelWriterBufferSize:aBufferLength;
+			iRgbBuffer = aColorBuffer;
+			iRgbBufferPtr = aColorBuffer+bufferLength;
+			iRgbBufferPtrLimit = aColorBuffer+bufferLength;
+
+			rValue = FlushPixels();
+			aBufferLength -= bufferLength;
+			aColorBuffer += bufferLength;
+			}
+		
+		// restore pointers to inner buffer
+		iRgbBuffer = rgbBuffer;
+		iRgbBufferPtr = rgbBuffer;
+		iRgbBufferPtrLimit = rgbBuffer+KPixelWriterBufferSize;
+		
+		return rValue;
+		}
+
+	while(aBufferLength)
+		{
+		TRgb* ptr = iRgbBufferPtr;
+		TRgb* limit = ptr+aBufferLength;
+		if(limit>iRgbBufferPtrLimit)
+			limit = iRgbBufferPtrLimit;
+
+		TInt n = limit-ptr;
+		aBufferLength -= n;
+
+		if(n&1)
+			*ptr++ = *aColorBuffer++;
+		if(n&2)
+			{
+			*ptr++ = *aColorBuffer++;
+			*ptr++ = *aColorBuffer++;
+			}
+		while(ptr<limit)
+			{
+			*ptr++ = *aColorBuffer++;
+			*ptr++ = *aColorBuffer++;
+			*ptr++ = *aColorBuffer++;
+			*ptr++ = *aColorBuffer++;
+			}
+
+		iRgbBufferPtr = ptr;
+
+		if(ptr!=iRgbBufferPtrLimit)
+			break;
+
+		if(FlushPixels())
+			return ETrue;
+		}
+
+	return EFalse;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CPixelWriter::SetPixelBlock(TRgb* aColorBuffer)
+	{
+	ASSERT(aColorBuffer);
+
+	TUint32* indexBufferPtr = iIndexBuffer;
+	if (iDisplayMode==EColor16M || iDisplayMode == EColor16MU || iDisplayMode == EColor16MA)
+		{
+		indexBufferPtr = reinterpret_cast<TUint32*>(aColorBuffer);
+		}
+	else
+		{
+		SetPixelBlockIndex(aColorBuffer);
+		}
+
+	TInt ySkip = 0;
+	if(iNumberOfScanlinesToSkip > 0)
+		{
+		ySkip = iNumberOfScanlinesToSkip * iBlockSize.iWidth;
+		indexBufferPtr += ySkip;
+		ySkip = iNumberOfScanlinesToSkip;
+		iNumberOfScanlinesToSkip = 0; // Only call this conditional once.
+		}
+	
+	TInt imageWidth = iImageRegion.iBr.iX;
+	TInt imageHeight = iImageRegion.iBr.iY;
+	TInt endOfImage = iDrawBottomUp ? -1 : imageHeight;
+	
+	// The minimum number of pixels to render horizontally
+	TInt minWidth = Min(iBlockSize.iWidth, imageWidth - iPos.iX);
+	
+	// The next vertical position.  Note that this is usually the height of the block, but 
+	// in the case of the first block when clipping is required, this will be reduced by ySkip.
+	TInt nextYPos = iDrawBottomUp ?	(iPos.iY - iBlockSize.iHeight) + ySkip :
+									(iPos.iY + iBlockSize.iHeight) - ySkip;
+	
+	TInt endPosition = iDrawBottomUp ? Max(nextYPos, endOfImage) : Min(nextYPos, endOfImage);
+	
+	// Once the first block has been processed, iYInc is set to block height
+	iYInc = iDrawBottomUp ? -iBlockSize.iHeight + ySkip : iBlockSize.iHeight - ySkip;
+				
+	// Skip unnecessary pixels (for cropping, or padding when rotated)
+	indexBufferPtr += iPixelPadding;
+	
+	TPoint pos(iPos);
+	iUtil.Begin();
+	for(;iDrawBottomUp ? pos.iY > endPosition : pos.iY < endPosition; iDrawBottomUp ? pos.iY-- : pos.iY++)
+		{
+		iUtil.SetPos(pos);
+		iUtil.SetPixels(indexBufferPtr, minWidth);
+		indexBufferPtr += iBlockSize.iWidth; // next line in block
+		}
+	iUtil.End();
+
+	iPos.iX += iBlockSize.iWidth;
+	
+	if (iPos.iX >= imageWidth)
+		{
+		return NewLine();
+		}
+
+	return EFalse;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CPixelWriter::FlushPixels()
+	{
+	TRgb* rgbBufferPtrLimit = iRgbBufferPtr;
+	iRgbBufferPtr = iRgbBuffer;
+
+	if(iPos.iY < iImageRegion.iTl.iY || iPos.iY >= iImageRegion.iBr.iY)
+		return ETrue;
+
+	iUtil.Begin();
+
+	TBool finished = EFalse;
+	for (TRgb* rgbBufferPtr = iRgbBuffer; rgbBufferPtr < rgbBufferPtrLimit; )
+		{
+		TInt pixelsToSkip = Min(rgbBufferPtrLimit - rgbBufferPtr,iPixelsToSkip);
+		rgbBufferPtr += pixelsToSkip;
+		iPixelsToSkip -= pixelsToSkip;
+
+		if(iPixelsToSkip)
+			break;
+
+		TInt pixelsToFlush = Min(rgbBufferPtrLimit - rgbBufferPtr,iImageRegion.iBr.iX - iPos.iX);
+
+		if(!pixelsToFlush)
+			break;
+
+		SetPixelBufferIndex(rgbBufferPtr,pixelsToFlush);
+		rgbBufferPtr += pixelsToFlush;
+
+		TBool fillDown = iYInc > 0;
+		TPoint pos(iPos);
+		TInt posYLimit;
+		if(fillDown)
+			posYLimit = Min(pos.iY + iLineRepeat + 1 ,iImageRegion.iBr.iY);
+		else
+			posYLimit = Max(pos.iY - iLineRepeat - 1 ,iImageRegion.iTl.iY-1);
+
+		for(;fillDown ? pos.iY < posYLimit : pos.iY > posYLimit; fillDown ? pos.iY++ : pos.iY--)
+			{
+			if(!iUtil.SetPos(pos-iImageRegion.iTl))
+				{
+				iUtil.End();
+				return ETrue;
+				}
+			iUtil.SetPixels(iIndexBuffer,pixelsToFlush);
+			}
+
+		iPos.iX += pixelsToFlush;
+		if (iPos.iX >= iImageRegion.iBr.iX)
+			{
+			finished = NewLine();
+			if(finished)
+				break;
+			}
+		}
+
+	iUtil.End();
+
+	return finished;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CPixelWriter::SetPos(const TPoint& aPosition)
+	{
+	if(iImageRegion.Contains(aPosition))
+		{
+		FlushPixels();
+		iPixelsToSkip = 0;
+		iPos = aPosition;
+		return ETrue;
+		}
+
+	return EFalse;
+	}
+
+void CPixelWriter::Reset()
+	{
+	delete iColorConv;
+	iColorConv = NULL;
+
+	delete[] iRgbBuffer;
+	iRgbBuffer = NULL;
+
+	delete[] iIndexBuffer;
+	iIndexBuffer = NULL;
+
+	iPos.SetXY(0,0);
+	iPixelsToSkip = 0;
+	iImageRegion.SetRect(0,0,0,0);
+	iBlockSize.SetSize(0,0);
+	
+	iDrawBottomUp = EFalse;
+	}
+
+void CPixelWriter::DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize)
+	{
+	if( (aImageRect.iTl.iX<0) || (aImageRect.iTl.iY<0) || (aImageRect.Size().iWidth>aBitmap.SizeInPixels().iWidth) || (aImageRect.Size().iHeight>aBitmap.SizeInPixels().iHeight) )
+		{
+		User::Leave(KErrArgument);
+		}
+
+	Reset();
+	
+	iDisplayMode = aBitmap.DisplayMode();
+
+	iImageRegion = aImageRect;
+
+	ASSERT(iColorConv==NULL);
+	iColorConv = TColorConvertor::NewL(aBitmap.DisplayMode());
+	iUtil.SetBitmapL(&aBitmap);
+
+	if (aBlockSize)
+		{
+		if (aBlockSize->iWidth <= 0 || aBlockSize->iHeight <= 0)
+			{
+			User::Leave(KErrArgument);
+			}
+
+		iBlockSize = *aBlockSize;
+		iBlockArea = iBlockSize.iWidth * iBlockSize.iHeight;
+		
+		ASSERT(iIndexBuffer == NULL);
+		iIndexBuffer = new(ELeave) TUint32[iBlockArea];
+
+		iIndexBufferPtrLimit = iIndexBuffer + iBlockArea;
+		CreateBlockBufferL(iBlockArea);
+		
+		switch(iOperation)
+			{
+			case EDecodeRotate180:
+			case EDecodeRotate270:
+			case EDecodeHorizontalFlip:
+			case EDecodeVerticalFlipRotate90:
+				iDrawBottomUp = ETrue;
+				break;
+			default:
+				iDrawBottomUp = EFalse;
+			}
+		
+		iYInc = iDrawBottomUp ? -iBlockSize.iHeight : iBlockSize.iHeight;
+		iStartPosition.SetXY(iImageRegion.iTl.iX, iDrawBottomUp ? iImageRegion.iBr.iY - 1 : 0);
+		iEndPosition.SetXY(iImageRegion.iBr.iX, iDrawBottomUp ?
+							iImageRegion.iTl.iY - 1 : iImageRegion.iBr.iY);
+		iPos = iStartPosition;
+		}
+	else
+		{
+		iPos = iImageRegion.iTl;
+		iStartPosition = iPos;
+		iEndPosition = aImageRect.iBr;
+		
+		ASSERT(iRgbBuffer == NULL);
+		iRgbBuffer = new(ELeave) TRgb[KPixelWriterBufferSize];
+
+		iRgbBufferPtr = iRgbBuffer;
+		iRgbBufferPtrLimit = iRgbBuffer + KPixelWriterBufferSize;
+
+		ASSERT(iIndexBuffer == NULL);
+		iIndexBuffer = new(ELeave) TUint32[KPixelWriterBufferSize];
+
+		iIndexBufferPtrLimit = iIndexBuffer + KPixelWriterBufferSize;
+		}
+	}
+
+TBool CPixelWriter::NewLine()
+	{
+	iPos.iX = iStartPosition.iX;
+	iPos.iY += iYInc;
+
+	if(iPos.iY < iStartPosition.iY || iPos.iY >= iEndPosition.iY)
+		{
+		return ETrue;
+		}
+	
+	iPixelsToSkip = iPixelPadding;
+	return EFalse;
+	}
+
+void CPixelWriter::SetPixelBufferIndex(TRgb* aColorBuffer,TInt aCount)
+	{
+	iColorConv->ColorToIndex(REINTERPRET_CAST(TInt*,iIndexBuffer),aColorBuffer,aCount);
+	}
+
+void CPixelWriter::SetPixelBlockIndex(TRgb* aColorBuffer)
+	{
+	iColorConv->ColorToIndex(REINTERPRET_CAST(TInt*,iIndexBuffer),aColorBuffer,iIndexBufferPtrLimit-iIndexBuffer);
+	}
+
+//
+//	CMonochromePixelWriter
+//
+
+/**
+ *
+ * Static factory function to create CMonochromePixelWriter objects.
+ *
+ * @return  Pointer to a fully constructed CMonochromePixelWriter object. 
+ */
+CMonochromePixelWriter* CMonochromePixelWriter::NewL()
+	{
+	return new(ELeave) CMonochromePixelWriter;
+	}
+
+/**
+ *
+ * Default constructor for this class.
+ */
+CMonochromePixelWriter::CMonochromePixelWriter():
+	iYInc(1)
+	{}
+
+/**
+ *
+ * Destructor
+ */
+CMonochromePixelWriter::~CMonochromePixelWriter()
+	{
+	Reset();
+	}
+
+/**
+ *
+ * @see CImageProcessor
+ */
+void CMonochromePixelWriter::PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect)
+	{
+	DoPrepareL(aBitmap,aImageRect,NULL);
+	}
+
+/**
+ *
+ * @see CImageProcessor
+ */
+void CMonochromePixelWriter::PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize)
+	{
+	DoPrepareL(aBitmap,aImageRect,&aRgbBlockSize);
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+void CMonochromePixelWriter::SetYPosIncrement(TInt aYInc)
+	{
+	iYInc = aYInc - iNumberOfScanlinesToSkip;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+void CMonochromePixelWriter::SetPixelPadding(TInt aNumberOfPixels)
+	{
+	iPixelPadding = aNumberOfPixels;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+void CMonochromePixelWriter::SetLineRepeat(TInt aLineRepeat)
+	{
+	ASSERT(aLineRepeat>=0);
+	iLineRepeat = aLineRepeat;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CMonochromePixelWriter::SetMonoPixel(TInt aGray256)
+	{
+	*iGray256BufferPtr++ = aGray256;
+
+	if (iGray256BufferPtr != iGray256BufferPtrLimit)
+		return EFalse;
+
+	return FlushPixels();
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CMonochromePixelWriter::SetMonoPixelRun(TInt aGray256,TInt aCount)
+	{
+	while(aCount)
+		{
+		TUint32* ptr = iGray256BufferPtr;
+		TUint32* limit = ptr+aCount;
+		if(limit>iGray256BufferPtrLimit)
+			limit = iGray256BufferPtrLimit;
+
+		TInt n = limit-ptr;
+		aCount -= n;
+
+		if(n&1)
+			*ptr++ = aGray256;
+		if(n&2)
+			{
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			}
+		if(n&4)
+			{
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			}
+		while(ptr<limit)
+			{
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			*ptr++ = aGray256;
+			}
+
+		iGray256BufferPtr = ptr;
+
+		if(ptr!=iGray256BufferPtrLimit)
+			break;
+
+		if(FlushPixels())
+			return ETrue;
+		}
+
+	return EFalse;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CMonochromePixelWriter::SetMonoPixels(TUint32* aGray256Buffer,TInt aBufferLength)
+	{
+
+	if (aBufferLength >= KPixelWriterBufferThreeQuarter)
+		{
+		TUint32* gray256Buffer = iGray256Buffer;
+
+		if (iGray256BufferPtr != gray256Buffer) 
+			{
+			// flush rest of the pixels 
+			if(FlushPixels())
+				{
+				return ETrue;
+				}
+			}
+
+		// use external buffer without copying data
+		TBool rValue = EFalse;
+		
+		while (aBufferLength && !rValue)
+			{
+			TInt bufferLength = (aBufferLength>KPixelWriterBufferSize)?KPixelWriterBufferSize:aBufferLength;
+			iGray256Buffer = aGray256Buffer;
+			iGray256BufferPtr = aGray256Buffer+bufferLength;
+			iGray256BufferPtrLimit = aGray256Buffer+bufferLength;
+
+			rValue = FlushPixels();
+			aBufferLength -= bufferLength;
+			aGray256Buffer += bufferLength;
+			}
+		
+		// restore pointers to inner buffer
+		iGray256Buffer = gray256Buffer;
+		iGray256BufferPtr = gray256Buffer;
+		iGray256BufferPtrLimit = gray256Buffer+KPixelWriterBufferSize;
+		
+		return rValue;
+		}
+
+	while(aBufferLength)
+		{
+		TUint32* ptr = iGray256BufferPtr;
+		TUint32* limit = ptr+aBufferLength;
+		if(limit>iGray256BufferPtrLimit)
+			limit = iGray256BufferPtrLimit;
+
+		TInt n = limit-ptr;
+		aBufferLength -= n;
+
+		if(n&1)
+			*ptr++ = *aGray256Buffer++;
+		if(n&2)
+			{
+			*ptr++ = *aGray256Buffer++;
+			*ptr++ = *aGray256Buffer++;
+			}
+		while(ptr<limit)
+			{
+			*ptr++ = *aGray256Buffer++;
+			*ptr++ = *aGray256Buffer++;
+			*ptr++ = *aGray256Buffer++;
+			*ptr++ = *aGray256Buffer++;
+			}
+
+		iGray256BufferPtr = ptr;
+
+		if(ptr!=iGray256BufferPtrLimit)
+			break;
+
+		if(FlushPixels())
+			return ETrue;
+		}
+
+	return EFalse;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CMonochromePixelWriter::SetMonoPixelBlock(TUint32* aGray256Buffer)
+	{
+	SetPixelBlockIndex(aGray256Buffer);
+	
+	TUint32* indexBufferPtr = iIndexBuffer;
+
+	TInt ySkip = 0;
+	if(iNumberOfScanlinesToSkip > 0)
+		{
+		ySkip = iNumberOfScanlinesToSkip * iBlockSize.iWidth;
+		indexBufferPtr += ySkip;
+		ySkip = iNumberOfScanlinesToSkip;
+		iNumberOfScanlinesToSkip = 0; // Only call this conditional once.
+		}
+	
+	TInt imageWidth = iImageRegion.iBr.iX;
+	TInt imageHeight = iImageRegion.iBr.iY;
+	TInt endOfImage = iDrawBottomUp ? -1 : imageHeight;
+	
+	// The minimum number of pixels to render horizontally
+	TInt minWidth = Min(iBlockSize.iWidth, imageWidth - iPos.iX);
+	
+	// The next vertical position.  Note that this is usually the height of the block, but 
+	// in the case of the first block when clipping is required, this will be reduced by ySkip.
+	TInt nextYPos = iDrawBottomUp ?	(iPos.iY - iBlockSize.iHeight) + ySkip :
+										(iPos.iY + iBlockSize.iHeight) - ySkip;
+	
+	TInt endPosition = iDrawBottomUp ? Max(nextYPos, endOfImage) : Min(nextYPos, endOfImage);
+	
+	// Once the first block has been processed, iYInc is set to block height
+	iYInc = iDrawBottomUp ? -iBlockSize.iHeight + ySkip : iBlockSize.iHeight - ySkip;
+				
+	// Skip unnecessary pixels (for cropping, or padding when rotated)
+	indexBufferPtr += iPixelPadding;
+	
+	TPoint pos(iPos);
+	iUtil.Begin();
+	for(;iDrawBottomUp ? pos.iY > endPosition : pos.iY < endPosition; iDrawBottomUp ? pos.iY-- : pos.iY++)
+		{
+		iUtil.SetPos(pos);
+		iUtil.SetPixels(indexBufferPtr, minWidth);
+		indexBufferPtr += iBlockSize.iWidth; // next line in block
+		}
+	iUtil.End();
+
+	iPos.iX += iBlockSize.iWidth;
+	
+	if (iPos.iX >= imageWidth)
+		{
+		return NewLine();
+		}
+
+	return EFalse;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CMonochromePixelWriter::FlushPixels()
+	{
+	TUint32* gray256BufferPtrLimit = iGray256BufferPtr;
+	iGray256BufferPtr = iGray256Buffer;
+
+	if(iPos.iY < iImageRegion.iTl.iY || iPos.iY >= iImageRegion.iBr.iY)
+		return ETrue;
+
+	iUtil.Begin();
+
+	TBool finished = EFalse;
+	for (TUint32* gray256BufferPtr = iGray256Buffer; gray256BufferPtr < gray256BufferPtrLimit; )
+		{
+		TInt pixelsToSkip = Min(gray256BufferPtrLimit - gray256BufferPtr,iPixelsToSkip);
+		gray256BufferPtr += pixelsToSkip;
+		iPixelsToSkip -= pixelsToSkip;
+
+		if(iPixelsToSkip)
+			break;
+
+		TInt pixelsToFlush = Min(gray256BufferPtrLimit - gray256BufferPtr,iImageRegion.iBr.iX - iPos.iX);
+
+		if(!pixelsToFlush)
+			break;
+
+		SetPixelBufferIndex(gray256BufferPtr,pixelsToFlush);
+		gray256BufferPtr += pixelsToFlush;
+
+		TBool fillDown = iYInc > 0;
+		TPoint pos(iPos);
+		TInt posYLimit;
+		if(fillDown)
+			posYLimit = Min(pos.iY + iLineRepeat + 1 ,iImageRegion.iBr.iY);
+		else
+			posYLimit = Max(pos.iY - iLineRepeat - 1 ,iImageRegion.iTl.iY-1);
+
+		for(;fillDown ? pos.iY < posYLimit : pos.iY > posYLimit; fillDown ? pos.iY++ : pos.iY--)
+			{
+			if(!iUtil.SetPos(pos-iImageRegion.iTl))
+				{
+				iUtil.End();
+				return ETrue;
+				}
+			iUtil.SetPixels(iIndexBuffer,pixelsToFlush);
+			}
+
+		iPos.iX += pixelsToFlush;
+		if (iPos.iX >= iImageRegion.iBr.iX)
+			{
+			finished = NewLine();
+			if(finished)
+				break;
+			}
+		}
+
+	iUtil.End();
+
+	return finished;
+	}
+
+/**
+ *
+ * @see CImageProcessor.
+ */
+TBool CMonochromePixelWriter::SetPos(const TPoint& aPosition)
+	{
+	if(iImageRegion.Contains(aPosition))
+		{
+		FlushPixels();
+		iPixelsToSkip = 0;
+		iPos = aPosition;
+		return ETrue;
+		}
+
+	return EFalse;
+	}
+
+void CMonochromePixelWriter::Reset()
+	{
+	delete iColorConv;
+	iColorConv = NULL;
+
+	delete[] iGray256Buffer;
+	iGray256Buffer = NULL;
+
+	delete[] iIndexBuffer;
+	iIndexBuffer = NULL;
+
+	iPos.SetXY(0,0);
+	iPixelsToSkip = 0;
+	iImageRegion.SetRect(0,0,0,0);
+	iBlockSize.SetSize(0,0);
+	
+	iDrawBottomUp = EFalse;
+	}
+
+void CMonochromePixelWriter::DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize)
+	{
+	if( (aImageRect.iTl.iX<0) || (aImageRect.iTl.iY<0) || (aImageRect.Size().iWidth>aBitmap.SizeInPixels().iWidth) || (aImageRect.Size().iHeight>aBitmap.SizeInPixels().iHeight) )
+		{
+		User::Leave(KErrArgument);
+		}
+
+	Reset();
+
+	iImageRegion = aImageRect;
+
+	iColorConv = TColorConvertor::NewL(aBitmap.DisplayMode());
+	iUtil.SetBitmapL(&aBitmap);
+
+	if (aBlockSize)
+		{
+		if (aBlockSize->iWidth <= 0 || aBlockSize->iHeight <= 0)
+			{
+			User::Leave(KErrArgument);
+			}
+
+		iBlockSize = *aBlockSize;
+		iBlockArea = iBlockSize.iWidth * iBlockSize.iHeight;
+		
+		ASSERT(iIndexBuffer == NULL);
+		iIndexBuffer = new(ELeave) TUint32[iBlockArea];
+
+		iIndexBufferPtrLimit = iIndexBuffer + iBlockArea;
+		CreateBlockBufferL(iBlockArea);
+		
+		switch(iOperation)
+			{
+			case EDecodeRotate180:
+			case EDecodeRotate270:
+			case EDecodeHorizontalFlip:
+			case EDecodeVerticalFlipRotate90:
+				iDrawBottomUp = ETrue;
+				break;
+			default:
+				iDrawBottomUp = EFalse;		
+			}
+		
+		iYInc = iDrawBottomUp ? -iBlockSize.iHeight : iBlockSize.iHeight;
+		iStartPosition.SetXY(iImageRegion.iTl.iX, iDrawBottomUp ? iImageRegion.iBr.iY - 1 : 0);
+		iEndPosition.SetXY(iImageRegion.iBr.iX, iDrawBottomUp ?
+							iImageRegion.iTl.iY - 1 : iImageRegion.iBr.iY);
+		iPos = iStartPosition;
+		}
+	else
+		{
+		iPos = iImageRegion.iTl;
+		iStartPosition = iPos;
+		iEndPosition = aImageRect.iBr;
+
+		ASSERT(iGray256Buffer == NULL);
+		iGray256Buffer = new(ELeave) TUint32[KPixelWriterBufferSize];
+
+		iGray256BufferPtr = iGray256Buffer;
+		iGray256BufferPtrLimit = iGray256Buffer + KPixelWriterBufferSize;
+
+		ASSERT(iIndexBuffer == NULL);
+		iIndexBuffer = new(ELeave) TUint32[KPixelWriterBufferSize];
+
+		iIndexBufferPtrLimit = iIndexBuffer + KPixelWriterBufferSize;
+		}
+	
+	for(TInt i=0; i<256; i++)
+		{
+		iIndexLookup[i] = iColorConv->ColorIndex(TRgb(i,i,i));	
+		}
+	}
+
+TBool CMonochromePixelWriter::NewLine()
+	{
+	iPos.iX = iStartPosition.iX;
+	iPos.iY += iYInc;
+
+	if(iPos.iY < iStartPosition.iY || iPos.iY >= iEndPosition.iY)
+		{
+		return ETrue;
+		}
+	
+	iPixelsToSkip = iPixelPadding;
+	return EFalse;
+	}
+
+void CMonochromePixelWriter::SetPixelBlockIndex(TUint32* aGray256Buffer)
+	{
+	CMonochromePixelWriter::SetPixelBufferIndex(aGray256Buffer,iBlockArea);
+	}
+
+void CMonochromePixelWriter::SetPixelBufferIndex(TUint32* aGray256Buffer,TInt aCount)
+	{
+	TUint32* indexBufferPtr = iIndexBuffer;
+	TUint32* indexBufferPtrLimit = indexBufferPtr+aCount;
+	TUint32* indexLookup = iIndexLookup;
+
+	if(aCount&1)
+		*indexBufferPtr++ = indexLookup[*aGray256Buffer++];
+	if(aCount&2)
+		{
+		*indexBufferPtr++ = indexLookup[*aGray256Buffer++];
+		*indexBufferPtr++ = indexLookup[*aGray256Buffer++];
+		}
+	while (indexBufferPtr < indexBufferPtrLimit)
+		{
+		*indexBufferPtr++ = indexLookup[*aGray256Buffer++];
+		*indexBufferPtr++ = indexLookup[*aGray256Buffer++];
+		*indexBufferPtr++ = indexLookup[*aGray256Buffer++];
+		*indexBufferPtr++ = indexLookup[*aGray256Buffer++];
+		}
+	}
+
+//
+// CErrorDiffuser::TColorError
+//
+
+inline CErrorDiffuser::TColorError::TColorError():
+	iRedError(0),
+	iGreenError(0),
+	iBlueError(0)
+	{}
+
+inline CErrorDiffuser::TColorError::TColorError(TInt aRedError,TInt aGreenError,TInt aBlueError):
+	iRedError(aRedError),
+	iGreenError(aGreenError),
+	iBlueError(aBlueError)
+	{}
+
+inline void CErrorDiffuser::TColorError::AdjustColor(TRgb& aColor) const
+	{
+	TInt red = ColorCcomponent::ClampColorComponent((iRedError >> 4) + aColor.Red());
+	TInt green = ColorCcomponent::ClampColorComponent((iGreenError >> 4) + aColor.Green());
+	TInt blue = ColorCcomponent::ClampColorComponent((iBlueError >> 4) + aColor.Blue());
+	aColor = TRgb(red,green,blue);
+	}
+
+inline void CErrorDiffuser::TColorError::SetError(TRgb aIdealColor,TRgb aActualColor)
+	{
+	iRedError = aIdealColor.Red() - aActualColor.Red();
+	iGreenError = aIdealColor.Green() - aActualColor.Green();
+	iBlueError = aIdealColor.Blue() - aActualColor.Blue();
+	}
+
+inline CErrorDiffuser::TColorError CErrorDiffuser::TColorError::operator+(const TColorError& aColorError) const
+	{
+	TInt redError = iRedError + aColorError.iRedError;
+	TInt greenError = iGreenError + aColorError.iGreenError;
+	TInt blueError = iBlueError + aColorError.iBlueError;
+	return TColorError(redError,greenError,blueError);
+	}
+
+inline CErrorDiffuser::TColorError CErrorDiffuser::TColorError::operator-(const TColorError& aColorError) const
+	{
+	TInt redError = iRedError - aColorError.iRedError;
+	TInt greenError = iGreenError - aColorError.iGreenError;
+	TInt blueError = iBlueError - aColorError.iBlueError;
+	return TColorError(redError,greenError,blueError);
+	}
+
+inline CErrorDiffuser::TColorError CErrorDiffuser::TColorError::operator<<(TInt aShift) const
+	{
+	TInt redError = iRedError << aShift;
+	TInt greenError = iGreenError << aShift;
+	TInt blueError = iBlueError << aShift;
+	return TColorError(redError,greenError,blueError);
+	}
+
+inline CErrorDiffuser::TColorError& CErrorDiffuser::TColorError::operator+=(const TColorError& aColorError)
+	{
+	iRedError += aColorError.iRedError;
+	iGreenError += aColorError.iGreenError;
+	iBlueError += aColorError.iBlueError;
+	return *this;
+	}
+
+CErrorDiffuser::CErrorDiffuser()
+	{
+	}
+
+CErrorDiffuser::~CErrorDiffuser()
+	{
+	Reset();
+	}
+
+void CErrorDiffuser::DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize)
+	{
+	CPixelWriter::DoPrepareL(aBitmap,aImageRect,aBlockSize);
+
+	TInt scanlineErrorBufferLength = iImageRegion.iBr.iX+2;
+
+	if (iBlockArea > 0)
+		{
+		ASSERT(iEdgeErrorBuffer == NULL);
+		iEdgeErrorBuffer = new(ELeave) TColorError[iBlockSize.iHeight];
+
+		scanlineErrorBufferLength += iBlockSize.iWidth;
+		}
+
+	ASSERT(iScanlineErrorBuffer == NULL);
+	iScanlineErrorBuffer = new(ELeave) TColorError[scanlineErrorBufferLength];
+
+	if (iDisplayMode == EColor64K) 
+		{
+			ASSERT(iRedErrorLookupTable == NULL);
+			iRedErrorLookupTable = new(ELeave) TInt8[256];
+			ASSERT(iGreenErrorLookupTable == NULL);
+			iGreenErrorLookupTable = new(ELeave) TInt8[256];
+			
+			for (TInt i=0;i<256;i++) 
+				{
+					TInt tmp = i & 0xf8;
+					iRedErrorLookupTable[i] = i - (tmp | (tmp >> 5));
+					tmp = i & 0xfc;
+					iGreenErrorLookupTable[i] = i - (tmp | (tmp >> 6));
+				}
+		}
+	}
+
+void CErrorDiffuser::SetPixelBufferIndex(TRgb* aColorBuffer,TInt aCount)
+	{
+	// use optimized function for EColor64K mode
+	if (iDisplayMode == EColor64K) 
+		{
+		SetPixelBufferColor64KIndex(aColorBuffer, aCount);
+		return;
+		}
+
+	TInt clearX = iPos.iX;
+
+	TInt yDiff = iPos.iY - iLastPos.iY;
+	if(yDiff != 0)									// On a new line?
+		{
+		new(&iNextError) TColorError;
+		clearX = iImageRegion.iBr.iX;				// To clear to end of line
+
+		if(yDiff == -1 || yDiff == 1)				// Now on ajacent line?
+			{
+			clearX -= iLastPos.iX;					// Clear end of previous line
+			if(clearX)
+				{
+				Mem::FillZ(iScanlineErrorBuffer + iLastPos.iX + 2, clearX * sizeof(TColorError));
+				}
+			clearX = iPos.iX;						// To clear up to current position
+			}
+		iLastPos.iX = iImageRegion.iTl.iX;			// Start of this line
+		}
+
+	clearX -= iLastPos.iX;
+	if(clearX > 0)									// Treat any skipped pixels as if they produced no error
+		{
+		new(&iNextError) TColorError;
+		Mem::FillZ(iScanlineErrorBuffer + iLastPos.iX + 2, clearX * sizeof(TColorError));
+		}
+
+	iLastPos.iY = iPos.iY;
+	iLastPos.iX = iPos.iX+aCount;
+
+	TUint32* indexBufferPtr = iIndexBuffer;
+	TUint32* indexBufferPtrLimit = indexBufferPtr+aCount;
+	TColorError* scanlineErrorBufferPtr = iScanlineErrorBuffer + iPos.iX;
+	TColorError error;
+	TRgb color;
+
+	while(indexBufferPtr<indexBufferPtrLimit)
+		{
+		color = *aColorBuffer++;
+
+		iNextError.AdjustColor(color);
+		TUint32 index = iColorConv->ColorIndex(color);
+		*indexBufferPtr++ = index;
+
+		error.SetError(color, iColorConv->Color(index));
+
+		iNextError = (error << 3) - error; // Set right error for this pixel
+
+		*scanlineErrorBufferPtr++ += error + (error << 1); // Set left-down error for this pixel
+
+		*scanlineErrorBufferPtr += error + (error << 2); // Set down error for this pixel
+
+		iNextError += *(scanlineErrorBufferPtr+1);
+
+		*(scanlineErrorBufferPtr+1) = error; // Set right-down error for this pixel
+		}
+	}
+
+// faster function (see listing) then Bitmap Util ClampColorComponent
+inline TInt CErrorDiffuser::ClipColorComponent(TInt value)
+    {
+    if (TUint(value) > 0xFF)
+        {
+        value = value < 0 ? 0 : 0xFF;
+        }
+    return value;
+    }
+
+void CErrorDiffuser::SetPixelBufferColor64KIndex(TRgb* aColorBuffer,TInt aCount)
+	{
+	TInt clearX = iPos.iX;
+
+	TInt yDiff = iPos.iY - iLastPos.iY;
+	if(yDiff != 0)									// On a new line?
+		{
+		iNextRedError = 0;
+		iNextGreenError = 0;
+		iNextBlueError = 0;
+		clearX = iImageRegion.iBr.iX;				// To clear to end of line
+
+		if(yDiff == -1 || yDiff == 1)				// Now on ajacent line?
+			{
+			clearX -= iLastPos.iX;					// Clear end of previous line
+			if(clearX > 0) 
+				{
+				Mem::FillZ(iScanlineErrorBuffer + iLastPos.iX + 2, clearX * sizeof(TColorError));
+				}
+			clearX = iPos.iX;						// To clear up to current position
+			}
+		iLastPos.iX = iImageRegion.iTl.iX;			// Start of this line
+		}
+
+	clearX -= iLastPos.iX;
+	if(clearX > 0)									// Treat any skipped pixels as if they produced no error
+		{
+		iNextRedError = 0;
+		iNextGreenError = 0;
+		iNextBlueError = 0;
+		Mem::FillZ(iScanlineErrorBuffer + iLastPos.iX + 2, clearX * sizeof(TColorError));
+		}
+
+	iLastPos.iY = iPos.iY;
+	iLastPos.iX = iPos.iX+aCount;
+
+	TUint32* indexBufferPtr = iIndexBuffer;
+	TUint32* indexBufferPtrLimit = indexBufferPtr+aCount;
+
+	TColorError* scanlineErrorBufferPtr = iScanlineErrorBuffer + iPos.iX;
+
+	TInt redError = iNextRedError;
+	TInt greenError = iNextGreenError;
+	TInt blueError = iNextBlueError;
+	
+	while(indexBufferPtr<indexBufferPtrLimit)
+		{
+		// red			
+		register TInt red = aColorBuffer->Red();
+		red = ClipColorComponent(red + (redError >> 4));
+
+		register TInt error = iRedErrorLookupTable[red];
+		
+		// Set right error for red component
+		scanlineErrorBufferPtr->iRedError += error + (error << 1); // Set left-down error for this pixel
+		(scanlineErrorBufferPtr+1)->iRedError += error + (error << 2); // Set down error for this pixel
+		redError = (scanlineErrorBufferPtr+2)->iRedError + (error << 3) - error; // Set right error for this pixel
+		(scanlineErrorBufferPtr+2)->iRedError = error; // Set right-down error for this pixel
+
+		// green			
+		register TInt green = aColorBuffer->Green();
+			
+		green = ClipColorComponent(green + (greenError >> 4));
+
+		error = iGreenErrorLookupTable[green];
+		
+		// Set right error for green component
+		scanlineErrorBufferPtr->iGreenError += error + (error << 1); // Set left-down error for this pixel
+		(scanlineErrorBufferPtr+1)->iGreenError += error + (error << 2); // Set down error for this pixel
+		greenError = (scanlineErrorBufferPtr+2)->iGreenError + (error << 3) - error; // Set right error for this pixel
+		(scanlineErrorBufferPtr+2)->iGreenError = error; // Set right-down error for this pixel
+
+		// blue			
+		register TInt blue = aColorBuffer->Blue();
+			
+		blue = ClipColorComponent(blue + (blueError >> 4));
+		
+		*indexBufferPtr++ = ((red & 0xf8) << 8) | ((green & 0xfc) << 3) | ((blue & 0xf8) >> 3);
+		
+		error = iRedErrorLookupTable[blue];// use the same lookup table for blue color
+
+		// Set right error for blue component
+		scanlineErrorBufferPtr->iBlueError += error + (error << 1); // Set left-down error for this pixel
+		(scanlineErrorBufferPtr+1)->iBlueError += error + (error << 2); // Set down error for this pixel
+		blueError = (scanlineErrorBufferPtr+2)->iBlueError + (error << 3) - error; // Set right error for this pixel
+		(scanlineErrorBufferPtr+2)->iBlueError = error; // Set right-down error for this pixel
+
+		scanlineErrorBufferPtr++;
+		aColorBuffer++;
+		}
+
+		iNextRedError = redError;
+		iNextGreenError = greenError;
+		iNextBlueError = blueError;
+
+
+	}
+
+void CErrorDiffuser::SetPixelBlockIndex(TRgb* aColorBuffer)
+	{
+	if(iPos.iY!=iLastPos.iY)
+		{
+		Mem::FillZ(iEdgeErrorBuffer,sizeof(TColorError) * iBlockSize.iHeight);
+		}
+
+	TUint32* indexBufferPtr = iIndexBuffer;
+
+	TColorError error;
+	TColorError* edgeErrorBuffer = iEdgeErrorBuffer;
+
+	for (TInt row = 0; row < iBlockSize.iHeight; row++)
+		{
+		TColorError* errorValue = iScanlineErrorBuffer + iPos.iX;
+		TColorError nextError = *edgeErrorBuffer + *errorValue;
+		*edgeErrorBuffer = error;
+
+		for (TInt col = 0; col < iBlockSize.iWidth; col++)
+			{
+			TRgb bufferColor = *aColorBuffer++;
+			nextError.AdjustColor(bufferColor);
+
+			TUint32 index = iColorConv->ColorIndex(bufferColor);
+			*indexBufferPtr++ = index;
+
+			error.SetError(bufferColor,iColorConv->Color(index));
+
+			if (col > 0)
+				*(errorValue - 1) += error + (error << 1); // Set left-down error for this pixel
+			else
+				*errorValue = error + (error << 1);
+
+			*errorValue += error + (error << 2); // Set down error for this pixel
+			errorValue++;
+
+			nextError = (error << 3) - error; // Set right error for this pixel
+
+			if (col < iBlockSize.iWidth)
+				{
+				nextError += *errorValue;
+				*errorValue = error; // Set right-down error for this pixel
+				}
+
+			}
+
+		*edgeErrorBuffer++ += nextError;
+		}
+
+	iLastPos.iY = iPos.iY;
+	iLastPos.iX = iPos.iX+iBlockSize.iWidth;
+	}
+
+void CErrorDiffuser::Reset()
+	{
+	CPixelWriter::Reset();
+
+	delete[] iScanlineErrorBuffer;
+	iScanlineErrorBuffer = NULL;
+
+	delete[] iEdgeErrorBuffer;
+	iEdgeErrorBuffer = NULL;
+	
+	delete iRedErrorLookupTable;
+	iRedErrorLookupTable = NULL;
+	
+	delete iGreenErrorLookupTable;
+	iGreenErrorLookupTable = NULL;
+
+	}
+
+//
+// CMonochromeErrorDiffuser
+//
+
+
+/**
+ *
+ * Static factory function to create CMonochromeErrorDiffuser objects.
+ *
+ * @return  Pointer to a fully constructed CMonochromeErrorDiffuser object. 
+ */
+CMonochromeErrorDiffuser* CMonochromeErrorDiffuser::NewL()
+	{
+	return new(ELeave) CMonochromeErrorDiffuser;
+	}
+
+CMonochromeErrorDiffuser::CMonochromeErrorDiffuser()
+	{}
+
+CMonochromeErrorDiffuser::~CMonochromeErrorDiffuser()
+	{
+	Reset();
+	}
+
+void CMonochromeErrorDiffuser::DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize)
+	{
+	CMonochromePixelWriter::DoPrepareL(aBitmap,aImageRect,aBlockSize);
+
+	TInt scanlineErrorBufferLength = iImageRegion.iBr.iX+2;
+
+	if (iBlockArea > 0)
+		{
+		ASSERT(iEdgeErrorBuffer == NULL);
+		iEdgeErrorBuffer = new(ELeave) TInt[iBlockSize.iHeight];
+
+		Mem::FillZ(iEdgeErrorBuffer,sizeof(TInt) * iBlockSize.iHeight);
+		scanlineErrorBufferLength += iBlockSize.iWidth;
+		}
+
+	ASSERT(iScanlineErrorBuffer == NULL);
+	iScanlineErrorBuffer = new(ELeave) TInt[scanlineErrorBufferLength];
+
+	Mem::FillZ(iScanlineErrorBuffer,sizeof(TInt) * scanlineErrorBufferLength);
+	}
+
+void CMonochromeErrorDiffuser::SetPixelBufferIndex(TUint32* aGray256Buffer,TInt aCount)
+	{
+	TInt clearX = iPos.iX;
+
+	TInt yDiff = iPos.iY - iLastPos.iY;
+	if(yDiff != 0)									// On a new line?
+		{
+		iNextError = 0;
+		clearX = iImageRegion.iBr.iX;				// To clear to end of line
+
+		if(yDiff == -1 || yDiff == 1)				// Now on ajacent line?
+			{
+			clearX -= iLastPos.iX;					// Clear end of previous line
+			if(clearX)
+				Mem::FillZ(iScanlineErrorBuffer + iLastPos.iX + 2, clearX * sizeof(TInt));
+			clearX = iPos.iX;						// To clear up to current position
+			}
+		iLastPos.iX = iImageRegion.iTl.iX;			// Start of this line
+		}
+
+	clearX -= iLastPos.iX;
+	if(clearX > 0)									// Treat any skipped pixels as if they produced no error
+		{
+		iNextError = 0;
+		Mem::FillZ(iScanlineErrorBuffer + iLastPos.iX + 2, clearX * sizeof(TInt));
+		}
+
+	iLastPos.iY = iPos.iY;
+	iLastPos.iX = iPos.iX+aCount;
+
+	TUint32* indexBufferPtr = iIndexBuffer;
+	TUint32* indexBufferPtrLimit = indexBufferPtr+aCount;
+
+	TInt* scanlineErrorBufferPtr = iScanlineErrorBuffer + iPos.iX;
+	TInt nextError = iNextError;
+
+	while(indexBufferPtr<indexBufferPtrLimit)
+		{
+		TInt gray256 = *aGray256Buffer++;
+
+		TInt error = gray256 + (nextError >> 4);
+		TUint32 index = iIndexLookup[ColorCcomponent::ClampColorComponent(error)];
+		*indexBufferPtr++ = index;
+
+		error -= TColorConvertor::RgbToMonochrome(iColorConv->Color(index));
+
+		nextError = (error << 3) - error; // Set right error for this pixel
+
+		*scanlineErrorBufferPtr++ += error + (error << 1); // Set left-down error for this pixel
+
+		*scanlineErrorBufferPtr += error + (error << 2); // Set down error for this pixel
+
+		nextError += *(scanlineErrorBufferPtr+1);
+
+		*(scanlineErrorBufferPtr+1) = error; // Set right-down error for this pixel
+		}
+
+	iNextError = nextError;
+	}
+
+void CMonochromeErrorDiffuser::SetPixelBlockIndex(TUint32* aGray256Buffer)
+	{
+	if(iPos.iY!=iLastPos.iY)
+		{
+		Mem::FillZ(iEdgeErrorBuffer,sizeof(TInt) * iBlockSize.iHeight);
+		}
+
+	TUint32* indexBufferPtr = iIndexBuffer;
+
+	TInt error = 0;
+	TInt* edgeErrorBuffer = iEdgeErrorBuffer;
+
+	for (TInt row = 0; row < iBlockSize.iHeight; row++)
+		{
+		TInt* errorValue = iScanlineErrorBuffer + iPos.iX;
+		TInt nextError = *edgeErrorBuffer + *errorValue;
+		*edgeErrorBuffer = error;
+
+		for (TInt col = 0; col < iBlockSize.iWidth; col++)
+			{
+			TInt gray256 = *aGray256Buffer++;
+
+			error = gray256 + (nextError >> 4); // Same as /16
+			
+			TUint32 index = iIndexLookup[ColorCcomponent::ClampColorComponent(error)];
+			*indexBufferPtr++ = index;
+
+			error -= TColorConvertor::RgbToMonochrome(iColorConv->Color(index));
+
+			if (col > 0)
+				*(errorValue - 1) += error + (error << 1); // Set left-down error for this pixel
+			else
+				*errorValue = error + (error << 1);
+
+			*errorValue += error + (error << 2); // Set down error for this pixel
+			errorValue++;
+
+			nextError = (error << 3) - error; // Set right error for this pixel
+
+			if (col < iBlockSize.iWidth)
+				{
+				nextError += *errorValue;
+				*errorValue = error; // Set right-down error for this pixel
+				}
+			}
+
+		*edgeErrorBuffer++ += nextError;
+		}
+
+	iLastPos.iY = iPos.iY;
+	iLastPos.iX = iPos.iX+iBlockSize.iWidth;
+	}
+
+void CMonochromeErrorDiffuser::Reset()
+	{
+	CMonochromePixelWriter::Reset();
+
+	delete[] iScanlineErrorBuffer;
+	iScanlineErrorBuffer = NULL;
+
+	delete[] iEdgeErrorBuffer;
+	iEdgeErrorBuffer = NULL;
+	}
+
+//
+// CThumbnailProcessor
+//
+
+/**
+ *
+ * Static factory function to create CThumbnailProcessor objects.
+ *
+ * @param	"aImageProc"
+ *          A pointer to an externally constructed CImageProcessorExtension object.
+ *          This will be deleted when the CThumbnailProcessor object is deleted.
+ * @param	"aReductionFactor"
+ *          The reduction factor to use.
+ * @return  Pointer to a fully constructed CThumbnailProcessor object. 
+ */
+CThumbnailProcessor* CThumbnailProcessor::NewL(CImageProcessorExtension* aImageProc,TInt aReductionFactor)
+	{
+	return new(ELeave) CThumbnailProcessor(aImageProc,aReductionFactor);
+	}
+
+CThumbnailProcessor::CThumbnailProcessor(CImageProcessorExtension* aImageProc,TInt aReductionFactor):
+	iImageProc(aImageProc),
+	iYInc(1),
+	iReductionFactor(aReductionFactor)
+		{}
+
+CThumbnailProcessor::~CThumbnailProcessor()
+	{
+	delete iImageProc;
+	delete[] iReducedPixelBuffer;
+	delete[] iReducedSumBuffer;
+	}
+
+void CThumbnailProcessor::PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect)
+	{
+	PrepareCommonL(aImageRect);
+	iYInc = 1;
+
+	TInt bufferSize = (iImageRegion.iBr.iX + (1<<iReductionFactor) -1 ) >> iReductionFactor;
+
+	ASSERT(iReducedSumBuffer == NULL);
+	iReducedSumBuffer = new(ELeave) TColorSum[bufferSize];
+	Mem::FillZ(iReducedSumBuffer,bufferSize * sizeof(TColorSum));
+
+	iImageProc->PrepareL(aBitmap,iReducedImageRegion);
+
+	ASSERT(iReducedPixelBuffer == NULL);
+	iReducedPixelBuffer = new(ELeave) TRgb[iReducedImageRegion.iBr.iX];
+	}
+
+void CThumbnailProcessor::PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize)
+	{
+	PrepareCommonL(aImageRect);
+
+	CreateBlockBufferL(aRgbBlockSize.iWidth*aRgbBlockSize.iHeight);
+
+	iOriginalBlockSize = aRgbBlockSize;
+	iYInc = iDrawBottomUp ? -iOriginalBlockSize.iHeight : iOriginalBlockSize.iHeight;
+
+	iReducedBlockSize = aRgbBlockSize;
+	iReducedBlockSize.iWidth >>= iReductionFactor;
+	iReducedBlockSize.iHeight >>= iReductionFactor;
+
+	iImageProc->SetInitialScanlineSkipPadding(iNumberOfScanlinesToSkip >> iReductionFactor);
+	iImageProc->SetPixelPadding(iPixelPadding >> iReductionFactor);
+	iImageProc->PrepareL(aBitmap,iReducedImageRegion,iReducedBlockSize);
+
+	ASSERT(iReducedPixelBuffer == NULL);
+	iReducedPixelBuffer = new(ELeave) TRgb[iReducedBlockSize.iWidth * iReducedBlockSize.iHeight];
+	}
+
+void CThumbnailProcessor::PrepareCommonL(const TRect& aImageRect)
+	{
+	ASSERT(iReductionFactor > 0);
+	iImageRegion = aImageRect;
+
+	TInt roundUp = (1<<iReductionFactor)-1;
+	iReducedImageRegion.iTl.iX = aImageRect.iTl.iX >> iReductionFactor;
+	iReducedImageRegion.iTl.iY = aImageRect.iTl.iY >> iReductionFactor;
+	
+	TSize size = aImageRect.Size();
+	size.iWidth = (size.iWidth + roundUp) >> iReductionFactor;
+	size.iHeight = (size.iHeight + roundUp) >> iReductionFactor;
+	iReducedImageRegion.iBr = iReducedImageRegion.iTl + size;
+
+	switch(iOperation)
+		{
+		case EDecodeRotate180:
+		case EDecodeRotate270:
+		case EDecodeHorizontalFlip:
+		case EDecodeVerticalFlipRotate90:
+			iDrawBottomUp = ETrue;
+			iImageProc->SetOperation(iOperation);
+			break;
+		default:
+			iDrawBottomUp = EFalse;
+		}
+	iStartPosition.SetXY(iImageRegion.iTl.iX, iDrawBottomUp ? aImageRect.iBr.iY - 1 : 0);
+	iEndPosition.SetXY(aImageRect.iBr.iX, iDrawBottomUp ? aImageRect.iTl.iY - 1 : aImageRect.iBr.iY);
+	iPos = iStartPosition;
+
+	iPositionChanged = ETrue;
+
+	iEndOfLineX = iEndPosition.iX + iPixelPadding;
+
+	delete[] iReducedPixelBuffer;
+	iReducedPixelBuffer = NULL;
+
+	delete[] iReducedSumBuffer;
+	iReducedSumBuffer = NULL;
+	}
+
+TBool CThumbnailProcessor::SetPixel(TRgb aColor)
+	{
+	TInt x = iPos.iX;
+
+	if (x < iImageRegion.iBr.iX)
+		{
+		TColorSum* sumPtr = iReducedSumBuffer + (x >> iReductionFactor);
+		sumPtr->iRed += aColor.Red();
+		sumPtr->iGreen += aColor.Green();
+		sumPtr->iBlue += aColor.Blue();
+		sumPtr->iCount++;
+		}
+
+	x++;
+	iPos.iX = x;
+
+	if (x == iEndOfLineX)
+		return NewLine();
+
+	return EFalse;
+	}
+
+TBool CThumbnailProcessor::NewLine()
+	{
+	TInt newY = iPos.iY + iYInc;
+
+	TBool finished = (newY < iStartPosition.iY || newY >= iEndPosition.iY);
+	TBool outsideOfBuffer = ((newY ^ iPos.iY) >> iReductionFactor) != 0;
+
+	if(finished || outsideOfBuffer)
+		{
+		DoFlushPixels();
+		}
+
+	iPos.iX = iStartPosition.iX;
+	iPos.iY = newY;
+
+	if(iPositionChanged && outsideOfBuffer)
+		{
+		iImageProc->SetPos(TPoint(iPos.iX >> iReductionFactor,iPos.iY >> iReductionFactor));
+		iPositionChanged = EFalse;
+		}
+
+	return finished;
+	}
+
+TBool CThumbnailProcessor::SetPixelBlock(TRgb* aColorBuffer)
+	{
+	if ((iPos.iX >> iReductionFactor) < iReducedImageRegion.iBr.iX)
+		{
+		ASSERT(aColorBuffer);
+
+		if(iPositionChanged)
+			{
+			iImageProc->SetPos(TPoint(iPos.iX >> iReductionFactor,iPos.iY >> iReductionFactor));
+			iPositionChanged = EFalse;
+			}
+
+		TInt xOuterStop = iReducedBlockSize.iWidth<<iReductionFactor;
+		TInt yOuterStop = iReducedBlockSize.iHeight<<iReductionFactor;
+
+		TInt outerStep = 1<<iReductionFactor;
+		TInt divisionFactor = 2*iReductionFactor;
+
+		TRgb* reducedPixelBuffer = iReducedPixelBuffer;
+
+		for (TInt yOuter = 0; yOuter < yOuterStop; yOuter += outerStep)
+			{
+			for (TInt xOuter = 0; xOuter < xOuterStop; xOuter += outerStep)
+				{
+				TRgb* colorBuffer = &aColorBuffer[yOuter * iOriginalBlockSize.iWidth + xOuter];
+				TInt red = 0;
+				TInt green = 0;
+				TInt blue = 0;
+
+				for (TInt yInner = 0; yInner < outerStep; yInner++)
+					{
+					for (TInt xInner = 0; xInner < outerStep; xInner++)
+						{
+						red += colorBuffer[xInner].Red();
+						green += colorBuffer[xInner].Green();
+						blue += colorBuffer[xInner].Blue();
+						}
+					colorBuffer += iOriginalBlockSize.iWidth;
+					}
+
+				red >>= divisionFactor;
+				green >>= divisionFactor;
+				blue >>= divisionFactor;
+
+				*reducedPixelBuffer++ = TRgb(red,green,blue);
+				}
+			}
+
+		iImageProc->SetPixelBlock(iReducedPixelBuffer);
+		}
+
+	iPos.iX += iOriginalBlockSize.iWidth;
+	if (iPos.iX >= iEndOfLineX)
+		{
+		iPos.iX = iStartPosition.iX;
+		iPos.iY += iYInc;
+		if(iPos.iY < iStartPosition.iY || iPos.iY >= iEndPosition.iY)
+			{
+			return ETrue;
+			}
+		}
+
+	return EFalse;
+
+	}
+
+TBool CThumbnailProcessor::FlushPixels()
+	{
+	DoFlushPixels();
+	iImageProc->FlushPixels();
+
+	iPositionChanged = ETrue;
+
+	if(iPos.iY < iStartPosition.iY || iPos.iY >= iEndPosition.iY)
+		{
+		return ETrue;
+		}
+
+	return EFalse;
+	}
+
+void CThumbnailProcessor::DoFlushPixels()
+	{
+	if(!iReducedSumBuffer)
+		return;
+
+	TColorSum* reducedSumPtr = iReducedSumBuffer + iReducedImageRegion.iTl.iX;
+	TColorSum* reducedSumPtrLimit = iReducedSumBuffer + iReducedImageRegion.iBr.iX;
+
+	while(reducedSumPtr < reducedSumPtrLimit)
+		{
+
+		while(reducedSumPtr->iCount==0)
+			{
+			reducedSumPtr++;
+			if(reducedSumPtr==reducedSumPtrLimit)
+				return;
+			}
+
+		if(iPositionChanged)
+			iImageProc->SetPos(TPoint(reducedSumPtr - iReducedSumBuffer,iPos.iY >> iReductionFactor));
+
+		TRgb* reducedPixelBufferPtr = iReducedPixelBuffer;
+		TInt fullCountFactor = 2*iReductionFactor;
+
+		while(reducedSumPtr < reducedSumPtrLimit)
+			{
+			TInt count = reducedSumPtr->iCount;
+			TUint32 red;
+			TUint32 green;
+			TUint32 blue;
+
+			if(count == (1<<fullCountFactor))
+				{
+				red = reducedSumPtr->iRed >> fullCountFactor;
+				green = reducedSumPtr->iGreen >> fullCountFactor;
+				blue = reducedSumPtr->iBlue >> fullCountFactor;
+				}
+			else if(count!=0)
+				{
+				red = reducedSumPtr->iRed / count;
+				green = reducedSumPtr->iGreen / count;
+				blue = reducedSumPtr->iBlue / count;
+				}
+			else
+				break;
+
+			*reducedPixelBufferPtr++ = TRgb(red,green,blue);
+
+			reducedSumPtr++;
+			}
+
+		TInt numPixels = reducedPixelBufferPtr-iReducedPixelBuffer;
+		iImageProc->SetPixels(iReducedPixelBuffer,numPixels);
+
+		Mem::FillZ(reducedSumPtr-numPixels,numPixels * sizeof(TColorSum));
+		}
+
+	}
+
+TBool CThumbnailProcessor::SetPos(const TPoint& aPosition)
+	{
+	if(iImageRegion.Contains(aPosition)==EFalse)
+		return EFalse;
+
+	if((aPosition.iY ^ iPos.iY) >> iReductionFactor)
+		DoFlushPixels();
+
+	iPositionChanged = ETrue;
+	iPos = aPosition;
+
+	return ETrue;
+	}
+
+void CThumbnailProcessor::SetYPosIncrement(TInt aYInc)
+	{
+	iYInc = aYInc;
+
+	TInt reducedYInc = aYInc >> iReductionFactor;
+	if(reducedYInc==0)
+		reducedYInc = 1;
+
+	iImageProc->SetYPosIncrement(reducedYInc);
+	}
+
+void CThumbnailProcessor::SetLineRepeat(TInt aLineRepeat)
+	{
+	TInt reducedLineRepeat = aLineRepeat >> iReductionFactor;
+	iImageProc->SetLineRepeat(reducedLineRepeat);
+	}
+
+void CThumbnailProcessor::SetPixelPadding(TInt aNumberOfPixels)
+	{
+	iPixelPadding = aNumberOfPixels;
+	iEndOfLineX = iEndPosition.iX + iPixelPadding;
+	}
+
+//
+// CMonochromeThumbnailProcessor
+//
+
+/**
+ *
+ * Static factory function to create CMonochromeThumbnailProcessor objects.
+ *
+ * @param	"aImageProc"
+ *          A pointer to an externally constructed CImageProcessorExtension object.
+ *          This will be deleted when the CMonochromeThumbnailProcessor object is deleted.
+ * @param	aReductionFactor"
+ *          The reduction factor to use.
+ * @return  Pointer to a fully constructed CMonochromeThumbnailProcessor object. 
+ */
+CMonochromeThumbnailProcessor* CMonochromeThumbnailProcessor::NewL(CImageProcessorExtension* aImageProc,TInt aReductionFactor)
+	{
+	return new(ELeave) CMonochromeThumbnailProcessor(aImageProc,aReductionFactor);
+	}
+
+CMonochromeThumbnailProcessor::CMonochromeThumbnailProcessor(CImageProcessorExtension* aImageProc,TInt aReductionFactor):
+	iImageProc(aImageProc),
+	iYInc(1),
+	iReductionFactor(aReductionFactor)
+		{}
+
+CMonochromeThumbnailProcessor::~CMonochromeThumbnailProcessor()
+	{
+	delete iImageProc;
+	delete[] iReducedPixelBuffer;
+	delete[] iReducedSumBuffer;
+	}
+
+void CMonochromeThumbnailProcessor::PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect)
+	{
+	PrepareCommonL(aImageRect);
+	iYInc = 1;
+	
+	TInt bufferSize = (iImageRegion.iBr.iX + (1<<iReductionFactor) -1 ) >> iReductionFactor;
+
+	ASSERT(iReducedSumBuffer == NULL);
+	iReducedSumBuffer = new(ELeave) TMonochromeSum[bufferSize];
+	Mem::FillZ(iReducedSumBuffer,bufferSize * sizeof(TMonochromeSum));
+
+	iImageProc->PrepareL(aBitmap,iReducedImageRegion);
+
+	ASSERT(iReducedPixelBuffer == NULL);
+	iReducedPixelBuffer = new(ELeave) TUint32[iReducedImageRegion.iBr.iX];
+	}
+
+void CMonochromeThumbnailProcessor::PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize)
+	{
+	PrepareCommonL(aImageRect);
+
+	CreateBlockBufferL(aRgbBlockSize.iWidth*aRgbBlockSize.iHeight);
+
+	iOriginalBlockSize = aRgbBlockSize;
+	iYInc = iDrawBottomUp ? -iOriginalBlockSize.iHeight : iOriginalBlockSize.iHeight;
+
+
+	iReducedBlockSize = aRgbBlockSize;
+	iReducedBlockSize.iWidth >>= iReductionFactor;
+	iReducedBlockSize.iHeight >>= iReductionFactor;
+
+	iImageProc->SetInitialScanlineSkipPadding(iNumberOfScanlinesToSkip >> iReductionFactor);
+	iImageProc->SetPixelPadding(iPixelPadding >> iReductionFactor);
+	iImageProc->PrepareL(aBitmap,iReducedImageRegion,iReducedBlockSize);
+
+	ASSERT(iReducedPixelBuffer == NULL);
+	iReducedPixelBuffer = new(ELeave) TUint32[iReducedBlockSize.iWidth * iReducedBlockSize.iHeight];
+	}
+
+void CMonochromeThumbnailProcessor::PrepareCommonL(const TRect& aImageRect)
+	{
+	ASSERT(iReductionFactor > 0);
+	iImageRegion = aImageRect;
+
+	TInt roundUp = (1<<iReductionFactor)-1;
+	iReducedImageRegion.iTl.iX = aImageRect.iTl.iX >> iReductionFactor;
+	iReducedImageRegion.iTl.iY = aImageRect.iTl.iY >> iReductionFactor;
+
+	TSize size = aImageRect.Size();
+	size.iWidth = (size.iWidth + roundUp) >> iReductionFactor;
+	size.iHeight = (size.iHeight + roundUp) >> iReductionFactor;
+	iReducedImageRegion.iBr = iReducedImageRegion.iTl + size;
+	
+	switch(iOperation)
+		{
+		case EDecodeRotate180:
+		case EDecodeRotate270:
+		case EDecodeHorizontalFlip:
+		case EDecodeVerticalFlipRotate90:
+			iDrawBottomUp = ETrue;
+			iImageProc->SetOperation(iOperation);
+			break;
+		default:
+			iDrawBottomUp = EFalse;
+		}
+	iStartPosition.SetXY(iImageRegion.iTl.iX, iDrawBottomUp ? aImageRect.iBr.iY - 1 : 0);
+	iEndPosition.SetXY(aImageRect.iBr.iX, iDrawBottomUp ? aImageRect.iTl.iY - 1 : aImageRect.iBr.iY);
+	iPos = iStartPosition;
+	
+	iPositionChanged = ETrue;
+
+	iEndOfLineX = iEndPosition.iX + iPixelPadding;
+
+	delete[] iReducedPixelBuffer;
+	iReducedPixelBuffer = NULL;
+
+	delete iReducedSumBuffer;
+	iReducedSumBuffer = NULL;
+	}
+
+TBool CMonochromeThumbnailProcessor::SetMonoPixel(TInt aGray256)
+	{
+	TInt x = iPos.iX;
+
+	if (x < iImageRegion.iBr.iX)
+		{
+		TMonochromeSum* sumPtr = iReducedSumBuffer + (x >> iReductionFactor);
+		sumPtr->iLevel += aGray256;
+		sumPtr->iCount++;
+		}
+
+	x++;
+	iPos.iX = x;
+
+	if (x == iEndOfLineX)
+		return NewLine();
+
+	return EFalse;
+	}
+
+TBool CMonochromeThumbnailProcessor::SetMonoPixelRun(TInt aGray256,TInt aCount)
+	{
+	while (aCount != 0)
+		{
+		TInt x		= iPos.iX;
+		TInt xLimit = x+aCount;
+
+		iPos.iX = xLimit;
+
+		if (xLimit > iImageRegion.iBr.iX)
+			xLimit = iImageRegion.iBr.iX;
+
+		if (xLimit > x)
+			{
+			TInt numPixels = xLimit-x;
+
+			TInt reductionFactor = iReductionFactor;
+			TInt reductionCount = 1<<reductionFactor;	//number of horizontal pixel in a TMonochromeSum
+
+			TMonochromeSum* sumPtr = iReducedSumBuffer + (x >> reductionFactor);
+
+			TInt n = reductionCount-(x&(reductionCount-1));	//number of pixels to complete current TMonochromeSum
+
+			if(numPixels > n)
+				{
+				sumPtr->iCount += n;					//Complete first TMonochromeSum in run
+				sumPtr->iLevel += n * aGray256;
+				sumPtr++;
+				numPixels -= n;
+
+				while(numPixels > reductionCount)			//Complete middle TMonochromeSum(s) in run
+					{
+					sumPtr->iCount += reductionCount;
+					sumPtr->iLevel += aGray256 << reductionFactor;
+					sumPtr++;
+					numPixels -= reductionCount;
+					}
+				}
+
+			sumPtr->iCount += numPixels;				//Update last/only TMonochromeSum in run
+			sumPtr->iLevel += numPixels * aGray256;
+			}
+
+		if (iPos.iX < iEndOfLineX)
+			break;
+
+		aCount = iPos.iX - iEndOfLineX;
+
+		if(NewLine())
+			return ETrue;
+		}
+
+	return EFalse;
+	}
+
+TBool CMonochromeThumbnailProcessor::NewLine()
+	{
+	TInt newY = iPos.iY + iYInc;
+
+	TBool finished = (newY < iStartPosition.iY || newY >= iEndPosition.iY);
+	TBool outsideOfBuffer = ((newY ^ iPos.iY) >> iReductionFactor) != 0;
+
+	if(finished || outsideOfBuffer)
+		{
+		DoFlushPixels();
+		}
+
+	iPos.iX = iStartPosition.iX;
+	iPos.iY = newY;
+
+	if(iPositionChanged && outsideOfBuffer)
+		{
+		iImageProc->SetPos(TPoint(iPos.iX >> iReductionFactor,iPos.iY >> iReductionFactor));
+		iPositionChanged = EFalse;
+		}
+
+	return finished;
+	}
+
+TBool CMonochromeThumbnailProcessor::SetMonoPixelBlock(TUint32* aGray256Buffer)
+	{
+	if ((iPos.iX >> iReductionFactor) < iReducedImageRegion.iBr.iX)
+		{
+		ASSERT(aGray256Buffer);
+
+		if(iPositionChanged)
+			{
+			iImageProc->SetPos(TPoint(iPos.iX >> iReductionFactor,iPos.iY >> iReductionFactor));
+			iPositionChanged = EFalse;
+			}
+
+		TInt xOuterStop = iReducedBlockSize.iWidth<<iReductionFactor;
+		TInt yOuterStop = iReducedBlockSize.iHeight<<iReductionFactor;
+
+		TInt outerStep = 1<<iReductionFactor;
+		TInt divisionFactor = 2*iReductionFactor;
+
+		TUint32* reducedPixelBuffer = iReducedPixelBuffer;
+
+		for (TInt yOuter = 0; yOuter < yOuterStop; yOuter += outerStep)
+			{
+			for (TInt xOuter = 0; xOuter < xOuterStop; xOuter += outerStep)
+				{
+				TUint32* gray256Buffer = &aGray256Buffer[yOuter * iOriginalBlockSize.iWidth + xOuter];
+				TInt level = 0;
+
+				for (TInt yInner = 0; yInner < outerStep; yInner++)
+					{
+					for (TInt xInner = 0; xInner < outerStep; xInner++)
+						level += gray256Buffer[xInner];
+
+					gray256Buffer += iOriginalBlockSize.iWidth;
+					}
+
+				level >>= divisionFactor;
+				*reducedPixelBuffer++ = level;
+				}
+			}
+
+		iImageProc->SetMonoPixelBlock(iReducedPixelBuffer);
+		}
+
+	iPos.iX += iOriginalBlockSize.iWidth;
+	if (iPos.iX >= iEndOfLineX)
+		{
+		iPos.iX = iStartPosition.iX;
+		iPos.iY += iYInc;
+		if(iPos.iY < iStartPosition.iY || iPos.iY >= iEndPosition.iY)
+			{
+			return ETrue;
+			}
+		}
+
+	return EFalse;
+
+	}
+
+TBool CMonochromeThumbnailProcessor::FlushPixels()
+	{
+	DoFlushPixels();
+	iImageProc->FlushPixels();
+
+	iPositionChanged = ETrue;
+
+		if(iPos.iY < iStartPosition.iY || iPos.iY >= iEndPosition.iY)
+			{
+			return ETrue;
+			}
+
+	return EFalse;
+	}
+
+void CMonochromeThumbnailProcessor::DoFlushPixels()
+	{
+	if(!iReducedSumBuffer)
+		return;
+
+	TMonochromeSum* reducedSumPtr = iReducedSumBuffer + iReducedImageRegion.iTl.iX;
+	TMonochromeSum* reducedSumPtrLimit = iReducedSumBuffer + iReducedImageRegion.iBr.iX;
+
+	while(reducedSumPtr < reducedSumPtrLimit)
+		{
+
+		while(reducedSumPtr->iCount==0)
+			{
+			reducedSumPtr++;
+			if(reducedSumPtr==reducedSumPtrLimit)
+				return;
+			}
+
+		if(iPositionChanged)
+			iImageProc->SetPos(TPoint(reducedSumPtr - iReducedSumBuffer,iPos.iY >> iReductionFactor));
+
+		TUint32* reducedPixelBufferPtr = iReducedPixelBuffer;
+		TInt fullCountFactor = 2*iReductionFactor;
+		TInt fullCount = 1<<fullCountFactor;
+
+		do
+			{
+			TInt level = reducedSumPtr->iLevel;
+			TInt count = reducedSumPtr->iCount;
+
+			if(count==fullCount)
+				level >>= fullCountFactor;
+			else if(count!=0)
+				level /= count;
+			else
+				break;
+
+			*reducedPixelBufferPtr++ = level;
+
+			reducedSumPtr++;
+			}
+		while(reducedSumPtr < reducedSumPtrLimit);
+
+		TInt numPixels = reducedPixelBufferPtr-iReducedPixelBuffer;
+		iImageProc->SetMonoPixels(iReducedPixelBuffer,numPixels);
+
+		Mem::FillZ(reducedSumPtr-numPixels,numPixels * sizeof(TMonochromeSum));
+		}
+
+	}
+
+TBool CMonochromeThumbnailProcessor::SetPos(const TPoint& aPosition)
+	{
+	if(iImageRegion.Contains(aPosition)==EFalse)
+		return EFalse;
+
+	if((aPosition.iY ^ iPos.iY) >> iReductionFactor)
+		DoFlushPixels();
+
+	iPositionChanged = ETrue;
+	iPos = aPosition;
+
+	return ETrue;
+	}
+
+void CMonochromeThumbnailProcessor::SetYPosIncrement(TInt aYInc)
+	{
+	iYInc = aYInc;
+
+	TInt reducedYInc = aYInc >> iReductionFactor;
+	if(reducedYInc==0)
+		reducedYInc = 1;
+
+	iImageProc->SetYPosIncrement(reducedYInc);
+	}
+
+void CMonochromeThumbnailProcessor::SetLineRepeat(TInt aLineRepeat)
+	{
+	TInt reducedLineRepeat = aLineRepeat >> iReductionFactor;
+	iImageProc->SetLineRepeat(reducedLineRepeat);
+	}
+
+void CMonochromeThumbnailProcessor::SetPixelPadding(TInt aNumberOfPixels)
+	{
+	iPixelPadding = aNumberOfPixels;
+	iEndOfLineX = iEndPosition.iX + iPixelPadding;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/group/ImageProcessorPerf.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* imageprocessorPerf.lib Performance-critical code of Image conversion library
+* It is just an "implementation" library of internal for ICL perofrmance-critical code.
+* Is not intended to be used outside the ICL except for testing purpose
+*
+*/
+
+
+
+TARGETTYPE	lib
+TARGET		imageprocessorperf.lib
+
+SOURCEPATH	../codecs
+SOURCE		ColorConverter.cpp
+SOURCE		ImageProcessor.cpp
+
+USERINCLUDE	../inc
+USERINCLUDE	../src
+SYSTEMINCLUDE	/epoc32/include
+SYSTEMINCLUDE	/epoc32/include/ecom
+
+ALWAYS_BUILD_AS_ARM
+
+OPTION ARMCC -Otime
+OPTION_REPLACE ARMCC -O2 -O3
+OPTION_REPLACE ARMCC --cpu 6
+OPTION_REPLACE ARMCC --export_all_vtbl
+
+OPTION ARMASM -Otime
+OPTION_REPLACE ARMASM -O2 -O3
+
+SMPSAFE
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/group/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+../inc/icl/imageprocessor.h	/epoc32/include/icl/imageprocessor.h
+../inc/icl/icl_uids.hrh		/epoc32/include/icl/icl_uids.hrh
+
+PRJ_MMPFILES
+../group/ImageProcessorPerf.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/inc/icl/icl_uids.hrh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,193 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+#ifndef ICL_UIDS_HRH
+#define ICL_UIDS_HRH
+
+
+#define KICLCodecDllUidValue	0x101F45AC
+
+#define KDecoderInterfaceUidValue	0x101F45AD
+#define KEncoderInterfaceUidValue	0x101F45B4
+
+#define KBMPCodecDllUidValue		0x101F45AE
+#define KBMPImageDataUidValue		0x101F45BF
+#define KBMPCompressionUidValue		0x101F45E3
+#define KBMPDecoderImplementationUidValue	0x101F45AF
+#define KBMPEncoderImplementationUidValue	0x101F45BE
+
+#define KJPGCodecDllUidValue		0x101F45D6
+#define KJPGImageDataUidValue		0x101F45DA
+#define KJPGQTableUidValue			0x101F45E1
+#define KJPGCommentUidValue			0x101F45E2
+#define KJPGDecoderImplementationUidValue	0x101F45D7
+#define KJPGEncoderImplementationUidValue	0x101F45D9
+
+#define KGIFCodecDllUidValue		0x101F45B1
+#define KGIFBackgroundColorUidValue 0x101F45DE
+#define KGIFImageDescriptorUidValue 0x101F45E4
+#define KGIFLZWInfoUidValue			0x101F45E5
+#define KGIFImageControlUidValue	0x101F45E6
+#define KGIFCommentUidValue			0x101F45E7
+#define KGIFDecoderImplementationUidValue	0x101F45B2
+#define KGIFEncoderImplementationUidValue	0x101F45DD
+
+#define KMBMCodecDllUidValue		0x101F45CA
+#define KMBMDecodeDataUidValue		0x101F45E0
+#define KMBMEncodeDataUidValue		0x101F45E9
+#define KMBMDecoderImplementationUidValue	0x101F45CB
+#define KMBMEncoderImplementationUidValue	0x101F45DF
+
+#define KTIFFCodecDllUidValue		0x101F45C0
+#define KTIFFImageDataUidValue		0x101F45E8
+#define KTIFFDecoderImplementationUidValue	0x101F45C1
+#define KTIFFDecoderLittleEndianImplementationUidValue	0x101F45C2
+#define KTIFFDecoderBigEndianImplementationUidValue	0x101F45C3
+
+#define KWMFCodecDllUidValue		0x101F45B5
+#define KWMFDecoderImplementationUidValue	0x101F45B6
+#define KWMFDecoderStdImplementationUidValue	0x101F45B7
+#define KWMFDecoderApmImplementationUidValue	0x101F45B8
+#define KWMFDecoderClpImplementationUidValue	0x101F45B9
+
+#define KPNGCodecDllUidValue		0x101F45C7
+#define KPNGDecoderImplementationUidValue	0x101F45C8
+#define KPNGEncoderImplementationUidValue	0x101F45FE
+
+#define KWBMPCodecDllUidValue		0x101F45CD
+#define KWBMPDecoderImplementationUidValue	0x101F45CE
+
+#define KOTACodecDllUidValue		0x101F45D0
+#define KOTADecoderImplementationUidValue	0x101F45D1
+
+#define KICOCodecDllUidValue		0x101F45D3
+#define KICODecoderImplementationUidValue	0x101F45D4
+
+#define KMngMimeTypeUidValue 0x101F7C53
+#define KMngImageDisplayPluginUidValue 0x101F7C52
+#define KMngDllUidValue 0x101F7C51
+
+/**
+@publishedAll
+@released
+Class UID for a set of decoders which support the Exchangeable Image File Format. 
+
+When loading plugins by class UID, the first valid plugin from the list 
+of available plugins with the specified class UID will be loaded. Loading 
+the plugin in this way always allow a cast to the derived decoder or 
+encoder class to be made. 
+@see CJPEGExifDecoder
+*/
+#define KUidICLJpegEXIFInterface 	0x101F7C4F
+
+#define KUidTransformJpegPluginUidValue		0x101F7C2F
+#define KUidTransformJpegExtension	0x101F7C30
+
+/**
+@publishedAll
+@released
+Image Transform Plugin Extension UID for Squeeze Transaformations
+*/
+#define KUidSqueezeTransformExtension	0x10285BD6
+
+/**
+@publishedAll
+@released
+Image Transform Plugin Extension UID for Orientation Transaformations
+*/
+#define KUidOrientationTransformExtension	0x10285C33 
+
+/**
+@publishedAll
+@released
+Image Transform Plugin Extension UID for Overlay Transaformations
+*/
+#define KUidOverlayTransformExtension	0x10285C34
+
+/**
+@publishedAll
+@released
+Class UID for the set of decoders which support operations through the CImageFrame. 
+
+When loading plugins by class UID, the first valid plugin from the list 
+of available plugins with the specified class UID will be loaded. Loading 
+the plugin in this way always allow a cast to the derived decoder or 
+encoder class to be made. 
+@see CJPEGImageFrameDecoder
+*/
+#define KUidICLJpegImageFrameInterface 	0x101F7C60
+
+#define KJPGDecoderImplementation2UidValue	0x101F7C61
+#define KJPGEncoderImplementation2UidValue	0x101F7C62
+
+#define KJPEGImageFramePluginDllUidValue	0x1027376E
+
+/**
+@publishedAll
+@released
+
+Extension interface uid for TImageConvOperation
+*/
+#define KUidImageConvExtOperationValue	0x102833DF
+
+/**
+@publishedAll
+@released
+
+Extension interface uid for TImageConvScaler
+*/
+#define KUidImageConvExtScalerValue		0x102833E0 	
+
+/**
+@publishedAll
+@released
+
+Extension interface uid for TImageConvStreamedDecode
+*/
+#define KUidImageConvExtStreamedDecodeValue	0x102833E1 	
+
+/**
+@publishedPartner
+@released
+
+Extension interface uid for TImageConvStreamedEncode
+*/
+#define KUidImageConvExtStreamedEncodeValue	0x102833E2 
+
+/**
+@publishedAll
+@released
+
+Extension interface uid for TImageConvPrepare
+*/
+#define KUidImageConvExtPrepareValue 0x1028346D 
+
+/**
+@publishedAll
+@released
+
+Uid that identifies encoders that maintain the alpha channel of the EColor16MA source CFbsBitmap.
+*/
+#define KUidAlphaChannelEncodeSupported 0x10285D1B
+
+#endif // ICL_UIDS_HRH
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/inc/icl/imageprocessor.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,530 @@
+/*
+* Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef ___IMAGEPROCESSOR_H__
+#define ___IMAGEPROCESSOR_H__
+
+#include <gdi.h>
+#include <fbs.h>
+
+/**
+@internalTechnology
+*/
+enum TImageBitmapUtilPanic
+	{
+	ECorrupt
+	};
+
+/**
+@publishedAll
+@released
+
+Interface to colour conversion classes for various display modes.
+Manages the mapping between RGB/Greyscale values and the index
+into the color palette for the given display mode.
+*/
+class TColorConvertor
+	{
+public:
+	IMPORT_C static	TColorConvertor* NewL(TDisplayMode aDisplayMode);
+
+	/**
+	Returns the colour index corresponding to the supplied RGB value.
+	Operates in the context of the current display mode.
+
+	This is a virtual function that each derived class must implement.
+
+	@param  aColor
+	        The colour in RGB format.
+	
+	@return The colour index.
+	*/
+	virtual TInt ColorIndex(TRgb aColor) const = 0;
+
+	/**
+	Returns the RGB value corresponding to the supplied colour index.
+	Operates in the context of the current display mode.
+
+	This is a virtual function that each derived class must implement.
+
+	@param  aColorIndex
+	        The colour in RGB format.
+
+	@return The RGB value.
+	*/
+	virtual TRgb Color(TInt aColorIndex) const = 0;
+
+	/**
+	Gets an array of colour indices from a corresponding array of RGB values.
+	Operates in the context of the current display mode.
+
+	This is a virtual function that each derived class must implement.
+
+	@param  aIndexBuffer
+	        A pointer to the first element in destination array.
+	@param  aColorBuffer
+	        A pointer to the first element in the source array.
+	@param  aCount
+	        The number of elements to get.
+	*/
+	virtual void ColorToIndex(TInt* aIndexBuffer,TRgb* aColorBuffer,TInt aCount) const = 0;
+
+	inline static TInt RgbToMonochrome(TRgb aRgb);
+	};
+
+
+/**
+@publishedAll
+@released
+
+Bitmap utility class.
+*/
+class TImageBitmapUtil
+	{
+public:
+	IMPORT_C TImageBitmapUtil();
+	IMPORT_C void Begin();
+	IMPORT_C TBool Begin(const TPoint& aPosition);
+	IMPORT_C void End();
+	IMPORT_C void SetBitmapL(CFbsBitmap* aBitmap);
+	IMPORT_C void SetPixel(TUint32 aPixelIndex);
+	IMPORT_C void SetPixels(TUint32* aPixelIndex,TInt aNumberOfPixels);
+	IMPORT_C TBool SetPos(const TPoint& aPosition);
+	
+private:
+	union TDataPointer
+		{
+		TUint32* iWordPos;
+		TUint8* iBytePos;
+		};
+private:
+	CFbsBitmap* iBitmap;
+	TSize iSize;
+	TPoint iPosition;
+	TDataPointer iData;
+	TDataPointer iBase;
+	TInt iBpp;
+	TInt iBppShift;
+	TInt iPixelShift;
+	TInt iPixelsPerWord;
+	TInt iBitShift;
+	TInt iScanlineWordLength;
+	TUint32 iMask;
+	TBool iWordAccess;
+	};
+
+
+class CImageProcessor;
+class CImageProcessorExtension;
+
+/**
+@publishedAll
+@released
+
+Utility class providing static factory functions for creating instances of
+CImageProcessor derived classes.
+*/
+class ImageProcessorUtility
+	{
+public:
+	IMPORT_C static TInt ReductionFactor(const TSize& aOriginalSize,const TSize& aReducedSize);
+	IMPORT_C static CImageProcessor* NewImageProcessorL(const CFbsBitmap& aBitmap,const TSize& aImageSize,TDisplayMode aImageDisplayMode, TBool aDisableErrorDiffusion);
+	IMPORT_C static CImageProcessor* NewImageProcessorL(const CFbsBitmap& aBitmap,TInt aReductionFactor,TDisplayMode aImageDisplayMode, TBool aDisableErrorDiffusion);
+	IMPORT_C static CImageProcessorExtension* ImageProcessorUtility::NewImageProcessorExtensionL(const CFbsBitmap& aBitmap,TInt aReductionFactor,TDisplayMode aImageDisplayMode, TBool aDisableErrorDiffusion);
+	
+private:
+	TBool static UseErrorDiffuser(const TDisplayMode& aBitmapDisplayMode, const TDisplayMode& aImageDisplayMode);
+	TBool static IsMonochrome(const TDisplayMode& aBitmapDisplayMode, const TDisplayMode& aImageDisplayMode);
+	};
+
+
+
+/**
+@publishedAll
+@released
+
+Interface to image processing classes used by CImageDecoder plugins. This is not a application client API.
+*/
+class CImageProcessor : public CBase
+	{
+public:
+	// Setup
+
+	/**
+	Initialises internal data structures prior to conversion.
+
+	This is a virtual function that each derived class must implement.
+
+	@param  aBitmap
+	        A reference to a fully constucted bitmap with the required
+	        display mode and size.
+	@param  aImageRect
+	        The region of the image to convert.
+	*/
+	virtual void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect) = 0;
+
+	/**
+	Initialises internal data structures prior to the manipulation of the specified pixel block.
+
+	This overloaded version allows specification of a block size
+	for those formats which support blocked pixel data eg. JPEG
+
+	This is a virtual function that each derived class must implement.
+
+	@param  aBitmap
+	        A reference to a fully constucted bitmap with the required
+	        display mode and size.
+	@param  aImageRect
+	        The region of the image to convert.
+	@param  aRgbBlockSize
+	        The size of the block to use.
+	*/
+	virtual void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize) = 0;
+
+	/**
+	Sets the number of pixels by which to increment the current position in
+	the Y-axis. This is used when rendering images supporting interlacing.
+	eg GIF
+
+	This is a virtual function that each derived class must implement.
+
+	@param  aYInc
+	        The number of pixels.
+	*/
+	virtual void SetYPosIncrement(TInt aYInc) = 0;
+
+	/**
+	Sets the number times the current line should be repeated. The lines
+	are repeated in the same direction as set by SetYPosIncrement(). This
+	is used to fill blank lines when rendering interlaced images. eg GIF.
+	@param aLineRepeat The number of times the current line should be repeated
+	*/
+	virtual void SetLineRepeat(TInt aLineRepeat) = 0;
+
+	/**
+	Sets the pixel padding to the value specified by aNumberOfPixels.
+
+	This is a virtual function that each derived class must implement.
+
+	@param  aNumberOfPixels
+	        The number of pixels to use for padding.
+	*/
+	virtual void SetPixelPadding(TInt aNumberOfPixels) = 0;
+
+	// Color pixel writing
+
+	/**
+	Sets the pixel at the current position to aColor.
+
+	This is a virtual function that each derived class must implement.
+	
+	@post    
+	The current position is updated.
+
+	@param  aColor
+	        The RGB value to set the current pixel to.
+
+	@return A boolean indicating if the operation was successful. ETrue if the operation succeeded, 
+            otherwise EFalse.
+    */
+	virtual TBool SetPixel(TRgb aColor) = 0;
+
+	/**
+	Sets aCount number of pixels to the value given by aColor, starting at
+	the current position.
+
+	This is a virtual function that each derived class must implement.
+
+	@post    
+	On success, the current position is updated.
+
+	@param  aColor
+	        The RGB value to set the pixels to.
+	@param  aCount
+	        The number of pixels to set.
+
+	@return A boolean indicating if the operation was successful. ETrue if the operation succeeded, 
+	        otherwise EFalse.
+	*/
+	virtual TBool SetPixelRun(TRgb aColor,TInt aCount) = 0;
+
+	/**
+	Updates the bitmap with colour information from the array of colour values.
+
+	Uses the array of colour values supplied by aColorBuffer, whose length
+	is specified by aBufferLength, to update successive pixels with values in the
+	buffer, starting at the current	position.
+
+	This is a virtual function that each derived class must implement.
+	
+	@post   
+	The current position is updated.
+
+	@param  aColorBuffer
+	        A pointer to the first element in the array.
+	@param  aBufferLength
+	        The number of elements in the array.
+
+	@return A boolean indicating if the operation was successful. ETrue if the operation succeeded, 
+	        otherwise EFalse.
+	*/
+	virtual TBool SetPixels(TRgb* aColorBuffer,TInt aBufferLength) = 0;
+
+    /**
+    Sets the current pixel block using the data supplied in aColorBuffer.
+
+	Note:
+	For use with image types that support blocking of pixels eg JPEG.
+
+	This is a virtual function that each derived class must implement.
+
+	@param  aColorBuffer
+	        A pointer to a buffer representing a block of pixel color values.
+
+	@return A boolean indicating if the operation was successful. ETrue if the operation succeeded, 
+	        otherwise EFalse.
+	*/
+	virtual TBool SetPixelBlock(TRgb* aColorBuffer) = 0;
+
+	// Monochrome pixel writing
+
+	/**
+	Sets the pixel at the current position to aGray256.
+
+	This is a virtual function that each derived class must implement.
+
+    @post   
+	The current position is updated.
+
+	@param  aGray256
+	        The greyscale value to set the current pixel to.
+
+	@return A boolean indicating if the operation was successful. ETrue if the operation succeeded, 
+	        otherwise EFalse.
+	*/
+	virtual TBool SetMonoPixel(TInt aGray256) = 0;
+
+	/**
+	Sets the number of pixels specified by aCount to the value given by aGray256, starting at
+	the current position.
+
+	This is a virtual function that each derived class must implement.
+	
+	@post   
+	The current position is updated.
+
+	@param  aGray256
+	        The greyscale value to set the pixels to.
+	@param  aCount
+	        The number of pixels to set.
+
+	@return A boolean indicating if the operation was successful. ETrue if the operation succeeded, 
+	        otherwise EFalse.
+	*/
+	virtual TBool SetMonoPixelRun(TInt aGray256,TInt aCount) = 0;
+
+	/**
+	Updates the bitmap with greyscale information from the array of greyscale values.
+
+	The array of values supplied by aGray256Buffer, whose length
+	is specified in aBufferLength, is used to update successive pixels with the
+	greyscales values.
+
+	This is a virtual function that each derived class must implement.
+
+	@post
+	The current position is updated.
+
+	@param  aGray256Buffer
+	        A pointer to the first element in the array of greyscale values.
+	@param  aBufferLength
+	        The number of elements in the array.
+
+	@return A boolean indicating if the operation was successful. ETrue if the operation succeeded, 
+	        otherwise EFalse.
+	*/
+	virtual TBool SetMonoPixels(TUint32* aGray256Buffer,TInt aBufferLength) = 0;
+
+    /**
+    Sets a specified number of pixels to the specified greyscale value.
+
+	For image types which support blocking of pixels eg JPEG, the current
+	pixel block is set using the data supplied in aGray256Buffer.
+
+	This is a virtual function that each derived class must implement.
+
+	@param  aGray256Buffer
+	        A pointer to a buffer representing a block of pixel color values.
+
+	@return A boolean indicating if the operation was successful. ETrue if the operation succeeded, 
+	        otherwise EFalse.
+	*/
+	virtual TBool SetMonoPixelBlock(TUint32* aGray256Buffer) = 0;
+
+	// Processor flow control
+
+	/**
+	Sets the current position in the bitmap to aPosition.
+
+	This is a virtual function that each derived class must implement.
+
+	@param  aPosition
+	        A reference to TPoint object defining the position to move to.
+
+	@return	A boolean indicating if the operation was successful. ETrue if the operation succeeded, 
+	        otherwise EFalse.
+	*/
+	virtual TBool SetPos(const TPoint& aPosition) = 0;
+
+	/**
+	Commits the changes made to the current bitmap by flushing the buffer.
+
+	This is a virtual function that each derived class must implement.
+
+	@post
+	The current position is updated.
+
+	@return	A boolean indicating if the operation was successful. ETrue if the operation succeeded, 
+	        otherwise EFalse.
+    */
+	virtual TBool FlushPixels() = 0;
+	
+private:
+	// Future proofing
+	IMPORT_C virtual void ReservedVirtual1();
+	IMPORT_C virtual void ReservedVirtual2();
+	IMPORT_C virtual void ReservedVirtual3();
+	IMPORT_C virtual void ReservedVirtual4();
+	};
+
+/**
+@publishedAll
+@released
+
+Flag used to determine the type of transformation which is the result of 
+single or multiple transformation operations requested via calls to
+COperationExtension::AddOperationL.
+
+8 unique orientations:
+
+@code
+normal  90      180     270
+00 10   01 00   11 01   10 11
+01 11   11 10   10 00   00 01
+
+V flip  90      180     270
+10 00   11 10   =Hflip  =Hflip+90
+11 01   01 00
+
+H flip  90      180     270
+01 11   00 01   =Vflip  =Vflip+90
+00 10   10 11
+@endcode
+
+@see COperationExtension::AddOperationL
+*/
+enum TTransformOptions
+	{
+	/** Normal Decode
+	*/
+	EDecodeNormal = 0x11011000,
+
+	/** Rotate 90 degrees.
+	*/
+	EDecodeRotate90	= 0x10110001,
+
+	/** Rotate 180 degrees.
+	*/
+	EDecodeRotate180 = 0x00100111,
+
+	/** Rotate 270 degrees.
+	*/
+	EDecodeRotate270 = 0x01001110,
+	
+	/** Horizontal flip.
+	*/
+	EDecodeHorizontalFlip = 0x10001101,
+	
+	/** Horizontal flip and rotate 90 degrees.
+	*/
+	EDecodeHorizontalFlipRotate90 = 0x11100100,
+
+	/** Vertical flip.
+	*/
+	EDecodeVerticalFlip	= 0x01110010,
+
+	/** Vertical flip and rotate 90 degrees.
+	*/
+	EDecodeVerticalFlipRotate90 = 0x00011011
+	};
+
+
+/**
+@publishedAll
+@released
+
+Class that provides support for Framework Extensions.
+
+@see CImageProcessor
+@see CImageReadCodec
+@see CImageDecoderPlugin
+*/
+class CImageProcessorExtension : public CImageProcessor
+	{
+public:
+	IMPORT_C virtual ~CImageProcessorExtension();
+	IMPORT_C void SetClippingRect(const TRect& aRect);
+	IMPORT_C void SetScaling(TInt aScalingCoeff);
+	IMPORT_C void SetScaling(const TSize& aDesiredSize);
+	IMPORT_C void SetOperation(TTransformOptions aOperation);
+	IMPORT_C void SetInitialScanlineSkipPadding(TInt aNumberOfScanlines);
+
+protected:
+	IMPORT_C CImageProcessorExtension();
+
+protected:
+	/** Clipping rectangle */
+	TRect iClippingRect;
+	/** Scaling coefficient */
+	TInt iScalingCoeff;
+	/** Desired size after scaling */
+	TSize iDesiredSize;
+	/** Operations to apply to image */
+	TTransformOptions iOperation;
+	/** Position in destination at which start rendering */
+	TPoint iStartPosition;
+	/** Position in destination at which rendering is complete */
+	TPoint iEndPosition;
+	/** An initial one-off number of scanlines to be skipped */
+	TInt iNumberOfScanlinesToSkip;
+	};
+   
+inline TInt TColorConvertor::RgbToMonochrome(TRgb aRgb)
+	{
+	TInt value = aRgb.Internal();
+	TInt r = value&0xFF0000;
+	TInt g = value&0xFF00;
+	value  = (value&0xFF)<<16;	// blue<<16
+	value += r<<1;     		// + (red<<16)*2
+	value += g<<(16+2-8);	// + (green<<16)*4
+	value += g<<(16+0-8);	// + (green<<16)
+	return value>>(16+3);	// total/8
+	}
+
+#endif //___IMAGEPROCESSOR_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/src/ImageClientMain.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef __IMAGECLIENTMAIN_H__
+#define __IMAGECLIENTMAIN_H__
+
+#include <e32std.h>
+
+enum TIclPanic
+	{
+	ENoSourceBitmap = 0,
+	ENoDestinationBitmap = 1,
+	EResetDestinationBitmap = 2,
+	EConvertCalledWhileBusy = 3,
+	EIllegalContinueConvert = 4,
+	EDifferentDestinationBitmap = 5,
+	EDifferentDestinationMask = 6,
+	EModifiedDestination = 7,
+	EBitmapHasZeroDimension = 8,
+	ENoBitmapMask = 9,
+	EFrameNumberOutOfRange = 10,
+	EUndefinedSourceType = 11,
+	ECommentsNotSupported = 12,
+	EHeaderProcessingNotComplete = 13,
+	ECommentNumberOutOfRange = 14,
+	EBadDisplayMode = 15,
+	EUnknownHeaderState = 16,
+	ENonNullDescriptorPassed = 17,
+	EUndefinedMIMEType = 18,
+	EIllegalImageSubType = 19,
+	EIllegalImageType = 20,
+	EIllegalEncoderRestart = 21,
+	EChangeOptionWhileDecoding = 22,
+	EDecoderNotCreated = 23,
+	EFeatureNotYetImplemented = 24,
+	ERelaySubThreadPanicTimedOut = 25,
+	EInvalidThreadState = 26,
+	EInvalidFunctionLeave = 27,
+	EInvalidState = 28,
+	EDriveNotSupported = 29,
+	EReservedCall = 30,
+	EInvalidIndex = 31,
+	EInvalidValue = 32,
+#if defined(SYMBIAN_ENABLE_ENCODER_ASYNC_WRITES)
+	EBufPoolNoMoreBuffers = 33,
+	EBufPoolInvalidBuffer = 34,
+	EAsyncWrtrQOverflow = 35,
+#endif
+	ENullImageConvExtension = 36,
+	ENonNullImageConvExtension = 37,
+	EInvalidFwExtensionCall = 38,
+	EExtensionAlreadySet = 39,
+	EInvalidFwExtensionUid = 40,
+	EFwExtensionBusy = 41
+	};
+
+GLDEF_C void Panic(TIclPanic aError);
+
+#endif // __IMAGECLIENTMAIN_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/src/ImageProcessorPriv.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,378 @@
+/*
+* Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef ___IMAGEPROCESSORPRIV_H__
+#define ___IMAGEPROCESSORPRIV_H__
+
+#include <icl/imageprocessor.h>
+#include "fwextconstants.h"
+
+//The size of the index lookup table
+const TInt KIndexLookupSize = 256;
+
+class CColorImageProcessor; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CImageProcessor.
+ *
+ */
+NONSHARABLE_CLASS( CColorImageProcessor ): public CImageProcessorExtension
+	{
+public:
+	virtual ~CColorImageProcessor();
+	// From CImageProcessor (Default implementations)
+	TBool SetPixelRun(TRgb aColor,TInt aCount);
+	TBool SetPixels(TRgb* aColorBuffer,TInt aBufferLength);
+	TBool SetMonoPixel(TInt aGray256);
+	TBool SetMonoPixelRun(TInt aGray256,TInt aCount);
+	TBool SetMonoPixels(TUint32* aGray256Buffer,TInt aBufferLength);
+	TBool SetMonoPixelBlock(TUint32* aGray256Buffer);
+protected:
+	// New - to facilitate default implementation of SetMonoPixelBlock()
+	void CreateBlockBufferL(TInt aBlockArea);
+protected:
+	// Used by default implementation of SetMonoPixelBlock()
+	TRgb*	iBlockBuffer;
+	TInt	iBlockArea;
+	};
+
+class CMonochromeImageProcessor; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CImageProcessor.
+ *
+ */
+NONSHARABLE_CLASS( CMonochromeImageProcessor ): public CImageProcessorExtension
+	{
+public:
+	virtual ~CMonochromeImageProcessor();
+	// From CImageProcessor (Default implementations)
+	TBool SetPixel(TRgb aColor);
+	TBool SetPixelRun(TRgb aColor,TInt aCount);
+	TBool SetPixels(TRgb* aColorBuffer,TInt aBufferLength);
+	TBool SetPixelBlock(TRgb* aColorBuffer);
+	TBool SetMonoPixelRun(TInt aGray256,TInt aCount);
+	TBool SetMonoPixels(TUint32* aGray256Buffer,TInt aBufferLength);
+protected:
+	// New - to facilitate default implementation of SetPixelBlock()
+	void CreateBlockBufferL(TInt aBlockArea);
+protected:
+	// Used by default implementation of SetPixelBlock()
+	TUint32* iBlockBuffer;
+	TInt	 iBlockArea;
+	};
+
+class CPixelWriter; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CColorImageProcessor.
+ *
+ */
+NONSHARABLE_CLASS( CPixelWriter ): public CColorImageProcessor
+	{
+public:
+	static CPixelWriter* NewL();
+	virtual ~CPixelWriter();
+	// From CImageProcessor
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect);
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize);
+	void SetYPosIncrement(TInt aYInc);
+	void SetLineRepeat(TInt aLineRepeat);
+	void SetPixelPadding(TInt aNumberOfPixels);
+	TBool SetPixel(TRgb aColor);
+	TBool SetPixelRun(TRgb aColor,TInt aCount);
+	TBool SetPixels(TRgb* aColorBuffer, TInt aBufferLength);
+	TBool SetPixelBlock(TRgb* aColorBuffer);
+	TBool SetPos(const TPoint& aPosition);
+	TBool FlushPixels();
+protected:
+	// New
+	CPixelWriter();
+	virtual void Reset();
+	virtual void DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize);
+	virtual void SetPixelBufferIndex(TRgb* aColorBuffer,TInt aCount);	//Used by FlushPixels to convert buffered 'SetPixel's
+	virtual void SetPixelBlockIndex(TRgb* aColorBuffer);	//Used by SetPixelBlock
+	virtual TBool NewLine();
+protected:
+	TInt iYInc;
+	TInt iLineRepeat;
+	TInt iPixelPadding;
+	TInt iPixelsToSkip;
+	TPoint iPos;
+	TRect iImageRegion;
+	TSize iBlockSize;
+	TInt iBlockArea;
+	TImageBitmapUtil iUtil;
+	TColorConvertor* iColorConv;
+	TRgb* iRgbBuffer;
+	TRgb* iRgbBufferPtr;
+	TRgb* iRgbBufferPtrLimit;
+	TUint32* iIndexBuffer;
+	TUint32* iIndexBufferPtrLimit;
+	TDisplayMode iDisplayMode;
+	TBool iDrawBottomUp;
+	};
+
+class CMonochromePixelWriter; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CMonochromeImageProcessor.
+ *
+ */
+NONSHARABLE_CLASS( CMonochromePixelWriter ): public CMonochromeImageProcessor
+	{
+public:
+	static CMonochromePixelWriter* NewL();
+	virtual ~CMonochromePixelWriter();
+	// From CImageProcessor
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect);
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize);
+	void SetYPosIncrement(TInt aYInc);
+	void SetLineRepeat(TInt aLineRepeat);
+	void SetPixelPadding(TInt aNumberOfPixels);
+	TBool SetMonoPixel(TInt aGray256);
+	TBool SetMonoPixelRun(TInt aGray256,TInt aCount);
+	TBool SetMonoPixels(TUint32* aGray256Buffer,TInt aBufferLength);
+	TBool SetMonoPixelBlock(TUint32* aGray256Buffer);
+	TBool SetPos(const TPoint& aPosition);
+	TBool FlushPixels();
+protected:
+	// New
+	CMonochromePixelWriter();
+	virtual void Reset();
+	virtual void DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize);
+	virtual void SetPixelBufferIndex(TUint32* aGray256Buffer,TInt aCount);	//Used by FlushPixels to convert buffered 'SetPixel's
+	virtual void SetPixelBlockIndex(TUint32* aGray256Buffer);	//Used by SetPixelBlock
+	virtual TBool NewLine();
+protected:
+	TInt iYInc;
+	TInt iLineRepeat;
+	TInt iPixelPadding;
+	TInt iPixelsToSkip;
+	TPoint iPos;
+	TRect iImageRegion;
+	TSize iBlockSize;
+	TInt iBlockArea;
+	TImageBitmapUtil iUtil;
+	TColorConvertor* iColorConv;
+	TUint32* iGray256Buffer;
+	TUint32* iGray256BufferPtr;
+	TUint32* iGray256BufferPtrLimit;
+	TUint32* iIndexBuffer;
+	TUint32* iIndexBufferPtrLimit;
+	TUint32 iIndexLookup[KIndexLookupSize];
+	TBool iDrawBottomUp;
+	};
+
+class CErrorDiffuser; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CPixelWriter.
+ *
+ */
+NONSHARABLE_CLASS( CErrorDiffuser ): public CPixelWriter
+	{
+public:
+	IMPORT_C static CErrorDiffuser* NewL();
+	virtual ~CErrorDiffuser();
+protected:
+	CErrorDiffuser();
+private:
+	class TColorError
+		{
+	public:
+		inline void AdjustColor(TRgb& aColor) const;
+	public:
+		inline TColorError();
+		inline TColorError(TInt aRedError,TInt aGreenError,TInt aBlueError);
+		inline void SetError(TRgb aIdealColor,TRgb aActualColor);
+		inline TColorError operator+(const TColorError& aColorError) const;
+		inline TColorError operator-(const TColorError& aColorError) const;
+		inline TColorError operator<<(TInt aShift) const;
+		inline TColorError& operator+=(const TColorError& aColorError);
+	public:
+		TInt iRedError;
+		TInt iGreenError;
+		TInt iBlueError;
+		};
+private:
+	// From CPixelWriter
+	void Reset();
+	void DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize);
+	void SetPixelBufferIndex(TRgb* aColorBuffer,TInt aCount);
+	void SetPixelBlockIndex(TRgb* aColorBuffer);
+	void SetPixelBufferColor64KIndex(TRgb* aColorBuffer,TInt aCount);
+	// optimized version of ClampColorComponent
+	inline TInt ClipColorComponent(TInt value);
+	
+private:
+	TColorError* iScanlineErrorBuffer;
+	TColorError* iEdgeErrorBuffer;
+	TColorError iNextError;
+	TPoint iLastPos;
+	// for fast 64K mode
+	TInt8* iRedErrorLookupTable;
+	TInt8* iGreenErrorLookupTable;
+	TInt iNextRedError;
+	TInt iNextGreenError;
+	TInt iNextBlueError;
+	};
+
+class CMonochromeErrorDiffuser; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CMonochromePixelWriter.
+ *
+ */
+NONSHARABLE_CLASS( CMonochromeErrorDiffuser ): public CMonochromePixelWriter
+	{
+public:
+	static CMonochromeErrorDiffuser* NewL();
+	virtual ~CMonochromeErrorDiffuser();
+protected:
+	CMonochromeErrorDiffuser();
+private:
+	// From CMonochromePixelWriter
+	void Reset();
+	void DoPrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize* aBlockSize);
+	void SetPixelBufferIndex(TUint32* aGray256Buffer,TInt aCount);
+	void SetPixelBlockIndex(TUint32* aGray256Buffer);
+private:
+	TInt* iScanlineErrorBuffer;
+	TInt* iEdgeErrorBuffer;
+	TInt iNextError;
+	TPoint iLastPos;
+	};
+
+class CThumbnailProcessor; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CColorImageProcessor.
+ *
+ */
+NONSHARABLE_CLASS( CThumbnailProcessor ): public CColorImageProcessor
+	{
+public:
+	static CThumbnailProcessor* NewL(CImageProcessorExtension* aImageProc,TInt aReductionFactor);
+	virtual ~CThumbnailProcessor();
+	// From CImageProcessor
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect);
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize);
+	void SetYPosIncrement(TInt aYInc);
+	void SetLineRepeat(TInt aLineRepeat);
+	void SetPixelPadding(TInt aNumberOfPixels);
+	TBool SetPixel(TRgb aColor);
+	TBool SetPixelBlock(TRgb* aColorBuffer);
+	TBool SetPos(const TPoint& aPosition);
+	TBool FlushPixels();
+private:
+	// New
+	CThumbnailProcessor(CImageProcessorExtension* aImageProc,TInt aReductionFactor);
+	void PrepareCommonL(const TRect& aImageRect);
+	void DoFlushPixels();
+	TBool NewLine();
+private:
+	class TColorSum
+		{
+	public:
+		TInt iRed;
+		TInt iGreen;
+		TInt iBlue;
+		TInt iCount;
+		};
+private:
+	CImageProcessorExtension* iImageProc;
+	TPoint iPos;
+	TBool iPositionChanged;
+	TInt iPixelPadding;
+	TInt iEndOfLineX;
+	TInt iYInc;
+	TRect iImageRegion;
+	TSize iOriginalBlockSize;
+	TInt iReductionFactor;
+	TRect iReducedImageRegion;
+	TSize iReducedBlockSize;
+	TRgb* iReducedPixelBuffer;
+	TColorSum* iReducedSumBuffer;
+	TBool iDrawBottomUp;
+	};
+
+class CMonochromeThumbnailProcessor; // declared here
+/**
+ * @internalComponent
+ *
+ * @see CMonochromeImageProcessor.
+ *
+ */
+NONSHARABLE_CLASS( CMonochromeThumbnailProcessor ): public CMonochromeImageProcessor
+	{
+public:
+	static CMonochromeThumbnailProcessor* NewL(CImageProcessorExtension* aImageProc,TInt aReductionFactor);
+	virtual ~CMonochromeThumbnailProcessor();
+	// From CImageProcessor
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect);
+	void PrepareL(CFbsBitmap& aBitmap,const TRect& aImageRect,const TSize& aRgbBlockSize);
+	void SetYPosIncrement(TInt aYInc);
+	void SetLineRepeat(TInt aLineRepeat);
+	void SetPixelPadding(TInt aNumberOfPixels);
+	TBool SetMonoPixel(TInt aGray256);
+	TBool SetMonoPixelRun(TInt aGray256,TInt aCount);
+	TBool SetMonoPixelBlock(TUint32* aGray256Buffer);
+	TBool SetPos(const TPoint& aPosition);
+	TBool FlushPixels();
+private:
+	// New
+	CMonochromeThumbnailProcessor(CImageProcessorExtension* aImageProc,TInt aReductionFactor);
+	void PrepareCommonL(const TRect& aImageRect);
+	void DoFlushPixels();
+	TBool NewLine();
+private:
+	class TMonochromeSum
+		{
+	public:
+		TInt iLevel;
+		TInt iCount;
+		};
+private:
+	CImageProcessorExtension* iImageProc;
+	TPoint iPos;
+	TBool iPositionChanged;
+	TInt iPixelPadding;
+	TInt iEndOfLineX;
+	TInt iYInc;
+	TRect iImageRegion;
+	TSize iOriginalBlockSize;
+	TInt iReductionFactor;
+	TRect iReducedImageRegion;
+	TSize iReducedBlockSize;
+	TUint32* iReducedPixelBuffer;
+	TMonochromeSum* iReducedSumBuffer;
+	TBool iDrawBottomUp;
+	};
+
+#endif // ___IMAGEPROCESSORPRIV_H__
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/src/ImageUtils.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,362 @@
+/*
+* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef __ImageUtils_h
+#define __ImageUtils_h
+
+/*Template class CleanupResetAndDestroy
+ *
+ * Shamelessly copied from CleanupClose to clean up
+ * the array of implementation information from the cleanup stack.
+ */
+
+template <class T>
+class CleanupResetAndDestroy
+	{
+public:
+	inline static void PushL(T& aRef);
+private:
+	static void ResetAndDestroy(TAny *aPtr);
+	};
+template <class T>
+inline void CleanupResetAndDestroyPushL(T& aRef);
+
+
+template <class T>
+inline void CleanupResetAndDestroy<T>::PushL(T& aRef)
+	{CleanupStack::PushL(TCleanupItem(&ResetAndDestroy,&aRef));}
+template <class T>
+void CleanupResetAndDestroy<T>::ResetAndDestroy(TAny *aPtr)
+	{(STATIC_CAST(T*,aPtr))->ResetAndDestroy();}
+template <class T>
+inline void CleanupResetAndDestroyPushL(T& aRef)
+	{CleanupResetAndDestroy<T>::PushL(aRef);}
+
+//
+// PtrReadUtil - utility class with methods for standard 
+//            reading stuff from a TUint8* string
+//
+
+class PtrReadUtil
+	{
+public:
+	// This calls decode from TUint8*
+	static TInt8 ReadInt8(const TUint8* aPtr);
+	static TUint8 ReadUint8(const TUint8* aPtr);
+	static TInt16 ReadInt16(const TUint8* aPtr);
+	static TInt16 ReadBigEndianInt16(const TUint8* aPtr);
+	static TUint16 ReadUint16(const TUint8* aPtr);
+	static TUint16 ReadBigEndianUint16(const TUint8* aPtr);
+	static TInt32 ReadInt32(const TUint8* aPtr);
+	static TInt32 ReadBigEndianInt32(const TUint8* aPtr);
+	static TUint32 ReadUint32(const TUint8* aPtr);
+	static TUint32 ReadBigEndianUint32(const TUint8* aPtr);
+	// these calls also increment the pointer
+	static TInt8 ReadInt8Inc(const TUint8*& aPtr);
+	static TUint8 ReadUint8Inc(const TUint8*& aPtr);
+	static TInt16 ReadInt16Inc(const TUint8*& aPtr);
+	static TInt16 ReadBigEndianInt16Inc(const TUint8*& aPtr);
+	static TUint16 ReadUint16Inc(const TUint8*& aPtr);
+	static TUint16 ReadBigEndianUint16Inc(const TUint8*& aPtr);
+	static TInt32 ReadInt32Inc(const TUint8*& aPtr);
+	static TInt32 ReadBigEndianInt32Inc(const TUint8*& aPtr);
+	static TUint32 ReadUint32Inc(const TUint8*& aPtr);
+	static TUint32 ReadBigEndianUint32Inc(const TUint8*& aPtr);
+	};
+
+inline TUint8 PtrReadUtil::ReadUint8(const TUint8* aPtr)
+	{
+	return *aPtr ;
+	}
+
+inline TInt8 PtrReadUtil::ReadInt8(const TUint8* aPtr)
+	{
+	return TInt8(ReadUint8(aPtr));
+	}
+
+inline TUint16 PtrReadUtil::ReadUint16(const TUint8* aPtr)
+	{
+	return TUint16(aPtr[0] | (aPtr[1]<<8));
+	}
+
+inline TInt16 PtrReadUtil::ReadInt16(const TUint8* aPtr)
+	{
+	return TInt16(ReadUint16(aPtr));
+	}
+
+inline TUint32 PtrReadUtil::ReadUint32(const TUint8* aPtr)
+	{
+	return TUint32(aPtr[0] | (aPtr[1]<<8) | (aPtr[2]<<16) | (aPtr[3]<<24));
+	}
+
+inline TInt32 PtrReadUtil::ReadInt32(const TUint8* aPtr)
+	{
+	return TInt32(ReadUint32(aPtr));
+	}
+
+inline TUint16 PtrReadUtil::ReadBigEndianUint16(const TUint8* aPtr)
+	{
+	return TUint16((aPtr[0]<<8) | aPtr[1]);
+	}
+
+inline TInt16 PtrReadUtil::ReadBigEndianInt16(const TUint8* aPtr)
+	{
+	return TInt16(ReadBigEndianUint16(aPtr));
+	}
+
+inline TUint32 PtrReadUtil::ReadBigEndianUint32(const TUint8* aPtr)
+	{
+	return TUint32((aPtr[0]<<24) | (aPtr[1]<<16) | (aPtr[2]<<8) | aPtr[3]);
+	}
+
+inline TInt32 PtrReadUtil::ReadBigEndianInt32(const TUint8* aPtr)
+	{
+	return TInt32(ReadBigEndianInt32(aPtr));
+	}
+
+inline TInt8 PtrReadUtil::ReadInt8Inc(const TUint8*& aPtr)
+	{
+	TInt8 result = ReadInt8(aPtr);
+	aPtr += 1;
+	return result;
+	}
+
+inline TUint8 PtrReadUtil::ReadUint8Inc(const TUint8*& aPtr)
+	{
+	TUint8 result = ReadUint8(aPtr);
+	aPtr += 1;
+	return result;
+	}
+
+inline TInt16 PtrReadUtil::ReadInt16Inc(const TUint8*& aPtr)
+	{
+	TInt16 result = ReadInt16(aPtr);
+	aPtr += 2;
+	return result;
+	}
+
+inline TUint16 PtrReadUtil::ReadUint16Inc(const TUint8*& aPtr)
+	{
+	TUint16 result = ReadUint16(aPtr);
+	aPtr += 2;
+	return result;
+	}
+
+inline TInt16 PtrReadUtil::ReadBigEndianInt16Inc(const TUint8*& aPtr)
+	{
+	TInt16 result = ReadBigEndianInt16(aPtr);
+	aPtr += 2;
+	return result;
+	}
+
+inline TUint16 PtrReadUtil::ReadBigEndianUint16Inc(const TUint8*& aPtr)
+	{
+	TUint16 result = ReadBigEndianUint16(aPtr);
+	aPtr += 2;
+	return result;
+	}
+
+inline TInt32 PtrReadUtil::ReadInt32Inc(const TUint8*& aPtr)
+	{
+	TInt32 result = ReadInt32(aPtr);
+	aPtr += 4;
+	return result;
+	}
+
+inline TUint32 PtrReadUtil::ReadUint32Inc(const TUint8*& aPtr)
+	{
+	TUint32 result = ReadUint32(aPtr);
+	aPtr += 4;
+	return result;
+	}
+
+inline TInt32 PtrReadUtil::ReadBigEndianInt32Inc(const TUint8*& aPtr)
+	{
+	TInt32 result = ReadBigEndianInt32(aPtr);
+	aPtr += 4;
+	return result;
+	}
+
+inline TUint32 PtrReadUtil::ReadBigEndianUint32Inc(const TUint8*& aPtr)
+	{
+	TUint32 result = ReadBigEndianUint32(aPtr);
+	aPtr += 4;
+	return result;
+	}
+
+class PtrWriteUtil
+	{
+public:
+	static void WriteInt8(TUint8* aPtr, TInt aData);
+	static void WriteInt16(TUint8* aPtr, TInt aData);
+	static void WriteInt32(TUint8* aPtr, TInt aData);
+	// Big endian version
+	static void WriteBigEndianInt32(TUint8* aPtr, TInt32 aData);
+	static void WriteBigEndianInt16(TUint8* aPtr, TInt aData);
+	};
+
+inline void PtrWriteUtil::WriteInt8(TUint8* aPtr, TInt aData)
+	{
+	aPtr[0] = TUint8(aData);
+	}
+
+inline void PtrWriteUtil::WriteInt16(TUint8* aPtr, TInt aData)
+	{
+	aPtr[0] = TUint8(aData);
+	aPtr[1] = TUint8(aData>>8);
+	}
+
+inline void PtrWriteUtil::WriteInt32(TUint8* aPtr, TInt aData)
+	{
+	aPtr[0] = TUint8(aData);
+	aPtr[1] = TUint8(aData>>8);
+	aPtr[2] = TUint8(aData>>16);
+	aPtr[3] = TUint8(aData>>24);
+	}
+
+inline void PtrWriteUtil::WriteBigEndianInt32(TUint8* aPtr, TInt32 aData)
+	{
+	aPtr[0] = TUint8(aData>>24);
+	aPtr[1] = TUint8(aData>>16);
+	aPtr[2] = TUint8(aData>>8);
+	aPtr[3] = TUint8(aData);
+	}
+
+inline void PtrWriteUtil::WriteBigEndianInt16(TUint8* aPtr, TInt aData)
+	{
+	aPtr[0] = TUint8(aData>>8);
+	aPtr[1] = TUint8(aData);
+	}
+
+class ColorCcomponent
+	{
+public:
+	static TInt ClampColorComponent(TInt value);
+	};
+
+inline TInt ColorCcomponent::ClampColorComponent(TInt value)
+	{
+	return (value < 0) ? 0 : (value > 255) ? 255 : value;
+	}
+
+
+//
+// The following routines have been copied from Graphics subsystem.
+// They deal with alpha to premultiplied alpha and viceversa conversions.
+// The original files are: blendingalgorithms.h and blendingalgorithms.inl
+//
+
+const TUint32 KRBMask = 0x00ff00ff;
+const TUint32 KAGMask = 0xff00ff00;
+const TUint32 KGMask  = 0x0000ff00;
+const TUint32 KAMask  = 0xff000000;
+const TUint32 KRBBias = 0x00800080;
+const TUint32 KGBias  = 0x00008000;
+
+
+/**
+Premultiplies the color channel values with the Alpha channel value.
+Alpha value remains unchanged. An approximation is used in the operation where the division
+by 255 is approximated by a shift-by-8-bits operation (i.e. division by 256).
+@param	aPixel	The 32 bit pixel value to be pre-multiplied.
+@return	The PMA value.
+@internalTechnology
+@released
+*/
+inline TUint32 NonPMA2PMAPixel(TUint32 aPixel)
+	{
+	TUint8 tA = (TUint8)(aPixel >> 24);
+	if (tA==0)
+		{ 
+		return 0;
+		}
+	if (tA==0xff) 
+		{
+		return aPixel;
+		}
+
+	// Use a bias value of 128 rather than 255, but also add 1/256 of the numerator 
+	// before dividing the sum by 256.
+
+	TUint32 scaledRB = (aPixel & KRBMask) * tA + KRBBias;
+	scaledRB = (scaledRB + ( (scaledRB >> 8) & KRBMask) ) >> 8;
+	TUint32 scaledG = (aPixel & KGMask ) * tA + KGBias;
+	scaledG = (scaledG + (scaledG >> 8)) >> 8;
+	
+	return (aPixel & KAMask) | (scaledRB & KRBMask) | (scaledG & KGMask);
+	}
+
+
+/**
+Divives the PMA pixel color channels with the Alpha value, to convert them to non-PMA format.
+Alpha value remains unchanged.
+@param	aPixel	the premultiplied 32 bit pixel value.
+@param	aNormTable	The lookup table used to do the normalisation (the table converts the division
+					to multiplication operation).
+					The table is usually obtainable by a call to the method:
+					PtrTo16BitNormalisationTable, which is defined in lookuptable.dll(.lib).
+					The lookup table for normalised alpha is compluted using this equation: 
+					Table[index] = (255*256) / index (where index is an 8 bit value).
+@return The NON-PMA 32 bit pixel value.
+@internalTechnology
+@released
+*/
+inline TUint32 PMA2NonPMAPixel(TUint32 aPixel, const TUint16* aNormTable)
+	{
+	TUint8 alpha = (TUint8)(aPixel >> 24);
+	if (alpha==0)
+		{ 
+		return 0;
+		}
+	if (alpha==0xff) 
+		{
+		return aPixel;
+		}
+	TUint16 norm = aNormTable[alpha];
+	TUint32 norm_rb = (((aPixel & KRBMask) * norm) >> 8) & KRBMask;
+	TUint32 norm_g =  (((aPixel & KGMask ) * norm) >> 8) & KGMask;
+	
+	return ((aPixel & KAMask) | norm_rb | norm_g);
+	}
+
+
+/**
+In-place version of NonPMA2PMAPixel.
+@see NonPMA2PMAPixel
+@internalTechnology
+@released
+*/
+inline void Convert2PMA(TUint32& aInOutValue)
+	{
+	aInOutValue = NonPMA2PMAPixel(aInOutValue);
+	}
+
+
+/**
+In-place version of PMA2NonPMAPixel
+@see PMA2NonPMAPixel
+@internalTechnology
+@released
+*/
+inline void Convert2NonPMA(TUint32& aInOutValue, const TUint16* aNormTable)
+	{
+	aInOutValue = PMA2NonPMAPixel(aInOutValue, aNormTable);
+	}
+
+
+#endif  // __ImageUtils_h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp2/src/fwextconstants.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+/**
+ @file
+ @internalTechnology
+*/
+
+#ifndef FWEXTCONSTANTS_H
+#define FWEXTCONSTANTS_H
+
+#include <icl/icl_uids.hrh>
+
+const TUid KICLOperationUid 		= {KUidImageConvExtOperationValue};
+const TUid KICLScalerUid 			= {KUidImageConvExtScalerValue};
+const TUid KICLStreamedDecodeUid 	= {KUidImageConvExtStreamedDecodeValue};
+const TUid KICLStreamedEncodeUid 	= {KUidImageConvExtStreamedEncodeValue};
+const TUid KICLPrepareUid 			= {KUidImageConvExtPrepareValue};
+
+#endif // FWEXTCONSTANTS_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+#ifdef WINSCW
+t_oom.mmp
+#else
+tbm.mmp
+t_oom.mmp
+dfpaeabi_vfpv2
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/dfpaeabi.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+/*
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This function is simple a way to get these EXPORT statements into
+* the .in file. These symbols will therefore be referenced from
+* the export table and so **forced** into the DLL
+*
+*/
+
+
+__asm void __rt_exporter_dummy(void)
+{
+	AREA |.directive|, READONLY, NOALLOC
+
+	PRESERVE8
+
+	DCB "#<SYMEDIT>#\n"
+
+/// Standard double precision floating-point arithmetic helper functions
+
+	DCB "EXPORT __aeabi_dadd\n"
+	DCB "EXPORT __aeabi_ddiv\n"
+	DCB "EXPORT __aeabi_dmul\n"
+	DCB "EXPORT __aeabi_dneg\n"
+	DCB "EXPORT __aeabi_drsub\n"
+	DCB "EXPORT __aeabi_dsub\n"
+
+/// Standard double precision floating-point comparison helper functions
+
+	DCB "EXPORT __aeabi_cdcmpeq\n"
+	DCB "EXPORT __aeabi_cdcmple\n"
+	DCB "EXPORT __aeabi_cdrcmple\n"
+	DCB "EXPORT __aeabi_dcmpeq\n"
+	DCB "EXPORT __aeabi_dcmplt\n"
+	DCB "EXPORT __aeabi_dcmple\n"
+	DCB "EXPORT __aeabi_dcmpge\n"
+	DCB "EXPORT __aeabi_dcmpgt\n"
+	DCB "EXPORT __aeabi_dcmpun\n"
+
+/// Standard single precision floating-point arithmetic helper functions
+
+	DCB "EXPORT __aeabi_fadd\n"
+	DCB "EXPORT __aeabi_fdiv\n"
+	DCB "EXPORT __aeabi_fmul\n"
+	DCB "EXPORT __aeabi_fneg\n"
+	DCB "EXPORT __aeabi_frsub\n"
+	DCB "EXPORT __aeabi_fsub\n"
+
+/// Standard single precision floating-point comparison helper functions
+
+	DCB "EXPORT __aeabi_cfcmpeq\n"
+	DCB "EXPORT __aeabi_cfcmple\n"
+	DCB "EXPORT __aeabi_cfrcmple\n"
+	DCB "EXPORT __aeabi_fcmpeq\n"
+	DCB "EXPORT __aeabi_fcmplt\n"
+	DCB "EXPORT __aeabi_fcmple\n"
+	DCB "EXPORT __aeabi_fcmpge\n"
+	DCB "EXPORT __aeabi_fcmpgt\n"
+	DCB "EXPORT __aeabi_fcmpun\n"
+
+/// Standard floating-point to integer conversions
+
+	DCB "EXPORT __aeabi_d2iz\n"
+	DCB "EXPORT __aeabi_d2uiz\n"
+	DCB "EXPORT __aeabi_d2lz\n"
+	DCB "EXPORT __aeabi_d2ulz\n"
+	DCB "EXPORT __aeabi_f2iz\n"
+	DCB "EXPORT __aeabi_f2uiz\n"
+	DCB "EXPORT __aeabi_f2lz\n"
+	DCB "EXPORT __aeabi_f2ulz\n"
+
+/// Standard conversions between floating types
+
+	DCB "EXPORT __aeabi_d2f\n"
+	DCB "EXPORT __aeabi_f2d\n"
+
+/// Standard integer to floating-point conversions
+
+	DCB "EXPORT __aeabi_i2d\n"
+	DCB "EXPORT __aeabi_ui2d\n"
+	DCB "EXPORT __aeabi_l2d\n"
+	DCB "EXPORT __aeabi_ul2d\n"
+	DCB "EXPORT __aeabi_i2f\n"
+	DCB "EXPORT __aeabi_ui2f\n"
+	DCB "EXPORT __aeabi_l2f\n"
+	DCB "EXPORT __aeabi_ul2f\n"
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/dfpaeabi_common.mmh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGETTYPE		dll
+
+SOURCEPATH		.
+SOURCE			dfpaeabi.cpp
+
+SYSTEMINCLUDE		../../include
+
+START ARMCC
+
+ARMINC
+#ifdef MARM_ARMV5
+ARMLIBS			c_t__un.l
+#else
+ARMLIBS			c_a__un.l
+#endif
+END
+
+capability		all
+
+VENDORID 0x70000001
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/dfpaeabi_vfpv2.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "dfpaeabi_common.mmh"
+
+TARGET 			dfpaeabi_vfpv2.dll
+LINKAS			dfpaeabi.dll
+NOEXPORTLIBRARY
+START ARMCC
+ARMRT
+// we want the vfpv2 supporting versions
+#ifdef MARM_ARMV5
+ARMLIBS			f_tvp.l
+#else
+ARMLIBS			f_avp.l
+#endif
+END
+
+unpagedcode
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/exchange.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,93 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef EXCHANGE_H
+#define EXCHANGE_H
+
+#include <bt_sock.h>
+#include <btsdp.h>
+
+class CExchanger : public CBase
+/**
+Abstract base class for protocols that can locate compatible devices.
+@internalComponent
+*/
+{
+	public:
+		/**
+		@internalComponent
+		Begins a search for compatible devices.  Until successful
+		completion, no other function should be called as the data
+		may be invalid.
+		@param aStatus
+		A TRequestStatus object that is signalled when the search
+		completes.  It should be used from within an active object
+		*/
+		virtual void LookForPeersL(TRequestStatus& aStatus) = 0;
+		/**
+		@internalComponent
+		@return The number of compatible peer devices found
+		*/
+		virtual TInt Count() = 0;
+		/**
+		@internalComponent
+		Selects the first compatible device that was found
+		*/
+		virtual void First() = 0;
+		/**
+		@internalComponent
+		Retrieves the selected device, and selects the next device
+		that was found.
+		@param aPtr
+		A reference to a TNameEntry* pointer.  On success, it is filled
+		in with a pointer to a device that was found.  
+		@return KErrNotFound on failure, KErrNone on success.
+		*/
+		virtual TInt Next(TNameEntry*& aPtr) = 0;
+	protected:
+		RSocketServ iSockSession;
+	private:
+};
+
+class CBluetoothSeeker;
+class CBluetoothExchanger : public CExchanger
+/**
+@internalComponent
+Implementation of CExchanger for bluetooth.  Uses inquiry and the SDP 
+protocol to retrieve a filtered list of all devices in range that support
+the service, as defined by UUID
+*/
+{
+	public:
+		IMPORT_C static CBluetoothExchanger* NewL(const TUUID &aUUID);
+		IMPORT_C static CBluetoothExchanger* NewLC(const TUUID &aUUID);
+		~CBluetoothExchanger();
+		//virtual implementations
+		IMPORT_C virtual void LookForPeersL(TRequestStatus& aStatus);
+		IMPORT_C virtual TInt Count();
+		IMPORT_C virtual void First();
+		IMPORT_C virtual TInt Next(TNameEntry*& aPtr);
+	private:
+		void ConstructL(const TUUID &aUUID);
+		RSdp iSdpSession;
+		RSdpDatabase iSdpDb;
+		CBluetoothSeeker *iSeeker;
+		TInt iDeviceIndex;
+};
+
+#endif //EXCHANGE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/t_oom.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,392 @@
+/*
+* Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <s32file.h>
+#include <e32test.h>
+
+#define UNUSED_VAR(a) a = a
+
+const TInt KTestCleanupStack=0x20;
+const TPtrC KTestDir=_L("\\STOR-TST\\T_OOM\\");
+
+#ifdef _DEBUG
+const TPtrC desOriginalReverted2(_S("original/reverted A"),19);
+const TPtrC desOriginalReverted3(_S("original/reverted B"),19);
+const TPtrC desNewOverwritten2(_S("new/overwritten X"),17);
+const TPtrC desNewOverwritten3(_S("new/overwritten Y"),17);
+const TPtrC alphabet(_S("abcdefghijklmnopqrstuvwxyz"),26);
+LOCAL_D CFileStore* store;
+RStoreWriteStream out;
+RStoreReadStream in;
+TInt KMemoryAllocsInTestFunction=1;
+#endif
+
+LOCAL_D CTrapCleanup* TheTrapCleanup;
+LOCAL_D RTest test(_L("T_OOM"));
+LOCAL_D RFs TheFs;
+
+LOCAL_C void setupTestDirectory()
+    {// Prepare the test directory.
+	TInt r=TheFs.Connect();
+	test(r==KErrNone);
+//
+	r=TheFs.MkDirAll(KTestDir);
+	test(r==KErrNone||r==KErrAlreadyExists);
+	r=TheFs.SetSessionPath(KTestDir);
+	test(r==KErrNone);
+	}
+
+LOCAL_C void setupCleanup()
+    {// Initialise the cleanup stack
+	TheTrapCleanup=CTrapCleanup::New();
+	test(TheTrapCleanup!=NULL);
+	TRAPD(r,\
+		{\
+		for (TInt i=KTestCleanupStack;i>0;i--)\
+			CleanupStack::PushL((TAny*)0);\
+		CleanupStack::Pop(KTestCleanupStack);\
+		});
+	test(r==KErrNone);
+	}
+
+#ifdef _DEBUG
+LOCAL_D void CreateStoreSetRootAndDestroyStoreL()
+	{
+	TheFs.Delete(_L("pfs"));
+	store=CPermanentFileStore::CreateLC(TheFs,_L("pfs"),EFileWrite|EFileRead);
+	store->SetTypeL(KPermanentFileStoreLayoutUid);
+	TStreamId rootId = store->ExtendL();
+	store->SetRootL(rootId);
+	store->CommitL();
+	CleanupStack::PopAndDestroy();
+	}
+
+LOCAL_D void AlterStoreL()
+	{
+	RStoreWriteStream out2;
+	RStoreWriteStream out3;
+	RStoreWriteStream out4;
+	RStoreReadStream in;
+
+	TStreamId id2 = out.CreateLC(*store);
+	out.CommitL();
+	CleanupStack::PopAndDestroy();
+
+	TStreamId id3 = out.CreateLC(*store);
+	out.CommitL();
+	CleanupStack::PopAndDestroy();
+
+	TStreamId id4 = out.CreateLC(*store);
+	out << _L("mum");
+	out.CommitL();
+	CleanupStack::PopAndDestroy();
+
+	out.ReplaceLC(*store,store->Root());
+	out << id2;
+	out << id3;
+	out << id4;
+	out.CommitL();
+	CleanupStack::PopAndDestroy();
+
+	in.OpenLC(*store,store->Root());// use the root for in and out streams
+	out.ReplaceLC(*store,store->Root());
+	out.WriteL(in);
+	out.CommitL();
+	CleanupStack::PopAndDestroy(2);
+
+	out.ReplaceLC(*store,store->Root());// swap the order
+	in.OpenLC(*store,store->Root());
+	out.WriteL(in);
+	out << _L("fromage");
+	out.CommitL();
+	CleanupStack::PopAndDestroy(2);
+
+	store->CommitL();
+
+	in.OpenLC(*store,store->Root());
+	TStreamId idX,idZ;
+	in >> idX;
+	in >> idX;
+	in >> idZ;// id4 "mum"
+	CleanupStack::PopAndDestroy();
+	out.OpenLC(*store,idZ);
+	in.OpenLC(*store,idZ);
+	out2.OpenLC(*store,idZ);
+	out3.OpenLC(*store,idZ);
+	out4.OpenLC(*store,idZ);
+	out4.WriteL(in);
+	out.CommitL();
+	CleanupStack::PopAndDestroy(5);
+	}
+/**
+@SYMTestCaseID          SYSLIB-STORE-CT-1170
+@SYMTestCaseDesc	    Allocation failure in store test
+@SYMTestPriority 	    High
+@SYMTestActions  	    Tests for any memory errors during allocation of store
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+LOCAL_D void AllocFailInSampleStoreCodeL()
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-STORE-CT-1170 "));
+	test.Console()->Printf(_L("AllocFailInSampleStoreCodeL()\n"));
+	TRAPD(r,CreateStoreSetRootAndDestroyStoreL())
+    UNUSED_VAR(r);
+	const TInt KAllocFail=15;
+	for (TInt ii=1;ii<=20;++ii)
+		{
+		store=CPermanentFileStore::OpenLC(TheFs,_L("pfs"),EFileWrite|EFileRead);
+		__UHEAP_FAILNEXT(ii);
+		TRAPD(r,AlterStoreL());
+		if (ii<KAllocFail)
+			test(r==KErrNoMemory);
+		if (ii>=KAllocFail)
+			test(r==KErrNone);
+		__UHEAP_RESET;
+		CleanupStack::PopAndDestroy();
+		}
+	TheFs.Delete(_L("pfs"));
+	}
+
+LOCAL_D void InitialseStoreWithDataL()
+	{
+	TheFs.Delete(_L("pope"));
+	store=CPermanentFileStore::CreateLC(TheFs,_L("pope"),EFileWrite|EFileRead);
+	store->SetTypeL(KPermanentFileStoreLayoutUid);
+	TStreamId rootId = store->ExtendL();
+	store->SetRootL(rootId);
+	store->CommitL();
+	CleanupStack::PopAndDestroy();
+
+	store=CPermanentFileStore::OpenLC(TheFs,_L("pope"),EFileWrite|EFileRead);
+	TStreamId id2 = out.CreateLC(*store);
+	out << desOriginalReverted2;
+	out.CommitL();
+	CleanupStack::PopAndDestroy();
+
+	TStreamId id3 = out.CreateLC(*store);
+	out << desOriginalReverted3;
+	out.CommitL();
+	CleanupStack::PopAndDestroy();
+
+	out.ReplaceLC(*store,store->Root());
+	out << id2;
+	out << id3;
+	out.CommitL();
+	CleanupStack::PopAndDestroy();// out
+
+	store->CommitL();
+	CleanupStack::PopAndDestroy();// store
+	}
+
+LOCAL_D void AlterStoreDuringOutOfMemoryL(TInt aFail)
+	{
+	store=CPermanentFileStore::OpenLC(TheFs,_L("pope"),EFileWrite|EFileRead);
+	in.OpenLC(*store,store->Root());
+	TStreamId id2;
+	TStreamId id3;
+	in >> id2;
+	in >> id3;
+	CleanupStack::PopAndDestroy();// in
+
+	out.ReplaceLC(*store,id2);
+	out << desNewOverwritten2;
+	out.CommitL();
+	CleanupStack::PopAndDestroy();// out
+
+	store->CommitL();
+	__UHEAP_FAILNEXT(aFail);// Out of memory
+
+	out.ReplaceLC(*store,id3);
+	out << desNewOverwritten3;
+	out.CommitL();
+	CleanupStack::PopAndDestroy();// out
+
+	store->CommitL();
+	CleanupStack::PopAndDestroy();// store
+
+	__UHEAP_RESET;
+	}
+
+/**
+@SYMTestCaseID          SYSLIB-STORE-CT-1346
+@SYMTestCaseDesc	    Streaming of data test
+@SYMTestPriority 	    High
+@SYMTestActions  	    Tests for RStoreReadStream::>> operator
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+LOCAL_D void TestStreamDataL(TInt aFail)
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-STORE-CT-1346 "));
+	store=CPermanentFileStore::OpenLC(TheFs,_L("pope"),EFileWrite|EFileRead);
+	in.OpenLC(*store,store->Root());
+	TStreamId id2;
+	TStreamId id3;
+	in >> id2;
+	in >> id3;
+	CleanupStack::PopAndDestroy();// in
+
+	TBuf<32> buf;
+
+	in.OpenLC(*store,id2);
+	in >> buf;
+	test(buf==desNewOverwritten2);
+
+	CleanupStack::PopAndDestroy();// in
+
+	in.OpenLC(*store,id3);
+	in >> buf;
+	if (aFail > KMemoryAllocsInTestFunction)
+		test(buf==desNewOverwritten3);
+	else if (aFail<=KMemoryAllocsInTestFunction)
+		test(buf==desOriginalReverted3);
+
+	CleanupStack::PopAndDestroy();// in
+
+	CleanupStack::PopAndDestroy();// store
+	}
+
+LOCAL_D void ResetStreamDataL()
+	{
+	store=CPermanentFileStore::OpenLC(TheFs,_L("pope"),EFileWrite|EFileRead);
+	in.OpenLC(*store,store->Root());
+	TStreamId id2;
+	TStreamId id3;
+	in >> id2;
+	in >> id3;
+	CleanupStack::PopAndDestroy();// in
+
+	out.ReplaceLC(*store,id2);
+	out << desOriginalReverted2;
+	out.CommitL();
+	CleanupStack::PopAndDestroy();// out
+
+	out.ReplaceLC(*store,id3);
+	out << desOriginalReverted3;
+	out.CommitL();
+	CleanupStack::PopAndDestroy();// out
+
+	store->CommitL();
+	CleanupStack::PopAndDestroy();// store
+	}
+/**
+@SYMTestCaseID          SYSLIB-STORE-CT-1171
+@SYMTestCaseDesc	    Out of memory errors test
+@SYMTestPriority 	    High
+@SYMTestActions  	    Tests for out of memory conditions before commiting to the store
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+LOCAL_D void OutOfMemoryBeforeStoreCommitL()
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-STORE-CT-1171 "));
+	test.Console()->Printf(_L("OutOfMemoryBeforeStoreCommitL()\n"));
+	InitialseStoreWithDataL();
+	for (TInt fail=1; fail<=5; ++ fail)
+		{
+		TRAPD(r,AlterStoreDuringOutOfMemoryL(fail));
+		if (fail<=KMemoryAllocsInTestFunction)
+			test(r==KErrNoMemory);// store saved when r!=KErrNone
+		else
+			test(r==KErrNone);
+		TestStreamDataL(fail);
+		ResetStreamDataL();
+		}
+	TheFs.Delete(_L("pope"));
+	}
+
+
+LOCAL_D void OpenCloseStoreL(TInt aFail)
+	{
+	__UHEAP_FAILNEXT(aFail);
+	TheFs.Delete(_L("pope"));
+	store=CPermanentFileStore::CreateLC(TheFs,_L("pope"),EFileWrite|EFileRead);
+	store->SetTypeL(KPermanentFileStoreLayoutUid);
+	TStreamId rootId = store->ExtendL();
+	store->SetRootL(rootId);
+	store->CommitL();
+	CleanupStack::PopAndDestroy();
+
+	store=CPermanentFileStore::OpenLC(TheFs,_L("pope"),EFileWrite|EFileRead);
+	TStreamId id2 = out.CreateLC(*store);
+	out << desOriginalReverted2;
+	out << id2;
+	out.CommitL();
+	CleanupStack::PopAndDestroy(2);
+	}
+/**
+@SYMTestCaseID          SYSLIB-STORE-CT-1172
+@SYMTestCaseDesc	    Out of memory test
+@SYMTestPriority 	    High
+@SYMTestActions  	    Test for memory errors during opening and closing of store operation.
+@SYMTestExpectedResults Test must not fail
+@SYMREQ                 REQ0000
+*/
+
+LOCAL_D void OutOfMemoryWhenOpeningClosingStoreL()
+	{
+	test.Next(_L(" @SYMTestCaseID:SYSLIB-STORE-CT-1172 "));
+	test.Console()->Printf(_L("OutOfMemoryWhenOpeningClosingStoreL()\n"));
+	const TInt KAllocs=12;
+	for (TInt fail=1; fail<=20; ++ fail)
+		{
+		TRAPD(r,OpenCloseStoreL(fail))
+		if (fail<KAllocs)
+			test(r==KErrNoMemory);
+		else
+			test(r==KErrNone);
+		}
+	TheFs.Delete(_L("pope"));
+	__UHEAP_RESET;
+	}
+#endif
+
+GLDEF_C TInt E32Main()
+    {// Test permanent file store
+	test.Title();
+	setupTestDirectory();
+	setupCleanup();
+#ifdef _DEBUG
+	__UHEAP_MARK;
+//
+	test.Start(_L("Begin tests"));
+	TRAPD(r,AllocFailInSampleStoreCodeL());
+	test(r==KErrNone);
+	TRAP(r,OutOfMemoryBeforeStoreCommitL());
+	test(r==KErrNone);
+	TRAP(r,OutOfMemoryWhenOpeningClosingStoreL());
+	test(r==KErrNone);
+	test.End();
+
+	TheFs.Delete(_L("pope"));
+	TheFs.Delete(_L("pfs"));
+//
+	__UHEAP_MARKEND;
+#endif
+
+#ifndef _DEBUG
+	test.Start(_L("The tests are not valid in release mode"));
+	test.End();
+#endif
+	delete TheTrapCleanup;
+	TheFs.Close();
+	test.Close();
+	return 0;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/t_oom.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+target 		t_oom.exe 
+targettype 	exe 
+
+SOURCEPATH	.
+source 		t_oom.cpp
+
+systeminclude  	/epoc32/include 
+ 
+library 	euser.lib efsrv.lib 
+debuglibrary 	estor.lib
+library 	euser.lib
+
+VENDORID 	0x70000001
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/tbm.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,179 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* BT incoming SCO notification test code
+*
+*/
+
+
+#include <e32test.h>
+#include <es_sock.h>
+#include <f32file.h>
+#include <bt_sock.h>
+#include <btextnotifiers.h>
+#include <c32comm.h>
+#include <btsdp.h>
+#include "exchange.h"
+
+#if defined (__WINS__)
+#define PDD_NAME _L("ECDRV")
+#define LDD_NAME _L("ECOMM")
+#else  // __GCC32__
+#define PDD_NAME _L("EUART4")	// port 0 on Assabet
+// don't use EUART2 - port 1 is IR
+#define ETNA_PDD_NAME _L("EUART3") // for port 2 on Assabet
+#define LDD_NAME _L("ECOMM")
+#endif
+
+GLDEF_D RTest test(_L("bluemeanie tests"));
+
+const TUint32 KServiceUID1 = 0x6D14AC98;
+const TUint32 KServiceUID2 = 0x7A8249bb;
+const TUint32 KServiceUID3 = 0xB885BE2E;
+const TUint32 KServiceUID4 = 0xF73C909E;
+
+//_LIT(KMenuText1, "A - Listen & Accept         F - Connect ACL");
+//_LIT(KMenuText2, "B - Await incoming SCO      G - Connect SCO");
+//_LIT(KMenuText3, "C - Await SCO disconnect    H - Disconnect SCO");
+//_LIT(KMenuText4, "D - Await ACL disconnect    I - Disconnect ACL");
+//_LIT(KMenuText5, "E - Receive Data            J - Send Data");
+//_LIT(KMenuText6, "K - Hard disconnect ACL");
+//_LIT(KMenuText7, "X - Exit");
+//_LIT(KNewLine, "\r\n");
+
+//const TBTDevAddr KDevAddr(MAKE_TINT64(0x0002, 0x5bff0a1e));
+
+class CTestBM : public CActive
+	{
+	public:
+		CTestBM();
+		void InitL();
+		void DoTestL();
+		void RunL();
+		void DoCancel();
+	private:
+	private:
+		CBluetoothExchanger* iExch;
+		CActiveScheduler* iSched;
+	};
+
+CTestBM::CTestBM() : CActive(CActive::EPriorityStandard)
+	{}
+
+void CTestBM::InitL()
+	{
+	TUUID uuid(KServiceUID1,KServiceUID2,KServiceUID3,KServiceUID4);
+	iSched = new(ELeave) CActiveScheduler;
+	CActiveScheduler::Install(iSched);
+	iExch = CBluetoothExchanger::NewL(uuid);
+	iSched->Add(this);
+	}
+
+void CTestBM::DoTestL()
+	{
+	test.Printf(_L("Press a key to start search\r\n"));
+	test.Getch();
+	iExch->LookForPeersL(iStatus);
+	SetActive();
+	iSched->Start();
+	test(iStatus == KErrNone);
+	test.Printf(_L("Completed with status %d\r\n"), iStatus.Int());
+	TInt count;
+	TBTSockAddr addr;
+	THostName name;
+	TNameEntry* entry;
+	iExch->First();
+	count = iExch->Count();
+	test.Printf(_L("%d compatible devices found\r\n"), count);
+	while(iExch->Next(entry) == KErrNone)
+		{
+		addr = (*entry)().iAddr;
+		name = (*entry)().iName;
+		test.Printf(_L("Device address 0x%02x%02x%02x%02x%02x%02x\r\n"),
+			addr.BTAddr()[0],
+			addr.BTAddr()[1],
+			addr.BTAddr()[2],
+			addr.BTAddr()[3],
+			addr.BTAddr()[4],
+			addr.BTAddr()[5]);
+		test.Printf(_L("Device name: %S\r\n"), &name);
+		}
+	test.Getch();
+	}
+
+void CTestBM::RunL()
+	{
+	iSched->Stop();
+	}
+
+void CTestBM::DoCancel()
+	{
+	//iExch->Cancel();
+	}
+
+void LoadLDD_PDD()
+	{
+	TInt r;
+#ifdef __EPOC32__
+	r=StartC32();
+	if (r!=KErrNone && r!=KErrAlreadyExists)
+		{
+		test.Printf(_L("Failed %d!\n\r"),r);
+		test(r==KErrNone);
+		}
+	else
+		test.Printf(_L("Started C32\n"));
+#endif
+	test.Printf(_L("Loading PDD\n"));
+	r=User::LoadPhysicalDevice(PDD_NAME);
+	if (r!=KErrNone && r!=KErrAlreadyExists)
+		{
+		test.Printf(_L("Failed %d!\n\r"),r);
+		test(r==KErrNone);
+		}
+	else 
+		test.Printf(_L("Loaded LDD\n"));
+	test.Printf(_L("Loading LDD\n"));
+	r=User::LoadLogicalDevice(LDD_NAME);
+	if (r!=KErrNone && r!=KErrAlreadyExists)
+		{
+		test.Printf(_L("Failed %d!\n\r"),r);
+		test(r==KErrNone);
+		}
+	else
+		test.Printf(_L("Loaded PDD\n"));
+	}
+
+
+void RunTestL()
+	{
+	CTestBM *st = new(ELeave) CTestBM;
+	CleanupStack::PushL(st);
+	LoadLDD_PDD();
+	st->InitL();
+	st->DoTestL();
+	CleanupStack::PopAndDestroy(st);
+	}
+
+TInt E32Main()
+	{
+	CTrapCleanup* cleanupStack=CTrapCleanup::New();
+
+	TRAPD(err,RunTestL());
+
+	delete cleanupStack;
+   	
+	return err;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp3/tbm.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        tbm.exe
+TARGETTYPE    EXE
+
+SRCDBG
+
+SOURCEPATH .
+SOURCE	      tbm.cpp
+
+USERINCLUDE	    .
+SYSTEMINCLUDE /epoc32/include
+
+LIBRARY       euser.lib bluetooth.lib
+LIBRARY       sdap.lib
+
+CAPABILITY ALL -TCB
+
+LIBRARY       c32.lib
+
+VENDORID 0x70000001
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/buffer/t_rbuf.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,569 @@
+/*
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\buffer\t_rbuf.cpp
+* Overview:
+* Test methods of the RBuf16, RBuf8, RBuf template class.
+* API Information:
+* RBuf16, RBuf8, RBuf.
+* Details:
+* For RBuf8, RBuf16 and RBuf objects:
+* - Test the Create and CreateMax methods by verifying the return value of
+* KErrNone, the initial length and max length. Perform basic write and read
+* operations and verify the results.
+* - Test the CreateL and CreateMaxL methods by verifying the return value of 
+* KErrNone. Also force a heap error and verify return value of KErrNoMemory.
+* - Test the Create(const TDesC_& aDesc) and Create(const TDesCX_ aDesc, 
+* TInt aMaxLength) methods by verifying the return value of KErrNone. Verify
+* initial length, max length and initialisation.
+* - Test the CreateL(const TDesC_& aDesc) and CreateMaxL(const TDesCX_ aDesc, 
+* TInt aMaxLength) methods by verifying the return value of KErrNone. Also 
+* force a heap error and verify return value of KErrNoMemory.
+* - Test the Swap method by creating two initialised objects, calling Swap 
+* and confirming the results as expected.
+* - Test the Assign method by performing an assign from a variety of sources
+* and verifying the results are as expected.
+* - Test the ReAlloc method in a variety of scenarios that decrease memory, 
+* increase memory and zero-length memory. Verify that the results are as
+* expected.
+* - Test the ReAllocL by verifying the return value of KErrNone. Also force 
+* a heap error and verify return value of KErrNoMemory. Verify that the
+* object is the same as before the failed ReAllocL call.
+* - Test the CleanupClosePushL method via CleanupStack::PopAndDestroy().
+* - Force the CleanupClosePushL to leave to check cleanup of RBuf.
+* Platforms/Drives/Compatibility:
+* All 
+* Assumptions/Requirement/Pre-requisites:
+* Failures and causes:
+* Base Port information:
+*
+*/
+
+
+#include <e32test.h>
+#include <e32math.h>
+#include <u32std.h>
+
+LOCAL_D RTest test(_L("T_RBUF"));
+
+#undef _TS
+#define _TS(a) ((const TTEXT*)RTest::String(sizeof(TTEXT),(TText8*)a,(TText16*)L ## a)) 
+
+/**
+Tests the following methods. 
+ - TInt Create(TInt aMaxLength);
+ - TInt CreateMax(TInt aMaxLength);
+*/
+template<class RBUF>	
+LOCAL_C void TestCreate(RBUF*)
+{
+	RBUF rBuf;
+	
+	test.Next(_L("Create(TInt aMaxLength) method"));
+
+	test(rBuf.Create(19)==KErrNone);	//Create RBuf as EPtr type
+	test(rBuf.Length()==0);
+	test(rBuf.MaxLength()==19);
+	rBuf.SetLength(2);
+	rBuf[1] = 1;						//Try basic write & ...
+	test(rBuf[1] == 1);					//... read 
+	rBuf.Close();
+
+	test(rBuf.Create(0)==KErrNone);		//Create zero length RBuf as EPtr type
+	test(rBuf.Length()==0);
+	test(rBuf.MaxLength()==0);
+	rBuf.Close();
+	
+	test.Next(_L("CreateMax(TInt aMaxLength) method"));
+	
+	test(rBuf.CreateMax(20)==KErrNone);	//Create RBuf as EPtr type
+	test(rBuf.Length()==20);
+	test(rBuf.MaxLength()==20);
+	rBuf[1] = 1;
+	test(rBuf[1] == 1);
+	rBuf.Close();
+}
+
+/**
+Tests the following methods. 
+ - void CreateL(TInt aMaxLength);
+ - void CreateMaxL(TInt aMaxLength);
+*/
+template<class RBUF>
+LOCAL_C void TestCreateLeaving(RBUF*)
+{
+	RBUF rBuf;
+
+	test.Next(_L("CreateL(TInt aMaxLength) method"));
+
+	TRAPD(ret, rBuf.CreateL(20));	//Create RBuf as EPtr type
+	test(KErrNone == ret);
+	rBuf.Close();
+
+#if defined(_DEBUG)
+	__UHEAP_FAILNEXT(1);			//Set the next alloc to fail
+	TRAP(ret, rBuf.CreateL(10));	
+	test(KErrNoMemory == ret);		// It fails due to __UHEAP_FAILNEXT(1);
+#endif //_DEBUG
+
+	test.Next(_L("CreateMaxL(TInt aMaxLength) method"));
+
+	TRAP(ret, rBuf.CreateMaxL(20));	//Create RBuf as EPtr type
+	test(KErrNone == ret);
+	rBuf.Close();
+
+#if defined(_DEBUG)
+	__UHEAP_FAILNEXT(1);			//Set the next alloc to fail
+	TRAP(ret, rBuf.CreateMaxL(10));	
+	test(KErrNoMemory == ret);		// It fails due to __UHEAP_FAILNEXT(1);
+#endif //_DEBUG
+}
+
+/**
+Tests the following methods. 
+ - TInt Create(const TDesC_& aDesc);
+ - TInt Create(const TDesC_& aDesc, TInt aMaxLength));
+*/
+template<class RBUF, class TBUF, class TTEXT>	
+LOCAL_C void TestCreateFromDes(RBUF*)
+{
+	RBUF rBuf;
+	TBUF des (_TS("012345"));
+
+	test.Next(_L("Create(const TDesC_& aDesc) method"));
+
+	test(rBuf.Create(des)==KErrNone);					//Create RBuf as EPtr type
+	test(rBuf == des);
+	rBuf.Close();
+
+	test.Next(_L("Create(const TDesCX_ aDesc, TInt aMaxLength) method"));
+
+	test(rBuf.Create(des, des.Length())==KErrNone);		//Create RBuf as EPtr type
+	test(rBuf==des);
+	rBuf.Close();
+
+	test(rBuf.Create(des, des.Length()-2)==KErrNone);	//Create RBuf as EPtr type
+	test(rBuf.Length()==4);
+	test(rBuf.MaxLength()==4);
+	test(rBuf[0] == (TTEXT)('0'));
+	test(rBuf[3] == (TTEXT)('3'));
+	test(rBuf<des);
+	rBuf.Close();
+
+	test(rBuf.Create(des, des.Length()+2)==KErrNone);	//Create RBuf as EPtr type
+	test(rBuf.Length()==6);
+	test(rBuf.MaxLength()==8);
+	test(rBuf==des);
+	rBuf.Close();
+}
+
+/**
+Tests the following methods. 
+ - void CreateL(const TDesC_& aDesc);
+ - void CreateMaxL(const TDesC_& aDesc, TInt aMaxLength);
+*/
+template<class RBUF, class TBUF, class TTEXT>
+LOCAL_C void TestCreateFromDesLeaving(RBUF*)
+{
+	RBUF rBuf;
+	TBUF des (_TS("123456"));
+
+	test.Next(_L("CreateL(const TDesC_& aDesc) method"));
+
+	TRAPD(ret, rBuf.CreateL(des));				//Create RBuf as EPtr type
+	test(KErrNone == ret);
+	rBuf.Close();
+
+#if defined(_DEBUG)
+	__UHEAP_FAILNEXT(1);						//Set the next alloc to fail
+	TRAP(ret, rBuf.CreateL(des));	
+	test(KErrNoMemory == ret);					// This will fail due to __UHEAP_FAILNEXT(1);
+#endif //(_DEBUG)
+
+	test.Next(_L("CreateL(const TDesC_& aDesc, TInt aMaxLength) method"));
+
+	TRAP(ret, rBuf.CreateL(des, des.Length()));	//Create RBuf as EPtr type
+	test(KErrNone == ret);
+	rBuf.Close();
+
+#if defined(_DEBUG)
+	__UHEAP_FAILNEXT(1);						//Set the next alloc to fail
+	TRAP(ret, rBuf.CreateL(des, des.Length()));	
+	test(KErrNoMemory == ret);					// It fails due to __UHEAP_FAILNEXT(1);
+#endif //(_DEBUG)
+}
+
+/**
+Tests the following methods:
+ - TInt Assign(const RBuf_& rBuf);
+ - TInt Assign(TUint* aHeapCell, TInt aMaxLength);
+ - TInt Assign(TUint* aHeapCell, TInt aLength, TInt aMaxLength);
+ - TInt Assign(HBufC& aHBuf);
+ - RBuf(HBufC_&) constructor.
+*/
+template<class RBUF, class TBUF, class TTEXT, class HBUF>	
+LOCAL_C void TestAssign(RBUF*)
+{
+	RBUF rBuf;
+	TBUF des (_TS("123456"));
+	RBUF rBuf2;
+
+	test.Next(_L("Assign(const RBuf_& aRBuf) method"));
+
+	rBuf2.Create(des);
+	rBuf.Assign(rBuf2);
+	test(rBuf==rBuf2);
+	rBuf.Close();
+	
+	test.Next(_L("Assign(TUint* aHeapCell, TInt aLength, TInt aMaxLength ) method"));
+
+	TTEXT* heap = (TTEXT*)User::Alloc(24*(TInt)sizeof(TTEXT)); //Allocate 48 bytes for 24 long RBuf16
+	rBuf.Assign(heap, 12,24);
+	test(rBuf.Length() == 12);		
+	test(rBuf.MaxLength() == 24);		
+	rBuf.Close();
+
+	heap = NULL;
+	rBuf.Assign(heap, 0,0);
+	test(rBuf.Length() == 0);		
+	test(rBuf.MaxLength() == 0);		
+	rBuf.Close();
+	
+	test.Next(_L("Assign(TUint* aHeapCell, TInt aMaxLength ) method"));
+	
+	heap = (TTEXT*)User::Alloc(24*(TInt)sizeof(TTEXT)); //Allocate 48 bytes for 24 long RBuf16
+	rBuf.Assign(heap, 24);
+	test(rBuf.Length() == 0);		
+	test(rBuf.MaxLength() == 24);		
+	rBuf.Close();
+
+	test.Next(_L("Assign(HBufC_* aHBuf) method"));
+
+	HBUF* hBuf = HBUF::NewMax(11);
+	rBuf.Assign(hBuf);			//Create RBuf as EBufCPtr type
+	test(rBuf.Length() == 11);
+	test(rBuf.MaxLength() >= 11); //There could me more allocated memory - see HBufC8::Des()
+	rBuf.Close();
+
+	test.Next(_L("RBuf_(HBufC_* aHBuf) constructor"));
+
+	hBuf = HBUF::NewMax(12);	//Create RBuf as EBufCPtr
+	RBUF rBuf3(hBuf);
+	test(rBuf3.Length() == 12);
+	test(rBuf3.MaxLength() >= 12);
+	rBuf3.Close();
+
+	hBuf = HBUF::NewMax(0);
+	RBUF rBuf4(hBuf);			//The length of aHBuf is zero
+	test(rBuf4.Length() == 0);
+	rBuf4.Close();
+
+	hBuf = NULL;				//aHBuf is NULL
+	RBUF rBuf5(hBuf);
+	test(rBuf5.Length() == 0);
+	test(rBuf5.MaxLength() == 0);
+	rBuf5.Close();
+}
+
+/**
+Tests the following methods. 
+ - TInt ReAlloc(TInt aMaxLength);
+*/
+template<class RBUF, class TBUF, class TTEXT, class HBUF>	
+LOCAL_C void TestReAlloc(RBUF*)
+{
+	RBUF rBuf;
+
+	TBUF des (_TS("0123456"));
+
+
+	test.Next(_L("ReAlloc(TInt aMaxLength) method"));
+
+	//reallocate EPtr type - decrease memory
+	test(rBuf.Create(des)==KErrNone);					//Create as EPtr
+	rBuf.SetLength(3);
+	test(rBuf.ReAlloc(3)==KErrNone);					//ReAlloc to EPtr
+	test(rBuf.MaxLength()>=3);
+	test(rBuf.Length()==3);
+	test(rBuf[0] == (TTEXT)('0'));
+	test(rBuf[2] == (TTEXT)('2'));
+	rBuf.Close();
+
+	//reallocate EPtr type - increase memory
+	test(rBuf.Create(des,des.MaxLength())==KErrNone);	//Create as EPtr
+	test(rBuf.ReAlloc(15)==KErrNone);					//ReAlloc to EPtr
+	test(rBuf.MaxLength()==15);
+	test(rBuf.Length()==7);
+	test(rBuf[0] == (TTEXT)('0'));
+	test(rBuf[6] == (TTEXT)('6'));
+	rBuf.Close();
+
+
+	//reallocate EBufCPtr type - decrease memory
+	HBUF* hBuf = HBUF::NewMax(9);
+	*hBuf = _TS("012345678");
+	rBuf.Assign(hBuf);						//Create as EBufCPtr
+	rBuf.SetLength(5);
+	test(rBuf.ReAlloc(5)==KErrNone);		//ReAlloc to EBufCPtr
+	test(rBuf.MaxLength()>=5);//There could be more allocated memory - see HBufC8::Des()
+	test(rBuf.Length()==5);
+	test(rBuf[0] == (TTEXT)('0'));
+	test(rBuf[4] == (TTEXT)('4'));
+	rBuf.Close();
+
+	//reallocate EBufCPtr type - increase memory
+	hBuf = HBUF::NewMax(9);
+	*hBuf = _TS("012345678");
+	rBuf.Assign(hBuf);						//Create as EBufCPtr
+	test(rBuf.ReAlloc(15)==KErrNone);		//ReAlloc to EBufCPtr
+	test(rBuf.MaxLength()>=15);//There could be more allocated memory - see HBufC8::Des()
+	test(rBuf.Length()==9);
+	test(rBuf[0] == (TTEXT)('0'));
+	test(rBuf[8] == (TTEXT)('8'));
+	rBuf.Close();
+
+	//reallocate EPtr type - to zero-length
+	test(rBuf.Create(des)==KErrNone);		//Create as EPtr
+	rBuf.SetLength(0);
+	test(rBuf.ReAlloc(0)==KErrNone);		//ReAlloc to EPtr
+	test(rBuf.MaxLength()==0);
+	test(rBuf.Length()==0);
+	rBuf.Close();
+
+	//reallocate EBufCPtr type to zero-length
+	hBuf = HBUF::NewMax(9);
+	*hBuf = _TS("012345678");
+	rBuf.Assign(hBuf);						//Create as EBufCPtr
+	rBuf.SetLength(0);
+	test(rBuf.ReAlloc(0)==KErrNone);		//ReAlloc to EPtr
+	test(rBuf.MaxLength()==0);
+	test(rBuf.Length()==0);
+	rBuf.Close();
+
+	//reallocate from zero-length
+	rBuf.Create(0);							//Create as EPtr
+	test(rBuf.ReAlloc(9)==KErrNone);		//ReAlloc to EPtr
+	test(rBuf.MaxLength()==9);
+	test(rBuf.Length()==0);
+	rBuf.Close();
+
+	//reallocate from zero-length EBufCPtr to EPtr
+	struct dummy // make it look like RBuf16
+		{
+		TInt iLength;
+		TInt iMaxLength;
+		HBUF* iEBufCPtrType;	//Pointer to buffer data
+		};
+
+	// reference rBuf as our dummy.. 
+	dummy &drBuf = (dummy&) rBuf;
+	rBuf.Assign(HBUF::NewL(0)); 			//Create as EBufCPtr
+	test(EBufCPtr == (drBuf.iLength>>KShiftDesType));
+	rBuf.Close(); 	// the actual behavior causes memory leaks, so we should close it first.
+	test(rBuf.ReAlloc(13)==KErrNone);	// ReAlloc changes it from EBufCPtr to EPtr
+	test(EPtr == (drBuf.iLength>>KShiftDesType));
+	test(rBuf.MaxLength() == 13);		
+	test(rBuf.Length() == 0);		
+	rBuf.Close();
+
+	//reallocate from zero-length to zero-length
+	rBuf.Create(0);							//Create as EPtr
+	test(rBuf.ReAlloc(0)==KErrNone);		//ReAlloc to EPtr
+	test(rBuf.Length() == 0);		
+	test(rBuf.MaxLength() == 0);		
+	rBuf.Close();
+
+}
+
+/**
+Tests the following methods. 
+ - TInt ReAllocL(TInt aMaxLength);
+*/
+template<class RBUF, class TBUF, class TTEXT>	
+LOCAL_C void TestReAllocLeaving(RBUF*)
+{
+	RBUF rBuf;
+
+	TBUF des(_TS("01"));
+
+	test.Next(_L("ReAllocL(TInt aMaxLength) method"));
+
+	test(rBuf.Create(des) ==KErrNone);
+	TRAPD(ret, rBuf.ReAllocL(6));	//ReAlloc buffer
+	test(KErrNone == ret);
+
+#if defined(_DEBUG)
+	__UHEAP_FAILNEXT(1);
+	TRAP(ret, rBuf.ReAllocL(100));	//Realloc buffer. This should fail.
+	test(KErrNoMemory == ret);
+#endif //(_DEBUG)
+
+	test(rBuf.MaxLength()==6);		//Check RBuf is the same as before ... 
+	test(rBuf.Length()==2);			//... ReAlloc that failed.
+	test(rBuf[0] == (TTEXT)('0'));
+	test(rBuf[1] == (TTEXT)('1'));
+	rBuf.Close();
+}
+
+/**
+Tests the following methods. 
+ - void Swap(RBuf_& aBuf);
+*/
+template<class RBUF, class TBUF, class TTEXT>
+LOCAL_C void TestSwap(RBUF*)
+{
+	RBUF rBuf1, rBuf2;
+	TBUF des1(_TS("12"));
+	TBUF des2 (_TS("345678"));
+
+	test.Next(_L("Swap(RBuf_& aRBuf) method"));
+
+	test(rBuf1.Create(des1) ==KErrNone);
+	test(rBuf2.Create(des2) ==KErrNone);
+
+	rBuf1.Swap(rBuf2);
+
+	test(rBuf1==des2);
+	test(rBuf2==des1);
+
+	rBuf1.Close();
+	rBuf2.Close();
+}
+
+/**
+Test assignemnt operator.
+*/
+template<class RBUF, class TBUF, class TBUFC, class TTEXT>
+LOCAL_C void TestAssignmentOperator()
+{
+	test.Next(_L("Assignment operator"));
+
+	TBUF tdes(_TS("Modifiable descriptor"));
+	TBUFC tdesc(_TS("Non-modifiable descriptor"));
+
+	RBUF rbuf, rbuf2;
+	rbuf.Create(32);
+	rbuf2.Create(32);
+	rbuf2.Copy(_TS("Buffer descriptor"), 17);
+
+	rbuf = tdesc;	test(rbuf == tdesc);
+	rbuf = tdes;		test(rbuf == tdes);
+	rbuf = rbuf2;	test(rbuf == rbuf2);
+
+	rbuf2.Close();
+	rbuf.Close();
+}
+
+/**
+Tests the following methods. 
+ - void CleanupClosePushL();
+*/
+template<class RBUF> LOCAL_C void TestCleanupClosePushL(RBUF*)
+{
+	RBUF rBuf;
+	
+	test.Next(_L("CleanupClosePushL() method"));
+	test(KErrNone == rBuf.Create(10));
+	rBuf.CleanupClosePushL();
+	CleanupStack::PopAndDestroy();
+}
+
+/**
+This function will intentionally leave to check cleanup of RBuf.
+To be called in debug build only. Otherwise will panic.
+*/
+template<class RBUF> LOCAL_C void TestRBufCleanupL(RBUF*)
+{
+	RBUF rBuf;
+
+	test.Next(_L("Test cleanup of RBuf"));
+	test(KErrNone == rBuf.Create(10));
+	rBuf.CleanupClosePushL();
+
+	__UHEAP_FAILNEXT(1);
+	TInt* ptr = (TInt*)User::AllocL(20); //This should leave
+	*ptr = 0; //Avoid compiler warning
+	User::Panic(_L("Should not reach this line"),0);
+}
+
+GLDEF_C TInt E32Main()
+    {
+	RBuf8* r8=0;
+	RBuf16* r16=0;
+	RBuf* r=0;
+
+	CTrapCleanup* trapHandler=CTrapCleanup::New();
+	test(trapHandler!=NULL);
+
+	test.Title();
+	test.Start(_L("Testing RBuf8, RBuf16 & RBuf classes"));
+
+	__UHEAP_MARK;
+
+	test.Start(_L("Testing class RBuf8 ..."));
+	TestCreate<RBuf8>(r8);
+	TestCreateLeaving<RBuf8>(r8);
+	TestCreateFromDes<RBuf8,TBuf8<11>,TText8>(r8);
+	TestCreateFromDesLeaving<RBuf8,TBuf8<11>,TText8>(r8);
+	TestSwap<RBuf8,TBuf8<11>,TText8>(r8);
+	TestAssign<RBuf8,TBuf8<11>,TText8,HBufC8>(r8);
+	TestReAlloc<RBuf8,TBuf8<11>,TText8,HBufC8>(r8);
+	TestReAllocLeaving<RBuf8,TBuf8<11>,TText8>(r8);
+	TestAssignmentOperator<RBuf8,TBuf8<32>,TBufC8<32>,TText8>();
+	TRAPD(ret,TestCleanupClosePushL<RBuf8>(r8)); test(ret==KErrNone);
+#if defined(_DEBUG)
+	TRAP(ret, TestRBufCleanupL<RBuf8>(r8)); test(KErrNoMemory == ret);
+#endif //(_DEBUG)
+	test.End();
+
+	test.Start(_L("Testing class RBuf16 ..."));
+	TestCreate<RBuf16>(r16);
+	TestCreateLeaving<RBuf16>(r16);
+	TestCreateFromDes<RBuf16,TBuf16<11>,TText16>(r16);
+	TestCreateFromDesLeaving<RBuf16,TBuf16<11>,TText16>(r16);
+	TestSwap<RBuf16,TBuf16<11>,TText16>(r16);
+	TestAssign<RBuf16,TBuf16<11>,TText16,HBufC16>(r16);
+	TestReAlloc<RBuf16,TBuf16<11>,TText16,HBufC16>(r16);
+	TestReAllocLeaving<RBuf16,TBuf16<11>,TText16>(r16);
+	TestAssignmentOperator<RBuf16,TBuf16<32>,TBufC16<32>,TText16>();
+	TRAP(ret,TestCleanupClosePushL<RBuf16>(r16)); test(ret==KErrNone);
+#if defined(_DEBUG)
+	TRAP(ret, TestRBufCleanupL<RBuf16>(r16)); test(KErrNoMemory == ret);
+#endif //(_DEBUG)
+	test.End();
+
+	test.Start(_L("Testing class RBuf ..."));
+	TestCreate<RBuf>(r);
+	TestCreateLeaving<RBuf>(r);
+	TestCreateFromDes<RBuf,TBuf<11>,TText>(r);
+	TestCreateFromDesLeaving<RBuf,TBuf<11>,TText>(r);
+	TestSwap<RBuf,TBuf<11>,TText>(r);
+	TestAssign<RBuf,TBuf<11>,TText,HBufC>(r);
+	TestReAlloc<RBuf,TBuf<11>,TText,HBufC>(r);
+	TestReAllocLeaving<RBuf,TBuf<11>,TText>(r);
+	TestAssignmentOperator<RBuf,TBuf<32>,TBufC<32>,TText>();
+	TRAP(ret,TestCleanupClosePushL<RBuf>(r)); test(ret==KErrNone);
+#if defined(_DEBUG)
+	TRAP(ret, TestRBufCleanupL<RBuf>(r)); test(KErrNoMemory == ret);
+#endif //(_DEBUG)
+	test.End();
+
+	__UHEAP_MARKEND;
+
+	test.End();
+
+	delete trapHandler;
+	return(KErrNone);
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/d_lddturnaroundtimertest.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,126 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\device\d_lddturnaoundtimertest.cpp
+* LDD for getting the timer count & ticks for testing turnaround timer implementation.
+*
+*/
+
+
+#include <kernel.h>
+#include "d_lddturnaroundtimertest.h"
+
+class DTest1;
+class DTestFactory : public DLogicalDevice
+//
+// Test LDD factory
+//
+	{
+public:
+	DTestFactory();
+	virtual TInt Install(); 					//overriding pure virtual
+	virtual void GetCaps(TDes8& aDes) const;	//overriding pure virtual
+	virtual TInt Create(DLogicalChannelBase*& aChannel); 	//overriding pure virtual
+	};
+
+class DTest1 : public DLogicalChannelBase
+//
+// Test logical channel
+//
+	{
+public:
+	virtual ~DTest1();
+protected:
+	virtual TInt DoCreate(TInt aUnit, const TDesC8* anInfo, const TVersion& aVer);
+	virtual TInt Request(TInt aReqNo, TAny* a1, TAny* a2);
+	};
+
+
+
+DECLARE_STANDARD_LDD()
+	{
+	return new DTestFactory;
+	}
+
+//
+// Constructor
+//
+DTestFactory::DTestFactory()
+	{
+
+	}
+
+TInt DTestFactory::Create(DLogicalChannelBase*& aChannel)
+	{
+//
+// Create new channel
+//
+	aChannel=new DTest1;
+	return aChannel?KErrNone:KErrNoMemory;
+	}
+
+TInt DTestFactory::Install()
+//
+// Install the LDD - overriding pure virtual
+//
+	{
+	return SetName(&KLddName);
+	}
+
+void DTestFactory::GetCaps(TDes8& /*aDes*/) const
+//
+// Get capabilities - overriding pure virtual
+//
+	{
+	}
+
+TInt DTest1::DoCreate(TInt /*aUnit*/, const TDesC8* /*aInfo*/, const TVersion& /*aVer*/)
+//
+// Create channel
+//
+	{
+	return KErrNone;
+	}
+
+DTest1::~DTest1()
+//
+// Destructor
+//
+	{
+	}
+
+TInt DTest1::Request(TInt aReqNo, TAny* a1, TAny* /*a2*/)
+	{
+//
+// Get the timer tick count & ticks
+//
+    TUint temp = 0;
+	switch(aReqNo)
+		{
+		case (RLddTest1::EGET_TIMERTICKS):
+			{
+			temp = (TInt)(*(TInt *)a1);
+			temp = NKern::TimerTicks(temp);
+			kumemput(a1, &temp, sizeof(temp));
+			return KErrNone;
+			}
+		case (RLddTest1::EGET_TIMERTICKCOUNT):
+			{
+			temp = NKern::TickCount();
+       		kumemput(a1, &temp, sizeof(temp));
+			return KErrNone;
+			}
+		}
+	return KErrNone;	
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/d_lddturnaroundtimertest.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\device\d_lddturnaroundtimetest.h
+*
+*/
+
+
+#if !defined(__DLDDTURNAROUNDTIMETEST_H__)
+#define __DLDDTURNAROUNDTIMETEST_H__
+
+#include <e32cmn.h>
+#ifndef __KERNEL_MODE__
+#include <e32std.h>
+#endif
+
+_LIT(KLddName,"TurnarountTimeTest");
+
+class RLddTest1 : public RBusLogicalChannel
+	{
+public:
+	enum TControl
+		{
+		EGET_TIMERTICKCOUNT = 0,
+		EGET_TIMERTICKS = 1
+		};
+
+public:
+	inline TInt Open();
+	inline TInt Test_getTimerTicks(TUint &time);
+	inline TInt Test_getTimerCount(TUint &time);
+	static inline TInt Unload();
+	};
+
+#include "d_lddturnaroundtimertest.inl"
+
+#endif   //__DLDDTURNAROUNDTIMETEST_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/d_lddturnaroundtimertest.inl	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\device\d_lddtunraroundtimetest.inl
+*
+*/
+
+
+#ifndef __KERNEL_MODE__
+inline TInt RLddTest1::Open()
+	{ return DoCreate(KLddName,TVersion(0,1,1),KNullUnit,NULL,NULL); }
+inline TInt RLddTest1::Test_getTimerTicks(TUint &time)
+	{ return DoControl(EGET_TIMERTICKS, (TAny *)&time); }
+inline TInt RLddTest1::Test_getTimerCount(TUint &time)
+    { return DoControl(EGET_TIMERTICKCOUNT, (TAny *)&time); }
+inline TInt RLddTest1::Unload()
+	{ return User::FreeLogicalDevice(KLddName); }
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/d_newldd.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,331 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <kern_priv.h>
+#include "d_newldd.h"
+#include "t_newldd.h"
+
+TInt DOperatorNewTest::Request(TInt aReqNo, TAny* /*a1*/, TAny* /*a2*/)
+	{
+	switch(aReqNo)
+		{
+		//new
+		case RNewLddTest::ENew:
+			{
+			return TestNew();
+			}
+		//placement new
+		case RNewLddTest::EPlacementVectorNew:
+			{
+			return TestPlacementVectorNew();
+			}
+		//vector new
+		case RNewLddTest::EVectorNew:
+			{
+			return TestVectorNew();
+			}
+		case RNewLddTest::EPlacementNew:
+			{
+			return TestPlacementNew();
+			}
+		default:
+			break;
+		}
+	return KErrNone;
+	}
+
+TInt DOperatorNewTest::TestNew()
+	{
+	Kern::Printf("::TestNew()");
+	NKern::ThreadEnterCS();
+
+	#define TEST_KERN_NEW_OOM(CLASS)\
+		{\
+		Kern::Printf("new " #CLASS);\
+		CLASS* p##CLASS=NULL;\
+		XTRAPD(r,XT_DEFAULT, p##CLASS = new CLASS);\
+		if(r!=KErrNone)\
+			{\
+			NKern::ThreadLeaveCS();\
+			return r;\
+			}\
+		if(p##CLASS)\
+			{\
+			delete p##CLASS;\
+			NKern::ThreadLeaveCS();\
+			return KErrGeneral;\
+			}\
+		}
+
+	//OOM tests: should(must) not throw
+	Kern::Printf("OOM Tests;");
+
+	TEST_KERN_NEW_OOM(XVeryLargeClassCtorAndDtor);
+	TEST_KERN_NEW_OOM(XVeryLargeClassCtorOnly);
+	TEST_KERN_NEW_OOM(XVeryLargeClassDtorOnly);
+	TEST_KERN_NEW_OOM(XVeryLargeClassNoTors);
+
+	Kern::Printf("non-OOM Tests;");
+	//Non-OOM:
+	
+	#define TEST_KERN_NEW(CLASS, TEST_CTOR)\
+		{\
+		Kern::Printf("new " #CLASS);\
+		CLASS* p##CLASS=NULL;\
+		XTRAPD(r,XT_DEFAULT, p##CLASS = new CLASS);\
+		if(r!=KErrNone)\
+			{\
+			NKern::ThreadLeaveCS();\
+			return r;\
+			}\
+		if(p##CLASS==NULL)\
+			{\
+			NKern::ThreadLeaveCS();\
+			return KErrGeneral;\
+			}\
+		volatile TBool testCtor=(TEST_CTOR);\
+		if(testCtor && (p##CLASS->iState!=EConstructed) )\
+			{\
+			r=KErrGeneral;\
+			}\
+		delete p##CLASS;\
+		p##CLASS=NULL;\
+		if(r!=KErrNone)\
+			return r;\
+		}
+
+	TEST_KERN_NEW(XCtorAndDtor, ETrue);
+	TEST_KERN_NEW(XCtorOnly, ETrue);
+	TEST_KERN_NEW(XDtorOnly, EFalse);
+	TEST_KERN_NEW(XNoTors, EFalse);
+	
+	NKern::ThreadLeaveCS();
+	return KErrNone;
+	}
+
+TInt DOperatorNewTest::TestPlacementNew()
+	{
+	Kern::Printf("::TestPlacementNew");
+
+	#define TEST_KERN_PLACEMENT_NEW(CLASS, POST_CTOR, POST_DTOR) \
+		{\
+		Kern::Printf("new(someram) " #CLASS);\
+		NKern::ThreadEnterCS();\
+		void* someram = Kern::AllocZ(sizeof(CLASS));\
+		NKern::ThreadLeaveCS();\
+		if(!someram)\
+			return KErrNoMemory;\
+		\
+		CLASS* p##CLASS = new (someram) CLASS;\
+		TInt r=KErrNone;\
+		if(p##CLASS->iState != POST_CTOR)\
+			{\
+			r=KErrGeneral;\
+			}\
+		if(r==KErrNone)\
+			{\
+			p##CLASS->~CLASS();\
+			if(p##CLASS->iState != POST_DTOR)\
+				{\
+				r=KErrGeneral;\
+				}\
+			}\
+		NKern::ThreadEnterCS();\
+		Kern::Free(someram);\
+		NKern::ThreadLeaveCS();\
+		if(r != KErrNone)\
+			return r;\
+		}
+
+	TEST_KERN_PLACEMENT_NEW(XCtorAndDtor, EConstructed, EDeconstructed);
+	TEST_KERN_PLACEMENT_NEW(XCtorOnly, EConstructed, EConstructed);
+	TEST_KERN_PLACEMENT_NEW(XDtorOnly, ENull, EDeconstructed);
+	TEST_KERN_PLACEMENT_NEW(XNoTors, ENull, ENull);
+	
+	return KErrNone;
+	}
+
+TInt DOperatorNewTest::TestPlacementVectorNew()
+	{
+	
+	Kern::Printf("::TestPlacementVectorNew");
+	
+	//for vector placement new, emulator compilers 
+	//allocate a cookie at start of buffer.
+	//this seems wrong since the cookie is an internal compiller
+	//detail which the user should not need to know about
+	#if defined(__WINSCW__) || defined(__VC32__)
+	Kern::Printf("Not running on emulator. WINSCW and Visual studio\n insert a cookie for placement vector new"); 
+
+	#else
+
+	#define TEST_KERN_PLACEMENT_VECTOR_NEW(CLASS, ARRAY_LENGTH, POST_CTOR, POST_DTOR) \
+		{\
+		NKern::ThreadEnterCS();\
+		void* someram = Kern::AllocZ(sizeof(CLASS) * (ARRAY_LENGTH));\
+		NKern::ThreadLeaveCS();\
+		if(someram==NULL)\
+			return KErrNoMemory;\
+		\
+		TInt r = KErrNone;\
+		Kern::Printf("new (someram) " #CLASS "[%d]", ARRAY_LENGTH);\
+		\
+		CLASS* p##CLASS = new (someram) CLASS[ARRAY_LENGTH];\
+		for(TInt i=0; i<(ARRAY_LENGTH); ++i)\
+			{\
+			if(p##CLASS[i].iState != POST_CTOR)\
+				{\
+				r=KErrGeneral;\
+				break;\
+				}\
+			p##CLASS[i].~CLASS();\
+			if(p##CLASS[i].iState != POST_DTOR)\
+				{\
+				r=KErrGeneral;\
+				break;\
+				}\
+			}\
+		NKern::ThreadEnterCS();\
+		Kern::Free(someram);\
+		NKern::ThreadLeaveCS();\
+		if(r!=KErrNone)\
+			return r;\
+		}\
+	
+	TEST_KERN_PLACEMENT_VECTOR_NEW(XCtorAndDtor, KTestArrayLength, EConstructed, EDeconstructed);
+	TEST_KERN_PLACEMENT_VECTOR_NEW(XCtorOnly, KTestArrayLength, EConstructed, EConstructed);
+	TEST_KERN_PLACEMENT_VECTOR_NEW(XDtorOnly, KTestArrayLength, ENull, EDeconstructed);
+	TEST_KERN_PLACEMENT_VECTOR_NEW(XNoTors, KTestArrayLength, ENull, ENull);
+
+	#endif
+
+	return KErrNone;
+	}
+TInt DOperatorNewTest::TestVectorNew()
+	{
+	//OOM testing
+	Kern::Printf("::TestVectorNew()");
+	Kern::Printf("OOM test");
+	
+	TInt r=KErrNone;
+
+	#define TEST_KERN_VECTOR_NEW_OOM(CLASS, ARRAY_LENGTH)\
+	{\
+		Kern::Printf("new " #CLASS "[%d]", ARRAY_LENGTH);\
+		CLASS* p##CLASS = NULL;\
+		NKern::ThreadEnterCS();\
+		XTRAP(r,XT_DEFAULT,p##CLASS = new CLASS[ARRAY_LENGTH]; );\
+		if(p##CLASS)\
+			{\
+			r=KErrGeneral;\
+			delete p##CLASS;\
+			}\
+		NKern::ThreadLeaveCS();\
+		if(r!=KErrNone)\
+			{\
+			return r;\
+			}\
+	}\
+
+	TEST_KERN_VECTOR_NEW_OOM(XCtorAndDtor, KOOMArraySize);
+	TEST_KERN_VECTOR_NEW_OOM(XCtorOnly, KOOMArraySize);
+	TEST_KERN_VECTOR_NEW_OOM(XDtorOnly, KOOMArraySize);
+	TEST_KERN_VECTOR_NEW_OOM(XNoTors, KOOMArraySize);
+
+	
+	//non-OOM:
+	Kern::Printf("non-OOM test");
+
+	#define TEST_KERN_VECTOR_NEW(CLASS, ARRAY_LENGTH, TEST_CTOR)\
+	{\
+		Kern::Printf("new " #CLASS "[%d]", ARRAY_LENGTH);\
+		CLASS* p##CLASS = NULL;\
+		NKern::ThreadEnterCS();\
+		XTRAP(r,XT_DEFAULT,p##CLASS = new CLASS[ARRAY_LENGTH]; );\
+		NKern::ThreadLeaveCS();\
+		if(p##CLASS == NULL)\
+			{\
+			return KErrNoMemory;\
+			}\
+		\
+		TBool testCtor=(TEST_CTOR);\
+		if(testCtor)\
+			{\
+			for(TInt i=0; i<(ARRAY_LENGTH); ++i)\
+				{\
+				if(p##CLASS[i].iState!=	EConstructed)\
+					{\
+					r=KErrGeneral;\
+					break;\
+					}\
+				}\
+			}\
+		\
+		NKern::ThreadEnterCS();\
+		delete[] p##CLASS;\
+		NKern::ThreadLeaveCS();\
+		p##CLASS=NULL;\
+		if(r!=KErrNone)\
+			{\
+			return r;\
+			}\
+	}\
+
+	TEST_KERN_VECTOR_NEW(XCtorAndDtor, KTestArrayLength, ETrue);
+	TEST_KERN_VECTOR_NEW(XCtorOnly, KTestArrayLength, ETrue);
+	TEST_KERN_VECTOR_NEW(XDtorOnly, KTestArrayLength, EFalse);
+	TEST_KERN_VECTOR_NEW(XNoTors, KTestArrayLength, EFalse);
+
+	return KErrNone;
+	}
+
+TInt DOperatorNewTestFactory::Create(DLogicalChannelBase*& aChannel)
+//
+// Create a new DTest on this logical device
+//
+	{
+	aChannel=new DOperatorNewTest();
+	return aChannel?KErrNone:KErrNoMemory;
+	}
+
+TInt DOperatorNewTestFactory::Install()
+//
+// Install the LDD - overriding pure virtual
+//
+	{
+	iVersion = TVersion(0,1,1);
+	return SetName(&KLddName);
+	}
+
+void DOperatorNewTestFactory::GetCaps(TDes8& /*aDes*/) const
+//
+// Get capabilities - overriding pure virtual
+//
+	{
+	//not supported
+	}
+
+
+
+DECLARE_STANDARD_LDD()
+	{
+	//create factory here.
+	return new DOperatorNewTestFactory;
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/d_newldd.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* LDD for testing operator new kernel side
+*
+*/
+
+
+#ifndef __D_NEWLDD_H
+#define __D_NEWLDD_H
+
+#include <kernel.h>
+#include <e32cmn.h>
+
+#include "t_new_classes.h"
+
+
+
+class DOperatorNewTestFactory : public DLogicalDevice
+{
+public:
+	TInt Install();
+	void GetCaps(TDes8& aDes) const;
+	TInt Create(DLogicalChannelBase*& aChannel);
+};
+
+class DOperatorNewTest : public DLogicalChannelBase
+{
+public:
+	virtual TInt Request(TInt aReqNo, TAny* a1, TAny* a2);
+private:
+	TInt TestNew();
+	TInt TestPlacementNew();
+	TInt TestPlacementVectorNew();
+	TInt TestVectorNew();
+};
+
+
+#endif //__D_NEWLDD_H
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/t_new_classes.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,63 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "t_new_classes.h"
+
+XCtorAndDtor::XCtorAndDtor()
+	{
+	iState = EConstructed;
+	}
+XCtorAndDtor::~XCtorAndDtor()
+	{
+	iState = EDeconstructed;
+	}
+
+
+XCtorOnly::XCtorOnly()
+	{
+	iState = EConstructed;
+	}
+
+
+XDtorOnly::~XDtorOnly()
+	{
+	iState = EDeconstructed;
+	}
+
+
+XVeryLargeClassCtorAndDtor::XVeryLargeClassCtorAndDtor()
+	{
+	iBust[0] = EConstructed;
+	}
+XVeryLargeClassCtorAndDtor::~XVeryLargeClassCtorAndDtor()
+	{
+	iBust[0] = EDeconstructed;
+	}
+
+
+XVeryLargeClassCtorOnly::XVeryLargeClassCtorOnly()
+	{
+	iBust[0] = EConstructed;
+	}
+
+
+XVeryLargeClassDtorOnly::~XVeryLargeClassDtorOnly()
+	{
+	iBust[0] = EDeconstructed;
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/t_new_classes.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef T_NEW_CLASSES
+#define T_NEW_CLASSES
+
+#include <e32cmn.h>
+
+/**
+A flag to record what part of lifecylce an object is in
+*/
+enum TObjState
+	{
+	ENull = 0,
+	EConstructed = 1,
+	EDeconstructed = 2
+	};
+
+class XCtorAndDtor
+	{
+public:
+	XCtorAndDtor();
+	~XCtorAndDtor();
+	TObjState iState;
+	};
+
+class XCtorOnly
+	{
+public:
+	XCtorOnly();
+	TObjState iState;
+	};
+
+class XDtorOnly
+	{
+public:
+	~XDtorOnly();
+	TObjState iState;
+	};
+
+class XNoTors
+	{
+public:
+	TObjState iState;
+	};
+
+//A buffer length for an object so large that we always
+//expect allocation to fail.
+const TInt KOOMBufferLength=10000000;
+
+class XVeryLargeClassCtorAndDtor
+	{
+public:
+	XVeryLargeClassCtorAndDtor();
+	~XVeryLargeClassCtorAndDtor();
+	TInt iBust[KOOMBufferLength];
+	};
+
+class XVeryLargeClassCtorOnly
+	{
+public:
+	XVeryLargeClassCtorOnly();
+	TInt iBust[KOOMBufferLength];
+	};
+
+class XVeryLargeClassDtorOnly
+	{
+public:
+	~XVeryLargeClassDtorOnly();
+	TInt iBust[KOOMBufferLength];
+	};
+
+class XVeryLargeClassNoTors
+	{
+public:
+	TInt iBust[KOOMBufferLength];
+	};
+
+#endif //T_NEW_CLASSES
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/device/t_newldd.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef __T_NEWLDD_H
+#define __T_NEWLDD_H
+
+_LIT(KLddName,"OperatorNewTest");
+_LIT(KKInstallLddName,"d_newldd");
+
+
+const TInt KErrException = -99;
+const TInt KTestArrayLength = 100; ///< A sensible array length to test vector new with
+const TInt KOOMArraySize = 100000000; ///<An array size so big that array allocation should always fail
+
+class RNewLddTest : public RBusLogicalChannel
+{
+public:
+	enum TControl
+         {
+         ENew=0,
+         EPlacementVectorNew=1,
+         EVectorNew=2,
+         EPlacementNew=3
+         };
+	
+	TInt DoControl(TInt aFunction);
+	TInt Open();
+};
+
+#endif // __T_NEWLDD_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/group/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+BASEDEFAULT
+
+PRJ_MMPFILES
+d_newldd
+d_lddturnaroundtimertest
+t_sharedio3
+t_rbuf
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/group/d_lddturnaroundtimertest.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\group\d_lddturnaroundtimertest.mmp
+*
+*/
+
+
+#include "kernel/kern_ext.mmh"
+
+TARGET         d_lddturnaroundtimertest.ldd
+TARGETTYPE     LDD
+SOURCEPATH     ../device
+SOURCE         d_lddturnaroundtimertest.cpp
+
+
+EPOCALLOWDLLDATA
+
+UID		0x100000af
+VENDORID 0x70000001
+
+
+capability		all
+
+start wins
+win32_headers
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/group/d_newldd.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\group\d_newldd.mmp
+*
+*/
+
+ 
+#include "kernel/kern_ext.mmh"
+
+TARGET         d_newldd.ldd
+TARGETTYPE     LDD
+SOURCEPATH      ../device
+SOURCE         d_newldd.cpp t_new_classes.cpp
+ 
+start wins
+
+win32_library			kernel32.lib user32.lib gdi32.lib
+#if defined(VC32)
+win32_library			msvcrt.lib
+#endif
+
+
+end
+
+EPOCALLOWDLLDATA
+
+UID             0x100000af
+VENDORID 0x70000001
+ 
+capability              all
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/group/t_rbuf.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\group\t_rbuf.mmp
+*
+*/
+
+
+TARGET         t_rbuf.exe        
+TARGETTYPE     EXE
+SOURCEPATH	../buffer
+SOURCE         t_rbuf.cpp
+LIBRARY        euser.lib
+SYSTEMINCLUDE  /epoc32/include
+EPOCSTACKSIZE  0x3000
+
+capability		all
+
+VENDORID 0x70000001
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/group/t_sharedio3.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\group\t_sharedio3.mmp
+*
+*/
+
+
+target			t_sharedio3.exe        
+targettype		exe
+sourcepath		../mmu
+source			t_sharedio.cpp
+library			euser.lib
+systeminclude	/epoc32/include
+epocfixedprocess
+
+epocheapsize	0x1000 0x00010000
+
+capability		all
+macro			__SECOND_FIXED__
+VENDORID 0x70000001
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/mmu/d_sharedio.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\mmu\d_sharedio.h
+*
+*/
+
+
+#ifndef __D_SLDD_H__
+#define __D_SLDD_H__
+#include <e32cmn.h>
+#ifndef __KERNEL_MODE__
+#include <e32std.h>
+#endif
+
+const TInt KSizeGlobalBuffer=0x2000;
+const TInt KMagic1=12345;
+const TInt KMagic2=54321;
+
+class RTestLdd : public RBusLogicalChannel
+	{
+public:
+	enum TControl
+		{
+		ECreateBuffer,
+		EMapInGlobalBuffer,
+		EMapOutGlobalBuffer,
+		EDestroyGlobalBuffer,
+		ECreateBufferPhysAddr,
+		EDestroyBufferPhysAddr,
+		EMapInBuffer,
+		EMapOutBuffer,
+		EDestroyBuffer,
+		ECheckBuffer,
+		EFillBuffer,
+		EThreadRW
+		};
+public:
+	inline TInt Open();
+	inline TInt CreateBuffer(TInt aLength);
+	inline TInt MapInGlobalBuffer(TUint aProcessId,TAny*& aAddress,TUint32& aLength);
+	inline TInt MapOutGlobalBuffer();
+	inline TInt DestroyGlobalBuffer();
+	inline TInt CreateBufferPhysAddr(TInt aLength);
+	inline TInt DestroyBufferPhysAddr();
+	inline TInt MapInBuffer(TAny** aAddress,TUint32* aLength);
+	inline TInt MapOutBuffer();
+	inline TInt DestroyBuffer();
+	inline TInt CheckBuffer(TUint32 key);
+	inline TInt FillBuffer(TUint32 key);
+	inline TInt ThreadRW(TDes8& aDes,TInt aThreadId=-1);
+	};
+
+_LIT(KSharedIoTestLddName,"D_SHAREDIO");
+
+#ifndef __KERNEL_MODE__
+inline TInt RTestLdd::Open()
+	{ return DoCreate(KSharedIoTestLddName,TVersion(),KNullUnit,NULL,NULL); }
+inline TInt RTestLdd::CreateBuffer(TInt aLength)
+	{ return DoControl(ECreateBuffer,(TAny*)aLength); }
+inline TInt RTestLdd::MapInGlobalBuffer(TUint aProcessId,TAny*& aAddress,TUint32& aLength)
+	{
+	TUint a = aProcessId;
+	TInt r=DoControl(EMapInGlobalBuffer,&a,&aLength);
+	aAddress = (TAny*)a;
+	return r;
+	}
+inline TInt RTestLdd::MapOutGlobalBuffer()
+	{ return DoControl(EMapOutGlobalBuffer); }
+inline TInt RTestLdd::DestroyGlobalBuffer()
+	{ return DoControl(EDestroyGlobalBuffer); }
+inline TInt RTestLdd::CreateBufferPhysAddr(TInt aLength)
+	{ return DoControl(ECreateBufferPhysAddr,(TAny*)aLength);	}
+inline TInt RTestLdd::DestroyBufferPhysAddr()
+	{ return DoControl(EDestroyBufferPhysAddr); }
+inline TInt RTestLdd::MapInBuffer(TAny** aAddress,TUint32* aLength)
+	{ return DoControl(EMapInBuffer,aAddress,aLength); }
+inline TInt RTestLdd::MapOutBuffer()
+	{ return DoControl(EMapOutBuffer); }
+inline TInt RTestLdd::DestroyBuffer()
+	{ return DoControl(EDestroyBuffer); }
+inline TInt RTestLdd::CheckBuffer(TUint32 key)
+	{ return DoControl(ECheckBuffer,(TAny*)key); }
+inline TInt RTestLdd::FillBuffer(TUint32 key)
+	{ return DoControl(EFillBuffer,(TAny*)key); }
+inline TInt RTestLdd::ThreadRW(TDes8& aDes,TInt aThreadId)
+	{ return DoControl(EThreadRW,(TAny*)&aDes,(TAny*)aThreadId); }
+#endif
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/mmu/freeram.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\mmu\freeram.h
+*
+*/
+
+
+#ifndef __FREERAM_H__
+#define __FREERAM_H__
+
+//
+// returns the free RAM in bytes
+//
+inline TInt FreeRam()
+	{
+	// wait for any async cleanup in the supervisor to finish first...
+	UserSvr::HalFunction(EHalGroupKernel, EKernelHalSupervisorBarrier, 0, 0);
+
+	TMemoryInfoV1Buf meminfo;
+	UserHal::MemoryInfo(meminfo);
+	return meminfo().iFreeRamInBytes;
+	}
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp4/mmu/t_sharedio.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,665 @@
+/*
+* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\mmu\t_sharedio.cpp
+* Overview:
+* Verifies the correct implementation of Shared IO Buffers
+* API information:
+* DSharedIoBuffer
+* Details:
+* 1. Loading the shared IO buffer test device driver
+* 2. Create buffer of a specified size
+* - it passes a request to the device driver to create a buffer
+* - the driver creates a shared io buffer and it zero fills it
+* - it checks the size is as specified
+* 3. Map in buffer
+* - it passes a request to the device driver to map the buffer created at
+* step 1 into this user process
+* - the driver maps the buffer into this user process
+* - checks if UserToKernel and KernelToUser methods work as expected
+* - fills a buffer
+* - returns the user address and size to the user process
+* - using the address and size returned by the driver, the user process
+* checks the buffer is filled as expected
+* 4. Fill and check shared buffer
+* - user process fills the buffer and driver checks it
+* - driver fills the buffer and user process checks it
+* 5. Map Out Buffer
+* - requests to the driver that the buffer should be unmapped from this
+* process' address space
+* - the driver checks that iUserAddress becomes NULL after unmapping
+* 6. Destroy Buffer
+* - requests to the driver to destroy the buffer
+* 7. Create a buffer with a physical address
+* (not performed on WINS)
+* - requests to the driver to create a buffer by specifying a physical address
+* - the driver allocates a physical address
+* - creates a shared IO buffer over that physical address
+* - fills the buffer with a pattern
+* - destroys the buffer
+* - creates a hardware chunk over the same physical address
+* - checks the buffer contains the pattern
+* - closes the chunk
+* 8. Check using the same buffer by 2 different user processes
+* (not performed on WINS)
+* - process 1 maps a global buffer (the global buffer will be
+* created in the context of process 1)
+* - fills it
+* - unmaps it
+* - process 2 maps the global buffer
+* - checks if it's filled accordingly
+* - unmaps it
+* - destroys the global buffer
+* 9. Checking buffers are protected at context switching
+* (not relevant on WINS)
+* - creates a shared buffer and map it into this process
+* - creates a new process
+* - the new process tries to access the buffer mapped into the first process
+* by zeroing the raw buffer passed from the first process. This relies on the
+* fact that each shared buffer is created in the Home Section, so they will be
+* available at the same address
+* - tests if the new process was panicked due to access violation
+* - tests if the contents of the buffer haven't been changed
+* 10.Checking writing to unmapped buffer
+* (not performed on WINS)
+* - creates a new process
+* - the new process creates a buffer, maps it and unmaps it
+* - the new process tries to use the buffer after unmapping
+* - the parent process logs the exit type and reason and checks
+* these are EExitPanic and 3 (Kern 3 - access violation)
+* 11.Checking address lookup is implemented
+* (not relevant on WINS)
+* - creates a new process
+* - the new process will ask the device driver to read and write a descriptor
+* in the old process, the kernel will perform an address lookup before
+* reading or writing the descriptor, to make sure the address location does
+* belong to the old process. The descriptor is a TPtr pointing to a buffer
+* located in a shared io buffer.
+* - device driver will return an error in case address lookup fails or ThreadRead
+* or ThreadWrite fail
+* - the new process returns the error code returned by the device driver
+* - the old process tests for the exit code for the new process being KErrNone and
+* that the thread is not panicked, and also that the values written and read
+* are those expected.
+* 12.Closing test driver
+* - Trivial, but it will test if a created & mapped shared io buffer gets released
+* successfully when the logical channel is closed (which in turn will delete the
+* shared io buffer associated with the channel)
+* The test comes in 4 flavours, in order to test memory protection when context switching
+* between different types of processes.
+* T_SHAREDIO:
+* Main process is a moving process which creates another moving process.
+* T_SHAREDIO2:
+* Main process is a fixed process which creates a moving process.
+* T_SHAREDIO3:
+* Main process is a fixed process which creates another fixed process.
+* T_SHAREDIO4:
+* Main process is a moving process which creates a fixed process.
+* Platforms/Drives/Compatibility:
+* All (some steps will not be performed on emulator)
+* Assumptions/Requirement/Pre-requisites:
+* The test needs D_SHAREDIO.LDD, the device driver that actually operates the API. 
+* Failures and causes:
+* Failures of this test will indicate defects in the implementation of Shared Io Buffers.
+* Base Port information:
+* No?
+*
+*/
+
+
+#define __E32TEST_EXTENSION__
+
+#include <e32test.h>
+#include <e32math.h>
+#include "d_sharedio.h"
+#include <e32hal.h>
+#include <u32std.h>
+#include <u32hal.h>
+#include <e32svr.h>
+#include <f32dbg.h>
+#include "freeram.h"
+
+LOCAL_D RTest test(_L("T_SHAREDIO"));
+
+const TInt KTestBufferSize = 0x100000;
+
+TUint MemModelAttributes;
+TBool PhysicalCommitSupported;
+
+RTestLdd ldd;
+
+TUint32 TestBufferSizes[]={0x1000, 0x10453, 0x100000, 0x100001, 0x203000, 0};
+
+TInt checkBuffer(TAny* buffer, TUint32 aSize, TUint32 key)
+	{
+	TInt r=KErrNone;
+	TUint8* m=(TUint8*)buffer;
+	for(TUint32 size=0;size<aSize;size++,key+=5,m++)
+		{
+		if(*m!=(TUint8)(key%256))
+			{
+			r=KErrCorrupt;
+			break;
+			}
+		}
+	return r;
+	}
+
+TInt fillBuffer(TAny* buffer, TUint32 aSize, TUint32 key)
+	{
+	TUint8* m=(TUint8*)buffer;
+	for(TUint32 size=0;size<aSize;size++,key+=5,m++)
+		{
+		*m=(TUint8)(key%256);
+		}
+	return KErrNone;
+	}
+
+TBool CheckBuffer(TAny* aBuffer,TInt aSize)
+	{
+	TAny** p = (TAny**)aBuffer;
+	TAny** end = (TAny**)((TInt)p+aSize);
+	while(p<end)
+		{
+		if(*p!=p)
+			return EFalse;
+		++p;
+		}
+	return ETrue;
+	}
+
+enum TTestProcessFunctions
+	{
+	ETestProcess1,
+	ETestProcess2,
+	ETestProcess3,
+	};
+
+class RTestProcess : public RProcess
+	{
+public:
+	void Create(TTestProcessFunctions aFunction,TInt aArg1=-1,TInt aArg2=-1);
+	};
+
+void RTestProcess::Create(TTestProcessFunctions aFunction,TInt aArg1,TInt aArg2)
+	{
+	if(aArg1==-1)
+		aArg1 = RProcess().Id();
+	TBuf<512> commandLine;
+	commandLine.Num((TInt)aFunction);
+	commandLine.Append(_L(" "));
+	commandLine.AppendNum(aArg1);
+	commandLine.Append(_L(" "));
+	commandLine.AppendNum(aArg2);
+#ifdef __FIXED__
+	//fixed process creating a moving process
+	TFileName filename(RProcess().FileName());
+	TInt pos=filename.LocateReverse(TChar('\\'));
+	filename.SetLength(pos+1);
+	filename+=_L("T_SHAREDIO.EXE");
+	TInt r = RProcess::Create(filename,commandLine);
+#else
+#ifdef __SECOND_FIXED__
+	//fixed process creating another fixed process
+	TFileName filename(RProcess().FileName());
+	TInt pos=filename.LocateReverse(TChar('\\'));
+	filename.SetLength(pos+1);
+	filename+=_L("T_SHAREDIO2.EXE");
+	TInt r = RProcess::Create(filename,commandLine);
+#else
+#ifdef __MOVING_FIXED__
+	//moving process creating a fixed process
+	TFileName filename(RProcess().FileName());
+	TInt pos=filename.LocateReverse(TChar('\\'));
+	filename.SetLength(pos+1);
+	filename+=_L("T_SHAREDIO2.EXE");
+	TInt r = RProcess::Create(filename,commandLine);
+#else
+	//moving process creating a moving process
+	TInt r = RProcess::Create(RProcess().FileName(),commandLine);
+#endif
+#endif
+#endif
+	test(r==KErrNone);
+	SetJustInTime(EFalse);
+	}
+
+const TInt KProcessRendezvous = KRequestPending+1;
+
+TInt DoTestProcess(TInt aTestNum,TInt aArg1,TInt aArg2)
+	{
+	(void)aArg1;
+	(void)aArg2;
+
+	RTestLdd ldd;
+	TInt r;
+	r=User::LoadLogicalDevice(KSharedIoTestLddName);
+	if(r!=KErrNone && r!=KErrAlreadyExists)
+		return KErrGeneral;
+	r=ldd.Open();
+	if(r!=KErrNone)
+		return r;
+
+	switch(aTestNum)
+		{
+	case ETestProcess1:
+		{
+		TAny* gbuffer;
+		TUint32 gsize;
+		r=User::GetTIntParameter(1,(TInt&)gbuffer);
+		if(r!=KErrNone)
+			return r;
+		r=User::GetTIntParameter(2,(TInt&)gsize);
+		if(r!=KErrNone)
+			return r;
+
+		r=checkBuffer(gbuffer,gsize,23454);
+		if(r!=KErrNone)
+			return r;
+		r=ldd.MapOutGlobalBuffer();
+		if(r!=KErrNone)
+			return r;
+
+		r=ldd.CreateBuffer(KTestBufferSize);
+		if(r!=KErrNone)
+			return r;
+
+		TAny* buffer;
+		TUint32 size;
+		r=ldd.MapInBuffer(&buffer,&size);
+		if(r!=KErrNone)
+			return r;
+
+		if(!CheckBuffer(buffer,size))
+			return KErrGeneral;
+
+		r=ldd.MapOutBuffer();
+		if(r!=KErrNone)
+			return r;
+
+		RProcess::Rendezvous(KProcessRendezvous);
+
+		*(TInt*)buffer = 0;   // Should cause exception
+		break;
+		}
+	case ETestProcess2:
+		{
+		TInt size=aArg2;
+		TUint8* p=(TUint8*)aArg1;
+
+		RProcess::Rendezvous(KProcessRendezvous);
+		for(TInt i=0;i<size;i++)
+			p[i]=0; // Should cause exception
+		break;
+		}
+	case ETestProcess3:
+		{
+		TAny* buffer;
+		TUint32 size;
+
+		r=ldd.CreateBuffer(KTestBufferSize);
+		if(r!=KErrNone)
+			return r;
+
+		r=ldd.MapInBuffer(&buffer,&size);
+		if(r!=KErrNone)
+			return r;
+
+		if(!CheckBuffer(buffer,size))
+			return KErrGeneral;
+
+		*(TInt*)buffer=KMagic1;
+		TPckg<TInt> buf(*(TInt*)buffer);
+		r=ldd.ThreadRW(buf);
+		if(r!=KErrNone)
+			return r;
+
+		if(*(TInt*)buffer!=KMagic2)
+			return KErrCorrupt;
+
+		r=ldd.ThreadRW(*(TDes8*)aArg1,aArg2);
+		if(r!=KErrNone)
+			return r;
+		
+		r=ldd.MapOutBuffer();
+		if(r!=KErrNone)
+			return r;
+
+		break;
+		}
+	default:
+		User::Panic(_L("T_SHAREDIO"),1);
+		}
+
+	ldd.Close();	
+	return KErrNone;
+	}
+
+void CreateWithOOMCheck(TInt aSize, TBool aPhysicalAddress)
+	{
+	TInt failResult=KErrGeneral;
+
+	TInt freeRam = FreeRam(); //This will also add a delay
+
+	for(TInt failCount=1; failCount<1000; failCount++)
+		{
+		test.Printf(_L("alloc fail count = %d\n"),failCount);
+
+		User::__DbgSetAllocFail(ETrue,RAllocator::EFailNext,failCount);
+		__KHEAP_MARK;
+		
+		if (aPhysicalAddress)
+			failResult=ldd.CreateBufferPhysAddr(aSize);
+		else
+			failResult=ldd.CreateBuffer(aSize);
+
+		if(failResult==KErrNone)
+			break;
+
+		test(failResult==KErrNoMemory);
+		__KHEAP_MARKEND;
+
+		test(freeRam == FreeRam());  //This will also add a delay
+		}
+	User::__DbgSetAllocFail(ETrue,RAllocator::ENone,0);
+	__KHEAP_RESET;
+
+	test.Next(_L("Destroy buffer"));
+	if (aPhysicalAddress)
+		ldd.DestroyBufferPhysAddr();
+	else
+		ldd.DestroyBuffer();
+	
+	test(freeRam == FreeRam());  //This will also add a delay
+	}
+
+GLDEF_C TInt E32Main()
+    {
+	TBuf16<512> cmd;
+	User::CommandLine(cmd);
+	if(cmd.Length() && TChar(cmd[0]).IsDigit())
+		{
+		TInt function = -1;
+		TInt arg1 = -1;
+		TInt arg2 = -1;
+		TLex lex(cmd);
+		lex.Val(function);
+		lex.SkipSpace();
+		lex.Val(arg1);
+		lex.SkipSpace();
+		lex.Val(arg2);
+		return DoTestProcess(function,arg1,arg2);
+		}
+
+	MemModelAttributes=UserSvr::HalFunction(EHalGroupKernel, EKernelHalMemModelInfo, NULL, NULL);
+	TUint mm=MemModelAttributes&EMemModelTypeMask;
+	PhysicalCommitSupported = mm!=EMemModelTypeDirect && mm!=EMemModelTypeEmul;
+
+// Turn off lazy dll unloading
+	RLoader l;
+	test(l.Connect()==KErrNone);
+	test(l.CancelLazyDllUnload()==KErrNone);
+	l.Close();
+
+	test.Title();
+
+	test.Start(_L("Loading test driver..."));
+
+	TInt r;
+	r=User::LoadLogicalDevice(KSharedIoTestLddName);
+	test(r==KErrNone || r==KErrAlreadyExists);
+	r=User::LoadLogicalDevice(KSharedIoTestLddName);
+	test(r==KErrAlreadyExists);
+	r=ldd.Open();
+	test(r==KErrNone);
+
+	TAny* buffer;
+	TUint32 size;
+	TUint32 key;
+
+	TInt testBufferSize=0;
+	for(; TestBufferSizes[testBufferSize]!=0; ++testBufferSize)
+		{
+		test.Printf(_L("Test buffer size = %08x\n"),TestBufferSizes[testBufferSize]);
+
+		test.Next(_L("Create buffer"));
+		r=ldd.CreateBuffer(TestBufferSizes[testBufferSize]);
+		if(r!=KErrNone)
+			test.Printf(_L("Creating buffer failed client r=%d"), r);
+		test(r==KErrNone);
+
+		test.Next(_L("Map In Buffer"));
+		r=ldd.MapInBuffer(&buffer,&size);
+		
+		test.Next(_L("CheckBuffer"));
+		test(CheckBuffer(buffer,size));
+		test(r==KErrNone);
+		test.Next(_L("Fill and check shared buffer"));
+		key=Math::Random();
+		fillBuffer(buffer,size,key);
+		test(ldd.CheckBuffer(key)==KErrNone);
+
+		key=Math::Random();
+		test(ldd.FillBuffer(key)==KErrNone);
+		test(checkBuffer(buffer,size,key)==KErrNone);
+
+		test.Next(_L("Map Out Buffer"));
+		r=ldd.MapOutBuffer();
+		test(r==KErrNone);
+
+		test.Next(_L("Destroy Buffer"));
+		r=ldd.DestroyBuffer();
+		test(r==KErrNone);
+
+		test.Next(_L("Create a buffer under OOM conditions"));
+		CreateWithOOMCheck(TestBufferSizes[testBufferSize], EFalse);
+
+		if(PhysicalCommitSupported)
+			{
+			test.Next(_L("Create a buffer with a physical address under OOM conditions"));
+			CreateWithOOMCheck(TestBufferSizes[testBufferSize], ETrue);
+
+			test.Next(_L("Create a buffer with a physical address"));
+			r=ldd.CreateBufferPhysAddr(0x1000);
+			test(r==KErrNone);
+
+			test.Next(_L("Map In physical address Buffer"));
+			r=ldd.MapInBuffer(&buffer,&size);
+			test(r==KErrNone);
+
+			test.Next(_L("Fill and check physical address shared buffer"));
+			key=Math::Random();
+			fillBuffer(buffer,size,key);
+			test(ldd.CheckBuffer(key)==KErrNone);
+
+			key=Math::Random();
+			test(ldd.FillBuffer(key)==KErrNone);
+			test(checkBuffer(buffer,size,key)==KErrNone);
+
+			test.Next(_L("Map Out physical address Buffer"));
+			r=ldd.MapOutBuffer();
+			test(r==KErrNone);
+
+			test.Next(_L("Destroy a buffer with a physical address"));
+			r=ldd.DestroyBufferPhysAddr();
+			test(r==KErrNone);
+		}
+
+		test.Next(_L("Check using the same buffer by 2 different user processes"));
+		TAny* gbuffer;
+		TUint32 gsize;
+		r=ldd.MapInGlobalBuffer(RProcess().Id(),gbuffer,gsize);
+		test(r==KErrNone);
+
+		fillBuffer(gbuffer,gsize,23454);
+
+		r=ldd.MapOutGlobalBuffer();
+		test(r==KErrNone);
+
+		r=ldd.CreateBuffer(TestBufferSizes[testBufferSize]);
+		test(r==KErrNone);
+
+		r=ldd.MapInBuffer(&buffer,&size);
+		test(r==KErrNone);
+
+		test(CheckBuffer(buffer,size));
+
+		key=Math::Random();
+		fillBuffer(buffer,size,key);
+		test(ldd.CheckBuffer(key)==KErrNone);
+
+		RTestProcess rogueP;
+		TRequestStatus rendezvous;
+		TRequestStatus logon;
+
+		if(MemModelAttributes&EMemModelAttrProcessProt)
+			{
+			test.Next(_L("Checking buffers are protected at context switching"));
+			rogueP.Create(ETestProcess2,(TInt)buffer,(TInt)size);
+			rogueP.Logon(logon);
+			rogueP.Rendezvous(rendezvous);
+			rogueP.Resume();
+			User::WaitForRequest(rendezvous);
+			test(rendezvous==KProcessRendezvous);
+			User::WaitForRequest(logon);
+			test(rogueP.ExitType()==EExitPanic);
+			test(logon==3);
+			test(ldd.CheckBuffer(key)==KErrNone);
+			}
+
+		r=ldd.MapOutBuffer();
+		test(r==KErrNone);
+
+		r=ldd.DestroyBuffer();
+		test(r==KErrNone);
+
+		RTestProcess process;
+
+		if((MemModelAttributes&EMemModelAttrKernProt) && (MemModelAttributes&EMemModelTypeMask)!=EMemModelTypeDirect)
+			{
+			test.Next(_L("Checking writing to unmapped buffer"));
+			process.Create(ETestProcess1);
+			process.Logon(logon);
+			process.Rendezvous(rendezvous);
+			test(ldd.MapInGlobalBuffer(process.Id(),gbuffer,gsize)==KErrNone);
+			test(process.SetParameter(1,(TInt)gbuffer)==KErrNone);
+			test(process.SetParameter(2,(TInt)gsize)==KErrNone);
+			process.Resume();
+			User::WaitForRequest(rendezvous);
+			test(rendezvous==KProcessRendezvous);
+			User::WaitForRequest(logon);
+			test(process.ExitType()==EExitPanic);
+			test(logon==3);
+			process.Close();
+			}
+
+		r=ldd.CreateBuffer(TestBufferSizes[testBufferSize]);
+		if(r!=KErrNone)
+			return r;
+
+		r=ldd.MapInBuffer(&buffer,&size);
+		if(r!=KErrNone)
+			return r;
+
+		if(!CheckBuffer(buffer,size))
+			return KErrGeneral;
+
+		*(TInt*)buffer=KMagic1;
+		TPckg<TInt> buf(*(TInt*)buffer);
+
+		RTestProcess proc;
+		test.Next(_L("Checking address lookup is implemented"));
+		proc.Create(ETestProcess3,(TInt)&buf,RThread().Id());
+		proc.Logon(logon);
+		proc.Resume();
+		User::WaitForRequest(logon);
+
+		test(proc.ExitType()==EExitKill);
+		test(logon==0);
+		test(*(TInt*)buffer==KMagic2);
+
+		ldd.DestroyBuffer();
+
+		// Check process death whilst buffer is mapped in
+		// Test case for defect DEF051851 - Shared IO Buffer fault when process dies
+		test.Next(_L("Checking process death whilst buffer is mapped in"));
+			process.Create(ETestProcess1);
+			process.Logon(logon);
+			test.Start(_L("Map buffer into another process"));
+			test(ldd.MapInGlobalBuffer(process.Id(),gbuffer,gsize)==KErrNone);
+			test.Next(_L("Kill other process"));
+			process.Kill(99);
+			User::WaitForRequest(logon);
+			test(process.ExitType()==EExitKill);
+			test(logon==99);
+			process.Close();
+			test.Next(_L("Map out buffer"));
+			r=ldd.MapOutGlobalBuffer();
+			test.Printf(_L("result = %d\n"),r);
+			test(r==KErrNone);
+
+			test.Next(_L("Map buffer into this process"));
+			test(ldd.MapInGlobalBuffer(RProcess().Id(),gbuffer,gsize)==KErrNone);
+			test.Next(_L("Map out buffer from this process"));
+			r=ldd.MapOutGlobalBuffer();
+			test.Printf(_L("result = %d\n"),r);
+			test(r==KErrNone);
+
+			process.Create(ETestProcess1);
+			process.Logon(logon);
+			test.Next(_L("Map buffer into another process"));
+			test(ldd.MapInGlobalBuffer(process.Id(),gbuffer,gsize)==KErrNone);
+			test.Next(_L("Kill other process"));
+			process.Kill(99);
+			User::WaitForRequest(logon);
+			test(process.ExitType()==EExitKill);
+			test(logon==99);
+			process.Close();
+			test.Next(_L("Map out buffer"));
+			r=ldd.MapOutGlobalBuffer();
+			test.Printf(_L("result = %d\n"),r);
+			test(r==KErrNone);
+			test.End();
+	} // loop for next buffer size
+
+	test.Next(_L("Create and map in buffer"));
+	r=ldd.CreateBuffer(KTestBufferSize);
+	test(r==KErrNone);
+	r=ldd.MapInBuffer(&buffer,&size);
+	test(r==KErrNone);
+
+//  Test for DEF053512 - Can't delete SharedIo buffers in DLogicalDevice destructor 
+
+	test.Next(_L("Map in global buffer"));
+	TAny* gbuffer;
+	TUint32 gsize;
+	test(ldd.MapInGlobalBuffer(RProcess().Id(),gbuffer,gsize)==KErrNone);
+
+	test.Next(_L("Closing channel (with a buffer still mapped in)"));
+	ldd.Close();
+
+//  Test for DEF053512 - Can't delete SharedIo buffers in DLogicalDevice destructor 
+
+	test.Next(_L("Unload driver (whilst global buffer still mapped in)"));
+	r=User::FreeLogicalDevice(KSharedIoTestLddName);
+	test(r==KErrNone);
+
+	test.End();
+
+
+
+	return(0);
+    }
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* f32test\loader\ldrplatsec.inf
+*
+*/
+
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_MMPFILES
+fuzzlib
+fuzzv5	
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/fuzzlib.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* f32test\loader\security\fuzzlib.mmp
+*
+*/
+
+
+target			fuzzlib.lib
+targettype		lib
+sourcepath		.
+#ifdef MARM
+source			uc_exe.cia
+#else
+#ifdef X86
+source			uc_exex86.cia
+#endif
+#endif
+userinclude		.
+systeminclude		/epoc32/include
+capability		all
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/fuzzv5.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* f32test\loader\security\fuzzv5.cpp
+* yes this file is empty, we don't need any code :)
+*
+*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/fuzzv5.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* \f32test\loader\security\fuzzv5.mmp
+*
+*/
+
+
+target			fuzzv5.exe
+targettype		exe
+sourcepath		.
+source			fuzzv5.cpp
+firstlib		fuzzlib.lib
+systeminclude		/epoc32/include
+nocompresstarget
+capability		NONE
+
+VERSION			2.1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/u32std.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,812 @@
+/*
+* Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32\include\u32std.h
+*
+*/
+
+
+/**
+ @file
+ @internalComponent
+ @released
+*/
+
+#ifndef __U32STD_H__
+#define __U32STD_H__
+#include <e32cmn.h>
+#include <e32hal.h>
+#include <e32lmsg.h>
+#include <e32event.h>
+#include <e32ldr.h>
+#include <e32power.h>
+#include <e32property.h>
+#include <u32property.h>
+#include <u32hal.h>
+
+#include <cpudefs.h>
+
+#ifdef __MARM__
+#define	EKA2_ENTRY_POINT_VERSION_IDENTIFIER	\
+	asm("tst pc, #%a0" : : "i" ((TInt)0) )
+#endif
+
+struct TUnicodeDataSet;                 // forward declaration
+struct TCollationDataSet;               // forward declaration
+
+/*
+The LCharSet structure is used in Unicode builds to supply locale-specific
+character attribute and collation data.
+
+The structure is defined in both builds to avoid having to have a dummy ExecHandler::GetLocaleCharSet function
+with a different signature in the 8-bit build.
+*/
+struct LCharSet
+	{
+	const TUnicodeDataSet* iCharDataSet;			// if non-null, character data overriding standard Unicode data
+	const TCollationDataSet* iCollationDataSet;		// if non-null, locale-specific collation data
+	};
+
+extern const LCharSet* GetLocaleCharSet();
+
+/** @internalTechnology */
+const TInt KNumLocaleExports = 22;
+
+//
+// The bits in the type table (non-Unicode build only)
+//
+#ifndef _UNICODE
+
+/** @internalTechnology */
+const TUint __U=0x01; // Uppercase letter
+
+/** @internalTechnology */
+const TUint __L=0x02; // Lowercase letter
+
+/** @internalTechnology */
+const TUint __D=0x04; // Decimal digit
+
+/** @internalTechnology */
+const TUint __S=0x08; // Space
+
+/** @internalTechnology */
+const TUint __P=0x10; // Punctuation
+
+/** @internalTechnology */
+const TUint __C=0x20; // Control character
+
+/** @internalTechnology */
+const TUint __X=0x40; // Hex digit
+
+/** @internalTechnology */
+const TUint __B=0x80; // A blank character
+
+#endif
+
+//
+// Time set mode parameters for setting system time and offset
+// 
+enum TTimeSetMode
+	{
+	ETimeSetTime = 1,    // set the time to the value given, else leave it unchanged
+	ETimeSetOffset = 2,  // set the offset to the value given, else leave it unchanged
+	ETimeSetAllowTimeReversal = 4,  // allow time to go backwards
+	ETimeSetNoTimeUpdate = 8,       // Don't restart second queue or notify changes - not valid with ESetTime, used early in boot only
+	ETimeSetLocalTime = 16,			// Set time in local time, instead of UTC
+	ETimeSetSecure = 32,  // use when setting the secure hardware clock
+	};
+
+//
+enum TMatchType {EMatchNormal,EMatchFolded,EMatchCollated};
+
+//
+// Constants for descriptor implementation code
+//
+enum TDesType {EBufC,EPtrC,EPtr,EBuf,EBufCPtr};
+const TUint KMaskDesLength=0xfffffff;
+const TInt KShiftDesType=28;
+
+//
+// Constants for iFlags in DProcess and DThread
+//
+const TUint KThreadFlagProcessCritical		= 0x00000001;	// thread panic panics process
+const TUint KThreadFlagProcessPermanent		= 0x00000002;	// thread exit of any kind causes process to exit (=main)
+const TUint KThreadFlagSystemCritical		= 0x00000004;	// thread panic reboots entire system
+const TUint KThreadFlagSystemPermanent		= 0x00000008;	// thread exit of any kind reboots entire system
+const TUint KThreadFlagOriginal				= 0x00000010;
+const TUint KThreadFlagLastChance			= 0x00000020;
+const TUint KThreadFlagRealtime				= 0x00000040;	// thread will be panicked when using some non-realtime functions
+const TUint KThreadFlagRealtimeTest			= 0x00000080;	// non-realtime functions only warn rather than panic
+const TUint KThreadFlagLocalThreadDataValid	= 0x00000100;	// thread has valid local thread data
+const TUint KProcessFlagPriorityControl		= 0x40000000;
+const TUint KProcessFlagJustInTime			= 0x80000000;
+const TUint KProcessFlagSystemCritical		= KThreadFlagSystemCritical;	// process panic reboots entire system
+const TUint KProcessFlagSystemPermanent		= KThreadFlagSystemPermanent;	// process exit of any kind reboots entire system
+//
+const TUint KThreadHandle=0x40000000;
+//
+struct SPtrC8 {TInt length;const TUint8 *ptr;};
+struct SBufC8 {TInt length;TUint8 buf[1];};
+struct SPtr8 {TInt length;TInt maxLength;TUint8 *ptr;};
+struct SBuf8 {TInt length;TInt maxLength;TUint8 buf[1];};
+struct SBufCPtr8 {TInt length;TInt maxLength;SBufC8 *ptr;};
+
+struct SPtrC16 {TInt length;const TUint16 *ptr;};
+struct SBufC16 {TInt length;TUint16 buf[1];};
+struct SPtr16 {TInt length;TInt maxLength;TUint16 *ptr;};
+struct SBuf16 {TInt length;TInt maxLength;TUint16 buf[1];};
+struct SBufCPtr16 {TInt length;TInt maxLength;SBufC16 *ptr;};
+
+//
+// Flags used for IPC copy functions
+//
+const TInt KChunkShiftBy0=0;
+const TInt KChunkShiftBy1=KMinTInt;
+const TInt KIpcDirRead=0;
+const TInt KIpcDirWrite=0x10000000;
+
+class TChunkCreate
+	{
+public:
+	// Attributes for chunk creation that are used by both euser and the kernel 
+	// by classes TChunkCreateInfo and SChunkCreateInfo, respectively.
+	enum TChunkCreateAtt
+		{
+		ENormal				= 0x00000000,
+		EDoubleEnded		= 0x00000001,
+		EDisconnected		= 0x00000002,
+		ECache				= 0x00000003,
+		EMappingMask		= 0x0000000f,
+		ELocal				= 0x00000000,
+		EGlobal				= 0x00000010,
+		EData				= 0x00000000,
+		ECode				= 0x00000020,
+		EMemoryNotOwned		= 0x00000040,
+
+		// Force local chunk to be named.  Only required for thread heap 
+		// chunks, all other local chunks should be nameless.
+		ELocalNamed 		= 0x000000080,
+		
+		// Paging attributes for chunks.
+		EPagingUnspec		= 0x00000000,
+		EPaged				= 0x80000000,
+		EUnpaged			= 0x40000000,
+		EPagingMask 		= EPaged | EUnpaged,
+
+		EChunkCreateAttMask =	EMappingMask | EGlobal | ECode |
+								ELocalNamed | EPagingMask,
+		};
+public:
+	TUint iAtt;
+	TBool iForceFixed;
+	TInt iInitialBottom;
+	TInt iInitialTop;
+	TInt iMaxSize;
+	TUint8 iClearByte;
+	};
+
+enum TChunkRestrictions
+	{
+	// Keep this in sync with definitions in RChunk
+	EChunkPreventAdjust = 0x01,  // Disallow Adjust, Commit, Allocate and Decommit
+	};
+
+class TChannelDoCreate
+	{
+public:
+	TVersion iVer;
+	const TDesC *iName;
+	const TDesC *iPhysicalDevice;
+	const TDesC8 *iInfo;
+	};
+
+class TCreateSession
+	{
+public:
+	TVersion iVer;
+	TInt iMessageSlots;
+	};
+
+enum TObjectType
+	{
+	EThread=0,
+	EProcess,
+	EChunk,
+	ELibrary,
+	ESemaphore,
+	EMutex,
+	ETimer,
+	EServer,
+	ESession,
+	ELogicalDevice,
+	EPhysicalDevice,
+	ELogicalChannel,
+	EChangeNotifier,
+	EUndertaker,
+	EMsgQueue,	
+	EPropertyRef,
+	ECondVar,
+	ENumObjectTypes,	// number of DObject-derived types
+	EObjectTypeAny=-1,
+
+	EIpcMessageD=0x20,	// lookup IPC message handle, allow disconnect
+	EIpcMessage=0x21,	// lookup IPC message handle, don't allow disconnect
+	EIpcClient=0x22,	// lookup IPC message client, don't allow disconnect
+	};
+
+class TObjectOpenInfo
+	{
+public:
+	TObjectType iObjType;
+	TBool isReadOnly;
+	};
+
+class TChannelCreateInfo
+	{
+public:
+	TVersion iVersion;
+	TInt iUnit;
+	const TDesC* iPhysicalDevice;
+	const TDesC8* iInfo;
+	};
+
+#if defined(_UNICODE) && !defined(__KERNEL_MODE__)
+class TChannelCreateInfo8
+	{
+public:
+	TVersion iVersion;
+	TInt iUnit;
+	const TDesC8* iPhysicalDevice;
+	const TDesC8* iInfo;
+	};
+#else
+typedef TChannelCreateInfo TChannelCreateInfo8;
+#endif
+
+const TInt KMaxThreadCreateInfo = 256;
+struct SThreadCreateInfo
+	{
+	TAny* iHandle;
+	TInt iType;
+	TThreadFunction iFunction;
+	TAny* iPtr;
+	TAny* iSupervisorStack;
+	TInt iSupervisorStackSize;
+	TAny* iUserStack;
+	TInt iUserStackSize;
+	TInt iInitialThreadPriority;
+	TPtrC iName;
+	TInt iTotalSize;	// Size including any extras (must be a multiple of 8 bytes)
+	};
+
+enum TThreadCreationFlags
+	{
+	ETraceHeapAllocs 				= 0x00000001,
+	EMonitorHeapMemory				= 0x00000002,
+
+	EThreadCreateFlagPaged			= 0x00000004,
+	EThreadCreateFlagUnpaged		= 0x00000008,
+	EThreadCreateFlagPagingUnspec	= 0x00000000,
+	EThreadCreateFlagPagingMask	= EThreadCreateFlagPaged | EThreadCreateFlagUnpaged,
+
+	EThreadCreateFlagMask = ETraceHeapAllocs | EMonitorHeapMemory | EThreadCreateFlagPagingMask,
+	};
+
+struct SStdEpocThreadCreateInfo : public SThreadCreateInfo
+	{
+	SStdEpocThreadCreateInfo()
+		: iFlags(0)	// Must be clear on creation.
+		{
+		};
+	RAllocator* iAllocator;
+	TInt iHeapInitialSize;
+	TInt iHeapMaxSize;
+	TUint iFlags;
+	};
+
+#if defined(_UNICODE) && !defined(__KERNEL_MODE__)
+struct SThreadCreateInfo8
+	{
+	TAny* iHandle;
+	TInt iType;
+	TThreadFunction iFunction;
+	TAny* iPtr;
+	TAny* iSupervisorStack;
+	TInt iSupervisorStackSize;
+	TAny* iUserStack;
+	TInt iUserStackSize;
+	TInt iInitialThreadPriority;
+	TPtrC8 iName;
+	TInt iTotalSize;	// size including any extras
+	};
+
+struct SStdEpocThreadCreateInfo8 : public SThreadCreateInfo8
+	{
+	SStdEpocThreadCreateInfo8()
+		: iFlags(0) // Must be clear on creation.
+		{
+		};
+	RAllocator* iAllocator;
+	TInt iHeapInitialSize;
+	TInt iHeapMaxSize;
+	TUint iFlags;
+	};
+#else
+typedef SThreadCreateInfo SThreadCreateInfo8;
+typedef SStdEpocThreadCreateInfo SStdEpocThreadCreateInfo8;
+#endif
+
+struct SIpcCopyInfo
+	{
+	TUint8* iLocalPtr;
+	TInt iLocalLen;
+	TInt iFlags;
+	};
+
+enum TChunkAdjust
+	{
+	EChunkAdjust=0,
+	EChunkAdjustDoubleEnded=1,
+	EChunkCommit=2,
+	EChunkDecommit=3,
+	EChunkAllocate=4,
+	EChunkUnlock=5,
+	EChunkLock=6
+	};
+
+enum TMemModelAttributes
+	{
+	EMemModelTypeMask=0xf,					// bottom 4 bits give type of memory model
+	EMemModelTypeDirect=0,					// direct memory model on hardware
+	EMemModelTypeMoving=1,					// moving memory model on hardware
+	EMemModelTypeMultiple=2,				// multiple memory model on hardware
+	EMemModelTypeEmul=3,					// emulation using single host process
+	EMemModelTypeFlexible=4,				// flexible memory model on hardware
+
+	EMemModelAttrRomPaging=0x10,			// Demand paging of XIP ROM
+	EMemModelAttrCodePaging=0x20,			// Demand paging of RAM loaded code
+	EMemModelAttrDataPaging=0x40,			// Demand paging of all RAM
+	EMemModelAttrPagingMask=0xf0,			// Mask for demand paging attributes
+
+	EMemModelAttrNonExProt=(TInt)0x80000000,// accesses to nonexistent addresses are trapped
+	EMemModelAttrKernProt=0x40000000,		// accesses to kernel memory from user mode are trapped
+	EMemModelAttrWriteProt=0x20000000,		// addresses can be marked as read-only; writes to these are trapped
+	EMemModelAttrVA=0x10000000,				// system supports virtual addresses
+	EMemModelAttrProcessProt=0x08000000,	// accesses to other processes' memory are trapped
+	EMemModelAttrSameVA=0x04000000,			// different processes map the same virtual address to different physical addresses
+	EMemModelAttrSupportFixed=0x02000000,	// 'fixed' processes are supported
+	EMemModelAttrSvKernProt=0x01000000,		// unexpected accesses to kernel memory within an executive call are trapped
+	EMemModelAttrIPCKernProt=0x00800000,	// accesses to kernel memory via IPC are trapped
+	EMemModelAttrIPCFullProt=0x00400000,	// accesses via IPC have same protection as user mode
+	EMemModelAttrRamCodeProt=0x00200000,	// RAM-loaded code is only visible to processes which have loaded it
+	};
+
+/** @test */
+enum TKernelHeapDebugFunction {EDbgMarkStart,EDbgMarkCheck,EDbgMarkEnd,EDbgSetAllocFail,EDbgSetBurstAllocFail,EDbgCheckFailure};
+
+/** @test */
+class TKernelHeapMarkCheckInfo
+	{
+public:
+	TBool iCountAll;
+	const TDesC8* iFileName;
+	TInt iLineNum;
+	};
+//
+class TTrapHandler;
+class CActiveScheduler;
+class TLocale;
+
+//
+//
+//
+// Handler below is used by test prints to trucate rather than panic the caller.
+//
+#if defined(_UNICODE) && !defined(__KERNEL_MODE__)
+NONSHARABLE_CLASS(TestOverflowTruncate) : public TDes16Overflow
+	{
+public:
+	virtual void Overflow(TDes16 &aDes);
+	};
+#else
+NONSHARABLE_CLASS(TestOverflowTruncate) : public TDes8Overflow
+	{
+public:
+	virtual void Overflow(TDes8 &aDes);
+	};
+#endif
+//
+
+/********************************************
+ * Thread local storage entry
+ ********************************************/
+struct STls
+	{
+	TInt	iHandle;
+	TInt	iDllUid;
+	TAny*	iPtr;
+	};
+
+const TInt KDllUid_Default = 0;		// for ROM DLLs and direct calls to UserSvr::DllTls
+const TInt KDllUid_Special = -1;	// used on emulator to instruct the kernel to get the DLL UID from the module handle
+
+/********************************************
+ * Entry point call values
+ ********************************************/
+const TInt	KModuleEntryReasonProcessInit		=0;		// Process start
+const TInt	KModuleEntryReasonThreadInit		=1;		// Start new thread
+const TInt	KModuleEntryReasonProcessAttach		=2;		// Process attach (init static data)
+const TInt	KModuleEntryReasonProcessDetach		=3;		// Process detach (destroy static data)
+const TInt	KModuleEntryReasonException			=4;		// Handle exception
+const TInt	KModuleEntryReasonVariantInit0		=-3;	// Call variant static constructors
+
+/** @publishedPartner
+	@released
+*/
+const TInt	KModuleEntryReasonExtensionInit0	=-2;	// Extension early initialisation check
+
+/** @publishedPartner
+	@released
+*/
+const TInt	KModuleEntryReasonExtensionInit1	=-1;	// Extension initialisation
+
+/**
+	Flags returned by Exec::KernelConfigFlags()
+*/
+enum TKernelConfigFlags
+	{
+	EKernelConfigIpcV1Available = 1<<0,
+	EKernelConfigPlatSecEnforcement = 1<<1,
+	EKernelConfigPlatSecDiagnostics = 1<<2,
+	EKernelConfigPlatSecProcessIsolation = 1<<3,
+	EKernelConfigPlatSecEnforceSysBin = 1<<4,
+
+	// paging policy values use by 2-bit code and data paging policy enums...
+	EKernelConfigPagingPolicyNoPaging = 0,
+	EKernelConfigPagingPolicyAlwaysPage = 1,
+	EKernelConfigPagingPolicyDefaultUnpaged = 2,
+	EKernelConfigPagingPolicyDefaultPaged = 3,
+
+	EKernelConfigCodePagingPolicyShift			= 5,
+	EKernelConfigCodePagingPolicyMask			= 3<<5,
+	EKernelConfigCodePagingPolicyNoPaging		= EKernelConfigPagingPolicyNoPaging<<5,
+	EKernelConfigCodePagingPolicyAlwaysPage		= EKernelConfigPagingPolicyAlwaysPage<<5,
+	EKernelConfigCodePagingPolicyDefaultUnpaged	= EKernelConfigPagingPolicyDefaultUnpaged<<5,
+	EKernelConfigCodePagingPolicyDefaultPaged	= EKernelConfigPagingPolicyDefaultPaged<<5,
+
+	EKernelConfigPlatSecLocked = 1<<7,					// Primarily used by __PLATSEC_UNLOCKED__ (q.v.) test code
+
+	EKernelConfigCrazyScheduling = 1<<8,				// Enables thread priority/timeslice craziness
+
+	EKernelConfigDataPagingPolicyShift			= 9,
+	EKernelConfigDataPagingPolicyMask			= 3<<9,
+	EKernelConfigDataPagingPolicyNoPaging		= EKernelConfigPagingPolicyNoPaging<<9,
+	EKernelConfigDataPagingPolicyAlwaysPage		= EKernelConfigPagingPolicyAlwaysPage<<9,
+	EKernelConfigDataPagingPolicyDefaultUnpaged	= EKernelConfigPagingPolicyDefaultUnpaged<<9,
+	EKernelConfigDataPagingPolicyDefaultPaged	= EKernelConfigPagingPolicyDefaultPaged<<9,
+
+	EKernelConfigSMPUnsafeCompat = 1<<12,				// Enables compatibility mode for SMP-unsafe processes
+
+	EKernelConfigDisableAPs = 1u<<30,
+
+	EKernelConfigTest = 1u<<31,							// Only used by test code for __PLATSEC_UNLOCKED__
+	};
+
+/**
+	If __PLATSEC_UNLOCKED__ is not defined, these flags must always
+	be considered to be set.  See KernelConfigFlags() in kern_priv.h.
+
+	@see KernelConfigFlags()
+
+	@internalTechnology
+*/
+#ifdef __PLATSEC_UNLOCKED__
+#define __PLATSEC_FORCED_FLAGS__	 0
+#else
+#define __PLATSEC_FORCED_FLAGS__	(EKernelConfigPlatSecEnforcement|EKernelConfigPlatSecProcessIsolation|EKernelConfigPlatSecEnforceSysBin)
+#endif
+
+/**
+@internalTechnology
+*/
+enum TGlobalUserData
+	{
+	ELocaleDefaultCharSet,
+	ELocalePreferredCharSet,
+	EMaxGlobalUserData
+	};
+
+typedef void (*TGlobalDestructorFunc)(void);
+
+// This must not conflict with any possible valid TLS keys
+const TInt KGlobalDestructorTlsKey = -1;
+
+GLREF_C void ExitCurrentThread(TExitType, TInt, const TDesC8*);
+
+#ifndef __REMOVE_PLATSEC_DIAGNOSTICS__
+/**
+@internalTechnology
+*/
+class TPlatSecDiagnostic
+	{
+public:
+	enum TType
+		{
+		ELoaderCapabilityViolation1,
+		ELoaderCapabilityViolation2,
+		EThreadCapabilityCheckFail,
+		EProcessCapabilityCheckFail,
+		EKernelSecureIdCheckFail,
+		EKernelObjectPolicyCheckFail,
+		EHandleCapabilityCheckFail,
+		ECreatorCapabilityCheckFail,
+		EMessageCapabilityCheckFail,
+		EKernelProcessIsolationFail,
+		EKernelProcessIsolationIPCFail,
+		ECreatorPolicyCheckFail,		
+		};
+public:
+	inline TPlatSecDiagnostic();
+	inline TPlatSecDiagnostic(TType aType);
+	inline TPlatSecDiagnostic(TType aType, TInt aInt1, TInt aInt2, const SCapabilitySet& aCaps);
+	inline TPlatSecDiagnostic(TType aType, TInt aInt1, const SSecurityInfo& aCaps);
+	inline TPlatSecDiagnostic(TType aType, TInt aInt, const TDesC8& aString, const SCapabilitySet& aCaps);
+	inline TPlatSecDiagnostic(TType aType, const TDesC8& aString1, const TDesC8& aString2, const SCapabilitySet& aCaps);
+	inline TPlatSecDiagnostic(TType aType, TInt aInt1, TInt aInt2);
+	inline TPlatSecDiagnostic(TType aType, TInt aInt1);
+	inline const TDesC8* String1();
+	inline const TDesC8* String2();
+public:
+	TType iType;
+	TInt iArg1;
+	TInt iArg2;
+	const char* iContextText;
+	TInt iContextTextLength;
+	SSecurityInfo iSecurityInfo;
+	};
+
+inline TPlatSecDiagnostic::TPlatSecDiagnostic()
+	{}
+
+inline TPlatSecDiagnostic::TPlatSecDiagnostic(TType aType)
+	: iType(aType)
+	{}
+
+inline TPlatSecDiagnostic::TPlatSecDiagnostic(TType aType,TInt aInt1)
+	: iType(aType), iArg1(aInt1)
+	{}
+
+inline TPlatSecDiagnostic::TPlatSecDiagnostic(TType aType, TInt aInt1, TInt aInt2, const SCapabilitySet& aCaps)
+	: iType(aType), iArg1(aInt1), iArg2(aInt2), iContextText(0) 
+	{
+	iSecurityInfo.iSecureId = 0;
+	iSecurityInfo.iVendorId = 0;
+	iSecurityInfo.iCaps = aCaps;
+	};
+inline TPlatSecDiagnostic::TPlatSecDiagnostic(TType aType, TInt aInt1, const SSecurityInfo& aInfo)
+	: iType(aType), iArg1(aInt1), iArg2(ECapability_None), iContextText(0), iSecurityInfo(aInfo) 
+	{
+	};
+
+inline TPlatSecDiagnostic::TPlatSecDiagnostic(TType aType, TInt aInt, const TDesC8& aString, const SCapabilitySet& aCaps)
+	: iType(aType), iArg1(aInt), iArg2((TInt)&aString), iContextText(0) 
+	{
+	iSecurityInfo.iSecureId = 0;
+	iSecurityInfo.iVendorId = 0;
+	iSecurityInfo.iCaps = aCaps;
+	};
+
+inline TPlatSecDiagnostic::TPlatSecDiagnostic(TType aType, const TDesC8& aString1, const TDesC8& aString2, const SCapabilitySet& aCaps)
+	: iType(aType), iArg1((TInt)&aString1), iArg2((TInt)&aString2), iContextText(0) 
+	{
+	iSecurityInfo.iSecureId = 0;
+	iSecurityInfo.iVendorId = 0;
+	iSecurityInfo.iCaps = aCaps;
+	};
+
+inline TPlatSecDiagnostic::TPlatSecDiagnostic(TType aType, TInt aInt1, TInt aInt2)
+	: iType(aType), iArg1(aInt1), iArg2(aInt2) 
+	{
+	iSecurityInfo.iSecureId = 0;
+	iSecurityInfo.iVendorId = 0;
+	iSecurityInfo.iCaps[0] = 0;
+	iSecurityInfo.iCaps[1] = 0;
+	};
+
+inline const TDesC8* TPlatSecDiagnostic::String1()
+	{ return (const TDesC8*)iArg1; }
+
+inline const TDesC8* TPlatSecDiagnostic::String2()
+	{ return (const TDesC8*)iArg2; }
+
+inline TInt PlatSec::LoaderCapabilityViolation(const TDesC8& aImporterName, const TDesC8& aFileName, const SCapabilitySet& aMissingCaps)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::ELoaderCapabilityViolation2,aImporterName,aFileName,aMissingCaps);
+	return EmitDiagnostic(d, NULL);
+	}
+
+#ifdef __KERNEL_MODE__
+
+inline TInt PlatSec::CapabilityCheckFail(const DProcess* aViolatingProcess, TCapability aCapability, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EProcessCapabilityCheckFail,(TInt)aViolatingProcess,(TInt)aCapability);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::CapabilityCheckFail(const DThread* aViolatingThread, TCapability aCapability, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EThreadCapabilityCheckFail,(TInt)aViolatingThread,(TInt)aCapability);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::SecureIdCheckFail(const DProcess* aViolatingProcess, TSecureId aSid, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EKernelSecureIdCheckFail,(TInt)aViolatingProcess,(TInt)aSid);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::PolicyCheckFail(const DProcess* aProcess, const SSecurityInfo& aMissingSecurityInfo, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EKernelObjectPolicyCheckFail,(TInt)aProcess,(const SSecurityInfo&)aMissingSecurityInfo);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::PolicyCheckFail(const DThread* aThread, const SSecurityInfo& aMissingSecurityInfo, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EKernelObjectPolicyCheckFail,(TInt)aThread,(const SSecurityInfo&)aMissingSecurityInfo);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::ProcessIsolationFail(const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EKernelProcessIsolationFail);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::ProcessIsolationIPCFail(RMessageK* aMessage, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EKernelProcessIsolationIPCFail,(TInt)aMessage);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+#else // !__KERNEL_MODE__
+
+inline TInt PlatSec::LoaderCapabilityViolation(RProcess aLoadingProcess, const TDesC8& aFileName, const SCapabilitySet& aMissingCaps)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::ELoaderCapabilityViolation1,aLoadingProcess.Handle(),aFileName,aMissingCaps);
+	return EmitDiagnostic(d, NULL);
+	}
+
+inline TInt PlatSec::CreatorCapabilityCheckFail(TCapability aCapability, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::ECreatorCapabilityCheckFail,(TInt)0,aCapability);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::CreatorCapabilityCheckFail(const TCapabilitySet& aMissingCaps, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::ECreatorCapabilityCheckFail,(TInt)0,ECapability_None,(const SCapabilitySet&)aMissingCaps);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::CapabilityCheckFail(TInt aHandle, TCapability aCapability, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EHandleCapabilityCheckFail,aHandle,aCapability);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::CapabilityCheckFail(TInt aHandle, const TCapabilitySet& aMissingCaps, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EHandleCapabilityCheckFail,aHandle,ECapability_None,(const SCapabilitySet&)aMissingCaps);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::PolicyCheckFail(TInt aHandle, const SSecurityInfo& aMissingSecurityInfo, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EHandleCapabilityCheckFail,aHandle,(const SSecurityInfo&)aMissingSecurityInfo);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::CapabilityCheckFail(RMessagePtr2 aMessage, TCapability aCapability, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EMessageCapabilityCheckFail,(TInt)aMessage.Handle(),aCapability);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::CapabilityCheckFail(RMessagePtr2 aMessage, const TCapabilitySet& aMissingCaps, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EMessageCapabilityCheckFail,(TInt)aMessage.Handle(),ECapability_None,(const SCapabilitySet&)aMissingCaps);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::PolicyCheckFail(RMessagePtr2 aMessage, const SSecurityInfo& aMissing, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::EMessageCapabilityCheckFail,(TInt)aMessage.Handle(),(const SSecurityInfo&)aMissing);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+inline TInt PlatSec::CreatorPolicyCheckFail(const SSecurityInfo& aMissing, const char* aContextText)
+	{
+	TPlatSecDiagnostic d(TPlatSecDiagnostic::ECreatorPolicyCheckFail,(TInt)0,(const SSecurityInfo&)aMissing);
+	return EmitDiagnostic(d,aContextText);
+	}
+
+#endif //__KERNEL_MODE__
+#endif // !__REMOVE_PLATSEC_DIAGNOSTICS__
+
+const TInt KTlsArrayGranularity=2;
+
+#ifdef __CPU_HAS_CP15_THREAD_ID_REG
+
+#define __USERSIDE_THREAD_DATA__
+
+class TLocalThreadData
+	{
+public:
+	void Close();
+#ifndef __KERNEL_MODE__
+	TAny* DllTls(TInt aHandle, TInt aDllUid);
+	TInt DllSetTls(TInt aHandle, TInt aDllUid, TAny* aPtr);
+	void DllFreeTls(TInt aHandle);
+#endif
+public:
+	RAllocator* iHeap;				///< The thread's current heap
+	CActiveScheduler* iScheduler;	///< The thread's current active scheduler
+	TTrapHandler* iTrapHandler;		///< The thread's current trap handler
+private:
+	RAllocator* iTlsHeap; 			///< The heap that the DLL TLS data is stored on
+	RArray<STls> iTls; 				///< DLL TLS data
+	};
+
+const TInt KLocalThreadDataSize = _ALIGN_UP(sizeof(TLocalThreadData), 8);
+
+#endif
+
+#ifdef __WINS__
+
+enum TWin32RuntimeReason
+	{
+	// Same values as passed to DllMain
+	EWin32RuntimeProcessAttach = 1,
+	EWin32RuntimeThreadAttach = 2,
+	EWin32RuntimeThreadDetach = 3,
+	EWin32RuntimeProcessDetach = 4,
+	};
+
+typedef TBool (*TWin32RuntimeHook)(TWin32RuntimeReason);
+
+#endif
+
+struct SAtomicOpInfo64
+	{
+	TAny*		iA;
+	TAny*		iQ;
+	TUint64		i1;
+	TUint64		i2;
+	TUint64		i3;
+	};
+
+struct SAtomicOpInfo32
+	{
+	TAny*		iA;
+	union
+		{
+		TAny*	iQ;
+		TUint32	i0;
+		};
+	TUint32		i1;
+	TUint32		i2;
+	};
+
+#endif //__U32STD_H__
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/uc_exe.cia	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* f32test\loader\security\uc_exe.cia
+*
+*/
+
+
+#include <e32cia.h>
+#include "u32std.h"
+
+extern "C" {
+
+// Minimal entry point which won't cause any code relocations to be included
+__NAKED__ TInt _E32Startup()
+	{
+	EKA2_ENTRY_POINT_VERSION_IDENTIFIER;	// DUMMY INSTRUCTION TO INDICATE EKA2 ENTRY POINT
+	asm("mov r0, #0 ");
+	__JUMP(,lr);
+
+	asm(".word 0 ");			// loader will replace with code seg unique ID
+								// for RAM-loaded code segment
+								// MUST BE AT OFFSET 12 FROM ENTRY POINT
+	}
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/uc_exex86.cia	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* f32test\loader\security\uc_exex86.cia
+*
+*/
+
+
+#include "u32std.h"
+#include "x86hlp.inl"
+
+extern "C" {
+
+// Minimal entry point which won't cause any code relocations to be included
+__NAKED__ TInt _E32Startup()
+	{
+	BYTE(0xeb)			// JMP .+16
+	BYTE(0x0e)
+	BYTE(0x00)
+	BYTE(0x00)
+	BYTE(0x00)
+	BYTE(0x00)
+	BYTE(0x00)
+	BYTE(0x00)
+	BYTE(0x00)
+	BYTE(0x00)
+	BYTE(0x00)
+	BYTE(0x00)
+	BYTE(0x00)			// need zero word at offset 12 from entry point
+	BYTE(0x00)
+	BYTE(0x00)
+	BYTE(0x00)
+
+	BYTE(0xcb) //asm("retf"); GCC doesn't recognise retf
+	}
+
+
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp5/x86hlp.inl	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,449 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32\common\x86\x86hlp.inl
+*
+*/
+
+
+#ifdef __GCC32__
+#include <x86hlp_gcc.inl>
+#else
+
+/**** MSVC helpers ****/
+
+/*static void DivisionByZero()
+	{
+	_asm int 0;
+	}*/
+
+#pragma warning ( disable : 4414 )  // short jump to function converted to near
+
+extern "C" {
+__NAKED__ void _allmul()
+//
+// Multiply two 64 bit integers returning a 64 bit result
+// On entry:
+//		[esp+4], [esp+8] = arg 1
+//		[esp+12], [esp+16] = arg 1
+// Return result in edx:eax
+// Remove arguments from stack
+//
+	{
+	_asm mov eax, [esp+4]			// eax = low1
+	_asm mul dword ptr [esp+16]		// edx:eax = low1*high2
+	_asm mov ecx, eax				// keep low 32 bits of product
+	_asm mov eax, [esp+8]			// eax = high1
+	_asm mul dword ptr [esp+12]		// edx:eax = high1*low2
+	_asm add ecx, eax				// accumulate low 32 bits of product
+	_asm mov eax, [esp+4]			// eax = low1
+	_asm mul dword ptr [esp+12]		// edx:eax = low1*low2
+	_asm add edx, ecx				// add cross terms to high 32 bits
+	_asm ret 16
+	}
+
+void udiv64_divby0()
+	{
+	_asm int 0						// division by zero exception
+	_asm ret
+	}
+
+__NAKED__ void UDiv64()
+	{
+	// unsigned divide edx:eax by edi:esi
+	// quotient in ebx:eax, remainder in edi:edx
+	// ecx, ebp, esi also modified
+	_asm test edi, edi
+	_asm jnz short UDiv64a				// branch if divisor >= 2^32
+	_asm test esi, esi
+//	_ASM_j(z,DivisionByZero)			// if divisor=0, branch to error routine
+	_asm jz udiv64_divby0
+	_asm mov ebx, eax					// ebx=dividend low
+	_asm mov eax, edx					// eax=dividend high
+	_asm xor edx, edx					// edx=0
+	_asm div esi						// quotient high now in eax
+	_asm xchg eax, ebx					// quotient high in ebx, dividend low in eax
+	_asm div esi						// quotient now in ebx:eax, remainder in edi:edx
+	_asm ret
+	UDiv64e:
+	_asm xor eax, eax					// set result to 0xFFFFFFFF
+	_asm dec eax
+	_asm jmp short UDiv64f
+	UDiv64a:
+	_asm js short UDiv64b				// skip if divisor msb set
+	_asm bsr ecx, edi					// ecx=bit number of divisor msb - 32
+	_asm inc cl
+	_asm push edi						// save divisor high
+	_asm push esi						// save divisor low
+	_asm shrd esi, edi, cl				// shift divisor right so that msb is bit 31
+	_asm mov ebx, edx					// dividend into ebx:ebp
+	_asm mov ebp, eax
+	_asm shrd eax, edx, cl				// shift dividend right same number of bits
+	_asm shr edx, cl
+	_asm cmp edx, esi					// check if approx quotient will be 2^32
+	_asm jae short UDiv64e				// if so, true result must be 0xFFFFFFFF
+	_asm div esi						// approximate quotient now in eax
+	UDiv64f:
+	_asm mov ecx, eax					// into ecx
+	_asm mul edi						// multiply approx. quotient by divisor high
+	_asm mov esi, eax					// ls dword into esi, ms into edi
+	_asm mov edi, edx
+	_asm mov eax, ecx					// approx. quotient into eax
+	_asm mul dword ptr [esp]			// multiply approx. quotient by divisor low
+	_asm add edx, esi					// edi:edx:eax now equals approx. quotient * divisor
+	_asm adc edi, 0
+	_asm xor esi, esi
+	_asm sub ebp, eax					// subtract dividend - approx. quotient *divisor
+	_asm sbb ebx, edx
+	_asm sbb esi, edi
+	_asm jnc short UDiv64c				// if no borrow, result OK
+	_asm dec ecx						// else result is one too big
+	_asm add ebp, [esp]					// and add divisor to get correct remainder
+	_asm adc ebx, [esp+4]
+	UDiv64c:
+	_asm mov eax, ecx					// result into ebx:eax, remainder into edi:edx
+	_asm mov edi, ebx
+	_asm mov edx, ebp
+	_asm xor ebx, ebx
+	_asm add esp, 8						// remove temporary values from stack
+	_asm ret
+	UDiv64b:
+	_asm mov ebx, 1
+	_asm sub eax, esi					// subtract divisor from dividend
+	_asm sbb edx, edi
+	_asm jnc short UDiv64d				// if no borrow, result=1, remainder in edx:eax
+	_asm add eax, esi					// else add back
+	_asm adc edx, edi
+	_asm dec ebx						// and decrement quotient
+	UDiv64d:
+	_asm mov edi, edx					// remainder into edi:edx
+	_asm mov edx, eax
+	_asm mov eax, ebx					// result in ebx:eax
+	_asm xor ebx, ebx
+	_asm ret
+	}
+
+__NAKED__ void _aulldvrm()
+//
+// Divide two 64 bit unsigned integers, returning a 64 bit result
+// and a 64 bit remainder
+//
+// On entry:
+//		[esp+4], [esp+8] = dividend
+//		[esp+12], [esp+16] = divisor
+//
+// Return (dividend / divisor) in edx:eax
+// Return (dividend % divisor) in ebx:ecx
+//
+// Remove arguments from stack
+//
+	{
+	_asm push ebp
+	_asm push edi
+	_asm push esi
+	_asm mov eax, [esp+16]
+	_asm mov edx, [esp+20]
+	_asm mov esi, [esp+24]
+	_asm mov edi, [esp+28]
+	_asm call UDiv64
+	_asm mov ecx, edx
+	_asm mov edx, ebx
+	_asm mov ebx, edi
+	_asm pop esi
+	_asm pop edi
+	_asm pop ebp
+	_asm ret 16
+	}
+
+__NAKED__ void _alldvrm()
+//
+// Divide two 64 bit signed integers, returning a 64 bit result
+// and a 64 bit remainder
+//
+// On entry:
+//		[esp+4], [esp+8] = dividend
+//		[esp+12], [esp+16] = divisor
+//
+// Return (dividend / divisor) in edx:eax
+// Return (dividend % divisor) in ebx:ecx
+//
+// Remove arguments from stack
+//
+	{
+	_asm push ebp
+	_asm push edi
+	_asm push esi
+	_asm mov eax, [esp+16]
+	_asm mov edx, [esp+20]
+	_asm mov esi, [esp+24]
+	_asm mov edi, [esp+28]
+	_asm test edx, edx
+	_asm jns dividend_nonnegative
+	_asm neg edx
+	_asm neg eax
+	_asm sbb edx, 0
+	dividend_nonnegative:
+	_asm test edi, edi
+	_asm jns divisor_nonnegative
+	_asm neg edi
+	_asm neg esi
+	_asm sbb edi, 0
+	divisor_nonnegative:
+	_asm call UDiv64
+	_asm mov ebp, [esp+20]
+	_asm mov ecx, edx
+	_asm xor ebp, [esp+28]
+	_asm mov edx, ebx
+	_asm mov ebx, edi
+	_asm jns quotient_nonnegative
+	_asm neg edx
+	_asm neg eax
+	_asm sbb edx, 0
+	quotient_nonnegative:
+	_asm cmp dword ptr [esp+20], 0
+	_asm jns rem_nonnegative
+	_asm neg ebx
+	_asm neg ecx
+	_asm sbb ebx, 0
+	rem_nonnegative:
+	_asm pop esi
+	_asm pop edi
+	_asm pop ebp
+	_asm ret 16
+	}
+
+__NAKED__ void _aulldiv()
+//
+// Divide two 64 bit unsigned integers returning a 64 bit result
+// On entry:
+//		[esp+4], [esp+8] = dividend
+//		[esp+12], [esp+16] = divisor
+// Return result in edx:eax
+// Remove arguments from stack
+//
+	{
+	_asm push ebp
+	_asm push edi
+	_asm push esi
+	_asm push ebx
+	_asm mov eax, [esp+20]
+	_asm mov edx, [esp+24]
+	_asm mov esi, [esp+28]
+	_asm mov edi, [esp+32]
+	_asm call UDiv64
+	_asm mov edx, ebx
+	_asm pop ebx
+	_asm pop esi
+	_asm pop edi
+	_asm pop ebp
+	_asm ret 16
+	}
+
+__NAKED__ void _alldiv()
+//
+// Divide two 64 bit signed integers returning a 64 bit result
+// On entry:
+//		[esp+4], [esp+8] = dividend
+//		[esp+12], [esp+16] = divisor
+// Return result in edx:eax
+// Remove arguments from stack
+//
+	{
+	_asm push ebp
+	_asm push edi
+	_asm push esi
+	_asm push ebx
+	_asm mov eax, [esp+20]
+	_asm mov edx, [esp+24]
+	_asm mov esi, [esp+28]
+	_asm mov edi, [esp+32]
+	_asm test edx, edx
+	_asm jns dividend_nonnegative
+	_asm neg edx
+	_asm neg eax
+	_asm sbb edx, 0
+	dividend_nonnegative:
+	_asm test edi, edi
+	_asm jns divisor_nonnegative
+	_asm neg edi
+	_asm neg esi
+	_asm sbb edi, 0
+	divisor_nonnegative:
+	_asm call UDiv64
+	_asm mov ecx, [esp+24]
+	_asm mov edx, ebx
+	_asm xor ecx, [esp+32]
+	_asm jns quotient_nonnegative
+	_asm neg edx
+	_asm neg eax
+	_asm sbb edx, 0
+	quotient_nonnegative:
+	_asm pop ebx
+	_asm pop esi
+	_asm pop edi
+	_asm pop ebp
+	_asm ret 16
+	}
+
+__NAKED__ void _aullrem()
+//
+// Divide two 64 bit unsigned integers and return 64 bit remainder
+// On entry:
+//		[esp+4], [esp+8] = dividend
+//		[esp+12], [esp+16] = divisor
+// Return result in edx:eax
+// Remove arguments from stack
+//
+	{
+	_asm push ebp
+	_asm push edi
+	_asm push esi
+	_asm push ebx
+	_asm mov eax, [esp+20]
+	_asm mov edx, [esp+24]
+	_asm mov esi, [esp+28]
+	_asm mov edi, [esp+32]
+	_asm call UDiv64
+	_asm mov eax, edx
+	_asm mov edx, edi
+	_asm pop ebx
+	_asm pop esi
+	_asm pop edi
+	_asm pop ebp
+	_asm ret 16
+	}
+
+__NAKED__ void _allrem()
+//
+// Divide two 64 bit signed integers and return 64 bit remainder
+// On entry:
+//		[esp+4], [esp+8] = dividend
+//		[esp+12], [esp+16] = divisor
+// Return result in edx:eax
+// Remove arguments from stack
+//
+	{
+	_asm push ebp
+	_asm push edi
+	_asm push esi
+	_asm push ebx
+	_asm mov eax, [esp+20]
+	_asm mov edx, [esp+24]
+	_asm mov esi, [esp+28]
+	_asm mov edi, [esp+32]
+	_asm test edx, edx
+	_asm jns dividend_nonnegative
+	_asm neg edx
+	_asm neg eax
+	_asm sbb edx, 0
+	dividend_nonnegative:
+	_asm test edi, edi
+	_asm jns divisor_nonnegative
+	_asm neg edi
+	_asm neg esi
+	_asm sbb edi, 0
+	divisor_nonnegative:
+	_asm call UDiv64
+	_asm mov eax, edx
+	_asm mov edx, edi
+	_asm cmp dword ptr [esp+24], 0
+	_asm jns rem_nonnegative
+	_asm neg edx
+	_asm neg eax
+	_asm sbb edx, 0
+	rem_nonnegative:
+	_asm pop ebx
+	_asm pop esi
+	_asm pop edi
+	_asm pop ebp
+	_asm ret 16
+	}
+
+__NAKED__ void _allshr()
+//
+// Arithmetic shift right EDX:EAX by CL
+//
+	{
+	_asm cmp cl, 64
+	_asm jae asr_count_ge_64
+	_asm cmp cl, 32
+	_asm jae asr_count_ge_32
+	_asm shrd eax, edx, cl
+	_asm sar edx, cl
+	_asm ret
+	asr_count_ge_32:
+	_asm sub cl, 32
+	_asm mov eax, edx
+	_asm cdq
+	_asm sar eax, cl
+	_asm ret
+	asr_count_ge_64:
+	_asm sar edx, 32
+	_asm mov eax, edx
+	_asm ret
+	}
+
+__NAKED__ void _allshl()
+//
+// shift left EDX:EAX by CL
+//
+	{
+	_asm cmp cl, 64
+	_asm jae lsl_count_ge_64
+	_asm cmp cl, 32
+	_asm jae lsl_count_ge_32
+	_asm shld edx, eax, cl
+	_asm shl eax, cl
+	_asm ret
+	lsl_count_ge_32:
+	_asm sub cl, 32
+	_asm mov edx, eax
+	_asm xor eax, eax
+	_asm shl edx, cl
+	_asm ret
+	lsl_count_ge_64:
+	_asm xor edx, edx
+	_asm xor eax, eax
+	_asm ret
+	}
+
+__NAKED__ void _aullshr()
+//
+// Logical shift right EDX:EAX by CL
+//
+	{
+	_asm cmp cl, 64
+	_asm jae lsr_count_ge_64
+	_asm cmp cl, 32
+	_asm jae lsr_count_ge_32
+	_asm shrd eax, edx, cl
+	_asm shr edx, cl
+	_asm ret
+	lsr_count_ge_32:
+	_asm sub cl, 32
+	_asm mov eax, edx
+	_asm xor edx, edx
+	_asm shr eax, cl
+	_asm ret
+	lsr_count_ge_64:
+	_asm xor edx, edx
+	_asm xor eax, eax
+	_asm ret
+	}
+
+
+}
+
+
+#endif 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp6_7/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+ARMV5
+
+PRJ_MMPFILES
+diagsuppress.mmp
+diagsuppress_noarmlibs.mmp
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp6_7/diagsuppress.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,98 @@
+/*
+* Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This function is simple a way to get these EXPORT statements into
+* the .in file. These symbols will therefore be referenced from
+* the export table and so **forced** into the DLL
+*
+*/
+
+
+__asm void __rt_exporter_dummy(void)
+{
+	AREA |.directive|, READONLY, NOALLOC
+
+	PRESERVE8
+
+	DCB "#<SYMEDIT>#\n"
+
+/// Standard double precision floating-point arithmetic helper functions
+
+	DCB "EXPORT __aeabi_dadd\n"
+	DCB "EXPORT __aeabi_ddiv\n"
+	DCB "EXPORT __aeabi_dmul\n"
+	DCB "EXPORT __aeabi_dneg\n"
+	DCB "EXPORT __aeabi_drsub\n"
+	DCB "EXPORT __aeabi_dsub\n"
+
+/// Standard double precision floating-point comparison helper functions
+
+	DCB "EXPORT __aeabi_cdcmpeq\n"
+	DCB "EXPORT __aeabi_cdcmple\n"
+	DCB "EXPORT __aeabi_cdrcmple\n"
+	DCB "EXPORT __aeabi_dcmpeq\n"
+	DCB "EXPORT __aeabi_dcmplt\n"
+	DCB "EXPORT __aeabi_dcmple\n"
+	DCB "EXPORT __aeabi_dcmpge\n"
+	DCB "EXPORT __aeabi_dcmpgt\n"
+	DCB "EXPORT __aeabi_dcmpun\n"
+
+/// Standard single precision floating-point arithmetic helper functions
+
+	DCB "EXPORT __aeabi_fadd\n"
+	DCB "EXPORT __aeabi_fdiv\n"
+	DCB "EXPORT __aeabi_fmul\n"
+	DCB "EXPORT __aeabi_fneg\n"
+	DCB "EXPORT __aeabi_frsub\n"
+	DCB "EXPORT __aeabi_fsub\n"
+
+/// Standard single precision floating-point comparison helper functions
+
+	DCB "EXPORT __aeabi_cfcmpeq\n"
+	DCB "EXPORT __aeabi_cfcmple\n"
+	DCB "EXPORT __aeabi_cfrcmple\n"
+	DCB "EXPORT __aeabi_fcmpeq\n"
+	DCB "EXPORT __aeabi_fcmplt\n"
+	DCB "EXPORT __aeabi_fcmple\n"
+	DCB "EXPORT __aeabi_fcmpge\n"
+	DCB "EXPORT __aeabi_fcmpgt\n"
+	DCB "EXPORT __aeabi_fcmpun\n"
+
+/// Standard floating-point to integer conversions
+
+	DCB "EXPORT __aeabi_d2iz\n"
+	DCB "EXPORT __aeabi_d2uiz\n"
+	DCB "EXPORT __aeabi_d2lz\n"
+	DCB "EXPORT __aeabi_d2ulz\n"
+	DCB "EXPORT __aeabi_f2iz\n"
+	DCB "EXPORT __aeabi_f2uiz\n"
+	DCB "EXPORT __aeabi_f2lz\n"
+	DCB "EXPORT __aeabi_f2ulz\n"
+
+/// Standard conversions between floating types
+
+	DCB "EXPORT __aeabi_d2f\n"
+	DCB "EXPORT __aeabi_f2d\n"
+
+/// Standard integer to floating-point conversions
+
+	DCB "EXPORT __aeabi_i2d\n"
+	DCB "EXPORT __aeabi_ui2d\n"
+	DCB "EXPORT __aeabi_l2d\n"
+	DCB "EXPORT __aeabi_ul2d\n"
+	DCB "EXPORT __aeabi_i2f\n"
+	DCB "EXPORT __aeabi_ui2f\n"
+	DCB "EXPORT __aeabi_l2f\n"
+	DCB "EXPORT __aeabi_ul2f\n"
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp6_7/diagsuppress.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGETTYPE		dll
+SOURCEPATH		.
+SOURCE			diagsuppress.cpp
+
+SYSTEMINCLUDE		../../include
+
+capability		all
+
+VENDORID 0x70000001
+
+TARGET 			diagsuppress_test.dll
+LINKAS			diagsuppress.dll
+NOEXPORTLIBRARY
+
+start armcc
+    armrt
+    arminc
+
+    #if defined(ARMCC_3_1)
+    armlibs     c_5.l cpprt_5.l h_5.l
+
+    #elif defined(ARMCC_2_2)
+    #ifdef MARM_ARMV5
+	ARMLIBS		c_t__un.l cpprt_t__u.l
+    #else
+	ARMLIBS		c_a__un.l cpprt_a__u.l
+    #endif
+
+    #endif
+end
+
+unpagedcode
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp6_7/diagsuppress_noarmlibs.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGETTYPE		dll
+SOURCEPATH		.
+SOURCE			diagsuppress.cpp
+
+SYSTEMINCLUDE		../../include
+
+capability		all
+
+VENDORID 0x70000001
+
+TARGET 			diagsuppress_noarmlibs_test.dll
+LINKAS			diagsuppress_noarmlibs.dll
+NOEXPORTLIBRARY
+
+start armcc
+    armrt
+    arminc
+end
+
+unpagedcode
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp8/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,5 @@
+PRJ_PLATFORMS
+ARMV5 WINSCW 
+
+PRJ_MMPFILES
+test_mmp_version.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp8/test_mmp_version.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,9 @@
+
+#include "e32def.h"
+
+char test[] = "test mmp keyword VERSION";
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp8/test_mmp_version.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,12 @@
+
+TARGET			test_mmp_version
+TARGETTYPE		EXE
+
+LIBRARY			euser.lib
+
+SYSTEMINCLUDE		/epoc32/include
+
+SOURCE			test_mmp_version.cpp
+
+VERSION			6
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp9_10/armfpu.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple test";
+
+
+TInt test1;
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp9_10/armfpu_soft.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+target			test_softvfp
+TARGETTYPE		exe
+SOURCEPATH		.
+SOURCE			armfpu.cpp
+
+UID				0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+
+ARMFPU 			softvfp
+
+capability		all
+paged
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp9_10/armfpu_vfpv2.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+target			test_vfpv2
+TARGETTYPE		exe
+SOURCEPATH		.
+SOURCE			armfpu.cpp
+
+UID				0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+
+ARMFPU 			vfpv2
+
+capability		all
+paged
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/mmp/mmp9_10/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+ARMV5
+
+PRJ_MMPFILES
+armfpu_soft.mmp
+armfpu_vfpv2.mmp
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/non_ascii/cmd.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1 @@
+-c armv5_urel åäö
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/bwins/t_oedll.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,16 @@
+EXPORTS
+	??0CMessenger@@AAE@AAVCConsoleBase@@@Z @ 1 NONAME ; CMessenger::CMessenger(class CConsoleBase &)
+	??1CMessenger@@UAE@XZ @ 2 NONAME ; CMessenger::~CMessenger(void)
+	??_ECBase@@UAE@I@Z @ 3 NONAME ; CBase::~CBase(unsigned int)
+	??_ECMessenger@@UAE@I@Z @ 4 NONAME ; CMessenger::~CMessenger(unsigned int)
+	?ConstructL@CMessenger@@AAEXABVTDesC16@@@Z @ 5 NONAME ; void CMessenger::ConstructL(class TDesC16 const &)
+	?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @ 6 NONAME ; class CMessenger * CMessenger::NewLC(class CConsoleBase &, class TDesC16 const &)
+	?ShowMessage@CMessenger@@QAEXXZ @ 7 NONAME ; void CMessenger::ShowMessage(void)
+	?bar@@YAHXZ @ 8 NONAME ; int bar(void)
+	myfoo @ 9 NONAME
+	??_R0?AVCBase@@@8~ @ 10 NONAME ; class CBase `MW RTTI Type Descriptor'
+	?uid@@3UTEmulatorImageHeader@@A @ 11 NONAME ; struct TEmulatorImageHeader uid
+	??_7CBase@@6B@~ @ 12 NONAME ; const CBase::`vftable'
+	??_7CMessenger@@6B@~ @ 13 NONAME ; const CMessenger::`vftable'
+	??_R0?AVCMessenger@@@8~ @ 14 NONAME ; class CMessenger `MW RTTI Type Descriptor'
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/eabi/t_oedll.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,14 @@
+EXPORTS
+	_Z3barv @ 1 NONAME
+	_ZN10CMessenger10ConstructLERK7TDesC16 @ 2 NONAME
+	_ZN10CMessenger11ShowMessageEv @ 3 NONAME
+	_ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 @ 4 NONAME
+	_ZN10CMessengerC1ER12CConsoleBase @ 5 NONAME
+	_ZN10CMessengerC2ER12CConsoleBase @ 6 NONAME
+	_ZN10CMessengerD0Ev @ 7 NONAME
+	_ZN10CMessengerD1Ev @ 8 NONAME
+	_ZN10CMessengerD2Ev @ 9 NONAME
+	_ZTI10CMessenger @ 10 NONAME
+	_ZTV10CMessenger @ 11 NONAME
+	myfoo @ 12 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/group/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,37 @@
+/*
+* Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_MMPFILES
+t_oedll
+t_oeexe
+t_oelib
+symbian_lib
+symbian_exe
+symbian_exe_with_stdcpp
+oe_exe_without_stdcpp
+
+// Trying to use lib with symbian new() and delete() in a STD exe
+wrong_newlib_oe_exe
+
+// Trying to use lib with open environment new() and delete() in a symbian c++ exe
+wrong_newlib_symbian_exe
+// end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/group/oe_exe_without_stdcpp.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET			oe_exe_without_stdcpp.exe
+TARGETTYPE		stdexe
+romtarget
+ramtarget		sys/bin/
+SOURCEPATH		..
+
+// Emulator images have different export data
+#ifdef WINS
+SOURCE			t_oeexe_wins.cpp
+#else
+SOURCE			t_oeexe.cpp
+#endif
+
+NOSTDCPP
+
+LIBRARY			euser.lib efsrv.lib 
+SYSTEMINCLUDE	/epoc32/include ..
+VENDORID		0x70000001
+capability		all -TCB
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/group/symbian_exe.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			symbian_newlib.exe
+TARGETTYPE		EXE
+
+// Test backslash to / here:
+TARGETPATH		\sys\bin
+
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCEPATH 		..
+SOURCE			wrong_newlib_symbian.cpp
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+PAGED
+EPOCCALLDLLENTRYPOINTS
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/group/symbian_exe_with_stdcpp.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			symbian_exe_with_stdcpp.exe
+TARGETTYPE		EXE
+
+// Test backslash to / here:
+TARGETPATH		\sys\bin
+
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCEPATH 		..
+SOURCE			wrong_newlib_symbian.cpp
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+PAGED
+EPOCCALLDLLENTRYPOINTS
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
+
+STDCPP
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/group/symbian_lib.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			symbian_test.lib
+TARGETTYPE		LIB
+UID			0x100039ce 0x00000001
+SECUREID		0x10003a5
+SYSTEMINCLUDE		/epoc32/include
+SOURCEPATH		..
+SOURCE			symbian_lib.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/group/t_oedll.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+TARGET			t_oedll.dll
+TARGETTYPE		stddll
+CAPABILITY		all
+romtarget
+ramtarget 		sys/bin/
+
+VENDORID 		0x70000001
+
+SOURCEPATH    	..
+SOURCE        	t_oedll.cpp
+
+USERINCLUDE   	..
+SYSTEMINCLUDE 	/epoc32/include
+
+LIBRARY       	euser.lib
+nostrictdef
+nocompresstarget
+epocallowdlldata
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/group/t_oeexe.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET			t_oeexe.exe
+TARGETTYPE		stdexe
+romtarget
+ramtarget		sys/bin/
+SOURCEPATH		..
+
+// Emulator images have different export data
+#ifdef WINS
+SOURCE			t_oeexe_wins.cpp
+#else
+SOURCE			t_oeexe.cpp
+#endif
+
+LIBRARY			euser.lib efsrv.lib t_oedll.lib
+SYSTEMINCLUDE	/epoc32/include ..
+VENDORID		0x70000001
+capability		all -TCB
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/group/t_oelib.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET			t_oelib.lib
+TARGETTYPE		stdlib
+SOURCEPATH		..
+STDCPP
+
+SOURCE			t_oelib.cpp
+
+SYSTEMINCLUDE	/epoc32/include ..
+VENDORID		0x70000001
+capability		all -TCB
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/group/wrong_newlib_oe_exe.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET			wrong_newlib_test_oeexe.exe
+TARGETTYPE		stdexe
+romtarget
+ramtarget		sys/bin/
+SOURCEPATH		..
+STDCPP
+
+// Emulator images have different export data
+#ifdef WINS
+SOURCE			t_oeexe_wins.cpp
+#else
+SOURCE			t_oeexe.cpp
+#endif
+
+LIBRARY			euser.lib t_oedll.lib
+
+// Standard Symbian Library Created by Simple_lib\simple.mmp
+STATICLIBRARY		symbian_test.lib
+
+SYSTEMINCLUDE	/epoc32/include ..
+VENDORID		0x70000001
+capability		all -TCB
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/group/wrong_newlib_symbian_exe.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			wrong_newlib_seexe.exe
+TARGETTYPE		EXE
+
+// Test backslash to / here:
+TARGETPATH		\sys\bin
+
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+
+// Open Environment Library Created by oe\group\t_oelib.mmp
+STATICLIBRARY		t_oelib.lib
+
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCEPATH 		..
+SOURCE			wrong_newlib_symbian.cpp
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+PAGED
+EPOCCALLDLLENTRYPOINTS
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/symbian_lib.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* test_lib
+*
+*/
+
+
+#ifndef __SYMBIAN32__
+#define EXPORT __declspec(export)
+#else
+#define EXPORT 
+#endif
+
+EXPORT int test_oe_function_A(int arg)
+{
+	return (arg + 1);
+}
+
+int test_oe_function_B(int arg)
+{
+	return (arg + 2);
+}
+
+int test_oe_function_C(int arg)
+{
+	return (arg + 3);
+}
+
+
+int test_oe_allocator(int arg)
+{
+	int *p = new int;
+	delete p;
+
+	return 0;
+}
+
+// end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/t_oedll.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,155 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+
+
+#include "t_oedll.h"
+
+
+
+// construct/destruct
+
+
+
+EXPORT_C CMessenger* CMessenger::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+
+	{
+
+	CMessenger* self=new (ELeave) CMessenger(aConsole);
+
+	CleanupStack::PushL(self);
+
+	self->ConstructL(aString);
+
+	return self;
+
+	}
+
+
+
+CMessenger::~CMessenger() // destruct - virtual, so no export
+
+	{
+
+	delete iString;
+
+	}
+
+
+
+EXPORT_C void CMessenger::ShowMessage()
+
+	{
+
+	_LIT(KFormat1,"%S\n");
+
+	iConsole.Printf(KFormat1, iString); // notify completion
+
+	}
+
+
+
+// constructor support
+
+// don't export these, because used only by functions in this DLL, eg our NewLC()
+
+
+
+CMessenger::CMessenger(CConsoleBase& aConsole) // first-phase C++ constructor
+
+	: iConsole(aConsole)
+
+	{
+
+	}
+
+
+
+void CMessenger::ConstructL(const TDesC& aString) // second-phase constructor
+
+	{
+
+	iString=aString.AllocL(); // copy given string into own descriptor
+
+    }
+
+
+
+class MY_MY
+
+{
+
+public:
+
+	MY_MY(int aA){iA = aA;}
+
+	int iA;
+
+	int get() { return iA;}
+
+};
+
+
+
+class MY_TYPE
+
+{
+
+public:
+
+	MY_TYPE(MY_MY& aA){memcpy(&iA, &aA, sizeof(iA));}
+
+	int iA;
+
+	int get() { return iA;}
+
+};
+
+
+
+EXPORT_C int bar()
+
+{
+
+	MY_MY amymy(0x1234);
+
+	static MY_TYPE mytype(amymy);
+
+	myfoo();
+
+	return mytype.get();
+
+}
+
+
+
+extern "C" {
+
+EXPORT_C int myfoo()
+
+{
+
+	return 0x1234;
+
+}
+
+
+
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/t_oedll.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.h*
+*/
+
+
+ 
+
+
+
+#include <e32cons.h>
+
+extern "C" {
+
+extern int IMPORT_C myfoo();
+
+}
+
+
+
+IMPORT_C int bar();
+
+class CMessenger : public CBase
+
+  	{
+
+public:
+
+		// Construction
+
+	IMPORT_C static CMessenger* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+
+		// Destructor - virtual and class not intended
+
+		// for derivation, so not exported
+
+	~CMessenger();
+
+		// general functions - exported
+
+	IMPORT_C void ShowMessage();
+
+private:
+
+		// C++ constructor - not exported;
+
+		// implicitly called from NewLC()
+
+	CMessenger(CConsoleBase& aConsole);
+
+		// 2nd phase construction, called by NewLC()
+
+	void ConstructL(const TDesC& aString); // second-phase constructor
+
+private:
+
+	CConsoleBase& iConsole; // Use the console (but not owned)
+
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+
+	};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/t_oeexe.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,120 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\dll\t_oeexport.cpp*
+*/
+
+
+/**
+
+Overview:
+
+	Tests it is possible to retrieve the 0th ordinal from exes and dlls
+
+	that are marked as having named symbol export data.  This is loaded
+
+	as non-XIP so loader fixups of 0th ordinal imports can be tested
+
+
+
+API Information:
+
+	RProcess, RLibrary
+
+
+
+Details:
+
+	- 	Test reading 0th ordinal from a dll which has a E32EpocExpSymInfoHdr 
+
+		struct at the 0th ordinal and verify the contents of the header
+
+	-	Test attempts to get the 0th ordinal from a dll without the named symbol 
+
+		data returns NULL
+
+	-	Test reading the named symbol data from an exe that contains a
+
+		E32EpocExpSymInfoHdr struct at the 0th ordinal and verify the contents
+
+	-	Test import fixups has correctly fixed up the 0th ordinal of the static
+
+		dependencies to this stdexe
+
+	-	Test NULL is returned when attempting to read the 0th ordinal of
+
+		an exe that doesn't contain a E32EpocExpSymInfoHdr
+
+
+
+Platforms/Drives/Compatibility:
+
+	All
+
+
+
+Assumptions/Requirement/Pre-requisites:
+
+
+
+	
+
+Failures and causes:
+
+	
+
+	
+
+Base Port information:
+
+
+
+*/
+
+
+
+
+
+namespace std 
+
+{
+
+
+
+	 bool uncaught_exception() 
+
+		 {
+
+			 return false;
+
+		 }
+
+}
+
+
+
+
+
+#include <t_oedll.h>
+
+
+
+TInt E32Main()
+
+	{
+
+	return KErrNone;
+
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/t_oeexe_wins.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,208 @@
+/*
+* Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* e32test\dll\t_oeexport_wins.cpp*
+*/
+
+
+/**
+
+Overview:
+
+	Emulator version that tests it is possible to retrieve the 0th 
+
+	ordinal from exes and dlls that are marked as having named 
+
+	symbol export data.
+
+
+
+API Information:
+
+	RProcess, RLibrary
+
+
+
+Details:
+
+	- 	Test reading 0th ordinal from a dll which has a E32EmulExpSymInfoHdr 
+
+		struct at the 0th ordinal and verify the contents of the header
+
+	-	Test NULL is returned on attempts to get the 0th ordinal from a 
+
+		dll without the named symbol data
+
+	-	Test reading the named symbol data from an exe that contains a
+
+		E32EmulExpSymInfoHdr struct at the 0th ordinal and verify the contents
+
+	-	Test NULL is returned when attempting to read the 0th ordinal of
+
+		an exe that doesn't contain a E32EmulExpSymInfoHdr
+
+
+
+Platforms/Drives/Compatibility:
+
+	All
+
+
+
+Assumptions/Requirement/Pre-requisites:
+
+
+
+	
+
+Failures and causes:
+
+	
+
+	
+
+Base Port information:
+
+
+
+*/
+
+#include <t_oedll.h>
+
+#include <e32test.h>
+
+#include <e32panic.h>
+
+#include <f32image.h>
+
+
+
+RTest test(_L("T_OEEXPORT"));
+
+
+
+LOCAL_D void VerifyHdr(E32EmulExpSymInfoHdr& aExpectedHdr, E32EmulExpSymInfoHdr &aReadHdr)
+
+	{
+
+	test(aExpectedHdr.iSymCount == aReadHdr.iSymCount);
+
+	test(aExpectedHdr.iDllCount == aReadHdr.iDllCount);
+
+	}
+
+
+
+TInt E32Main()
+
+	{
+
+	test.Title();
+
+
+
+	test.Start(_L("Test retrieving 0th ordinal and therefore named symbol export data"));
+
+	
+
+	E32EmulExpSymInfoHdr tmpHdr;
+
+	E32EmulExpSymInfoHdr *readHdr;
+
+	RLibrary library;
+
+
+
+	// The values for the header of the dll with a 0th ordinal
+
+	tmpHdr.iSymCount = 0x0;
+
+	tmpHdr.iDllCount = 0x3;
+
+	test(library.Load(_L("t_oedll.dll")) == KErrNone);
+
+	test.Next(_L("Attempt to retrieve named symbol data from t_oedll.dll"));
+
+	readHdr = (E32EmulExpSymInfoHdr*)library.Lookup(0);
+
+	test(readHdr!=NULL);
+
+//#define PRINT_ZEROTH
+
+#ifdef PRINT_ZEROTH
+
+	test.Printf(_L("iSymCount=%08x;iDllCounts=%08x\n"),readHdr->iSymCount,readHdr->iDllCount);
+
+#endif
+
+	test.Next(_L("Verify export data of t_oedll.dll is that expected"));
+
+	VerifyHdr(tmpHdr, *readHdr);
+
+	library.Close();
+
+
+
+	test.Next(_L("Verify lookup on dll without oe export data returns NULL"));
+
+	test(library.Load(_L("t_dll1.dll")) == KErrNone);
+
+	readHdr = (E32EmulExpSymInfoHdr*)library.Lookup(0);
+
+	test(readHdr == NULL);
+
+	library.Close();
+
+
+
+	// The values for the header of the exe of the current process with a 0th ordinal
+
+	tmpHdr.iSymCount = 0x3;
+
+	tmpHdr.iDllCount = 0x5;
+
+	test.Next(_L("Attempt to retrieve named symbol data from current process"));
+
+	readHdr = (E32EmulExpSymInfoHdr*)(RProcess::ExeExportData());
+
+	test(readHdr!=NULL);
+
+	test.Next(_L("Verify export data 0th ordinal data of this exe is that expected"));
+
+#ifdef PRINT_ZEROTH
+
+	test.Printf(_L("iSymCount=%08x;iDllCounts=%08x;\n"),readHdr->iSymCount,readHdr->iDllCount);
+
+#endif
+
+	VerifyHdr(tmpHdr, *readHdr);
+
+
+
+/*
+
+On Emulator can't examine fixups & depdencies via export data as data not included
+
+in E32EmulExpSymInfoHdr.  This is all handled by the MS loader.
+
+
+
+*/
+
+	test.End();
+
+	return KErrNone;
+
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/t_oelib.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#ifndef __SYMBIAN32__
+#define EXPORT __declspec(export) 
+#else
+#define EXPORT  
+#endif
+
+EXPORT int test_oe_function_A(int arg)
+{
+	return (arg + 1);
+}
+
+int test_oe_function_B(int arg)
+{
+	return (arg + 2);
+}
+
+int test_oe_function_C(int arg)
+{
+	return (arg + 3);
+}
+
+
+int test_oe_allocator(int arg)
+{
+	int *p = new int;
+	delete p;
+
+	return 0;
+}
+
+// end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/oe/wrong_newlib_symbian.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Test bad OE-symbian newlib mix";
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp1.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7 WINSCW ARMV5SMP
+
+PRJ_MMPFILES
+pp1.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp1.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			test_pp1
+#include "pp_common.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp10.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7 WINSCW ARMV5SMP
+
+PRJ_MMPFILES
+pp10.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp10.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			test_pp10
+#include "pp_common.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp2.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7 WINSCW ARMV5SMP
+
+PRJ_MMPFILES
+pp2.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp2.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			test_pp2
+#include "pp_common.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp3.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7 WINSCW ARMV5SMP
+
+PRJ_MMPFILES
+pp3.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp3.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			test_pp3
+#include "pp_common.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp4.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7 WINSCW ARMV5SMP
+
+PRJ_MMPFILES
+pp4.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp4.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			test_pp4
+#include "pp_common.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp5.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7 WINSCW ARMV5SMP
+
+PRJ_MMPFILES
+pp5.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp5.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			test_pp5
+#include "pp_common.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp6.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7 WINSCW ARMV5SMP
+
+PRJ_MMPFILES
+pp6.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp6.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			test_pp6
+#include "pp_common.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp7.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7 WINSCW ARMV5SMP
+
+PRJ_MMPFILES
+pp7.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp7.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			test_pp7
+#include "pp_common.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp8.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7 WINSCW ARMV5SMP
+
+PRJ_MMPFILES
+pp8.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp8.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			test_pp8
+#include "pp_common.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp9.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7 WINSCW ARMV5SMP
+
+PRJ_MMPFILES
+pp9.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp9.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			test_pp9
+#include "pp_common.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/pp_common.mmh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGETTYPE		EXE
+
+// Test backslash to / here:
+TARGETPATH		\sys\bin
+
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp test.cia test1.c++ test2.cxx test3.Cpp test4.cc test5.CC test6.C++
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+OPTION GCCE -O2
+PAGED
+DEBUGGABLE
+EPOCCALLDLLENTRYPOINTS
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/ppbldinf_commandfile	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1 @@
+-b pp1.inf -b pp2.inf -b pp3.inf -b pp4.inf -b pp5.inf -b pp6.inf -b pp7.inf -b pp8.inf -b pp9.inf -b pp10.inf 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/readme	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1 @@
+Parallel Parsing test resources
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/test.cia	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// Some random assembler or a "straight" dummy function
+
+#ifndef __WINSCW__
+EXPORT_C __NAKED__ void dummy()
+	{
+	asm("stmia	r0, {r4-r11, sp, lr}	");
+	asm("mov  r0, #0"); 
+	}
+#else
+int fred(int i)
+	{
+	return 1;
+	}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/test.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+#include "test.h"
+
+char test[]="Simple test";
+
+TInt test1();
+TInt test2();
+TInt test3();
+TInt test4();
+TInt test5();
+TInt test6();
+
+TInt E32Main()
+{
+	test1();
+	test2();
+	test3();
+	test4();
+	test5();
+	test6();
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/test.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,17 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// Blank header file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/test1.c++	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+#include "e32def.h" // intentional  include
+
+
+TInt test1()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/test2.cxx	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+#include "e32def.h" // intentional  include
+
+
+TInt test2()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/test3.Cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+
+TInt test3()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/test4.cc	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+#include "e32def.h" // intentional  include
+
+
+TInt test4()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/test5.CC	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+#include "e32def.h" // intentional  include
+
+
+TInt test5()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pp/test6.C++	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+#include "e32def.h" // intentional  include
+
+
+TInt test6()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pre-export/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_EXPORTS
+mmh/my.mmh	/epoc32/include/my.mmh
+mmh/nonexistent /epoc32/include/nevertobe.mmh
+mmh/my.mmh	/epoc32/include/second.mmh
+
+
+// check that the __GNUC__ macro is defined
+
+PRJ_MMPFILES
+#if __GNUC__ >= 3
+missing1.mmp
+simple.mmp
+missing2.mmp
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pre-export/mmh/my.mmh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+/* to be included in an mmp file */
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pre-export/simple.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <my.mmh>
+
+TARGET					petest
+TARGETTYPE				EXE
+UID						0x100039ce 0x00000001
+LIBRARY					euser.lib
+SECUREID				0x10003a5c
+SYSTEMINCLUDE			/epoc32/include
+SOURCE					test.cpp
+MACRO					TEST_MACRO_THAT_DOES_NOTHING
+EPOCSTACKSIZE 			8192
+EPOCHEAPSIZE 			0x5000 65535
+EPOCPROCESSPRIORITY 	low
+
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/pre-export/test.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple test";
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/qt/helloworld.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,13 @@
+#include <QApplication>
+#include <QPushButton>
+
+int main(int argc, char *argv[])
+{
+    QApplication app(argc, argv);
+
+    QPushButton hello("Hello world!");
+    hello.resize(100, 30);
+
+    hello.show();
+    return app.exec();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/qt/helloworldqt.pro	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,8 @@
+
+TEMPLATE = app
+TARGET = 
+DEPENDPATH += .
+INCLUDEPATH += .
+
+# Input
+SOURCES += helloworld.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/refilter/Makefile_broken.log	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,646 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!-- This is a Test Logfile used in test_terminal_filter.py to test the terminal filter's handling of invalid 'recipe' tags (Could be extended to include more test cases) -->
+<buildlog sbs_version="2.9.2-alpha [2009-09-02 sf release]" xmlns="http://symbian.com/xml/build/log" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build/log http://symbian.com/xml/build/log/1_0.xsd">
+<info>sbs: version 2.9.2-alpha [2009-09-02 sf release]
+</info>
+<info>SBS_HOME G:/tcl-personal/iainw/fix2/raptor</info>
+<info>Set-up G:/tcl-personal/iainw/fix2/raptor/sbs_init.xml</info>
+<info>Command-line-arguments </info>
+<info>Current working directory G:\tcl-personal\iainw\fix2\raptor\test\smoke_suite\test_resources\simple</info>
+<info>Environment TMP=C:\DOCUME~1\IAINW\LOCALS~1\Temp</info>
+<info>Environment COMPUTERNAME=D063576</info>
+<info>Environment MWSYM2LIBRARYFILES=MSL_ALL_Static_MSE_Symbian_D.lib;gdi32.lib;user32.lib;kernel32.lib;MSL_All_MSE_Symbian_D.lib;gdi32.lib;user32.lib;kernel32.lib;</info>
+<info>Environment LIB=C:\apps\MSVC6\VC98\mfc\lib;C:\apps\MSVC6\VC98\lib</info>
+<info>Environment USERDOMAIN=SYMBIAN</info>
+<info>Environment __PYTHON__=G:\tcl-personal\iainw\fix2\raptor\\win32\python252\python.exe</info>
+<info>Environment COMMONPROGRAMFILES=C:\Program Files\Common Files</info>
+<info>Environment PROCESSOR_IDENTIFIER=x86 Family 15 Model 6 Stepping 5, GenuineIntel</info>
+<info>Environment CYGWIN=nontsec nosmbntsec</info>
+<info>Environment PROCESSOR_REVISION=0605</info>
+<info>Environment PATH=G:\tcl-personal\iainw\fix2\raptor\\win32\mingw\bin;G:\tcl-personal\iainw\fix2\raptor\\win32\cygwin\bin;G:\tcl-personal\iainw\fix2\raptor\\win32\bin;g:\tcl-personal\iainw\fix2\raptor\bin;G:\tcl-personal\iainw\fix2\raptor\win32\mingw\bin;D:\apps\Python\2.6.2.2\;d:\apps\ECloud\i686_win32\bin;C:\Program Files\Common Files\Symbian\Tools;d:\apps\SITK\stuff;d:\apps\SITK\stuff\stat\bin;d:\apps\SITK\stuff\edgd\bin\;d:\apps\SITK\stuff\cbr;d:\apps\SITK\stuff\ucc\bin;d:\apps\SITK\stuff\testdriver;;d:\apps\2.83.1013;d:\apps\python\2.4;C:\Program Files\PC Connectivity Solution\;D:\APPS\Perl\bin\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\i386;c:\Program Files\Novell\ZENworks\;C:\Program Files\Symantec\pcAnywhere\;d:\apps\Perforce;C:\apps\MSVC6\VC98\bin;C:\apps\MSVC6\Common\Tools;C:\apps\MSVC6\Common\Tools\WinNT;C:\apps\MSVC6\Common\MSDev98\Bin;C:\Apps\Metrowerks\OEM3.1\Symbian_Tools\Command_Line_Tools;C:\Apps\Metrowerks\OEM3.1\Bin\;C:\Apps\Metrowerks\OEM3.1\Symbian_Support\Runtime\Runtime_x86\Runtime_Win32\Libs\MSL_All-Dlls;d:\apps\WinSCP\;C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Tools\Command_Line_Tools;d:\apps\TortoiseHg</info>
+<info>Environment SYSTEMROOT=C:\WINDOWS</info>
+<info>Environment USERPROFILE=C:\Documents and Settings\IAINW</info>
+<info>Environment OLD_PATH=D:\apps\Python\2.6.2.2\;d:\apps\ECloud\i686_win32\bin;C:\Program Files\Common Files\Symbian\Tools;d:\apps\SITK\stuff;d:\apps\SITK\stuff\stat\bin;d:\apps\SITK\stuff\edgd\bin\;d:\apps\SITK\stuff\cbr;d:\apps\SITK\stuff\ucc\bin;d:\apps\SITK\stuff\testdriver;;d:\apps\2.83.1013;d:\apps\python\2.4;C:\Program Files\PC Connectivity Solution\;D:\APPS\Perl\bin\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\i386;c:\Program Files\Novell\ZENworks\;C:\Program Files\Symantec\pcAnywhere\;d:\apps\Perforce;C:\apps\MSVC6\VC98\bin;C:\apps\MSVC6\Common\Tools;C:\apps\MSVC6\Common\Tools\WinNT;C:\apps\MSVC6\Common\MSDev98\Bin;C:\Apps\Metrowerks\OEM3.1\Symbian_Tools\Command_Line_Tools;C:\Apps\Metrowerks\OEM3.1\Bin\;C:\Apps\Metrowerks\OEM3.1\Symbian_Support\Runtime\Runtime_x86\Runtime_Win32\Libs\MSL_All-Dlls;d:\apps\WinSCP\;C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Tools\Command_Line_Tools;d:\apps\TortoiseHg</info>
+<info>Environment RVCT22LIB=C:\Apps\ARM\RVCT\Data\2.2\349\lib</info>
+<info>Environment INCLUDE=C:\apps\MSVC6\VC98\atl\include;C:\apps\MSVC6\VC98\mfc\include;C:\apps\MSVC6\VC98\include</info>
+<info>Environment PROCESSOR_ARCHITECTURE=x86</info>
+<info>Environment ARMROOT=C:\Program Files\ARM</info>
+<info>Environment SBS_HOME=G:\tcl-personal\iainw\fix2\raptor\</info>
+<info>Environment ALLUSERSPROFILE=C:\Documents and Settings\All Users</info>
+<info>Environment __MINGW__=G:\tcl-personal\iainw\fix2\raptor\\win32\mingw</info>
+<info>Environment SESSIONNAME=Console</info>
+<info>Environment HOMEPATH=\</info>
+<info>Environment MWSYM2LIBRARIES=C:\Apps\Metrowerks\OEM3.1\Symbian_Support\Win32-x86 Support\Libraries\Win32 SDK;C:\Apps\Metrowerks\OEM3.1\Symbian_Support\Runtime\Runtime_x86\Runtime_Win32\Libs;C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Support\Win32-x86 Support\Libraries\Win32 SDK;C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Support\Runtime\Runtime_x86\Runtime_Win32\Libs</info>
+<info>Environment USERDNSDOMAIN=PROD.AD.SYMBIAN.INTRA</info>
+<info>Environment __CYGWIN__=G:\tcl-personal\iainw\fix2\raptor\\win32\cygwin</info>
+<info>Environment MSDEVDIR=C:\apps\MSVC6\Common\msdev98</info>
+<info>Environment HOSTPLATFORM=win 32</info>
+<info>Environment USERNAME=iainwilliamson</info>
+<info>Environment OS=Windows_NT</info>
+<info>Environment FLEXLM_TIMEOUT=5000000</info>
+<info>Environment LOGONSERVER=\\UKLONDCS03</info>
+<info>Environment PROMPT=$P$G</info>
+<info>Environment COMSPEC=C:\WINDOWS\system32\cmd.exe</info>
+<info>Environment CLASSPATH=D:\apps\Symbian\SITK\aura\log4j-1.2.8.jar;</info>
+<info>Environment DTEXT_PATH=C:\Apps\ARM\Documentation\DynaText\4.1.1\release\win_32-pentium\bin</info>
+<info>Environment RVCT22INC=C:\Apps\ARM\RVCT\Data\2.2\349\include\windows</info>
+<info>Environment PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.py;.pyw</info>
+<info>Environment FOO=bar</info>
+<info>Environment FP_NO_HOST_CHECK=NO</info>
+<info>Environment WINDIR=C:\WINDOWS</info>
+<info>Environment HOSTPLATFORM_DIR=win32</info>
+<info>Environment TEMP=C:\DOCUME~1\IAINW\LOCALS~1\Temp</info>
+<info>Environment HOMEDRIVE=U:</info>
+<info>Environment ARMLMD_LICENSE_FILE=27001@lon-flexlm02;27001@lon-flexlm01;27001@cam-flexlm02;27001@cam-flexlm01</info>
+<info>Environment SYSTEMDRIVE=C:</info>
+<info>Environment MWCSYM2INCLUDES=C:\Apps\Metrowerks\OEM3.1\Symbian_Support\MSL\MSL_C\MSL_Common\Include\;C:\Apps\Metrowerks\OEM3.1\Symbian_Support\MSL\MSL_C\MSL_Win32\Include\;C:\Apps\Metrowerks\OEM3.1\Symbian_Support\MSL\MSL_C\MSL_X86\;C:\Apps\Metrowerks\OEM3.1\Symbian_Support\MSL\MSL_C++\MSL_Common\Include\;C:\Apps\Metrowerks\OEM3.1\Symbian_Support\MSL\MSL_Extras\MSL_Common\Include\;C:\Apps\Metrowerks\OEM3.1\Symbian_Support\MSL\MSL_Extras\MSL_Win32\Include\;C:\Apps\Metrowerks\OEM3.1\Symbian_Support\Win32-x86 Support\Headers\Win32 SDK\;C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Support\MSL\MSL_C\MSL_Common\Include;C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Support\MSL\MSL_C\MSL_Win32\Include;C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Support\MSL\MSL_C\MSL_X86;C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Support\MSL\MSL_C++\MSL_Common\Include;+C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Common\Include;C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Support\MSL\MSL_Extras\MSL_Win32\Include;C:\APPS\Nokia\Carbide.c++ v1.3\x86Build\Symbian_Support\Win32-x86 Support\Headers\Win32 SDK</info>
+<info>Environment NUMBER_OF_PROCESSORS=2</info>
+<info>Environment APPDATA=C:\Documents and Settings\IAINW\Application Data</info>
+<info>Environment HOMESHARE=\\lonfiler01\uiainwilliamson</info>
+<info>Environment PROCESSOR_LEVEL=15</info>
+<info>Environment NOKIA_LICENSE_FILE=1700@lon-flexlm02;1700@cam-flexlm01; 1700@ban-flexlm01</info>
+<info>Environment EPOCROOT=G:\tcl-personal\iainw\fix2\raptor\test\epocroot\</info>
+<info>Environment RVCT22BIN=C:\Apps\ARM\RVCT\Programs\2.2\349\win_32-pentium</info>
+<info>Environment SITK_PATHS=d:\apps\SITK\stuff;d:\apps\SITK\stuff\stat\bin;d:\apps\SITK\stuff\edgd\bin\;d:\apps\SITK\stuff\cbr;d:\apps\SITK\stuff\ucc\bin;d:\apps\SITK\stuff\testdriver;</info>
+<info>Environment PROGRAMFILES=C:\Program Files</info>
+<info>Duplicate variant 'v95' (the one from 'G:/tcl-personal/iainw/fix2/raptor/lib/config\variants.xml' was replaced by the one in 'G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/sbs_config\overrides.xml')</info>
+<info>Duplicate variant 'root.changes' (the one from 'G:/tcl-personal/iainw/fix2/raptor/lib/config\root.xml' was replaced by the one in 'G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/sbs_config\overrides.xml')</info>
+<info>Buildable configuration 'armv5_urel'</info>
+<info>Buildable configuration 'armv5_udeb'</info>
+<info>Buildable configuration 'winscw_udeb'</info>
+<info>Buildable configuration 'winscw_urel'</info>
+<info>Loaded toolcheck cache: G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/toolcheck_cache_.tmp
+</info>
+<info>Buildable specification group 'CONFIG_WIDE'</info>
+<info>Buildable specification 'config_wide'</info>
+<info>OS version "v95" determined from file "G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/data/buildinfo.txt"</info>
+<info>applying the OS variant to the configuration "armv5_urel".</info>
+<info>'armv5_urel' uses variant hrh file 'G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh'</info>
+<info>OS version "v95" determined from file "G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/data/buildinfo.txt"</info>
+<info>applying the OS variant to the configuration "armv5_udeb".</info>
+<info>'armv5_udeb' uses variant hrh file 'G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh'</info>
+<info>OS version "v95" determined from file "G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/data/buildinfo.txt"</info>
+<info>applying the OS variant to the configuration "winscw_udeb".</info>
+<info>'winscw_udeb' uses variant hrh file 'G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh'</info>
+<info>OS version "v95" determined from file "G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/data/buildinfo.txt"</info>
+<info>applying the OS variant to the configuration "winscw_urel".</info>
+<info>'winscw_urel' uses variant hrh file 'G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh'</info>
+<info>Processing G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf</info>
+<info>Processing G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp for platform armv5_urel + armv5_udeb</info>
+<info>Processing G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp for platform winscw_udeb + winscw_urel</info>
+<info>Buildable specification group 'ALL'</info>
+<info>Buildable specification 'export_0'</info>
+<info>Buildable specification 'build_0'</info>
+<info>Buildable specification 'build_1'</info>
+<info>Running G:/tcl-personal/iainw/fix2/raptor/win32/bin/talonctl.exe start</info>
+<info>Making G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/Makefile.export</info>
+<info>Executing 'G:/tcl-personal/iainw/fix2/raptor/win32/mingw/bin/make.exe HAVE_ORDERONLY=1 -r -f "G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/Makefile.export" -j 4  TALON_DESCRAMBLE=1 '</info>
+make.exe: Nothing to be done for `EXPORT'.
+<info>Making G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/Makefile.bitmap</info>
+<info>Executing 'G:/tcl-personal/iainw/fix2/raptor/win32/mingw/bin/make.exe HAVE_ORDERONLY=1 -r -f "G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/Makefile.bitmap" -j 4  TALON_DESCRAMBLE=1 '</info>
+make.exe: Nothing to be done for `BITMAP'.
+<info>Making G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/Makefile.resource_deps</info>
+<info>Executing 'G:/tcl-personal/iainw/fix2/raptor/win32/mingw/bin/make.exe HAVE_ORDERONLY=1 -r -f "G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/Makefile.resource_deps" -j 4  TALON_DESCRAMBLE=1 '</info>
+make.exe: Nothing to be done for `RESOURCE_DEPS'.
+<info>Making G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/Makefile.resource</info>
+<info>Executing 'G:/tcl-personal/iainw/fix2/raptor/win32/mingw/bin/make.exe HAVE_ORDERONLY=1 -r -f "G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/Makefile.resource" -j 4  TALON_DESCRAMBLE=1 '</info>
+make.exe: Nothing to be done for `RESOURCE'.
+<info>Making G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/Makefile.default</info>
+<info>Executing 'G:/tcl-personal/iainw/fix2/raptor/win32/mingw/bin/make.exe HAVE_ORDERONLY=1 -r -f "G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/Makefile.default" -j 4  TALON_DESCRAMBLE=1 '</info>
+<clean bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel'>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe</file>
+<file>"G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test{000a0000}.def"</file>
+<file>"G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test{000a0000}.dso"</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe.sym</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_urel_objects.via</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe.map</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test3.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test4.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test5.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test1.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test6.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test2.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test3.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test4.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test5.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test1.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test6.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test2.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test3.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test4.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test5.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test1.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test6.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test2.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.cpp</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.pre</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.pre.d</file>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib</dir>
+</clean>
+<whatlog bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel'>
+<build>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe</build>
+<build>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe.map</build>
+<build>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe.map</build>
+</whatlog>
+<clean bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb'>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe</file>
+<file>"G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test{000a0000}.def"</file>
+<file>"G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test{000a0000}.dso"</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe.sym</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_udeb_objects.via</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe.map</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test3.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test4.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test5.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test1.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test6.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test2.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test3.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test4.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test5.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test1.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test6.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test2.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test3.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test4.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test5.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test1.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test6.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test2.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.cpp</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.pre</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.pre.d</file>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib</dir>
+</clean>
+<whatlog bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb'>
+<build>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe</build>
+<build>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe.map</build>
+<build>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe.map</build>
+</whatlog>
+<clean bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb'>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/udeb/test.exe</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.UID.CPP</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test1.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test2.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test3.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test4.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test5.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test6.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_UID_.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test1.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test1.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test2.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test2.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test3.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test3.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test4.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test4.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test5.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test5.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test6.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test6.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_UID_.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_UID_.o.d</file>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/udeb</dir>
+</clean>
+<whatlog bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb'>
+<build>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/udeb/test.exe</build>
+</whatlog>
+<clean bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel'>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel/test.exe</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.UID.CPP</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test1.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test2.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test3.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test4.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test5.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test6.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_UID_.o</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test1.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test1.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test2.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test2.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test3.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test3.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test4.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test4.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test5.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test5.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test6.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test6.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_UID_.dep</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_UID_.o.d</file>
+<file>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel/test.exe.map</file>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel</dir>
+<dir>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel</dir>
+</clean>
+<whatlog bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel'>
+<build>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel/test.exe</build>
+<build>G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel/test.exe.map</build>
+</whatlog>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test2.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test2.cxx'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test2.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test2.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test2.cxx
+
+]]><time start='1253890703.95062' elapsed='1.391' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test1.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test1.c++'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test1.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test1.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test1.c++
+
+]]><time start='1253890703.95062' elapsed='1.406' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cpp'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cpp
+
+]]><time start='1253890703.95062' elapsed='1.422' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test5.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test5.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test5.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test5.o.fake' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC'> <!-- Fake recipe, nested in ther CDATA of a real one -->
+<status exit='ok' attempt='1' />
+</recipe>
+]><time start='1253890705.41936' elapsed='0.500' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='cia2cpp' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.pre' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -E -O2 -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ -D__CIA__ --cpp --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.pre G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -M -E -O2 -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ -D__CIA__ --cpp --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.pre G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia
+
+]]><time start='1253890703.95062' elapsed='2.016' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test3.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test3.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test3.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp
+
+]]><time start='1253890705.38811' elapsed='0.641' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test4.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test4.cc'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test4.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test4.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test4.cc
+
+]]><time start='1253890705.38811' elapsed='0.750' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test6.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test6.C++'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test6.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test6.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test6.C++
+
+]]><time start='1253890705.96623' elapsed='0.656' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test1.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test1.c++'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D_DEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test1.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test1.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test1.c++
+
+]]><time start='1253890706.18498' elapsed='0.562' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cpp'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D_DEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cpp
+
+]]><time start='1253890706.04435' elapsed='0.719' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test2.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test2.cxx'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D_DEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test2.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test2.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test2.cxx
+
+]]><time start='1253890706.66935' elapsed='0.672' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='cia2cpp' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.pre' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -E -O0 -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D_DEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ -D__CIA__ --cpp --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.pre G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -M -E -O0 -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D_DEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ -D__CIA__ --cpp --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.pre G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia
+
+]]><time start='1253890706.05998' elapsed='1.281' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test3.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D_DEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test3.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test3.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp
+
+]]><time start='1253890706.77872' elapsed='0.656' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test4.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test4.cc'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D_DEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test4.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test4.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test4.cc
+
+]]><time start='1253890706.84122' elapsed='0.703' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test5.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D_DEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test5.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test5.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC
+
+]]><time start='1253890707.41935' elapsed='0.625' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='compile' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test6.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test6.C++'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp --cpp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D_DEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ --preinclude G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/rvct/rvct.h -JG:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant --depend_format=unix --depend G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test6.o.d -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test6.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test6.C++
+
+]]><time start='1253890707.37247' elapsed='0.672' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -g -O0 -inline off -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d _DEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia
+mwccsym2.exe: warning: No file mapping matches 'test.cia' (unrecognized file contents or filename extension); treating as source text
+test.cia:3: warning: variable / argument 'i' is not used in function
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_.dep
+
+]]><time start='1253890707.55997' elapsed='4.016' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test2.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test2.cxx'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -g -O0 -inline off -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d _DEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test2.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test2.cxx
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test2.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test2.cxx \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test2.dep
+
+]]><time start='1253890708.05997' elapsed='3.547' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test1.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test1.c++'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -g -O0 -inline off -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d _DEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test1.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test1.c++
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test1.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test1.c++ \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test1.dep
+
+]]><time start='1253890708.05997' elapsed='3.609' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cpp'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -g -O0 -inline off -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d _DEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cpp
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cpp \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.dep
+
+]]><time start='1253890707.48185' elapsed='4.328' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test5.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -g -O0 -inline off -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d _DEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test5.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test5.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test5.dep
+
+]]><time start='1253890711.71619' elapsed='0.516' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test3.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -g -O0 -inline off -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d _DEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test3.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test3.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test3.dep
+
+]]><time start='1253890711.62244' elapsed='0.625' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test4.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test4.cc'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -g -O0 -inline off -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d _DEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test4.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test4.cc
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test4.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test4.cc \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test4.dep
+
+]]><time start='1253890711.70057' elapsed='0.578' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test6.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test6.C++'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -g -O0 -inline off -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d _DEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test6.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test6.C++
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test6.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test6.C++ \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test6.dep
+
+]]><time start='1253890711.84119' elapsed='0.484' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32generateUIDcpp' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.UID.CPP' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source=''>
+<![CDATA[
++ echo '// SBS-generated uid source file'
++ echo '#include <e32cmn.h>'
++ echo '#pragma data_seg(".SYMBIAN")'
++ echo '__EMULATOR_IMAGE_HEADER2(0x1000007a,0x100039ce,0x00000001,EPriorityLow,0x00000b07u,0x00000000u,0x10003a5c,0x00000000,0x00010000,0)'
++ echo '#pragma data_seg()'
+
+]]><time start='1253890712.27869' elapsed='0.281' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -O4,s -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d NDEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia
+mwccsym2.exe: warning: No file mapping matches 'test.cia' (unrecognized file contents or filename extension); treating as source text
+test.cia:3: warning: variable / argument 'i' is not used in function
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cia \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_.dep
+
+]]><time start='1253890712.32557' elapsed='0.422' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cpp'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -O4,s -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d NDEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cpp
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test.cpp \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.dep
+
+]]><time start='1253890712.27869' elapsed='0.516' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test1.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test1.c++'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -O4,s -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d NDEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test1.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test1.c++
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test1.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test1.c++ \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test1.dep
+
+]]><time start='1253890712.38807' elapsed='0.422' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test2.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test2.cxx'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -O4,s -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d NDEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test2.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test2.cxx
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test2.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test2.cxx \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test2.dep
+
+]]><time start='1253890712.57556' elapsed='0.453' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test3.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -O4,s -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d NDEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test3.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test3.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test3.dep
+
+]]><time start='1253890712.77869' elapsed='0.422' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test5.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -O4,s -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d NDEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test5.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test5.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test5.CC \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test5.dep
+
+]]><time start='1253890712.84119' elapsed='0.391' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test4.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test4.cc'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -O4,s -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d NDEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test4.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test4.cc
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test4.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test4.cc \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test4.dep
+
+]]><time start='1253890712.82556' elapsed='0.484' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32generateUIDcpp' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.UID.CPP' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source=''>
+<![CDATA[
++ echo '// SBS-generated uid source file'
++ echo '#include <e32cmn.h>'
++ echo '#pragma data_seg(".SYMBIAN")'
++ echo '__EMULATOR_IMAGE_HEADER2(0x1000007a,0x100039ce,0x00000001,EPriorityLow,0x00000b07u,0x00000000u,0x10003a5c,0x00000000,0x00010000,0)'
++ echo '#pragma data_seg()'
+
+]]><time start='1253890713.23181' elapsed='0.203' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test6.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test6.C++'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -O4,s -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d NDEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test6.o G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test6.C++
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test6.o: G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/test6.C++ \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test6.dep
+
+]]><time start='1253890713.10681' elapsed='0.391' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_UID_.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.UID.CPP'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -O4,s -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d NDEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_UID_.o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.UID.CPP
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_UID_.o: G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test.UID.CPP \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_UID_.dep
+
+]]><time start='1253890713.52868' elapsed='0.875' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32compile2object' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_UID_.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.UID.CPP'>
+<![CDATA[
++ mwccsym2.exe -c -align 4 -warnings on -w nohidevirtual,nounusedexpr -msgstyle gcc -enum int -str pool -exc ms -trigraphs on -cwd source -g -O0 -inline off -runtime staticmulti -wchar_t off -nostdinc -gccdepends -MD -d __SYMBIAN32__ -d __CW32__ -d __WINS__ -d __WINSCW__ -d __SUPPORT_CPP_EXCEPTIONS__ -d _UNICODE -d TEST_MACRO_THAT_DOES_NOTHING -d _DEBUG -d OSVARIANT95WASAPPLIED -d __EXE__ -i- -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -i G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant -include Symbian_OS.hrh -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_UID_.o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.UID.CPP
++ G:/tcl-personal/iainw/fix2/raptor/win32/cygwin/bin/sed.exe 's#\\\(.\)#/\1#g;s#/ #\\ #g;s#\([A-Za-z]:\)\\#\1/#g;1,1s#.*: .* \(.\)\?$#    G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_UID_.o: G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test.UID.CPP \1#' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_UID_.dep
+
+]]><time start='1253890713.45056' elapsed='0.953' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='tranasm' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.cpp' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
+<![CDATA[
++ CPPFILT=G:/tcl-personal/iainw/fix2/raptor/win32/mingw/bin/c++filt.exe
++ perl.exe G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/tools/tranasm.pl --suppress-check --output=G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.cpp G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.pre
+
+]]><time start='1253890713.26306' elapsed='2.062' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='tranasm' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.cpp' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source=''>
+<![CDATA[
++ CPPFILT=G:/tcl-personal/iainw/fix2/raptor/win32/mingw/bin/c++filt.exe
++ perl.exe G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/tools/tranasm.pl --suppress-check --output=G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.cpp G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.pre
+
+]]><time start='1253890713.32556' elapsed='2.000' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='cia2cpp2o' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.cpp'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O0 -g --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -D_DEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ -D__CIA__ --cpp -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.cpp -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_.o
+
+]]><time start='1253890715.34117' elapsed='0.437' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='win32simplelink' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/udeb/test.exe' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_udeb' platform='winscw' phase='ALL' source=''>
+<![CDATA[
++ MWSym2LibraryFiles='msl_all_static_mse_symbian_d.lib;gdi32.lib;user32.lib;kernel32.lib'
++ mwldsym2.exe -msgstyle gcc -stdlib -subsystem windows -g -heapreserve=64 -heapcommit=20 -m '?_E32Bootstrap@@YGXXZ' G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/udeb/eexe.lib G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/udeb/scppnwdl.lib G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/udeb/euser.lib -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/udeb/test.exe -noimplib -l G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb -search @G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/udeb/test_udeb_objects.lrf
+mwldsym2.exe: warning: Multiply defined symbol: ___get_MSL_init_count in
+mwldsym2.exe: warning: files uc_cwhelp.obj (eexe.lib), startup.win32.c.obj (msl_all_static_mse_symbian_d.lib),
+mwldsym2.exe: warning: keeping definition in startup.win32.c.obj
+
+]]><time start='1253890714.71618' elapsed='1.156' />
+<status exit='ok' attempt='1' />
+</recipe>
+<status exit='failed' attempt='1' />
+</recipe> <!-- Repeated closure - what status do we get? -->
+<recipe name='win32simplelink' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel/test.exe' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source=''>
+<![CDATA[
++ MWSym2LibraryFiles='msl_all_static_mse_symbian_d.lib;gdi32.lib;user32.lib;kernel32.lib'
++ mwldsym2.exe -msgstyle gcc -stdlib -subsystem windows -heapreserve=64 -heapcommit=20 -m '?_E32Bootstrap@@YGXXZ' -map G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel/test.exe.map G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel/eexe.lib G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel/scppnwdl.lib G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/udeb/euser.lib -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel/test.exe -noimplib -l G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel -search @G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/winscw/urel/test_urel_objects.lrf
+mwldsym2.exe: warning: Multiply defined symbol: ___get_MSL_init_count in
+mwldsym2.exe: warning: files uc_cwhelp.obj (eexe.lib), startup.win32.c.obj (msl_all_static_mse_symbian_d.lib),
+mwldsym2.exe: warning: keeping definition in startup.win32.c.obj
+
+]]><time start='1253890714.68493' elapsed='1.203' />
+<status exit='ok' attempt='1' />
+<recipe name='win32simplelink' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/winscw/urel/test.exe' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='winscw_urel' platform='winscw' phase='ALL' source=''> <!-- Repeated opening - will this hide the warnings above? -->
+</recipe>
+<recipe name='cia2cpp2o' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.o' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.cpp'>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armcc.exe -O2 --dwarf2 --dllimport_runtime --exceptions --exceptions_unwind --diag_suppress 161,611,654,997,1152,1300,1464,1488,2523,6318,6331 --diag_error 1267 --cpu 5T --enum_is_int -Ono_known_library --fpmode ieee_no_fenv --export_all_vtbl --memaccess -UL41 --no_vfe --apcs /inter -c --thumb -D__MARM_THUMB__ --fpu softvfp -D__MARM_INTERWORK__ -D__SUPPORT_CPP_EXCEPTIONS__ -D_UNICODE -D__SYMBIAN32__ -D__ARMCC__ -D__EPOC32__ -D__MARM__ -D__EABI__ '-D__PRODUCT_INCLUDE__="G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant/Symbian_OS.hrh"' -DTEST_MACRO_THAT_DOES_NOTHING -D__MARM_ARMV5__ -D__ARMCC_2__ -D__ARMCC_2_2__ -DNDEBUG -DOSVARIANT95WASAPPLIED -D__EXE__ -D__CIA__ --cpp -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include -JG:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/include/variant G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.cpp -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_.o
+
+]]><time start='1253890715.34117' elapsed='0.547' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='link' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe.sym' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armlink.exe --diag_suppress 6331 --bpabi --reloc --no_scanlib --datacompressor=off --dll --split --rw-base 0x400000 --symver_soname --soname 'test{000a0000}[00000001].exe' --entry _E32Startup 'G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/eexe.lib(uc_exe_.o)' -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe.sym --symbols --list G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe.map --via G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/urel/test_urel_objects.via G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/usrt2_2.lib G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/euser.dso G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/scppnwdl.dso G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/drtaeabi.dso G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/dfpaeabi.dso G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/dfprvct2_2.dso G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/drtrvct2_2.dso 'C:/Apps/ARM/RVCT/Data/2.2/349/lib/armlib/h_t__uf.l(switch8.o)'
+
+]]><time start='1253890716.15367' elapsed='0.891' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='link' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe.sym' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source=''>
+<![CDATA[
++ C:/Apps/ARM/RVCT/Programs/2.2/349/win_32-pentium/armlink.exe --diag_suppress 6331 --bpabi --reloc --no_scanlib --datacompressor=off --debug --dll --split --rw-base 0x400000 --symver_soname --soname 'test{000a0000}[00000001].exe' --entry _E32Startup 'G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/eexe.lib(uc_exe_.o)' -o G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe.sym --symbols --list G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe.map --via G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/simple/c_bad5e30874f7a6c6/test_/armv5/udeb/test_udeb_objects.via G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/usrt2_2.lib G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/euser.dso G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/scppnwdl.dso G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/drtaeabi.dso G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/dfpaeabi.dso G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/dfprvct2_2.dso G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/drtrvct2_2.dso 'C:/Apps/ARM/RVCT/Data/2.2/349/lib/armlib/h_t__uf.l(switch8.o)'
+
+]]><time start='1253890716.15367' elapsed='1.219' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='postlink' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_urel' platform='armv5' phase='ALL' source=''>
+<![CDATA[
++ G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/tools/elf2e32.exe --sid=0x10003a5c --version=10.0 --uid1=0x1000007a --uid2=0x100039ce --uid3=0x00000001 --capability=TCB+ProtServ+DiskAdmin+AllFiles+PowerMgmt+CommDD --fpu=softvfp --codepaging=paged --datapaging=paged --targettype=EXE --output=G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe --elfinput=G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/urel/test.exe.sym '--linkas=test{000a0000}[00000001].exe' --priority=Low --stack=0x2000 --heap=0x5000,0xffff --debuggable '--libpath=G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/;C:/Apps/ARM/RVCT/Data/2.2/349/lib/armlib'
+
+]]><time start='1253890717.05991' elapsed='0.641' />
+<status exit='ok' attempt='1' />
+</recipe>
+<recipe name='postlink' target='G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe' host='' layer='' component='' bldinf='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/bld.inf' mmp='G:/tcl-personal/iainw/fix2/raptor/test/smoke_suite/test_resources/simple/simple.mmp' config='armv5_udeb' platform='armv5' phase='ALL' source=''>
+<![CDATA[
++ G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/tools/elf2e32.exe --sid=0x10003a5c --version=10.0 --uid1=0x1000007a --uid2=0x100039ce --uid3=0x00000001 --capability=TCB+ProtServ+DiskAdmin+AllFiles+PowerMgmt+CommDD --fpu=softvfp --codepaging=paged --datapaging=paged --targettype=EXE --output=G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe --elfinput=G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/udeb/test.exe.sym '--linkas=test{000a0000}[00000001].exe' --priority=Low --stack=0x2000 --heap=0x5000,0xffff --debuggable '--libpath=G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/release/armv5/lib/;C:/Apps/ARM/RVCT/Data/2.2/349/lib/armlib'
+
+]]><time start='1253890717.38803' elapsed='0.312' />
+<status exit='ok' attempt='1' />
+</recipe>
+<info>Running G:/tcl-personal/iainw/fix2/raptor/win32/bin/talonctl.exe stop</info>
+<info>The make-engine exited successfully.</info>
+<info>Run time 16 seconds</info>
+<info>Created/Updated toolcheck cache: G:/tcl-personal/iainw/fix2/raptor/test/epocroot/epoc32/build/toolcheck_cache_.tmp
+</info>
+</buildlog>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/refilter/refilter.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,48 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+class Refilter:
+	"""
+	Refilters an existing logfile with a specified filter
+	
+	Parameters:
+			filtermodule: 	The name of the filter file to use for refiltering
+			filtername:		The name of the filter class
+			logfilename: 	The logfile to be parsed
+	"""
+	class Dummy_raptor:
+		def __init__(self, logfile, targets):
+			self.logFileName = logfile
+			self.quiet = False
+			self.dummy = False
+			self.targets = targets
+
+	def __init__(self, filtermodule, filtername, logfilename):
+		dummy_raptor = Refilter.Dummy_raptor(logfilename, [])
+		
+		module=__import__(filtermodule)
+		self.filter=eval("module."+filtername+"()")
+
+		self.filter.open(dummy_raptor)
+
+	def refilter(self, inputlog):
+		file=open(inputlog)
+
+		while True:
+			line=file.readline()
+			if not line:
+				break
+			self.filter.write(line)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/refilter/testfilterterminal	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,5 @@
+# Kicks off the Terminal Filter refiltering for use with terminal_filter_tests.py 
+
+export PYTHONPATH=$SBS_HOME/python:$SBS_HOME/python/plugins
+
+python $SBS_HOME/test/smoke_suite/test_resources/refilter/testfilterterminal.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/refilter/testfilterterminal.bat	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,27 @@
+@rem
+@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+@rem All rights reserved.
+@rem This component and the accompanying materials are made available
+@rem under the terms of the License "Eclipse Public License v1.0"
+@rem which accompanies this distribution, and is available
+@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+@rem
+@rem Initial Contributors:
+@rem Nokia Corporation - initial contribution.
+@rem
+@rem Contributors:
+@rem
+@rem Description: 
+@rem
+@rem Kicks off the Terminal Filter refiltering for use with terminal_filter_tests.py
+
+@SETLOCAL
+
+@SET HOSTPLATFORM=win 32
+@SET HOSTPLATFORM_DIR=win32
+
+@set PYTHONPATH=%SBS_HOME%/python;%SBS_HOME%/python/plugins
+
+@python %SBS_HOME%\test\smoke_suite\test_resources\refilter\testfilterterminal.py
+
+@endlocal
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/refilter/testfilterterminal.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+import os
+import refilter
+
+refilter = refilter.Refilter("filter_terminal","FilterTerminal","foo")
+
+refilter.refilter(os.environ["SBS_HOME"]
+		+ "/test/smoke_suite/test_resources/refilter/Makefile_broken.log")
Binary file sbsv2/raptor/test/smoke_suite/test_resources/resource/aifsrccl/DEF24.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/resource/aifsrccl/DEF2M.BMP has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/resource/dependentresource.rss	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,333 @@
+/*
+* Copyright (c) 2003-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* LOGWRAP.RSS
+*
+*/
+
+
+#include <testresource_badef.rh>
+#include <e32capability.h>
+
+#include "../inc/testresource.rh"
+#include "../inc/testresource.hrh"
+#include "testresource.rls"
+
+#include "testresource.mbg"
+#include <testresource.rsg>
+
+// MACRO statements in .mmp files should be reflected in resource preprocessing
+#ifndef SHOULD_BE_DEFINED
+#error "mmp MACRO SHOULD_BE_DEFINED is not defined!"
+#endif
+
+// Initial configuration
+RESOURCE CONFIG r_log_initial_config
+	{
+	size = 1000; // Maximum number of events
+	recent = 20; // Maximum size of recent lists
+	age = 2592000; // 30 days
+	}
+
+  RESOURCE ARRAY r_log_initial_events
+   	{
+   	items = 
+   		{
+  		ETYPE { uid = KLogCallEventType; description = LOG_CALL_EVENT_TYPE; },
+  		ETYPE { uid = KLogDataEventType; description = LOG_DATA_EVENT_TYPE; },
+  		ETYPE { uid = KLogFaxEventType; description = LOG_FAX_EVENT_TYPE; },
+  		ETYPE { uid = KLogShortMessageEventType; description = LOG_SHORT_MESSAGE_EVENT_TYPE; },
+  		ETYPE { uid = KLogTaskSchedulerEventType; description = LOG_TASK_SCHEDULER_EVENT_TYPE; },
+  		ETYPE { uid = KLogPacketDataEventType; description = LOG_PACKET_DATA_EVENT_TYPE; },
+
+
+  		ETYPE { uid = KLogLbsSelfLocateEventType; description = LOG_LBS_SELF_LOCATE_EVENT_TYPE; },
+  		ETYPE { uid = KLogLbsExternalLocateEventType; description = LOG_LBS_EXTERNAL_LOCATE_EVENT_TYPE; },
+ 		ETYPE { uid = KLogLbsTransmitLocationEventType; description = LOG_LBS_TRANSMIT_LOCATION_EVENT_TYPE; },
+ 		ETYPE { uid = KLogLbsNetworkLocateEventType; description = LOG_LBS_NETWORK_LOCATE_EVENT_TYPE; },
+ 		ETYPE { uid = KLogLbsAssistanceDataEventType; description = LOG_LBS_ASSISTANCE_DATA_EVENT_TYPE; }
+
+   		};
+   	}
+
+
+
+RESOURCE ARRAY r_log_security
+//
+// [See logwrap.rh for the definitions of SECURITY and CAPABILITY.]
+//
+// This structure defines settings for platform security in the Log engine.
+// All event types defined above in 'r_log_initial_events' need to be policed.
+// The server must always determine whether a client thread has the required
+// capability to read/write a log event(s) of a built-in type.  Each operation
+// may have from one to seven capabilities defined for it.  All operations on 
+// built in types _MUST_ have an associated security policy defined here.  If no
+// security is required, then use 'cap=ECapability_None'.  The CAPABILITY values
+// defined here will provide constructor arguments for TSecurityPolicy objects.
+// The maximum number of CAPABILITY(s) for each read or write operation is 7.
+// ( a read_caps or a write_caps { contains <= 7 CAPABILITY{}   statements }  )
+// Note that SID-based security isn't supported in the Log Engine.
+//
+	{
+	items = 
+		{
+		SECURITY 
+			{ 
+			uid = KLogCallEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadUserData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteUserData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogDataEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadUserData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteUserData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogFaxEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadUserData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteUserData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogShortMessageEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadUserData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteUserData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogTaskSchedulerEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadUserData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapability_None; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogPacketDataEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadUserData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteUserData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogLbsSelfLocateEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadDeviceData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteDeviceData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogLbsExternalLocateEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadDeviceData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteDeviceData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogLbsTransmitLocationEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadDeviceData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteDeviceData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogLbsNetworkLocateEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadDeviceData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteDeviceData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogLbsAssistanceDataEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadDeviceData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteDeviceData; }
+				};
+			}
+		};
+	}
+
+
+// Index entries
+RESOURCE ARRAY r_log_indexes
+	{
+	items =
+		{
+		INDEX
+			{
+			name = "Index1"; // do not translate
+			table = "Event"; // do not translate
+			keys = 
+				{
+				KEY { col = "Id"; } // do not translate
+				};
+			},
+		INDEX
+			{
+			name = "Index2"; // do not translate
+			table = "Event"; // do not translate
+			keys =
+				{
+				KEY { col = "ETime"; } // do not translate
+				};
+			},
+		INDEX
+			{
+			name = "Index3"; // do not translate
+			table = "String"; // do not translate
+			keys = 
+				{
+				KEY { col = "Id"; } // do not translate
+				};
+			}
+		};
+	}
+
+// Recent list setup
+RESOURCE ARRAY r_log_recent
+	{
+	items =
+		{
+		RECENT
+			{
+			id = KLogRecentIncomingCalls;
+			duplicate = ELogRemotePartyField|ELogContactField|ELogNumberField;
+			conditions = 
+				{
+				MATCH { field = ELogEventTypeField; value = KLogCallEventType; },
+				MATCH { field = ELogDirectionField; string = LOG_DIR_IN; },
+				MATCH { field = ELogDirectionField; string = LOG_DIR_IN_ALT; }
+				};
+			},
+		RECENT
+			{
+			id = KLogRecentOutgoingCalls;
+			duplicate = ELogRemotePartyField|ELogContactField|ELogNumberField;
+			conditions = 
+				{
+				MATCH { field = ELogEventTypeField; value = KLogCallEventType; },
+				MATCH { field = ELogDirectionField; string = LOG_DIR_OUT; },
+				MATCH { field = ELogDirectionField; string = LOG_DIR_OUT_ALT; }
+				};
+			},
+		RECENT
+			{
+			id = KLogRecentMissedCalls;
+			duplicate = ELogRemotePartyField|ELogContactField|ELogNumberField;
+			conditions = 
+				{
+				MATCH { field = ELogEventTypeField; value = KLogCallEventType; },
+				MATCH { field = ELogDirectionField; string = LOG_DIR_MISSED; },
+				MATCH { field = ELogDirectionField; string = LOG_DIR_MISSED_ALT; }
+				};
+			}
+		};
+	}
+
+
+// Direction
+RESOURCE LBUF r_log_dir_in { txt = LOG_DIR_IN; }
+RESOURCE LBUF r_log_dir_out { txt = LOG_DIR_OUT; }
+RESOURCE LBUF r_log_dir_in_alt { txt = LOG_DIR_IN_ALT; }
+RESOURCE LBUF r_log_dir_out_alt { txt = LOG_DIR_OUT_ALT; }
+RESOURCE LBUF r_log_dir_fetched { txt = LOG_DIR_FETCHED; }
+RESOURCE LBUF r_log_dir_missed { txt = LOG_DIR_MISSED; }
+RESOURCE LBUF r_log_dir_missed_alt { txt = LOG_DIR_MISSED_ALT; }
+
+
+// Delivery
+RESOURCE LBUF r_log_del_pending { txt = LOG_DEL_PENDING; }
+RESOURCE LBUF r_log_del_sent { txt = LOG_DEL_SENT; }
+RESOURCE LBUF r_log_del_failed { txt = LOG_DEL_FAILED; }
+/* R_LOG_DEL_NONE comes from the rsg that we're trying to depend on */
+RESOURCE LBUF r_log_del_none { txt = R_LOG_DEL_NONE; } 
+RESOURCE LBUF r_log_del_done { txt = LOG_DEL_DONE; }
+RESOURCE LBUF r_log_del_not_sent { txt = LOG_DEL_NOT_SENT; }
+RESOURCE LBUF r_log_del_scheduled { txt = LOG_DEL_SCHEDULED; }
+
+// Other
+RESOURCE LBUF r_log_remote_unknown { txt = LOG_REMOTE_UNKNOWN; }
+RESOURCE LBUF r_log_remote_multiple { txt = LOG_REMOTE_MULTIPLE; }
+RESOURCE LBUF r_log_subject_none { txt = LOG_SUBJECT_NONE; }
+RESOURCE LBUF r_log_subject_data_message { txt = LOG_SUBJECT_DATA_MESSAGE; }
+
+// Connection
+RESOURCE LBUF r_log_con_connected { txt = LOG_CON_CONNECTED; }
+RESOURCE LBUF r_log_con_connecting { txt = LOG_CON_CONNECTING; }
+RESOURCE LBUF r_log_con_disconnecting { txt = LOG_CON_DISCONNECTING; }
+RESOURCE LBUF r_log_con_disconnected{ txt = LOG_CON_DISCONNECTED; }
+RESOURCE LBUF r_log_con_suspended{ txt = LOG_CON_SUSPENDED; }
+
+// Delivery
+RESOURCE LBUF r_log_del_notified { txt = LOG_DEL_NOTIFIED; } 
+RESOURCE LBUF r_log_del_expired { txt = LOG_DEL_EXPIRED; }  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/resource/group/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_EXPORTS
+../inc/testresource.hrh /epoc32/include/testresource.hrh
+testresource_badef.rh /epoc32/include/testresource_badef.rh
+
+
+PRJ_MMPFILES
+testresource.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/resource/group/testresource.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET                  testresource
+TARGETTYPE              EXE
+LIBRARY                 euser.lib
+SECUREID                0x10003a5c
+SYSTEMINCLUDE   /epoc32/include
+SOURCEPATH              ../
+SOURCE                  test.cpp 
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
+
+UID     0x1000008d 0x10005342
+VENDORID 0x70000001
+USERINCLUDE     ../inc
+SYSTEMINCLUDE   /epoc32/include
+
+MACRO SHOULD_BE_DEFINED
+
+
+START RESOURCE          testresource.rss
+// Test backslash to forward slash conversion here:
+TARGETPATH              resource\testresource
+HEADER
+LANG SC 01
+END
+
+START RESOURCE          testresource.rss
+TARGETPATH              resource/testresource2
+HEADERONLY
+LANG 01 sc
+END
+
+START RESOURCE          testresource.rss
+TARGETPATH              resource/testresource3
+LANG 02 sc
+END
+
+
+START RESOURCE          dependentresource.rss
+TARGETPATH              resource/dependentresource
+LANG sc
+END
+
+START BITMAP	testresource.mbm
+HEADER
+
+TARGETPATH		resource/apps
+SOURCEPATH		../aifsrccl
+SOURCE			c8,1 DEF24.BMP DEF2M.BMP
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/resource/group/testresource_badef.rh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,51 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* BADEF.RH
+*
+*/
+
+
+#if !defined(__BADEF_RH__)
+#define __BADEF_RH__
+
+STRUCT BA_RSS_SIGNATURE
+    {
+    LONG signature=0; // this value must be changed if the resource file is loaded by an environment
+    SRLINK self;
+    }
+
+STRUCT TBUF
+    {
+    BUF buf; // non-zero terminated text string
+    }
+
+STRUCT LBUF
+    {
+    LTEXT txt; // leading-byte counted text string
+    }
+
+STRUCT ARRAY
+    {
+    STRUCT items[];
+    }
+
+STRUCT UID_NAME_PAIR
+	{
+	LONG uid;
+	STRUCT name; // an LBUF
+	}
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/resource/inc/testresource.hrh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#if !defined(__LOGWRAP_HRH__)
+#define __LOGWRAP_HRH__
+
+// Event Uid's
+#define KLogCallEventType 0x1000550D
+#define KLogDataEventType 0x10005566
+#define KLogFaxEventType 0x10005567
+#define KLogShortMessageEventType 0x10005568
+#define KLogMailEventType 0x10005569
+#define KLogTaskSchedulerEventType  0x1000585E
+#define KLogPacketDataEventType  0x10008F8E
+#define KLogLbsSelfLocateEventType 0x102822B2
+#define KLogLbsExternalLocateEventType 0x102822B3
+#define KLogLbsTransmitLocationEventType 0x102822B4
+#define KLogLbsNetworkLocateEventType 0x102822B5
+#define KLogLbsAssistanceDataEventType 0x102822B6
+
+// Recent lists (Make consecutive)
+#define KLogRecentIncomingCalls 1
+#define KLogRecentOutgoingCalls 2
+#define KLogRecentMissedCalls 3
+
+// Filter fields
+#define ELogFirstFilterField 0x1
+#define ELogContactField 0x1
+#define ELogDirectionField 0x2
+#define ELogDurationTypeField 0x4
+#define ELogEventTypeField 0x8
+#define ELogNumberField 0x10
+#define ELogRemotePartyField 0x20
+#define ELogStatusField 0x40
+#define ELogStartTimeField 0x80
+#define ELogEndTimeField 0x100
+#define ELogFlagsField 0x200
+#define ELogSubjectField 0x400
+#define ELogLinkField 0x800
+#define ELogDataField 0x1000
+#define ELogLastFilterField 0x200
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/resource/inc/testresource.rh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#define ELogEnable 1
+#define ELogDisable 0
+#define ELogUnique 1
+#define ELogUndefined -1
+
+STRUCT CONFIG
+	{
+	WORD size;
+	BYTE recent;
+	LONG age;
+	}
+
+
+STRUCT CAPABILITY
+	{
+	LONG cap;
+	}
+	
+STRUCT SECURITY
+	{
+	LONG uid;
+	STRUCT read_caps[];
+	STRUCT write_caps[];
+	}	
+
+STRUCT ETYPE
+	{
+	LONG uid;
+	LTEXT description;
+	BYTE enabled = ELogEnable;
+	}
+	
+ENUM {EAsc,EDesc};
+
+STRUCT KEY
+	{
+	LTEXT col;
+	WORD order = EAsc;
+	WORD len = ELogUndefined;
+	}
+
+ENUM { EDbCompareNormal, EDbCompareFolded, EDbCompareCollated };
+
+STRUCT INDEX
+	{
+	LTEXT name;
+	LTEXT table;
+	STRUCT keys[];
+	BYTE unique = 0;
+	BYTE compare = EDbCompareNormal;
+	}
+
+STRUCT RECENT
+	{
+	BYTE id;
+	WORD duplicate = 0;
+	STRUCT conditions[];
+	}
+
+STRUCT MATCH
+	{
+	WORD field;
+	LTEXT string = "";
+	LONG value = 0;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/resource/test.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Resource test";
+
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/resource/testresource.rls	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+rls_string LOG_CALL_EVENT_TYPE	"Voice call"
+rls_string LOG_DATA_EVENT_TYPE	"Data call"
+rls_string LOG_FAX_EVENT_TYPE	"Fax"
+rls_string LOG_SHORT_MESSAGE_EVENT_TYPE	"Short message"
+rls_string LOG_MAIL_EVENT_TYPE	"Mail"
+rls_string LOG_TASK_SCHEDULER_EVENT_TYPE  "Task scheduler"
+rls_string LOG_PACKET_DATA_EVENT_TYPE	"Packet Data"
+rls_string LOG_LBS_SELF_LOCATE_EVENT_TYPE	"Location Requested by On Board Application"
+rls_string LOG_LBS_EXTERNAL_LOCATE_EVENT_TYPE	"Location Requested by Remote Party"
+rls_string LOG_LBS_TRANSMIT_LOCATION_EVENT_TYPE	"Location Sent to Remote Party"
+rls_string LOG_LBS_NETWORK_LOCATE_EVENT_TYPE	"Location Determined by Network"
+rls_string LOG_LBS_ASSISTANCE_DATA_EVENT_TYPE	"Location Data Obtained from Network"
+
+// Direction
+rls_string LOG_DIR_IN	"Incoming"
+rls_string LOG_DIR_OUT	"Outgoing"
+rls_string LOG_DIR_IN_ALT	"Incoming on alternate line"
+rls_string LOG_DIR_OUT_ALT	"Outgoing on alternate line"
+rls_string LOG_DIR_FETCHED	"Fetched"
+rls_string LOG_DIR_MISSED	"Missed call"
+rls_string LOG_DIR_MISSED_ALT	"Missed call on alternate line"
+
+// Delivery
+rls_string LOG_DEL_PENDING	"Pending"
+rls_string LOG_DEL_SENT		"Sent"
+rls_string LOG_DEL_FAILED	"Failed"
+rls_string LOG_DEL_NONE		"No delivery"
+rls_string LOG_DEL_DONE		"Delivered"
+rls_string LOG_DEL_NOT_SENT	"Not sent"
+rls_string LOG_DEL_SCHEDULED	"Scheduled"
+
+// Other
+rls_string LOG_REMOTE_UNKNOWN	"Unknown"
+rls_string LOG_REMOTE_MULTIPLE	"Multiple Parties"
+rls_string LOG_SUBJECT_NONE	"No subject"
+rls_string LOG_SUBJECT_DATA_MESSAGE	"Data Message"
+
+// Connection
+rls_string LOG_CON_CONNECTED		"Connected"
+rls_string LOG_CON_CONNECTING		"Connecting"
+rls_string LOG_CON_DISCONNECTING	"Disconnecting"
+rls_string LOG_CON_DISCONNECTED 	"Disconnected"
+rls_string LOG_CON_SUSPENDED		"Suspended"
+
+// Delivery
+rls_string LOG_DEL_NOTIFIED		"Notified"
+rls_string LOG_DEL_EXPIRED		"Expired"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/resource/testresource.rss	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,331 @@
+/*
+* Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* LOGWRAP.RSS
+*
+*/
+
+
+#include <testresource_badef.rh>
+#include <e32capability.h>
+
+#include "../inc/testresource.rh"
+#include "../inc/testresource.hrh"
+#include "testresource.rls"
+
+#include "testresource.mbg"
+
+// MACRO statements in .mmp files should be reflected in resource preprocessing
+#ifndef SHOULD_BE_DEFINED
+#error "mmp MACRO SHOULD_BE_DEFINED is not defined!"
+#endif
+
+// Initial configuration
+RESOURCE CONFIG r_log_initial_config
+	{
+	size = 1000; // Maximum number of events
+	recent = 20; // Maximum size of recent lists
+	age = 2592000; // 30 days
+	}
+
+  RESOURCE ARRAY r_log_initial_events
+   	{
+   	items = 
+   		{
+  		ETYPE { uid = KLogCallEventType; description = LOG_CALL_EVENT_TYPE; },
+  		ETYPE { uid = KLogDataEventType; description = LOG_DATA_EVENT_TYPE; },
+  		ETYPE { uid = KLogFaxEventType; description = LOG_FAX_EVENT_TYPE; },
+  		ETYPE { uid = KLogShortMessageEventType; description = LOG_SHORT_MESSAGE_EVENT_TYPE; },
+  		ETYPE { uid = KLogTaskSchedulerEventType; description = LOG_TASK_SCHEDULER_EVENT_TYPE; },
+  		ETYPE { uid = KLogPacketDataEventType; description = LOG_PACKET_DATA_EVENT_TYPE; },
+
+
+  		ETYPE { uid = KLogLbsSelfLocateEventType; description = LOG_LBS_SELF_LOCATE_EVENT_TYPE; },
+  		ETYPE { uid = KLogLbsExternalLocateEventType; description = LOG_LBS_EXTERNAL_LOCATE_EVENT_TYPE; },
+ 		ETYPE { uid = KLogLbsTransmitLocationEventType; description = LOG_LBS_TRANSMIT_LOCATION_EVENT_TYPE; },
+ 		ETYPE { uid = KLogLbsNetworkLocateEventType; description = LOG_LBS_NETWORK_LOCATE_EVENT_TYPE; },
+ 		ETYPE { uid = KLogLbsAssistanceDataEventType; description = LOG_LBS_ASSISTANCE_DATA_EVENT_TYPE; }
+
+   		};
+   	}
+
+
+
+RESOURCE ARRAY r_log_security
+//
+// [See logwrap.rh for the definitions of SECURITY and CAPABILITY.]
+//
+// This structure defines settings for platform security in the Log engine.
+// All event types defined above in 'r_log_initial_events' need to be policed.
+// The server must always determine whether a client thread has the required
+// capability to read/write a log event(s) of a built-in type.  Each operation
+// may have from one to seven capabilities defined for it.  All operations on 
+// built in types _MUST_ have an associated security policy defined here.  If no
+// security is required, then use 'cap=ECapability_None'.  The CAPABILITY values
+// defined here will provide constructor arguments for TSecurityPolicy objects.
+// The maximum number of CAPABILITY(s) for each read or write operation is 7.
+// ( a read_caps or a write_caps { contains <= 7 CAPABILITY{}   statements }  )
+// Note that SID-based security isn't supported in the Log Engine.
+//
+	{
+	items = 
+		{
+		SECURITY 
+			{ 
+			uid = KLogCallEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadUserData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteUserData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogDataEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadUserData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteUserData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogFaxEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadUserData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteUserData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogShortMessageEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadUserData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteUserData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogTaskSchedulerEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadUserData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapability_None; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogPacketDataEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadUserData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteUserData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogLbsSelfLocateEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadDeviceData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteDeviceData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogLbsExternalLocateEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadDeviceData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteDeviceData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogLbsTransmitLocationEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadDeviceData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteDeviceData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogLbsNetworkLocateEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadDeviceData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteDeviceData; }
+				};
+			},
+		SECURITY 
+			{ 
+			uid=KLogLbsAssistanceDataEventType;	
+			read_caps=
+				{
+				CAPABILITY { cap=ECapabilityReadDeviceData; }
+				};
+			write_caps=
+				{
+				CAPABILITY { cap=ECapabilityWriteDeviceData; }
+				};
+			}
+		};
+	}
+
+
+// Index entries
+RESOURCE ARRAY r_log_indexes
+	{
+	items =
+		{
+		INDEX
+			{
+			name = "Index1"; // do not translate
+			table = "Event"; // do not translate
+			keys = 
+				{
+				KEY { col = "Id"; } // do not translate
+				};
+			},
+		INDEX
+			{
+			name = "Index2"; // do not translate
+			table = "Event"; // do not translate
+			keys =
+				{
+				KEY { col = "ETime"; } // do not translate
+				};
+			},
+		INDEX
+			{
+			name = "Index3"; // do not translate
+			table = "String"; // do not translate
+			keys = 
+				{
+				KEY { col = "Id"; } // do not translate
+				};
+			}
+		};
+	}
+
+// Recent list setup
+RESOURCE ARRAY r_log_recent
+	{
+	items =
+		{
+		RECENT
+			{
+			id = KLogRecentIncomingCalls;
+			duplicate = ELogRemotePartyField|ELogContactField|ELogNumberField;
+			conditions = 
+				{
+				MATCH { field = ELogEventTypeField; value = KLogCallEventType; },
+				MATCH { field = ELogDirectionField; string = LOG_DIR_IN; },
+				MATCH { field = ELogDirectionField; string = LOG_DIR_IN_ALT; }
+				};
+			},
+		RECENT
+			{
+			id = KLogRecentOutgoingCalls;
+			duplicate = ELogRemotePartyField|ELogContactField|ELogNumberField;
+			conditions = 
+				{
+				MATCH { field = ELogEventTypeField; value = KLogCallEventType; },
+				MATCH { field = ELogDirectionField; string = LOG_DIR_OUT; },
+				MATCH { field = ELogDirectionField; string = LOG_DIR_OUT_ALT; }
+				};
+			},
+		RECENT
+			{
+			id = KLogRecentMissedCalls;
+			duplicate = ELogRemotePartyField|ELogContactField|ELogNumberField;
+			conditions = 
+				{
+				MATCH { field = ELogEventTypeField; value = KLogCallEventType; },
+				MATCH { field = ELogDirectionField; string = LOG_DIR_MISSED; },
+				MATCH { field = ELogDirectionField; string = LOG_DIR_MISSED_ALT; }
+				};
+			}
+		};
+	}
+
+
+// Direction
+RESOURCE LBUF r_log_dir_in { txt = LOG_DIR_IN; }
+RESOURCE LBUF r_log_dir_out { txt = LOG_DIR_OUT; }
+RESOURCE LBUF r_log_dir_in_alt { txt = LOG_DIR_IN_ALT; }
+RESOURCE LBUF r_log_dir_out_alt { txt = LOG_DIR_OUT_ALT; }
+RESOURCE LBUF r_log_dir_fetched { txt = LOG_DIR_FETCHED; }
+RESOURCE LBUF r_log_dir_missed { txt = LOG_DIR_MISSED; }
+RESOURCE LBUF r_log_dir_missed_alt { txt = LOG_DIR_MISSED_ALT; }
+
+
+// Delivery
+RESOURCE LBUF r_log_del_pending { txt = LOG_DEL_PENDING; }
+RESOURCE LBUF r_log_del_sent { txt = LOG_DEL_SENT; }
+RESOURCE LBUF r_log_del_failed { txt = LOG_DEL_FAILED; }
+RESOURCE LBUF r_log_del_none { txt = LOG_DEL_NONE; }
+RESOURCE LBUF r_log_del_done { txt = LOG_DEL_DONE; }
+RESOURCE LBUF r_log_del_not_sent { txt = LOG_DEL_NOT_SENT; }
+RESOURCE LBUF r_log_del_scheduled { txt = LOG_DEL_SCHEDULED; }
+
+// Other
+RESOURCE LBUF r_log_remote_unknown { txt = LOG_REMOTE_UNKNOWN; }
+RESOURCE LBUF r_log_remote_multiple { txt = LOG_REMOTE_MULTIPLE; }
+RESOURCE LBUF r_log_subject_none { txt = LOG_SUBJECT_NONE; }
+RESOURCE LBUF r_log_subject_data_message { txt = LOG_SUBJECT_DATA_MESSAGE; }
+
+// Connection
+RESOURCE LBUF r_log_con_connected { txt = LOG_CON_CONNECTED; }
+RESOURCE LBUF r_log_con_connecting { txt = LOG_CON_CONNECTING; }
+RESOURCE LBUF r_log_con_disconnecting { txt = LOG_CON_DISCONNECTING; }
+RESOURCE LBUF r_log_con_disconnected{ txt = LOG_CON_DISCONNECTED; }
+RESOURCE LBUF r_log_con_suspended{ txt = LOG_CON_SUSPENDED; }
+
+// Delivery
+RESOURCE LBUF r_log_del_notified { txt = LOG_DEL_NOTIFIED; } 
+RESOURCE LBUF r_log_del_expired { txt = LOG_DEL_EXPIRED; }  
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/retry/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// this FLM will fail FAILURES times and then succeed
+//
+// (each instance needs its own COUNTER as they may be run in parallel)
+
+PRJ_EXPORTS
+retry_test.xml /epoc32/tools/makefile_templates/
+retry_test.flm /epoc32/tools/makefile_templates/
+
+PRJ_EXTENSIONS
+
+start EXTENSION retry.test
+OPTION FAILURES 1
+OPTION COUNTER  retry_1
+end
+
+start EXTENSION retry.test
+OPTION FAILURES 2
+OPTION COUNTER  retry_2
+end
+
+start EXTENSION retry.test
+OPTION FAILURES 3
+OPTION COUNTER  retry_3
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/retry/retry_test.flm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+
+# This FLM is for testing the retry mechanism in our rules.
+# It will fail on the first FAILURES invocations and then succeed.
+
+MY_COUNTER:=$(EPOCROOT)/epoc32/build/$(COUNTER)
+
+define retry_test
+ALL::
+	$(call startrule,retry_test) \
+	(TRY=1; \
+	while (( $$$$TRY <= $(FAILURES) )); do \
+		if [ ! -f $(MY_COUNTER).$$$$TRY ]; then \
+			touch $(MY_COUNTER).$$$$TRY; \
+			echo DELIBERATE FAILURE $$$$TRY for $(COUNTER); \
+			exit 1; \
+		fi; \
+		(( TRY=$$$$TRY + 1 )); \
+	done) && \
+	echo SUCCESS for $(COUNTER) && \
+	touch $(MY_COUNTER).ok \
+	$(call endrule,retry_test)
+endef
+$(eval $(retry_test))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/retry/retry_test.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../../schema/build/2_0.xsd">
+	<!-- utility interfaces : handy FLMs for simple things -->
+
+	<interface name="retry.test" extends="base.flm" flm="retry_test.flm">
+		<param name='EPOCROOT'/>
+		<param name='FAILURES'/>
+		<param name='COUNTER'/>
+	</interface>
+
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/scripts/delete_on_failed_compile.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,55 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# delete_on_failed_compile.py
+# This is a test module for verifying the delete on failed compile 
+# work around for RVCT 2.2. It creates a dummy object file and 
+# exits with an error code which should result in object files being deleted.
+# It takes the same arguments as armcc, but ignores them all apart from -o.
+#
+
+import sys
+import os
+import re
+
+# Parse for -o argument.
+objectfile_re = re.compile(".*-o\s(\S*\.(o|pre))\s.*", re.I)
+res = objectfile_re.match(" ".join(sys.argv[1:]))
+
+if res:
+	objectpath = res.group(1)
+	print "Found object file %s" % objectpath
+	objectdirectory = os.path.dirname(objectpath)
+	
+	# Make the directory if it doesn't exist
+	if not os.path.isdir(objectdirectory):
+		try:
+			os.makedirs(objectdirectory)
+		except:
+			print "Not making directory %s" % objectdirectory
+	
+	# Try to write something to the .o file
+	try:
+		fh = open(objectpath, "w")
+		fh.write("Fake object file for delete on failed compile test\n")
+		fh.close()
+	except Exception as error:
+		print "Failed to created object file %s; error was: %s" % (objectfile, str(error))
+else:
+	print "Failed to determine object filename. Commandline used was: %s" % " ".join(sys.argv[1:])
+
+# Always exit with an error
+print "Exiting with non-zero exit code." 
+sys.exit(1)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/always_build_as_arm.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			always_build_as_arm
+TARGETTYPE		EXE
+
+// Always build as arm
+ALWAYS_BUILD_AS_ARM
+
+
+// Test backslash to / here:
+TARGETPATH		\sys\bin
+
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp test1.c++ test2.cxx test3.Cpp test4.cc test5.CC test6.C++
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+PAGED
+EPOCCALLDLLENTRYPOINTS
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/always_build_as_arm_bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5
+
+PRJ_MMPFILES
+always_build_as_arm.mmp
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7 WINSCW ARMV5SMP
+
+PRJ_MMPFILES
+simple.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/build_spec.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build http://symbian.com/xml/build/1_0.xsd">
+
+    <!-- test build specification -->
+
+    <spec name="simple">
+        <interfaceRef ref="Symbian.EXE"/>
+	<var>
+	    <set name="SIMPLE" value="$(SBS_HOME)/test/simple"/>
+
+	    <set name="SOURCEFILES" value="$(SIMPLE)/test.cpp"/>
+	    <set name="EXENAME" value="test"/>
+	    <set name="TARGETTYPE" value="EXE"/>
+	    <set name="UID1" value="0x1000007a"/>
+	    <set name="UID2" value="0x100039ce"/>
+	    <set name="UID3" value="0x00000001"/>
+	    <set name="SID" value="0x10003a5c"/>
+	</var>
+    </spec>
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/capability.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7 WINSCW ARMV5SMP
+
+PRJ_MMPFILES
+capability.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/capability.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			test_capability
+TARGETTYPE		EXE
+
+// Test backslash to / here:
+TARGETPATH		\sys\bin
+
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp test1.c++ test2.cxx test3.Cpp test4.cc test5.CC test6.C++
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+PAGED
+EPOCCALLDLLENTRYPOINTS
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ALL -TCB -ProtServ TCB ProtServ -DRM
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/commands-v7.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+
+-b smoke_suite/test_resources/simple/bld.inf
+
+-c
+
+armv7_urel
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/compilervariants/delete_on_failed_compile_compiler_variants.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<!-- Fake compiler variant for testing the  -->	
+	<var name="fake_compiler">
+		<set name='CC' value='python -u $(SBS_HOME)/test/smoke_suite/test_resources/scripts/delete_on_failed_compile.py'/>
+	</var>
+
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/debuggable.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			debuggable
+TARGETTYPE		EXE
+
+// Test backslash to / here:
+TARGETPATH		\sys\bin
+
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp test1.c++ test2.cxx test3.Cpp test4.cc test5.CC test6.C++
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+PAGED
+DEBUGGABLE
+DEBUGGABLE_UDEBONLY
+EPOCCALLDLLENTRYPOINTS
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/debuggable_bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_MMPFILES
+debuggable.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/makevariants/delete_on_failed_compile_make_variants.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build ../../schema/build/2_0.xsd">
+	<!-- Some make engines for test purposes -->
+	
+	<!-- Raptor make engine for GNU make -->
+	<var name="make_engine">
+		<varRef ref="default.locations"/>
+
+		<!-- Shell settings -->
+		<set name='DEFAULT_SHELL' value='$(SBS_HOME)/$(HOSTPLATFORM_DIR)/bin/talon$(DOTEXE)' type='tool'/>
+		<set name='TALON_SHELL' value='$(SBS_SHELL)' type='tool'/>
+		<set name='USE_TALON' value='1'/>
+		<set name='TALON_TIMEOUT' value='600000'/>
+		<set name='TALON_DESCRAMBLE' value='1'/>
+		
+		<!-- Command-line for initialisation -->
+		<set name="initialise" value=""/>
+
+		<!-- Command-line for shutdown -->
+		<set name="shutdown" value=""/>
+
+		<!-- Command-line for build  -->
+		<set name="build" value="$(GNUMAKE38) HAVE_ORDERONLY=1 -r" type="tool"/>
+
+		<!-- Options  -->
+		<set name="makefile" value="-f"/>
+		<set name="keep_going" value="-k"/>
+		<set name="jobs" value="-j"/>
+		
+		<!-- The following are stuck on the commandline before any options
+		     specified by the sbs "mo" option, so they can be overridden -->
+		<set name="defaultoptions" value=""/>
+
+		<!-- How to split out the makefiles -->
+		<set name="selectors" value="export,bitmap,resource_deps,resource,default"/>
+		<set name="export.selector.iface" value="\.export$"/>
+		<set name="export.selector.target" value="EXPORT"/>
+		<set name="bitmap.selector.iface" value="\.(bitmap|extension|mifconv)$"/>
+		<set name="bitmap.selector.target" value="BITMAP"/>
+		<set name="resource_deps.selector.iface" value="\.resource$"/>
+		<set name="resource_deps.selector.target" value="RESOURCE_DEPS"/>
+		<set name="resource_deps.selector.ignoretargets" value="^(RESOURCE|CLEAN|CLEANEXPORT|REALLYCLEAN)$"/>
+		<set name="resource.selector.iface" value="\.(resource|extension|mif2cdlindex|nativejava)$"/>
+		<set name="resource.selector.target" value="RESOURCE"/>
+		<set name="default.selector.iface" value="\.(?!export$|bitmap$|resource$|mifconv$|mif2cdlindex$|nativejava$).*$"/>
+		<set name="default.selector.target" value="ALL"/>
+
+		<!-- is the text output with -j buffered or scrambled? -->
+		<set name="scrambled" value="true"/>
+	</var>
+	
+	<alias name="make_test" meaning="make_engine"/>
+
+	<!-- use the talon shell -->
+	<var name="make_no_talon_engine_test" extends="make_engine_test">
+	        <set name='DEFAULT_SHELL' value='$(SBS_SHELL)' type='tool'/>
+	        <set name='USE_TALON' value=''/>
+	</var>
+</build>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/simple.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,36 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			test
+TARGETTYPE		EXE
+
+// Test backslash to / here:
+TARGETPATH		\sys\bin
+
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp test.cia test1.c++ test2.cxx test3.Cpp test4.cc test5.CC test6.C++
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+OPTION GCCE -O2
+PAGED
+DEBUGGABLE
+EPOCCALLDLLENTRYPOINTS
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/test.cia	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// Some random assembler or a "straight" dummy function
+
+#ifndef __WINSCW__
+EXPORT_C __NAKED__ void dummy()
+	{
+	asm("stmia	r0, {r4-r11, sp, lr}	");
+	asm("mov  r0, #0"); 
+	}
+#else
+int fred(int i)
+	{
+	return 1;
+	}
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/test.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+#include "test.h"
+
+char test[]="Simple test";
+
+TInt test1();
+TInt test2();
+TInt test3();
+TInt test4();
+TInt test5();
+TInt test6();
+
+TInt E32Main()
+{
+	test1();
+	test2();
+	test3();
+	test4();
+	test5();
+	test6();
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/test.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,17 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// Blank header file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/test1.c++	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+#include "e32def.h" // intentional  include
+
+
+TInt test1()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/test2.cxx	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+#include "e32def.h" // intentional  include
+
+
+TInt test2()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/test3.Cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+
+TInt test3()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/test4.cc	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+#include "e32def.h" // intentional  include
+
+
+TInt test4()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/test5.CC	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+#include "e32def.h" // intentional  include
+
+
+TInt test5()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple/test6.C++	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+#include "e32def.h" // intentional  include
+
+
+TInt test6()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_crash/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_MMPFILES
+\\this_line_is_not_acceptable.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CREATESTATICDLLARM.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,6 @@
+EXPORTS
+	_ZN10CMessenger11ShowMessageEv @ 1 NONAME
+	_ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 @ 2 NONAME
+	_ZTI10CMessenger @ 3 NONAME ; #<TI>#
+	_ZTV10CMessenger @ 4 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CREATESTATICDLLWINS.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,5 @@
+EXPORTS
+; NEW:
+	?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @ 1 NONAME ; public: static class CMessenger * __cdecl CMessenger::NewLC(class CConsoleBase &,class TDesC16 const &)
+	?ShowMessage@CMessenger@@QAEXXZ @ 2 NONAME ; public: void __thiscall CMessenger::ShowMessage(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CREATESTATICPDLLARM.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,6 @@
+EXPORTS
+	_ZN10CMessenger11ShowMessageEv @ 1 NONAME
+	_ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 @ 2 NONAME
+	_ZTI10CMessenger @ 3 NONAME
+	_ZTV10CMessenger @ 4 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CREATESTATICPDLLWINS.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,4 @@
+EXPORTS
+	?ShowMessage@CMessenger@@QAEXXZ @ 1 NONAME ; ?ShowMessage@CMessenger@@QAEXXZ
+	?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @ 2 NONAME ; ?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CommonFramework.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+#ifndef __CommonFramework_H
+#define __CommonFramework_H
+
+#include <e32base.h>
+#include <e32cons.h>
+
+_LIT(KTxtEPOC32EX,"EXAMPLES");
+_LIT(KTxtExampleCode,"Symbian OS Example Code");
+_LIT(KFormatFailed,"failed: leave code=%d");
+_LIT(KTxtOK,"ok");
+_LIT(KTxtPressAnyKey," [press any key]");
+
+// public
+LOCAL_D CConsoleBase* console; // write all your messages to this
+LOCAL_C void doExampleL(); // code this function for the real example
+
+// private
+LOCAL_C void callExampleL(); // initialize with cleanup stack, then do example
+
+GLDEF_C TInt E32Main() // main function called by E32
+    {
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
+	TRAPD(error,callExampleL()); // more initialization, then do example
+	__ASSERT_ALWAYS(!error,User::Panic(KTxtEPOC32EX,error));
+	delete cleanup; // destroy clean-up stack
+	__UHEAP_MARKEND;
+	return 0; // and return
+    }
+
+LOCAL_C void callExampleL() // initialize and call example code under cleanup stack
+    {
+	console=Console::NewL(KTxtExampleCode,TSize(KConsFullScreen,KConsFullScreen));
+	CleanupStack::PushL(console);
+	TRAPD(error,doExampleL()); // perform example function
+	if (error)
+		console->Printf(KFormatFailed, error);
+	else
+		console->Printf(KTxtOK);
+	console->Printf(KTxtPressAnyKey);
+	console->Getch(); // get and ignore character
+	CleanupStack::PopAndDestroy(); // close console
+    }
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CreateStaticDLL.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This program creates a dll.
+*
+*/
+
+
+#include "CreateStaticDLL.h"
+#include <e32uid.h>
+
+#include "../inc/macrotests.h"
+
+// construct/destruct
+
+
+extern "C" void __ARM_switch8();
+
+void sbs_test()
+	{
+	__ARM_switch8();
+	}
+
+
+EXPORT_C CMessenger* CMessenger::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+	{
+	CMessenger* self=new (ELeave) CMessenger(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL(aString);
+	return self;
+	}
+
+CMessenger::~CMessenger() // destruct - virtual, so no export
+	{
+	delete iString;
+	}
+
+EXPORT_C void CMessenger::ShowMessage()
+	{
+	_LIT(KFormat1,"%S\n");
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+// constructor support
+// don't export these, because used only by functions in this DLL, eg our NewLC()
+
+CMessenger::CMessenger(CConsoleBase& aConsole) // first-phase C++ constructor
+	: iConsole(aConsole)
+	{
+	}
+
+void CMessenger::ConstructL(const TDesC& aString) // second-phase constructor
+	{
+	iString=aString.AllocL(); // copy given string into own descriptor
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CreateStaticDLL.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+ 
+
+#include <e32cons.h>
+
+
+class CMessenger : public CBase
+  	{
+public:
+		// Construction
+	IMPORT_C static CMessenger* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+		// Destructor - virtual and class not intended
+		// for derivation, so not exported
+	~CMessenger();
+		// general functions - exported
+	IMPORT_C void ShowMessage();
+private:
+		// C++ constructor - not exported;
+		// implicitly called from NewLC()
+	CMessenger(CConsoleBase& aConsole);
+		// 2nd phase construction, called by NewLC()
+	void ConstructL(const TDesC& aString); // second-phase constructor
+private:
+	CConsoleBase& iConsole; // Use the console (but not owned)
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CreateStaticDLL.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET        createstaticdll.dll
+TARGETTYPE    dll
+
+UID             0xE800004C
+CAPABILITY   All -TCB
+
+
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        CreateStaticDLL.cpp
+
+#ifdef ARMV6
+SOURCE        armv6_specific.cpp
+#endif
+#ifdef ARMV7
+SOURCE        armv7_specific.cpp
+#endif
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+
+LIBRARY       euser.lib
+
+#if defined(WINS)
+    deffile ./CREATESTATICDLLWINS.def
+#elif defined(MARM)
+    deffile ./CREATESTATICDLLARM.def
+#endif
+nostrictdef
+
+#include "../inc/macrotests.mmh"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/CreateStaticPDLL.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET        createstaticpdll.dll
+TARGETTYPE    pdll
+
+UID             0xE800004C
+CAPABILITY   All -TCB
+
+
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        CreateStaticDLL.cpp
+
+#ifdef ARMV6
+SOURCE        armv6_specific.cpp
+#endif
+#ifdef ARMV7
+SOURCE        armv7_specific.cpp
+#endif
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+
+LIBRARY       euser.lib
+
+#if defined(WINS)
+    deffile ./CREATESTATICPDLLWINS.def
+#elif defined(MARM)
+    deffile ./CREATESTATICPDLLARM.def
+#endif
+nostrictdef
+
+#include "../inc/macrotests.mmh"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/armv6_specific.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+int armv6_specific()
+	{
+#ifndef __ARMV6__
+#error __ARMV6__ macro expected but was not set
+#endif
+	return 0;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/armv7_specific.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+int armv7_specific()
+	{
+#ifndef __ARMV7__
+#error __ARMV7__ macro expected but was not set
+#endif
+	return 0;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_PLATFORMS
+ARMV5 ARMV6 ARMV7 WINSCW ARMV5SMP
+
+PRJ_MMPFILES
+
+CreateStaticDLL.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/pbld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_PLATFORMS
+ARMV5 ARMV6 ARMV7 ARMV5SMP WINSCW
+
+PRJ_MMPFILES
+
+CreateStaticPDLL.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_PLATFORMS
+WINSCW
+
+PRJ_MMPFILES
+win32resourcedll.mmp
Binary file sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/epoc32.ico has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/gui.rc	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,79 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include <windows.h>
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.K.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+EPOC_ICON               ICON    DISCARDABLE     "epoc32.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Cursor
+//
+
+OVERKEY                 CURSOR  DISCARDABLE     "hand.cur"
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+#endif    // English (U.K.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
Binary file sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/hand.cur has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/resource.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+ //{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by gui.rc
+//
+#define EPOC_ICON                       102
+#define OVERKEY                         104
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        105
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1000
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_dll/win32resource/win32resourcedll.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "../CreateStaticDLL.mmp"
+
+START WINS
+WIN32_RESOURCE gui.rc
+END
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_export/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_MMPFILES
+simple.mmp
+
+PRJ_EXPORTS
+simple_exp1.h exported_1.h
+simple_exp2.h exported_2.h
+simple_exp3.h exported_3.h
+"file with a space.doc" "exportedfilewithspacesremoved.doc"
+"file with a space.doc" "exported file with a space.doc"
+executable_file	executable_file
+
+simple_exp1.h /tmp/$$(USER)/  //
+simple_exp2.h \tmp\$$(USER)/  //
+simple_exp3.h /tmp/$$(USER)/simple_exp3.h 
+simple_exp4.h //
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_export/simple.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			test
+TARGETTYPE		EXE
+UID			0x100039ce 0x00000001
+LIBRARY			euser.dso
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_export/simple_exp1.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,17 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_export/simple_exp2.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,17 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_export/simple_exp3.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,17 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_export/simple_exp4.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,17 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_export/test.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple test";
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,35 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_EXPORTS
+clean.mk /epoc32/tools/makefile_templates/sbsv2test/clean.mk
+clean.meta /epoc32/tools/makefile_templates/sbsv2test/clean.meta
+build.mk /epoc32/tools/makefile_templates/sbsv2test/build.mk
+build.meta /epoc32/tools/makefile_templates/sbsv2test/build.meta
+
+PRJ_EXTENSIONS
+
+start extension sbsv2test/clean
+option FRED=1
+end
+
+start extension sbsv2test/build
+option CONTENT Stuff
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/build.meta	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,3 @@
+platform	win32
+makefile	gnumake
+techstream	sbsv2test
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/build.mk	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+# Simple TEM that generates trivial release tree files
+
+BLD:
+	echo "simple_extension $(PLATFORM) $(CFG) $(CONTENT)" > $(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/simple_extension.txt
+	
+CLEAN:
+	rm -f $(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/simple_extension.txt
+
+RELEASABLES:
+	@echo $(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/simple_extension.txt
+
+SAVESPACE: BLD
+
+MAKMAKE RESOURCE LIB CLEANLIB FINAL FREEZE:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/clean.meta	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,3 @@
+platform	win32
+makefile	gnumake
+techstream	sbsv2test
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/clean.mk	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,42 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+# SBSv2 test TEM that creates a file and cleans it
+# This helps to test the REALLYCLEAN mechanism 
+
+blah:
+
+
+MAKMAKE:
+
+RESOURCE:
+	
+SAVESPACE: BLD
+
+BLD:
+	echo "HI" > $(EPOCROOT)/epoc32/build/tem_export_test
+
+FREEZE:
+
+LIB:
+
+CLEANLIB:
+
+FINAL:
+
+CLEAN:
+	rm -f $(EPOCROOT)/epoc32/build/tem_export_test
+
+RELEASABLES:
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/flm_bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+armv5
+
+PRJ_EXPORTS
+flm_export.flm /epoc32/tools/makefile_templates/tools/flm_export.flm
+flm_export.xml /epoc32/tools/makefile_templates/tools/flm_export.xml
+
+PRJ_EXTENSIONS
+
+start extension tools/flm_test
+option FLM_EXPORT_1 1
+option FLM_EXPORT_2 2
+end
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/flm_export.flm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,5 @@
+# SBSv2 test flm
+# This helps to test flm exports mechanism
+
+ALL::
+	echo " "  > $(EPOCROOT)/epoc32/build/flm_test_${FLM_EXPORT_1}_${FLM_EXPORT_2}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_extension/flm_export.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?> 
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+<!--  Extension interfaces : replacements for Template Extension Makefiles 
+  --> 
+
+ <interface name="tools.flm_test" extends="middle_man" flm="flm_export.flm">
+  <param name="FLM_EXPORT_1" /> 
+ </interface>
+
+ <interface name="middle_man" extends="Symbian.UserFLM" abstract="true">
+  <param name="FLM_EXPORT_2" />
+ </interface>
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/Bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+PRJ_MMPFILES
+
+HelloWorld.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/BldVar2.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+PRJ_MMPFILES
+
+HelloWorldVar2.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/Bld_stdcpp.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+PRJ_MMPFILES
+
+HelloWorldstdcpp.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/DISTRIBUTION.policy	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2 @@
+Category G
+OSD:	Reference/Test	Tools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,110 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#ifndef __HELLOWORLD_H
+#define __HELLOWORLD_H
+
+#include <coeccntx.h>
+
+#include <eikenv.h>
+#include <eikappui.h>
+#include <eikapp.h>
+#include <eikdoc.h>
+#include <eikmenup.h>
+
+#include <eikon.hrh>
+
+#include <helloworld.rsg>
+#include "HelloWorld.hrh"
+
+
+
+////////////////////////////////////////////////////////////////////////
+//
+// CExampleApplication
+//
+////////////////////////////////////////////////////////////////////////
+
+class CExampleApplication : public CEikApplication
+	{
+private: 
+	           // Inherited from class CApaApplication
+	CApaDocument* CreateDocumentL();
+	TUid AppDllUid() const;
+	};
+
+////////////////////////////////////////////////////////////////////////
+//
+// CExampleAppView
+//
+////////////////////////////////////////////////////////////////////////
+class CExampleAppView : public CCoeControl
+    {
+public:
+	static CExampleAppView* NewL(const TRect& aRect);
+	CExampleAppView();
+	~CExampleAppView();
+    void ConstructL(const TRect& aRect);
+
+private:
+	           // Inherited from CCoeControl
+	void Draw(const TRect& /*aRect*/) const;
+
+private:
+	HBufC*  iExampleText;
+    };
+
+
+////////////////////////////////////////////////////////////////////////
+//
+// CExampleAppUi
+//
+////////////////////////////////////////////////////////////////////////
+class CExampleAppUi : public CEikAppUi
+    {
+public:
+    void ConstructL();
+	~CExampleAppUi();
+
+private:
+              // Inherirted from class CEikAppUi
+	void HandleCommandL(TInt aCommand);
+
+private:
+	CCoeControl* iAppView;
+	};
+
+
+////////////////////////////////////////////////////////////////////////
+//
+// CExampleDocument
+//
+////////////////////////////////////////////////////////////////////////
+class CExampleDocument : public CEikDocument
+	{
+public:
+	static CExampleDocument* NewL(CEikApplication& aApp);
+	CExampleDocument(CEikApplication& aApp);
+	void ConstructL();
+private: 
+	           // Inherited from CEikDocument
+	CEikAppUi* CreateAppUiL();
+	};
+
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.hrh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+enum TExampleMenuCommands
+	{
+	EExampleItem0 = 200,
+	EExampleItem1,
+	EExampleItem2
+	};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        helloworld.exe
+TARGETTYPE    exe
+UID           0x100039CE 0xE800005A
+VENDORID 	  0x70000001
+SOURCEPATH    .
+SOURCE        HelloWorld_Main.cpp
+SOURCE        HelloWorld_Application.cpp
+SOURCE        HelloWorld_Document.cpp
+SOURCE        HelloWorld_AppUi.cpp
+SOURCE        HelloWorld_AppView.cpp
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/techview
+OPTION GCCXML -fpermissive
+START RESOURCE	HelloWorld.rss
+HEADER
+TARGETPATH		/resource/apps
+end
+
+START RESOURCE	HelloWorld_reg.rss
+TARGETPATH		/private/10003a3f/apps
+DEPENDS		helloworld.rsg
+END
+
+START BITMAP	helloworld.mbm
+TARGETPATH		/resource/apps
+SOURCE			c8,1 icon24.BMP icon2M.BMP icon32.BMP icon3M.BMP icon48.BMP icon4M.BMP
+END
+
+LIBRARY       euser.lib apparc.lib cone.lib eikcore.lib gdi.lib
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.pkg	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,48 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Eclipse Public License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.eclipse.org/legal/epl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description: 
+;
+;
+; Basic install file for HelloWorld application
+;
+
+; List of languages supported.
+; Here, only UK English is supported.
+&EN
+
+; List of localised vendor names.
+; Here, only UK English version is specified.
+%{"Symbian Software Ltd."}
+
+; Single, non-localised (global) vendor name.
+:"Symbian Software Ltd."
+
+; Installation header.
+; Only specifies one component name as we only support English.
+; The UID is the package UID - this is not the same as the app's UID, 
+; which is specified in HelloWorld.mmp.
+
+#{"Hello World"},(0xE8000091),1,0,0
+
+; Four files to install for the minimal application
+"HelloWorld.exe"-"!:\sys\bin\HelloWorld.exe"
+"HelloWorld.rsc"-"!:\resource\apps\HelloWorld.rsc"
+"HelloWorld.mbm" - "!:\resource\apps\HelloWorld.mbm"
+"HelloWorld_reg.rsc" - "!:\private\10003a3f\import\apps\HelloWorld_reg.rsc"
+
+; Required files
+; None
+
+; Component .sis files
+; None
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld.rss	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 1997-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+NAME HEWO
+
+#include <eikon.rh>
+#include <eikcore.rsg>
+#include <appinfo.rh>
+
+#include "HelloWorld.hrh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE EIK_APP_INFO
+	{
+	hotkeys=r_example_hotkeys;
+	menubar=r_example_menubar;
+	}
+
+RESOURCE HOTKEYS r_example_hotkeys
+    {
+    control=
+        {
+        HOTKEY { command=EEikCmdExit; key='e'; }
+        };
+    }
+
+RESOURCE MENU_BAR r_example_menubar
+    {
+    titles=
+        {
+        MENU_TITLE { menu_pane=r_example_first_menu; txt="HelloWld"; }
+		};
+    }
+
+RESOURCE MENU_PANE r_example_first_menu
+	{
+	items=
+		{
+		MENU_ITEM { command=EExampleItem0; txt="Item 0"; },
+		MENU_ITEM { command=EExampleItem1; txt="Item 1"; },
+		MENU_ITEM { command=EExampleItem2; txt="Item 2"; },
+		MENU_ITEM { command=EEikCmdExit; txt="Close"; }
+        };
+    }
+
+
+RESOURCE TBUF r_example_text_Hello { buf="Hello World!"; }
+RESOURCE TBUF r_example_text_Item0 { buf="Item 0"; }
+RESOURCE TBUF r_example_text_Item1 { buf="Item 1"; }
+RESOURCE TBUF r_example_text_Item2 { buf="Item 2"; }
+RESOURCE TBUF r_example_text_Item3 { buf="This string generates a trigraph warning if not suppressed: <h>ID3?????????<m>"; }
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+	short_caption = "HW";
+	caption_and_icon =
+		{
+		CAPTION_AND_ICON_INFO
+			{
+			caption = "helloworld";
+			number_of_icons = 3; // each icon must be a bitmap/mask pair
+			icon_file = "z:\\resource\\apps\\helloworld.mbm";
+			}
+		};							
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorldVar2.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,48 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        helloworld.exe
+TARGETTYPE    var2
+UID           0x100039CE 0xE800005A
+VENDORID 	  0x70000001
+SOURCEPATH    .
+SOURCE        HelloWorld_Main.cpp
+SOURCE        HelloWorld_Application.cpp
+SOURCE        HelloWorld_Document.cpp
+SOURCE        HelloWorld_AppUi.cpp
+SOURCE        HelloWorld_AppView.cpp
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/techview
+OPTION GCCXML -fpermissive
+START RESOURCE	HelloWorld.rss
+HEADER
+TARGETPATH		/resource/apps
+end
+
+START RESOURCE	HelloWorld_reg.rss
+TARGETPATH		/private/10003a3f/apps
+DEPENDS		helloworld.rsg
+END
+
+START BITMAP	helloworld.mbm
+TARGETPATH		/resource/apps
+SOURCE			c8,1 icon24.BMP icon2M.BMP icon32.BMP icon3M.BMP icon48.BMP icon4M.BMP
+END
+
+LIBRARY       euser.lib apparc.lib cone.lib eikcore.lib gdi.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_AppUi.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* HelloWorld_CExampleAppUi.cpp
+*
+*/
+
+
+#include "HelloWorld.h"
+
+//             The second phase constructor of the application UI class.
+//             The application UI creates and owns the one and only view.
+// 
+void CExampleAppUi::ConstructL()
+    {
+	           // BaseConstructL() completes the UI framework's
+	           // construction of the App UI.
+    BaseConstructL();
+	           // Create the single application view in which to
+	           // draw the text "Hello World!", passing into it
+	           // the rectangle available to it.
+	iAppView = CExampleAppView::NewL(ClientRect());
+	}
+
+
+//             The app Ui owns the two views and is. 
+//             therefore, responsible for destroying them
+//
+CExampleAppUi::~CExampleAppUi()
+	{
+	delete iAppView;
+	}
+
+
+//             Called by the UI framework when a command has been issued.
+//             In this example, a command can originate through a 
+//             hot-key press or by selection of a menu item.
+//             The command Ids are defined in the .hrh file
+//             and are 'connected' to the hot-key and menu item in the
+//             resource file.
+//             Note that the EEikCmdExit is defined by the UI
+//             framework and is pulled in by including eikon.hrh
+//
+void CExampleAppUi::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+		      // Just issue simple info messages to show that
+		      // the menu items have been selected
+	case EExampleItem0:
+		iEikonEnv->InfoMsg(R_EXAMPLE_TEXT_ITEM0);
+		break;
+
+	
+	case EExampleItem1:
+		iEikonEnv->InfoMsg(R_EXAMPLE_TEXT_ITEM1);
+		break;
+	
+	case EExampleItem2:
+		iEikonEnv->InfoMsg(R_EXAMPLE_TEXT_ITEM2);
+		break;
+               // Exit the application. The call is
+		       // implemented by the UI framework.
+
+	case EEikCmdExit: 
+		Exit();
+		break;
+		}
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_AppView.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* HelloWorld_CExampleAppView.cpp
+*
+*/
+
+
+#include "HelloWorld.h"
+
+//
+//             Constructor for the view.
+//
+CExampleAppView::CExampleAppView()
+	{
+	}
+
+
+//             Static NewL() function to start the standard two
+//             phase construction.
+//
+CExampleAppView* CExampleAppView::NewL(const TRect& aRect)
+	{
+	CExampleAppView* self = new(ELeave) CExampleAppView();
+	CleanupStack::PushL(self);
+	self->ConstructL(aRect);
+	CleanupStack::Pop();
+	return self;
+	}
+
+
+//
+//             Destructor for the view.
+//
+CExampleAppView::~CExampleAppView()
+	{
+	delete iExampleText;
+	}
+
+
+//             Second phase construction.
+//
+void CExampleAppView::ConstructL(const TRect& aRect)
+    {
+			   // Fetch the text from the resource file.
+	iExampleText = iEikonEnv->AllocReadResourceL(R_EXAMPLE_TEXT_HELLO);
+	           // Control is a window owning control
+	CreateWindowL();
+	           // Extent of the control. This is
+	           // the whole rectangle available to application.
+	           // The rectangle is passed to us from the application UI.
+	SetRect(aRect);
+			   // At this stage, the control is ready to draw so
+	           // we tell the UI framework by activating it.
+	ActivateL();
+	}
+
+
+//             Drawing the view - in this example, 
+//             consists of drawing a simple outline rectangle
+//             and then drawing the text in the middle.
+//             We use the Normal font supplied by the UI.
+//
+//             In this example, we don't use the redraw
+//             region because it's easier to redraw to
+//             the whole client area.
+//
+void CExampleAppView::Draw(const TRect& /*aRect*/) const
+	{
+               // Window graphics context
+	CWindowGc& gc = SystemGc();
+	           // Area in which we shall draw
+	TRect      drawRect = Rect();
+			   // Font used for drawing text
+	const CFont*     fontUsed;
+	
+	           // Start with a clear screen
+	gc.Clear();
+			   // Draw an outline rectangle (the default pen
+	           // and brush styles ensure this) slightly
+	           // smaller than the drawing area.
+	drawRect.Shrink(10,10);		   	
+	gc.DrawRect(drawRect);
+               // Use the title font supplied by the UI
+	fontUsed = iEikonEnv->TitleFont();
+	gc.UseFont(fontUsed);
+			   // Draw the text in the middle of the rectangle.
+	TInt   baselineOffset=(drawRect.Height() - fontUsed->HeightInPixels())/2; 
+	gc.DrawText(*iExampleText,drawRect,baselineOffset,CGraphicsContext::ECenter, 0);
+               // Finished using the font
+	gc.DiscardFont();
+	}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_Application.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* HelloWorld_CExampleApplication.cpp
+*
+*/
+
+
+#include "HelloWorld.h"
+
+const TUid KUidHelloWorld = { 0xE800005A };
+
+//             The function is called by the UI framework to ask for the
+//             application's UID. The returned value is defined by the
+//             constant KUidHelloWorlde and must match the second value
+//             defined in the project definition file.
+//
+TUid CExampleApplication::AppDllUid() const
+	{
+	return KUidHelloWorld;
+	}
+
+//             This function is called by the UI framework at
+//             application start-up. It creates an instance of the
+//             document class.
+//
+CApaDocument* CExampleApplication::CreateDocumentL()
+	{
+	return new (ELeave) CExampleDocument(*this);
+	}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_Document.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* HelloWorld_CExampleDocument.cpp
+*
+*/
+
+
+#include "HelloWorld.h"
+
+//             The constructor of the document class just passes the
+//             supplied reference to the constructor initialisation list.
+//             The document has no real work to do in this application.
+//
+CExampleDocument::CExampleDocument(CEikApplication& aApp)
+		: CEikDocument(aApp)
+	{
+	}
+
+
+//             This is called by the UI framework as soon as the 
+//             document has been created. It creates an instance
+//             of the ApplicationUI. The Application UI class is
+//             an instance of a CEikAppUi derived class.
+//
+CEikAppUi* CExampleDocument::CreateAppUiL()
+	{
+    return new(ELeave) CExampleAppUi;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_Main.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+#include "HelloWorld.h"
+
+//             The entry point for the application code. It creates
+//             an instance of the CApaApplication derived
+//             class, CExampleApplication.
+//
+
+#if defined(EKA2)
+
+#include <eikstart.h>
+LOCAL_C CApaApplication* NewApplication()
+	{
+	return new CExampleApplication;
+	}
+	
+GLDEF_C TInt E32Main()
+	{
+	return EikStart::RunApplication(NewApplication);
+	}
+	
+#endif
+
+#if defined(__WINS__) && !defined(EKA2)
+//             This function is required by all Symbian OS DLLs. In this 
+//             example, it does nothing.
+
+EXPORT_C CApaApplication* NewApplication()
+	{
+	return new CExampleApplication;
+	}
+
+GLDEF_C TInt E32Dll(TDllReason)
+	{
+	return KErrNone;
+	}
+	
+EXPORT_C TInt WinsMain(TDesC* aCmdLine)
+	{
+	return EikStart::RunApplication(NewApplication, aCmdLine);
+	}
+	
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorld_reg.rss	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include <appinfo.rh>
+#include <helloworld.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0xE800005A // application UID
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "HelloWorld";
+	localisable_resource_file = "\\resource\\apps\\HelloWorld";
+	localisable_resource_id = R_LAI;	
+	}
+	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/HelloWorldstdcpp.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        helloworld.exe
+TARGETTYPE    exe
+UID           0x100039CE 0xE800005A
+VENDORID 	  0x70000001
+SOURCEPATH    .
+SOURCE        HelloWorld_Main.cpp
+SOURCE        HelloWorld_Application.cpp
+SOURCE        HelloWorld_Document.cpp
+SOURCE        HelloWorld_AppUi.cpp
+SOURCE        HelloWorld_AppView.cpp
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/techview
+OPTION GCCXML -fpermissive
+START RESOURCE	HelloWorld.rss
+HEADER
+TARGETPATH		/resource/apps
+end
+
+START RESOURCE	HelloWorld_reg.rss
+TARGETPATH		/private/10003a3f/apps
+DEPENDS		helloworld.rsg
+END
+
+START BITMAP	helloworld.mbm
+TARGETPATH		/resource/apps
+SOURCE			c8,1 icon24.BMP icon2M.BMP icon32.BMP icon3M.BMP icon48.BMP icon4M.BMP
+END
+
+LIBRARY       euser.lib apparc.lib cone.lib eikcore.lib gdi.lib
+STDCPP
Binary file sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon24.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon2M.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon32.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon3M.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon48.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/simple_gui/icon4M.BMP has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+WINSCW ARMV5 ARMV5SMP
+
+PRJ_MMPFILES
+simple_implib.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/nodef/bwins/implib_implicit_def.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,5 @@
+EXPORTS
+; NEW:
+	?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @ 1 NONAME ; public: static class CMessenger * __cdecl CMessenger::NewLC(class CConsoleBase &,class TDesC16 const &)
+	?ShowMessage@CMessenger@@QAEXXZ @ 2 NONAME ; public: void __thiscall CMessenger::ShowMessage(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/nodef/eabi/implib_implicit_def.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,6 @@
+EXPORTS
+	_ZN10CMessenger11ShowMessageEv @ 1 NONAME
+	_ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 @ 2 NONAME
+	_ZTI10CMessenger @ 3 NONAME ; #<TI>#
+	_ZTV10CMessenger @ 4 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/nodef/group/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+WINSCW ARMV5 ARMV5SMP
+
+PRJ_MMPFILES
+implib_no_def.mmp
+implib_implicit_def.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/nodef/group/implib_implicit_def.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        implib_implicit_def.lib
+TARGETTYPE    implib
+  
+NOSTRICTDEF
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/nodef/group/implib_no_def.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        implib_no_def.lib
+TARGETTYPE    implib
+
+NOSTRICTDEF
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/simple_implib.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        simple_implib.lib
+TARGETTYPE    implib
+
+#ifdef WINSCW
+DEFFILE ./simple_implib_emulator.def
+#else
+DEFFILE ./simple_implib_target.def
+#endif
+    
+NOSTRICTDEF
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/simple_implib_emulator.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,5 @@
+EXPORTS
+; NEW:
+	?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @ 1 NONAME ; public: static class CMessenger * __cdecl CMessenger::NewLC(class CConsoleBase &,class TDesC16 const &)
+	?ShowMessage@CMessenger@@QAEXXZ @ 2 NONAME ; public: void __thiscall CMessenger::ShowMessage(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_implib/simple_implib_target.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,6 @@
+EXPORTS
+	_ZN10CMessenger11ShowMessageEv @ 1 NONAME
+	_ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 @ 2 NONAME
+	_ZTI10CMessenger @ 3 NONAME ; #<TI>#
+	_ZTV10CMessenger @ 4 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_kdll/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_PLATFORMS
+
+    ARMV5 ARMV7
+
+PRJ_MMPFILES
+
+    kdll.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_kdll/kdll.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This program creates a dll.
+*
+*/
+
+
+void foo()
+	{
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_kdll/kdll.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+TARGET          test_kdll.dll
+TARGETTYPE      KDLL
+
+UID             0xE800004C
+CAPABILITY      All
+
+VENDORID        0x70000001
+
+SOURCE          kdll.cpp
+
+SYSTEMINCLUDE   /epoc32/include
+
+STATICLIBRARY   ekll.lib
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_lib/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7 WINSCW
+
+PRJ_MMPFILES
+simple.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_lib/simple.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,124 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			etest.lib
+TARGETTYPE		LIB
+UID			0x100039ce 0x00000001
+SECUREID		0x10003a5
+SYSTEMINCLUDE		/epoc32/include
+SOURCE			test_lib.cpp
+
+// list of long names to provoke shell stackdump defect
+
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_1.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_10.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_11.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_12.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_13.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_14.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_15.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_16.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_17.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_18.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_19.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_2.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_20.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_21.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_22.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_23.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_24.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_25.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_26.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_27.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_28.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_29.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_3.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_30.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_31.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_32.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_33.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_34.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_35.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_36.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_37.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_38.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_39.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_4.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_40.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_41.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_42.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_43.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_44.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_45.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_46.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_47.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_48.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_49.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_5.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_50.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_51.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_52.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_53.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_54.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_55.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_56.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_57.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_58.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_59.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_6.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_60.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_61.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_62.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_63.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_64.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_65.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_66.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_67.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_68.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_69.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_7.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_70.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_71.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_72.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_73.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_74.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_75.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_76.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_77.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_78.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_79.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_8.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_80.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_81.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_82.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_83.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_84.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_85.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_86.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_87.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_88.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_89.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_9.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_90.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_91.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_92.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_93.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_94.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_95.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_96.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_97.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_98.cpp
+SOURCE zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz_99.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_lib/simple_lib1.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,17 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_lib/simple_lib2.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,17 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_lib/test_lib.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple test";
+
+extern int f(void);
+
+TInt E32Main()
+{
+	return f();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/a.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+
+ARMV5
+
+PRJ_MMPFILES
+
+default.mmp
+unpaged.mmp
+paged.mmp
+
+unpagedcode_pageddata.mmp
+pagedcode_unpageddata.mmp
+pagedcode_defaultdata.mmp
+
+paged_unpaged.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/default.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET          default.dll
+TARGETTYPE      dll
+
+UID             0xE800004C
+CAPABILITY      All -TCB
+
+VENDORID        0x70000001
+
+SOURCE          a.cpp
+
+LIBRARY         euser.lib
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/paged.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET          paged.dll
+TARGETTYPE      dll
+
+UID             0xE800004C
+CAPABILITY      All -TCB
+
+VENDORID        0x70000001
+
+SOURCE          a.cpp
+
+LIBRARY         euser.lib
+
+PAGED
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/paged_unpaged.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2000-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* In this example "bytepaircompresstarget" should not by implied as 
+* keyword "unpaged" cancels "paged". 
+*/
+
+
+TARGET          paged_unpaged.dll
+TARGETTYPE      dll
+
+UID             0xE800004C
+CAPABILITY      All -TCB
+
+VENDORID        0x70000001
+
+SOURCE          a.cpp
+
+LIBRARY         euser.lib
+
+PAGED
+UNPAGED
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/pagedcode_defaultdata.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET          paged_code_default_data.dll
+TARGETTYPE      dll
+
+UID             0xE800004C
+CAPABILITY      All -TCB
+
+VENDORID        0x70000001
+
+SOURCE          a.cpp
+
+LIBRARY         euser.lib
+
+PAGEDCODE
+//PAGEDDATA
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/pagedcode_unpageddata.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET          paged_code_unpaged_data.dll
+TARGETTYPE      dll
+
+UID             0xE800004C
+CAPABILITY      All -TCB
+
+VENDORID        0x70000001
+
+SOURCE          a.cpp
+
+LIBRARY         euser.lib
+
+PAGEDCODE
+UNPAGEDDATA
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/unpaged.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET          unpaged.dll
+TARGETTYPE      dll
+
+UID             0xE800004C
+CAPABILITY      All -TCB
+
+VENDORID        0x70000001
+
+SOURCE          a.cpp
+
+LIBRARY         euser.lib
+
+UNPAGED
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_paging/unpagedcode_pageddata.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET          unpaged_code_paged_data.dll
+TARGETTYPE      dll
+
+UID             0xE800004C
+CAPABILITY      All -TCB
+
+VENDORID        0x70000001
+
+SOURCE          a.cpp
+
+LIBRARY         euser.lib
+
+UNPAGEDCODE
+PAGEDDATA
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_MMPFILES
+plugin.mmp
+plugin_with_deffile.mmp
+plugin3.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,104 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Example data recognizer plugin
+*
+*/
+
+
+
+#include <eikenv.h>
+#include <implementationproxy.h>
+
+// User include
+#include "plugin.h"
+
+const TInt KNumDataTypes = 1;
+const TUid KExampleDllUid = {0xE8000002};
+const TInt KImplementationUid = 0x101F7DA1;
+
+// An example mime type
+_LIT8(KExampleTextMimeType, "text/example");
+
+/*
+Constructor - sets the number of supported mime types,
+the recognizer's priority and its UID.
+*/
+CExampleNewRecognizer::CExampleNewRecognizer():CApaDataRecognizerType(KExampleDllUid, CApaDataRecognizerType::EHigh)
+	{
+    iCountDataTypes = KNumDataTypes;
+	}
+
+/*
+Specifies this recognizer's preferred data buffer size passed to DoRecognizeL().
+The actual value used will be the maximum of all recognizers.
+*/
+TUint CExampleNewRecognizer::PreferredBufSize()
+	{
+    return 24;
+	}
+
+
+/*
+Returns the indexed data type that the recognizer can recognize.
+In this case, only 1 is supported.
+*/
+TDataType CExampleNewRecognizer::SupportedDataTypeL(TInt /*aIndex*/) const
+	{
+	return TDataType(KExampleTextMimeType);
+	}
+
+/*
+Attempts to recognize the data type, given the filename and data buffer.
+*/
+void CExampleNewRecognizer::DoRecognizeL(const TDesC& aName, const TDesC8& aBuffer)
+	{
+	_LIT8(KExampleData, "example");
+	_LIT(KDotExample, ".Example");
+
+	TParse parse;
+	parse.Set(aName,NULL,NULL);
+	TPtrC ext=parse.Ext(); // extract the extension from the filename
+
+	if (ext.CompareF(KDotExample)==0 && aBuffer.FindF(KExampleData)!=KErrNotFound)
+		{
+		iConfidence=ECertain;
+		iDataType=TDataType(KExampleTextMimeType);
+		}
+    }
+
+/*
+The ECom implementation creation function.
+*/
+CApaDataRecognizerType* CExampleNewRecognizer::CreateRecognizerL()
+	{
+	return new (ELeave) CExampleNewRecognizer;
+	}
+
+/*
+Standard ECom framework code
+*/
+const TImplementationProxy ImplementationTable[] =
+    {
+	IMPLEMENTATION_PROXY_ENTRY(KImplementationUid,CExampleNewRecognizer::CreateRecognizerL)
+	};
+
+/*
+Standard ECom framework code
+*/
+EXPORT_C const TImplementationProxy* ImplementationGroupProxy(TInt& aTableCount)
+    {
+    aTableCount = sizeof(ImplementationTable) / sizeof(TImplementationProxy);
+    return ImplementationTable;
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Example data recognizer plugin
+*
+*/
+
+
+
+#if !defined(__EXAMPLERECOGNIZER_H__)
+#define __EXAMPLERECOGNIZER_H__
+
+#if !defined(__APMREC_H__)
+#include <apmrec.h>
+#endif
+
+/*
+CExampleNewRecognizer is a concrete data recognizer.
+It implements CApaDataRecognizerType, the abstract base
+class for recognizers.
+*/
+class CExampleNewRecognizer: public CApaDataRecognizerType
+	{
+public:
+    CExampleNewRecognizer();
+    TUint PreferredBufSize();
+	TDataType SupportedDataTypeL(TInt) const;
+    static CApaDataRecognizerType* CreateRecognizerL();
+private:
+    void DoRecognizeL(const TDesC&, const TDesC8&);
+	};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,34 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Example data recognizer plugin
+*
+*/
+
+
+
+TARGET			plugin.dll
+TARGETTYPE		plugin
+CAPABILITY		Protserv
+UID				0x10009d8d 0xE8000002
+VENDORID		0x70000001
+SOURCEPATH		.
+SOURCE			plugin.cpp
+SYSTEMINCLUDE 	/epoc32/include
+SYSTEMINCLUDE 	/epoc32/include/ecom
+SYSTEMINCLUDE	/epoc32/include/techview
+LIBRARY			euser.lib apmime.lib efsrv.lib
+
+START RESOURCE	plugin.rss
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin.rss	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Dummy ECOM resource file
+*
+*/
+
+NAME PLUG
+
+#include <eikon.rh>
+#include <eikcore.rsg>
+#include <appinfo.rh>
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+RESOURCE TBUF r_example_text_plug { buf="plug"; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin3.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Example ECOM plugin3 component, with no UID listed
+*
+*/
+
+
+
+TARGET			plugin3.dll
+TARGETTYPE		plugin3
+CAPABILITY		Protserv
+VENDORID		0x70000001
+SOURCEPATH		.
+SOURCE			plugin.cpp
+SYSTEMINCLUDE	/epoc32/include
+SYSTEMINCLUDE	/epoc32/include/ecom
+SYSTEMINCLUDE	/epoc32/include/techview
+LIBRARY			euser.lib apmime.lib efsrv.lib
+
+START RESOURCE	plugin3.rss
+END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin3.rss	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Dummy ECOM resource file
+*
+*/
+
+NAME PLG3
+
+#include <eikon.rh>
+#include <eikcore.rsg>
+#include <appinfo.rh>
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+RESOURCE TBUF r_example_text_plug3 { buf="plug3"; }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_plugin/plugin_with_deffile.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Example data recognizer plugin with explicit DEFFILE
+*
+*/
+
+
+
+TARGET			plugin2.dll
+TARGETTYPE		plugin
+CAPABILITY		Protserv
+UID				0x10009d8d 0xE8000002
+VENDORID		0x70000001
+SOURCEPATH		.
+SOURCE			plugin.cpp
+SYSTEMINCLUDE 	/epoc32/include
+SYSTEMINCLUDE 	/epoc32/include/ecom 
+LIBRARY			euser.lib apmime.lib efsrv.lib
+DEFFILE			~/plugin2.def	
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_stringtable/CommonFramework.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+#ifndef __CommonFramework_H
+#define __CommonFramework_H
+
+#include <e32base.h>
+#include <e32cons.h>
+
+_LIT(KTxtEPOC32EX,"EXAMPLES");
+_LIT(KTxtExampleCode,"Symbian OS Example Code");
+_LIT(KFormatFailed,"failed: leave code=%d");
+_LIT(KTxtOK,"ok");
+_LIT(KTxtPressAnyKey," [press any key]");
+
+// public
+LOCAL_D CConsoleBase* console; // write all your messages to this
+LOCAL_C void doExampleL(); // code this function for the real example
+
+// private
+LOCAL_C void callExampleL(); // initialize with cleanup stack, then do example
+
+GLDEF_C TInt E32Main() // main function called by E32
+    {
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
+	TRAPD(error,callExampleL()); // more initialization, then do example
+	__ASSERT_ALWAYS(!error,User::Panic(KTxtEPOC32EX,error));
+	delete cleanup; // destroy clean-up stack
+	__UHEAP_MARKEND;
+	return 0; // and return
+    }
+
+LOCAL_C void callExampleL() // initialize and call example code under cleanup stack
+    {
+	console=Console::NewL(KTxtExampleCode,TSize(KConsFullScreen,KConsFullScreen));
+	CleanupStack::PushL(console);
+	TRAPD(error,doExampleL()); // perform example function
+	if (error)
+		console->Printf(KFormatFailed, error);
+	else
+		console->Printf(KTxtOK);
+	console->Printf(KTxtPressAnyKey);
+	console->Getch(); // get and ignore character
+	CleanupStack::PopAndDestroy(); // close console
+    }
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_stringtable/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7 WINSCW
+
+PRJ_MMPFILES
+simple_stringtable.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_stringtable/simple_stringtable.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* test.cpp
+* Test the use of a string pool
+*
+*/
+
+
+#include "CommonFramework.h"
+#include <strconsts.h>
+
+
+// do the example
+LOCAL_C void doExampleL()
+{
+        RStringPool pool;
+	RString helloString;
+	TBuf<100> wideHello;
+
+
+        pool.OpenL(strconsts::Table);
+	helloString = pool.String(strconsts::EHelloWorld,strconsts::Table);
+	wideHello.Copy(helloString.DesC());
+	console->Printf(wideHello);
+        pool.Close();
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_stringtable/simple_stringtable.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET        stringtabletest
+TARGETTYPE    exe
+//UID           0x1000008d 0x101F5D46
+
+SOURCE       simple_stringtable.cpp
+
+SOURCEPATH    strings
+
+START STRINGTABLE strconsts.st
+	  EXPORTPATH /epoc32/include
+END
+
+SYSTEMINCLUDE \epoc32\include
+
+LIBRARY       euser.lib
+LIBRARY       bafl.lib
+LIBRARY       estor.lib
+LIBRARY       charconv.lib
+
+VENDORID 0x101FB657
+
+CAPABILITY All -Tcb
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_stringtable/strings/strconsts.st	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,14 @@
+# Test String table
+fstringtable strconsts
+# Strings are case-sensitive
+#
+#
+!// test
+EEmpty
+Exx xx
+Eyy 3.0
+Ezz Thing/3.0
+Eaa Astring
+!// test
+EPlace PLACE
+EHelloWorld Hello World
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_test/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7
+
+PRJ_TESTMMPFILES
+../simple_test/simple_test_auto.mmp
+../simple_test/simple_test_manual.mmp manual
+
+PRJ_TESTEXPORTS
+testexportheader.h /epoc32/include/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_test/simple_test_auto.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			simple_test_auto
+TARGETTYPE		EXE
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_test/simple_test_manual.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			simple_test_manual
+TARGETTYPE		EXE
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_test/test.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple test";
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_test/testexportheader.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,17 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// Test Export header, does nothing
Binary file sbsv2/raptor/test/smoke_suite/test_resources/simple_zip_export/archive.zip has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/simple_zip_export/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_EXPORTS
+:zip archive.zip	/epoc32/testunzip/ overwrite
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/smp/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5SMP
+
+PRJ_MMPFILES
+#ifdef SMP
+smp.mmp
+#else
+error_smp_not_defined.mmp
+#endif
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/smp/smp.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			test
+TARGETTYPE		EXE
+
+UID				0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/smp/test.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="SMP test";
+
+#ifdef __SMP__
+
+TInt E32Main()
+{
+	return 0;
+}
+
+#else
+
+This will not compile if __SMP__ is undefined
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/build_gen_source/HelloWorld.hrh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+enum TExampleMenuCommands
+	{
+	EExampleItem0 = 200,
+	EExampleItem1,
+	EExampleItem2
+	};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/build_gen_source/HelloWorld.rss	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+NAME HEWO
+
+#include <eikon.rh>
+#include <eikcore.rsg>
+#include <appinfo.rh>
+
+#include "HelloWorld.hrh"
+
+RESOURCE RSS_SIGNATURE { }
+
+RESOURCE TBUF { buf=""; }
+
+RESOURCE EIK_APP_INFO
+	{
+	hotkeys=r_example_hotkeys;
+	menubar=r_example_menubar;
+	}
+
+RESOURCE HOTKEYS r_example_hotkeys
+    {
+    control=
+        {
+        HOTKEY { command=EEikCmdExit; key='e'; }
+        };
+    }
+
+RESOURCE MENU_BAR r_example_menubar
+    {
+    titles=
+        {
+        MENU_TITLE { menu_pane=r_example_first_menu; txt="HelloWld"; }
+		};
+    }
+
+RESOURCE MENU_PANE r_example_first_menu
+	{
+	items=
+		{
+		MENU_ITEM { command=EExampleItem0; txt="Item 0"; },
+		MENU_ITEM { command=EExampleItem1; txt="Item 1"; },
+		MENU_ITEM { command=EExampleItem2; txt="Item 2"; },
+		MENU_ITEM { command=EEikCmdExit; txt="Close"; }
+        };
+    }
+
+
+RESOURCE TBUF r_example_text_Hello { buf="Hello World!"; }
+RESOURCE TBUF r_example_text_Item0 { buf="Item 0"; }
+RESOURCE TBUF r_example_text_Item1 { buf="Item 1"; }
+RESOURCE TBUF r_example_text_Item2 { buf="Item 2"; }
+
+RESOURCE LOCALISABLE_APP_INFO r_lai
+	{
+	short_caption = "HW";
+	caption_and_icon =
+		{
+		CAPTION_AND_ICON_INFO
+			{
+			caption = "helloworld";
+			number_of_icons = 3; // each icon must be a bitmap/mask pair
+			icon_file = "z:\\resource\\apps\\helloworld.mbm";
+			}
+		};							
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/build_gen_source/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "exported.inf"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/build_gen_source/build_gen_source.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "exported.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/Bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_MMPFILES
+
+HelloWorld.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,110 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#ifndef __HELLOWORLD_H
+#define __HELLOWORLD_H
+
+#include <coeccntx.h>
+
+#include <eikenv.h>
+#include <eikappui.h>
+#include <eikapp.h>
+#include <eikdoc.h>
+#include <eikmenup.h>
+
+#include <eikon.hrh>
+
+#include <helloworld.rsg>
+#include "HelloWorld.hrh"
+
+
+
+////////////////////////////////////////////////////////////////////////
+//
+// CExampleApplication
+//
+////////////////////////////////////////////////////////////////////////
+
+class CExampleApplication : public CEikApplication
+	{
+private: 
+	           // Inherited from class CApaApplication
+	CApaDocument* CreateDocumentL();
+	TUid AppDllUid() const;
+	};
+
+////////////////////////////////////////////////////////////////////////
+//
+// CExampleAppView
+//
+////////////////////////////////////////////////////////////////////////
+class CExampleAppView : public CCoeControl
+    {
+public:
+	static CExampleAppView* NewL(const TRect& aRect);
+	CExampleAppView();
+	~CExampleAppView();
+    void ConstructL(const TRect& aRect);
+
+private:
+	           // Inherited from CCoeControl
+	void Draw(const TRect& /*aRect*/) const;
+
+private:
+	HBufC*  iExampleText;
+    };
+
+
+////////////////////////////////////////////////////////////////////////
+//
+// CExampleAppUi
+//
+////////////////////////////////////////////////////////////////////////
+class CExampleAppUi : public CEikAppUi
+    {
+public:
+    void ConstructL();
+	~CExampleAppUi();
+
+private:
+              // Inherirted from class CEikAppUi
+	void HandleCommandL(TInt aCommand);
+
+private:
+	CCoeControl* iAppView;
+	};
+
+
+////////////////////////////////////////////////////////////////////////
+//
+// CExampleDocument
+//
+////////////////////////////////////////////////////////////////////////
+class CExampleDocument : public CEikDocument
+	{
+public:
+	static CExampleDocument* NewL(CEikApplication& aApp);
+	CExampleDocument(CEikApplication& aApp);
+	void ConstructL();
+private: 
+	           // Inherited from CEikDocument
+	CEikAppUi* CreateAppUiL();
+	};
+
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld.hrh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+enum TExampleMenuCommands
+	{
+	EExampleItem0 = 200,
+	EExampleItem1,
+	EExampleItem2
+	};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        helloworld.exe
+TARGETTYPE    exe
+UID           0x100039CE 0xE800005A
+VENDORID 	  0x70000001
+SOURCEPATH    .
+SOURCE        HelloWorld_Main.cpp
+SOURCE        HelloWorld_Application.cpp
+SOURCE        HelloWorld_Document.cpp
+SOURCE        HelloWorld_AppUi.cpp
+SOURCE        HelloWorld_AppView.cpp
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/techview
+
+
+START RESOURCE	HelloWorld_reg.rss
+TARGETPATH		/private/10003a3f/apps
+END
+
+START BITMAP	helloworld.mbm
+TARGETPATH		/resource/apps
+SOURCE			c8,1 icon24.BMP icon2M.BMP icon32.BMP icon3M.BMP icon48.BMP icon4M.BMP
+END
+
+LIBRARY       euser.lib apparc.lib cone.lib eikcore.lib gdi.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_AppUi.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,81 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* HelloWorld_CExampleAppUi.cpp
+*
+*/
+
+
+#include "HelloWorld.h"
+
+//             The second phase constructor of the application UI class.
+//             The application UI creates and owns the one and only view.
+// 
+void CExampleAppUi::ConstructL()
+    {
+	           // BaseConstructL() completes the UI framework's
+	           // construction of the App UI.
+    BaseConstructL();
+	           // Create the single application view in which to
+	           // draw the text "Hello World!", passing into it
+	           // the rectangle available to it.
+	iAppView = CExampleAppView::NewL(ClientRect());
+	}
+
+
+//             The app Ui owns the two views and is. 
+//             therefore, responsible for destroying them
+//
+CExampleAppUi::~CExampleAppUi()
+	{
+	delete iAppView;
+	}
+
+
+//             Called by the UI framework when a command has been issued.
+//             In this example, a command can originate through a 
+//             hot-key press or by selection of a menu item.
+//             The command Ids are defined in the .hrh file
+//             and are 'connected' to the hot-key and menu item in the
+//             resource file.
+//             Note that the EEikCmdExit is defined by the UI
+//             framework and is pulled in by including eikon.hrh
+//
+void CExampleAppUi::HandleCommandL(TInt aCommand)
+	{
+	switch (aCommand)
+		{
+		      // Just issue simple info messages to show that
+		      // the menu items have been selected
+	case EExampleItem0:
+		iEikonEnv->InfoMsg(R_EXAMPLE_TEXT_ITEM0);
+		break;
+
+	
+	case EExampleItem1:
+		iEikonEnv->InfoMsg(R_EXAMPLE_TEXT_ITEM1);
+		break;
+	
+	case EExampleItem2:
+		iEikonEnv->InfoMsg(R_EXAMPLE_TEXT_ITEM2);
+		break;
+               // Exit the application. The call is
+		       // implemented by the UI framework.
+
+	case EEikCmdExit: 
+		Exit();
+		break;
+		}
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_AppView.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,106 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* HelloWorld_CExampleAppView.cpp
+*
+*/
+
+
+#include "HelloWorld.h"
+
+//
+//             Constructor for the view.
+//
+CExampleAppView::CExampleAppView()
+	{
+	}
+
+
+//             Static NewL() function to start the standard two
+//             phase construction.
+//
+CExampleAppView* CExampleAppView::NewL(const TRect& aRect)
+	{
+	CExampleAppView* self = new(ELeave) CExampleAppView();
+	CleanupStack::PushL(self);
+	self->ConstructL(aRect);
+	CleanupStack::Pop();
+	return self;
+	}
+
+
+//
+//             Destructor for the view.
+//
+CExampleAppView::~CExampleAppView()
+	{
+	delete iExampleText;
+	}
+
+
+//             Second phase construction.
+//
+void CExampleAppView::ConstructL(const TRect& aRect)
+    {
+			   // Fetch the text from the resource file.
+	iExampleText = iEikonEnv->AllocReadResourceL(R_EXAMPLE_TEXT_HELLO);
+	           // Control is a window owning control
+	CreateWindowL();
+	           // Extent of the control. This is
+	           // the whole rectangle available to application.
+	           // The rectangle is passed to us from the application UI.
+	SetRect(aRect);
+			   // At this stage, the control is ready to draw so
+	           // we tell the UI framework by activating it.
+	ActivateL();
+	}
+
+
+//             Drawing the view - in this example, 
+//             consists of drawing a simple outline rectangle
+//             and then drawing the text in the middle.
+//             We use the Normal font supplied by the UI.
+//
+//             In this example, we don't use the redraw
+//             region because it's easier to redraw to
+//             the whole client area.
+//
+void CExampleAppView::Draw(const TRect& /*aRect*/) const
+	{
+               // Window graphics context
+	CWindowGc& gc = SystemGc();
+	           // Area in which we shall draw
+	TRect      drawRect = Rect();
+			   // Font used for drawing text
+	const CFont*     fontUsed;
+	
+	           // Start with a clear screen
+	gc.Clear();
+			   // Draw an outline rectangle (the default pen
+	           // and brush styles ensure this) slightly
+	           // smaller than the drawing area.
+	drawRect.Shrink(10,10);		   	
+	gc.DrawRect(drawRect);
+               // Use the title font supplied by the UI
+	fontUsed = iEikonEnv->TitleFont();
+	gc.UseFont(fontUsed);
+			   // Draw the text in the middle of the rectangle.
+	TInt   baselineOffset=(drawRect.Height() - fontUsed->HeightInPixels())/2; 
+	gc.DrawText(*iExampleText,drawRect,baselineOffset,CGraphicsContext::ECenter, 0);
+               // Finished using the font
+	gc.DiscardFont();
+	}
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_Application.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* HelloWorld_CExampleApplication.cpp
+*
+*/
+
+
+#include "HelloWorld.h"
+
+const TUid KUidHelloWorld = { 0xE800005A };
+
+//             The function is called by the UI framework to ask for the
+//             application's UID. The returned value is defined by the
+//             constant KUidHelloWorlde and must match the second value
+//             defined in the project definition file.
+//
+TUid CExampleApplication::AppDllUid() const
+	{
+	return KUidHelloWorld;
+	}
+
+//             This function is called by the UI framework at
+//             application start-up. It creates an instance of the
+//             document class.
+//
+CApaDocument* CExampleApplication::CreateDocumentL()
+	{
+	return new (ELeave) CExampleDocument(*this);
+	}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_Document.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,40 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* HelloWorld_CExampleDocument.cpp
+*
+*/
+
+
+#include "HelloWorld.h"
+
+//             The constructor of the document class just passes the
+//             supplied reference to the constructor initialisation list.
+//             The document has no real work to do in this application.
+//
+CExampleDocument::CExampleDocument(CEikApplication& aApp)
+		: CEikDocument(aApp)
+	{
+	}
+
+
+//             This is called by the UI framework as soon as the 
+//             document has been created. It creates an instance
+//             of the ApplicationUI. The Application UI class is
+//             an instance of a CEikAppUi derived class.
+//
+CEikAppUi* CExampleDocument::CreateAppUiL()
+	{
+    return new(ELeave) CExampleAppUi;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_Main.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+#include "HelloWorld.h"
+
+//             The entry point for the application code. It creates
+//             an instance of the CApaApplication derived
+//             class, CExampleApplication.
+//
+
+#if defined(EKA2)
+
+#include <eikstart.h>
+LOCAL_C CApaApplication* NewApplication()
+	{
+	return new CExampleApplication;
+	}
+	
+GLDEF_C TInt E32Main()
+	{
+	return EikStart::RunApplication(NewApplication);
+	}
+	
+#endif
+
+#if defined(__WINS__) && !defined(EKA2)
+//             This function is required by all Symbian OS DLLs. In this 
+//             example, it does nothing.
+
+EXPORT_C CApaApplication* NewApplication()
+	{
+	return new CExampleApplication;
+	}
+
+GLDEF_C TInt E32Dll(TDllReason)
+	{
+	return KErrNone;
+	}
+	
+EXPORT_C TInt WinsMain(TDesC* aCmdLine)
+	{
+	return EikStart::RunApplication(NewApplication, aCmdLine);
+	}
+	
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/HelloWorld_reg.rss	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include <appinfo.rh>
+#include <helloworld.rsg>
+
+UID2 KUidAppRegistrationResourceFile
+UID3 0xE800005A // application UID
+
+RESOURCE APP_REGISTRATION_INFO
+	{
+	app_file = "HelloWorld";
+	localisable_resource_file = "\\resource\\apps\\HelloWorld";
+	localisable_resource_id = R_LAI;	
+	}
+	
Binary file sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon24.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon2M.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon32.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon3M.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon48.BMP has changed
Binary file sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent/icon4M.BMP has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent_on_exports/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_MMPFILES
+dependent_on_exports.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent_on_exports/dependent_on_exports.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "metadata_export_pre1.mmh"
+#include "metadata_export_pre2.mmh"
+
+SOURCE					test.cpp
+SYSTEMINCLUDE			/epoc32/include
+LIBRARY					euser.lib
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/dependent_on_exports/test.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "e32def.h"
+
+TInt E32Main()
+	{
+	return 0;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,20 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_EXPORTS
+exported.inf |../build_gen_source/exported.inf
+exported.mmh |../build_gen_source/exported.mmh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export/exported.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_MMPFILES
+build_gen_source.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export/exported.mmh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET helloworld
+TARGETTYPE none
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/techview
+
+START RESOURCE	HelloWorld.rss
+HEADER
+TARGETPATH		/resource/apps
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export_pre1/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,19 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_EXPORTS
+metadata_export_pre1.mmh |../dependent_on_exports/metadata_export_pre1.mmh
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export_pre1/metadata_export_pre1.mmh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET					dependent_on_exports.exe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export_pre2/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_EXPORTS
+metadata_export_pre2.mmh |../dependent_on_exports/metadata_export_pre2.mmh
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/metadata_export_pre2/metadata_export_pre2.mmh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,18 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGETTYPE				exe
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/system_definition_dud.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+<SystemDefinition name="MCL" schema="2.0.0" > 
+	<systemModel>
+
+<I have invalid contents, and nothing good will *ever* come of me!/>
+
+	</systemModel>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/system_definition_mmp_export_dependencies_test.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,19 @@
+<SystemDefinition name="MCL" schema="2.0.0" > 
+	<systemModel>
+	    <layer name="First Exporting Component">
+			<component name="first_exporting">
+				<unit bldFile="metadata_export_pre1" mrp="test/sysdef/metadata_export_pre1/test.mrp"/>
+			</component>
+		</layer>
+	    <layer name="Component Dependent On Exports">
+			<component name="dependent_on_exports">
+				<unit bldFile="dependent_on_exports" mrp="test/sysdef/dependent_on_exports/test.mrp"/>
+			</component>
+		</layer>
+	    <layer name="Second Exporting Component">
+			<component name="second_exporting">
+				<unit bldFile="metadata_export_pre2" mrp="test/sysdef/metadata_export_pre2/test.mrp"/>
+			</component>
+		</layer>
+	</systemModel>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/sysdef/system_definition_order_layer_test.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,19 @@
+<SystemDefinition name="MCL" schema="2.0.0" > 
+	<systemModel>
+	    <layer name="Component with Layer Dependencies">
+			<component name="dependent">
+				<unit bldFile="test/smoke_suite/test_resources/sysdef/dependent" root="SBS_HOME" mrp="test/sysdef/dependent/test.mrp"/>
+			</component>
+		</layer>
+	    <layer name="Build Generated Source">
+			<component name="build generated source">
+				<unit bldFile="test/smoke_suite/test_resources/sysdef/build_gen_source" root="SBS_HOME" mrp="test/sysdef/build_gen_source/test.mrp"/>
+			</component>
+		</layer>
+	    <layer name="Metadata Export">
+			<component name="metadata export">
+				<unit bldFile="test/smoke_suite/test_resources/sysdef/metadata_export" root="SBS_HOME" mrp="test/sysdef/metadata_export/test.mrp"/>
+			</component>
+		</layer>
+	</systemModel>
+</SystemDefinition>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/talon_test/README.FIRST.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,4 @@
+README.FIRST.txt
+
+The file "script" in the same directory as this file contains a "talon script", i.e. a string that can be
+passed to talon's -c option, as well as some intentional blank lines.
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/talon_test/script	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,3 @@
+
+|name=scriptfiletest;COMPONENT_META=scriptfile/group/bld.inf;PROJECT_META=scriptfile.mmp;|echo Script file output
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem/README	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,10 @@
+A very simple TEM test
+
+This is more aimed at the TEM mechanism rather than TEMs themselves.
+
+There are several bld infs:
+bld.inf      - is expected to build without errors
+bad_bld.inf  - is expected to generate duplicate TEM calls
+bad2_bld.inf - is expected to ensure that options are passing through to TEM unchanged
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem/bad2_bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,53 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_EXTENSIONS
+start EXTENSION $(SBS_HOME)/test/smoke_suite/test_resources/tem/temex
+source source1.cpp source2.cpp
+target test1
+OPTION PRINTER $(SBS_HOME)/ANOTHERVALUE
+OPTION MEMMODEL aonetwothree
+OPTION NAME /otherstuff/
+OPTION PREFIX yetanother
+end
+
+
+PRJ_EXTENSIONS
+start EXTENSION $(SBS_HOME)/test/smoke_suite/test_resources/tem/temex
+source source3.cpp source4.cpp
+target test2
+OPTION PRINTER 2$(SBS_HOME)/ANOTHERVALUE
+OPTION MEMMODEL 2aonetwothree
+OPTION NAME 2/otherstuff/
+OPTION PREFIX 2yetanother
+end
+
+
+PRJ_EXTENSIONS
+start EXTENSION $(SBS_HOME)/test/smoke_suite/test_resources/tem/temex
+source source3.cpp source4.cpp
+target test2
+OPTION PRINTER 2$(SBS_HOME)/ANOTHERVALUE
+OPTION MEMMODEL 2aonetwothree
+OPTION NAME 2/otherstuff/
+OPTION PREFIX 2yetanother
+end
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem/bad_bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+
+PRJ_EXTENSIONS
+start EXTENSION $(SBS_HOME)/test/smoke_suite/test_resources/tem/temex
+source source1.cpp source2.cpp
+target test1
+OPTION PRINTER $(SBS_HOME)/ANOTHERVALUE
+OPTION MEMMODEL aonetwothree
+OPTION NAME /otherstuff/
+OPTION PREFIX yetanother
+end
+
+
+PRJ_EXTENSIONS
+start EXTENSION $(SBS_HOME)/test/smoke_suite/test_resources/tem/temex
+source source3.cpp source4.cpp
+target test2
+OPTION PRINTER 1$(SBS_HOME)/ANOTHERVALUE
+OPTION MEMMODEL 1aonetwothree
+OPTION NAME 1/otherstuff/
+OPTION PREFIX 1yetanother
+end
+
+// A repetition - should cause the tem.mk to complain
+// Not easy to test automatically though. needs
+// cleanup and teardown TEMS to work (i.e. not done yet)
+
+
+PRJ_EXTENSIONS
+start EXTENSION $(SBS_HOME)/test/smoke_suite/test_resources/tem/temex
+source source3.cpp source4.cpp
+target test1
+OPTION PRINTER $(SBS_HOME)/ANOTHERVALUE
+OPTION MEMMODEL aonetwothree
+OPTION NAME /otherstuff/
+OPTION PREFIX yetanother
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+
+PRJ_EXTENSIONS
+start EXTENSION $(SBS_HOME)/test/smoke_suite/test_resources/tem/temex
+source source1.cpp source2.cpp
+target test1
+OPTION PRINTER $(SBS_HOME)/ANOTHERVALUE
+OPTION MEMMODEL aonetwothree
+OPTION NAME otherstuff
+OPTION PREFIX yetanother
+end
+
+
+PRJ_EXTENSIONS
+start EXTENSION $(SBS_HOME)/test/smoke_suite/test_resources/tem/temex
+source source3.cpp source4.cpp
+target test2
+OPTION PRINTER $(SBS_HOME)/ANOTHERVALUE
+OPTION MEMMODEL 1aonetwothree
+OPTION NAME 1otherstuff
+OPTION PREFIX 1yetanother
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem/bldclean.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+// Cleanup to enable duplicate detection
+PRJ_EXTENSIONS
+start EXTENSION $(SBS_HOME)/test/smoke_suite/test_resources/tem/cleantems
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem/cleantems.mk	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,83 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+#
+# Clean up any output files from temex.mk
+# prior to it being executed.
+# no other way to do this!
+
+
+#find works properly on Samba in case insensitive mode 
+# with -iname whereas shell globbing doesn't  
+# i.e. rm TARGETNAME* doesn't work but this does
+
+#find  $(EPOCROOT)/epoc32/build/ -iname 'TEMTEST_*.out' -exec rm \{\} \; ; true
+define clean
+rm $(EPOCROOT)/epoc32/build/TEMTEST_*  $(EPOCROOT)/epoc32/build/temtest_* $(EPOCROOT)/epoc32/raptor_smoketest_tem_failed $(EPOCROOT)/epoc32/raptor_smoketest_tem_succeeded ; true
+endef
+
+DO_NOTHING: 
+	@echo "DO_NOTHING"
+
+
+MAKMAKE:
+	@echo "MAKMAKE"
+	$(clean)
+
+BLD:
+	@echo "BLD"
+	$(clean)
+
+
+SAVESPACE:
+	@echo "SAVESPACE"
+	$(clean)
+
+
+FREEZE:
+	@echo "FREEZE"
+	$(clean)
+
+
+LIB:
+	@echo "LIB"
+	$(clean)
+
+
+CLEANLIB :
+	@echo "CLEANLIB"
+	$(clean)
+
+
+RESOURCE :
+	@echo "RESOURCE"
+	$(clean)
+
+
+CLEAN :
+	@echo "CLEAN"
+	$(clean)
+
+
+RELEASABLES :
+	@echo "RELEASABLES"
+	$(clean)
+
+
+FINAL :
+	@echo "FINAL"
+	$(clean)
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem/temex.mk	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,138 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+#
+# A test-template extension makefile
+# supposed to demonstrate that different calls
+# to the same template extension makefile will
+# get different variable values.
+# i.e. it's supposed to show target specific variables 
+# working properly for template extension makefiles.
+
+# The test is by manual comparison at the moment.
+
+
+
+define print
+echo ""
+echo ""
+@echo ""
+@echo "EPOCROOT=$(EPOCROOT)"
+@echo "PLATFORM=$(PLATFORM)"
+@echo "CFG=$(CFG)"
+@echo "TO_ROOT=$(TO_ROOT)"
+@echo "TO_BLDINF=$(TO_BLDINF)"
+@echo "EPOCBLD=$(EPOCBLD)"
+@echo "EXTENSION_ROOT=$(EXTENSION_ROOT)"
+@echo "HOST_SHELL=$(HOST_SHELL)"
+@echo "/=$(/)"
+@echo ";=$(;)"
+@echo "RMDIR=$(RMDIR)"
+@echo "RM=$(RM)"
+@echo "ERASE=$(ERASE)"
+@echo "MKDIR=$(MKDIR)"
+@echo "CP=$(CP)"
+@echo "PLATFORM_PATH=$(PLATFORM_PATH)"
+@echo "CFG_PATH=$(CFG_PATH)"
+@echo "TARGET=$(TARGET)"
+@echo "SOURCE=$(SOURCE)"
+@echo "TEMTARGET=$(TEMTARGET)"
+@echo "TEMPLATE_EXTENSION_MAKEFILE=$(TEMPLATE_EXTENSION_MAKEFILE)"
+@echo ""
+@echo "Options:"
+@echo "PREFIX=$(PREFIX)"
+@echo "MEMMODEL=$(MEMMODEL)"
+@echo "NAME=$(NAME)"
+@echo ""
+@echo "TEMCALLVALUE=$(TEMCALLVALUE)"
+@echo "TEMCALL_TESTUNIQ_FILENAME=$(TEMCALL_TESTUNIQ_FILENAME)"
+endef
+
+# Test for duplicate calls (bad_bld.inf)
+BLANK:=
+SPACE:=$(BLANK) $(BLANK)
+COLON:=:
+TESTUNIQ:=TEMTEST_$(MEMMODEL)$(NAME)$(TARGET)$(CFG)$(PLATFORM)$(TEMTARGET)
+TESTUNIQ:=$(subst /,_,$(TESTUNIQ))
+TESTUNIQ:=$(subst $(SPACE),_,$(TESTUNIQ))
+TESTUNIQ:=$(subst $(COLON),_,$(TESTUNIQ))
+TEMCALL_TESTUNIQ_FILENAME:=$(EPOCROOT)/epoc32/build/$(TESTUNIQ).out
+
+$(info TEMCALL_TESTUNIQ_FILENAME=$(TEMCALL_TESTUNIQ_FILENAME))
+$(info TEMTARGET=$(TEMTARGET))
+TEMCALLVALUE:=$(shell if [ ! -e "$(TEMCALL_TESTUNIQ_FILENAME)" ]; then echo "$(TEMCALL_TESTUNIQ_FILENAME)" > "$(TEMCALL_TESTUNIQ_FILENAME)"; echo "1";else echo "0"; fi)
+
+ifneq ($(TEMCALLVALUE),1)
+$(shell touch $(EPOCROOT)/epoc32/raptor_smoketest_tem_failed)
+$(error repeated call to TEM with same values, tested with file $(TEMCALL_TESTUNIQ_FILENAME), resulting in '$(TEMCALLVALUE)' at $(shell date; cat $(TEMCALL_TESTUNIQ_FILENAME)))
+else
+$(shell touch $(EPOCROOT)/epoc32/raptor_smoketest_tem_succeeded)
+endif
+
+PARS:=$(PREFIX)$(MEMMODEL)$(NAME)
+ifneq ($(PARS),yetanotheraonetwothreeotherstuff)
+ifneq ($(PARS),1yetanother1aonetwothree1otherstuff)
+$(error Unexpected TEM call parameters for this test: $(PARS))
+endif
+endif
+
+
+
+
+DO_NOTHING : 
+	@echo "DO_NOTHING"
+	$(print)
+
+
+MAKMAKE :
+	@echo "MAKMAKE"
+	$(print)
+
+BLD :
+	@echo "BLD"
+	$(print)
+
+SAVESPACE :
+	@echo "SAVESPACE"
+	$(print)
+
+FREEZE :
+	@echo "FREEZE"
+	$(print)
+
+LIB :
+	@echo "LIB"
+	$(print)
+
+CLEANLIB :
+	@echo "CLEANLIB"
+	$(print)
+
+RESOURCE :
+	@echo "RESOURCE"
+	$(print)
+
+CLEAN :
+	@echo "CLEAN"
+	$(print)
+
+RELEASABLES :
+	@echo "RELEASABLES"
+	$(print)
+
+FINAL :
+	@echo "FINAL"
+	$(print)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_conflict/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_EXPORTS
+tem_conflicts.meta /epoc32/tools/makefile_templates/test/
+tem_conflicts.mk /epoc32/tools/makefile_templates/test/
+tem_conflicts.sh /epoc32/tools/makefile_templates/test/
+
+PRJ_EXTENSIONS
+start extension test/tem_conflicts
+end
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_conflict/tem_conflicts.meta	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,19 @@
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+# 
+# Contributors:
+#
+# Description:
+# Meta information for the GNU makesis extension template
+#
+
+platform	win32
+makefile 	gnumake
+techstream	tools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_conflict/tem_conflicts.mk	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,43 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+do_nothing:
+
+MAKMAKE : do_nothing
+
+FREEZE : do_nothing
+
+LIB : do_nothing
+	
+CLEANLIB : do_nothing
+
+RESOURCE : do_nothing
+
+FINAL: 
+	bash $(EPOCROOT)/epoc32/tools/makefile_templates/test/tem_conflicts.sh
+
+BLD : do_nothing
+
+SAVESPACE : do_nothing
+
+RELEASABLES: do_nothing
+
+CLEAN: do_nothing
+
+
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_conflict/tem_conflicts.sh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,10 @@
+i=0
+while [ $i -lt 50 ]
+do
+    echo abcdefghijklmnopqrstuvwxyz > $EPOCROOT/A
+    cp $EPOCROOT/A $EPOCROOT/B
+    rm $EPOCROOT/A
+    rm $EPOCROOT/B
+    i=$[i + 1]
+done
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// test the ordering of MMP and TEM stages
+
+PRJ_EXPORTS
+tem.mk		/epoc32/tools/makefile_templates/test/tem_stages.mk
+tem.meta	/epoc32/tools/makefile_templates/test/tem_stages.meta
+
+PRJ_MMPFILES
+test_exe.mmp
+test_lib.mmp
+
+PRJ_EXTENSIONS
+START EXTENSION test/tem_stages
+END
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/tem.meta	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,3 @@
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/tem.mk	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,86 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+# check that the 5 stages happen in the right order relative to each other
+# and relative to the MMP LIBRARY (LIB) and TARGET (BLD) stages.
+
+
+VARIANT:=$(PLATFORM_PATH)_$(CFG_PATH)
+
+GENERATED_C:=$(EPOCROOT)/epoc32/build/generated/tem_stages_generated.cpp
+GENERATED_H:=$(EPOCROOT)/epoc32/include/tem_stages_generated.h
+GENERATED_R:=$(EPOCROOT)/epoc32/include/tem_stages_generated_$(VARIANT).rsg
+GENERATED_L:=$(EPOCROOT)/epoc32/include/tem_stages_generated_$(VARIANT).lib
+GENERATED_B:=$(EPOCROOT)/epoc32/include/tem_stages_generated_$(VARIANT).bin
+GENERATED_F:=$(EPOCROOT)/epoc32/include/tem_stages_generated_$(VARIANT).final
+
+GENERATED:=$(GENERATED_C) $(GENERATED_H) $(GENERATED_R) $(GENERATED_L) $(GENERATED_B) $(GENERATED_F)
+
+BUILT_LIB:=$(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/tem_stages.lib
+BUILT_EXE:=$(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/tem_stages.exe
+COPY_LIB:=$(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/tem_stages.lib2
+COPY_EXE:=$(EPOCROOT)/epoc32/release/$(PLATFORM_PATH)/$(CFG_PATH)/tem_stages.exe2
+
+COPIED:=$(COPY_LIB) $(COPY_EXE)
+
+DIRS:=$(dir $(GENERATED_H)) $(dir $(GENERATED_C))
+$(DIRS):
+	mkdir -p $@
+
+# a header that is used by the EXE and LIB
+# and a source file used by the EXE and LIB
+#
+MAKMAKE: | $(DIRS)
+	echo "// dummy" > $(GENERATED_H)
+	echo "// dummy" > $(GENERATED_C)
+
+
+# check that our MAKMAKE happens before RESOURCE
+#
+RESOURCE: | $(DIRS)
+	$(CP) $(GENERATED_H) $(GENERATED_R)
+
+
+# check that our RESOURCE happens before LIB
+#
+LIB: | $(DIRS)
+	$(CP) $(GENERATED_R) $(GENERATED_L)
+
+
+# check that our LIB happens before BLD
+# check that MMP LIB happens before BLD
+#
+BLD: | $(DIRS)
+	$(CP) $(GENERATED_L) $(GENERATED_B)
+	$(CP) $(BUILT_LIB) $(COPY_LIB)
+
+
+# check that our BLD happens before FINAL
+# check that MMP BLD happens before FINAL
+#
+FINAL: | $(DIRS)
+	$(CP) $(GENERATED_B) $(GENERATED_F)
+	$(CP) $(BUILT_EXE) $(COPY_EXE)
+
+RELEASABLES:
+	@echo $(BUILT_EXE) $(COPY_EXE) $(BUILT_LIB) $(COPY_LIB)
+
+
+CLEAN:
+	$(RM) $(GENERATED) $(COPIED)
+
+CLEANLIB: ;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/test_exe.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "e32def.h"
+#include "tem_stages_generated.h"
+
+char test[]="Simple test";
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/test_exe.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			tem_stages
+TARGETTYPE		EXE
+
+UID				0x100039ce 0x00000001
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test_exe.cpp
+SOURCEPATH		/epoc32/build/generated
+SOURCE			tem_stages_generated.cpp
+EPOCCALLDLLENTRYPOINTS
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/test_lib.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "e32def.h"
+#include "tem_stages_generated.h"
+
+char test[]="Simple test";
+
+int f(void)
+{
+	return 999;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tem_stages/test_lib.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			tem_stages.lib
+TARGETTYPE		LIB
+UID				0x100039ce 0x00000001
+SECUREID		0x10003a5
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test_lib.cpp
+SOURCEPATH		/epoc32/build/generated
+SOURCE			tem_stages_generated.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/timeout/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// component with a recipe that deliberately times out
+
+PRJ_EXPORTS
+sleeper.flm	/epoc32/tools/makefile_templates/test/sleeper.flm
+sleeper.xml	/epoc32/tools/makefile_templates/test/sleeper.xml
+
+PRJ_EXTENSIONS
+START EXTENSION test.sleeper
+END
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/timeout/sleeper.flm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+# Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# sleeper.flm - cause a timeout 
+
+# change the timeout to 2 seconds
+TALON_TIMEOUT:=2000
+
+ALL:: dosomethinglong
+
+# this recipe takes longer than 2 seconds to run
+$(call raptor_recipe,sleeper,dosomethinglong,,sleep 4)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/timeout/sleeper.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+	<!-- for the timeout.py test -->
+
+	<interface name="test.sleeper" flm="sleeper.flm"/>
+
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/toolchain_macros/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 WINSCW 
+
+PRJ_MMPFILES
+macros.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/toolchain_macros/macros.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#include "e32def.h"
+
+TInt E32Main()
+	{
+
+// Confirm macro presence in processing through warnings
+
+#ifdef __ARMCC__
+#warning __ARMCC__
+#endif
+
+#ifdef __ARMCC_2__
+#warning __ARMCC_2__
+#endif
+
+#ifdef __ARMCC_2_2__
+#warning __ARMCC_2_2__
+#endif
+
+#ifdef __ARMCC_3__
+#warning __ARMCC_3__
+#endif
+
+#ifdef __ARMCC_3_1__
+#warning __ARMCC_3_1__
+#endif
+
+#ifdef __ARMCC_4__
+#warning __ARMCC_4__
+#endif
+
+#ifdef __ARMCC_4_0__
+#warning __ARMCC_4_0__
+#endif
+
+#ifdef __GCCE__
+#warning __GCCE__
+#endif
+
+#ifdef __GCCE_4__
+#warning __GCCE_4__
+#endif
+
+#ifdef __GCCE_4_3__
+#warning __GCCE_4_3__
+#endif
+
+#ifdef __GCCE_4_4__
+#warning __GCCE_4_4__
+#endif
+
+	return 0;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/toolchain_macros/macros.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET			macros
+TARGETTYPE		EXE
+UID				0x100039ce 0x00000001
+LIBRARY			euser.lib
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			macros.cpp
+
+// Confirm macro presence in processing through warnings
+
+#ifdef ARMCC
+#warning ARMCC
+#endif
+
+#ifdef ARMCC_2
+#warning ARMCC_2
+#endif
+
+#ifdef ARMCC_2_2
+#warning ARMCC_2_2
+#endif
+
+#ifdef ARMCC_3
+#warning ARMCC_3
+#endif
+
+#ifdef ARMCC_3_1
+#warning ARMCC_3_1
+#endif
+
+#ifdef ARMCC_4
+#warning ARMCC_4
+#endif
+
+#ifdef ARMCC_4_0
+#warning ARMCC_4_0
+#endif
+
+#ifdef GCCE
+#warning GCCE
+#endif
+
+#ifdef GCCE_4
+#warning GCCE_4
+#endif
+
+#ifdef GCCE_4_3
+#warning GCCE_4_3
+#endif
+
+#ifdef GCCE_4_4
+#warning GCCE_4_4
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/toolcheck/toolcheck.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+ <var name="toolcheck"> 
+  <env name="TOOLCHECK1" default="toolcheck1$(DOTEXE)" type="tool" versionCommand="$(TOOLCHECK1)" versionResult="Version 12\.[0-9]{2}\.[0-9]{4}" /> 
+  <env name="TOOLCHECK2" default="toolcheck2$(DOTEXE)" type="tool" versionCommand="$(TOOLCHECK2)" versionResult="toolcheck2$(DOTEXE): command not found" />
+  <env name="TOOLCHECK3" default='mwccsym2$(DOTEXE)' type='tool' versionCommand='$(TOOLCHECK3) -version' versionResult='something you would never see'/>
+  <env name='TOOLCHECK4' default='$(SBS_GNUCPP)' type='tool' versionCommand='$(GNUCPP) --version' versionResult='something you would never see'/>
+  <env name='TOOLCHECK5' default='$(SBS_PYTHON)' type='tool' versionCommand='$(PYTHON) -V' versionResult='something you would never see'/>
+  <env name='TOOLCHECK6' default='$(SBS_HOME)/test/smoke_suite/test_resources/toolcheck/toolcheck6.py' type='tool' versionCommand='$(PYTHON) $(TOOLCHECK6)' versionResult='something toolcheck6 would print out to match tool check result'/>
+ </var>  
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/toolcheck/toolcheck6.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,17 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+print "something toolcheck6 would print out to match tool check result"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+TOOLS
+
+PRJ_MMPFILES
+tool_lib1.mmp
+tool_lib2.mmp
+tool_exe.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools/tool_exe.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			tool_exe.exe
+TARGETTYPE		EXE
+SOURCEPATH		../tools2
+SOURCE			tool_exe_a.cpp
+SOURCE			tool_exe_b.cpp
+USERINCLUDE		../tools2/inc1
+USERINCLUDE		../tools2/inc2
+SYSTEMINCLUDE		../tools2/sys1
+SYSTEMINCLUDE		../tools2/sys2
+STATICLIBRARY		tool_lib1.lib
+STATICLIBRARY		tool_lib2.lib
+#include "../inc/macrotests.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools/tool_lib1.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			tool_lib1.lib
+TARGETTYPE		LIB
+SOURCEPATH		../tools2
+SOURCE			tool_lib1_a.cpp
+SOURCE			tool_lib1_b.cpp
+
+#include "../inc/macrotests.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools/tool_lib2.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			tool_lib2.lib
+TARGETTYPE		LIB
+SOURCEPATH		../tools2
+SOURCE			tool_lib2_a.cpp
+SOURCE			tool_lib2_b.cpp
+
+#include "../inc/macrotests.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+TOOLS2
+
+PRJ_MMPFILES
+tool_lib1.mmp
+tool_lib2.mmp
+tool_exe.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/build_spec.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build http://symbian.com/xml/build/1_0.xsd">
+
+    <!-- test tool build specification -->
+
+    <spec name="tool">
+	    <var>
+	        <set name="T2" value="$(SBS_HOME)/test/tools2"/>
+	        <set name="USERINCLUDE" value="$(T2)/inc1 $(T2)/inc2"/>
+	        <set name="SYSTEMINCLUDE" value="$(T2)/sys1 $(T2)/sys2"/>
+		</var>
+
+		<spec name="tool_executable">
+            <interfaceRef ref="Tools.EXE"/>
+	        <var>
+	            <set name="TARGET" value="tool_exe"/>
+	            <set name="TARGETTYPE" value="EXE"/>
+	            <append name="SOURCE" value="$(T2)/tool_exe_a.cpp"/>
+	            <append name="SOURCE" value="$(T2)/tool_exe_b.cpp"/>
+	            <append name="STATICLIBRARY" value="tool_lib1"/>
+	            <append name="STATICLIBRARY" value="tool_lib2"/>
+			</var>
+		</spec>
+
+		<spec name="tool_library_1">
+            <interfaceRef ref="Tools.LIB"/>
+	        <var>
+	            <set name="TARGET" value="libtool_lib1"/>
+	            <set name="TARGETTYPE" value="LIB"/>
+	            <append name="SOURCE" value="$(T2)/tool_lib1_a.cpp"/>
+	            <append name="SOURCE" value="$(T2)/tool_lib1_b.cpp"/>
+			</var>
+		</spec>
+
+		<spec name="tool_library_2">
+            <interfaceRef ref="Tools.LIB"/>
+	        <var>
+	            <set name="TARGET" value="libtool_lib2"/>
+	            <set name="TARGETTYPE" value="LIB"/>
+	            <append name="SOURCE" value="$(T2)/tool_lib2_a.cpp"/>
+	            <append name="SOURCE" value="$(T2)/tool_lib2_b.cpp"/>
+			</var>
+		</spec>
+    </spec>
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/BLD.INF	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Cross compilation of win32 tools on Linux 
+* 
+*/
+
+PRJ_PLATFORMS
+TOOLS2
+
+PRJ_MMPFILES
+PDRTRAN.MMP
+platmacros.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/PDRTRAN.MMP	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2005-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* pdrtran.exe for windows and pdrtran for linux
+*/
+
+TARGET			pdrtran
+TARGETTYPE		exe
+
+SOURCEPATH		./src
+SOURCE			LEXICAL.CPP PDRREADR.CPP PDRRECRD.CPP PDRTRAN.CPP
+SOURCE			READER.CPP RECORD.CPP STRNG.CPP
+
+SYSTEMINCLUDE		/epoc32/include 
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/TEST.PD	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,594 @@
+! PCL5.PD
+! Printer driver file for HP laser printers
+
+Resources Pcl5Resources
+    Reset               "<27>E"
+    SetPageSize            "<27>&l%dA"
+!<27>&l
+! 0o - Portrait
+! 0e - top margin to zero
+! 0C - VMI to zero
+!<27>9 - clear horizontal margins
+!<27>(0N - ISO 8859-1 Latin 1 character set
+    PreAmble            "<27>&l0o0e0C<27>9<27>(0N"
+    PostAmble           "<27>E"
+    BoldOn              "<27>(s3B"
+    BoldOff             "<27>(s0B"
+    ItalicOn            "<27>(s1S"
+    ItalicOff           "<27>(s0S"
+    UnderlineOn         "<27>&d0D"
+    UnderlineOff        "<27>&d@"
+    NewPage             "<12>"
+    Portrait            "<27>&l0o0E<27>9"
+    Landscape           "<27>&l1o0E<27>9"
+    SetXPos             "<27>*p%dX"
+    SetYPos             "<27>*p%dY"
+    BitmapStart         "<27>*t300R<27>*r%df1A"  ! resolution 300 dots per inch
+    ScanLine            "<27>*b%dm%dW"			  ! compression method coded in first %d
+    BitmapEnd           "<27>*rC"
+EndResources
+
+Translates Telephone
+    5:35  ! must ensure width of 5 = width of 35
+    156:"<27>R<3><35><27>R<0>"
+EndTranslates
+
+FontInfo Courier10 
+    MaxNormalCharWidth 25
+    Ascent 33	  ! improvised values throughout
+    CodeSection 0:255
+        0:25
+    EndCodeSection
+EndFontInfo
+
+FontInfo Courier12 
+    MaxNormalCharWidth 30
+    Ascent 40
+    CodeSection 0:255
+        0:30
+    EndCodeSection
+EndFontInfo
+
+FontInfo LinePrinter9 
+    MaxNormalCharWidth 18
+    Ascent 28
+    CodeSection 0:255
+        0:18
+    EndCodeSection
+EndFontInfo
+
+FontInfo CgTimesStd
+    MaxNormalCharWidth 188
+    Ascent 167
+    CodeSection 0:255
+      0:207   1:207    2:207    3:207    4:207
+      5:104  ! telephone character must be the same as # (35)
+      6:207
+      7:69   ! non-breaking hyphen must be the same as hyphen (45)
+      8:207
+      9:61   ! tab must be the same as space (32)
+     10:207   11:150   12:150   13:104
+     14:69   ! potential hyphen must be the same as hyphen (45)
+     15:61   ! non-breaking space must be the same as space (32)
+     16:150
+     17:150   18:150   19:108   20:104   21:104   22:207   23:150   24:150
+     25:150   26:150   27:150   28:184   29:150   30:150   31:150   32:61
+     33:69    34:96    35:104   36:104   37:184   38:161   39:69    40:69
+     41:69    42:104   43:184   44:69    45:69    46:69    47:69    48:104
+     49:104   50:104   51:104   52:104   53:104   54:104   55:104   56:104
+     57:104   58:69    59:69    60:207   61:184   62:207   63:92    64:184
+!    A        B        C        D        E        F        G        H
+     65:150   66:131   67:142   68:154   69:131   70:123   71:150   72:154
+!    I        J        K        L        M        N        O        P
+     73:69    74:81    75:146   76:131   77:188   78:154   79:150   80:119
+!    Q        R        S        T        U        V        W        X
+     81:150   82:138   83:111   84:131   85:154   86:150   87:196   88:150
+!    Y        Z
+     89:150   90:134   91:69    92:69    93:69    94:104   95:104   96:104
+!    a        b        c        d        e        f        g        h
+     97:92    98:104   99:92   100:104   101:92   102:69  103:104  104:104
+!    i        j        k        l        m        n        o        p
+    105:58   106:58   107:104  108:58   109:161  110:104  111:104  112:104
+!    q        r        s        t        u        v        w        x
+    113:104  114:77   115:81   116:58   117:104  118:104  119:150  120:104
+!    y        z
+    121:104  122:92   123:92   124:104  125:92   126:104  127:207  128:142
+    129:104  130:92   131:92   132:92   133:92   134:92   135:92   136:92
+    137:92   138:92   139:58   140:58   141:58   142:150  143:150  144:131
+    145:138  146:184  147:104  148:104  149:104  150:104  151:104  152:104
+    153:150  154:154  155:104  156:104  157:154  158:182  159:104  160:92
+    161:58   162:104  163:104  164:104  165:154  166:104  167:104  168:92
+    169:104  170:184  171:184  172:184  173:69   174:85   175:85   176:207
+    177:207  178:207  179:207  180:207  181:150  182:150  183:150  184:105
+    185:207  186:207  187:207  188:207  189:105  190:104  191:207  192:207
+    193:207  194:207  195:207  196:207  197:207  198:92   199:150  200:207
+    201:207  202:207  203:207  204:207  205:207  206:207  207:104  208:104
+    209:154  210:129  211:129  212:129  213:58   214:70   215:70   216:70
+    217:207  218:207  219:207  220:207  221:104  222:70   223:207  224:152
+    225:104  226:152  227:152  228:104  229:152  230:115  231:106  232:122
+    233:154  234:154  235:154  236:104  237:150  238:105  239:104  240:72
+    241:184  242:104  243:183  244:104  245:104  246:184  247:104  248:104
+    249:104  250:1    251:73   252:73   253:73   254:104  255:104
+    EndCodeSection
+EndFontInfo
+
+FontInfo CgTimesItalic
+    MaxNormalCharWidth 170
+    Ascent 167
+    CodeSection 0:255
+      0:207
+      1:207    2:207    3:207    4:207
+      5:104  ! telephone character must be the same as # (35)
+      6:207
+      7:69   ! non-breaking hyphen must be the same as hyphen (45)
+      8:207
+      9:61   ! tab must be the same as space (32)
+     10:207   11:150   12:150   13:104
+     14:69   ! potential hyphen must be the same as hyphen (45)
+     15:61   ! non-breaking space must be the same as space (32)
+     16:150
+     17:150   18:150   19:103   20:104   21:104   22:207   23:150   24:150
+     25:150   26:150   27:150   28:184   29:150   30:150   31:150   32:61
+     33:69    34:100   35:104   36:104   37:184   38:161   39:69    40:69
+     41:69    42:104   43:184   44:69    45:69    46:69    47:69    48:104
+     49:104   50:104   51:104   52:104   53:104   54:104   55:104   56:104
+     57:104   58:69    59:69    60:207   61:184   62:207   63:104   64:184
+     65:127   66:127   67:138   68:150   69:127   70:119   71:150   72:150
+     73:69    74:92    75:138   76:115   77:170   78:138   79:150   80:127
+     81:150   82:127   83:104   84:115   85:150   86:127   87:170   88:127
+     89:115   90:115   91:69    92:69    93:69    94:104   95:104   96:104
+     97:104   98:104   99:92   100:104  101:92   102:58   103:104  104:104
+    105:58   106:58   107:92   108:58   109:150  110:104  111:104  112:104
+    113:104  114:81   115:81   116:58   117:104  118:92   119:138  120:92
+    121:92   122:81   123:92   124:104  125:92   126:104  127:207  128:138
+    129:104  130:92   131:104  132:104  133:104  134:104  135:92   136:92
+    137:92   138:92   139:58   140:58   141:58   142:127  143:127  144:127
+    145:138  146:184  147:104  148:104  149:104  150:104  151:104  152:92
+    153:150  154:150  155:104  156:104  157:151  158:183  159:104  160:104
+    161:58   162:104  163:104  164:104  165:138  166:104  167:104  168:104
+    169:104  170:184  171:184  172:184  173:69   174:96   175:96   176:207
+    177:207  178:207  179:207  180:207  181:127  182:127  183:127  184:105
+    185:207  186:207  187:207  188:207  189:105  190:105  191:207  192:207
+    193:207  194:207  195:207  196:207  197:207  198:104  199:127  200:207
+    201:207  202:207  203:207  204:207  205:207  206:207  207:104  208:104
+    209:148  210:127  211:127  212:127  213:58   214:70   215:70   216:70
+    217:207  218:207  219:207  220:207  221:104  222:70   223:207  224:152
+    225:104  226:152  227:152  228:104  229:152  230:115  231:106  232:126
+    233:150  234:150  235:150  236:92   237:115  238:105  239:104  240:72
+    241:184  242:104  243:182  244:104  245:104  246:184  247:104  248:104
+    249:104  250:2    251:73   252:73   253:73   254:104  255:104
+    EndCodeSection
+EndFontInfo
+
+FontInfo CgTimesBold
+    MaxNormalCharWidth 196
+    Ascent 167
+    CodeSection 0:255
+      0:207
+      1:207    2:207    3:207    4:207
+      5:104  ! telephone character must be the same as # (35)
+      6:207
+      7:69   ! non-breaking hyphen must be the same as hyphen (45)
+      8:207
+      9:61   ! tab must be the same as space (32)
+     10:207   11:150   12:150   13:104
+     14:69   ! potential hyphen must be the same as hyphen (45)
+     15:61   ! non-breaking space must be the same as space (32)
+     16:150
+     17:150   18:150   19:119   20:104   21:104   22:207   23:150   24:150
+     25:150   26:150   27:150   28:184   29:150   30:150   31:150   32:61
+     33:69    34:96    35:104   36:104   37:184   38:169   39:69    40:69
+     41:69    42:104   43:184   44:69    45:69    46:69    47:69    48:104
+     49:104   50:104   51:104   52:104   53:104   54:104   55:104   56:104
+     57:104   58:69    59:69    60:207   61:184   62:207   63:104   64:184
+     65:150   66:138   67:150   68:150   69:138   70:127   71:161   72:161
+     73:81    74:100   75:161   76:138   77:196   78:150   79:161   80:127
+     81:161   82:150   83:115   84:138   85:150   86:150   87:207   88:150
+     89:150   90:138   91:69    92:69    93:69    94:104   95:104   96:104
+     97:104   98:115   99:92   100:115  101:92   102:73   103:104  104:115
+    105:58   106:69   107:115  108:58   109:171  110:115  111:104  112:115
+    113:115  114:92   115:81   116:69   117:115  118:104  119:150  120:104
+    121:104  122:92   123:104  124:104  125:104  126:104  127:207  128:150
+    129:115  130:92   131:104  132:104  133:104  134:104  135:92   136:92
+    137:92   138:92   139:58   140:58   141:58   142:150  143:150  144:138
+    145:150  146:215  147:104  148:104  149:104  150:115  151:115  152:104
+    153:161  154:150  155:104  156:104  157:163  158:182  159:104  160:104
+    161:58   162:104  163:115  164:115  165:150  166:104  167:104  168:104
+    169:104  170:184  171:184  172:184  173:69   174:88   175:88   176:207
+    177:207  178:207  179:207  180:207  181:150  182:150  183:150  184:105
+    185:207  186:207  187:207  188:207  189:105  190:104  191:207  192:207
+    193:207  194:207  195:207  196:207  197:207  198:104  199:150  200:207
+    201:207  202:207  203:207  204:207  205:207  206:207  207:104  208:104
+    209:148  210:137  211:137  212:137  213:58   214:80   215:80   216:80
+    217:207  218:207  219:207  220:207  221:104  222:80   223:207  224:162
+    225:115  226:162  227:162  228:104  229:162  230:115  231:116  232:126
+    233:150  234:150  235:150  236:104  237:150  238:105  239:104  240:72
+    241:184  242:104  243:183  244:104  245:104  246:184  247:104  248:104
+    249:104  250:23   251:73   252:73   253:73   254:104  255:104
+    EndCodeSection
+EndFontInfo
+
+FontInfo CgTimesBoldItalic
+    MaxNormalCharWidth 184
+    Ascent 167
+    CodeSection 0:255
+      0:207
+      1:207    2:207    3:207    4:207
+      5:104  ! telephone character must be the same as # (35)
+      6:207
+      7:69   ! non-breaking hyphen must be the same as hyphen (45)
+      8:207
+      9:61   ! tab must be the same as space (32)
+     10:207   11:150   12:150   13:104
+     14:69   ! potential hyphen must be the same as hyphen (45)
+     15:61   ! non-breaking space must be the same as space (32)
+     16:150
+     17:150   18:150   19:131   20:104   21:104   22:207   23:150   24:150
+     25:150   26:150   27:150   28:184   29:150   30:150   31:150   32:61
+     33:81    34:108   35:104   36:104   37:184   38:161   39:69    40:69
+     41:69    42:104   43:184   44:69    45:69    46:69    47:69    48:104
+     49:104   50:104   51:104   52:104   53:104   54:104   55:104   56:104
+     57:104   58:69    59:69    60:207   61:184   62:207   63:104   64:184
+     65:138   66:138   67:138   68:150   69:138   70:127   71:150   72:161
+     73:81    74:104   75:138   76:127   77:184   78:150   79:150   80:127
+     81:146   82:138   83:115   84:127   85:150   86:138   87:184   88:138
+     89:127   90:127   91:69    92:69    93:69    94:104   95:104   96:104
+     97:104   98:104   99:92   100:104  101:92   102:73   103:104  104:115
+    105:58   106:58   107:104  108:58   109:161  110:115  111:104  112:104
+    113:104  114:81   115:81   116:58   117:115  118:92   119:138  120:104
+    121:92   122:81   123:104  124:104  125:104  126:104  127:207  128:138
+    129:115  130:92   131:104  132:104  133:104  134:104  135:92   136:92
+    137:92   138:92   139:58   140:58   141:58   142:138  143:138  144:138
+    145:146  146:192  147:104  148:104  149:104  150:115  151:115  152:92
+    153:150  154:150  155:104  156:104  157:151  158:184  159:104  160:104
+    161:58   162:104  163:115  164:115  165:150  166:104  167:104  168:104
+    169:104  170:184  171:184  172:184  173:81   174:92   175:92   176:207
+    177:207  178:207  179:207  180:207  181:138  182:138  183:138  184:105
+    185:207  186:207  187:207  188:207  189:105  190:105  191:207  192:207
+    193:207  194:207  195:207  196:207  197:207  198:104  199:138  200:207
+    201:207  202:207  203:207  204:207  205:207  206:207  207:104  208:104
+    209:148  210:137  211:137  212:137  213:58   214:80   215:80   216:80
+    217:207  218:207  219:207  220:207  221:104  222:80   223:207  224:152
+    225:104  226:152  227:152  228:104  229:152  230:115  231:106  232:126
+    233:150  234:150  235:150  236:90   237:127  238:105  239:104  240:72
+    241:184  242:104  243:183  244:104  245:104  246:184  247:104  248:104
+    249:104  250:18   251:69   252:69   253:69   254:104  255:104
+    EndCodeSection
+EndFontInfo
+
+FontInfo UniversStd
+    MaxNormalCharWidth 188
+    Ascent 167
+    CodeSection 0:255
+      0:207   1:207    2:207    3:207    4:207
+      5:131  ! telephone character must be the same as # (35)
+      6:207
+      7:69   ! non-breaking hyphen must be the same as hyphen (45)
+      8:207
+      9:69   ! tab must be the same as space (32)
+     10:207   11:150   12:150   13:104
+     14:69   ! potential hyphen must be the same as hyphen (45)
+     15:69   ! non-breaking space must be the same as space (32)
+     16:150
+     17:150   18:150   19:110   20:131   21:131   22:207   23:150   24:150
+     25:150   26:150   27:150   28:207   29:150   30:150   31:150   32:69
+     33:69    34:104   35:131   36:131   37:207   38:158   39:69    40:69
+     41:69    42:131   43:207   44:69    45:69    46:69    47:69    48:131
+     49:131   50:131   51:131   52:131   53:131   54:131   55:131   56:131
+     57:131   58:69    59:69    60:207   61:207   62:207   63:108   64:207
+     65:154   66:131   67:146   68:150   69:119   70:115   71:154   72:150
+     73:58    74:115   75:138   76:111   77:188   78:150   79:158   80:123
+     81:161   82:134   83:134   84:131   85:150   86:150   87:207   88:150
+     89:142   90:127   91:69    92:69    93:69    94:131   95:104   96:131
+     97:111   98:119   99:111  100:119  101:111  102:77   103:119  104:119
+    105:50   106:50   107:111  108:50   109:181  110:119  111:119  112:119
+    113:119  114:73   115:104  116:77   117:119  118:115  119:181  120:115
+    121:115  122:100  123:92   124:104  125:92   126:131  127:207  128:146
+    129:119  130:111  131:111  132:111  133:111  134:111  135:111  136:111
+    137:111  138:111  139:50   140:50   141:50   142:154  143:154  144:119
+    145:177  146:204  147:119  148:119  149:119  150:119  151:119  152:115
+    153:158  154:150  155:122  156:131  157:160  158:207  159:131  160:111
+    161:50   162:119  163:119  164:119  165:150  166:85   167:85   168:108
+    169:104  170:207  171:207  172:207  173:69   174:115  175:115  176:207
+    177:207  178:207  179:207  180:207  181:154  182:154  183:154  184:105
+    185:207  186:207  187:207  188:207  189:129  190:129  191:207  192:207
+    193:207  194:207  195:207  196:207  197:207  198:114  199:154  200:207
+    201:207  202:207  203:207  204:207  205:207  206:207  207:128  208:121
+    209:150  210:119  211:119  212:119  213:51   214:58   215:58   216:58
+    217:207  218:207  219:207  220:207  221:105  222:58   223:207  224:158
+    225:127  226:158  227:158  228:119  229:158  230:115  231:119  232:126
+    233:150  234:150  235:150  236:118  237:141  238:129  239:129  240:72
+    241:207  242:106  243:207  244:130  245:130  246:207  247:129  248:131
+    249:129  250:25   251:81   252:81   253:81   254:104  255:104
+    EndCodeSection
+EndFontInfo
+
+FontInfo UniversItalic
+    MaxNormalCharWidth 188
+    Ascent 167
+    CodeSection 0:255
+      0:207
+      1:207    2:207    3:207    4:207
+      5:131  ! telephone character must be the same as # (35)
+      6:207
+      7:69   ! non-breaking hyphen must be the same as hyphen (45)
+      8:207
+      9:69   ! tab must be the same as space (32)
+     10:207   11:150   12:150   13:104
+     14:69   ! potential hyphen must be the same as hyphen (45)
+     15:69   ! non-breaking space must be the same as space (32)
+     16:150
+     17:150   18:150   19:114   20:131   21:131   22:207   23:150   24:150
+     25:150   26:150   27:150   28:207   29:150   30:150   31:150   32:69
+     33:69    34:104   35:131   36:131   37:207   38:158   39:69    40:69
+     41:69    42:131   43:207   44:69    45:69    46:69    47:69    48:131
+     49:131   50:131   51:131   52:131   53:131   54:131   55:131   56:131
+     57:131   58:69    59:69    60:207   61:207   62:207   63:108   64:207
+     65:154   66:131   67:146   68:150   69:119   70:115   71:154   72:150
+     73:58    74:115   75:138   76:111   77:188   78:150   79:158   80:123
+     81:161   82:134   83:134   84:131   85:150   86:150   87:207   88:150
+     89:142   90:127   91:69    92:69    93:69    94:131   95:104   96:131
+     97:111   98:119   99:111  100:119  101:111  102:77   103:119  104:119
+    105:50   106:50   107:111  108:50   109:181  110:119  111:119  112:119
+    113:119  114:73   115:104  116:77   117:119  118:115  119:181  120:115
+    121:115  122:100  123:92   124:104  125:92   126:131  127:207  128:146
+    129:119  130:111  131:111  132:111  133:111  134:111  135:111  136:111
+    137:111  138:111  139:50   140:50   141:50   142:154  143:154  144:119
+    145:177  146:204  147:119  148:119  149:119  150:119  151:119  152:115
+    153:158  154:150  155:122  156:131  157:160  158:207  159:131  160:111
+    161:50   162:119  163:119  164:119  165:150  166:85   167:85   168:108
+    169:104  170:207  171:207  172:207  173:69   174:115  175:115  176:207
+    177:207  178:207  179:207  180:207  181:154  182:154  183:154  184:105
+    185:207  186:207  187:207  188:207  189:129  190:129  191:207  192:207
+    193:207  194:207  195:207  196:207  197:207  198:111  199:154  200:207
+    201:207  202:207  203:207  204:207  205:207  206:207  207:128  208:121
+    209:150  210:119  211:119  212:119  213:51   214:58   215:58   216:58
+    217:207  218:207  219:207  220:207  221:105  222:58   223:207  224:158
+    225:127  226:158  227:158  228:119  229:158  230:115  231:119  232:126
+    233:150  234:150  235:150  236:115  237:142  238:129  239:129  240:72
+    241:207  242:106  243:207  244:130  245:130  246:207  247:129  248:131
+    249:129  250:16   251:81   252:81   253:81   254:104  255:104
+    EndCodeSection
+EndFontInfo
+
+FontInfo UniversBold
+    MaxNormalCharWidth 188
+    Ascent 167
+    CodeSection 0:255
+      0:207
+      1:207    2:207    3:207    4:207
+      5:131  ! telephone character must be the same as # (35)
+      6:207
+      7:69   ! non-breaking hyphen must be the same as hyphen (45)
+      8:207
+      9:69   ! tab must be the same as space (32)
+     10:207   11:150   12:150   13:104
+     14:69   ! potential hyphen must be the same as hyphen (45)
+     15:69   ! non-breaking space must be the same as space (32)
+     16:150
+     17:150   18:150   19:115   20:131   21:131   22:207   23:150   24:150
+     25:150   26:150   27:150   28:207   29:150   30:150   31:150   32:69
+     33:69    34:108   35:131   36:131   37:207   38:158   39:69    40:69
+     41:69    42:131   43:207   44:69    45:69    46:69    47:69    48:131
+     49:131   50:131   51:131   52:131   53:131   54:131   55:131   56:131
+     57:131   58:69    59:69    60:207   61:207   62:207   63:108   64:207
+     65:154   66:131   67:146   68:150   69:119   70:115   71:154   72:150
+     73:58    74:115   75:138   76:111   77:188   78:150   79:158   80:123
+     81:161   82:134   83:134   84:131   85:150   86:150   87:207   88:150
+     89:142   90:127   91:69    92:69    93:69    94:131   95:104   96:131
+     97:111   98:119   99:111  100:119  101:111  102:77   103:119  104:119
+    105:50   106:50   107:111  108:50   109:181  110:119  111:119  112:119
+    113:119  114:73   115:104  116:77   117:119  118:115  119:181  120:115
+    121:115  122:100  123:104  124:104  125:104  126:131  127:207  128:146
+    129:119  130:111  131:111  132:111  133:111  134:111  135:111  136:111
+    137:111  138:111  139:50   140:50   141:50   142:154  143:154  144:119
+    145:177  146:204  147:119  148:119  149:119  150:119  151:119  152:115
+    153:158  154:150  155:122  156:131  157:160  158:207  159:131  160:111
+    161:50   162:119  163:119  164:119  165:150  166:85   167:85   168:108
+    169:104  170:207  171:207  172:207  173:69   174:115  175:115  176:207
+    177:207  178:207  179:207  180:207  181:154  182:154  183:154  184:105
+    185:207  186:207  187:207  188:207  189:129  190:129  191:207  192:207
+    193:207  194:207  195:207  196:207  197:207  198:111  199:154  200:207
+    201:207  202:207  203:207  204:207  205:207  206:207  207:128  208:121
+    209:150  210:119  211:119  212:119  213:51   214:58   215:58   216:58
+    217:207  218:207  219:207  220:207  221:105  222:58   223:207  224:158
+    225:127  226:158  227:158  228:119  229:158  230:123  231:119  232:126
+    233:150  234:150  235:150  236:115  237:142  238:129  239:129  240:72
+    241:207  242:106  243:207  244:130  245:130  246:207  247:129  248:131
+    249:129  250:33   251:81   252:81   253:81   254:104  255:104
+    EndCodeSection
+EndFontInfo
+
+FontInfo UniversBoldItalic
+    MaxNormalCharWidth 188
+    Ascent 167
+    CodeSection 0:255
+      0:207
+      1:207    2:207    3:207    4:207
+      5:131  ! telephone character must be the same as # (35)
+      6:207
+      7:69   ! non-breaking hyphen must be the same as hyphen (45)
+      8:207
+      9:69   ! tab must be the same as space (32)
+     10:207   11:150   12:150   13:104
+     14:69   ! potential hyphen must be the same as hyphen (45)
+     15:69   ! non-breaking space must be the same as space (32)
+     16:150
+     17:150   18:150   19:125   20:131   21:131   22:207   23:150   24:150
+     25:150   26:150   27:150   28:207   29:150   30:150   31:150   32:69
+     33:69    34:111   35:131   36:131   37:207   38:158   39:69    40:69
+     41:69    42:131   43:207   44:69    45:69    46:69    47:69    48:131
+     49:131   50:131   51:131   52:131   53:131   54:131   55:131   56:131
+     57:131   58:69    59:69    60:207   61:207   62:207   63:108   64:207
+     65:154   66:131   67:146   68:150   69:119   70:115   71:154   72:150
+     73:58    74:115   75:138   76:111   77:188   78:150   79:158   80:123
+     81:161   82:134   83:134   84:131   85:150   86:150   87:207   88:150
+     89:142   90:127   91:69    92:69    93:69    94:131   95:104   96:131
+     97:111   98:119   99:111  100:119  101:111  102:77   103:119  104:119
+    105:50   106:50   107:111  108:50   109:181  110:119  111:119  112:119
+    113:119  114:73   115:104  116:77   117:119  118:115  119:181  120:115
+    121:115  122:100  123:104  124:104  125:104  126:131  127:207  128:146
+    129:119  130:111  131:111  132:111  133:111  134:111  135:111  136:111
+    137:111  138:111  139:50   140:50   141:50   142:154  143:154  144:119
+    145:177  146:204  147:119  148:119  149:119  150:119  151:119  152:115
+    153:158  154:150  155:122  156:131  157:160  158:207  159:131  160:111
+    161:50   162:119  163:119  164:119  165:150  166:85   167:85   168:108
+    169:104  170:207  171:207  172:207  173:69   174:115  175:115  176:207
+    177:207  178:207  179:207  180:207  181:154  182:154  183:154  184:105
+    185:207  186:207  187:207  188:207  189:129  190:129  191:207  192:207
+    193:207  194:207  195:207  196:207  197:207  198:111  199:154  200:207
+    201:207  202:207  203:207  204:207  205:207  206:207  207:128  208:121
+    209:150  210:119  211:119  212:119  213:51   214:58   215:58   216:58
+    217:207  218:207  219:207  220:207  221:105  222:58   223:207  224:158
+    225:127  226:158  227:158  228:119  229:158  230:123  231:119  232:126
+    233:150  234:150  235:150  236:115  237:142  238:129  239:129  240:72
+    241:207  242:106  243:207  244:130  245:130  246:207  247:129  248:131
+    249:129  250:37   251:81   252:81   253:81   254:104  255:104
+    EndCodeSection
+EndFontInfo
+
+TypefaceFonts Courier
+    Name "Courier" Serif
+    Translates Telephone
+    FontHeight
+	Height     200
+	Normal     Courier10
+	Bold       Courier10
+	Italic     Courier10
+	BoldItalic Courier10
+	Command    "" !<27>(s0p12h10v3T"
+    EndFontHeight
+    FontHeight
+	Height     240
+	Normal     Courier12
+	Bold       Courier12
+	Italic     Courier12
+	BoldItalic Courier12
+	Command    "" !<27>(s0p10h12v3T"
+    EndFontHeight
+EndTypefaceFonts
+
+TypefaceFonts LinePrinter
+    Name "Lineprinter"
+    Translates Telephone
+    FontHeight
+	Height     170
+	Normal     LinePrinter9
+	Bold       LinePrinter9
+	Italic     LinePrinter9
+	BoldItalic LinePrinter9
+	Command    "<27>(s0p16.67h8.5v0T"
+    EndFontHeight
+EndTypefaceFonts
+
+TypefaceFonts CgTimes
+    Name "CG Times" Proportional Serif
+    Translates Telephone
+    ScalableFontHeight 
+	HeightMin          80    ! min font height 80 twips = 4 point
+	HeightMax          1200  ! max font height 1200 twips ( = 60 point)
+	HeightDelta        20    ! delta font height 20 twips = 1 point
+	Normal             CgTimesStd
+	Bold               CgTimesBold
+	Italic             CgTimesItalic
+	BoldItalic         CgTimesBoldItalic
+	Command            "<27>(s1p%dv4101T"
+    EndScalableFontHeight
+EndTypefaceFonts
+
+TypefaceFonts Univers
+    Name "Univers" Proportional
+    Translates Telephone
+    ScalableFontHeight 
+	HeightMin          80    ! min font height 80 twips = 4 point
+	HeightMax          1200  ! max font height 1200 twips ( = 60 point)
+	HeightDelta        20    ! delta font height 20 twips = 1 point
+	Normal             UniversStd
+	Bold               UniversBold
+	Italic             UniversItalic
+	BoldItalic         UniversBoldItalic
+	Command            "<27>(s1p%dv4148T"
+    EndScalableFontHeight
+EndTypefaceFonts
+
+!ExtraInfo ExtraInfo
+!    "abcdefghijklmnopqrstuvwxyz"
+!    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+!EndExtraInfo
+
+Model HPLJ3
+    Name "HP LaserJet III" RequiresPrinterPort
+	Uid 1000
+    Flags 0
+    Resources Pcl5Resources
+    KPixelWidth    4800   ! Twips = 300 dots per inch
+    KPixelHeight   4800 
+	PortraitOffset  75 0  ! Pixels
+ 	LandscapeOffset 60 0  
+    MinMarginLeft   50    ! Pixels
+    MinMarginRight  50
+    MinMarginTop    50
+    MinMarginBottom 50
+    DisplayMode   Gray2
+    TypefaceFontss
+        Courier
+        LinePrinter	NotInLandscape
+        CgTimes	    NotInPortrait
+        Univers
+    EndTypefaceFontss
+EndModel
+
+Model HPDJ340
+    Name "HP DeskJet 340" RequiresPrinterPort
+	Uid 1100
+    Flags 3	   !  1 = MoveDownOnly, 2 = LanscapeBandOrientationVertical
+    Resources Pcl5Resources
+    KPixelWidth    4800   ! Twips = 300 dots per inch
+    KPixelHeight   4800 
+	PortraitOffset  75 0  ! Pixels
+ 	LandscapeOffset 60 0  
+    MinMarginLeft    50    ! Pixels
+    MinMarginRight   50
+    MinMarginTop     75
+    MinMarginBottom 200
+    DisplayMode   Gray2
+    TypefaceFontss
+	    Courier
+	    LinePrinter
+		CgTimes
+		Univers
+    EndTypefaceFontss
+EndModel
+
+Model HPDJ660C
+    Name "HP DeskJet 660C" RequiresPrinterPort
+	Uid 1200
+    Flags 3	   !  1 = MoveDownOnly, 2 = LanscapeBandOrientationVertical
+    Resources Pcl5Resources
+    KPixelWidth    4800   ! Twips = 300 dots per inch
+    KPixelHeight   4800 
+	PortraitOffset   75 0  ! Pixels
+ 	LandscapeOffset  60 0  
+    MinMarginLeft    50    ! Pixels
+    MinMarginRight   50
+    MinMarginTop     75
+    MinMarginBottom 175
+    DisplayMode   Gray2
+    TypefaceFontss
+	    Courier
+	    LinePrinter
+		CgTimes
+		Univers
+    EndTypefaceFontss
+!	SpareRecord ExtraInfo
+EndModel
+
+PdrStoreFile
+    PDLName             "test"
+    PDLUid 1
+    Models
+        HPLJ3
+		HPDJ340
+        HPDJ660C
+    EndModels
+EndPdrStoreFile
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/platmacros.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET			test_platmacros
+TARGETTYPE		EXE
+SOURCEPATH		./src
+SOURCE			platmacros.cpp
+
+// TOOLS2_WINDOWS activated for cross compilation on Linux
+#ifdef TOOLS2_LINUX
+#warning TOOLS2_LINUX
+#endif
+
+#ifdef TOOLS2_WINDOWS
+#warning TOOLS2_WINDOWS
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/LEXICAL.CPP	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,311 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Header LEXICAL.CPP
+*
+*/
+
+
+#include "LEXICAL.H"
+
+Lexical::Lexical()
+ :	iType(ELexNL), iNumber(0)
+	{
+	iText[0] = '\0';
+	}
+
+Lexical::Lexical(const Lexical& aLex)
+	{
+	iType = aLex.iType;
+	iNumber = aLex.iNumber;
+	strcpy(iText, aLex.iText);
+	}
+
+Lexical& Lexical::operator = (const Lexical& aLex)
+	{
+	iType = aLex.iType;
+	iNumber = aLex.iNumber;
+	strcpy(iText, aLex.iText);
+	return *this;
+	}
+
+int Lexical::CovertStringToHex()
+	{
+	char* curPtr = iText; // Position of current lexical in line
+	int hexDigit;
+	int number = 0;
+
+	while (HexDigit(*curPtr, hexDigit))
+		{
+		number = (16 * number) + hexDigit;
+		curPtr++;
+		}
+	return number;
+	}
+
+int Lexical::HexDigit(char aDigit, int& decimalEquivalent)
+	{
+	boolean validDigit = efalse;
+	if ((aDigit >= '0') && (aDigit <= '9'))
+		{
+		decimalEquivalent = (aDigit - '0');
+		validDigit = etrue;
+		}
+	else if ((aDigit >= 'a') && (aDigit <= 'f'))
+		{
+		decimalEquivalent = 10 + (aDigit - 'a');
+		validDigit = etrue;
+		}
+	else if ((aDigit >= 'A') && (aDigit <= 'F'))
+		{
+		decimalEquivalent = 10 + (aDigit - 'A');
+		validDigit = etrue;
+		}
+	return validDigit;
+	}
+
+ostream& operator << (ostream& out, const Lexical& aLex)
+	{
+	switch (aLex.iType)
+		{
+		case ELexEOF:
+			{
+			out << "EOF";
+			break;
+			}
+		case ELexNL:
+			{
+			out << "NL";
+			break;
+			}
+		case ELexNumber:
+			{
+			out << aLex.iNumber;
+			break;
+			}
+		case ELexOperator:
+			{
+			out << aLex.iText[0];
+			break;
+			}
+		default:
+			{
+			out << aLex.iText;
+			}
+		}	 
+	return out;
+	}
+
+LexAnal::LexAnal(const char* aFilename)
+ :	iFilename(aFilename)
+	{
+	iFin.open(aFilename);
+	iLex.iType = ELexNL;
+	iLineNo = 0;
+	}
+
+Lexical LexAnal::Read() // read next lexical into iLex
+	{
+	if (iLex.iType == ELexNL)
+		{
+		do
+			{
+			GetNextLex();
+			}
+		while (iLex.iType == ELexNL);
+		}
+	else
+		GetNextLex();
+	return iLex;
+	}
+
+Lexical LexAnal::ReadNextLine() // read first lex on next line
+	{
+	GetNextLine();
+	return iLex;
+	}
+
+void LexAnal::Report()
+	{
+	cerr << iFilename.Text() << '(' << iLineNo << "): \n";
+	cerr << iLine << '\n';
+	for	(char* p = iLine; p < iLexPtr; p++)
+		cerr << ' ';
+	cerr << "^\n";
+	}
+
+LexAnal::~LexAnal()
+	{
+	iFin.close();
+	}
+
+void LexAnal::GetNextLex()
+	{
+	char ch;
+	if (iLex.iType == ELexNL)
+		{
+		iFin.getline(iLine, MaxLineLen);
+		// Remove any CR character that appear at the end when
+		// reading a dos file on unix.
+		PurgeLastCR(iLine);
+		iCurPtr = iLine;
+		iLineNo++;
+		}
+
+	while ((*iCurPtr == ' ') || (*iCurPtr == '\t'))
+		iCurPtr++;
+	ch = *iCurPtr;
+	iLexPtr = iCurPtr;
+
+	if ((ch == '\0') && (iFin.eof()))	// finds lexical type
+		iLex = ReadEOF();
+	else if ((ch == '\0') || (ch == '!'))	// ! is a comment
+		iLex = ReadNewLine();
+	else if ((ch == '-') || ((ch >= '0') && (ch <= '9')))
+		iLex = ReadNumber();
+	else if (((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')) || (ch == '_'))
+		iLex = ReadIdent();
+	else if	(ch == '"')
+		iLex = ReadString();
+	else
+		iLex = ReadOperator();	
+	}
+
+void LexAnal::GetNextLine()
+	{
+	iFin.getline(iLine, MaxLineLen);
+	// Remove any CR character that appear at the end when
+	// reading a dos file on unix.
+	PurgeLastCR(iLine);
+	iCurPtr = iLine;
+	iLineNo++;
+
+	char ch;
+	while ((*iCurPtr == ' ') || (*iCurPtr == '\t'))
+		iCurPtr++;
+	ch = *iCurPtr;
+	iLexPtr = iCurPtr;
+
+	if ((ch == '\0') && (iFin.eof()))	// finds lexical type
+		iLex = ReadEOF();
+	else if ((ch == '\0') || (ch == '!'))
+		iLex = ReadNewLine();
+	else if ((ch == '-') || ((ch >= '0') && (ch <= '9')))
+		iLex=ReadNumber();
+	else if (((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')) || (ch == '_'))
+		iLex = ReadIdent();
+	else if	(ch == '"')
+		iLex = ReadString();
+	else
+		iLex = ReadOperator();	
+	}
+
+void LexAnal::PurgeLastCR(char *aLine)
+	{
+	int len = strlen(aLine) - 1;
+	if (len >= 0 && aLine[len] == '\r')
+		{
+		aLine[len] = '\0';
+		}
+	}
+
+Lexical LexAnal::ReadEOF()
+	{
+	Lexical lex;
+	lex.iType = ELexEOF;
+	return lex;
+	}
+
+Lexical LexAnal::ReadNewLine()
+	{
+	Lexical lex;
+	lex.iType = ELexNL;
+	while (*iCurPtr != '\0')
+		iCurPtr++;
+	return lex;
+	}
+
+Lexical LexAnal::ReadNumber()
+	{
+	Lexical lex;
+	char ch;
+	boolean negative = efalse;
+	lex.iType = ELexNumber;
+	if (*iCurPtr == '-')
+		{
+		negative = etrue;
+		iCurPtr++;
+		}
+	ch = *iCurPtr;
+	while ((ch >= '0') && (ch <= '9'))
+		{
+		if (negative)
+			lex.iNumber = (10 * lex.iNumber) - (*iCurPtr - '0');
+		else
+			lex.iNumber=(10 * lex.iNumber) + (*iCurPtr - '0');
+		iCurPtr++;
+		ch = *iCurPtr;
+		}
+	return lex;
+	}
+
+
+Lexical LexAnal::ReadIdent()
+	{
+	Lexical lex;
+	char ch;
+	lex.iType = ELexIdent;
+	do
+		{
+		iCurPtr++;
+		ch = *iCurPtr;
+		}
+	while (((ch >= 'a') && (ch <= 'z')) || ((ch >= 'A') && (ch <= 'Z')) || (ch == '_') || ((ch >= '0') && (ch <= '9')));
+	strncpy(lex.iText, iLexPtr, iCurPtr - iLexPtr);
+	lex.iText[iCurPtr - iLexPtr] = '\0';
+	return lex;
+	}
+
+Lexical LexAnal::ReadString()
+	{
+	Lexical lex;
+	char ch;
+	lex.iType = ELexString;
+	iCurPtr++;
+	ch = *iCurPtr;
+	while ((ch != '"') && (*iCurPtr != '\0'))
+		{
+		iCurPtr++;
+		ch = *iCurPtr;
+		}
+	strncpy(lex.iText, iLexPtr + 1, iCurPtr - (iLexPtr + 1));
+	lex.iText[iCurPtr - (iLexPtr + 1)] = '\0';
+	if (ch == '"')
+		iCurPtr++;	// finds position after last double quotes 
+	else
+		{
+		cerr << "Warning: missing quotes\n";
+		Report();
+		}
+	return lex;
+	}
+
+Lexical LexAnal::ReadOperator()
+	{
+	Lexical lex;
+	lex.iType = ELexOperator;
+	lex.iText[0] = *iCurPtr;
+	iCurPtr++;
+	return lex;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/PDRREADR.CPP	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1009 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Header PDRREADR.CPP
+*
+*/
+
+
+#include "PDRREADR.H"
+
+const int NumResources=34;
+
+String IdentResource[NumResources] =
+	{
+	"Reset",
+	"SetPageSize",
+	"PreAmble",
+	"PostAmble",
+	"SetTextColor",	//  !!
+	"BoldOn",
+	"BoldOff",
+	"ItalicOn",
+	"ItalicOff",
+	"UnderlineOn",
+	"UnderlineOff",
+	"StrikethroughOn",
+	"StrikethroughOff",
+	"NewPage",
+	"Portrait",
+	"Landscape",
+	"SetXPos",
+	"SetYPos",
+	"IncrementXPos",
+	"IncrementYPos",
+	"CarriageReturn",
+	"SetGraphicsColor",	//  !!
+	"BitmapStart",
+	"BitmapEnd",
+	"ScanLine",
+	"EndScanLine",	//  !!
+	"Resource1",
+	"Resource2",
+	"Resource3",
+	"Resource4",
+	"Resource5",
+	"Resource6",
+	"Resource7",
+	"Resource8"
+	};
+
+const int NumDisplayModeValues = 11;
+
+String IdentDisplayModeValue[NumDisplayModeValues] =
+	{
+	"None",
+	"Gray2",
+	"Gray4",
+	"Gray16",
+	"Gray256",
+	"Color16",
+	"Color256",
+	"Color64K",
+	"Color16M",
+	"Rgb",
+	"Color4K"
+	};
+
+EXPORT_C PdrReader::PdrReader()
+ :	Reader(),
+	iPdrModelStore(),
+	iPdrStoreFile(NULL),
+	iResources(NULL),
+	iTranslates(NULL),
+	iCodeSection(NULL),
+	iFontInfo(NULL),
+	iIndex(Normal),
+	iFontHeight(NULL),
+	iTypefaceFonts(NULL),
+	iModel(NULL)
+	{
+	}
+
+EXPORT_C boolean PdrReader::Read(const String& aFilename)
+	{
+	boolean state = Open(aFilename);
+
+	while (!_EOF() && state)
+		{
+		if (IdentComp(IdentResources))
+			state = ReadResources();
+		else if (IdentComp(IdentTranslates))
+			state = ReadTranslates();
+		else if (IdentComp(IdentFontInfo))
+			state = ReadFontInfo();
+		else if (IdentComp(IdentTypefaceFonts))
+			state = ReadTypefaceFonts();
+//		else if (IdentComp(IdentExtraInfo))
+//			state = ReadExtraInfo();
+		else if (IdentComp(IdentModel))
+			state = ReadModel();
+		else if (IdentComp(IdentPdrStoreFile))
+			state = ReadPdrStoreFile();
+		else
+			{
+			Error("Resource identifier expected");
+			state = efalse;
+			}
+		if (state)
+			state = NewLine();
+		}
+	return state;
+	}
+
+EXPORT_C PdrReader::~PdrReader()
+	{
+	}
+
+boolean PdrReader::ReadResources()
+	{
+	boolean state = etrue;
+	iResources = PdrResources::New();
+	state = IdentCopy(iResources->iLabel);
+	if (state)
+		state = NewLine();
+	while (!IdentComp(IdentEndResources) && !_EOF() && state)
+		{
+   	    int i; // DEF102183: Graphics tools fail to build using MS VC8.
+		for (i = 0; (i < NumResources) && !IdentComp(IdentResource[i]); i++)
+			{	//	Tries to match resources identifier
+			}
+		if (i < NumResources)
+			{
+			PdrResource *resource = PdrResource::New();
+			state = Command(resource->iString);
+			resource->iId = i;
+			if (state)
+				{
+				iResources->AddResource(resource);
+				state = NewLine();
+				}
+			else
+				resource->Delete();
+			}
+		else
+			{
+			state = efalse;
+			Error("Resources identifier expected");
+			}
+		}
+	if (state)
+		{
+		iPdrModelStore.AddResources(iResources);
+		cout << "Resources read\n";
+		}
+	else 
+		iResources->Delete();
+	return state;
+	}
+
+boolean PdrReader::ReadTranslates()
+	{
+	int num;
+	boolean state = etrue;
+	iTranslates = PdrTranslates::New();
+	state = IdentCopy(iTranslates->iLabel);
+	if (state)
+		state = NewLine();
+	while (!IdentComp(IdentEndTranslates) && !_EOF() && state)
+		{
+		if (iLex->iType == ELexNumber)
+			{
+			PdrTranslation *translation = PdrTranslation::New();
+			Number(num);
+			translation->iFrom = uint16(num);
+			char ch;
+			state = Operator(ch);
+			if (state)
+				{
+				state = (ch == ':');
+				if (state)
+					{
+					if (iLex->iType == ELexNumber)
+						{
+						state = Number(num);
+						translation->iTo += char(num);
+						}
+					else 
+						{
+						state = Command(translation->iTo);
+						}
+					if (state)
+						state = NewLine();
+					}
+				else
+					{
+					Error("Operator ':' expected");
+					}
+				}
+			if (state)
+				iTranslates->AddTranslation(translation);
+			else
+				translation->Delete();
+			}
+		}
+	if (state)
+		{
+		iPdrModelStore.AddTranslates(iTranslates);
+		cout << "Translates read\n";
+		}
+	else 
+		iTranslates->Delete();
+	return state;
+	}
+
+boolean PdrReader::ReadCodeSection(int aCode)
+	{
+	boolean state = etrue;
+	int code;
+	int num;
+	iCodeSection = WidthsCodeSection::New();
+	char ch = 0;
+	state = Number(num);
+	if ((num<aCode) && state)
+		{
+		Error("CodeSection out of sequence");
+		state = efalse;
+		}
+	if (state)
+		{
+		iCodeSection->iStart = uint16(num);
+		state = Operator(ch);
+		if (state)
+			state = (ch == ':');
+		if (state)
+			{
+			state = Number(num);
+			iCodeSection->iEnd = uint16(num);
+			state = NewLine();
+			}
+		else
+			{
+			state = efalse;
+			Error("Operator ':' expected");
+			}
+		}
+	else
+		state = efalse;
+	while (!IdentComp(IdentEndCodeSection) && !_EOF() && state)
+		{
+		if (iLex->iType != ELexNL)
+			{
+			state = Number(code);
+			if ((code != iCodeSection->iStart + iCodeSection->NumWidths()) && state)
+				{
+				state = efalse;
+				Error("Width out of sequence");
+				}
+			if (state)
+				state = Operator(ch);
+			if (state)
+				state = (ch == ':');
+			if (state)
+				{
+				Width *width = Width::New();
+				if (Number(num))
+					{
+					width->iWidthInPixels = (uint16) num;
+					iCodeSection->AddWidth(width);
+					}
+				else
+					{
+					state = efalse;
+					width->Delete();
+					}
+				}
+			}
+		else
+			state = NewLine();
+		}
+	if (state)
+		{
+		num = ((iCodeSection->iEnd + 1) - iCodeSection->iStart);
+		if ((num != iCodeSection->NumWidths()) && (iCodeSection->NumWidths() != 1))
+			{
+			Error("Wrong number of widths in codesection");
+			state = efalse;
+			}
+		}
+	if (state)
+		{
+		iFontInfo->AddCodeSection(iCodeSection);
+//		cout << "Codesection read\n";
+		}
+	else 
+		iCodeSection->Delete();
+	return state;
+	}
+
+boolean PdrReader::ReadFontInfo()
+	{
+	boolean state = etrue;
+	iFontInfo = FontInfo::New();
+	int num;
+	state = IdentCopy(iFontInfo->iLabel);
+	if (state)
+		state = NewLine();
+	while (!IdentComp(IdentEndFontInfo) && !_EOF() && state)
+		{
+		if (iLex->iType == ELexIdent)
+			{
+			if (IdentComp(IdentCodeSection))
+				{
+				int code = 0,size = iFontInfo->NumCodeSections();
+				if (size)
+					code = iFontInfo->CodeSectionList(size - 1)->iEnd + 1;
+				state = ReadCodeSection(code);
+				}
+			else if (IdentComp(IdentAscent))
+				{
+				if (Number(num))
+					iFontInfo->iAscentInPixels = uint16(num);
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentMaxNormalCharWidth))
+				{
+				state = Number(num);
+				if (state)
+					iFontInfo->iMaxNormalCharWidthInPixels = uint16(num);
+				}
+			else
+				{
+				Error("Unrecognised fontinfo identifier");
+				state = efalse;
+				}
+			}
+		else
+			{
+			Error("Fontinfo identifier expected");
+			state = efalse;
+			}
+		if (state)
+			state = NewLine();
+		}	  
+	if (state)
+		{
+		iFontInfo->iMaxCharWidthInPixels = 0;
+		for (int i = 0; i < iFontInfo->NumCodeSections(); i++)
+			{
+			WidthsCodeSection* codesection = iFontInfo->CodeSectionList(i);
+			for (int j = 0; j < codesection->NumWidths(); j++)
+				{
+				int width = codesection->WidthList(j)->iWidthInPixels;
+				if (width > iFontInfo->iMaxCharWidthInPixels)
+					iFontInfo->iMaxCharWidthInPixels = (uint16) width;
+				}
+			}
+		}
+	if (state)
+		{
+		iPdrModelStore.AddFontInfo(iFontInfo);
+		cout << "Fontinfo read\n";
+		}
+	else
+		iFontInfo->Delete();
+	return state;
+	}
+
+boolean PdrReader::ReadStyle()
+	{
+	boolean state = etrue;
+	Record *fontinfo;
+	PdrStyle *style;
+	String label;
+	if (!iTypefaceFonts->iIsScalable)
+		style = &iFontHeight->iStyle[iIndex];
+	else
+		style = &iTypefaceFonts->iScalableFontHeight.iStyle[iIndex];
+	style->iIsAvailable = etrue;
+	state = IdentCopy(label);
+	if (state)
+		{
+		fontinfo = iPdrModelStore.FindFontInfo(label);
+		if (fontinfo)
+			style->iFontInfo = fontinfo;
+		else
+			{
+			Error("Fontinfo not found");
+			state = efalse;
+			}
+		}
+	return state;
+	}
+
+boolean PdrReader::ReadFontHeight()
+	{
+	boolean state = etrue;
+	int num;
+	if (iTypefaceFonts->iIsScalable == etrue)
+		{
+		state = efalse;
+		Error("Scalablefontheight already defined");
+		}
+	else
+		iFontHeight = PdrFontHeight::New();
+	if (state)
+		state = NewLine();
+
+	while (!IdentComp(IdentEndFontHeight) && !_EOF() && state)
+		{
+		if (iLex->iType == ELexIdent)
+			{
+			if (IdentComp(IdentHeight))
+				{
+				if (Number(num))
+					iFontHeight->iHeightInTwips = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentWidthScale))
+				{
+				if (Number(num))
+					iFontHeight->iWidthScale = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentNormal))
+				{
+				iIndex = Normal;
+				state = ReadStyle();
+				}
+			else if (IdentComp(IdentBold))
+				{
+				iIndex = Bold;
+				state = ReadStyle();
+				}
+			else if (IdentComp(IdentItalic))
+				{
+				iIndex = Italic;
+				state = ReadStyle();
+				}
+			else if (IdentComp(IdentBoldItalic))
+				{
+				iIndex = BoldItalic;
+				state = ReadStyle();
+				}
+			else if (IdentComp(IdentCommand))
+				{
+				state = Command(iFontHeight->iCommandString);
+				}
+			else
+				{
+				Error("Unrecognised fontheight identifier");
+				state = efalse;
+				}
+			}
+		else
+			{
+			Error("Fontheight identifier expected");
+			state = efalse;
+			}
+		if (state)
+			state = NewLine();
+		}
+	if (state)
+		{
+		iTypefaceFonts->AddFontHeight(iFontHeight);
+		cout << "Fontheight read\n";
+		}
+	else
+		iFontHeight->Delete();
+	return state;
+	}
+
+boolean PdrReader::ReadScalableFontHeight()
+	{
+	boolean state = etrue;
+	int num;
+	if (iTypefaceFonts->NumFontHeights())
+		{
+		state = efalse;
+		Error("Non-scalable fontheights already defined");
+		}
+	else if (iTypefaceFonts->iIsScalable == etrue)
+		{
+		state = efalse;
+		Error("Scalablefontheight already defined");
+		}
+	iTypefaceFonts->iIsScalable=etrue;
+	if (state)
+		state = NewLine();
+
+	while (!IdentComp(IdentEndScalableFontHeight) && !_EOF() && state)
+		{
+		if (iLex->iType == ELexIdent)
+			{
+			if (IdentComp(IdentHeightMin))
+				{
+				if (Number(num))
+					iTypefaceFonts->iScalableFontHeight.iHeightMinInTwips = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentHeightMax))
+				{
+				if (Number(num))
+					iTypefaceFonts->iScalableFontHeight.iHeightMaxInTwips = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentHeightDelta))
+				{
+				if (Number(num))
+					iTypefaceFonts->iScalableFontHeight.iHeightDeltaInTwips = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentNormal))
+				{
+				iIndex = Normal;
+				state = ReadStyle();
+				}
+			else if (IdentComp(IdentBold))
+				{
+				iIndex = Bold;
+				state = ReadStyle();
+				}
+			else if (IdentComp(IdentItalic))
+				{
+				iIndex = Italic;
+				state = ReadStyle();
+				}
+			else if (IdentComp(IdentBoldItalic))
+				{
+				iIndex = BoldItalic;
+				state = ReadStyle();
+				}
+			else if (IdentComp(IdentCommand))
+				{
+				state = Command(iTypefaceFonts->iScalableFontHeight.iCommandString);
+				}
+			else
+				{
+				Error("Unrecognised scalablefontheight identifier");
+				state = efalse;
+				}
+			}
+		else
+			{
+			Error("Scalablefontheight identifier expected");
+			state = efalse;
+			}
+		if (state)
+			state = NewLine();
+		}	  
+	if (state)
+		{
+		cout << "Scalablefontheight read\n";
+		}
+	else
+		{
+		if (!iTypefaceFonts->iIsScalable)
+			iFontHeight->Delete();
+		}
+	return state;
+	}
+
+boolean PdrReader::ReadTypefaceFonts()
+	{
+	boolean state = etrue;
+	Record* translates;
+	String label;
+	iTypefaceFonts = TypefaceFonts::New();
+	state = IdentCopy(iTypefaceFonts->iLabel);
+	if (state)
+		state = NewLine();
+	while (!IdentComp(IdentEndTypefaceFonts) && !_EOF() && state)
+		{
+		if (iLex->iType == ELexIdent)
+			{
+			if (IdentComp(IdentTypefaceName))
+				{
+				if (StringCopy(iTypefaceFonts->iTypeface.iName))
+					while (iLex->iType != ELexNL)
+					{	if (IdentComp(IdentProportional))
+							iTypefaceFonts->iTypeface.iFlags = boolean(iTypefaceFonts->iTypeface.iFlags | Proportional);
+						else if (IdentComp(IdentSerif))
+							iTypefaceFonts->iTypeface.iFlags = boolean(iTypefaceFonts->iTypeface.iFlags | Serif);
+						else if (IdentComp(IdentSymbol))
+							iTypefaceFonts->iTypeface.iFlags = boolean(iTypefaceFonts->iTypeface.iFlags | Symbol);
+						else
+							{ 
+							Error("Typefacefonts identifier or newline expected");
+							state = efalse;
+							}
+					}
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentTypefaceTranslates))
+				{
+				state = IdentCopy(label);
+				if (state)
+					{
+					translates = iPdrModelStore.FindTranslates(label);
+					if (translates)
+						iTypefaceFonts->iTranslates = translates;
+					else
+						{
+						Error("Translates not found");
+						state = efalse;
+						}
+					}
+				}
+			else if (IdentComp(IdentFontHeight))
+				{
+				state = ReadFontHeight();
+				}
+			else if (IdentComp(IdentScalableFontHeight))
+				{
+				state = ReadScalableFontHeight();
+				}
+			else
+				{
+				Error("Unrecognised typefacefonts identifier");
+				state = efalse;
+				}
+			}
+		else
+			{
+			Error("Typefacefonts identifier expected");
+			state = efalse;
+			}
+		if (state)
+			state = NewLine();
+		}	  
+	if (state)
+		{
+		iPdrModelStore.AddTypefaceFonts(iTypefaceFonts);
+		cout << "Typefacefonts read\n";
+		}
+	else
+		iTypefaceFonts->Delete();
+	return state;
+	}
+
+boolean PdrReader::ReadModel()
+	{
+	boolean state = etrue;
+	int num;
+	iModel = PrinterModelHeader::New();
+	Record* resources;
+//	Record* extrainfo;
+	String label;
+	state = IdentCopy(iModel->iLabel);
+	if (state)
+		state = NewLine();
+	while (!IdentComp(IdentEndModel) && !_EOF() && state)
+		{
+		if (iLex->iType == ELexIdent)
+			{
+			if	(IdentComp(IdentModelName))
+				{
+				if (StringCopy(iModel->iEntry.iName))
+					while (iLex->iType != ELexNL)
+						{
+						if (IdentComp(IdentRequiresPrinterPort))
+							iModel->iEntry.iRequiresPrinterPort = etrue;
+						else
+							{
+							Error("Model identifier or newline expected");
+							state = efalse;
+							}
+						}
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentModelUid))
+				state = Number(iModel->iEntry.iUid);
+			else if (IdentComp(IdentModelFlags))
+				{
+				state = Number(num);
+				iModel->iInfo.iFlags = num;
+				}
+			else if (IdentComp(IdentModelResources))
+				{
+				state = IdentCopy(label);
+				if (state)
+					{
+					resources = iPdrModelStore.FindResources(label);
+					if (resources)
+						iModel->iInfo.iResources = resources;
+					else
+						{
+						Error("Resources not found");
+						state = efalse;
+						}
+					}
+				}
+/*			else if (IdentComp(IdentSpareRecord))
+				{
+				state = IdentCopy(label);
+				if (state)
+					{
+					extrainfo = iPdrModelStore.FindExtraInfo(label);
+					if (extrainfo)
+						iModel->iInfo.iSpareRecord = extrainfo;
+					else
+						{
+						Error("Spare record not found");
+						state = efalse;
+						}
+					}
+				}
+*/
+			else if (IdentComp(IdentKPixelWidth))
+				{
+				if (Number(num))
+					iModel->iInfo.iKPixelWidthInTwips = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentKPixelHeight))
+				{
+				if (Number(num))
+					iModel->iInfo.iKPixelHeightInTwips = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentPortraitOffset))
+				{
+				if (Number(num))
+					{
+					iModel->iInfo.iPortraitOffsetInPixels.iX = num;
+					if (Number(num))
+						iModel->iInfo.iPortraitOffsetInPixels.iY = num;
+					else
+						state = efalse;
+					}
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentLandscapeOffset))
+				{
+				if (Number(num))
+					{
+					iModel->iInfo.iLandscapeOffsetInPixels.iX = num;
+					if (Number(num))
+						iModel->iInfo.iLandscapeOffsetInPixels.iY = num;
+					else
+						state = efalse;
+					}
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentMinMarginLeft))
+				{
+				if (Number(num))
+					iModel->iInfo.iMinMarginsInPixels.iLeft = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentMinMarginRight))
+				{
+				if (Number(num))
+					iModel->iInfo.iMinMarginsInPixels.iRight = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentMinMarginTop))
+				{
+				if (Number(num))
+					iModel->iInfo.iMinMarginsInPixels.iTop = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentMinMarginBottom))
+				{
+				if (Number(num))
+					iModel->iInfo.iMinMarginsInPixels.iBottom = num;
+				else
+					state = efalse;
+				}
+			else if (IdentComp(IdentDisplayMode))
+				{
+        	    int i; // DEF102183: Graphics tools fail to build using MS VC8.
+				for (i = 0; (i < NumDisplayModeValues) && !IdentComp(IdentDisplayModeValue[i]); i++)
+					{	// Tries to match display mode identifier
+					}
+				if (i < NumDisplayModeValues)
+					{
+					iModel->iInfo.iDisplayMode = i;
+					}
+				else
+					{
+					state = efalse;
+					Error("Display mode identifier expected");
+					}
+				}
+			else if (IdentComp(IdentTypefaceFontss))
+				{
+				state = NewLine();
+				while (!IdentComp(IdentEndTypefaceFontss) && !_EOF() && state)
+					{
+					TypefaceFontsEntry* typefacefontsentry = NULL;
+					if (iLex->iType == ELexIdent)
+						{
+						state = IdentCopy(label);
+						Record* typefacefonts = iPdrModelStore.FindTypefaceFonts(label);
+						if (typefacefonts)
+							{
+							typefacefontsentry = TypefaceFontsEntry::New(typefacefonts);
+							state = etrue;
+							}
+						else
+							{
+							Error("Typefacefonts not found");
+							state = efalse;
+							}
+						}
+					if (state)
+						{
+						while ((iLex->iType != ELexNL) && !_EOF() && state)
+							{
+							if (IdentComp(IdentNotInPortrait))
+								{
+								typefacefontsentry->iNotInPortrait = etrue;
+								}
+							else if (IdentComp(IdentNotInLandscape))
+								{
+								typefacefontsentry->iNotInLandscape = etrue;
+								}
+							else
+								{
+								Error("Typefacefontsentry identifier or newline expected");
+								state = efalse;
+								}
+							}
+						if (state)
+							iModel->iInfo.AddTypefaceFontsEntry(typefacefontsentry);
+						else
+							typefacefontsentry->Delete();
+						}
+					if (state)
+						state = NewLine();
+					}
+				}
+			else
+				{
+				Error("unrecognised model identifier");
+				state = efalse;
+				}
+			}
+		else
+			{
+			Error("Model identifier expected");
+			state = efalse;
+			}
+		if (state)
+			state = NewLine();
+		}
+	if (state)
+		{
+		iPdrModelStore.AddModel(iModel);
+		cout << "Model read\n";
+		}
+	else
+		iModel->Delete();
+	return state;
+	}
+
+boolean PdrReader::ReadPdrStoreFile()
+	{
+	boolean state = etrue;
+	if (iPdrStoreFile)
+		{
+		state = efalse;
+		Error("Pdrstorefile already read");
+		}
+	else
+		{
+		iPdrStoreFile = PdrStoreFile::New();
+		String label;
+		Record* model;
+		state = NewLine();
+		while (!IdentComp(IdentEndPdrStoreFile) && !_EOF() && state)
+			{
+			if (IdentComp(IdentPDLName))
+				{
+				state = StringCopy(iPdrStoreFile->iPDLName);
+				}
+			else if (IdentComp(IdentPDLUid))
+				{
+				state = Number(iPdrStoreFile->iPDLUid);
+				}
+			else if (IdentComp(IdentModels))
+				{
+				state = NewLine();
+				while (!IdentComp(IdentEndModels) && !_EOF() && state)
+					{
+					state = IdentCopy(label);
+					if (state)
+						{
+						model = iPdrModelStore.FindModel(label);
+						if (model)
+							{
+							iPdrStoreFile->AddModel((PrinterModelHeader*)model);
+							}
+						else
+							{
+							Error("model not found");
+							state = efalse;
+							}
+						}
+					if (state)
+						state = NewLine();
+					}
+				}
+			else
+				{
+				Error("Pdrstorefile identifier expected");
+				state = efalse;
+				}
+			if (state)
+				state = NewLine();
+			}
+		if (state)
+			{
+			iPdrModelStore.AddPdrStoreFile(iPdrStoreFile);
+			cout << "Pdrstorefile read\n";
+			}	
+		else
+			iPdrStoreFile->Delete();
+		}
+	return state;
+	}
+
+EXPORT_C boolean PdrReader::Store(const String& aFilename)
+	{
+	boolean state = etrue;
+	if (!iPdrStoreFile)
+		{
+		state = efalse;
+		Error("No pdrstore file record");
+		}
+	else
+		state = iPdrModelStore.Store(aFilename);
+	return state;
+	}
+
+boolean PdrReader::Command(String& aCommand)
+	{
+	boolean state = etrue;
+	String string;
+	state = StringCopy(string);
+	int length = string.Length();
+	for (int i = 0; i < length; i++)
+		{
+		char ch = string[i];
+		if (ch == '<')	// Read control character
+			{
+			ch = 0;
+			for (i = i + 1; (i < length) && (string[i] != '>'); i++)
+				ch = char((ch * 10) + (string[i] - '0'));
+			}
+		aCommand += ch;
+		}
+	return state;
+	}
+/*
+boolean PdrReader::ReadExtraInfo()
+	{
+	boolean state = etrue;
+	String label;
+	PdrExtraInfo* extrainfo = new PdrExtraInfo();
+	state = IdentCopy(extrainfo->iLabel);
+	if (state)
+		state = NewLine();
+	while (!IdentComp(IdentEndExtraInfo) && !_EOF() && state)
+		{
+		String* string = new String;
+		state = Command(*string);
+		if (state)
+			extrainfo->iInfo.Add(string);
+		else
+			delete string;
+		state = NewLine();
+		}
+	if (state)
+		{
+		iPdrModelStore.AddExtraInfo(extrainfo);
+		cout << "Extra info read\n";
+		}
+	else
+		delete extrainfo;
+	return state;
+	}
+*/
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/PDRRECRD.CPP	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,785 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Header PDRRECRD.CPP
+*
+*/
+
+
+#include "PDRRECRD.H"
+
+EXPORT_C PdrResource* PdrResource::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+	{
+	return new PdrResource();
+	}
+
+EXPORT_C void PdrResource::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+void PdrResource::Externalize(ostream& out)
+	{
+	uint8 id = (uint8) iId;
+	out.write((char*) &id, sizeof(id));
+	iString.Externalize(out);
+	}
+
+EXPORT_C PdrResources* PdrResources::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+	{
+	return new PdrResources();
+	}
+
+EXPORT_C void PdrResources::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+void PdrResources::Externalize(ostream& out)
+	{
+	iStreamId = out.tellp();
+	iPdrResourceList.Externalize(out);
+	}
+
+EXPORT_C void PdrResources::AddResource(PdrResource* aResource)
+/** Adds a printer resource to the object.
+
+@param aResource Printer resource. */
+	{
+	iPdrResourceList.Add(aResource);
+	}
+
+PdrResources::~PdrResources()
+/** Default destructor. */
+	{
+	iPdrResourceList.Destroy();
+	}
+
+EXPORT_C PdrTranslation* PdrTranslation::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+	{
+	return new PdrTranslation();
+	}
+
+EXPORT_C void PdrTranslation::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+void PdrTranslation::Externalize(ostream& out)
+	{
+	out.write((char*) &iFrom, sizeof(iFrom));
+	iTo.Externalize(out);
+	}
+
+EXPORT_C PdrTranslates* PdrTranslates::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+	{
+	return new PdrTranslates();
+	}
+
+EXPORT_C void PdrTranslates::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+void PdrTranslates::Externalize(ostream& out)
+	{
+	iStreamId = out.tellp();
+	iPdrTranslationList.Externalize(out);
+	}
+
+EXPORT_C void PdrTranslates::AddTranslation(PdrTranslation* aTranslation)
+/** Adds a printer translation to the list.
+
+@param aTranslation Reference to a translation. */
+	{
+	iPdrTranslationList.Add(aTranslation);
+	}
+
+PdrTranslates::~PdrTranslates()
+/** This function is internal, and is not intended for use. */
+	{
+	iPdrTranslationList.Destroy();
+	}
+
+EXPORT_C Width* Width::New()
+/** Creates a new instance of this object.
+
+@return Reference to a new object. */
+	{
+	return new Width();
+	}
+
+EXPORT_C void Width::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+void Width::Externalize(ostream& out)
+	{
+	out.write ((char*) &iWidthInPixels, sizeof(iWidthInPixels));
+	}
+
+WidthsCodeSection::WidthsCodeSection()
+ :	iWidthList()
+/** This function is internal only, and is not intended for use. */
+	{
+	}
+
+EXPORT_C WidthsCodeSection* WidthsCodeSection::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+	{
+	return new WidthsCodeSection();
+	}
+	
+EXPORT_C void WidthsCodeSection::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+void WidthsCodeSection::Externalize(ostream& out)
+	{
+	out.write((char*) &iStart, sizeof(iStart));
+	out.write((char*) &iEnd, sizeof(iEnd));
+	iWidthList.Externalize(out);
+	}
+	
+EXPORT_C void WidthsCodeSection::AddWidth(Width* aWidth)
+/** Adds a new font width to the list.
+
+@param aWidth Font width. */
+	{
+	iWidthList.Add(aWidth);
+	}
+
+EXPORT_C Width* WidthsCodeSection::WidthList(int i)
+/** Returns a font width from the list at the position specified.
+
+@param i Position of font width in list.
+@return Reference to a font width. */
+	{
+	return iWidthList[i];
+	}
+
+EXPORT_C int WidthsCodeSection::NumWidths()
+/** Returns the number of font widths in the list.
+
+@return Number of widths. */
+	{
+	return iWidthList.Size();
+	}
+
+WidthsCodeSection::~WidthsCodeSection()
+/** Default destructor. */
+	{
+	iWidthList.Destroy();
+	}
+
+EXPORT_C FontInfo* FontInfo::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new instance of this class. */
+	{
+	return new FontInfo();
+	}
+
+EXPORT_C void FontInfo::Delete()
+/** Deletes the current FontInfo object. */
+	{
+	delete this;
+	}
+
+void FontInfo::Externalize(ostream& out)
+	{
+	iStreamId = out.tellp();
+	out.write((char*) &iAscentInPixels, sizeof(iAscentInPixels));
+	out.write((char*) &iMaxCharWidthInPixels, sizeof(iMaxCharWidthInPixels));
+	out.write((char*) &iMaxNormalCharWidthInPixels, sizeof(iMaxNormalCharWidthInPixels));
+	iCodeSectionList.Externalize(out);
+	}
+
+EXPORT_C void FontInfo::AddCodeSection(WidthsCodeSection* aCodeSection)
+/** Adds a section of information about the font to an internally-stored array.
+
+@param aCodeSection Font information. */
+	{
+	iCodeSectionList.Add(aCodeSection);
+	}	
+
+EXPORT_C WidthsCodeSection* FontInfo::CodeSectionList(int i)
+/** Returns a section of font information from a specified position in the internally-stored 
+array.
+
+@param i Postion of information in the array.
+@return Reference to section of font information. */
+	{
+	return iCodeSectionList[i];
+	}
+
+EXPORT_C int FontInfo::NumCodeSections()
+/** Returns the number of sections of font information in the internally-stored 
+array.
+
+@return Current number of font information sections. */
+	{
+	return iCodeSectionList.Size();
+	}
+
+FontInfo::~FontInfo()
+/** This function is internal, and not intended for use. */
+	{
+	iCodeSectionList.Destroy();
+	}
+
+EXPORT_C PdrStyle* PdrStyle::New()
+/** Creates a new instance of this class
+
+@return Reference to a new object. */
+	{
+	return new PdrStyle();
+	}
+
+EXPORT_C void PdrStyle::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+void PdrStyle::Externalize(ostream& out)
+	{
+	out.write((char*) &iIsAvailable, sizeof(iIsAvailable));
+	streamoff streamid = 0;
+	if (iIsAvailable)
+		streamid = iFontInfo->iStreamId;
+	::ExternalizeStreamOff(out, streamid);
+	}
+
+PdrStyle::PdrStyle()
+ :	iIsAvailable(efalse)
+/** Default constructor. */
+	{
+	}
+
+EXPORT_C PdrFontHeight* PdrFontHeight::New()
+/** Returns a new instance of this class.
+
+@return Reference to new object. */
+	{
+	return new PdrFontHeight();
+	}
+
+EXPORT_C void PdrFontHeight::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+void PdrFontHeight::Externalize(ostream& out)
+	{
+	iCommandString.Externalize(out);
+	out.write((char*) &iHeightInTwips, sizeof(iHeightInTwips));
+	out.write((char*) &iWidthScale, sizeof(iWidthScale));
+	for (int style = Normal;style <= BoldItalic; style++)
+		iStyle[style].Externalize(out);
+	}
+
+PdrFontHeight::PdrFontHeight():
+	iWidthScale(1)
+/** Default constructor. */
+	{
+	}
+
+PdrScalableFontHeight::PdrScalableFontHeight()
+/** Default constructor. */
+	{
+	}
+
+void PdrScalableFontHeight::Externalize(ostream& out)
+	{
+	iCommandString.Externalize(out);
+	out.write((char*) &iHeightMinInTwips, sizeof(iHeightMinInTwips));
+	out.write((char*) &iHeightMaxInTwips, sizeof(iHeightMaxInTwips));
+	out.write((char*) &iHeightDeltaInTwips, sizeof(iHeightDeltaInTwips));
+	for (int style = Normal; style <= BoldItalic; style++)
+		iStyle[style].Externalize(out);
+	}
+
+EXPORT_C TypefaceFonts* TypefaceFonts::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+	{
+	return new TypefaceFonts();
+	}
+
+EXPORT_C void TypefaceFonts::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+void TypefaceFonts::Externalize(ostream& out)
+	{
+	iStreamId = out.tellp();
+	iTypeface.Externalize(out);
+	out.write((char*) &iIsScalable, sizeof(iIsScalable));
+	if (iIsScalable)
+		iScalableFontHeight.Externalize(out);
+	else
+		iFontHeightList.Externalize(out);
+	::ExternalizeStreamOff(out, iTranslates->iStreamId);
+	}
+
+EXPORT_C void TypefaceFonts::AddFontHeight(PdrFontHeight* aFontHeight)
+	{
+	iFontHeightList.Add(aFontHeight);
+	}
+
+EXPORT_C int TypefaceFonts::NumFontHeights()
+/** Returns the number of font height descriptions currently held in the list.
+
+@return Number of descriptions. */
+	{
+	return iFontHeightList.Size();
+	}
+
+PdrFontHeight* TypefaceFonts::FontHeightList(int i)
+/** Returns the font height description from the position specified in the list.
+
+@param i Position of description.
+@return Font height description. */
+	{
+	return iFontHeightList[i];
+	}
+
+TypefaceFonts::TypefaceFonts():
+	iIsScalable(efalse)
+/** This function is internal only, and is not intended for use. */
+	{
+	}
+
+TypefaceFonts::~TypefaceFonts()
+/** This function is internal only, and is not intended for use. */
+	{
+	iFontHeightList.Destroy();
+	}
+
+EXPORT_C TypefaceFontsEntry* TypefaceFontsEntry::New(Record* aTypefaceFonts)
+	{
+	return new TypefaceFontsEntry(aTypefaceFonts);
+	}
+
+EXPORT_C void TypefaceFontsEntry::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+	
+void TypefaceFontsEntry::Externalize(ostream& out)
+	{
+	::ExternalizeStreamOff(out, iTypefaceFonts->iStreamId);
+	out.write((char*) &iNotInPortrait, sizeof(iNotInPortrait));
+	out.write((char*) &iNotInLandscape, sizeof(iNotInLandscape));
+	}
+
+TypefaceFontsEntry::TypefaceFontsEntry(Record* aTypefaceFonts)
+ :	iTypefaceFonts(aTypefaceFonts), iNotInPortrait(efalse), iNotInLandscape(efalse)
+	{
+	}
+
+TypefaceFontsEntry::~TypefaceFontsEntry()
+/** Default destructor. */
+	{
+	}
+
+void Margins::Externalize(ostream& out)
+	{
+	out.write((char*) &iLeft, sizeof(iLeft));
+	out.write((char*) &iRight, sizeof(iRight));
+	out.write((char*) &iTop, sizeof(iTop));
+	out.write((char*) &iBottom, sizeof(iBottom));
+	}
+
+/*
+PdrExtraInfo::~PdrExtraInfo()
+	{
+	iInfo.Destroy();
+	}
+
+void PdrExtraInfo::Externalize(ostream& out)
+	{
+	iInfo.Externalize(out);
+	}
+*/
+
+void PdrModelInfo::Externalize(ostream& out)
+	{
+	iStreamId=out.tellp();
+	out.write((char*) &KPdrtranVersion, sizeof(KPdrtranVersion));
+	out.write((char*) &iFlags, sizeof(iFlags));
+	out.write((char*) &iKPixelWidthInTwips, sizeof(iKPixelWidthInTwips));
+	out.write((char*) &iKPixelHeightInTwips, sizeof(iKPixelHeightInTwips));
+	iPortraitOffsetInPixels.Externalize(out);
+	iLandscapeOffsetInPixels.Externalize(out);
+	iMinMarginsInPixels.Externalize(out);
+	out.write((char*) &iDisplayMode, sizeof(iDisplayMode));
+	iTypefaceFontsEntryList.Externalize(out);
+	::ExternalizeStreamOff(out, iResources->iStreamId);
+	streamoff streamid = 0;
+	if (iSpareRecord)
+		streamid = iSpareRecord->iStreamId;
+	::ExternalizeStreamOff(out, streamid);
+	}
+ 
+EXPORT_C void PdrModelInfo::AddTypefaceFontsEntry(TypefaceFontsEntry* aTypefaceFontsEntry)
+/** Adds an entry containing information about typeface fonts to an internally-stored 
+array.
+
+@param aTypefaceFontsEntry Typeface font information. */
+	{
+	iTypefaceFontsEntryList.Add(aTypefaceFontsEntry);
+	}
+
+int PdrModelInfo::NumTypefaceFontsEntries()
+/** Returns the number of entries containing information about typeface fonts in 
+the internally-stored array.
+
+@return Number of entries. */
+	{
+	return iTypefaceFontsEntryList.Size();
+	}
+
+TypefaceFontsEntry* PdrModelInfo::TypefaceFontsEntryList(int i)
+/** Returns the typeface font entry stored the internal array from the position 
+specified.
+
+@param i Position in array.
+@return Typeface font entry. */
+	{
+	return iTypefaceFontsEntryList[i];
+	}
+
+PdrModelInfo::PdrModelInfo()
+ :	iStreamId(0),
+	iFlags(0),
+	iKPixelWidthInTwips(0),
+	iKPixelHeightInTwips(0),
+	iPortraitOffsetInPixels(),
+	iLandscapeOffsetInPixels(),
+	iMinMarginsInPixels(),
+	iDisplayMode(0),
+	iTypefaceFontsEntryList(),
+	iResources(NULL),
+	iSpareRecord(NULL)	// !! Not used yet
+/** Default constructor. */
+	{
+	}
+
+PdrModelInfo::~PdrModelInfo()
+/** Default destructor. */
+	{
+	iTypefaceFontsEntryList.Destroy();
+	}
+
+PrinterModelEntry::PrinterModelEntry()
+ :	iName(), iRequiresPrinterPort(efalse), iUid(KNullUid)
+/** Default constructor. */
+	{
+	}
+
+void PrinterModelEntry::Externalize(ostream& out)
+	{
+	iName.Externalize(out);
+	out.write((char*) &iRequiresPrinterPort, sizeof(iRequiresPrinterPort));
+	out.write((char*) &iUid, sizeof(iUid));
+	}
+
+EXPORT_C PrinterModelHeader* PrinterModelHeader::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+	{
+	return new PrinterModelHeader();
+	}
+
+EXPORT_C void PrinterModelHeader::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+void PrinterModelHeader::Externalize(ostream& out)
+	{
+	iEntry.Externalize(out);
+	::ExternalizeStreamOff(out, iInfo.iStreamId);
+	}
+
+void PrinterModelHeader::ExternalizeData(ostream& out)
+	{
+	iInfo.Externalize(out);
+	}
+
+boolean PrinterModelHeader::IsPdrModel()
+/** Determines whether printer information is available for this printer model.
+
+@return ETrue: printer description is available. */
+	{
+	return iInfo.NumTypefaceFontsEntries() || iInfo.iResources;
+	}
+
+EXPORT_C PdrStoreFile* PdrStoreFile::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+	{
+	return new PdrStoreFile();
+	}
+
+EXPORT_C void PdrStoreFile::Delete()
+/** Deletes the current object. */
+	{
+	delete this;
+	}
+
+EXPORT_C void PdrStoreFile::AddModel(PrinterModelHeader* aModel)
+/** Adds a printer model.
+
+@param aModel Printer model. */
+	{
+	iModelList.Add(aModel);
+	if (aModel->IsPdrModel())
+		{
+		for (int i = 0; i < aModel->iInfo.NumTypefaceFontsEntries(); i++)
+			AddTypefaceFonts((TypefaceFonts*) aModel->iInfo.TypefaceFontsEntryList(i)->iTypefaceFonts);
+		iResourcesList.Add(aModel->iInfo.iResources);
+//		if (aModel->iInfo.iSpareRecord)
+//			iExtraInfoList.Add(aModel->iInfo.iSpareRecord);
+		}
+	}
+
+void PdrStoreFile::Externalize(ostream& out)
+	{
+	ExternalizeHeader(out);
+	ExternalizeComponents(out);
+	}
+
+void PdrStoreFile::ExternalizeHeader(ostream& out)
+	{
+	out.write((char*) &KStoreWriteOnceLayoutUid, sizeof(KStoreWriteOnceLayoutUid));
+	out.write((char*) &KPdrStoreFileUid, sizeof(KPdrStoreFileUid));
+	out.write((char*) &KNullUid, sizeof(KNullUid));
+	out.write((char*) &KPdrStoreFileChecksum, sizeof(KPdrStoreFileChecksum));
+	::ExternalizeStreamOff(out, iStreamId);
+	iStreamId = out.tellp();
+	iPDLName.Externalize(out);
+	out.write((char*) &iPDLUid, sizeof(iPDLUid));
+	iModelList.Externalize(out);
+	}
+
+void PdrStoreFile::AddTypefaceFonts(TypefaceFonts* aTypefaceFonts)
+	{
+	iTypefaceFontsList.Add(aTypefaceFonts);
+	iTranslatesList.Add(aTypefaceFonts->iTranslates);
+	if (aTypefaceFonts->iIsScalable)
+		{
+		for (int style = Normal; style <= BoldItalic; style++)
+			{
+			if (aTypefaceFonts->iScalableFontHeight.iStyle[style].iIsAvailable)
+				iFontInfoList.Add(aTypefaceFonts->iScalableFontHeight.iStyle[style].iFontInfo);
+			}
+		}
+	else
+		{
+		for (int j = 0; j < aTypefaceFonts->NumFontHeights(); j++)
+			{
+			PdrFontHeight* fontheight = aTypefaceFonts->FontHeightList(j);
+			for (int style = Normal; style <= BoldItalic; style++)
+				{
+				if (fontheight->iStyle[style].iIsAvailable)
+					iFontInfoList.Add(fontheight->iStyle[style].iFontInfo);
+				}
+			}
+		}
+	}
+
+void PdrStoreFile::ExternalizeComponents(ostream& out)
+	{
+	for (int i = 0; i < iModelList.Size(); i++)
+		{
+		PrinterModelHeader* model = (PrinterModelHeader*) iModelList[i];
+		if (model->IsPdrModel())
+			model->ExternalizeData(out);
+		}
+	iTypefaceFontsList.Externalize(out);
+	iFontInfoList.Externalize(out);
+	iResourcesList.Externalize(out);
+	iTranslatesList.Externalize(out);
+//	iExtraInfoList.Externalize(out);
+	}
+
+PdrStoreFile::PdrStoreFile()
+ :	Record(),
+	iPDLName(),
+	iPDLUid(KNullUid),
+	iModelList(),
+	iTypefaceFontsList(),
+	iFontInfoList(),
+	iResourcesList(),
+	iTranslatesList()
+/** This function is internal only, and is not intended for use. */
+	{
+	}
+
+EXPORT_C boolean PdrModelStore::Store(const String& aFilename)
+/** Externalizes printer information from the store to the specfied external file.
+
+@param aFilename Filename.
+@return ETrue: store successful. */
+	{
+	boolean state = efalse;
+	ofstream fout;
+	String string = aFilename;
+	fout.open(string.Text(), ios::binary);
+	if (!fout.fail())
+		{
+		iPdrStoreFile->Externalize(fout);
+		fout.close();
+		fout.open(string.Text(), ios::binary | ios::trunc);
+		iPdrStoreFile->Externalize(fout);
+		fout.close();
+		state = etrue;
+		}
+	return state;
+	}
+
+EXPORT_C void PdrModelStore::AddPdrStoreFile(PdrStoreFile* aPdrStoreFile)
+	{
+	iPdrStoreFile = aPdrStoreFile;
+	}
+
+EXPORT_C void PdrModelStore::AddModel(PrinterModelHeader *aModel)
+/** Adds a printer model to the store.
+
+@param aModel Printer model. */
+	{
+	iModelList.Add(aModel);
+	}
+
+EXPORT_C Record *PdrModelStore::FindModel(String& aLabel)
+	{
+	return iModelList.LabelToRecord(aLabel);
+	}
+
+EXPORT_C void PdrModelStore::AddTypefaceFonts(TypefaceFonts *aTypefaceFonts)
+/** Adds typeface information to the store.
+
+@param aTypefaceFonts Typeface fonts. */
+	{
+	iTypefaceFontsList.Add(aTypefaceFonts);
+	}
+
+EXPORT_C Record *PdrModelStore::FindTypefaceFonts(String& aLabel)
+	{
+	return iTypefaceFontsList.LabelToRecord(aLabel);
+	}
+
+EXPORT_C void PdrModelStore::AddFontInfo(FontInfo *aFontInfo)
+/** Adds font information to the store.
+
+@param aFontInfo Font information. */
+	{
+	iFontInfoList.Add(aFontInfo);
+	}
+
+EXPORT_C Record *PdrModelStore::FindFontInfo(String& aLabel)
+	{
+	return iFontInfoList.LabelToRecord(aLabel);
+	}
+
+EXPORT_C void PdrModelStore::AddResources(PdrResources *aResources)
+	{
+	iResourcesList.Add(aResources);
+	}
+
+EXPORT_C Record *PdrModelStore::FindResources(String& aLabel)
+	{
+	return iResourcesList.LabelToRecord(aLabel);
+	}
+
+EXPORT_C void PdrModelStore::AddTranslates(PdrTranslates *aTranslates)
+/** Adds printer translations to the store.
+
+@param aTranslates Translation list. */
+	{
+	iTranslatesList.Add(aTranslates);
+	}
+
+EXPORT_C Record *PdrModelStore::FindTranslates(String& aLabel)
+	{
+	return iTranslatesList.LabelToRecord(aLabel); 
+	}
+
+	/*
+void PdrModelStore::AddExtraInfo(PdrExtraInfo *aInfo)
+	{
+	iExtraInfoList.Add(aInfo);
+	}
+
+Record* PdrModelStore::FindExtraInfo(String& aLabel)
+	{
+	return iExtraInfoList.LabelToRecord(aLabel);
+	}
+*/
+
+PdrModelStore::PdrModelStore()
+ :	iPdrStoreFile(NULL),
+	iModelList(),
+	iTypefaceFontsList(),
+	iFontInfoList(),
+	iResourcesList()//,
+//	iExtraInfoList()
+/** Default constructor. */
+	{
+	}
+
+PdrModelStore::~PdrModelStore()
+/** Default destructor. */
+	{
+	delete iPdrStoreFile;
+	iModelList.Destroy();
+	iTypefaceFontsList.Destroy();
+	iFontInfoList.Destroy();
+	iResourcesList.Destroy();
+	iTranslatesList.Destroy();
+//	iExtraInfoList.Destroy();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/PDRTRAN.CPP	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Header PDRTRAN.CPP
+*
+*/
+
+
+#include "PDRREADR.H"
+
+bool OutputUnicode = false;
+
+// Input and output filenames entered in command line
+int main(int argc, char *argv[])  
+	{
+	cout << "\nPDRTRAN V";
+	cout << KPdrtranVersion << "\n";
+	cout << "Copyright (c) 1998-2004 Symbian Software Ltd.\n";
+
+	if(argc!=3)
+		{
+		cout << "Usage:	PDRTRAN srcfile [srcfile2 ..] destfile\n";
+		cout << "where srcfile is the file containing printer models,\n";
+		cout << "typeface information and character width tables, and\n";
+		cout << "destfile is the pdr store file.\n";
+		return -1;
+		}
+	
+	PdrReader reader;
+
+	for (int i = 1; i < argc - 1; i++)
+		{
+		if (!reader.Read(argv[i]))
+			{
+			cerr << "Problem encountered in file " << argv[i] << "\n";
+			return -1;
+			}
+		}
+	if (!reader.Store(argv[argc - 1]))
+		{
+		cerr << "Problem writing pdr file " << argv[argc - 1] << "\n";
+		return -1;
+		}
+	cout << argv[argc-1] << " created\n";
+	return 0;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/READER.CPP	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,168 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Header READER.CPP
+*
+*/
+
+
+#include "READER.H"
+
+Reader::Reader()
+	{
+	iLexAnal = NULL;
+	}
+
+boolean Reader::Open(const String& aFilename)
+	{
+	boolean state;
+	String string = aFilename;
+	if (iLexAnal != NULL)
+		delete iLexAnal;
+	iLexAnal = new LexAnal(string.Text());
+
+	if (iLexAnal)
+		{
+		state = etrue;
+		iLex =& (iLexAnal->iLex);
+		iLexAnal->Read();	// reads first lexical
+		}
+	else
+		state = efalse;
+
+	return state;
+	}
+
+Reader::~Reader()
+	{
+	if (iLexAnal != NULL)
+		delete iLexAnal;
+	}
+
+boolean Reader::_EOF()
+	{
+	return ((iLex->iType) == ELexEOF);
+	}
+
+boolean Reader::NewLine()
+	{
+	boolean state;
+	if (iLex->iType == ELexNL)
+		{
+		iLexAnal->Read();
+		state = etrue;
+		}
+	else
+		{
+		Error(String("Newline expected"));
+		state = efalse;
+		}
+	return state;
+	}
+
+boolean Reader::Number(int& aNumber)
+	{
+	boolean state;
+	if (iLex->iType == ELexNumber)
+		{
+		aNumber = iLex->iNumber;
+		iLexAnal->Read();
+		state = etrue;
+		}
+	else
+		{
+		Error(String("Number expected"));
+		state = efalse;
+		}
+	return state;
+	}
+
+boolean Reader::IdentComp(const String& aIdent)
+	{
+	boolean state;
+	if (iLex->iType == ELexIdent)
+		{
+		if (aIdent == iLex->iText)
+			{
+			iLexAnal->Read();
+			state = etrue;
+			}
+		else
+			state = efalse;
+		}
+	else
+		{
+		state = efalse;
+		}
+	return state;
+	}
+
+boolean Reader::IdentCopy(String& aIdent)
+	{
+	boolean state;
+	if (iLex->iType == ELexIdent)
+		{
+		aIdent = iLex->iText;
+		iLexAnal->Read();
+		state = etrue;
+		}
+	else
+		{
+		Error(String("Identifier expected"));
+		state = efalse;
+		}
+	return state;
+	}
+
+boolean Reader::StringCopy(String& aString)
+	{
+	boolean state;
+	if (iLex->iType == ELexString)
+		{
+		aString = iLex->iText;
+		iLexAnal->Read();
+		state = etrue;
+		}
+	else
+		{
+		Error(String("String expected"));
+		state = efalse;
+		}
+	return state;
+	}
+
+boolean Reader::Operator(char& aCh)
+	{
+	boolean state;
+	if (iLex->iType == ELexOperator)
+		{
+		aCh = iLex->iText[0];
+		iLexAnal->Read();
+		state = etrue;
+		}
+	else
+		{
+		Error(String("Operator expected"));
+		state = efalse;
+		}
+	return state;
+	}
+
+EXPORT_C void Reader::Error(const String& aString)
+	{
+	cerr << "Error: " << aString;
+	iLexAnal->Report();
+	while ((iLex->iType != ELexNL) && (iLex->iType != ELexEOF))
+		iLexAnal->Read();
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/RECORD.CPP	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,94 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Header RECORD.CPP
+*
+*/
+
+
+#include "RECORD.H"
+
+EXPORT_C Record::Record()
+ :	iLabel(), iStreamId(0)
+	{
+	}
+
+void RecordList::ExternalizeIds(ostream& out)
+	{
+	int32 i;
+	int32 size = Size();
+	out.write((char*) &size, sizeof(size));
+	for (i = 0; i < size; i++)
+		{
+		::ExternalizeStreamOff(out, (*this)[i]->iStreamId);
+		}
+	}
+
+void RecordList::Externalize(ostream& out)
+	{
+	int32 size = Size();
+	out.write ((char*) &size, sizeof(size));
+	for (int i = 0; i < size; i++)
+		(*this)[i]->Externalize(out);
+	}
+
+void RecordList::ExternalizeComponents(ostream& out)
+	{
+	int32 size = Size();
+	for (int i = 0; i < size; i++)
+		(*this)[i]->ExternalizeComponents(out);
+	}
+
+EXPORT_C void RecordList::Add(Record* aRecord)
+	{
+	if (!LabelToRecord(aRecord->iLabel))
+		List<Record*>::Add(aRecord);
+	}
+
+EXPORT_C Record *RecordList::LabelToRecord(const String& aLabel)
+	{
+	int32 size = Size();
+	Record *record=NULL;
+	if (aLabel.Length())
+		for (int i = 0; i < size; i++)
+			if ((*this)[i]->iLabel == aLabel)
+				record = (*this)[i];
+	return record;
+	}
+
+EXPORT_C void RecordList::Destroy()
+	{
+	List<Record*>::Destroy();
+	}
+
+EXPORT_C RecordList::~RecordList()
+	{
+	}
+
+EXPORT_C Typeface::Typeface()
+ :	iName(), iFlags(0)
+	{
+	}
+
+void Typeface::Externalize(ostream& out)
+	{
+	iName.Externalize(out);
+	out.put((char) iFlags);
+	}
+
+void Point::Externalize(ostream& out)
+	{
+	out.write((char*) &iX, sizeof(iX));
+	out.write((char*) &iY, sizeof(iY));
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/STRNG.CPP	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,151 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Header STRNG.CPP
+*
+*/
+
+
+#include "STRNG.H"
+
+extern bool OutputUnicode;
+
+ostream& operator << (ostream& out, const String& aString)
+	{
+	for (int i = 0; i < aString.iLength; i++)
+		out << aString.iText[i];
+	out << '\n';
+	return out;
+	}
+
+EXPORT_C void String::Externalize(ostream& out)
+	{
+	if (OutputUnicode)
+		{
+		// Convert the string to Unicode, allowing #NNNN (each N is a hex digit)
+		// to represent an arbitrary Unicode character. Other values are just
+		// extended, so don't use codepage 1252 values in the range 128..159.
+		unsigned short* buffer = new unsigned short[iLength];
+		int i = 0;
+		int j = 0;
+		while (i < iLength)
+			{
+			if (iText[i] == '#')
+				{
+				i++;
+				char hex[5];
+				hex[0] = iText[i++];
+				hex[1] = iText[i++];
+				hex[2] = iText[i++];
+				hex[3] = iText[i++];
+				hex[4] = 0;
+				buffer[j++] = (unsigned short)strtoul(hex, NULL, 16);
+				}
+			else
+				{
+				buffer[j] = iText[i];
+				buffer[j] &= 0xFF;
+				i++;
+				j++;
+				}
+			}
+		int unicode_characters = j;
+		int32 length = (unicode_characters << 1);	// 16-bit data
+		if (length < 0x80)
+			{
+			unsigned char len = (unsigned char)(length << 1);
+			out.write((char*)&len, sizeof(len));
+			}
+		else if (length < 0x4000)
+			{
+			uint16 len = (uint16)((length << 2) + 1);
+			out.write((char*)&len, sizeof(len));
+			}
+		else
+			{
+			// assert len<0x20000000 ?
+			uint32 len = (uint32)((length << 3) + 3);
+			out.write((char*)&len, sizeof(len));
+			}
+		// Output Unicode characters using the Standard Compression Scheme for Unicode.
+		// To save the bother of doing this properly, use a degenerate form whereby each
+		// Unicode character is output as itself. 0x0F selects Unicode mode and 0xF0 quotes
+		// characters that would conflict with other tags.
+		out << (unsigned char)0x0F;
+
+		for (i = 0; i < unicode_characters; i++)
+			{
+			unsigned char hi = (unsigned char)(buffer[i] >> 8);
+			unsigned char lo = (unsigned char)buffer[i];
+			if ((hi >= 0xe0) && (hi <= 0xf2))
+				out << 0xf0;
+			out << hi;
+			out << lo;
+			}
+
+		delete [] buffer;
+		}
+	else
+		{
+		int32 length = (iLength << 1) + 1;	// 8-bit data
+		if (length < 0x80)
+			{
+			unsigned char len = (unsigned char)(length << 1);
+			out.write((char*)&len, sizeof(len));
+			}
+		else if (length < 0x4000)
+			{
+			uint16 len = (uint16)((length << 2) + 1);
+			out.write((char*)&len, sizeof(len));
+			}
+		else
+			{
+			// assert len<0x20000000 ?
+			uint32 len = (uint32)((length << 3) + 3);
+			out.write((char*)&len, sizeof(len));
+			}
+		out.write(iText, iLength);
+		}
+	}
+
+EXPORT_C int String::CreateText(const int aLength)
+	{
+	if (aLength != iLength)
+		{
+		char* text = new char[aLength + 1];
+		if (text)
+			{
+			iLength = aLength;
+			iText = text;
+			}
+		else
+			{
+			iLength = 0;
+			delete [] iText;
+			iText = NULL;
+			}
+		}
+	return iLength;
+	}
+
+EXPORT_C void String::DeleteText(char* aText) const
+	{
+	if (aText != iText)
+		delete [] aText;
+	}
+
+EXPORT_C String::~String()
+	{
+	delete [] iText;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/cross/src/platmacros.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+int main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/header_abc.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// a header in the same directory as the source files
+
+const int A = 1;
+const int B = 2;
+const int C = 3;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/inc1/header_def.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// a header in a different directory to the source files
+
+const int D = 4;
+const int E = 5;
+const int F = 6;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/inc2/header_ghi.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// a header in a different directory to the source files
+
+const int G = 7;
+const int H = 8;
+const int I = 9;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/sys1/header_jkl.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// a header in a different directory to the source files
+
+const int J = 10;
+const int K = 11;
+const int L = 12;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/sys2/header_mno.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// a header in a different directory to the source files
+
+const int M = 13;
+const int N = 14;
+const int O = 15;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_exe.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			tool_exe.exe
+TARGETTYPE		EXE
+SOURCE			tool_exe_a.cpp
+SOURCE			tool_exe_b.cpp
+USERINCLUDE		./inc1
+USERINCLUDE		./inc2
+SYSTEMINCLUDE	./sys1
+SYSTEMINCLUDE	./sys2
+STATICLIBRARY	tool_lib1
+STATICLIBRARY	tool_lib2
+#include "../inc/macrotests.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_exe_a.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,54 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+// the product HRH file
+#ifdef __PRODUCT_INCLUDE__
+#include __PRODUCT_INCLUDE__
+#endif
+
+// in the current directory
+#include "header_abc.h"
+
+// USERINCLUDES
+#include "header_def.h"
+#include "header_ghi.h"
+
+// SYSTEMINCLUDES
+#include <header_jkl.h>
+#include <header_mno.h>
+
+int tool_exe_b(int);
+int tool_lib1_a(int);
+int tool_lib1_b(int);
+int tool_lib2_a(int);
+int tool_lib2_b(int);
+
+
+#include "../inc/macrotests.h"
+
+int main(int argc, char *argv[])
+{
+    // use all the functions
+
+	int a = tool_lib1_a(argc) + tool_lib2_a(argc);
+	int b = tool_lib1_b(argc) + tool_lib2_b(argc);
+
+	// defined in the headers
+	int caps = A + B + C + D + E + F + G + H + I + J + K + L + M + N + O;
+
+	return tool_exe_b(a + b + caps);
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_exe_b.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+int tool_exe_b(int input)
+{
+	return input * input;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib1.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			libtool_lib1.a
+TARGETTYPE		LIB
+SOURCE			tool_lib1_a.cpp
+SOURCE			tool_lib1_b.cpp
+
+#include "../inc/macrotests.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib1_a.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include "../inc/macrotests.h"
+
+int tool_lib1_a(int input)
+{
+	return input + 1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib1_b.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+int tool_lib1_b(int input)
+{
+	return input + 2;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib2.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			libtool_lib2.a
+TARGETTYPE		LIB
+SOURCE			tool_lib2_a.cpp
+SOURCE			tool_lib2_b.cpp
+
+#include "../inc/macrotests.mmh"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib2_a.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+int tool_lib2_a(int input)
+{
+	return input - 1;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tools2/tool_lib2_b.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+int tool_lib2_b(int input)
+{
+	return input - 2;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_autorun/autorun1.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// trace compiler runs as the userinclude path matches
+
+TARGET			test
+TARGETTYPE		EXE
+
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+
+SYSTEMINCLUDE		/epoc32/include
+
+USERINCLUDE		../traces_autorun1
+
+SOURCE			test.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_autorun/autorun2.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,30 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// trace compiler does not run as userinclude path does not match
+
+TARGET			test
+TARGETTYPE		EXE
+
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib
+
+SYSTEMINCLUDE		/epoc32/include
+
+USERINCLUDE		./tracesnotmatch
+
+SOURCE			test.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_autorun/autorun3.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+// trace compiler does NOT run as there is neither UID2 nor UID3
+ 
+TARGET			test
+TARGETTYPE		EXE
+
+LIBRARY			euser.lib
+
+SYSTEMINCLUDE		/epoc32/include
+
+userinclude		../traces
+
+SOURCE			test.cpp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,27 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+PRJ_PLATFORMS
+ARMV5 WINSCW
+
+PRJ_MMPFILES
+autorun1.mmp
+autorun2.mmp
+autorun3.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_autorun/test.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple test";
+
+TInt E32Main()
+{
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/group/HelloWorld.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+============================================================================
+ Name		: HelloWorld.mmp
+ Author	  : 
+ Copyright   : Your copyright notice
+ Description : This is the project specification file for HelloWorld.
+============================================================================
+*/
+
+TARGET		HelloWorld.exe
+TARGETTYPE	exe
+UID		0 0xE78A5AA3
+
+USERINCLUDE	..\inc  
+USERINCLUDE	..\traces
+SYSTEMINCLUDE	\epoc32\include
+SYSTEMINCLUDE	\epoc32\include\platform
+
+SOURCEPATH	..\src
+SOURCE		HelloWorld.cpp
+
+LIBRARY		euser.lib
+
+featurevariant
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/group/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,15 @@
+/*
+============================================================================
+ Name		: bld.inf
+ Author	  : 
+ Copyright   : Your copyright notice
+ Description : This file provides the information required for building the
+				whole of a HelloWorld.
+============================================================================
+*/
+
+PRJ_PLATFORMS
+DEFAULT
+
+PRJ_MMPFILES
+HelloWorld.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/inc/HelloWorld.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+ ============================================================================
+ Name		: HelloWorld.h
+ Author	  : 
+ Copyright   : Your copyright notice
+ Description : Exe header file
+ ============================================================================
+ */
+
+#ifndef __HELLOWORLD_H__
+#define __HELLOWORLD_H__
+
+//  Include Files
+
+#include <e32base.h>
+
+//  Function Prototypes
+
+GLDEF_C TInt E32Main();
+
+#endif  // __HELLOWORLD_H__
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/src/HelloWorld.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,86 @@
+/*
+ ============================================================================
+ Name		: HelloWorld.cpp
+ Author	  : 
+ Copyright   : Your copyright notice
+ Description : Exe source file
+ ============================================================================
+ */
+
+//  Include Files  
+
+#include "HelloWorld.h"
+#include <e32base.h>
+#include <e32std.h>
+#include <e32cons.h>
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "HelloWorldTraces.h"
+#endif
+			// Console
+
+//  Constants
+
+_LIT(KTextConsoleTitle, "Console");
+_LIT(KTextFailed, " failed, leave code = %d");
+_LIT(KTextPressAnyKey, " [press any key]\n");
+
+//  Global Variables
+
+LOCAL_D CConsoleBase* console; // write all messages to this
+
+
+//  Local Functions
+
+LOCAL_C void MainL()
+    {
+    //
+    // add your program code here, example code below
+    //
+    console->Write(_L("Hello, world!\n"));
+    }
+
+LOCAL_C void DoStartL()
+    {
+    // Create active scheduler (to run active objects)
+    CActiveScheduler* scheduler = new (ELeave) CActiveScheduler();
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+    MainL();
+    OstTrace0( TRACE_NORMAL, _DOSTARTL, "Hello World" );
+    
+
+    // Delete active scheduler
+    CleanupStack::PopAndDestroy(scheduler);
+    }
+
+//  Global Functions
+
+GLDEF_C TInt E32Main()
+    {
+    // Create cleanup stack
+    __UHEAP_MARK;
+    CTrapCleanup* cleanup = CTrapCleanup::New();
+
+    // Create output console
+    TRAPD(createError, console = Console::NewL(KTextConsoleTitle, TSize(
+            KConsFullScreen, KConsFullScreen)));
+    if (createError)
+        return createError;
+
+    // Run application code inside TRAP harness, wait keypress when terminated
+    TRAPD(mainError, DoStartL());
+    if (mainError)
+        console->Printf(KTextFailed, mainError);
+    console->Printf(KTextPressAnyKey);
+    console->Getch();
+    
+    
+
+    delete console;
+    delete cleanup;
+    __UHEAP_MARKEND;
+    return KErrNone;
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/traces/OstTraceDefinitions.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/CommonFramework.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+#ifndef __CommonFramework_H
+#define __CommonFramework_H
+
+#include <e32base.h>
+#include <e32cons.h>
+
+_LIT(KTxtEPOC32EX,"EXAMPLES");
+_LIT(KTxtExampleCode,"Symbian OS Example Code");
+_LIT(KFormatFailed,"failed: leave code=%d");
+_LIT(KTxtOK,"ok");
+_LIT(KTxtPressAnyKey," [press any key]");
+
+// public
+LOCAL_D CConsoleBase* console; // write all your messages to this
+LOCAL_C void doExampleL(); // code this function for the real example
+
+// private
+LOCAL_C void callExampleL(); // initialize with cleanup stack, then do example
+
+GLDEF_C TInt E32Main() // main function called by E32
+    {
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
+	TRAPD(error,callExampleL()); // more initialization, then do example
+	__ASSERT_ALWAYS(!error,User::Panic(KTxtEPOC32EX,error));
+	delete cleanup; // destroy clean-up stack
+	__UHEAP_MARKEND;
+	return 0; // and return
+    }
+
+LOCAL_C void callExampleL() // initialize and call example code under cleanup stack
+    {
+	console=Console::NewL(KTxtExampleCode,TSize(KConsFullScreen,KConsFullScreen));
+	CleanupStack::PushL(console);
+	TRAPD(error,doExampleL()); // perform example function
+	if (error)
+		console->Printf(KFormatFailed, error);
+	else
+		console->Printf(KTxtOK);
+	console->Printf(KTxtPressAnyKey);
+	console->Getch(); // get and ignore character
+	CleanupStack::PopAndDestroy(); // close console
+    }
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/TCSTATICDLLWINS.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,4 @@
+EXPORTS
+	?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @ 1 NONAME ; ?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z
+	?ShowMessage@CMessenger@@QAEXXZ @ 2 NONAME ; ?ShowMessage@CMessenger@@QAEXXZ
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2000-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_PLATFORMS
+WINSCW
+
+PRJ_MMPFILES
+
+tcwinsStaticDLL.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/tcwinsStaticDLL.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This program creates a dll.
+*
+*/
+
+
+#include "tcwinsStaticDLL.h"
+#include <e32uid.h>
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "tcwinsStaticDLLTraces.h"
+#endif
+
+
+// construct/destruct
+
+
+extern "C" void __ARM_switch8();
+
+void sbs_test()
+	{
+	__ARM_switch8();
+	}
+
+
+EXPORT_C CMessenger* CMessenger::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+	{
+	OstTrace0( TRACE_API, CMESSENGER_NEWL, "CMessenger::NewLC()" );
+	OstTrace0( TRACE_NORMAL, DUP1_CMESSENGER_NEWL, "CMessenger::NewLC()" );  
+	CMessenger* self=new (ELeave) CMessenger(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL(aString);
+	return self;
+	}
+
+CMessenger::~CMessenger() // destruct - virtual, so no export
+	{
+	OstTrace0( TRACE_API, DUP1_CMESSENGER_CMESSENGER, "CMessenger::~CMessenger()" );
+	OstTrace0( TRACE_NORMAL, DUP2_CMESSENGER_CMESSENGER, "CMessenger::~CMessenger()" );  
+	delete iString;
+	}
+
+EXPORT_C void CMessenger::ShowMessage()
+	{
+	_LIT(KFormat1,"%S\n");
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+// constructor support
+// don't export these, because used only by functions in this DLL, eg our NewLC()
+
+CMessenger::CMessenger(CConsoleBase& aConsole) // first-phase C++ constructor
+	: iConsole(aConsole)
+	{
+	}
+
+void CMessenger::ConstructL(const TDesC& aString) // second-phase constructor
+	{
+	iString=aString.AllocL(); // copy given string into own descriptor
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/tcwinsStaticDLL.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+ 
+
+#include <e32cons.h>
+
+
+class CMessenger : public CBase
+  	{
+public:
+		// Construction
+	IMPORT_C static CMessenger* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+		// Destructor - virtual and class not intended
+		// for derivation, so not exported
+	~CMessenger();
+		// general functions - exported
+	IMPORT_C void ShowMessage();
+private:
+		// C++ constructor - not exported;
+		// implicitly called from NewLC()
+	CMessenger(CConsoleBase& aConsole);
+		// 2nd phase construction, called by NewLC()
+	void ConstructL(const TDesC& aString); // second-phase constructor
+private:
+	CConsoleBase& iConsole; // Use the console (but not owned)
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/tcwinsStaticDLL.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2000-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET        tcwinsstaticdll.dll
+TARGETTYPE    dll
+
+UID             0xE800004C
+CAPABILITY   All -TCB
+
+
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        tcwinsStaticDLL.cpp
+SOURCE        tcwinsfiletwo.cpp
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/platform
+USERINCLUDE traces
+
+LIBRARY       euser.lib
+
+#if defined(WINS)
+    deffile ./TCSTATICDLLWINS.def
+#endif
+nostrictdef
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/tcwinsfiletwo.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,66 @@
+/*
+* Copyright (c) 2000-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This program creates a dll.
+*
+*/
+
+
+#include "tcwinsfiletwo.h"
+#include <e32uid.h>
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "tcwinsfiletwoTraces.h"
+#endif
+
+
+// construct/destruct
+
+
+extern "C" void __ARM_switch8();
+
+EXPORT_C CMessenger2* CMessenger2::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+	{
+	OstTrace0( TRACE_NORMAL, DUP1_CMESSENGER2_NEWL, "CMessenger2::NewLC()" );  
+	CMessenger2* self=new (ELeave) CMessenger2(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL(aString);
+	return self;
+	}
+
+CMessenger2::~CMessenger2() // destruct - virtual, so no export
+	{
+	OstTrace0( TRACE_API, DUP1_CMESSENGER2_CMESSENGER2, "CMessenger2::~CMessenger2()" );
+	delete iString;
+	}
+
+EXPORT_C void CMessenger2::ShowMessage()
+	{
+	_LIT(KFormat1,"%S\n");
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+// constructor support
+// don't export these, because used only by functions in this DLL, eg our NewLC()
+
+CMessenger2::CMessenger2(CConsoleBase& aConsole) // first-phase C++ constructor
+	: iConsole(aConsole)
+	{
+	}
+
+void CMessenger2::ConstructL(const TDesC& aString) // second-phase constructor
+	{
+	iString=aString.AllocL(); // copy given string into own descriptor
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/tcwinsfiletwo.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2000-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+ 
+
+#include <e32cons.h>
+
+
+class CMessenger2 : public CBase
+  	{
+public:
+		// Construction
+	IMPORT_C static CMessenger2* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+		// Destructor - virtual and class not intended
+		// for derivation, so not exported
+	~CMessenger2();
+		// general functions - exported
+	IMPORT_C void ShowMessage();
+private:
+		// C++ constructor - not exported;
+		// implicitly called from NewLC()
+	CMessenger2(CConsoleBase& aConsole);
+		// 2nd phase construction, called by NewLC()
+	void ConstructL(const TDesC& aString); // second-phase constructor
+private:
+	CConsoleBase& iConsole; // Use the console (but not owned)
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/traces/OstTraceDefinitions.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/win32resource/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_PLATFORMS
+WINSCW
+
+PRJ_MMPFILES
+win32resourcedll.mmp
Binary file sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/win32resource/epoc32.ico has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/win32resource/gui.rc	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,79 @@
+//Microsoft Developer Studio generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include <windows.h>
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.K.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENG)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+EPOC_ICON               ICON    DISCARDABLE     "epoc32.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Cursor
+//
+
+OVERKEY                 CURSOR  DISCARDABLE     "hand.cur"
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE DISCARDABLE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+#endif    // English (U.K.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif    // not APSTUDIO_INVOKED
+
Binary file sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/win32resource/hand.cur has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/win32resource/resource.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+ //{{NO_DEPENDENCIES}}
+// Microsoft Developer Studio generated include file.
+// Used by gui.rc
+//
+#define EPOC_ICON                       102
+#define OVERKEY                         104
+
+// Next default values for new objects
+// 
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE        105
+#define _APS_NEXT_COMMAND_VALUE         40001
+#define _APS_NEXT_CONTROL_VALUE         1000
+#define _APS_NEXT_SYMED_VALUE           101
+#endif
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/TC_winscw/win32resource/win32resourcedll.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include "../CreateStaticDLL.mmp"
+
+START WINS
+WIN32_RESOURCE gui.rc
+END
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/group/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,5 @@
+PRJ_PLATFORMS
+ARMV5 WINSCW 
+
+PRJ_MMPFILES
+tc_variants.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/group/tc_variants.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+
+TARGET			tc_variants
+TARGETTYPE		EXE
+
+UID			0x100039ce 0x10000004
+LIBRARY			euser.lib
+SYSTEMINCLUDE		/epoc32/include
+SYSTEMINCLUDE		/epoc32/include/platform
+
+SOURCEPATH		../src
+SOURCE			tc_main.cpp
+#if defined(MACRO_TC_A)
+SOURCE			tc_a.cpp
+#endif
+#if defined(MACRO_TC_B)
+SOURCE			tc_b.cpp
+#endif
+#if defined(MACRO_TC_C)
+SOURCE			tc_c.cpp
+#endif
+
+USERINCLUDE		../traces
+
+featurevariant
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/hrh/var1.hrh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,4 @@
+#include <variant/Symbian_OS.hrh>
+
+#define MACRO_TC_A
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/hrh/var2.hrh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,4 @@
+#include <variant/Symbian_OS.hrh>
+
+#define MACRO_TC_B
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/hrh/var3.hrh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,4 @@
+#include <variant/Symbian_OS.hrh>
+
+#define MACRO_TC_C
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/src/tc_a.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,13 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "tc_aTraces.h"
+#endif
+
+#include "e32def.h"
+
+TInt tc_a()
+{
+	OstTrace0( TRACE_NORMAL, PLACE2, "source tc_a" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/src/tc_b.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,13 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "tc_bTraces.h"
+#endif
+
+#include "e32def.h"
+
+TInt tc_b()
+{
+	OstTrace0( TRACE_NORMAL, PLACE3, "source tc_b" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/src/tc_c.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,13 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "tc_cTraces.h"
+#endif
+
+#include "e32def.h"
+
+TInt tc_c()
+{
+	OstTrace0( TRACE_NORMAL, PLACE4, "source tc_c" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/src/tc_main.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,15 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "tc_mainTraces.h"
+#endif
+
+#include "e32def.h"
+
+char test[] = "source tc_main";
+
+TInt E32Main()
+{
+	OstTrace0( TRACE_NORMAL, PLACE1, "source tc_main" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/traces/OstTraceDefinitions.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/multiple_variants/variants.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+	<var name="feature_variant_base">
+		<set name='USE_TRACE_COMPILER' value='1' />       
+		<set name='FEATURELISTFILES' value='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/multiple_variants/list.txt'/>
+		<env name='JAVA_HOME' default='C:/APPS/jdk_1.6.0_11' type='path'/>
+		<env name='SBS_JAVATC' default='$(JAVA_HOME)/bin/java' type='tool' versionCommand='$(SBS_JAVATC) -version' versionResult='version \"1\.[5-9]' />
+	</var>
+
+	<var name="phone1" extends="feature_variant_base">
+		<set name='FEATUREVARIANTNAME' value='.phone1'/>
+		<set name='VARIANT_HRH' value='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/multiple_variants/hrh/var1.hrh'/> 
+	</var>
+
+	<var name="phone2" extends="feature_variant_base">
+		<set name='FEATUREVARIANTNAME' value='.phone2'/> 
+		<set name='VARIANT_HRH' value='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/multiple_variants/hrh/var2.hrh'/> 
+	</var>
+
+	<var name="phone3" extends="feature_variant_base">
+		<set name='FEATUREVARIANTNAME' value='.phone3'/> 
+		<set name='VARIANT_HRH' value='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/multiple_variants/hrh/var3.hrh'/> 
+	</var>
+
+</build>
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,5 @@
+PRJ_PLATFORMS
+ARMV5
+ 
+PRJ_MMPFILES
+mum.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/child1.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,15 @@
+
+TARGET			child1
+TARGETTYPE		EXE
+
+UID			0x100039ce 0x11100001
+LIBRARY			euser.lib
+SYSTEMINCLUDE		/epoc32/include
+SYSTEMINCLUDE		/epoc32/include/platform
+
+SOURCEPATH		../src
+SOURCE			child1.cpp
+SOURCE			common.cpp
+
+USERINCLUDE		../traces/traces_child1_exe
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/child2.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,15 @@
+
+TARGET			child2
+TARGETTYPE		EXE
+
+UID			0x100039ce 0x11100002
+LIBRARY			euser.lib
+SYSTEMINCLUDE		/epoc32/include
+SYSTEMINCLUDE		/epoc32/include/platform
+
+SOURCEPATH		../src
+SOURCE			child2.cpp
+SOURCE			common.cpp
+
+USERINCLUDE		../traces/traces_child2_exe
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/child3.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,14 @@
+TARGET			child3
+TARGETTYPE		EXE
+
+UID			0x100039ce 0x11100002
+LIBRARY			euser.lib
+SYSTEMINCLUDE		/epoc32/include
+SYSTEMINCLUDE		/epoc32/include/platform
+
+SOURCEPATH		../src
+SOURCE			child3.cpp
+SOURCE			common.cpp
+
+USERINCLUDE		../traces/traces_child3_exe
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/mum.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,20 @@
+
+#include <var.hrh>
+  
+targettype		None
+
+#ifdef CHILD1
+  #include "child1.mmp"
+  #warning "Child 1 selected"
+#endif
+#ifdef CHILD2
+  #include "child2.mmp"
+  #warning "Child 2 selected"
+#endif
+#ifdef CHILD3
+  #include "child3.mmp"
+  #warning "Child 3 selected"
+#endif
+
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/src/child1.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,15 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "child1Traces.h"
+#endif
+
+#include "e32def.h"
+
+char test[] = "Child 1";
+
+TInt E32Main()
+{
+	OstTrace0( TRACE_NORMAL, PLACE1, "Child 1" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/src/child2.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,13 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "child2Traces.h"
+#endif
+
+#include "e32def.h"
+
+TInt E32Main()
+{
+	OstTrace0( TRACE_NORMAL, PLACE2, "Child 2" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/src/child3.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,14 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "child3Traces.h"
+#endif
+
+#include "e32def.h"
+
+
+TInt E32Main()
+{
+	OstTrace0( TRACE_NORMAL, PLACE3, "Child 3" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/src/common.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,14 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "commonTraces.h"
+#endif
+
+#include "e32def.h"
+
+
+TInt common()
+{
+	OstTrace0( TRACE_NORMAL, PLACE0, "Common file shared by all mmp files" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child1_exe/OstTraceDefinitions.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child2_exe/OstTraceDefinitions.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces_child3_exe/OstTraceDefinitions.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/use_tc.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+	<!-- test trace compiler -->
+	<var name="tc_var_base">
+		<set name='USE_TRACE_COMPILER' value='1' />
+		<env name='JAVA_HOME' default='' type='path'/>
+		<env name='SBS_JAVATC' default='$(JAVA_HOME)/bin/java' type='tool' versionCommand='$(SBS_JAVATC) -version' versionResult='version \"1\.[5-9]' />
+	</var>
+	<var name="tc_var1" extends="tc_var_base">
+		<prepend name='SYSTEMINCLUDE' value='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/var1' />
+	</var>
+	<var name="tc_var2" extends="tc_var_base">
+		<prepend name='SYSTEMINCLUDE' value='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/var2' />
+	</var>
+	<var name="tc_var3" extends="tc_var_base">
+		<prepend name='SYSTEMINCLUDE' value='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/var3' />
+	</var>
+
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/var1/var.hrh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,3 @@
+
+#define CHILD1
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/var2/var.hrh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,3 @@
+
+#define CHILD2
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/var3/var.hrh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,3 @@
+
+#define CHILD3
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/eabi/testTCu.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,16 @@
+EXPORTS
+	_ZN11CWlanHwInit13GetHwInitDataEPPKhRjS2_S3_ @ 1 NONAME
+	_ZN11CWlanHwInit13GetHwTestDataEjR5TDes8 @ 2 NONAME
+	_ZN11CWlanHwInit13GetMacAddressER8TMacAddr @ 3 NONAME
+	_ZN11CWlanHwInit13SetHwTestDataEjR6TDesC8 @ 4 NONAME
+	_ZN11CWlanHwInit17GetHwTestInitDataEPPKhRjS2_S3_ @ 5 NONAME
+	_ZN11CWlanHwInit4NewLEv @ 6 NONAME
+	_ZN11CWlanHwInitD0Ev @ 7 NONAME
+	_ZN11CWlanHwInitD1Ev @ 8 NONAME
+	_ZN11CWlanHwInitD2Ev @ 9 NONAME
+	_ZThn4_N11CWlanHwInit13GetHwInitDataEPPKhRjS2_S3_ @ 10 NONAME ; #<thunk>#
+	_ZThn4_N11CWlanHwInit13GetHwTestDataEjR5TDes8 @ 11 NONAME ; #<thunk>#
+	_ZThn4_N11CWlanHwInit13GetMacAddressER8TMacAddr @ 12 NONAME ; #<thunk>#
+	_ZThn4_N11CWlanHwInit13SetHwTestDataEjR6TDesC8 @ 13 NONAME ; #<thunk>#
+	_ZThn4_N11CWlanHwInit17GetHwTestInitDataEPPKhRjS2_S3_ @ 14 NONAME ; #<thunk>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/group/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+/*
+*  You need tracecompiler to run this test.
+*/
+
+PRJ_PLATFORMS
+ARMV5
+
+PRJ_MMPFILES
+testTC.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/group/bld2.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+/*
+*  You need tracecompiler to run this test.
+*/
+
+PRJ_PLATFORMS
+ARMV5
+
+PRJ_MMPFILES
+test.TC.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/group/test.TC.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+TARGET          testTC.dll
+TARGETTYPE      dll
+UID             0x1000008d
+
+CAPABILITY      all
+
+DEFFILE         ../eabi/
+
+SOURCEPATH      ../src 
+SOURCE          wlanhwinit.cpp
+SOURCE          wlanhwinitmain.cpp
+SOURCE          wlanhwinitpermparser.cpp
+
+USERINCLUDE     ../inc
+USERINCLUDE     ../traces
+OS_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   /epoc32/include/libc
+SYSTEMINCLUDE   /epoc32/include/internal
+SYSTEMINCLUDE   /epoc32/include/platform
+
+LIBRARY         euser.lib
+LIBRARY		iscapi.lib
+LIBRARY         isimessage.lib
+LIBRARY		efsrv.lib
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/group/testTC.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+#include <platform_paths.hrh>
+
+TARGET          testTC.dll
+TARGETTYPE      dll
+UID             0x1000008d
+
+CAPABILITY      all
+
+DEFFILE         ../eabi/
+
+SOURCEPATH      ../src 
+SOURCE          wlanhwinit.cpp
+SOURCE          wlanhwinitmain.cpp
+SOURCE          wlanhwinitpermparser.cpp
+
+USERINCLUDE     ../inc
+USERINCLUDE     ../traces
+OS_LAYER_SYSTEMINCLUDE
+SYSTEMINCLUDE   /epoc32/include/libc
+SYSTEMINCLUDE   /epoc32/include/internal
+SYSTEMINCLUDE   /epoc32/include/platform
+
+LIBRARY         euser.lib
+LIBRARY		iscapi.lib
+LIBRARY         isimessage.lib
+LIBRARY		efsrv.lib
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/bcmnvmem.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,135 @@
+/*
+ * Broadcom implementation of Nokia WLAN Hardware Abstraction layer
+ *
+ * Copyright (C) 2008, Broadcom Corporation
+ * All Rights Reserved.
+ * 
+ * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Broadcom Corporation;
+ * the contents of this file may not be disclosed to third parties, copied
+ * or duplicated in any form, in whole or in part, without the prior
+ * written permission of Broadcom Corporation.
+ *
+ * $Id: bcmnvmem.h,v 1.2.2.4.4.1 2008/09/08 22:53:16 Exp $
+ */
+
+#ifndef BCMNVMEM_H
+#define BCMNVMEM_H
+
+#include <wlanwhanamespace.h>
+
+// Values larger than 8 bits are stored in little-endian format
+// Total size: 320 bytes
+
+NAMESPACE_BEGIN_WHA
+
+#define BCM_NVMEM_MAGIC1                (TUint8)'N'     // 78
+#define BCM_NVMEM_MAGIC2                (TUint8)'V'     // 86
+#define BCM_NVMEM_MAGIC3                (TUint8)'M'     // 77
+#define BCM_NVMEM_VERSION               3
+
+#define BCM_NVMEM_FLAG_VERIFY           0x00000001
+
+#ifndef BCM_NVMEM_PACKED
+#define BCM_NVMEM_PACKED                // For packed-ness testing only
+#endif
+
+struct SNvMem {
+    TUint8      magic1;
+    TUint8      magic2;
+    TUint8      magic3;
+    TUint8      version;
+
+    // Broadcom WHA section
+    TUint32     whaflags;
+    TUint8      whaspiclklo;
+    TUint8      whaspiclkhi;
+    TUint8      whamac[6];
+
+    // Broadcom device section
+    TUint16     xtalfreq;
+    TUint16     manfid;
+    TUint16     prodid;
+    TUint16     sromrev;
+    TUint16     vendid;
+    TUint16     devid;
+    TUint16     boardtype;
+    TUint16     boardrev;
+    TUint32     boardflags;
+    TUint32     boardflags2;
+    TUint16     opo;
+    TUint16     pa0b0;
+    TUint16     pa0b1;
+    TUint16     pa0b2;
+    TUint16     pa0b3;
+    TUint16     pa0b4;
+    TUint16     pa0b5;
+    TUint16     pa0b6;
+    TUint16     pa0b7;
+    TUint16     pa0b8;
+    TUint8      rssismf2g;
+    TUint8      rssismc2g;
+    TUint8      rssisav2g;
+    TUint8      rssismf2g_low0;
+    TUint8      rssismc2g_low1;
+    TUint8      rssisav2g_low2;
+    TUint8      rssismf2g_hi1;
+    TUint8      rssismc2g_hi2;
+    TUint8      rssisav2g_hi3;
+    TUint8      pa0itssit;
+    TUint8      tri2g;
+    TUint8      rxpo2g;
+    TUint16     pa0maxpwr;
+    TUint16     aa2g;
+    TUint16     ag0;
+    TUint16     cctl;
+    TUint32     boardnum;
+    TUint8      bxa2g;
+    TUint8      _pad2[43];
+
+    // Bob WLAN NW Memory device section (based on Draft 0.3)
+    TUint8      PL_2G_hdb;              /* Table 1 */
+    TUint8      PL_5G_hdb;
+    TUint16     rfq_2G;
+    TUint16     rfq_4G;
+    TUint16     rfq_5G_l;
+    TUint16     rfq_5G_m;
+    TUint16     rfq_5G_h;
+    TUint16     pd_2G;
+    TUint16     pd_4G;
+    TUint16     pd_5G_l;
+    TUint16     pd_5G_m;
+    TUint16     pd_5G_h;
+    TUint8      txg_2G;
+    TUint8      txg_4G;
+    TUint8      txg_5G_l;
+    TUint8      txg_5G_m;
+    TUint8      txg_5G_h;
+    TUint8      P2G_PL1_hdb[9];         /* Table 2a (bumped to 9 entries for 11n) */
+    TUint8      P2G_PL2_hdb[9];
+    TUint8      P2G_PL3_hdb[9];
+    TUint8      P2G_PL4_hdb[9];
+    TUint8      P5G_PL1_hdb[8];         /* Table 2b */
+    TUint8      P5G_PL2_hdb[8];
+    TUint8      P5G_PL3_hdb[8];
+    TUint8      P5G_PL4_hdb[8];
+    TUint8      cga_cck_2G[14];         /* Table 4 */
+    TUint8      cga_ofdm_2G[13];
+    TUint8      cga_j_4G[4];
+    TUint8      cga_j_5G[3];
+    TUint8      cga_5G_l[8];
+    TUint8      cga_5G_m[4];
+    TUint8      cga_5G_u1[11];
+    TUint8      cga_5G_u11[4];
+    TUint8      pab_2G[6];              /* Table 5 */
+    TUint8      pab_5G[6];
+    TUint8      rssi_adj_2G;            /* Table 6 */
+    TUint8      rssi_adj_j_5G;
+    TUint8      rssi_adj_5G_l;
+    TUint8      rssi_adj_5G_m;
+    TUint8      rssi_adj_5G_h;
+    TUint8      _pad3[19];
+} BCM_NVMEM_PACKED;
+
+NAMESPACE_END_WHA
+
+#endif  // BCMNVMEM_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/gendebug.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Contains methods for debug traces both in user space and kernel.
+*
+*/
+
+
+// @todo andreh - this file isn't needed in project, 
+//                cause belongs to wlaneng and is already exported there
+
+#ifndef GENDEBUG_H
+#define GENDEBUG_H
+
+#ifndef __KERNEL_MODE__
+#include <e32svr.h>
+#endif
+
+/** @file gendebug.h
+    @brief Common helper file for debugging. 
+
+    The file contains methods for adding traces and hardcoded breakpoint.
+
+    @page page1 A documentation for general helper module for doing debugging and tracing.
+
+    @subsection subsec1 This subsection describes the usage of hardcoded breakpoints.
+
+    Hardcoded breakpoints are usefull for allowing the execution to stop in right places
+    without bringing the OS down like using general assertions would do. Hardcoded breakpoints
+    must be used together with debugger. The hardcoded breakpoints are used by inserting
+    macro _DBG_MUST_BREAK into source code.
+
+    @note This feature has not been implemented yet.
+
+    @subsection subsec2 This subsection describes the usage of trace utilities.
+
+    Tracing is the most important way of doing HW level debugging (after looking the source of course).
+    Most of times users don't have access to debuggers and doing debugging in the field can be greatly
+    improved if there are great variety of configurable traces available.
+
+    In order to use the macro in kernel space, ALWAYS_KERNEL must be defined in the MMP-file of the module.
+
+    To use static tracing the module using these utilities must have defined DEBUG_LEVEL (this is integer constant) in
+    MMP-file. This constant defines the bit-mask for the set of traces, which are put into code at the compile time. See
+    the macro definitions for details.
+
+    The other way to do tracing is to use run-time tracing, which requires from user to put class member variable iDbgLevel
+    into their class. This variable is used the same way as the static flag by using bit-mask to define enabled traces. See
+    the macro definitions for details.
+*/
+
+/// @todo Implement this after checking the ARM manual
+#if defined(_DEBUG)
+#define _DBG_MUST_BREAK
+#else
+#define _DBG_MUST_BREAK
+#endif
+
+/** Critical trace-level is used when system is about to down very soon because of critical error. 
+    In most cases this trace level can be replaced by using assert with trace but in some cases
+    more information can be provided by using this debug level
+*/
+#define CRIT_LEVEL              0x00000001
+
+/** Serious trace-level is used when something bad and unexpected has happened but system might be
+    able to recover. In another words, software is not going to bring system forcefully down but
+    that's exactly what might happen due to an error.
+*/
+#define SERIOUS_LEVEL           0x00000002
+
+/* Error level is used to trace various errors, which are due to legal errors in normal operation. */
+#define ERROR_LEVEL             0x00000004
+
+/* Warning level is used to trace various warning, which are due to abnormal behaviour. */
+#define WARNING_LEVEL           0x00000008
+
+/* Info level is used to trace all general information. */
+#define INFO_LEVEL              0x00000010
+
+/* User definable trace level. This comment and definition should be replaced by the real usage. */
+#define USER_DEFINED_1          0x000010000
+/* User definable trace level. This comment and definition should be replaced by the real usage. */
+#define USER_DEFINED_2          0x000020000
+/* User definable trace level. This comment and definition should be replaced by the real usage. */
+#define USER_DEFINED_3          0x000040000
+/* User definable trace level. This comment and definition should be replaced by the real usage. */
+#define USER_DEFINED_4          0x000080000
+/* User definable trace level. This comment and definition should be replaced by the real usage. */
+#define USER_DEFINED_5          0x000100000
+/* User definable trace level. This comment and definition should be replaced by the real usage. */
+#define USER_DEFINED_6          0x000200000
+/* User definable trace level. This comment and definition should be replaced by the real usage. */
+#define USER_DEFINED_7          0x000400000
+/* User definable trace level. This comment and definition should be replaced by the real usage. */
+#define USER_DEFINED_8          0x000800000
+
+#define DEVICE_1_MASK           0x0000f000
+#define DEVICE_2_MASK           0x000f0000
+#define DEVICE_3_MASK           0x00f00000
+#define DEVICE_4_MASK           0x0f000000
+
+// Override debug-level definition for your own in MMP file
+#ifndef DEBUG_LEVEL
+#define DEBUG_LEVEL 0x000000FF
+#endif
+
+/// @todo find the right macro for debug builds
+
+#pragma warning(disable : 4127)    // conditional expression is constant
+
+#if defined(_DEBUG) || defined(TRACES)
+
+// Do not directly use this macro
+//lint -emacro({717}, UtilDump)   do while(0)
+//lint -emacro({774}, UtilDump)   conditional expression is constant
+#define UtilDump(PFUNCTION,SRCLEVEL,TRGLEVEL,STRING) \
+        do { \
+            TUint32 _level = (TRGLEVEL); \
+            if (SRCLEVEL & _level) { \
+            PFUNCTION STRING; \
+            } \
+        } while (0)
+
+#ifdef __KERNEL_MODE__
+	#define TraceDump(LEVEL,STRING) UtilDump(Kern::Printf,DEBUG_LEVEL,LEVEL,STRING)
+	#define RTraceDump(LEVEL,STRING) UtilDump(Kern::Printf,iDbgLevel,LEVEL,STRING)
+#else
+	#define TraceDump(LEVEL,STRING) UtilDump(RDebug::Print,DEBUG_LEVEL,LEVEL,STRING)
+	#define RTraceDump(LEVEL,STRING) UtilDump(RDebug::Print,iDbgLevel,LEVEL,STRING)
+#endif
+
+#else  // it is release mode
+//lint -emacro({717}, TraceDump) do while(0)
+#define TraceDump(LEVEL,STRING) do {} while (0)
+//lint -emacro({717}, RTraceDump) do while(0)
+#define RTraceDump(LEVEL,STRING) do {} while (0)
+
+#endif // _DEBUG
+
+
+
+
+#endif // GENDEBUG_H
+
+// End of file
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/lmac_firmware.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,8466 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+/* Binary image file name: init_lmac.dat */
+
+const unsigned int normal_firmware[] = {
+0x19171513,0x00000001,0x00000140,0x034d564e,0x00000000,0xa1003030,
+0x5544332f,0x02d09600,0x00030492,0x432f14e4,0x002104b9,0x00000000,
+0x00000000,0x17cc0000,0xfebbfa3a,0xfa3a17cc,0x1737febb,0xfea3fa48,
+0x0a030d0a,0x0b0a030d,0xf65e3e03,0x0002005a,0x000000ff,0x00000800,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x098a1d1e,
+0x14501360,0x164415a4,0x04000400,0x04000400,0x50500400,0x08505050,
+0x00030707,0xfefefefe,0x00000000,0x00000000,0xfafafa00,0xfafafafa,
+0xf2f2fafa,0xf2f2f2f2,0x07f2f2f2,0xfe000307,0x00fefefe,0xfe000000,
+0xfafefefe,0xfafafafa,0xf2fafafa,0xf2f2f2f2,0x00f2f2f2,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x20202428,0x24002020,0x20202020,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000002,
+0x00031658,0x00000000,0x00000971,0x0000081d,0x0000081d,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x0000081d,
+0x0000081d,0x0000081d,0x0000081d,0x0000081d,0x0000081d,0x0000081d,
+0x0000081d,0x0000081d,0x0000081d,0x0000081d,0x0000081d,0x0000081d,
+0x0000081d,0x0000081d,0x0000081d,0x47004803,0x00000000,0x53485244,
+0x00000000,0x00000971,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000961,
+0x00000919,0x000005fd,0x0000487d,0x0001d3d1,0x00004f69,0x0001de8d,
+0x00004e0d,0x0000b841,0x0000b5c9,0x000099b1,0x0000b979,0x0001c2f5,
+0x00013d05,0x00013d15,0x00013d21,0x00013d35,0x00013d49,0x00014755,
+0x0000096d,0x0000096d,0x0000096d,0x0000096d,0x0000096d,0x0000096d,
+0x0000096d,0x1e0091a1,0x1e002bc5,0x1e003759,0x1e006861,0x1e005aa5,
+0x1e000d35,0x1e000f51,0x1e0060a9,0x1e005d75,0x1e00004d,0x1e00705d,
+0x1e0002cd,0x1e007d85,0x1e00614d,0x1e0062ed,0x1e0004f5,0x1e004461,
+0x1e000749,0x1e003161,0x1e0032a1,0x1e0046e9,0x1e0044d1,0x1e0001a5,
+0x1e007e7d,0x1e0091d5,0x1e006221,0x1e00578d,0x1e005075,0x1e005a11,
+0x1e0040b9,0x1e004b1d,0x1e000ff1,0x1e003039,0x1e004a11,0x1e008099,
+0x1e006331,0x1e005fd5,0x1e005c41,0x0001fccd,0x1e0037cd,0x1e002fc9,
+0x1e001bfd,0x1e005939,0x1e004449,0x1e005195,0x1e0058c1,0x1e004c7d,
+0x1e004249,0x1e003e21,0x1e007e8d,0x1e005cdd,0x0001f861,0x1e0009e1,
+0x0001f8f1,0x1e007415,0x1e0052a5,0x1e00234d,0x1e006fcd,0x1e008025,
+0x1e00458d,0x0001ecf1,0x1e007e59,0x1e002431,0x1e007d55,0x1e0069c9,
+0x1e0045c1,0x1e0040a9,0x1e007b0d,0x1e001d55,0x1e0047d5,0x1e005c25,
+0x1e0021dd,0x1e004719,0x1e001af5,0x1e005d41,0x1e000a85,0x1e002851,
+0x1e005201,0x1e004d05,0x1e000f9d,0x1e006611,0x1e004041,0x1e003505,
+0x0001fcdd,0x1e0044d9,0x1e006b05,0x1e005a49,0x1e0006c1,0x1e000b4d,
+0x1e000109,0x1e005ec1,0x1e00629d,0x1e00a17d,0x1e0040f9,0x1e006b6d,
+0x1e001015,0x1e000949,0x0001fcc9,0x1e007559,0x1e0059d5,0x1e003981,
+0x1e00348d,0x1e007d5d,0x1e003e11,0x1e009f8d,0x1e003f65,0x1e0072c5,
+0x1e001271,0x1e005e9d,0x1e009275,0x1e005e51,0x1e000611,0x1e001edd,
+0x1e001e39,0x1e002d3d,0x1e006ded,0x1e000f61,0x1e000e89,0x1e002489,
+0x1e006abd,0x1e005c15,0x1e004569,0x1e000e79,0x1e0061f9,0x1e005da1,
+0x1e000c6d,0x1e003075,0x1e004b35,0x1e0005d9,0x1e0057b1,0x1e00917d,
+0x1e005959,0x1e0036f9,0x1e0062d1,0x0001e73d,0x1e001d25,0x1e004865,
+0x1e004075,0x1e000e11,0x1e001f01,0x1e001cf1,0x1e0024dd,0x1e005ddd,
+0x1e005a21,0x00000020,0x0000001f,0x00000050,0x00000001,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x681a4b03,0xf8c22300,
+0xf8d23644,0x47703644,0x000003e8,0x46c04770,0x6801b537,0xf1a14605,
+0x2b0f0310,0xf000d802,0xe026f90b,0x4c1368c3,0x686a9300,0x481268ab,
+0x69eb47a0,0x93006929,0x69ab696a,0x47a0480f,0x6a296aeb,0x6a6a9300,
+0x480d6aab,0x6beb47a0,0x93006b29,0x6bab6b6a,0x47a0480a,0x480a6ceb,
+0x6c299300,0x6cab6c6a,0xf24047a0,0xf00010e3,0xbd3efa69,0x1e004461,
+0x000203de,0x0002040f,0x00020441,0x00020473,0x000204a5,0xf04fb510,
+0xf0004000,0xbd10fa15,0xf04fb510,0xf0004000,0xbd10f9f1,0xf001b510,
+0xbd10fbdd,0xb5104b10,0xf8d2681a,0xf0133644,0xd0187f00,0x4c0d2340,
+0x3608f8c2,0x3608f8d2,0xff96f7ff,0xb1636823,0x47984b09,0x681b4b09,
+0x0300ebc3,0x42986820,0x1ac0d903,0x47984b06,0xf000e001,0xbd10f8d1,
+0x000003e8,0x000003bc,0x1e005aa5,0x000003b8,0x1e005cdd,0x41f0e92d,
+0x783b4f19,0x4e19b9b3,0xb9997831,0x4d194b18,0xd0071b5c,0x46224628,
+0xf924f001,0x46214628,0x47984b15,0x48164b15,0x47984621,0x703b2301,
+0xe0177033,0x783e4f13,0x4b13b9a6,0x1b5c4d13,0x4631d008,0x46224628,
+0xf90cf001,0x46214628,0x47984b09,0x480e4b09,0x47984621,0x701e4b02,
+0x703b2301,0x81f0e8bd,0x00023af6,0x00023af5,0x00028c76,0x00023c5c,
+0x1e005829,0x1e004461,0x000204e3,0x00023af4,0x00031654,0x00028c78,
+0x00020515,0x46c04770,0x48094b08,0xebc04909,0x4b090003,0xebc14a09,
+0x4b090103,0xebc2b510,0x4c080203,0x5300f44f,0xbd1047a0,0x00022d98,
+0x00000000,0x00022d98,0x00023af4,0x00023af4,0x00023c5c,0x1e005ac1,
+0x4603b510,0x4622460c,0x48034619,0x47984b03,0xf0004620,0xbd10f9a7,
+0x000206c4,0x1e004461,0xf7ffb510,0xbd10ff4f,0x4604b510,0xff44f7ff,
+0xf7ff4620,0x4620fefb,0xfff2f7ff,0x46c0e7fb,0xb5104b03,0x4b036818,
+0xf0016819,0xbd10f8df,0x00023afc,0x000003e8,0xb5704b09,0xf0006818,
+0x4b08fadf,0x681c4605,0x68e3e007,0xd003421d,0xb10b6863,0x479868a0,
+0x2c006824,0xbd70d1f5,0x00023afc,0x00023b08,0x4b07b570,0x681c4605,
+0x4620e005,0x4b054629,0xb1104798,0x2c006b24,0x4620d1f7,0x46c0bd70,
+0x00023b00,0x1e004041,0x4c08b510,0x70232300,0x47984b07,0xb9437823,
+0x681b4b06,0x6858b11b,0x47984b05,0xf7ffe001,0xbd10fea3,0x000003e4,
+0x1e005905,0x000003f4,0x1e005cdd,0x4605b570,0x6a83b1b8,0x6ac3b1ab,
+0x6283b90b,0xf100e006,0x6a690010,0x462b4a07,0x47a04c07,0xb10b68ab,
+0x47984628,0x3030f895,0xd1022b01,0x4b034628,0xbd704798,0x000006e1,
+0x1e005959,0x1e005a11,0xb5702901,0x6850d941,0x220a2100,0x47984b22,
+0x46044b22,0x4290681a,0x4921d91e,0xb10b684b,0xe7fb4619,0x0504ebc2,
+0xe012460c,0x6080f44f,0x4b1c2100,0x60604798,0xd0262800,0x6280f44f,
+0xf0012100,0x4a15f80f,0x68136864,0x33013d01,0x2d006013,0xe018d1ea,
+0x4b11d217,0x0502ebc4,0xe00a6858,0x4c0e6843,0x60633d01,0x47984b0e,
+0x68604a0a,0x3b016813,0xb10d6013,0xd1f12800,0x681a4b06,0x4b06b90a,
+0x4b04605a,0x68194807,0x47984b07,0x46c0bd70,0x1e004195,0x00023b04,
+0x00023b10,0x1e00578d,0x1e0057b1,0x000206eb,0x1e004461,0x40998983,
+0x5cc86883,0x46c04770,0xb2d28983,0x68834099,0x477054ca,0xf8d0b510,
+0xe00440a0,0x48036821,0x47984b03,0x2c0068e4,0xbd10d1f8,0x00020fa1,
+0x1e004461,0x4b01b510,0xbd104798,0x1e005ee5,0xb5004668,0xf3ef6982,
+0x21038305,0xd10d428b,0x68194b17,0x4b176019,0xd0074219,0x68194b16,
+0x4b166019,0xd0014219,0x61823202,0x30206941,0x3820b407,0xb4024661,
+0xb4f0b084,0xb40ec80e,0xb402c802,0x69c13810,0xf3efb402,0xb4028103,
+0xb4026981,0x8105f3ef,0x4809b402,0x29006801,0x4668d0fe,0xf802f000,
+0xbd00b014,0x00004708,0xe000ed2c,0x40000000,0xe000ed28,0x00008080,
+0x00000940,0x4208490a,0xb662d002,0x400843c9,0x42084908,0xb661d002,
+0x400843c9,0x40084906,0xd0032800,0x680a4905,0x600a4302,0x00004770,
+0x80000000,0x40000000,0x0000ffff,0xe000e100,0x4208490a,0xb672d002,
+0x400843c9,0x42084908,0xb671d002,0x400843c9,0x40084906,0xd0042800,
+0x680a4905,0x400243c0,0x4770600a,0x80000000,0x40000000,0x0000ffff,
+0xe000e180,0x68094902,0x58882290,0x00004770,0x00000948,0x68094902,
+0x5088229c,0x00004770,0x00000948,0xbbadbadd,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x68114a02,0x1c086010,0x00004770,
+0x00000940,0x60084901,0x0000e7fe,0x00000938,0xe7f74670,0x68014873,
+0x400f4f73,0xd132423f,0x46982300,0x4a71469a,0x2118400a,0x497040ca,
+0x4c705843,0x4d70401c,0xd10442ac,0x4d6f4680,0x46a91945,0x4d6ee00e,
+0xd10b42ac,0x4d6b4682,0x46ab1945,0x1c1d240f,0x4c6a4023,0x0a2d4025,
+0x469c432b,0x45982300,0x459ad001,0x4b66d104,0x3a0118c0,0xe005d1dc,
+0x42004650,0x4640d002,0xd1294200,0x21fce7fe,0x680a5841,0x4013230f,
+0xd0f12b0f,0xd0012b01,0xe7f63104,0x4b5b3108,0x4c5b4013,0xd10642a3,
+0xf8dcf000,0xf0004680,0x4681f8e5,0x4c57e7e9,0xd1e642a3,0x681b1f0b,
+0x40234c55,0x40e32418,0xf000469c,0x4682f8cb,0xf8d4f000,0xe7d84683,
+0x22214950,0x4a415042,0x5889494f,0x421923ff,0x6851d022,0x42194b4d,
+0x6811d01e,0x40194b4c,0x24036ad3,0x4c4b4023,0x240342a1,0xe013d000,
+0xd01142a3,0x4c474b48,0xd00042a1,0x4947e00c,0x42195889,0x4946d008,
+0x40195889,0xd1fa4299,0x69114b37,0xd0fc4219,0x423f4649,0x2398d104,
+0x241058cb,0xe00140e3,0x58cb4b3e,0x4023241c,0xd0012b00,0xf8a4f000,
+0x493b4640,0x46486008,0x6008493a,0x600f493a,0x46514660,0x588a2200,
+0x21f01c13,0x091b400b,0xd3072803,0x49351c16,0x2114400e,0x2e0040ce,
+0x3b01d000,0x400a210f,0x2401320e,0x1c254094,0x2803435d,0x2e00d306,
+0x3e01d004,0x2401360e,0x192d40b4,0xd0fe2d00,0x600d4929,0x46ad3d04,
+0x43ec9d00,0x41dd2310,0xd10942ac,0x00a40c24,0x602c4d24,0x1b1b466b,
+0x602b4d23,0x469d3b04,0x49234822,0xc0042200,0xd8fc4281,0xff60f01b,
+0x0000e7fe,0x18000000,0xf0000000,0x0f000000,0x00000ffc,0x00008ff0,
+0x000082a0,0x00000f00,0x000080e0,0x00007000,0x00001000,0x000fff00,
+0x00082a00,0x00080e00,0xff000000,0x000001e0,0x00000604,0x00380000,
+0x0000ffff,0x00004329,0x00000400,0x00000618,0x0000060c,0x00000408,
+0x00000948,0x0000094c,0x00000944,0x00f00000,0x00022d98,0x00022da0,
+0x00022d9c,0x00023af4,0x00023c5c,0x220f6808,0x40023104,0xd1f92a05,
+0x40104a01,0x000046f7,0xfffff000,0x220f6808,0x40023104,0xd1f92a05,
+0x42102280,0x4a01d0f6,0x46f74010,0xfffff000,0x0000e7fe,0x47706cc0,
+0x6642b510,0xf8d06683,0xf8d02080,0x9c02308c,0x0382eb03,0x3080f8d3,
+0x660165c4,0xbd106583,0x308cf8d0,0x31c0f8d3,0x0fe8f8d3,0x46c04770,
+0x308cf8d0,0x2080f8d0,0x0382eb03,0x0080f8d3,0x46c04770,0x0080f8d0,
+0x46c04770,0xf3c06980,0x477060c0,0x30fff04f,0x46c04770,0xf0006bc0,
+0x28030003,0x2000bf14,0x47702001,0xb5706fc3,0xf8d04604,0xb1135080,
+0x0d1b051b,0x480cb123,0x3181f240,0xfcbcf7ff,0xf7ff4620,0x4601ffd1,
+0x46022000,0xf8d4e009,0xeb03308c,0xf8d30382,0x428b3080,0x3001bf08,
+0x42aa3201,0xbd70d1f3,0x0002070c,0x4604b510,0xffa0f7ff,0x46204601,
+0xfdecf000,0x46c0bd10,0x4604b510,0x2200b330,0x108cf8d4,0x3022f851,
+0x2300b113,0x3022f841,0x2a103201,0xf8d4d1f4,0xf893308c,0x1e4a12c4,
+0xf8832901,0xd10922c4,0x7232f44f,0x6ce04b08,0x108cf8d4,0x4b074798,
+0x601a2200,0x429c4b06,0x6ce0d004,0x22904621,0x47984b01,0x46c0bd10,
+0x1e005c15,0x00023b30,0x00023b3c,0xf000b510,0xbd10f9bd,0xf000b510,
+0xbd10f9bb,0xf000b510,0xbd10fba1,0xf000b510,0xbd10faed,0x9c04b513,
+0xf0009400,0xbd1cfa7d,0x4604b573,0xf7ff460d,0x462aff4d,0x46204601,
+0xfe68f000,0x2b146963,0x266ddd23,0x200ae003,0x47984b12,0x21003e0a,
+0x460b2210,0x91004620,0xffe0f7ff,0xbf142d00,0x5380f44f,0xf4002300,
+0x42985080,0x2e09d001,0x2d00d1e9,0xf44fbf14,0x23005380,0xd0044298,
+0xf6404805,0xf7ff5183,0xf44ffc23,0x4b01707a,0xbd7c4798,0x1e005d75,
+0x0002070c,0xb5132b02,0x4611460c,0xb902d00c,0x4a09b154,0x6813b113,
+0xe004401c,0xea446812,0xea230302,0x40210402,0x22649100,0x46232100,
+0xffa8f7ff,0x46c0bd1c,0x00023b2c,0xb5132b02,0x4611460c,0xb902d00c,
+0x4a09b154,0x6813b113,0xe004401c,0xea446812,0xea230302,0x40210402,
+0x22689100,0x46232100,0xff8cf7ff,0x46c0bd1c,0x00023b2c,0xb5132b02,
+0x4611460c,0xb902d00c,0x4a09b154,0x6813b113,0xe004401c,0xea446812,
+0xea230302,0x40210402,0x226c9100,0x46232100,0xff70f7ff,0x46c0bd1c,
+0x00023b2c,0xf000b510,0xbd10f907,0xf000b510,0xbd10f985,0xf000b510,
+0xbd10f9b7,0xf000b510,0xbd10f95f,0x4b06b510,0x47984604,0x4601280f,
+0x2000d901,0x4620e002,0xf952f000,0x46c0bd10,0x0001cd15,0x41f0e92d,
+0x5080f8d0,0x2d0f4604,0x4617460e,0x480dd904,0x6106f640,0xfb98f7ff,
+0xf44f4620,0x22006100,0xffdcf7ff,0xf8c02300,0x33053658,0x665cf8c0,
+0xf8c04629,0xf8c03658,0x4620765c,0xffcaf7ff,0x81f0e8bd,0x0002070c,
+0x41f0e92d,0x5080f8d0,0x2d0f4604,0x4617460e,0x4812d904,0x51e9f640,
+0xfb72f7ff,0xf44f4620,0x22006100,0xffb6f7ff,0xf8c02300,0xf8d03658,
+0x4629365c,0xf0436033,0xf8c00301,0x2305365c,0x3658f8c0,0x365cf8d0,
+0xf043603b,0xf8c04300,0x4620365c,0xff9af7ff,0x81f0e8bd,0x0002070c,
+0x41f0e92d,0x5080f8d0,0x2d0f4604,0x4617460e,0x480dd904,0x51d2f640,
+0xfb42f7ff,0xf44f4620,0x22006100,0xff86f7ff,0xf8c02300,0xf8d03650,
+0x46293654,0x0306ea23,0xf8c0433b,0x46203654,0xff74f7ff,0x81f0e8bd,
+0x0002070c,0xf2446b02,0x429a3319,0x4605b573,0xd11b460e,0xb9cc6b44,
+0x2302b1d9,0x46219300,0x33fff04f,0x72f0f44f,0xfebcf7ff,0xf6404622,
+0x4628011a,0xff5af7ff,0x21014628,0xfeaef7ff,0xf44f4628,0x46226100,
+0xff50f7ff,0xbf082e01,0x46282602,0xf2402100,0xf04f6234,0x960033ff,
+0xfea0f7ff,0x46c0bd7c,0xb5104b03,0xfb03681b,0xf7fff101,0xbd10ffc7,
+0x00023b38,0xf000b510,0xbd10f821,0xf000b510,0xbd10f813,0x47706808,
+0x4770600a,0xb5106fc1,0x6170f501,0xf7ff31fc,0xf648fff5,0xea0073f0,
+0x09180303,0x46c0bd10,0xb5106fc1,0x6170f501,0xf7ff3118,0xf000ffe7,
+0xbd10003f,0xb5106fc1,0x6170f501,0xf7ff31fc,0xf400ffdd,0xf00043e0,
+0xea40000f,0xbd102013,0xb5106fc1,0x6170f501,0xf7ff3198,0x4b04ffcf,
+0x0303ea00,0x3f80f5b3,0x2000bf14,0xbd102001,0x00010007,0x47702000,
+0x46c04770,0x0303f000,0xb5102b03,0xd1054604,0xf2404813,0xf7ff41cf,
+0xe014fa9b,0xf020b913,0xe01c00ff,0xd10c2b01,0x6f00f410,0x480cd004,
+0x41d6f240,0xfa8cf7ff,0x607ef424,0x001ff020,0x2b02e00d,0x2000d001,
+0xf410e009,0xd0046f00,0xf2404803,0xf7ff41d9,0x0c20fa7b,0xbd100400,
+0x00020754,0x460cb570,0x108cf8d0,0xeb014605,0xf8d30384,0xf85121c0,
+0xb9533024,0x2024f841,0x0513b112,0xb1230d1b,0xf2404804,0xf7ff2161,
+0xf8d5fa5f,0xf853308c,0xbd700024,0x00020754,0x3084f8d0,0x4299b570,
+0x460d4604,0x2000d301,0x6e83e010,0x6dc0b13b,0xb1204798,0xf2404806,
+0xf7ff214b,0x4620fa45,0xf7ff4629,0xf8c4ffcb,0x67e05080,0x46c0bd70,
+0x00020754,0xe92d6fc3,0xf50341f0,0xea326870,0x46060301,0x4617460d,
+0x4814d004,0x113bf240,0xfa2af7ff,0x637ef425,0x031ff023,0x480fb123,
+0x719ef44f,0xfa20f7ff,0xb17fb905,0x049cf108,0x46304621,0xff32f7ff,
+0x4305ea6f,0x0203ea00,0x46304621,0x4207ea42,0xff2af7ff,0xf1084630,
+0xf7ff019c,0x0c00ff23,0x81f0e8bd,0x00020754,0xe92d6fc3,0xf50341f0,
+0xea326870,0x46060301,0x4617460d,0x480fd004,0x1121f240,0xf9f4f7ff,
+0xb17fb905,0x0498f108,0x46304621,0xff06f7ff,0x4305ea6f,0x0203ea00,
+0x46304621,0x4207ea42,0xfefef7ff,0xf1084630,0xf7ff0198,0x0c00fef7,
+0x81f0e8bd,0x00020754,0x47f0e92d,0x4680290f,0x4615460c,0xf8dd469a,
+0xd9049020,0xf44f482e,0xf7ff71b6,0xf5b5f9c9,0xd3045f80,0xf240482a,
+0xf7ff116d,0xea6ff9c1,0xea19070a,0xd0040f07,0xf44f4825,0xf7ff71b7,
+0xf8d8f9b7,0xf852208c,0xb9733024,0x0384eb02,0x31c0f8d3,0x3024f842,
+0x051bb113,0xb1230d1b,0xf240481b,0xf7ff1177,0xf8d8f9a3,0xf853308c,
+0x192e4024,0x4816d104,0x119bf240,0xf998f7ff,0x0f00f1ba,0xf1b9d102,
+0xd0150f00,0x6f70f5b5,0x4631d30c,0xf7ff4640,0xea00fea5,0x46310207,
+0xea424640,0xf7ff0209,0xe008fe9f,0x403b592b,0x0309ea43,0xe007512b,
+0x6f70f5b5,0x4640d304,0xf7ff4631,0xe000fe8f,0xe8bd6830,0x46c087f0,
+0x00020754,0xe92d6fc3,0x460541f3,0xb1134688,0x0d1b051b,0x4850b123,
+0x31edf240,0xf960f7ff,0x46286feb,0x6670f503,0x0498f106,0xf7ff4621,
+0xf010fe71,0xf0400f01,0x4628808c,0xf7ff4621,0xf410fe69,0xd0783f80,
+0x46284621,0xfe62f7ff,0xf0404621,0x46280202,0xfe5ef7ff,0x46284621,
+0xfe58f7ff,0x90014b3d,0x47982001,0xe0034f3c,0x4b3a200a,0x3f0a4798,
+0x049cf106,0x46214628,0xfe48f7ff,0x0f04f010,0x2f09d001,0x4621d1f0,
+0xf7ff4628,0x4628fe3f,0x01f8f106,0xfe3af7ff,0x0f80f010,0xf106d023,
+0x46210490,0xf7ff4628,0x4621fe31,0x7200f040,0xf7ff4628,0x4621fe2d,
+0xf7ff4628,0x4b25fe27,0x20019001,0x4c244798,0x200ae003,0x47984b21,
+0x46283c0a,0x0190f106,0xfe18f7ff,0x7fc0f010,0x2c09d001,0xf106d1f1,
+0xea4f0498,0xf0424208,0x46281203,0xf7ff4621,0x4621fe0b,0xf7ff4628,
+0x4b14fe05,0x200a9001,0x46284798,0x01f8f106,0xfdfcf7ff,0x0f80f010,
+0xf106d00b,0x46210490,0xf7ff4628,0x4621fdf3,0x7200f020,0xf7ff4628,
+0xea4ffdef,0x46284208,0x0198f106,0x0203f042,0xfde6f7ff,0x4b032001,
+0xe8bd4798,0x46c081fc,0x00020754,0x1e005d75,0x000186a9,0xe92d6fc3,
+0x460647f3,0x4614468a,0x051bb113,0xb1230d1b,0xf2404830,0xf7ff412a,
+0xf8d6f8af,0xea44807c,0x4621040a,0x6570f508,0x0403f044,0x0798f105,
+0xea4f4630,0xf7ff4904,0xf049ff31,0x46300201,0xf7ff4639,0x4639fdb5,
+0xf7ff4630,0x359cfdaf,0x4c219001,0x47a02001,0x46294630,0xfda6f7ff,
+0x0f01f010,0x4630d004,0x22004629,0xfda0f7ff,0x6579f508,0x46294630,
+0xfd98f7ff,0x9b019001,0x2fc0f413,0x4629d009,0xf7ff4630,0x4629fd8f,
+0x22c0f420,0xf7ff4630,0x464afd8b,0x46394630,0xfd86f7ff,0x46304639,
+0xfd80f7ff,0x20019001,0xf04a47a0,0x46300201,0x04124639,0xfd78f7ff,
+0x46394630,0xfd72f7ff,0x20019001,0xe8bd47a0,0x46c087fc,0x00020754,
+0x1e005d75,0x60c26042,0x60816001,0x46c04770,0xf04fb500,0xe00a0e00,
+0x3000f81e,0xb2db18d3,0xf80e4293,0xd2043000,0x0e01f10e,0x458e2201,
+0xbd00dbf2,0x1e53b510,0x18891884,0xf814e009,0xf8112d01,0x42820d01,
+0xebc0d002,0xe0040002,0xf1b33b01,0xd1f23fff,0xbd102000,0xe92d4b10,
+0x468841f0,0xbf142800,0x46194601,0x4b0e480d,0x47984617,0x462c2500,
+0x480ce00a,0x1008f815,0x47b03401,0xd1022c10,0x47b04809,0x35012400,
+0x4e0542bd,0x4806dbf1,0xe8bd47b0,0x46c081f0,0x0002196b,0x0002075e,
+0x1e004461,0x00020767,0x00021250,0xb533b40e,0x4605ab05,0x2b04f853,
+0x68696800,0x93014c0a,0xf1b047a0,0xd0033fff,0x4298686b,0xb910da00,
+0x606b2300,0x1a1be004,0x682b606b,0x602b181b,0x403ce8bd,0x4770b003,
+0x1e004249,0x7842b530,0x7803b087,0x78829200,0x9201460d,0x4c0678c2,
+0x79029202,0x79429203,0x92044608,0x4a032112,0x462847a0,0xbd30b007,
+0x1e003fc9,0x0002098e,0x4604b570,0xb1e9460e,0x4b0f4608,0x46054798,
+0xe00fb1c0,0x46314620,0x4b0c462a,0xb9284798,0x2b3d5d63,0x1c63d102,
+0xe00c1958,0x3b01f814,0xd1fb2b00,0x7823b114,0xd1eb2b00,0xf0014630,
+0xe000ff6d,0xbd702000,0x1e0040a9,0x1e00d671,0xf7ffb510,0xb118ffd5,
+0x460a2100,0x47984b01,0x46c0bd10,0x1e0037cd,0x47f0e92d,0x230c4698,
+0x1303fb02,0x4681689d,0x4617460e,0x240ce012,0x6404fb07,0x4629686b,
+0x230060a3,0x4648606b,0x46424b0c,0x8a234798,0x3b0168a5,0x88f38223,
+0x80f33b01,0xd1ea2d00,0xfb07230c,0x8a236403,0x4805b123,0x7194f44f,
+0xff5ef7fe,0xe8bd60e5,0x46c087f0,0x1e005c41,0x00020783,0x41f0e92d,
+0x460c4607,0x25004616,0x462ae006,0x46214638,0xf7ff4633,0x3501ffc1,
+0x429d8823,0x88e3dbf5,0x4803b123,0x71e9f44f,0xff3ef7fe,0x81f0e8bd,
+0x00020783,0xb5002a07,0xf010d90f,0xd10c0f03,0x460bb909,0xb2cbe004,
+0x2303ea43,0x4303ea43,0x2a033a04,0x3b04f840,0x4613d8fa,0x0e00f04f,
+0xf80ee004,0x3b011000,0x0e01f10e,0xd1f82b00,0xbd001880,0xb5002a03,
+0xd90c4684,0x0f03f011,0xf01cd109,0xd1060f03,0x3b04f851,0x2a033a04,
+0x3b04f840,0xf04fd8f8,0xe0060e00,0x3001f81e,0xf80e3a01,0xf10e3000,
+0x2a000e01,0x4660d1f6,0x46c0bd00,0xb5706943,0xdc012b14,0xe0042541,
+0x6a0b4a0a,0xea036812,0x4c090502,0x2c04f854,0xf854b132,0xea153c08,
+0xd0010103,0x47906820,0x340c4b04,0xd1f1429c,0x46c0bd70,0x00023c0c,
+0x00023bd8,0x00023c14,0x460eb573,0xf89d2400,0x46151018,0x469e4684,
+0x20014622,0xf302fa10,0x0f0eea13,0xf8c5d004,0xf8d52620,0x431c3624,
+0x2a1f3201,0x4623d1f1,0xb13cb149,0x46319000,0x462a4660,0xffe0f7ff,
+0x0300ea44,0x4620461c,0x46c0bd7c,0x4605b570,0xf9d0f7ff,0x46062100,
+0xf7ff4628,0x4604faef,0x4807b920,0x1111f640,0xfea2f7fe,0x46314628,
+0x460cf8d4,0xfae2f7ff,0x2080f3c4,0x46c0bd70,0x000209c5,0xe92d6983,
+0xf01341f0,0x46065f80,0x483ed104,0x0152f640,0xfe8af7fe,0xf7ff4630,
+0x2100f9a9,0x46304607,0xfac8f7ff,0xb9204605,0xf6404836,0xf7fe0157,
+0x2301fe7b,0x3650f8c5,0x3654f8d5,0xf0234c32,0xf8c50304,0xf8d53654,
+0xf0433654,0xf8c50304,0xe0033654,0x4b2d200a,0x3c0a4798,0xf0136aeb,
+0xd1010f08,0xd1f52c09,0xf0136aeb,0xd1040f08,0xf6404824,0xf7fe01b1,
+0x2000fe57,0xf8c56aea,0xf8d50658,0xf3c2365c,0xf0231247,0x21014360,
+0x7342ea43,0x365cf8c5,0x1658f8c5,0x365cf8d5,0x040ff002,0x0301f023,
+0x03d4ea43,0x365cf8c5,0x0650f8c5,0x3654f8d5,0x4340f023,0x7382ea43,
+0x3654f8c5,0x1650f8c5,0x3654f8d5,0x0303f023,0x0394ea43,0x3654f8c5,
+0x0650f8c5,0x3654f8d5,0xf0434630,0xf8c55300,0xf8c53654,0xf8d51650,
+0x46393654,0x0304f023,0x3654f8c5,0xfa5af7ff,0x81f0e8bd,0x000209c5,
+0x00989689,0x1e005d75,0x4616b570,0x460d6b42,0x2312f240,0x490d2000,
+0xbf8c2a01,0x2412461c,0xfe42f7ff,0x2100b120,0x4b09460a,0x46044798,
+0x49082000,0xfe38f7ff,0x4807b908,0x2100e003,0x4b03460a,0x602c4798,
+0xbd706030,0x000209ce,0x1e0037cd,0x000209d3,0x003ff63e,0x43f0e92d,
+0xb0856983,0x5f80f013,0x460c4607,0xd1044690,0xf6404831,0xf7fe0115,
+0x4638fdd3,0xf8fef7ff,0x28004606,0x4638d155,0xf8ecf7ff,0x46814631,
+0xf7ff4638,0x4605fa0b,0x4827b920,0x6102f44f,0xfdbef7fe,0x46212301,
+0x462a9300,0x6380f44f,0xf7ff4638,0xaa02fedd,0xa9034604,0x96034638,
+0xf7ff9602,0x9b03ffa1,0x0203ea24,0x0f00f1b8,0xf8d5d023,0xf44f3618,
+0xf443707a,0x43136380,0x3618f8c5,0x47984b15,0x24a1f643,0x200ae003,
+0x47984b12,0xf8d53c0a,0xf413360c,0xd1016f80,0xd1f42c09,0x360cf8d5,
+0x6f80f413,0x480ad10d,0x013ff640,0xfd84f7fe,0xf8d5e007,0xf4423618,
+0xea236280,0xf8c50302,0x46383618,0xf7ff4649,0xb005f9bd,0x83f0e8bd,
+0x000209c5,0x1e005d75,0x30b4f890,0xf8d0b1a3,0xb10b30c0,0xe0024618,
+0x00c4f8d0,0x6803b160,0x6300f443,0x68036003,0x6f00f413,0xf423d004,
+0x60036300,0xe0002001,0x47702000,0x4604b510,0xffe2f7ff,0x2301b110,
+0x3140f8c4,0x46c0bd10,0x477020a4,0xf890b510,0xb10b30b4,0xe0004903,
+0x22904903,0xfe26f7ff,0x46c0bd10,0x000209e4,0x00020a74,0x4604b570,
+0xf7ff460e,0x2100f833,0x460a4605,0xf7ff4620,0xf410f96d,0xd00f5f80,
+0xf7ff4620,0xb108f84f,0xe00a2040,0x46314628,0x47984b04,0x4804b920,
+0x01c3f640,0xfd1cf7fe,0xbd702020,0x1e004569,0x00020b04,0x4604b570,
+0xe004460d,0x00acf8d4,0x4b052201,0x46294798,0x4b044620,0x46014798,
+0xd1f32800,0x46c0bd70,0x1e005c41,0x1e004d89,0x4604b570,0xe004460d,
+0x00acf8d4,0x4b052201,0x46294798,0x4b044620,0x46014798,0xd1f32800,
+0x46c0bd70,0x1e005c41,0x1e004e11,0x4604b510,0xf8d4e004,0x220000ac,
+0x47984b04,0x46202101,0x47984b03,0x28004601,0xbd10d1f3,0x1e005c41,
+0x1e005195,0x4b08b510,0x46084604,0x47984907,0xf104b910,0xe0050090,
+0xf44f4805,0xf7fe6190,0x2000fcc7,0x46c0bd10,0x1e004041,0x00020b0d,
+0x00020b04,0x4770bf30,0x69c06942,0x40186a13,0x47706210,0x22006943,
+0x6a9b629a,0x47706182,0x694369c2,0x629a6182,0x46c04770,0x30fcf8d0,
+0xf8904319,0xf8c03177,0xb1e310fc,0x0f04f011,0xf890d005,0xea413178,
+0xf8c06303,0xf8d030fc,0x694230fc,0x0f0af013,0xf443bf1c,0xf8c02380,
+0xf8d030fc,0x64d330fc,0xf8c02300,0xf88030fc,0x33083177,0x47706453,
+0x43f7e92d,0x6028f89d,0x4680460f,0x21004699,0x5dcbe002,0x3101b113,
+0xd1fa4291,0xb1135c7b,0x0001f06f,0xb15ee075,0x1c4c1d4b,0xd9024293,
+0x000df06f,0xa801e06d,0x22041939,0xfd4af7ff,0x46201d3c,0x4d354934,
+0xb92847a8,0xd04d2e00,0x2b0f9b01,0xe043d858,0x49314620,0xb90847a8,
+0xe03c3001,0x492f4620,0xb90847a8,0xe0363002,0x492d4620,0xb99847a8,
+0x3003b90e,0x9a01e037,0xd02b2a00,0x300cf8d8,0xf0136bdb,0xd13e0f04,
+0xd8392a07,0x40932301,0x0f83f013,0xe033d11e,0x49224620,0xb90847a8,
+0xe0183004,0x49204620,0xb90847a8,0xe0123005,0x491e4620,0xb90847a8,
+0xe00c3006,0x491c4620,0xb90847a8,0xe0063007,0x491a4620,0xb9d047a8,
+0xe0003008,0xb1362003,0xeb089b01,0xf8c20280,0xe00b3194,0xeb084630,
+0xf5010180,0x463871ca,0xf7ff2204,0x2304fceb,0x3000f8c9,0xe0042000,
+0x001cf06f,0xf06fe001,0xe8bd0016,0x46c083fe,0x00020b7c,0x1e004041,
+0x00020b89,0x00020b95,0x00020ba1,0x00020ba8,0x00020bb1,0x00020bb8,
+0x00020bc3,0x00020bcf,0xb5106a03,0xb9234604,0xf2404805,0xf7fe415f,
+0x4620fbdb,0xff1cf7ff,0x43036a23,0xbd106223,0x00020bd6,0x4604b570,
+0xff12f7ff,0xb1804605,0x3175f894,0x4807b923,0x4135f240,0xfbc4f7fe,
+0xb1236a23,0xf2404803,0xf7fe4137,0x6225fbbd,0xbd702001,0x00020bd6,
+0x4b0ab570,0x460d4604,0xb9184798,0x214d4808,0xfbaef7fe,0x68e26923,
+0x429318eb,0x4804d903,0xf7fe214e,0x82a5fba5,0x46c0bd70,0x1e005ec1,
+0x00020bd6,0x4b0bb570,0x460d4604,0xb9184798,0x21434809,0xfb94f7fe,
+0x429d8aa3,0x4806d903,0xf7fe2144,0x6920fb8d,0x19408aa3,0x61201b5b,
+0xbd7082a3,0x1e005ec1,0x00020bd6,0x4b0cb570,0x460d4604,0xb9184798,
+0x2139480a,0xfb78f7fe,0x68a26923,0x42931b5b,0x4806d203,0xf7fe213a,
+0x6920fb6f,0x1b408aa3,0x612018eb,0xbd7082a3,0x1e005ec1,0x00020bd6,
+0x4604b570,0xe00f2500,0xf8d4b16d,0x42ab30f8,0x4817d104,0x61f8f44f,
+0xfb56f7fe,0x462968a0,0x4b142201,0x46354798,0x21006a60,0x47986ac3,
+0x28004606,0xb1d5d1e8,0x20f4f8d4,0xf8d4b172,0x429330f8,0x480ad104,
+0x71d7f240,0xfb3cf7fe,0xf8d468a0,0x220110f4,0x47984b06,0x30f8f8d4,
+0x50f4f8c4,0xd10242ab,0xf8c42300,0xbd7030f8,0x00020bd6,0x1e005c41,
+0x41f0e92d,0x27004605,0xf895e055,0xb12331b9,0x31b8f895,0x4620b10b,
+0x4b3be00a,0x463168a8,0xf8d54798,0x681b30f0,0xd9064298,0x0028f105,
+0x46322100,0x47984b35,0x6a68e04a,0x47986e03,0xf8956a68,0xf8d04105,
+0x47983084,0xf8851824,0x69344106,0x71a32300,0x3178f895,0x72234631,
+0x3106f895,0xf8852201,0xb2db3107,0xf8d57263,0x6a6831c4,0xf8c53301,
+0x6a0331c4,0xb9d04798,0x10f8f8d5,0x29007963,0xf013d033,0xd0300f0f,
+0x78237862,0x2302ea43,0x091b330f,0x690a0a1a,0x2300bf18,0xf8957193,
+0x72133178,0x2301e021,0x31b8f885,0xf8d5461f,0x681b30f0,0xf105b143,
+0x46200428,0x4b122100,0x46064798,0xd19c2800,0x696ab117,0x64532304,
+0x2b0c8deb,0x6928d903,0xf88cf001,0x2b07e00d,0x6928d80b,0xf888f001,
+0xf895e007,0xf8c531b9,0x2b0060f8,0x2701d1d7,0xe8bde7d9,0x46c081f0,
+0x1e003f55,0x1e003a4d,0x1e003ac5,0xf8d0b570,0x461531a4,0x46048dc2,
+0x468e429a,0x2d02d30c,0x6880d10a,0x22014b0c,0xf8d44798,0x200031a8,
+0xf8c43301,0xe00e31a8,0xf1042100,0x46720028,0x47984b06,0xd1022d02,
+0x31a0f8d4,0x4620b913,0xff52f7ff,0xbd702001,0x1e005c41,0x1e0039cd,
+0x4ff0e92d,0xb0876a43,0x460e4607,0xf8d09201,0xb9238008,0xf2404856,
+0xf7fe6139,0x2400fa65,0x94039404,0xa174f897,0x0f00f1ba,0x6933d117,
+0xf00368b2,0xf1050501,0x1a9b0b0c,0xd225455b,0x9014f8b6,0xf240484a,
+0xf7fe614e,0xf109fa4d,0x4640010c,0x4b471949,0x46044798,0x4640b930,
+0x22014631,0x47984b44,0xe07d4620,0xf7ff4659,0x6931fe9d,0x6920464a,
+0xfb1cf7ff,0x46316833,0x46406023,0x4b3c4652,0x46264798,0x2101b145,
+0xf7ff4630,0x6930fea7,0x22012100,0xfaeaf7ff,0x4630210c,0xfe9ef7ff,
+0x46404b34,0xf8d64631,0x47989010,0xf8ad68fb,0xf8d30016,0xf1baa034,
+0xd1240f02,0xf0136bdb,0xd0200f04,0x31baf897,0xd11c2b01,0x46404631,
+0x47984b29,0x3016f8bd,0x330f8a84,0xf0234605,0xa905030f,0x46524648,
+0x3014f8ad,0xfadef7ff,0x3014f8bd,0x18e44628,0x3016f8bd,0xb2a11ae4,
+0xfe36f7ff,0x4648e005,0x0116f10d,0xf7ff2202,0xf8bdfacd,0xa9063016,
+0xf82143db,0x22023d02,0x0002f109,0xfac2f7ff,0xa9039a01,0xf8970213,
+0xf4032104,0x43136370,0x630bea43,0xf1092208,0x93030004,0xfab2f7ff,
+0x46314638,0xf7ff9a01,0xb128ff29,0x3104f897,0x33012001,0x3104f887,
+0xe8bdb007,0x46c08ff0,0x00020bd6,0x1e005c25,0x1e005c41,0x1e003e11,
+0x1e003e21,0x2200b510,0xff3af7ff,0x46c0bd10,0x690bb510,0xf002791a,
+0x2a6002f0,0x2201bf14,0xf7ff2202,0xbd10ff2d,0xb5708dc3,0xbb4b4605,
+0x211c6880,0x47984b14,0xb3184606,0xf7ff210c,0x6a68fddb,0x47986e03,
+0xf8956a68,0xf8d04105,0x47983084,0x210c1824,0x4106f885,0xf7ff4630,
+0x4628fde5,0x22014631,0xff0af7ff,0xf8d5b928,0x330131cc,0x31ccf8c5,
+0xf8d5e004,0x330131c8,0x31c8f8c5,0x46c0bd70,0x1e005c25,0xf890b510,
+0xb90b3178,0xffc8f7ff,0x46c0bd10,0x3ffff1b2,0xd101b510,0xe00723ff,
+0xd0002a02,0xf082b90a,0x23010202,0xb2db4093,0xf8902901,0xd1012178,
+0xe0014313,0x0303ea22,0x3178f880,0xffacf7ff,0x46c0bd10,0x4604b570,
+0x25006a40,0x47986c83,0x68836a60,0x6a604798,0x47986e43,0x21016a60,
+0x47986a83,0x460a2100,0xf7fe68e0,0x68e0fcd3,0xfcccf7fe,0x10f4f8d4,
+0x5105f884,0x5104f884,0x50fcf8c4,0x68a0b129,0x4b052201,0xf8c44798,
+0xf8c450f4,0x622550f8,0x5174f884,0x46c0bd70,0x1e005c41,0xe92d68c2,
+0x6b5341f3,0x2b024604,0x690e460d,0x6bd3d112,0x0f04f013,0xf890d00e,
+0x2b0131ba,0x8833d10a,0xb29b4628,0xb29b009b,0x8a898033,0x39180089,
+0xfd46f7ff,0x46282108,0xfd5cf7ff,0x0f03f016,0x487fd004,0x61a6f240,
+0xf8f2f7fe,0xb2998873,0x020ff011,0xf011d021,0xd0040f01,0x3154f8d4,
+0xf8c43301,0xf0113154,0xd0040f02,0x3158f8d4,0xf8c43301,0xf0113158,
+0xd0040f04,0x315cf8d4,0xf8c43301,0xf011315c,0xf0000f08,0xf8d4808c,
+0x33013160,0x3160f8c4,0x8aabe085,0xd8082b03,0x3144f8d4,0x330168a0,
+0x3144f8c4,0x4b654629,0x2202e0c3,0xf10d6929,0xf7ff0006,0x6929f99f,
+0x31022202,0xf7ffa801,0x68e2f999,0x2b026b53,0x6bd3d129,0x0f04f013,
+0xf894d025,0x2b0131ba,0x8833d121,0x2006f8bd,0x429ab29b,0xf8d4d004,
+0x33013148,0x3148f8c4,0x3004f8bd,0x43db6928,0xfe83fa1f,0xf10e8801,
+0xf64f020f,0xea0273f0,0x42990303,0xfa1fd107,0xf8a0f38e,0x8033e000,
+0xf8ad8833,0x88333006,0x1006f8bd,0x428bb29b,0x43cbd106,0xf8bd041b,
+0x0c1b2004,0xd015429a,0xb29b8833,0xd004428b,0x3148f8d4,0xf8c43301,
+0x43cb3148,0xf8bd041b,0x0c1b2004,0xd022429a,0x314cf8d4,0xf8c43301,
+0xe01c314c,0x46282104,0xfcc0f7ff,0x2b078aab,0x692bd915,0x78de2108,
+0xf8934628,0x781f8001,0xfcb4f7ff,0xd8042e0b,0xf240482b,0xf7fe710c,
+0xf1a6f84b,0xb2d9030c,0x428b8aab,0x68a0d203,0x22004629,0x4628e77f,
+0xfca0f7ff,0x3105f894,0xd006429f,0x3150f8d4,0x7105f884,0xf8c43301,
+0xf8943150,0xf0083105,0x3301060f,0x3105f884,0x31b9f894,0xf018b1e3,
+0xd1010f40,0xd1172e01,0x31b4f8d4,0x2e013301,0x31b4f8c4,0xf8d4d105,
+0x330131bc,0x31bcf8c4,0xf8d4e004,0x330131c0,0x31c0f8c4,0xf8842300,
+0x462031b8,0xfce4f7ff,0x6920b926,0xf0004629,0xe00bfe2d,0xd1042e02,
+0x46296920,0xfe2cf000,0x68a0e004,0x46294b03,0x47982200,0x81fce8bd,
+0x00020bd6,0x1e005c41,0x4605b570,0x6c836a40,0xe0024798,0xf7ff4628,
+0x6a68fed1,0x47986dc3,0x28004601,0x6a68d1f6,0x47986e43,0x6c436a68,
+0x6a684798,0x47986e03,0xf8956a68,0xf8d04105,0x47983084,0xf8851824,
+0x46284106,0xfe30f7ff,0x46c0bd70,0xf8d0b5f0,0xb0e521a4,0x2101460d,
+0x18524606,0x46684c3c,0x47a0af32,0x21014638,0x47a02210,0xf7ff4630,
+0x6a70fc57,0xf8c62400,0x688340f8,0xb1ad4798,0x20f4f8d6,0x4638b192,
+0x4b324621,0xf8c64798,0xe00b40f4,0x20cef8bd,0x30ccf8bd,0xbf2c429a,
+0xa8324668,0x21004b2b,0x47984622,0x21016a70,0x47986ac3,0x28004604,
+0xe00ed1ec,0x88c24668,0x429a8883,0x2100d204,0x4b224622,0xe0044798,
+0x462168b0,0x4b202201,0xf1064798,0x46280528,0x4b1e2100,0x46044798,
+0xd1e72800,0x68436a70,0xe0064798,0x4630690b,0xf002795a,0xf7ff020f,
+0x2100fcd5,0x4b15a832,0x46014798,0xd1f12800,0x8df2e014,0x31a4f8d6,
+0xd90a429a,0x68b04b0e,0x22014621,0xf8d64798,0x330131a8,0x31a8f8c6,
+0x4628e004,0x46222100,0x47984b06,0x21004668,0x47984b06,0x28004604,
+0xb065d1e3,0x46c0bdf0,0x1e003bcd,0x1e0039cd,0x1e005c41,0x1e003ac5,
+0x4605b570,0x68436a40,0x6a684798,0x47986c43,0x6e036a68,0x6a684798,
+0x4105f895,0x3084f8d0,0x18244798,0xf8856a68,0x49264106,0x47986f03,
+0x1180f8d5,0x00f0f8c5,0xf8d5b1c9,0x23022184,0x0202ea81,0xf7fe68e8,
+0xf8d5fb05,0x23021180,0x460a68e8,0xfb1af7fe,0xf8852300,0xf895317c,
+0xb123317b,0xf44f4818,0xf7fd713d,0xf895ff0d,0xb10b3176,0xe0004b15,
+0x68ea4b15,0x6b5361eb,0xd8052b01,0xf0136bd3,0xd0010f04,0xe0002301,
+0xf8852300,0x696a31b9,0xf8852301,0xf8853175,0xf04f3177,0xf8c27380,
+0xf1033100,0x4628437f,0x317af885,0xfa38f7ff,0x21084628,0xfa3af7ff,
+0x46c0bd70,0x00020b0d,0x00020bd6,0xc701ff0f,0x0701ff0f,0x41f0e92d,
+0xb9204605,0xf2404894,0xf7fd3129,0x6a2cfed1,0xf0142600,0x622e4780,
+0x4628d007,0xfd7ef7ff,0xf7ff4628,0x4634ff81,0x2c00e14a,0x696bda2f,
+0xf013685b,0xd0180604,0x3174f895,0x4628b933,0xf7ff4639,0x4628fee7,
+0xfebef7ff,0xf8856928,0xf0007174,0x696afc87,0x68134628,0xf0432102,
+0x60130304,0xf9faf7ff,0x2301e011,0x3174f885,0xf0006928,0x4628fc79,
+0xf7ff4631,0x4628fecb,0xfea2f7ff,0x6813696a,0x0304f023,0xf8956013,
+0xb10e6174,0xe1132400,0x0f01f014,0x4628d007,0xf7ff2101,0x4628feb7,
+0xf7ff2101,0xf014f9d7,0xd0090f02,0xf8852301,0xf8d53177,0xb11b30fc,
+0x46314628,0xf9caf7ff,0x7f80f414,0xf8d5d004,0x33013164,0x3164f8c5,
+0x7f00f414,0xf8d5d01d,0xf8d53168,0x330120f4,0x3168f8c5,0xf8d5b18a,
+0x429330f8,0x4858d104,0x7165f44f,0xfe58f7fd,0x68a84b56,0x10f4f8d5,
+0x47982201,0xf8c52300,0x462830f4,0xf7ff2100,0xf014fe7d,0xd0047f00,
+0x316cf8d5,0xf8c53301,0xf014316c,0xd0046f80,0x3170f8d5,0xf8c53301,
+0x48493170,0x0000ea04,0x4604b908,0xf414e0b4,0xd06e4f7c,0x6080f414,
+0x4607d102,0xe00b4606,0x6d036a68,0x1e074798,0x2701bf18,0x6a436a68,
+0x1e064798,0x2601bf18,0x6f00f414,0x6a68d00b,0x47986d03,0xbf182800,
+0x6a682701,0x47986a43,0xbf182800,0xf4142601,0xd00b5f80,0x6d036a68,
+0x28004798,0x2701bf18,0x6a436a68,0x28004798,0x2601bf18,0x5f00f414,
+0xf8d5d004,0x33013138,0x3138f8c5,0x4f80f414,0xf8d5d009,0x2701313c,
+0xf8c53301,0xf8d5313c,0xf8d5313c,0xf4143138,0xd01a4f00,0x3140f8d5,
+0x20f4f8d5,0xf8c53301,0xb18a3140,0x30f8f8d5,0xd1044293,0xf2404818,
+0xf7fd41b9,0x4b17fdd9,0xf8d568a8,0x220110f4,0x23004798,0x30f4f8c5,
+0xb90f2601,0xe008b90e,0x4628b126,0xf7ff2100,0xb117fdf9,0xf7ff4628,
+0xf014fdcf,0xd0027f80,0xf7ff4628,0xf414fa59,0xd1133390,0xe033461e,
+0x36014628,0xfc9af7ff,0xd10c2e08,0xf4436a2b,0x622b3380,0x46c0e00d,
+0x00020bd6,0x1e005c41,0x0101fc00,0x6a682600,0x47986dc3,0x28004601,
+0x6a68d1e6,0x47986e03,0xf8956a68,0xf8d04105,0x47983084,0x2107f895,
+0xb2e31824,0xf8854293,0xd0094106,0x3105f895,0x0302ebc3,0x2b02b2db,
+0x4628d802,0xfbe4f7ff,0xbf942e07,0x24012400,0xb12b8deb,0x31a0f8d5,
+0x4628b913,0xfa50f7ff,0xe8bd4620,0x46c081f0,0xb5702901,0xdd074605,
+0xf8c02300,0xf8c031b4,0xf8c031bc,0xe02331c0,0xf8d54c12,0x8de921a4,
+0x47a04811,0x11a8f8d5,0x47a04810,0x31c0f8d5,0x21bcf8d5,0x11b4f8d5,
+0x47a0480d,0x113cf8d5,0x47a0480c,0x1106f895,0x2107f895,0x47a0480a,
+0xf8d5480a,0xf8d511c4,0xf8d521c8,0x47a031cc,0x46c0bd70,0x1e004461,
+0x00020be1,0x00020bf7,0x00020c0a,0x00020c35,0x00020c51,0x00020c7a,
+0x30fff04f,0x46c04770,0xb5106a83,0xf0006998,0xbd10fbaf,0x4604b510,
+0xf7ff6880,0xb158fe4b,0xf1042100,0x460a001c,0x47984b05,0x4805b938,
+0xf7fd2154,0xe002fd19,0xf7ff68a0,0xbd10f865,0x1e005a21,0x00020d06,
+0x6a84b510,0xb91b68a3,0x21684807,0xfd08f7fd,0xf7ff68a0,0xb128f933,
+0xf7ff68a0,0x4620f84b,0xffd4f7ff,0x46c0bd10,0x00020d06,0xb5106a83,
+0xf0006998,0xbd10fb7f,0xb5106a8b,0x46116998,0xfb44f000,0x46c0bd10,
+0x6844b510,0xf7ff68a0,0x4620f903,0xffbaf7ff,0x46c0bd10,0x4b06b510,
+0x47984604,0x4805b918,0xf7fd2175,0x8ae0fcd9,0x1000f3c0,0x46c0bd10,
+0x1e005ec1,0x00020d41,0x4b0cb570,0x460c4606,0xb9184798,0x215c480a,
+0xfcc6f7fd,0x0507f004,0xd00342a5,0x215d4806,0xfcbef7fd,0xf0238af3,
+0xea450307,0x82f30303,0x46c0bd70,0x1e005ec1,0x00020d41,0x4b06b510,
+0x47984604,0x4805b918,0xf7fd2155,0x8ae0fca9,0x0007f000,0x46c0bd10,
+0x1e005ec1,0x00020d41,0x4b0bb570,0x460d4604,0xb9184798,0x21434809,
+0xfc96f7fd,0x429d8aa3,0x4806d903,0xf7fd2144,0x6920fc8f,0x19408aa3,
+0x61201b5b,0xbd7082a3,0x1e005ec1,0x00020d41,0xe92d8a8b,0x2b0341f0,
+0x6880460c,0x690dd934,0x091b782b,0xd12f2b01,0x460878ab,0xf0034f1a,
+0x47b8060f,0x4819b918,0xf7fd218f,0x8ae3fc6d,0x621ff64f,0x0202ea03,
+0xb11682e2,0x1346ea42,0x786982e3,0xf0014620,0xf7ff0107,0x782bff8d,
+0x0f08f013,0x4620d00a,0xb91847b8,0x216b480b,0xfc52f7fd,0xf0438ae3,
+0x82e30308,0x21044620,0xffaaf7ff,0xe0042000,0x22004621,0x47984b04,
+0xe8bd2001,0x46c081f0,0x1e005ec1,0x00020d41,0x1e005c41,0x688a690b,
+0x41f0e92d,0x2b031a9b,0x6887460c,0xf8b1dc37,0x46388014,0x0104f108,
+0x47984b39,0xb9304605,0x46384621,0x4b372201,0x462c4798,0x4620e065,
+0xff6cf7ff,0x46284601,0xff4af7ff,0xf7ff4620,0x4b31ff35,0x46284606,
+0xb9184798,0x217c482f,0xfc0ef7fd,0xb1168aeb,0x0310f043,0xf023e001,
+0x69280310,0x82eb6921,0x30044642,0xfce6f7fe,0x46384621,0x4b232201,
+0x462c4798,0x4608e016,0x47984b21,0x4821b918,0xf7fd2139,0x6923fbf1,
+0x3b0468a2,0xd2034293,0x213a481c,0xfbe8f7fd,0x3b046923,0x8aa36123,
+0x82a33304,0x23106925,0x4620702b,0xfefaf7ff,0x782bb118,0x0304f043,
+0x4620702b,0xff22f7ff,0x70684f0f,0x78ae4620,0xb91847b8,0x2187480d,
+0xfbcaf7fd,0x46208ae3,0x1343f3c3,0x0303ea46,0x47b870ab,0x4807b918,
+0xf7fd21ab,0x8b63fbbd,0x462070eb,0x81f0e8bd,0x1e005c25,0x1e005c41,
+0x1e005ec1,0x00020d41,0xb5104601,0x4b022234,0x47986880,0x46c0bd10,
+0x1e005c15,0x4ff0e92d,0x4688690e,0x7014f8b8,0xb08d68b2,0x2f0f2100,
+0x46826835,0x910b9204,0x9106d803,0x91079105,0x6874e01b,0x041b0c23,
+0xb16b940b,0x04230c1a,0x42970c1b,0xd206930b,0x040df06f,0x9106910b,
+0x91079105,0x4614e0b3,0xf5b0980b,0xd9075f00,0x930b2300,0x93059306,
+0xf06f9307,0xe0a60417,0xbf284284,0x90074620,0x2100b160,0x47984b85,
+0xb1089005,0xe0089006,0xf06f9b05,0x930b041a,0xe0949306,0x92059a07,
+0xb14c9206,0x0210f1a7,0xf1069805,0x42940110,0x4622bf38,0xfc3af7fe,
+0x429d4b79,0x462ed001,0x2c07e00a,0x9b05d9d5,0x685e9a04,0x0202f042,
+0x93053308,0x92043c08,0x19754d72,0x7f99f5b5,0x4635bf88,0x7f83f5b5,
+0xd804d035,0xd0412d02,0xd0102dfd,0xf240e044,0x429d1307,0x3304d01c,
+0xd13d429d,0x0000f8da,0x4a672100,0x737af44f,0x47a04c66,0x9a05e032,
+0x0000f8da,0x78537891,0xea410409,0x78132103,0x43192400,0xea4178d3,
+0xf0006103,0xe046f8f3,0x495d9805,0x4b5d2204,0x46074798,0x2301b9e0,
+0x0004f8da,0x93009905,0x463b4622,0x9805e00b,0x22044955,0x47984b55,
+0x9000b970,0xf8da9905,0x9a0b0004,0xf7feab0b,0xe003fe73,0x0000f8da,
+0xf8def000,0xe0224604,0x93092300,0x9b04930a,0xf013a90a,0xd00a0202,
+0x9300ab09,0x0000f8da,0x9a052301,0x93029101,0x46234631,0xab0be008,
+0x92029300,0x0000f8da,0x9b0b9a05,0x46319101,0xf8d2f000,0xb1084604,
+0x930b9b0a,0x46414635,0x0008f8da,0x4b3a2200,0xf8dd4798,0xf240b02c,
+0x2c007343,0x465fbf0c,0xf1072700,0x429a022c,0x46b8bf94,0x68e3f44f,
+0x0008f8da,0x012cf108,0x47984b30,0xb9204606,0x2153482f,0xfaacf7fd,
+0x4b2ee073,0x091cf108,0xb9184798,0x214d482a,0xfaa2f7fd,0x68f26933,
+0x4293444b,0x4826d903,0xf7fd214e,0xf8a6fa99,0x46309014,0xf7ff210c,
+0x9a04fdf3,0x0c136930,0xf8c06005,0x041bb004,0xf043b10c,0x60830301,
+0x60c49b05,0xf1b8b163,0xd0090f00,0x30104642,0xf7fe4619,0x9a05fb63,
+0x0707ebc8,0x92054442,0xe03546b0,0x7344f240,0xbf34429f,0x461d463d,
+0x0008f8da,0x4b0d4629,0x46044798,0xf8dab9e0,0x46310008,0x4b082201,
+0xe02a4798,0x1e00578d,0xfffeda3e,0x001bebe0,0x000031c5,0x1e005a65,
+0x00020d4a,0x1e0040b9,0x1e005c41,0x1e005c25,0x00020d41,0x1e005ec1,
+0x99056900,0xf7fe462a,0x9b05fb2d,0x4000f8c8,0x9305195b,0x46a01b7f,
+0xb10a9a05,0xd1c52f00,0x0004f8da,0xf7ff4631,0x9b06f885,0x4619b12b,
+0x0008f8da,0x4b029a07,0xb00d4798,0x8ff0e8bd,0x1e005c15,0x46c04770,
+0x46c04770,0x46c04770,0x46c04770,0x6880b510,0xff26f7fd,0x46c0bd10,
+0xb5106803,0x21016898,0xfeecf7fd,0x46c0bd10,0xb5106c03,0xb9234604,
+0xf44f4806,0xf7fd7193,0x6c20fa0b,0x685b6a03,0xb9104798,0xf8842301,
+0xbd103045,0x00020d4f,0x41ffe92d,0x6c034698,0x460f4604,0xf89d4615,
+0xb91b6030,0x2132480c,0xf9f2f7fd,0x0f03f015,0x4809d003,0xf7fd2134,
+0x6c20f9eb,0x6a029b0a,0x9b0b9300,0x93019602,0x46396954,0x4643462a,
+0xb00447a0,0x81f0e8bd,0x00020d4f,0x68c0b510,0xfe30f7ff,0x46c0bd10,
+0xb5704b11,0x4604681b,0x460d4298,0x480fd003,0xf7fd21b1,0x68e0f9c9,
+0xf7ff4629,0xb988fd41,0x4b0b4629,0x47986860,0x46026c21,0x6be06a0b,
+0x479868db,0x6aa3b118,0x62a33301,0x6923e002,0x61233301,0x46c0bd70,
+0x00023c58,0x00020d4f,0x1e005cb1,0xb5704b13,0x4604681b,0x460d4298,
+0x4811d003,0xf7fd2196,0x4629f99f,0x68604b0f,0x46014798,0xf7ff68e0,
+0x4605fd5d,0x6820b178,0xf7fe4629,0xb138ffe5,0x69e28aab,0x696318d2,
+0x330161e2,0xe0026163,0x33016ae3,0x200062e3,0x46c0bd70,0x00023c58,
+0x00020d4f,0x1e005c9d,0x6800b510,0xf80af7ff,0x46c0bd10,0x6800b510,
+0xf80cf7ff,0x46c0bd10,0x00408900,0x46c04770,0xb5108983,0xfbb2460c,
+0xfb03f1f3,0x02092311,0x03fff003,0x4300f043,0x417ff401,0x2200430b,
+0xe00061a3,0x69a03201,0xda032800,0x429a4b07,0xe008d1f8,0x429a4b06,
+0xf010d805,0xd1025f80,0x7040f3c0,0xf04fe001,0xbd1030ff,0x00989680,
+0x0098967f,0xb5708903,0x460d429a,0xd3034614,0x21df4807,0xf938f7fd,
+0x4805b91d,0xf7fd21e0,0x0063f933,0x6300f503,0xb2805ae8,0x46c0bd70,
+0x00020d5e,0x4ff0e92d,0xb0874607,0x91016800,0x461d4614,0xfc42f7fd,
+0x46832100,0xf7fd6838,0x4681fd61,0x4828b920,0x21ddf240,0xf914f7fd,
+0xf7ff4638,0x4621ffa1,0x462a4682,0xf7fea802,0x2600f8bd,0xf016e02d,
+0xd1040f03,0x491fa802,0xf7fe0072,0x9b01f90b,0x4638b933,0x46324649,
+0xffb8f7ff,0xe0164604,0xea4f2400,0x46251806,0x46494638,0x0208eb05,
+0xff82f7ff,0x3ffff1b0,0xf64fd102,0xe00674ff,0xf305fa10,0x43233501,
+0xb29c2d10,0xa802d1ec,0x4622490d,0xf8e6f7fe,0xebb63601,0xd3ce0f5a,
+0x490aa802,0xf8def7fe,0x46596838,0xfd16f7fd,0x98049b02,0x0003ebc0,
+0xe8bdb007,0x46c08ff0,0x00020d5e,0x00020d67,0x00020d70,0x00021250,
+0xe92d6943,0x2b1441f0,0xf3404605,0xf7fd8083,0x4606fbe5,0xd17d2800,
+0xf7fd4628,0x2800fc0b,0x4c3ed078,0x46312224,0xf7fe4620,0x4628f96f,
+0xf7fd6025,0x69abfba3,0xf3c36060,0x2b0143c2,0x2b05d002,0xe065d009,
+0x0320f04f,0xf04f8163,0x81a30340,0x0380f04f,0xf04fe007,0x81630360,
+0x0340f04f,0xf44f81a3,0x462873c0,0xf7fd8123,0x2100fba9,0x46284607,
+0xfcc8f7fd,0xb9184606,0x21ce4827,0xf87cf7fd,0x4a246933,0x68136113,
+0x2b15695b,0x2b18d003,0x2b1bd001,0x4b1fd103,0x621a220c,0x2b17e005,
+0x2b18d001,0x2314dd01,0x4c1a6213,0x6a228923,0x692382e3,0xf4131d11,
+0x82a17f80,0x4620d008,0xf7ff4631,0xf3c0ff17,0x82e0100f,0xe0008320,
+0x4c108321,0x83638923,0xf4136923,0xd00a7f00,0x46206a22,0x32014631,
+0xff04f7ff,0x100ff3c0,0x83a08360,0x8b23e001,0x4c0683a3,0x89234628,
+0x83e34639,0xfc7ef7fd,0xe0004620,0xe8bd2000,0x46c081f0,0x00023c28,
+0x00020d5e,0x41f0e92d,0x46804b13,0xe01e681e,0x68f468b3,0x18e74640,
+0x47984b10,0xe0104605,0x46414620,0x4b0e462a,0xb9304798,0x2b3d5d63,
+0x1c63d103,0xd10d1958,0xf814e008,0x2b003b01,0x42bcd1fb,0x7823d202,
+0xd1e92b00,0x2e006836,0x4630d1de,0x81f0e8bd,0x00023c4c,0x1e0040a9,
+0x1e00d671,0x4ff0e92d,0x9301b0d1,0x03e6f640,0x4604429a,0x92024689,
+0xf06fbf88,0xf2000003,0xf01481f5,0xf0400f03,0x68218259,0x407ff401,
+0xf401060b,0xea43027f,0xea432300,0xea432312,0x93486311,0xf4016861,
+0x060b407f,0x027ff401,0x2300ea43,0x2312ea43,0x6311ea43,0x68a19349,
+0x407ff401,0xf401060b,0xea43027f,0xea432300,0xea432312,0x934a6311,
+0xf40268e2,0x0e13017f,0x2311ea43,0x6302ea43,0x427ff402,0x2302ea43,
+0x4ad1934b,0xf10d9b48,0x40530c10,0x3000f8cc,0x4ace9b49,0xe344f8df,
+0xf8cc4053,0x9b4a3004,0x4ecc4acb,0xf8cc4053,0x9b4b3008,0xf50d4aca,
+0x40537a94,0x7b96f50d,0x300cf8cc,0x25004667,0x08a0f10d,0x68b8687b,
+0x405868fa,0x100ef855,0x40484050,0x027ff400,0xf4000c12,0x0a1b437f,
+0x5cf45cb1,0x03fff000,0x04095cf2,0xea410e00,0x43112104,0xf8555c32,
+0xea41300c,0xea816102,0xea830303,0xea8343f1,0x613b2371,0x3008f845,
+0x37043504,0xd1d52d80,0x0f03f019,0x81c2f040,0x1000f8d9,0x407ff401,
+0xf401060b,0xea43027f,0xea432300,0xea432312,0x93486311,0x1004f8d9,
+0x407ff401,0xf401060b,0xea43027f,0xea432300,0xea432312,0x93496311,
+0x1008f8d9,0x407ff401,0xf401060b,0xea43027f,0xea432300,0xea432312,
+0x934a6311,0x100cf8d9,0x007ff401,0xea430e0b,0xf4012310,0xea43427f,
+0xea432302,0x934b6301,0x09009802,0xf0009003,0x9f01809a,0x0900f04f,
+0x46659b48,0x3000f8cc,0xf04f9a49,0xf8cc0e00,0xf8da2004,0xf8cc3000,
+0xf8db3008,0xf8cc2000,0x686b200c,0x68ea68a8,0x1008f85e,0x40504058,
+0xf4004048,0x0c12027f,0x437ff400,0x5cb10a1b,0xf0005cf4,0x5cf203ff,
+0x0e000409,0x2104ea41,0x5c324311,0x300cf85e,0x6102ea41,0x0303ea81,
+0x73b1ea83,0x53b1ea83,0x33b1ea83,0x2331ea83,0x0e04f10e,0x3504612b,
+0x0f80f1be,0x9827d1d1,0x9a259b26,0x90489349,0x2000f8ca,0x0e029b24,
+0x3000f8cb,0x0c039949,0x2130f88d,0x3131f88d,0x0e0b0a02,0x0133f88d,
+0xf88d984a,0x0a0b3134,0x2132f88d,0x3136f88d,0x0e030c0a,0x1137f88d,
+0xf88d994b,0x0a033138,0x2135f88d,0x313af88d,0x0e0b0c02,0x2139f88d,
+0x313cf88d,0x0a0b0c0a,0x0f03f017,0x013bf88d,0x213df88d,0x313ef88d,
+0x113ff88d,0x80b5f040,0x683b9a4c,0x603b4053,0x687a9b4d,0x607a405a,
+0x68bb9a4e,0x60bb4053,0x9b4f68fa,0x60fa405a,0xf1099a03,0x37100901,
+0xf47f4591,0x9c01af6d,0x18e40113,0x98029401,0x0e0ff010,0x8091f000,
+0x46659b48,0x3000f8cc,0x27009a49,0x2004f8cc,0x3000f8da,0x3008f8cc,
+0x2000f8db,0x200cf8cc,0x68a8686b,0xf85768ea,0x40581008,0x40484050,
+0x027ff400,0xf4000c12,0x0a1b437f,0x5cf45cb1,0x03fff000,0x04095cf2,
+0xea410e00,0x43112104,0xf8575c32,0xea41300c,0xea816102,0xea830303,
+0xea8373b1,0xea8353b1,0xea8333b1,0x37042331,0x3504612b,0xd1d32f80,
+0x9b269827,0x93499a25,0xf8ca9048,0x9b242000,0xf8cb0e02,0x99493000,
+0xf88d0c03,0xf88d2130,0x0a023131,0xf88d0e0b,0x984a0133,0x3134f88d,
+0xf88d0a0b,0xf88d2132,0x0c0a3136,0xf88d0e03,0x994b1137,0x3138f88d,
+0xf88d0a03,0xf88d2135,0x0c02313a,0xf88d0e0b,0xf88d2139,0x0c0a313c,
+0xf88d0a0b,0xf88d113f,0xf88d013b,0xf88d213d,0x2100313e,0x46c0e00c,
+0xa3b1bac6,0x56aa3350,0x677d9197,0x00020df8,0xb27022dc,0x00020d78,
+0xf5019a01,0x5c8b7098,0x2000f81d,0x4053466c,0x548b9a01,0x45713101,
+0x2000d1f2,0xe8bdb051,0xf89d8ff0,0x783b2130,0x703b4053,0x3131f89d,
+0x405a787a,0xf89d707a,0x78bb2132,0x70bb4053,0x3133f89d,0x405a78fa,
+0xf89d70fa,0x793b2134,0x713b4053,0x3135f89d,0x405a797a,0xf89d717a,
+0x79bb2136,0x71bb4053,0x3137f89d,0x405a79fa,0xf89d71fa,0x7a3b2138,
+0x723b4053,0x3139f89d,0x405a7a7a,0xf89d727a,0x7abb213a,0x72bb4053,
+0x313bf89d,0x405a7afa,0xf89d72fa,0x7b3b213c,0x733b4053,0x313df89d,
+0x405a7b7a,0xf89d737a,0x7bbb213e,0x73bb4053,0xf89d7bfa,0x405a313f,
+0xe70973fa,0x24004648,0x7843af48,0x1009f814,0x041b78c2,0x6301ea43,
+0x43137881,0x2301ea43,0x340451e3,0x2c103004,0xe661d1ef,0x25004620,
+0x7843af48,0x78c25d29,0xea43041b,0x78816301,0xea434313,0x51eb2301,
+0x30043504,0xd1f02d10,0x46c0e5c7,0x4ff0e92d,0x9202b0d5,0x18d29301,
+0x3c01f812,0xf812468c,0xf6401c02,0xea4302e6,0x42912101,0xf8dd4604,
+0x9103a178,0xf06fbf88,0xf2000002,0xf014826a,0xf0400f03,0x682183d2,
+0x407ff401,0xf401060b,0xea43027f,0xea432300,0xea432312,0x93506311,
+0xf4016861,0x060b407f,0x027ff401,0x2300ea43,0x2312ea43,0x6311ea43,
+0x68a19351,0x407ff401,0xf401060b,0xea43027f,0xea432300,0xea432312,
+0x93526311,0xf40168e1,0x060b407f,0x2300ea43,0x027ff401,0x2312ea43,
+0x6311ea43,0x4ab19353,0xf10d9b50,0x40530810,0x3000f8c8,0x4aae9b51,
+0xe2c4f8df,0xf8c84053,0x9b523004,0x4eac4aab,0xf8c84053,0x9b533008,
+0x46474aaa,0xf8c84053,0x2500300c,0x09a0f10d,0x68b8687b,0x405868fa,
+0x100ef855,0x40484050,0x027ff400,0xf4000c12,0x0a1b437f,0x5cf45cb1,
+0x03fff000,0x04095cf2,0xea410e00,0x43112104,0xf8555c32,0xea413008,
+0xea816102,0xea830303,0xea8343f1,0x613b2371,0x3009f845,0x37043504,
+0xd1d52d80,0x0f03f01c,0x833af040,0x1000f8dc,0x407ff401,0xf401060b,
+0xea43027f,0xea432300,0xea432312,0x93506311,0x1004f8dc,0x407ff401,
+0xf401060b,0xea43027f,0xea432300,0xea432312,0x93516311,0x1008f8dc,
+0x407ff401,0xf401060b,0xea43027f,0xea432300,0xea432312,0x93526311,
+0x100cf8dc,0x407ff401,0xea43060b,0xf4012300,0xea43027f,0xea432312,
+0x93536311,0x46459b50,0x3000f8c8,0x27009a51,0x2004f8c8,0xf8c89b52,
+0x9a533008,0x200cf8c8,0x68a8686b,0xf85768ea,0x40581009,0x40484050,
+0x027ff400,0xf4000c12,0x0a1b437f,0x5cf45cb1,0x03fff000,0x04095cf2,
+0xea410e00,0x43112104,0xf8575c32,0xea413008,0xea816102,0xea830303,
+0xea8373b1,0xea8353b1,0xea8333b1,0x37042331,0x3504612b,0xd1d32f80,
+0x99029b27,0x9b26934c,0x1b11ea5f,0x9b25934d,0x9b24934e,0xf000934f,
+0x9f018093,0x0c00f04f,0x0f03f017,0x8299f040,0xf4016839,0x060b407f,
+0x027ff401,0x2300ea43,0x2312ea43,0xea439a4c,0x405a6311,0x68799250,
+0x407ff401,0xf401060b,0xea43027f,0xea432300,0x9a4d2312,0x6311ea43,
+0x9251405a,0xf40168b9,0x060b407f,0x027ff401,0x2300ea43,0x2312ea43,
+0xea439a4e,0x405a6311,0x68f99252,0xf4019a4f,0x021b437f,0x6311ea43,
+0x6301ea43,0x017ff401,0x2311ea43,0x9253405a,0x37109b50,0x3000f8c8,
+0x46459a51,0x2004f8c8,0xf04f9b52,0xf8c80e00,0x9a533008,0x200cf8c8,
+0x68a8686b,0xf85e68ea,0x40581009,0x40484050,0x027ff400,0xf4000c12,
+0x0a1b437f,0x5cf45cb1,0x03fff000,0x04095cf2,0xea410e00,0x43112104,
+0xf85e5c32,0xea413008,0xea816102,0xea830303,0xea8373b1,0xea8353b1,
+0xea8333b1,0xf10e2331,0x612b0e04,0xf1be3504,0xd1d10f80,0x9a269b27,
+0x924d934c,0x9a249b25,0x0c01f10c,0x934e45dc,0xf47f924f,0x9a01af75,
+0x130bea4f,0x920118d2,0xf0139b02,0xf040040f,0xe00b8160,0xa3b1bac6,
+0x56aa3350,0x677d9197,0x00020df8,0xb27022dc,0x00020d78,0xea5f9903,
+0xf0001c11,0x27008090,0x0f03f01a,0x81d4f040,0x1000f8da,0x407ff401,
+0xf401060b,0xea43027f,0xea432300,0x9a4c2312,0x6311ea43,0x9250405a,
+0x1004f8da,0x407ff401,0xf401060b,0xea43027f,0xea432300,0x9a4d2312,
+0x6311ea43,0x9251405a,0x1008f8da,0x407ff401,0xf401060b,0xea43027f,
+0xea432300,0x9a4e2312,0x6311ea43,0x9252405a,0x100cf8da,0x407ff401,
+0xf401060b,0xea43027f,0xea432300,0x9a4f2312,0x6311ea43,0x9253405a,
+0xf10a9b50,0xf8c80a10,0x9a513000,0xf8c84645,0x9b522004,0x0e00f04f,
+0x3008f8c8,0xf8c89a53,0x686b200c,0x68ea68a8,0x1009f85e,0x40504058,
+0xf4004048,0x0c12027f,0x437ff400,0x5cb10a1b,0xf0005cf4,0x5cf203ff,
+0x0e000409,0x2104ea41,0x5c324311,0x3008f85e,0x6102ea41,0x0303ea81,
+0x73b1ea83,0x53b1ea83,0x33b1ea83,0x2331ea83,0x0e04f10e,0x3504612b,
+0x0f80f1be,0x9b27d1d1,0x934c9a26,0x9b25924d,0x37019a24,0x934e45bc,
+0xf47f924f,0x9a03af71,0x0b0ff012,0x994cd12c,0x0004f10a,0xf88a0e0b,
+0x0c0a3000,0xf88a0a0b,0xf88a2001,0xf88a3002,0x994d1003,0x0e0b1d04,
+0x3004f88a,0x0a0b0c0a,0x70837042,0x994e70c1,0x71030e0b,0x0a0b0c0a,
+0x70a37062,0x994f70e1,0x0e0b1d20,0x0c0a7123,0x70420a0b,0x70c17083,
+0xb0552000,0x8ff0e8bd,0x4628ad48,0x465a4651,0xfbd8f7fd,0x000beb05,
+0xf1cb2100,0xf7fd0210,0x9948fbb1,0xf4014645,0x060b407f,0x027ff401,
+0x2300ea43,0x2312ea43,0xea439a4c,0x99496311,0xf4014053,0x9350407f,
+0xf401060b,0xea43027f,0xea432300,0x9a4d2312,0x6311ea43,0x4053994a,
+0x407ff401,0x060b9351,0x027ff401,0x2300ea43,0x2312ea43,0xea439a4e,
+0x994b6311,0x93524053,0x407ff401,0xf401060b,0xea43027f,0xea432300,
+0x9a4f2312,0x6311ea43,0x9a504053,0xf8c89353,0x9b512000,0xf8c82700,
+0x9a523004,0x2008f8c8,0xf8c89b53,0x686b300c,0x68ea68a8,0x1009f857,
+0x40504058,0xf4004048,0x0c12027f,0x437ff400,0x5cb10a1b,0xf0005cf4,
+0x5cf203ff,0x0e000409,0x2104ea41,0x5c324311,0x3008f857,0x6102ea41,
+0x0303ea81,0x73b1ea83,0x53b1ea83,0x33b1ea83,0x2331ea83,0x612b3704,
+0x2f803504,0x9b27d1d3,0x934c9a26,0x9b25924d,0x44da9a24,0x924f934e,
+0xad48e745,0x99014628,0xf7fd4622,0x1928fb4b,0xf1c42100,0xf7fd0210,
+0x9948fb25,0xf4014645,0x060b407f,0x027ff401,0x2300ea43,0x2312ea43,
+0xea439a4c,0x99496311,0xf4014053,0x9350407f,0xf401060b,0xea43027f,
+0xea432300,0x9a4d2312,0x6311ea43,0x4053994a,0x407ff401,0x060b9351,
+0x027ff401,0x2300ea43,0x2312ea43,0xea439a4e,0x994b6311,0x93524053,
+0x007ff401,0xf4010e0b,0xea43427f,0xea432310,0x9a4f2302,0x6301ea43,
+0x9a504053,0xf8c89353,0x9b512000,0xf8c82700,0x9a523004,0x2008f8c8,
+0xf8c89b53,0x686b300c,0x68ea68a8,0x1009f857,0x40504058,0xf4004048,
+0x0c12027f,0x437ff400,0x5cb10a1b,0xf0005cf4,0x5cf203ff,0x0e000409,
+0x2104ea41,0x5c324311,0x3008f857,0x6102ea41,0x0303ea81,0x73b1ea83,
+0x53b1ea83,0x33b1ea83,0x2331ea83,0x612b3704,0x2f803504,0x9b27d1d3,
+0x934c9a26,0x9b25924d,0x934e9a24,0xe621924f,0x46212400,0x7ea0f50d,
+0x0089ad4c,0x000aeb01,0x200af811,0x784178c3,0x6302ea43,0xea437882,
+0xf8554301,0xea431024,0x404b2302,0x3024f84e,0x2c043401,0xd1e84621,
+0x2400e64e,0xf50d4621,0xad4c7ea0,0x19c80089,0x78c35dca,0xea437841,
+0x78826302,0x4301ea43,0x1024f855,0x2302ea43,0xf84e404b,0x34013024,
+0x46212c04,0xe587d1ea,0x46212400,0x7ea0f50d,0xeb010089,0xf811000c,
+0x78c3200c,0xea437841,0x78826302,0x4301ea43,0x2302ea43,0x3024f84e,
+0x2c043401,0xd1eb4621,0x2500e4e4,0xf50d4629,0x00897ea0,0x5d0a1908,
+0x784178c3,0x6302ea43,0xea437882,0xea434301,0xf84e2302,0x35013025,
+0x46292d04,0xe44ad1ed,0x4ff0e92d,0xf10db09b,0x461c0826,0x460f4606,
+0x21004615,0x46402222,0xfa30f7fd,0x78227863,0x2003ea42,0x010cf000,
+0xd0042908,0x0001f06f,0xe8bdb01b,0xf4108ff0,0xd0f74f80,0x0380f000,
+0xbf0c2b00,0x2202461a,0x92079206,0x7240f400,0x212abf0c,0xf5b2212c,
+0xbf147f40,0x0900f04f,0x0901f04f,0x0f00f1b9,0x46cabf0c,0x0a06f04f,
+0x0b01eb0a,0x0210f10b,0xd2d742aa,0x738ff24c,0x0303ea00,0x3026f88d,
+0x0a1b1d21,0xa80a220c,0x3027f88d,0xfa12f7fd,0xf10d7da3,0xf0030036,
+0xf88d030f,0xf1043034,0x0a1b0110,0xf88d2206,0xf7fd3035,0xf1b9fa03,
+0xd15e0f00,0x0918f104,0x2b009b06,0xf10dd161,0x92050242,0x0c43f10d,
+0x0e44f10d,0x0145f10d,0xeb099b07,0xf8120203,0xeb02300a,0x9a05000a,
+0x0901f04f,0x78427013,0x2000f88c,0x0c05ebcb,0x0210f1ac,0xf88e0a13,
+0x700a3000,0xf88d7883,0xab123057,0x9a039303,0x0302ebc9,0x0209eb00,
+0xf1097891,0xf1b90901,0x73d90f10,0xeb04d1f3,0x46300a0b,0xf10ca912,
+0x46530210,0xf8def7ff,0xf47f2800,0x1964af77,0x4621ad16,0x4628464a,
+0xf9b8f7fd,0x46389b06,0x0220f103,0x4643a912,0xa000f8cd,0xfb4af7ff,
+0xf47f2800,0x4620af63,0x464a4629,0x47984b10,0xbf182800,0x0002f06f,
+0xf104e75a,0xa80f0918,0x22064649,0xf99af7fd,0xf819e79a,0xeb0a300a,
+0xf88d0204,0x7e533042,0x0c45f10d,0x3043f88d,0x0e46f10d,0xf10dab11,
+0x93050147,0x46c0e794,0x1e00d671,0x4ff0e92d,0xf10db095,0x461c071e,
+0x460e4680,0x21004615,0x46382222,0xf956f7fd,0x78227863,0x2003ea42,
+0x010cf000,0xd0042908,0x30fff04f,0xe8bdb015,0xf4108ff0,0xd0f74f80,
+0x0380f000,0xbf0c2b00,0x2202461a,0x92059204,0x7240f400,0x212abf0c,
+0xf5b2212c,0xbf147f40,0x0900f04f,0x0901f04f,0x0f00f1b9,0x46cabf0c,
+0x0a06f04f,0x0b01eb0a,0xd2d945ab,0x738ff24c,0x0303ea00,0x301ef88d,
+0x0a1b1d21,0xa808220c,0x301ff88d,0xf93af7fd,0xf10d7da3,0xf003002e,
+0xf88d030f,0xf104302c,0x0a1b0110,0xf88d2206,0xf7fd302d,0xf1b9f92b,
+0xd1460f00,0x0918f104,0x2b009b04,0xf10dd149,0x9203023a,0x0c3bf10d,
+0xf10da80f,0x9b05013d,0x0505ebcb,0x0203eb09,0x300af812,0x0e0aeb02,
+0xf10d9a03,0x70130940,0x2001f89e,0xf88c0a2b,0x70032000,0xf89e700d,
+0x20013002,0x304ff88d,0x0200eb0e,0x0309ebc0,0x30017891,0x73d92810,
+0x9b04d1f6,0xf103445c,0x46300220,0x463b4649,0xf7ff9400,0x2800fa8b,
+0xaf7ef47f,0x46494640,0x0210f105,0xf7ff4623,0x2800f801,0xaf76f43f,
+0xf104e772,0xa80d0918,0x22064649,0xf8daf7fd,0xf819e7b2,0xeb0a300a,
+0xf88d0204,0x7e53303a,0x0c3df10d,0x303bf88d,0x003ef10d,0xf10dab0f,
+0x9303013f,0x46c0e7ab,0x47702000,0x47706880,0xb5106883,0xb1206b58,
+0x699b6a03,0x4798b10b,0x4803e004,0x3172f240,0xffcef7fb,0x46c0bd10,
+0x00020ef8,0xb5106803,0xb9234604,0xf44f4807,0xf7fb71e2,0x68e3ffc1,
+0x4804b923,0x71e2f44f,0xffbaf7fb,0x686068e3,0xbd104798,0x00020ef8,
+0x6803b510,0x7c584604,0x6860b118,0xf0062101,0x6823f97d,0xb1837c5b,
+0x2100b160,0x0038f104,0x4b06460a,0xb9404798,0xf2404805,0xf7fb219b,
+0xe002ff9b,0xf0006860,0xbd10fe81,0x1e005a21,0x00020ef8,0x6a84b513,
+0x0107f10d,0xf0026860,0xb128f9e9,0x3007f89d,0x4620b113,0xffd0f7ff,
+0x46c0bd1c,0x6840b510,0xfe68f000,0x46c0bd10,0x6a83b507,0x92002200,
+0x21026858,0xf0074613,0xbd0ef931,0x47ffe92d,0xf46f4699,0x440b4309,
+0x46174688,0x468a6a85,0xd80a2b0a,0xf003e8df,0x2c29130d,0x64615c57,
+0x00200667,0x08a2f04f,0x2000e074,0x3afff04f,0x2200e071,0xf8cd9700,
+0x92029004,0x2301e005,0xf8cd9700,0x93029004,0x92032200,0x49386868,
+0xf0074613,0xe05ef867,0x97002200,0x9004f8cd,0x92039202,0x49336868,
+0xf240e7f2,0xe02d53dc,0x7c5b682b,0x6868b113,0x47984b2f,0x2400682a,
+0x33e0f8d2,0x612b62ac,0x33a4f8d2,0x616b62ec,0x33e4f8d2,0x61ab4638,
+0x33a8f8d2,0x0110f105,0xf8d261eb,0x622b33e8,0x33b0f8d2,0xf8d2626b,
+0xf1b93570,0xbf340f24,0x2224464a,0xf7fc632b,0x4620fff5,0x682be027,
+0x3022f893,0xe021603b,0x683b682a,0x3022f882,0xf04fe01c,0xe0190809,
+0x080af04f,0x682ae016,0x24002306,0xf3f3fb99,0xf8c24626,0xe0083114,
+0xfb042206,0x19f11002,0xf7fc3052,0x3401ffd3,0x68293606,0x3114f8d1,
+0xd3f1429c,0x45d02000,0x2300d007,0x68689300,0x463a4641,0xf007464b,
+0xb004f899,0x87f0e8bd,0x00020f01,0x00020f0f,0x0001d585,0x6a8cb510,
+0x68234611,0x4b056c98,0x68624798,0x43ecf243,0x58d04601,0xf9faf00c,
+0x46c0bd10,0x1e005c9d,0xe92d6883,0x460641f0,0x69106b5f,0x89824615,
+0xd04a2f00,0x036cf648,0xd026429a,0xf0136afb,0xd0220f01,0xb3027b72,
+0x0f01f012,0x7803d005,0x0f01f013,0x2301d101,0xf012e011,0xd00e0302,
+0x78427803,0x401a7901,0x40137883,0x401a78c2,0x40117943,0x2bff400b,
+0x2300bf14,0x461a2301,0x6833b91b,0x6c984629,0x6833e028,0x6c984629,
+0x47984b14,0x46044b14,0x5027f895,0xb9184798,0x21b34812,0xfe7cf7fb,
+0xb26b8b62,0x02fff022,0x83634313,0x68b06a3b,0x463968db,0x47984622,
+0x4620b170,0x47984b0a,0x4808e00a,0x3131f240,0xfe66f7fb,0x46296833,
+0x463a6c98,0x47984b05,0x81f0e8bd,0x1e005cb1,0x1e005ec1,0x00020ef8,
+0x1e005e51,0x1e005c41,0x4a06b507,0x92006803,0x46084a05,0x681a9201,
+0x4b054904,0xfe52f7fc,0x46c0bd0e,0x00020fb1,0x00020f59,0x00020f8d,
+0x00020fa5,0x6803b510,0xb1137c5b,0xf0026840,0xbd10fe3d,0x6a80b510,
+0xfff4f7ff,0xbd102000,0x6803b510,0x7c5c6842,0x2400b10c,0x4b08e00e,
+0xb11b781b,0xf0024610,0xe007fb6d,0x43ecf243,0xf02158d0,0x4604fbd9,
+0xfdacf7fb,0xbd104620,0x00023af6,0x6840b510,0xfb0ef000,0x46c0bd10,
+0x6840b510,0xfa98f001,0x46c0bd10,0x4b09b510,0x78194604,0x2238b969,
+0x0038f100,0xfec6f7fc,0x63e44b05,0x46206423,0xfbccf020,0xf0216860,
+0xbd10f835,0x00023af6,0x00004a19,0x6844b510,0x7c5b6823,0x6860b12b,
+0xf86cf002,0xf7ff4620,0xbd10fe33,0x03fff000,0xea400a00,0x47702003,
+0xf4004602,0x0600437f,0x2003ea40,0x037ff402,0x2013ea40,0x6012ea40,
+0x46c04770,0x78007843,0x2003ea40,0x46c04770,0x78434602,0x04007880,
+0x2003ea40,0x43187813,0xea4078d3,0x47706003,0x3d68f890,0xf8d0bb0b,
+0x789b37f8,0xf890b9eb,0xb9d33d5f,0x13dcf243,0xb9b358c3,0x3d5cf890,
+0xf890b99b,0xb9833d62,0x43abf243,0xb9635cc3,0x381df890,0xf641b94b,
+0x58c3030c,0xf890b92b,0x1e183d65,0x2001bf18,0x2001e000,0x46c04770,
+0x47702000,0x43ecf243,0xf89358c3,0x4770021d,0xf890b510,0xb31b3d5e,
+0x3d5df890,0xf890bb03,0xb1eb3023,0x3024f890,0xf243b1d3,0x5ac353d2,
+0xf243b163,0x58c253c8,0x5352f5a3,0xea023b41,0xb11b0303,0x2390f642,
+0xb14b5cc3,0x3d67f890,0xf890b133,0xf1d33d3c,0xbf380301,0xe0002300,
+0xb2dc2300,0x3d68f890,0xf8d0bb23,0x789b37f8,0xf890bb03,0xb9eb3d5f,
+0x13dcf243,0xb9cb58c3,0x3d5cf890,0xf890b9b3,0xb99b3d62,0x43abf243,
+0xb97b5cc3,0x381df890,0xf641b963,0x58c3030c,0xf890b943,0xb92b3d65,
+0x37c8f8d0,0xbf181e19,0xe0002101,0xf8d02101,0xf8d3380c,0xf3c00120,
+0x429c6340,0x2200bf14,0xb1242201,0xf010b119,0xbf086380,0x4610461a,
+0x46c0bd10,0x47702001,0xf6422200,0xb5104314,0x2dbcf8c0,0x460454c2,
+0xfff4f7ff,0x0d11f884,0x46c0bd10,0xd9022902,0x001cf06f,0xb139e00e,
+0x3848f8d0,0x4299685b,0xf06fd002,0xe005000c,0xbf181e0b,0xf8802301,
+0x20003cfc,0x46c04770,0x0df2f8b0,0x46c04770,0x41f0e92d,0x549af500,
+0x46072600,0x46353410,0xb1136823,0x47986860,0x35011836,0x2d083414,
+0xf8d7d1f6,0xf9b22844,0xf9b23024,0x18c00026,0x3028f9b2,0xf9b218c0,
+0x18c0302a,0xe8bd1830,0x46c081f0,0xf44169d1,0x61d17100,0x180cf8d0,
+0x1180f8d1,0x6293185b,0x46c04770,0x03f3f248,0xd1014299,0xe0052001,
+0x1337f248,0xbf144299,0x20012000,0x46c04770,0x468cb530,0x461d4604,
+0x460ab10a,0xf8d0e027,0x7b0b1848,0xf642b19b,0x5cc333dc,0xf01cb17b,
+0xd1096f00,0x037ff00c,0xd0082b02,0xd0062b04,0xd0042b0b,0xd0022b16,
+0x20b6f891,0xf01ce00f,0xf00c6f00,0xd0060e7f,0x23144a1a,0x2303fb0e,
+0x18cb7c5b,0xeb01e001,0xf893030e,0xf3cc20a0,0x3b042302,0xf4222b01,
+0xd80f60e0,0x6f00f012,0xf002d109,0x2b02037f,0x2b04d008,0x2b0bd006,
+0x2b16d004,0xf440d002,0xe00160a0,0x2005ea40,0x6f00f010,0x4a08d10d,
+0x037ff000,0x2b0056d3,0xf8d4da07,0xf4202848,0xf8925360,0xea432045,
+0xbd3020c2,0x1e00c744,0x1e00c634,0x380cf8d0,0x72a0f503,0xf0136813,
+0xd1fb0f08,0x0302f04f,0x47708013,0x46c04770,0x46c04770,0xf241b570,
+0xf24134ef,0x5d4335f0,0x46065d02,0x2203ea42,0x0301f011,0x2320bf18,
+0x0260f022,0x0102f011,0x2140bf18,0x43194313,0x0a095501,0x7c435541,
+0xf7ffb12b,0x4630ffdf,0xf7ff2101,0xbd70ffdd,0x30fff04f,0x46c04770,
+0xb5102a2f,0xd8024696,0x000df06f,0xf8b0e02d,0x600b3826,0x3828f8b0,
+0xf8d0604b,0x681c3848,0x8a227ca3,0xea43071b,0x68823302,0x6b53608b,
+0x0f3bf1be,0x684360cb,0x6a53610b,0x6a93614b,0xf8b0618b,0x61cb3384,
+0x382cf8d0,0x4b07624b,0x6853620b,0x6b13628b,0xd90562cb,0x630b6823,
+0x634b6863,0x638b68e3,0xbd102000,0x04da0000,0x46c04770,0x46c04770,
+0x43a9f243,0xb94256c2,0x54c23b01,0x41a0f243,0x50c23b04,0xb1035c43,
+0x47705442,0xe92d6b43,0x469641f0,0x2507f3c2,0xf002460e,0xf3ce027f,
+0xb18317c0,0x2d03b17f,0x2a20d840,0xf8b0d107,0xf4033324,0xf5b36340,
+0xd1376f40,0x2a07e009,0x2503d907,0x4b1be016,0x047ff002,0x2b00571b,
+0x2d01da02,0xe00cd82a,0xd0052c02,0xd0032c04,0xd0012c0b,0xd1212c16,
+0x2b026873,0xb9edd11e,0xb125e005,0x4319f642,0x2b015cc3,0x4611d016,
+0xf042b10f,0xea416100,0xf41e25c5,0xbf180f00,0x0500f445,0x4629b12a,
+0x23016872,0x47a04c06,0xf045b120,0x20004300,0xe00163f3,0x001cf06f,
+0x81f0e8bd,0x1e00c634,0x0001d375,0x0810f8d0,0x46c04770,0xb18b6b43,
+0xf8802901,0xd005103c,0x3ffff1b1,0xf890d106,0xb11b3b98,0x52a1f500,
+0xe0022301,0x52a1f500,0x70132300,0x46c04770,0xb17b69c3,0x5c9a4b08,
+0x5c9a4b08,0x02c2eb00,0x3658f8d2,0xf8c23301,0xf8d23658,0x18cb365c,
+0x365cf8c2,0x46c04770,0x000238e6,0x00021010,0xb5102806,0xd9014614,
+0xe0082000,0xf8134b04,0xeb032020,0x885b0380,0x2001700a,0xbd108023,
+0x00020ff4,0x3848f8d0,0x47706858,0x3848f8d0,0x47706818,0x3848f8d0,
+0x280cf8d0,0x1134f8a3,0xf8c24b02,0xf8c23160,0x47701164,0x00020003,
+0xb1a9b510,0x1328f8d0,0xe00d2200,0xf8931883,0xf003332c,0x2b02037f,
+0x2b04d005,0x2b0bd003,0x2b16d001,0x3201d104,0xd1ef428a,0xe000211f,
+0xf7ff210f,0xbd10ffd7,0x3848f8d0,0x280cf8d0,0x1136f8a3,0xf8c24b02,
+0xf8c23160,0x47701164,0x00020004,0x0830f8d0,0x40c6f3c0,0x47700240,
+0x3844f8d0,0xb12b7a1b,0x380cf8d0,0x1d04f8c0,0x112cf8c3,0x46c04770,
+0x0381eb00,0x4604b570,0x0778f8d3,0x6983460d,0xb1484798,0x380cf8d4,
+0x2150f8d3,0x40ab2301,0xbf144213,0x20012000,0x46c0bd70,0x2101b510,
+0xffe6f7ff,0x46c0bd10,0x375cf8d0,0x4770711a,0xf243b510,0x5cc343d9,
+0xe045f891,0xf642b93b,0x5cc34319,0xd0022b01,0x2044f891,0x2200e000,
+0xf8814596,0xd0022045,0xf7ff6889,0x2000ffe5,0x46c0bd10,0x380cf8d0,
+0x0180f8d3,0xf8d36008,0x60133184,0x46c04770,0x460cb513,0xa901466a,
+0xfff0f7ff,0x0c139a01,0x041b0412,0xea440c12,0x42940003,0xf5a0bf88,
+0xbd1c3080,0x0f01f011,0x460cb570,0xf8d04616,0xd004580c,0xf24b4808,
+0xf7fb519f,0x08a3fa95,0x3380f443,0x0f02f014,0x3160f8c5,0xf8a5bf14,
+0xf8a56166,0xbd706164,0x00021040,0x0f01f011,0x41f0e92d,0x460e4680,
+0x461d4617,0x480dd004,0x51e4f24b,0xfa78f7fb,0x0f01f015,0x4809d004,
+0x51e5f24b,0xfa70f7fb,0xdd082d00,0x19a12400,0x463a4640,0xf7ff3402,
+0x42acffc5,0xe8bddbf7,0x46c081f0,0x00021040,0x0f01f011,0x41f0e92d,
+0x460f4680,0x461d4616,0x480fd004,0x51b5f24b,0xfa52f7fb,0x0f01f015,
+0x480bd004,0x51b6f24b,0xfa4af7fb,0xdd0c2d00,0x19332400,0x785b5da2,
+0x464019e1,0x2203ea42,0xf7ff3402,0x42acff9b,0xe8bddbf3,0x46c081f0,
+0x00021040,0x2208b573,0x460d4606,0x49074668,0xfb14f7fc,0xf83d2400,
+0x5b621004,0x34024630,0xff84f7ff,0xd1f62c08,0x46c0bd7c,0x0002186c,
+0x460cb570,0xbf0c2a00,0x21b421a4,0x46062c64,0x46184615,0xf06fd902,
+0xe016001c,0x4622b90c,0xf1c4e004,0x011b0364,0xf2f4fb93,0x4630b118,
+0xf7ffb292,0xb125ff63,0x635cf243,0x52f42000,0xf243e003,0x52f4635e,
+0xbd704628,0x41f0e92d,0x460c4606,0x0725f101,0xe00d2500,0xf893192b,
+0x5d7a3026,0x71b0f505,0x2203eb02,0xb2924630,0xff44f7ff,0xb29d1cab,
+0x2024f894,0xd3ed4295,0x21484630,0xff3af7ff,0x81f0e8bd,0xf890b510,
+0xf8904d6b,0x21b62d6a,0x2204ea42,0xff2ef7ff,0x46c0bd10,0x41f0e92d,
+0x22004616,0x4607460d,0x1018f99d,0x469862f2,0xf8d0b133,0xeb022844,
+0x8c930245,0x849318cb,0xd1092d04,0x21a86933,0x404cf893,0x204df893,
+0x2202ea44,0xff0ef7ff,0x0385eb07,0x0778f8d3,0x6a034631,0x47984642,
+0x81f0e8bd,0xf890b510,0xf8d02023,0x2a00380c,0x2202bf0c,0xf8a322fa,
+0x21962612,0xfef6f7ff,0x46c0bd10,0xf8d0b510,0xb131380c,0x2207f240,
+0x2684f8a3,0x22092110,0xf240e005,0xf8a32212,0x21102684,0xf7ff2214,
+0xbd10fee1,0x0f01f011,0x460cb570,0x580cf8d0,0x4809d004,0x518cf24b,
+0xf976f7fb,0xf44308a3,0xf8c53380,0xf0143160,0xbf140f02,0x3166f8b5,
+0x3164f8b5,0xbd70b298,0x00021040,0xb510680b,0x460c2b34,0x2192d80b,
+0xffdcf7ff,0xb2800040,0x6823b128,0x0343eb00,0x60232001,0x2000e000,
+0x46c0bd10,0x2154b510,0xf7ff4604,0xf243ffcb,0x58e3137c,0xf0134602,
+0xd0056f00,0x33e4f241,0xf0035ce3,0xe00f0303,0x037ff003,0xd0082b02,
+0xd0062b04,0xd0042b0b,0x0016f1b3,0x2001bf18,0x2000e000,0x0303f000,
+0x0003f002,0xbf144298,0x20012000,0x46c0bd10,0xf642b570,0x2154431a,
+0x5ac44605,0xff9ef7ff,0x7070f420,0x21544304,0xb2a24628,0xfe76f7ff,
+0x46c0bd70,0x3d08f8d0,0x4604b510,0x4807b923,0x31b7f24b,0xf90cf7fb,
+0x2d08f8d4,0x380cf8d4,0x2d04f8c4,0x212cf8c3,0x46c0bd10,0x00021040,
+0xb570290e,0x460e4604,0xdd074615,0x2b046843,0x480fd004,0x5144f64a,
+0xf8f2f7fb,0xf8d4786b,0x782c080c,0xea4478a9,0x78eb2403,0xea41792a,
+0x796b2103,0x2203ea42,0x0320f046,0xf8a0b29b,0xf8a03420,0xf8a04422,
+0xf8a01422,0xbd702422,0x00021040,0x5354f500,0x42993334,0x460ab510,
+0x2103d103,0xf7ff32d4,0xbd10ffcb,0x2103b510,0xf7ff4a01,0xbd10ffc5,
+0x00021016,0xb5706843,0x460e2b04,0xf8d04614,0xd804580c,0xf64a4814,
+0xf7fb5127,0x2e31f8b5,0x4811d904,0x5128f64a,0xf8aef7fb,0x78e178a2,
+0x04127823,0xea427860,0x431a6201,0x2200ea42,0x79207963,0x2003ea40,
+0xf4430073,0x33012180,0x2380f443,0x1160f8c5,0x2164f8c5,0x3160f8c5,
+0x0164f8a5,0x46c0bd70,0x00021040,0x3088f8d0,0x4219b570,0x460d4604,
+0x480ad104,0x41e4f64a,0xf882f7fb,0x3088f8d4,0x0305ea23,0x3088f8c4,
+0xf8d4b93b,0xf0133084,0xd1026f80,0x4b024620,0xbd704798,0x00021040,
+0x0001d459,0x0381eb00,0x4604b570,0x0778f8d3,0xb108460d,0x47986943,
+0x17c1f894,0x2301b159,0xea2140ab,0xf8840303,0xb92337c1,0x60e8f504,
+0xf7ff2108,0xbd70ffc7,0x43cdb570,0x4604422a,0xd0044616,0xf64a4809,
+0xf7fb41aa,0xf8d4f849,0xea0527c4,0xea430302,0x42910106,0xf8c4d005,
+0xf50417c4,0x4b0260e8,0xbd704798,0x00021040,0x0001d459,0xf8d0b570,
+0x4606580c,0x4120f8d5,0x0f04f014,0x4823d004,0x6177f24b,0xf828f7fb,
+0x0f01f014,0x481fd004,0x6178f24b,0xf820f7fb,0x0f02f014,0x481bd104,
+0x6179f24b,0xf818f7fb,0x46302101,0xf7ff460a,0x2301ffbf,0x3128f8c5,
+0x4120f8d5,0x0f04f014,0x4812d004,0x6186f24b,0xf806f7fb,0x0f01f014,
+0x480ed104,0x6187f24b,0xfffef7fa,0x0f02f014,0x480ad104,0x6188f24b,
+0xfff6f7fa,0x3128f8d5,0x0f01f013,0x4805d004,0x618bf24b,0xffecf7fa,
+0x60e8f506,0xf7ff2104,0xbd70ff59,0x00021040,0x380cf8d0,0xf8d3b510,
+0xf0233120,0xf8904280,0xf4223023,0xb11b22c0,0x4280f042,0x3200f442,
+0x30e4f8d1,0x0f40f013,0xf891d007,0xb1133046,0x6200f042,0xf022e001,
+0xf04f6200,0xf7ff31ff,0xbd10ff6f,0xb5107c03,0xf890b12b,0xb9133d50,
+0x7280f04f,0x2200e000,0x71a0f04f,0xff60f7ff,0x46c0bd10,0xf8d0b510,
+0xf0333d3c,0xbf1a02ff,0x1180f44f,0xf44f460a,0xf7ff1180,0xbd10ff51,
+0xb5102300,0x3d3df880,0xf7ff4604,0xf44fffeb,0x46203100,0xf7ff460a,
+0xbd10ff43,0x41f3e92d,0x461d4616,0x46042208,0x4668460f,0xf8dd4930,
+0xf7fc8020,0xea35f86f,0xd0040206,0xf64a482d,0xf7fa4163,0x2f03ff81,
+0x482ad904,0x4164f64a,0xff7af7fa,0x0f03f1b8,0xe8dfd80d,0x0502f008,
+0xf8d40208,0xe00c1848,0x613cf504,0xf504e009,0x31046128,0x481fe005,
+0x4175f64a,0xff64f7fa,0xb1f1e01f,0x0c47ea4f,0x0201eb0c,0x0070f8b2,
+0x0306ea20,0x0e05ea43,0x3844f8d4,0xe070f8a2,0xb1737a1b,0xd00c4586,
+0x3848f8d4,0xd1084299,0xeb0caa02,0x46200302,0x1c08f833,0xf7ff4672,
+0xf1b8fca1,0xd1100f03,0x0147eb04,0x3af4f8b1,0xb29243f2,0x0303ea02,
+0xf8a1432b,0xf8b13af4,0x401a3c30,0xf8a1432a,0xe8bd2c30,0x46c081fc,
+0x00021874,0x00021040,0x3814f8d0,0x2b03b513,0xd112460c,0xf990b151,
+0xf44f3326,0x21027202,0xbf0c2b00,0x46132308,0xe0049100,0x91002102,
+0x7202f44f,0xf7ff4623,0xbd1cff79,0x4602b507,0xb159468e,0xf8802300,
+0x33013d44,0x3d43f880,0x33022280,0x21029300,0xe0064613,0xf8822303,
+0x93001d43,0x22802102,0xf7ff4673,0xbd0eff5f,0x7c43b570,0x460d4604,
+0x480ab123,0x0168f24a,0xfeeaf7fa,0xf06fb115,0xe00a0001,0x338cf8d4,
+0xf0132203,0xf8c40080,0xbf1c2814,0xf8c44628,0xbd702814,0x00021040,
+0x4ff7e92d,0x0a1cf101,0xf89a9201,0x46804008,0xd0402c00,0xd8072c40,
+0xfb04230c,0xf6420303,0x589b4248,0xd12f2b00,0xf249481c,0xf7fa01f5,
+0xe029febf,0x0b0cf04f,0x860bfb04,0x5530f506,0x786b3550,0xb12346a1,
+0xf2494814,0xf7fa01fa,0xf642feaf,0x59f34748,0x4810b923,0x01fbf249,
+0xfea6f7fa,0x706b2301,0x434cf642,0x59f458f2,0x46409901,0xfb0947a0,
+0x2200810b,0x4350f642,0x51f2782c,0x54ca706a,0xb2db1e63,0xd9d12b3f,
+0xf88a2300,0xe8bd3008,0x46c08ffe,0x00021040,0x4615b570,0x5230f500,
+0x3254469c,0x0e01f04f,0xb1a46814,0x0301f10e,0xfe83fa5f,0xf1be320c,
+0xd1f50f41,0x3460f8d0,0x01d6f249,0xf8c03301,0x480e3460,0xfe6cf7fa,
+0x30fff04f,0x220ce014,0x0202fb0e,0x4348f642,0x330450d1,0xf50250d5,
+0x33505330,0xf10c705c,0x7a01001c,0x4350f642,0xf88054d1,0x4620e008,
+0x46c0bd70,0x00021040,0xb5102301,0xf8804604,0xf7ff3d3d,0x4620fe97,
+0xfcf4f7ff,0x4806b920,0x711af648,0xfe40f7fa,0xf44f4620,0x22003100,
+0xfde6f7ff,0x46c0bd10,0x00021040,0x41f0e92d,0x460e4607,0x2828f8b7,
+0x3321f244,0xd011429a,0x429a3b0e,0x3307d00e,0xd00b429a,0x429a3310,
+0x3b14d008,0xd005429a,0x429a3307,0x2500bf14,0xe0002501,0xf44f2501,
+0xfb05739e,0xf8d47403,0x2a012a88,0x1e73d106,0x2b01b2db,0xf884d80e,
+0xe00e2b98,0xd0042a02,0xf647480c,0xf7fa619c,0x2e01fe03,0xf884d102,
+0xe0026b98,0xf8842300,0xf1b53b98,0xd0c53fff,0x33e5f241,0x463854fe,
+0x103cf997,0xfa66f7ff,0x81f0e8bd,0x00021040,0x47f0e92d,0x46054c27,
+0x4827b924,0x614af647,0xfde2f7fa,0xf8d47923,0xf0039000,0x2700087f,
+0x4b20e03b,0x791b18fb,0x007ff003,0x3848f8d5,0x027ff000,0xf893189b,
+0xf00010a0,0x29006400,0x4641bf08,0x6f00f011,0x4a18d108,0x037ff001,
+0x2b0056d3,0xf44fda02,0xe00172e0,0x7200f44f,0x4b12b934,0x2b00561b,
+0xf44fda02,0xe00176f0,0x7608f44f,0x37014b0d,0x5c1c5c59,0x010ff001,
+0x0141eb02,0xf7ff4628,0xf004fc25,0x4602040f,0x0144eb06,0xf7ff4628,
+0x454ffafd,0xe8bdd1c1,0x46c087f0,0x1e00c5e4,0x00021040,0x1e00c634,
+0xb5106843,0x46042b02,0x4805d804,0x2184f646,0xfd8af7fa,0x280cf8d4,
+0x61932300,0x46c0bd10,0x00021040,0xb5102300,0x3d82f880,0x3d7ef8b0,
+0xf8a04604,0x68433d80,0xd8042b02,0xf6464805,0xf7fa217d,0xf8d4fd71,
+0xf44f280c,0x61935320,0x46c0bd10,0x00021040,0xf8d0b510,0x00494844,
+0x8ca3190c,0x1a9b1809,0xf8b084a3,0xf8b13dc0,0x43132dc2,0x3dc0f8a0,
+0x3024f9b4,0xda042b00,0xf6464802,0xf7fa01c1,0xbd10fd4f,0x00021040,
+0x47f3e92d,0x7a0c4698,0x46077a4b,0xa80cf8d0,0x460d4608,0x2403ea44,
+0xf7fe4616,0x9001ff71,0xf7fe1d28,0xf89dff6d,0x90009028,0xbf142c00,
+0xf44f4625,0xb9766580,0x3d5cf897,0x4641b15b,0x4633464a,0x46384c11,
+0xa90147a0,0x46324603,0x4c0f4668,0x9c0147a0,0x46224628,0x4b0d9900,
+0x1a244798,0xf897b936,0xb11b3d5c,0x2b140a83,0x1824bf88,0x02aa4b08,
+0x189b18c3,0xf3f2fbb3,0x4303fb02,0x318cf8ca,0x87fce8bd,0x0001dac5,
+0x0001d425,0x0001d17d,0x00018fff,0x4777e92d,0x680cf8d0,0x46084680,
+0xf7fe460d,0x4682ff29,0xf7fe1d28,0x7a6bff25,0xf04f7a2c,0xea545180,
+0xbf082403,0x6480f44f,0x460a4681,0x04244640,0xfc8ef7ff,0xa180f8c6,
+0x9184f8c6,0x4188f8c6,0x46402400,0x22014629,0x94004623,0xff88f7ff,
+0xf04f4640,0x46225180,0xfc7af7ff,0x877ee8bd,0xf642b570,0x5cc44316,
+0x2c014605,0x2c03d906,0x4810d011,0x616df644,0xfcbef7fa,0xf642b924,
+0xf04f431a,0xe00a0240,0xd1042c01,0x431af642,0x0280f04f,0xf642e003,
+0xf04f431a,0x52ea0200,0xb12b7c6b,0x431af642,0x46285ae9,0x47984b02,
+0x46c0bd70,0x00021040,0x0001d4fd,0xf890b510,0x46043d11,0x4814b923,
+0x01c7f642,0xfc94f7fa,0x3024f894,0xf8d4b9f3,0x789b37f8,0xf243b9d3,
+0x58e313dc,0xf8b4b9b3,0xb99b3d12,0x3d14f8d4,0xf243b983,0x58e353f8,
+0xf243b963,0x58e353fc,0xf894b943,0xb92b3d1a,0xf1d37ce3,0xbf380001,
+0xe0002000,0xbd102000,0x00021040,0xb5702901,0x460d4604,0x480fd904,
+0x5149f641,0xfc64f7fa,0x31eff241,0x30f0f241,0x5c225c63,0x2302ea43,
+0x7340f423,0x2305ea43,0x5463b29b,0x54230a1b,0xb1337c63,0xf7fe4620,
+0x4620fff5,0xf7fe2101,0xbd70fff3,0x00021040,0xb5103901,0xd828290e,
+0xf001e8df,0x120f0b08,0x27272727,0x1b181527,0x0024211e,0x33dcf642,
+0xf642e001,0x54c233dd,0xf642e01c,0xe7fa33de,0x33dff642,0xf642e7f7,
+0xe7f433e0,0x33e1f642,0xf642e7f1,0xe7ee33e2,0x33e3f642,0xf642e7eb,
+0xe7e833e4,0x33e5f642,0x4803e7e5,0x510ff641,0xfc16f7fa,0x46c0bd10,
+0x00021040,0xf8d0b570,0xf8904328,0x2200532c,0x1883e009,0x132cf893,
+0x0f80f011,0xf001d002,0xe004057f,0x42a23201,0xf005d1f3,0x6b43057f,
+0xf015b173,0xd10b6f00,0xf0054a10,0x56d3037f,0xda052b00,0x3848f8d0,
+0x3045f893,0x25c3ea45,0x2324f8b0,0xf4024629,0xf5b24270,0xbf145f00,
+0x22022201,0x4c062301,0xb92047a0,0xf44f4805,0xf7fa51d4,0x4628fbd9,
+0x46c0bd70,0x1e00c634,0x0001d375,0x00021040,0xb5702910,0x460c4605,
+0x4804d904,0x115af641,0xfbc6f7fa,0x13dcf243,0xbd7050ec,0x00021040,
+0xb510301c,0xb11c6904,0x88c38822,0xd004429a,0xf2404803,0xf7fa11a7,
+0x4620fbb3,0x46c0bd10,0x00021040,0x7c43b570,0xb1234604,0xf24b4818,
+0xf7fa7166,0xf894fba5,0xb14d5d10,0x3710f8d4,0xf8d4b323,0x21003848,
+0xf00d6818,0xe01dfff1,0x3848f8d4,0x68184629,0xffeaf00d,0x3848f8d4,
+0x68184629,0x47984b0b,0x0310f641,0xb13358e3,0xf04f68a0,0x462a31ff,
+0xf7fa462b,0xf8d4ff9f,0x46293844,0x68a0721d,0xff1cf7fa,0x46c0bd70,
+0x00021040,0x0001ea19,0xf8d0b570,0x46053844,0xb9087a18,0xe0124606,
+0x380cf8d5,0xf8d52400,0xf8c36d04,0xf8d3412c,0x2001312c,0x47984b05,
+0x3d00f8d5,0x4d04f8c5,0xbf1842a3,0x46304626,0x46c0bd70,0x1e005d75,
+0xf8d0b570,0x46043844,0x460e7a1b,0xd0482b00,0xf8d0bb29,0x2021380c,
+0x21e0f8d3,0x25a1f643,0x0202f042,0x21e0f8c3,0x47984b21,0x200ae003,
+0x47984b1f,0xf8d43d0a,0xf8d2280c,0xf41331e0,0xd1013f00,0xd1f22d09,
+0x31e0f8d2,0x3f00f413,0x4818d127,0x31ecf64a,0xfb26f7fa,0x6883e021,
+0xb9b369db,0x380cf8d0,0x31e0f8d3,0x0f12f013,0xf643d00f,0xe00325a1,
+0x4b0d200a,0x3d0a4798,0x380cf8d4,0x31e0f8d3,0x3f00f413,0x2d09d101,
+0xf8d4d1f2,0xf8d2280c,0xf02331e0,0xf8c20302,0xf1d631e0,0xbf380301,
+0xf8842300,0xbd70381d,0x1e005d75,0x00021040,0x4b10b570,0x20284605,
+0xf8b54798,0xf1033824,0xe0030409,0x4b0b200a,0x3c0a4798,0x46282140,
+0xf964f7ff,0xd1012804,0xd8f32c09,0x46282140,0xf95cf7ff,0xd1042804,
+0xf64a4803,0xf7fa319b,0xbd70fad7,0x1e005d75,0x00021040,0x37c8f8d0,
+0x4219b570,0x460d4604,0x480ed004,0x41d2f64a,0xfac6f7fa,0x17c8f8d4,
+0xf8d4b921,0xf01337c4,0xd0046f80,0x0301ea45,0x37c8f8c4,0xf504e008,
+0xf8c460e8,0x4b0457c8,0x46204798,0xffb8f7ff,0x46c0bd70,0x00021040,
+0x0001d459,0xf8d0b570,0x2104580c,0xf7ff4606,0xf8d5ffd1,0xf1b44120,
+0xd03d3fff,0x0f04f014,0x482cd004,0x6121f24b,0xfa96f7fa,0x0f02f014,
+0x4828d104,0x6122f24b,0xfa8ef7fa,0x0f01f014,0x4824d104,0x6123f24b,
+0xfa86f7fa,0x3128f8d5,0x3ffff1b3,0xf013d020,0xd0040f01,0xf24b481d,
+0xf7fa612b,0x4630fa79,0x22002101,0xfa20f7ff,0xe0034c19,0x4b19200a,
+0x3c0a4798,0x3128f8d5,0x0f01f013,0x2c09d101,0xf8d5d1f4,0xf8d53128,
+0xf1b44120,0xd1043fff,0x073cf8d6,0xfc1ef7fe,0xf014e017,0xd0040f04,
+0xf24b480a,0xf7fa6143,0xf014fa53,0xd1040f02,0xf24b4806,0xf7fa6144,
+0xf014fa4b,0xd0040f01,0xf24b4802,0xf7fa6145,0xbd70fa43,0x00021040,
+0x00014441,0x1e005d75,0xf8d0b570,0x46043848,0x460d7b1b,0x4817b923,
+0x41ecf640,0xfa30f7fa,0x33cbf642,0xf1b356e3,0xd0033fff,0xbf142b01,
+0x25012500,0x31c7f642,0x42ab5c63,0xf8b4d018,0xf64f3352,0xea0332ff,
+0xb2eb0202,0xf8a45465,0xb11b2352,0x6380f442,0x3352f8a4,0xf7ff4620,
+0x4620ff65,0xf7ff4629,0x4620f875,0xf9d2f7ff,0x46c0bd70,0x00021040,
+0x408b2301,0xf890b570,0xb2dc27c1,0x0302ea04,0x460542a3,0xd010460e,
+0x2108b912,0xff22f7ff,0x37c1f895,0x0303ea44,0x37c1f885,0x0386eb05,
+0x0778f8d3,0x6903b108,0xbd704798,0xf10db573,0x460d0602,0x21004604,
+0x22064630,0xfaa2f7fb,0x4620b175,0xf7ff2101,0x4620ffd3,0xf7ff2103,
+0x4620ffcf,0x46322100,0xf8cef7ff,0xe0142301,0x3dcef894,0x4620b91b,
+0xf7ff2101,0x4620f957,0xf7ff2103,0x4620f953,0xf1044629,0xf7ff024c,
+0xf8d4f8bb,0xb16b37cc,0xf8c42300,0xf8d437cc,0xf40337c4,0xf5b323c0,
+0xd0033f00,0x60e8f504,0x47984b01,0x46c0bd7c,0x0001d459,0xb5102101,
+0x1dcef880,0xff9cf7ff,0x46c0bd10,0xf890b570,0x46043d5e,0xf890b31b,
+0xbb033d5d,0x3023f890,0xf890b1eb,0xb1d33024,0x53d2f243,0xb1635ac3,
+0x53c8f243,0xf5a358c2,0x3b415352,0x0303ea02,0xf642b11b,0x5cc32390,
+0xf894b14b,0xb1333d67,0x3d3cf894,0x0301f1d3,0x2300bf38,0x2300e000,
+0xb322b2da,0x3d68f894,0xf8d4bb0b,0x789b37f8,0xf894b9eb,0xb9d33d5f,
+0x13dcf243,0xb9b358e3,0x3d5cf894,0xf894b99b,0xb9833d62,0x43abf243,
+0xb9635ce3,0x381df894,0xf641b94b,0x58e3030c,0xf894b92b,0x3b003d65,
+0x2301bf18,0x2301e000,0xf8d4b2dd,0x0652380c,0x6120f8d3,0xf042b10d,
+0x46206280,0x61c0f04f,0xf8eaf7ff,0xf006b13d,0xf1b363c0,0xd1027f00,
+0xf7ff4620,0xbd70fe3d,0xe92d69cb,0xf01347f0,0x46040f04,0x4691460d,
+0x482dd104,0x0132f648,0xf926f7fa,0x4628692f,0x306ff897,0x206ef897,
+0x2803ea42,0x304cf897,0x0607f003,0xfd58f7ff,0x6000f8c9,0x460569e3,
+0xf894b303,0xb1eb3d5e,0xd81b2e03,0xf8904a1f,0x5d923183,0xf0134113,
+0xd0130f01,0x0381f3c8,0xd10f2b02,0x0f80f018,0xf243d00c,0x5ca342ab,
+0x3301b923,0x462054a3,0xff58f7ff,0xf043686b,0x606b6300,0x3844f8d4,
+0x0386eb03,0x681b68db,0xd80c2b02,0x0346eb04,0x2dc2f8b3,0x3dc0f8b4,
+0x000ff06f,0x0302ea23,0x3dc0f8a4,0x793be00a,0x0381f3c3,0xd0042b02,
+0x33b4f8d4,0xf8c43301,0x200033b4,0x87f0e8bd,0x00021040,0x00021010,
+0x41f0e92d,0x681cf890,0xb9164604,0x4b162101,0xf8d44798,0x7a1d3844,
+0x68a0b955,0x462a4629,0xfc58f7fa,0x6180f44f,0x460a4620,0xf860f7ff,
+0x380cf8d4,0x7158f8d3,0x68a0b91d,0xf7fa4629,0xb91efc4d,0x46314620,
+0x47984b07,0x3710f8d4,0x3f80f417,0xf043bf14,0xf0230302,0xf8c40302,
+0xe8bd3710,0x46c081f0,0x0001d47d,0xf243b570,0x5cc25314,0xbb124604,
+0x5354f500,0x4610781d,0x1823e006,0x5201f243,0x4299569b,0x3001dd02,
+0xd1f642a8,0x520cf243,0x42985ca3,0xf243d00f,0x58e543fc,0xb15554a0,
+0x33182201,0x3b0454e2,0xf8d458e1,0x462a073c,0x4c012300,0xbd7047a0,
+0x1e0061f9,0x4604b570,0x481d460e,0x51adf64a,0xf862f7fa,0xb9336b63,
+0xd0042e14,0xf64a4818,0xf7fa51af,0xf894f859,0xb91d581d,0x46294620,
+0xfcfef7ff,0x3848f8d4,0x6818b271,0xfcfaf00d,0x3844f8d4,0xb9237a1b,
+0xf64a480d,0xf7fa51b8,0xf8d4f843,0x68a13848,0xf00e6818,0xf8d4f9a1,
+0x68183848,0xf89ef020,0x0848f8d4,0x30784631,0xfbbaf012,0x4620b91d,
+0xf7ff2102,0xbd70fcd9,0x00021040,0x0f03f011,0x460cb5f7,0x461f4615,
+0xd0046986,0xf64a4816,0xf7fa5168,0xf015f81d,0xd0040f03,0xf64a4812,
+0xf7fa5169,0x0c23f815,0xb123041b,0xf64a480e,0xf7fa516a,0xf8c6f80d,
+0xf8d64130,0xf4033120,0xe00e3480,0x4639a801,0xf7fb2204,0xb11cf8e7,
+0xf7fe9801,0x9001fa1d,0x37049b01,0x3134f8c6,0x2d003d04,0xbdfedcee,
+0x00021040,0x4614b570,0x460b3203,0xf44f4605,0xf500618d,0xf02260e8,
+0x69860203,0xffbaf7ff,0x3f80f5b4,0x4808db04,0x51e4f64a,0xffdcf7f9,
+0x211a4628,0xf7feb2a2,0xf8d6fd35,0xf0433124,0xf8c60302,0xbd703124,
+0x00021040,0x4614b570,0x460b3203,0x21684605,0x60e8f500,0x0203f022,
+0xf7ff6986,0xf5b4ff97,0xdb043f80,0xf64a4808,0xf7f951d6,0x4628ffb9,
+0xb2a22118,0xfd12f7fe,0x3124f8d6,0x0301f043,0x3124f8c6,0x46c0bd70,
+0x00021040,0x41f0e92d,0x460e4605,0xf8d04617,0xb12b480c,0xffd2f7ff,
+0x46314628,0xe00c463a,0x3124f8d4,0x0f01f013,0xf7ffd102,0xe00cffc7,
+0x3124f8d4,0x0f02f013,0xf7ffd102,0xe004ff9b,0xf64a4803,0xf7f951fb,
+0xe8bdff87,0x46c081f0,0x00021040,0xf8d0b570,0xb19557d0,0x22006884,
+0x46294613,0xf7fa4620,0x4629fb95,0x2300462a,0xf7fa4620,0x2200fb73,
+0x46294620,0xf7fa4613,0xbd70fb51,0x41f0e92d,0xf8d0461d,0x46043848,
+0x460e6818,0xf0114690,0xf8d4fda3,0x46293848,0x46326818,0xfc1cf00d,
+0x3848f8d4,0x31fff04f,0x22006818,0xfe2cf00e,0x46414620,0xfd66f7ff,
+0x81f0e8bd,0x4605b570,0xf8d0460c,0xf8d5073c,0x4b0a1d38,0xb17c4798,
+0x3d5ef895,0xf895b163,0xb14b3de0,0x2d69f895,0xf8d5b132,0xf8d5073c,
+0x23011d38,0x47a04c02,0x46c0bd70,0x1e006221,0x1e0061f9,0xf890b510,
+0x46043d0d,0x2001b90b,0xf8d0e012,0xf0133394,0xd0040f04,0xf6424807,
+0xf7f911ad,0x2300ff19,0x3d0df884,0x073cf8d4,0x1d34f8d4,0x47984b02,
+0x46c0bd10,0x00021040,0x1e006221,0x4b0cb570,0x460c4606,0xb9184798,
+0x215c480a,0xff00f7f9,0x0507f004,0xd00342a5,0x215d4806,0xfef8f7f9,
+0xf0238af3,0xea450307,0x82f30303,0x46c0bd70,0x1e005ec1,0x00021040,
+0x4b06b510,0x47984604,0x4805b918,0xf7f92155,0x8ae0fee3,0x0007f000,
+0x46c0bd10,0x1e005ec1,0x00021040,0x4b0ab570,0x460d4604,0xb9184798,
+0x214d4808,0xfed0f7f9,0x68e26923,0x429318eb,0x4804d903,0xf7f9214e,
+0x82a5fec7,0x46c0bd70,0x1e005ec1,0x00021040,0x4b0bb570,0x460d4604,
+0xb9184798,0x21434809,0xfeb6f7f9,0x429d8aa3,0x4806d903,0xf7f92144,
+0x6920feaf,0x19408aa3,0x61201b5b,0xbd7082a3,0x1e005ec1,0x00021040,
+0x4b0cb570,0x460d4604,0xb9184798,0x2139480a,0xfe9af7f9,0x68a26923,
+0x42931b5b,0x4806d203,0xf7f9213a,0x6920fe91,0x1b408aa3,0x612018eb,
+0xbd7082a3,0x1e005ec1,0x00021040,0x7c43b530,0x4605b085,0xb11b460c,
+0xf06fb111,0xe09d0004,0xd9022c03,0x0001f06f,0xf8d5e098,0x3b023814,
+0xd9042b01,0xf24a484a,0xf7f90111,0x2c03fe6d,0xf8d5d107,0x2b023814,
+0x2400d101,0x2402e012,0xb17ce000,0x3814f8d5,0xd1042b02,0x3388f8d5,
+0x0f01f013,0x2b03e005,0xf8d5d104,0xf0133834,0xd0715f00,0x4810f8c5,
+0x2100a802,0xf7fa2208,0xf8bdff11,0x2c003008,0xf043d03f,0xf8ad0310,
+0xf8d53008,0x2b023814,0x3830f8d5,0xf023d120,0xf8c55300,0xf8d53830,
+0xf4133388,0xf8bd4f80,0xd008300a,0x7380f443,0x300af8ad,0xf8c52330,
+0x232037d0,0xf423e009,0xf8ad7380,0xf44f300a,0xf8c573c0,0xf44f37d0,
+0xf8c57380,0xe00937d4,0x5300f043,0x3830f8c5,0x300cf8bd,0x5380f423,
+0x300cf8ad,0x300af8bd,0xbf0c2c02,0x7300f443,0x7300f423,0x300af8ad,
+0xf023e009,0xf8ad0310,0xf8d53008,0xf0233830,0xf8c55300,0x24023830,
+0x3008f8bd,0x21004628,0x94002210,0xfe5ef7fe,0x300af8bd,0x21014628,
+0x7240f44f,0xf7fe9400,0x4628fe55,0x300cf8bd,0xf2414621,0x94001208,
+0xfe4cf7fe,0xe0012000,0x0002f06f,0xbd30b005,0x00021040,0x41f0e92d,
+0x680cf8d0,0xf8d64604,0xf1b22128,0xd1013fff,0xe0282700,0xf8d0b111,
+0xe0013d04,0x3d08f8d0,0x0702ea13,0xf8d4d01f,0x2500380c,0x512cf8c3,
+0x0f80f417,0x312cf8d3,0x5d04f8c4,0x2301d00a,0xf8844629,0x46203d44,
+0xff2cf7ff,0x46294620,0xfea0f7fe,0x4f00f417,0xf44fbf18,0xf8c63380,
+0xbf187128,0x46386233,0x81f0e8bd,0x41f0e92d,0x700b2300,0x46047c43,
+0xb1ab460d,0x3d04f8d0,0x2101b193,0xffbaf7ff,0xb1684606,0x702f2701,
+0x3d00f8d4,0x4806b123,0x511df24b,0xfd88f7f9,0xf8c44638,0xe0006d00,
+0xe8bd2000,0x46c081f0,0x00021040,0x3d00f8d0,0x4604b510,0x480ab923,
+0x41eaf24b,0xfd74f7f9,0x46202100,0xff96f7ff,0x3ffff1b0,0x3001d101,
+0xf8d4e005,0x43033d00,0x3d00f8c4,0xbd102001,0x00021040,0xf6422100,
+0x50c17358,0x503cf500,0x305cb510,0x7200f44f,0xfe1cf7fa,0x46c0bd10,
+0x3848f8d0,0x47f0e92d,0x05a0f103,0x4680226d,0x4628460c,0xf7fa2100,
+0x2200fe0d,0x18a3e00a,0xf013791b,0xd0040f80,0x037ff003,0xbf982b6c,
+0x320154eb,0x429a6823,0x2700d3f1,0x463e46b9,0x18b3e039,0x407cf893,
+0xd9042c6c,0xf647481d,0xf7f951d9,0x5d2bfd29,0xf0041928,0xb14b6100,
+0xd1262900,0xf0044a18,0x56d3037f,0xda202b00,0xe01f46a1,0x4a14b939,
+0x037ff004,0x2b0056d3,0x464bda01,0x463be000,0xb99b7003,0x4a0eb971,
+0x037ff004,0x2b0056d3,0x2c2fda08,0x2330d901,0x2c17e005,0x230cbf94,
+0xe0002318,0x70034623,0x4627e000,0xf8d83601,0x6f932848,0xd3c0429e,
+0x87f0e8bd,0x00021040,0x1e00c634,0x4ff7e92d,0x46074c29,0xb9244689,
+0xf6474828,0xf7f961ca,0xf8d7fce3,0xf8d43848,0x685ba000,0x0800f04f,
+0xbf142b01,0x0b0af04f,0x0b10f04f,0x4b1ee038,0x44434638,0x4b1e791d,
+0x057ff005,0x47984629,0x46064c1c,0x46384629,0xf10d464a,0x47a00302,
+0x22004629,0x4c18464b,0x47a04638,0x3003f89d,0x2002f89d,0xeb02b284,
+0x46382203,0x010af106,0xf7feb292,0xf89dfa0f,0xf89d3005,0x46382004,
+0x2203eb02,0x010cf106,0x445cb292,0xfa02f7fe,0xf1064638,0xb2a20110,
+0xf9fcf7fe,0x0801f108,0xd1c445d0,0x8ffee8bd,0x1e00c5e4,0x00021040,
+0x0001d839,0x0001dce1,0x0001d299,0x43f0e92d,0x3844f8d0,0x7a1bb089,
+0x46894605,0xf0002b00,0xb1098098,0xf9d6f7ff,0xf8d52100,0xf885280c,
+0xf8b21d87,0xf5053688,0x051b6658,0x36180d1b,0x3688f8a2,0x21004688,
+0x46682220,0xfd32f7fa,0xf3c37833,0x2c031441,0x483fd904,0x213af242,
+0xfc62f7f9,0xf0137833,0xd0060f10,0x40a32301,0x2d87f895,0xf8854313,
+0x78f23d87,0xea4378b3,0x015b2302,0xeb05b29b,0xf8ad0244,0xf8a23000,
+0x78333d88,0x000ff003,0xb29b1e43,0xf8ad2b0e,0xd8410008,0x22017871,
+0x030ff001,0xfa120909,0x408af303,0x3a013b01,0xf8adb29b,0xf8d52004,
+0xf8ad280c,0xf8ad3002,0xf8b23006,0x4013265a,0x300af8ad,0xf8ad181b,
+0x4b20300c,0x5d1b4628,0x015f2400,0x7112f507,0xf7fe3106,0xf440fa9b,
+0xf8ad7080,0xf507000e,0x19097110,0x2004f83d,0x34024628,0xf96ef7fe,
+0xd1f42c20,0x380cf8d5,0x2688f8b3,0xea42b292,0xb2923208,0x2688f8a3,
+0x2008f8bd,0x269cf8a3,0x0801f108,0x0f04f1b8,0x3604d001,0xf8d5e787,
+0xf8b2280c,0x051b3688,0xf8a20d1b,0xf1b93688,0xd0020f00,0xf7fe4628,
+0xb009fbb5,0x83f0e8bd,0x00021040,0x00021024,0xb5706b43,0x46052400,
+0x4dcef880,0xd0702b00,0x3848f8d0,0xf00d6818,0xf400f88b,0xf5b06040,
+0xd1666f40,0x3848f8d5,0x56a2f505,0xf00d6818,0xb2c0f87f,0x28023634,
+0x4620d801,0xf8d5e009,0x68183848,0xf874f00d,0x3802b2c0,0xfb902308,
+0xf8d5f0f3,0x5c343848,0xf00d6818,0xb2c0f869,0xd8012802,0xe0142001,
+0x3848f8d5,0xf00d6818,0x4a2ef85f,0x3802b2c0,0x0202ea00,0xda052a00,
+0xea6f3a01,0xea6f7242,0x32017252,0xfa132301,0x4004f002,0xf8d5d12a,
+0x68183848,0xf848f00d,0x28ddb2c0,0x4620d901,0xf8d5e007,0x68183848,
+0xf83ef00d,0x3002b2c0,0xf8d510c0,0x5c343848,0xf00d6818,0xb2c0f835,
+0xd90128dd,0xe0092301,0x3848f8d5,0xf00d6818,0x3002f82b,0x0007f000,
+0x40832301,0xd1014223,0xe0002401,0xb2e42400,0xf8d5e016,0x68183848,
+0xf81af00d,0x00c4f3c0,0xf2411828,0x5cc44374,0x3848f8d5,0xf00d6818,
+0xf000f80f,0x41040007,0x0401f084,0x0401f004,0x4628b11c,0xf7fe2101,
+0xbd70fae1,0x80000007,0xf890b570,0x46053024,0xf8d0b1eb,0xf8b03848,
+0x68184324,0xfff4f00c,0xd1144284,0x5154f505,0x31344628,0xfa62f7fe,
+0x3326f995,0x4628b11b,0xfb8ef7fe,0xf243e013,0x5ceb5338,0x4628b17b,
+0xfcdaf7fe,0x4628e00b,0xfa5cf7fe,0xf44f2300,0xf8853100,0x46283d3d,
+0xf7fe460a,0x4628fac9,0xfb68f7fe,0xf7fe4628,0xbd70fb55,0xf011b570,
+0x460c6500,0x007ff001,0x4a10d009,0xfb002314,0x7c1b2303,0x2107f3c1,
+0x2303ea41,0x4b0ce011,0xb2804798,0xf1b3b203,0xd1053fff,0xf6454809,
+0xf7f901de,0x4628faf9,0x021bb203,0x0302f043,0xf3c4b29b,0xea4320c2,
+0xbd7000c0,0x1e00c744,0x0001ed4d,0x00021040,0x460db570,0x46042154,
+0xf960f7fe,0x6f00f015,0xf241d005,0x5ce333e4,0x0303f003,0xf005e00e,
+0x2b02037f,0x2b04d008,0x2b0bd006,0xf1b3d004,0xbf180216,0xe0002201,
+0x46132200,0x0203f020,0x0202ea43,0x21544620,0xf7feb292,0x4629f81f,
+0xf7ff4620,0x21b0ffa7,0x46204602,0xf816f7fe,0x46c0bd70,0x4605b570,
+0xf7f96880,0xb340feeb,0x3714f895,0xd0242b01,0x3848f8d5,0x68182101,
+0x47984b11,0x3848f8d5,0x68182101,0xfef8f00c,0xf8d52401,0xf885280c,
+0xf8d24714,0x462831e0,0x0320f023,0x31e0f8c2,0xfa5cf7fe,0x46214628,
+0xfb44f7ff,0x46214628,0x47984b04,0x746c2000,0xf04fe001,0xbd7030ff,
+0x0001ea19,0x0001de2d,0x4604b510,0xf7f96880,0xb320feb5,0x3714f894,
+0x4620b30b,0xf7ff2100,0x2100fb29,0x46204b0e,0x46204798,0xffc2f7fe,
+0x280cf8d4,0xf8d22100,0xf04331e0,0xf8c20320,0xf8d431e0,0x68183848,
+0xfeb6f00c,0x3848f8d4,0x68182100,0x47984b03,0xf8842300,0xbd103714,
+0x0001de2d,0x0001ea19,0x3710f8d0,0x4605b570,0xf7ffb113,0xe029ffc9,
+0xf7f96880,0xb328fe7f,0x3714f895,0xd0212b01,0x3848f8d5,0x68182101,
+0x47984b0f,0x3848f8d5,0x68182101,0xfe8cf00c,0xf8d52401,0xf885280c,
+0xf8d24714,0x462831e0,0x0320f023,0x31e0f8c2,0xf9f0f7fe,0x46214628,
+0xfad8f7ff,0x46214628,0x47984b02,0x46c0bd70,0x0001ea19,0x0001de2d,
+0xf890b570,0x46043d11,0x2710f8d0,0xb322b943,0x0304f022,0x3710f8c0,
+0xf7ffb9fb,0xe01cfadf,0x0304f082,0x0680f3c3,0xfd64f7fe,0xbf181e45,
+0xb12e2501,0xf894b98d,0xf8843d18,0xe00c3d1a,0xb155b95e,0x3710f8d4,
+0xf0234620,0xf8c40304,0xf7ff3710,0xf884ff9d,0xbd705d18,0x7c43b570,
+0xb30b4605,0x3718f890,0xf890b1f3,0xb1713d6c,0xf8d5b1d3,0x4b0d1d1c,
+0x073cf8d0,0x23004798,0x3d6cf885,0x47984b0a,0x0d70f8c5,0xb95be00c,
+0xf8d03301,0xf8d5073c,0xf44f1d1c,0x4c05727a,0x230147a0,0x3d6cf885,
+0x46c0bd70,0x1e006221,0x1e005aa5,0x1e0061f9,0xf880b510,0xb1211de0,
+0x3d63f890,0xbf181e19,0xf7ff2101,0xbd10ffc7,0xb5706a81,0x7f00f411,
+0xd01e4604,0x7100f421,0xb9316281,0x073cf8d0,0x32fff04f,0xf9c4f7fd,
+0xf890e013,0xb183303f,0x03fff021,0x2507b96b,0x40ab2301,0xea136aa2,
+0xd1040102,0x073cf8d4,0xf7fd462a,0x3d01f9b1,0xbd70d2f2,0x2207b510,
+0x47984b01,0x46c0bd10,0x0001fa51,0x4ff7e92d,0xb004f8d1,0xf02b4699,
+0x688b7446,0x24b8f424,0x460d4607,0x604c9300,0x2a004692,0x80b5f000,
+0x21cff891,0x81cef891,0x92014650,0xfb96f7fd,0x01d0f8a5,0x3002f89a,
+0xf8854606,0xf44431d2,0x606b3380,0x302ef897,0xf444b17b,0x606b23a0,
+0x3244f895,0xf8d5b973,0x2b0430f4,0xb94bd000,0x46384b66,0x22064629,
+0x4b65e003,0x46294638,0x47982206,0x46382204,0x4b614629,0xf3c64798,
+0x2a010281,0x2a03d006,0xb942d009,0xf8852301,0xe00131ce,0x21cef885,
+0x21cff885,0x2300e004,0x31cef885,0x31cff885,0x31cef895,0xd0024543,
+0x0801f04f,0xf895e007,0x9a0131cf,0x0802ebb3,0xf04fbf18,0xf4160801,
+0xd0037f40,0xf043686b,0x606b4380,0x0f20f016,0x68abd003,0x0301f043,
+0xf01660ab,0xd0030f40,0xf04368ab,0x60ab0302,0xf0039b00,0x68ab0203,
+0x0303f003,0xbf18429a,0x0801f04f,0x0f10f016,0x686bd103,0x1380f443,
+0xf416606b,0xd0034f80,0xf043686b,0x606b7300,0x0402f006,0x0f00f1b9,
+0xf507d03c,0x300950a0,0x22164649,0xf9caf7fa,0xf899b11c,0xf0033001,
+0xf8990404,0xf0133001,0xd0030f08,0xf043686b,0x606b7380,0x0002f109,
+0xfb00f7fd,0x0008f010,0xf8b7d00f,0xf6413324,0xf4030210,0xf6404370,
+0xf5b34108,0xbf085f80,0xf241460a,0x52fa33ea,0xf241e010,0x52f833ea,
+0x4c1de00c,0x47a02204,0x46294638,0x47a02206,0x46294638,0x47a02205,
+0x465446d0,0xf3cb686b,0xf4034200,0xf3c33180,0x429a4300,0xf897d011,
+0xb9733023,0x7086f505,0xb1293001,0x0103f10a,0xf7fa2210,0xe002f97f,
+0xf7fa2210,0xf04ff95b,0xb1340801,0xf41b686b,0xf4432f00,0x606b2300,
+0xf1b8d002,0xd0030f00,0x46294638,0xffbcf014,0x8ffee8bd,0x0001fa51,
+0x0001f9d5,0x4ff7e92d,0x9decf8b0,0xfb09230c,0xf503f303,0xf500635f,
+0x18c3665e,0x360c4607,0x0804f103,0x0a00f04f,0xe01f9101,0x46594b14,
+0x47984630,0xf7fe4604,0x9b01fca3,0xd0084298,0x46594630,0x4b0f4622,
+0xbf082d00,0x47984625,0x6cb8e004,0x22014621,0x47984b0b,0x3c0cf858,
+0xd1e342ab,0x0a01f10a,0x080cf1a8,0x0309ebca,0xf10345ca,0xd0013bff,
+0xe7ef2500,0x8ffee8bd,0x1e003ac5,0x1e0039cd,0x1e005c41,0xf243b570,
+0x594315dc,0x2b004604,0xf8d0d033,0x788307f8,0x2104b113,0xfb76f014,
+0x2b065963,0x2b08d005,0x2b09d003,0x2b0ad001,0xf243d106,0x58e113d4,
+0x073cf8d4,0x47984b0f,0x51baf504,0x311c4620,0xff46f014,0x210cb110,
+0xfe8ef014,0x5148f504,0x4b093114,0x47984620,0xf7ff4620,0x2100fe59,
+0x13d8f243,0x50e14620,0xfc32f7fe,0xf7fe4620,0xbd70fe61,0x1e006221,
+0x0001dec9,0x7c43b510,0xb9134604,0x0003f06f,0x6880e045,0xfc2af7f9,
+0xd03e2800,0x3714f894,0xd03a2b00,0x07f8f8d4,0xf0142104,0x4620fb2f,
+0xffa8f7ff,0x5339f243,0xb14b5ce3,0x5154f504,0x31344620,0xf8baf008,
+0x607af44f,0x47984b14,0x21004620,0xf886f7ff,0x4b122100,0x47984620,
+0xf7fe4620,0xf8d4fd1f,0x2100280c,0x31e0f8d2,0x0320f043,0x31e0f8c2,
+0x3848f8d4,0xf00c6818,0xf8d4fc13,0x21003848,0x4b076818,0x23004798,
+0xf8844618,0x74633714,0xf04fe001,0xbd1030ff,0x1e005d75,0x0001de2d,
+0x0001ea19,0xb5702908,0x460e4605,0xb169d00d,0x62b4f241,0x2b025883,
+0x3301d102,0xe01d5083,0xf2412203,0x50c263b0,0x2601e018,0x54acf505,
+0x4628342c,0x4b0a4621,0xf5054798,0x302450a4,0x46214b08,0xf2414798,
+0x58ab62b4,0xd0042b02,0x62b0f241,0x2b0258ab,0x50aed100,0x46c0bd70,
+0x0001dec9,0x0001dc9d,0x4170e92d,0x3848f8d0,0x68184602,0x4688b085,
+0x6805685e,0xf00c6b54,0x23fffc11,0x3c00b2c0,0x2401bf18,0x93012100,
+0x462a9003,0x46334640,0x94029100,0xfb52f011,0xe8bdb005,0x46c08170,
+0x43f0e92d,0xf8954605,0xf5ad1024,0xf8d07d1b,0xb9090848,0xe00d4607,
+0x2324f8b5,0x6328f505,0x4270f402,0x5f00f5b2,0xf44fbf14,0x2200729e,
+0x189f3304,0xb1bc6bfc,0x6f00f014,0x8096f000,0xf8b5b131,0xf4033324,
+0xf5b36340,0xe0066f40,0xf00c6800,0xf400fbdd,0xf5b06040,0xf0406f40,
+0xf4448085,0xe0816480,0xf44f4621,0xa80272da,0xffe0f7f9,0x4621a86f,
+0xf7f92284,0xf505ffdb,0x365c563c,0x46a046a1,0xf8d66830,0xf010c004,
+0xf0006f00,0xd00a0e7f,0xea4fa96f,0x588b028e,0x45434463,0xd90c508b,
+0x46984604,0xa902e009,0x028eea4f,0x4463588b,0x508b4543,0x4698bf84,
+0xf1094674,0x36080901,0x0f40f1b9,0x2c00d1dc,0xf8d5d14c,0x6b693d4c,
+0xbf181e1a,0xf8952201,0xb18b3024,0x4621b909,0xf8b5e008,0xf4033324,
+0xf5b36340,0xbf146f40,0x21012100,0x704af505,0xf9bef011,0xe0314604,
+0x4621b909,0xf241e012,0x5ceb33ef,0x0f02f013,0xf897d00a,0xf0133047,
+0xd1050f08,0x3114f897,0xbf181e18,0xe0002001,0xb2c12000,0x0678f107,
+0xf0114630,0x687bf9a1,0x2b024604,0x7b3ad112,0x33fdb982,0x6b6b9300,
+0x3b004c09,0x2301bf18,0x46309301,0xa9902301,0x9b9047a0,0x18d3aa9a,
+0x4c25f813,0xf50d4620,0xe8bd7d1b,0x46c083f0,0x0001ed85,0x0f02f011,
+0x4605b573,0x4611d01d,0xfdbef014,0xb1c04606,0x3024f895,0xf505b113,
+0xe002704a,0x50bcf505,0x237f3010,0x88f39300,0xf0032200,0x93010301,
+0x01f8f106,0x4c034613,0x462847a0,0xf0144631,0xbd7cfdab,0x0001ed85,
+0x2600b5f0,0xf8d04605,0xf880780c,0xf5006d5d,0xb08b5058,0x22064631,
+0xf7f93008,0x4631ff27,0xf5052206,0xf7f9703d,0xf505ff21,0x463150be,
+0x30322206,0xff1af7f9,0x4320f243,0x462850ee,0x47984b61,0xf7fe4628,
+0x6b6bfba1,0xd0742b00,0x3848f8d5,0xf00c6818,0xf400faf7,0xf5b06040,
+0xd16a6f40,0x3848f8d5,0x54a2f505,0xf00c6818,0xb2c0faeb,0x28023434,
+0x4631d801,0xf8d5e009,0x68183848,0xfae0f00c,0x3802b2c0,0xfb902308,
+0xf8d5f1f3,0x5c643848,0xf00c6818,0xb2c0fad5,0xd8012802,0xe0142001,
+0x3848f8d5,0xf00c6818,0x4a46facb,0x3802b2c0,0x0202ea00,0xda052a00,
+0xea6f3a01,0xea6f7242,0x32017252,0xfa132301,0xea10f002,0xd12d0604,
+0x3848f8d5,0x54a2f505,0xf00c6818,0xb2c0fab1,0x28dd3434,0x4630d901,
+0xf8d5e007,0x68183848,0xfaa6f00c,0x3002b2c0,0xf8d510c0,0x5c243848,
+0xf00c6818,0xb2c0fa9d,0xd90128dd,0xe0092301,0x3848f8d5,0xf00c6818,
+0x3002fa93,0x0007f000,0x40832301,0xd1014023,0xe000461c,0xb2e42401,
+0xf8d5e014,0xf5053848,0x681854a2,0xfa80f00c,0x3848f8d5,0x00c4f3c0,
+0x5c243434,0xf00c6818,0xf000fa77,0x41040007,0x0401f004,0x4628b11c,
+0xf7fe2101,0x4628fbd3,0xfcecf7fd,0x4300f04f,0x3188f8c7,0x4628210f,
+0xfa6cf7fd,0xf2404628,0xf7fd31ff,0xf8d5fa91,0x685b3848,0xd1052b02,
+0x33c7f642,0x5ce94628,0xfc08f7fd,0xf7fd4628,0x4628f9a7,0xfd62f7fd,
+0x46282300,0x93004669,0xf83ef7ff,0xf7fd4628,0xb00bffa3,0x46c0bdf0,
+0x0001e951,0x80000007,0x3324f8b0,0xf403b570,0x460d4370,0xf5b34611,
+0xbf145f80,0x22012200,0xf0144604,0x4606fc93,0xf015b158,0xd10403fe,
+0x3d62f884,0xf7fe4620,0x6873fbd1,0x0300f423,0xbd706073,0x9c04b513,
+0xf2439400,0x590044ec,0xfdeaf008,0x46c0bd1c,0x2400b573,0x4623461a,
+0x460e4605,0xf7ff9400,0x4603ffed,0x4628b120,0x46324902,0xfec8f7fd,
+0x46c0bd7c,0x000078d1,0x9c04b513,0x9c059400,0xf2439401,0x590044ec,
+0xfdd4f008,0x46c0bd1c,0x47f0e92d,0x9909460f,0x46994604,0x0518f101,
+0x31c46c80,0x46904b1f,0x46064798,0xf8d4b928,0x330133c0,0x33c0f8c4,
+0x6903e031,0x0f03f013,0x4819d004,0x6150f248,0xfd22f7f8,0x463021ac,
+0xfe5ef7fe,0x46304629,0xfe40f7fe,0x0a3b6934,0x70632500,0x70a57027,
+0x1d2070e5,0x22064641,0xfdf4f7f9,0x000af104,0x22064649,0xfdeef7f9,
+0x0010f104,0x22069908,0xfde8f7f9,0x75e575a5,0x34189b0a,0x4630601c,
+0xf7fe2107,0x4630fdef,0x87f0e8bd,0x1e005c25,0x00021040,0x4605b570,
+0xb921460e,0xf2484814,0xf7f8610a,0x6ca8fce9,0x01acf106,0x47984b11,
+0xb9284604,0x33c0f8d5,0xf8c53301,0xe01433c0,0xf0136903,0xd0040f03,
+0xf2484809,0xf7f86113,0x21acfcd3,0xf7fe4620,0x4620fe0f,0xf7fe4631,
+0x4620fdf1,0xf7fe2100,0x4620fdbd,0x46c0bd70,0x00021040,0x1e005c25,
+0x47ffe92d,0xa048f8d0,0x46084607,0x4691460e,0xfdcaf7fe,0x68b26933,
+0x1a9b4680,0xd8412bab,0x21ac4650,0x47984b50,0xb9304605,0x33c0f8d7,
+0x33014606,0x33c0f8c7,0x21ace092,0xfde0f7fe,0xd10442ae,0xf2454849,
+0xf7f80185,0xf106fc99,0x7a0b011c,0x001cf105,0x23007203,0x7a4b720b,
+0x72434a43,0x6103690b,0xea0369f3,0x69eb0202,0x61eb4313,0x72837a8b,
+0x4641698b,0x46286183,0xfd74f7fe,0x46306934,0xf7fe210e,0x210efdb9,
+0xf7fe4628,0x6928fdd1,0x220e4621,0xfd56f7f9,0x462e602e,0xf1b86934,
+0xd03c0f00,0x2004f8d9,0xea024b30,0x2b000303,0xf8d7d135,0xb3533dbc,
+0x7b607b23,0x2000ea43,0xfe74f7fc,0x4f01f5b0,0xf10dd021,0x46210502,
+0x4628220c,0xfd36f7f9,0x46302104,0xfda8f7fe,0x220c4629,0xf7f94604,
+0xf44ffd2d,0xf7fc4001,0x7320fe5d,0x200ff3c0,0xea4f7360,0xf4003048,
+0xf7fc4060,0x73a0fe53,0x200ff3c0,0x69fb73e0,0xf897b12b,0xb9111da8,
+0xf7fe4630,0x6934fd23,0x7b607b23,0x2000ea43,0xfe40f7fc,0x53dcf240,
+0xd9114298,0x038ef648,0xd1034298,0xf04369f3,0x61f30310,0x462269f3,
+0x0308f043,0x463861f3,0x46334651,0x47a04c06,0xb0044630,0x87f0e8bd,
+0x1e005c25,0x00021040,0x03804460,0x00010040,0x0001db75,0x2600b573,
+0x6007f88d,0x6006f88d,0x6007f88d,0x3d46f890,0x5430f500,0x34244605,
+0xf89db12b,0xf0433006,0xf88d0301,0x4b123006,0x79a34798,0xd10b4283,
+0x2007f89d,0x429379e3,0xf89dd106,0x7a232006,0xd1014293,0xe0114630,
+0xf89d71a0,0x71e33007,0x3006f89d,0xf6427223,0x5ceb4325,0xdd042b1d,
+0xf2484804,0xf7f85138,0x2001fbcb,0x46c0bd7c,0x0001e0bd,0x00021040,
+0xf890b570,0x46043d5e,0xb133460d,0x0f80f011,0xf8d0d003,0xf01307f8,
+0xf894ff13,0xb1133d5f,0x0f80f015,0xf243d004,0x58e043ec,0xfd1ef009,
+0x46c0bd70,0x4604b573,0xf884460d,0xb3191d5e,0x3d5df890,0xf890bb03,
+0xb1eb3023,0x3024f890,0xf243b1d3,0x5ac353d2,0xf243b163,0x58c253c8,
+0x5352f5a3,0xea023b41,0xb11b0303,0x2390f642,0xb14b5cc3,0x3d67f894,
+0xf894b133,0xf1d33d3c,0xbf380301,0xe0002300,0xf8842300,0x7c633d5f,
+0xd0322b00,0xf7fe4620,0xf894f9d9,0x2b003d5f,0x2680bf14,0xf8942600,
+0xb1f33023,0x3024f894,0xf504b1db,0x31085158,0x784a788b,0x780b431a,
+0x78ca4313,0x790b431a,0x794a4313,0xd008431a,0x33fff04f,0x93002200,
+0x46134620,0xfdeaf7ff,0x4620b918,0xf7ff4631,0x4620ff8b,0xf7fe4629,
+0x4620fc01,0x4b014629,0xbd7c4798,0x0001de2d,0xf890b510,0x46043d53,
+0x4b0db1b3,0xf8944798,0x21003d50,0x18634318,0x532bf503,0x3102881a,
+0x1329f640,0xbf98429a,0x0001f040,0xd1f2290c,0x0301f1d0,0x2300bf38,
+0x3d52f884,0x46c0bd10,0x0001e66d,0x4ff0e92d,0xb0a32400,0x460d4607,
+0xf8dd461e,0xf8dda0c0,0x941fb0c4,0x9204941e,0x4894b922,0x1159f645,
+0xfb0ef7f8,0x2805982e,0x4890d904,0x115af645,0xfb06f7f8,0x2e006929,
+0x2602bf0c,0xf1052603,0x9107021c,0x92159611,0x784b780a,0xea426cb8,
+0x93052303,0x0381f3c3,0xbf082b02,0x930a9c05,0x4623bf14,0x13c0f3c4,
+0x9313b2db,0x4b804629,0x30044798,0xf1ba9009,0xd0030f00,0x300ff99a,
+0x900918c0,0x3830f8d7,0xda212b00,0x0f00f1ba,0xf89ad01e,0x2b023008,
+0xf642d11a,0x5cfb2391,0xf8d7b9b3,0xf8d33dd0,0xf0133094,0xd10f0f08,
+0x3006f89a,0xd80b2b35,0xd9092b03,0xd8072b0b,0x2801982d,0x9909d104,
+0x31089016,0xe0019109,0x92162200,0x46282106,0xfc0ef7fe,0x90082168,
+0xf7fe4628,0x2100fc09,0x46062268,0xfb6ef7f9,0x68239c15,0x6f80f413,
+0x88a4d001,0x9804e02f,0x68424b5c,0x0303ea02,0x9905b313,0x03fcf001,
+0xd11d2b88,0x79139a07,0x0f01f013,0x4628d118,0xfba2f7fe,0x992c9b04,
+0x0040eb03,0x4170f8b0,0x1e43982d,0xd1124299,0xf7fe4628,0x9a04fb95,
+0x0040eb02,0x3170f8b0,0xf8a03301,0xe0063170,0x2b019b0a,0x2400d013,
+0x0910f04f,0x9d0ae004,0xd00c2d01,0x0900f04f,0x9907982c,0x030ff000,
+0x1304ea43,0x758bb29b,0x75cb0a1b,0xf04fe001,0x9a2e0900,0xd1172a04,
+0x204df896,0x74fcf241,0x304cf896,0xea435b38,0xf2482302,0xea030218,
+0x01410202,0x73e0f647,0x0204f042,0x0303ea01,0x431a3001,0xe0175338,
+0x9d2c9c2d,0xf2411e63,0x429d71fa,0xd1015a7a,0x527b1c53,0x992e982c,
+0x030ff000,0x1302ea43,0xf647015b,0xea0372e0,0xf0010202,0x431a0307,
+0x2084f8ad,0x4b229a05,0x02fcf002,0xea0b2a80,0x92190303,0xf049bf08,
+0xb91b0920,0x3848f8d7,0xb03cf8d3,0xea0b491a,0xb1210101,0xb078f8cd,
+0xb07cf8cd,0xf8d7e023,0x6c1a3848,0xea024b14,0xb13b0303,0x79239c07,
+0x0f01f013,0x921ed002,0xe04b921f,0x792b9d07,0x0f01f013,0x980ad108,
+0x2801b130,0x9915d004,0xf013680b,0xd0110f10,0xf8929a04,0xf00330fc,
+0x931e037f,0x2300931f,0xe034930f,0x00021040,0x1e003e11,0x00010040,
+0x0800007f,0x9300ab1e,0x0387f10d,0xf10d9301,0x93020386,0x0382f10d,
+0xf8d79303,0xab1f07f0,0xaa219904,0xff24f010,0x3082f8bd,0x0f01f013,
+0x9c15d004,0xf4436823,0x60235300,0x682b9d15,0x0f10f013,0x9804d005,
+0x30fcf890,0x037ff003,0x992c931e,0x0101f1d1,0x2100bf38,0x68bb910f,
+0xb98b6b5b,0x3008f89a,0xd10d2b02,0xf0129a1f,0xd1096f00,0x037ff002,
+0xd9052b30,0x037ff022,0x0330f043,0x931e931f,0x3848f8d7,0xf8936b7c,
+0x991f5045,0xf0002c00,0xf01181b0,0xf0016f00,0xd004027f,0xd9062a07,
+0xd0042a20,0x4ba1e036,0x2b00569b,0x2900da32,0xf421db30,0xf4201040,
+0xf0115060,0x901f6f00,0x9a04d025,0xf0136853,0xd0064f80,0x3848f8d7,
+0x3046f993,0x3ffff1b3,0xf8d7d005,0xf9933848,0x2b013046,0x4a92d113,
+0x5180f440,0xf0002314,0xfb00007f,0x7c1a2303,0x4319f642,0xeba35cfb,
+0x3b011392,0xea41b2db,0x911f5103,0xea40e002,0x931f23c5,0xf011991e,
+0xf0016f00,0xd004027f,0xd9062a07,0xd0042a20,0x4b80e037,0x2b00569b,
+0x9b1fda33,0xdb302b00,0x1040f421,0x5060f420,0x6f00f011,0xd025901e,
+0x68639c04,0x4f80f013,0xf8d7d006,0xf9933848,0xf1b33046,0xd0053fff,
+0x3848f8d7,0x3046f993,0xd1132b01,0xf4404a70,0x23145180,0x007ff000,
+0x2303fb00,0xf6427c1a,0x5cfb4319,0x1392eba3,0xb2db3b01,0x5103ea41,
+0xe002911e,0x23c5ea40,0xf8d7931e,0x68183848,0xfdb8f00b,0x2828b240,
+0xf8d7d141,0x68183848,0xfdbaf00b,0xf4009b1f,0xf5b07040,0xbf147f00,
+0x24032402,0x6f00f013,0x027ff003,0x2a20d012,0x46a0d102,0xe03f2405,
+0x33eef241,0xf1b356fb,0xd1213fff,0x686b9d04,0x2f00f413,0x46a0d033,
+0xe0312404,0x569b4b4d,0xda022b00,0x33edf241,0x2a02e00e,0x2a04d00a,
+0x2a0bd008,0x2a16d006,0x4848d004,0x2135f645,0xf8d2f7f8,0x33ecf241,
+0xf1b356fb,0xd0163fff,0xb29c46a0,0x9b1fe014,0x0802f04f,0x037ff003,
+0xbf042b20,0x6300f04f,0x9b1e931f,0xf0034644,0x2b20037f,0xf04fbf04,
+0x931e6300,0x46a0e000,0x02219b1f,0x63e0f423,0x0303ea41,0x9b1e931f,
+0x62e0f423,0x6f00f013,0xea41bf14,0xea420302,0x921e2308,0x931e9a1f,
+0x6100f012,0x910ed103,0x9117910d,0xf642e075,0x56fb33e1,0xd1132b03,
+0x98119904,0xf000684b,0xf01300fd,0x90110f40,0x9a13d01b,0x4b22b1ca,
+0x5d1b9c2e,0x0343eb07,0x3d88f8b3,0xe013b18b,0xd1052b02,0x2302f3c2,
+0x2b013b04,0xe008d80c,0xd1092b01,0x20009d11,0x05fdf005,0x900e9511,
+0x2101e004,0xe001910e,0x920e2200,0x68639c04,0x1388f403,0x1f88f5b3,
+0xf642d003,0x5cfb33e3,0x9d11b11b,0x05fdf005,0xf8d79511,0x68183848,
+0xfc0af00b,0xf1b0b240,0xd0133fff,0xd10d2801,0xf0409811,0xb2db0302,
+0xe00b9311,0x1e00c634,0x1e00c744,0x00021040,0x00021010,0xf0019911,
+0x911101fd,0xf0039b1f,0x2b07037f,0x2b20d90c,0x9a04d00a,0x31cef892,
+0xf892b133,0xb11b31cf,0x930d2301,0xe0029317,0x940d2400,0x9d119417,
+0x0302f015,0x2303bf18,0x9a1f9311,0x6f00f012,0xf8d7d003,0x2b013d4c,
+0xf41bd002,0xd0020f00,0x0300f442,0xf8d7e004,0xb9133d4c,0x0300f422,
+0x9a1e931f,0x6f00f012,0xf8d7d006,0x2b013d4c,0xf442d102,0xe0040300,
+0x3d4cf8d7,0xf422b913,0x931e0300,0xf4139b1f,0xd0340f00,0x027ff003,
+0xd9012a07,0xd12e2a20,0x6400f013,0x2000d002,0xe0289011,0xf645488b,
+0xf7f7218d,0x9411ffe9,0xf011e021,0xd0046f00,0xf6454886,0xf7f72195,
+0x9b1effdf,0x6f00f013,0x4882d004,0x2196f645,0xffd6f7f7,0x9a1e9b1f,
+0x63e0f423,0x62e0f422,0x7300f443,0x7200f442,0x921e931f,0x940d940e,
+0x0802f04f,0x990f9417,0xf642b189,0x593a7458,0xeb07991f,0xf64200c2,
+0x50c1735c,0x32019b2d,0xf002b2d9,0xf642023f,0x50c17360,0x981f513a,
+0x6400f010,0xf410d02c,0xf4000f00,0xd01363e0,0x3b040a1b,0xf8df2b01,
+0xf000e1a4,0xd805017f,0xfb012314,0xf8d3e303,0xe01bb00c,0xfb012314,
+0xf8d3e303,0xe015b008,0x3b040a1b,0xf8df2b01,0xf000e17c,0xd805017f,
+0xfb012314,0xf8d3e303,0xe007b004,0xfb012314,0xf853f303,0xe001b00e,
+0x0b7ff000,0x2d029d0a,0xb96dd000,0x23ccf642,0x99095afb,0xdd074299,
+0x79139a07,0x0f01f013,0xbf089b0d,0x930d2301,0x3848f8d7,0xb1517b19,
+0x33dcf642,0xb1335cfb,0x4a47b92c,0x037ff000,0x2b0056d3,0x6b7bdb06,
+0xb304b30b,0x33e1f642,0xb1e356fb,0x2d019d2d,0xf642d909,0x5cfb33dc,
+0x2316b10b,0x2330e000,0x931f931e,0xb171e00f,0x33dcf642,0xb1535cfb,
+0x4a37b94c,0x037ff000,0x980e56d3,0x0023ea30,0x2001bf28,0x9a1e900e,
+0x6f00f012,0xf412d029,0xf4020f00,0xd01163e0,0x3b040a1b,0xf8df2b01,
+0xf002e0b4,0xd804027f,0xfb022314,0x68d9e303,0x2314e01d,0xe303fb02,
+0xe0186899,0x3b040a1b,0xf8df2b01,0xf002e090,0xd804027f,0xfb022314,
+0x6859e303,0x2314e00b,0xf303fb02,0x100ef853,0xf002e005,0xf44f027f,
+0xfb0273fa,0x9a1ff103,0x6f00f012,0xf412d030,0xf4020f00,0xd01163e0,
+0x3b040a1b,0xf8df2b01,0xf002e04c,0xd804027f,0xfb022314,0x68dae303,
+0x2314e024,0xe303fb02,0xe01f689a,0x3b040a1b,0xf8df2b01,0xf002e028,
+0xd804027f,0xfb022314,0x685ae303,0x2314e012,0xf303fb02,0x200ef853,
+0x46c0e00c,0x00021040,0x1e00c634,0x1e00c744,0x027ff002,0x73faf44f,
+0xf203fb02,0xd9044291,0xf645487e,0xf7f721f6,0x991efec3,0x910c4638,
+0x991f2200,0x4c7a2301,0xb92047a0,0xf6454877,0xf7f721f9,0x4638feb5,
+0x2200991e,0x47a02301,0x4872b920,0x21faf645,0xfeaaf7f7,0x9c049b1e,
+0x027ff003,0x6f00f013,0xbf189b1f,0x4200f442,0x017ff003,0x6000f013,
+0x4201ea42,0xbf189b15,0x4200f042,0x6863615a,0x3f80f413,0xf897d02e,
+0x2b003d45,0xf897d02a,0xb33b3d48,0x33e1f642,0x2b0356fb,0xb938d022,
+0xd01f2902,0xd01d2904,0xd01b290b,0xd0192916,0x792b9d07,0x0f01f013,
+0x9819d114,0xd1112888,0x8b2a9915,0xf449680b,0xf4434980,0x600b5380,
+0x739ff64f,0x0303ea02,0x0320f043,0x832b2201,0xe0019210,0x93102300,
+0x991f4638,0x9b089a09,0xf10d4c4a,0x47a00572,0x4638462b,0x9a09991e,
+0x220647a0,0x0036f106,0xf7f84629,0x9b1eff33,0x6f00f013,0xf003d110,
+0x2b02037f,0x2b04d005,0x2b0bd003,0x2b16d001,0x9c09d106,0x2307f3c4,
+0x403af886,0x303bf886,0x682a9d15,0x6f80f412,0x9b1fd01a,0x6f00f013,
+0x9b1ed016,0x6f00f013,0xf1bad012,0xd0030f00,0x3008f89a,0xd10b2b04,
+0xf4429815,0x60036300,0x33e7f241,0x990d5cfb,0xbf182b00,0x910d2101,
+0xf011991f,0xd10a6f00,0xf0014a27,0x56d3037f,0xda042b00,0x78139a08,
+0x030ff003,0x9b08e001,0x9c05781b,0x2ca4930b,0x9d07d010,0xf013792b,
+0xd10b0f01,0xb9589810,0x9a114638,0x4c1b9b2f,0x70a847a0,0x200ff3c0,
+0xe01970e8,0xb15a9a10,0xf6409a11,0x4638132a,0x47a04c15,0x30029b07,
+0x7098b280,0x70d80a00,0x2ca49c05,0x9d07d108,0x78ea78ab,0x2302ea43,
+0x303cf886,0xe0090a1b,0x79039807,0x0f01f013,0x9910d101,0x2300b191,
+0x303cf886,0x303df886,0x46c0e018,0x00021040,0x0001d375,0x0001dce1,
+0x1e00c634,0x0001d929,0x0001d299,0x991e4638,0x9b2f9a11,0x47a04cac,
+0x003cf886,0x200ff3c0,0x003df886,0x68139a15,0x7f00f413,0x8993d00d,
+0x5900f449,0x3042f886,0xf8860a1b,0x89d33043,0x3044f886,0xf8860a1b,
+0x9b2c3045,0xf049b90b,0x9c070908,0x34049d07,0x792b9418,0x0f01f013,
+0x9815d114,0xf4126802,0xd10f5f80,0x3d47f897,0xf012b113,0xd1090f40,
+0x6f80f412,0x9913d104,0xf897b111,0xb90b3d83,0x0901f049,0x2a029a0a,
+0xf897d109,0xb1333d45,0x0f04f1bb,0x9b17d903,0xf449b90b,0xf8d75980,
+0x68183848,0xfa20f00b,0xf4009c16,0xf5b06040,0xbf086f40,0x7980f449,
+0xf449b10c,0xea4f4900,0xf8862319,0x70739000,0x0f00f1ba,0xf642d01a,
+0x5cfb2391,0xf0402b00,0xf8d78481,0xf8d33dd0,0xf0133094,0xf0400f08,
+0xf89a8479,0x2a352006,0x8474f200,0x300cf89a,0x0307f003,0x1202ea43,
+0xbc6df000,0x0a132200,0x70f370b2,0x1d302400,0x22029907,0xfe1af7f8,
+0x71f471b4,0x402cf886,0x402df886,0x0f00f1ba,0xf642d039,0x5cfb2391,
+0xd1342b00,0x3dd0f8d7,0x3094f8d3,0x0008f013,0xf89ad12d,0x2b353006,
+0x9a05d829,0xf4029d07,0xf5b37340,0x9b137f40,0x0118f105,0xf105bf08,
+0xb103011e,0xf89a3102,0x2b023008,0x4632d111,0x0300eb0a,0x30bcf8b3,
+0xf3c37593,0x75d32307,0x32021c83,0x46182b0a,0xf106d1f2,0x22030020,
+0xf99ae003,0xf106200e,0xf7f80016,0x2206fdd7,0x0026f106,0xf7f89918,
+0xf89dfdd1,0x22003084,0x304cf886,0x3085f89d,0x204ef886,0x304df886,
+0x204ff886,0xb10c9c0d,0xe003920e,0x2d009d0e,0x8165f000,0x2200991f,
+0x46384643,0xf80cf7fc,0x46432200,0x991e4683,0xf7fc4638,0x4681f805,
+0x7832980e,0xb1207873,0x2303ea42,0x6300f443,0xea42e003,0xf0432303,
+0xf1060306,0x70330a50,0xf01a0a1b,0x70730f01,0x482ad004,0x4107f645,
+0xfcaef7f7,0x4c28990e,0xbf0c2900,0x0814f04f,0x080ef04f,0x4638ad1b,
+0x46424659,0x47a04653,0x4638462b,0x46424649,0x462947a0,0xf1062206,
+0xf7f8002e,0x9b11fd7b,0xf1069c09,0x25000256,0x93009212,0x990e9401,
+0x9b1f465a,0x95024c17,0x47a04638,0x0058f886,0x200ff3c0,0x0059f886,
+0x99099811,0x91019000,0x9502464a,0x990e4638,0x47a09b1e,0x0034f886,
+0x200ff3c0,0x0035f886,0xf1069a0e,0xb19a005a,0x033bf06f,0x3056f886,
+0x5057f886,0x22069b07,0x010af103,0x46c0e011,0x0001d929,0x00021040,
+0x0001dce1,0x0001d9d5,0x034bf06f,0x3056f886,0x220c9c0e,0x4057f886,
+0xf7f89918,0xf01bfd33,0xd10a6400,0xf00b4ab5,0x56d3037f,0xda042b00,
+0x3000f89a,0x030ff003,0xf896e001,0x9d0b3050,0xea43021b,0x950b0505,
+0x6500f019,0xf419d029,0xf4090f00,0xd01163e0,0x3b040a1b,0xf8df2b01,
+0xf009e2a4,0xd804017f,0xfb012314,0x68d8e303,0x2314e019,0xe303fb01,
+0xe0146898,0x3b040a1b,0xf8df2b01,0xf009e280,0xd804017f,0xfb012314,
+0x6858e303,0x2314e007,0xf303fb01,0x000ef853,0xf009e001,0xb34c007f,
+0x0f00f41b,0x63e0f40b,0x0a1bd011,0x2b013b04,0xe248f8df,0x017ff00b,
+0x2314d804,0xe303fb01,0xe01968da,0xfb012314,0x689ae303,0x0a1be014,
+0x2b013b04,0xe224f8df,0x017ff00b,0x2314d804,0xe303fb01,0xe007685a,
+0xfb012314,0xf853f303,0xe001200e,0x027ff00b,0xd9044290,0xf645487e,
+0xf7f74139,0x980cfbd5,0x6f00f010,0xf410d02a,0xf4000f00,0xd01163e0,
+0x3b040a1b,0xf8df2b01,0xf000e1dc,0xd804017f,0xfb012314,0x68d8e303,
+0x2314e01b,0xe303fb01,0xe0166898,0x3b040a1b,0x2b019a0c,0xe1b4f8df,
+0x017ff002,0x2314d804,0xe303fb01,0xe0086858,0xfb012314,0xf853f303,
+0xe002000e,0xf0039b0c,0xb34d007f,0x0f00f419,0x63e0f409,0x0a1bd011,
+0x2b013b04,0xe17cf8df,0x017ff009,0x2314d804,0xe303fb01,0xe01968da,
+0xfb012314,0x689ae303,0x0a1be014,0x2b013b04,0xe158f8df,0x017ff009,
+0x2314d804,0xe303fb01,0xe007685a,0xfb012314,0xf853f303,0xe001200e,
+0x027ff009,0xd91c4290,0x9030f8cd,0x990ee019,0xf1062206,0xf7f80050,
+0x990efc31,0xf1062210,0xf7f80056,0xf106fc2b,0x990e002e,0xf7f82206,
+0x9c0efc25,0x4034f886,0x4035f886,0x941246a3,0x9d1546a1,0xf413682b,
+0xd00b6f80,0xf0129a1f,0xd0076f00,0x07e8f8d7,0x9b099904,0xfe5cf002,
+0x0033f886,0x0a03980b,0x74f374b0,0xf0139b1e,0xd0046f00,0x33e4f241,
+0x8003f817,0xf003e00e,0x2b02037f,0x2b04d007,0x2b0bd005,0x3b16d003,
+0x2301bf18,0x2300e000,0xf883fa1f,0x6f00f01b,0xf241d004,0x5cfb33e4,
+0xe00e009d,0x037ff00b,0xd0072b02,0xd0052b04,0xd0032b0b,0xbf183b16,
+0xe0002301,0x009b2300,0xf019b29d,0xd0046f00,0x33e4f241,0x011c5cfb,
+0xf009e00e,0x2b02037f,0x2b04d007,0x2b0bd005,0x3b16d003,0x2301bf18,
+0x2300e000,0xb29c011b,0x3848f8d7,0xf00a6818,0xf8d7ffab,0xb2c03848,
+0x6819681b,0xffa6f00a,0x0308ea45,0xea434323,0xb29b2300,0x0a1b7533,
+0x991f7573,0x6f00f011,0xf241d00a,0xf81733e4,0xe0148003,0x1e00c634,
+0x00021040,0x1e00c744,0x037ff001,0xd0072b02,0xd0052b04,0xd0032b0b,
+0xbf183b16,0xe0002301,0xfa1f2300,0x9a11f883,0x0201f012,0xd05e9206,
+0xf0139b0c,0xd1536500,0x037ff003,0xd0042b02,0x4314f642,0x2b0156fb,
+0x9c07d14a,0x78e378a2,0x2303ea52,0x4638d009,0x9b2f462a,0x47a04c91,
+0x70889907,0x200ff3c0,0xf89670c8,0xf896203c,0xea52303d,0xd00b2303,
+0x991e4638,0x9b2f462a,0x47a04c88,0x003cf886,0x200ff3c0,0x003df886,
+0x2a009a12,0x9c12d02b,0x78e37892,0x2303ea52,0x9809d025,0x9001990e,
+0x9b1f465a,0x95004c7e,0x46389502,0x991247a0,0xf3c07088,0x70c8200f,
+0x95009a09,0x95029201,0x990e4638,0x9b1e464a,0xf88647a0,0xf3c00034,
+0xf886200f,0xe0060035,0x33b8f8d7,0x0810f048,0xf8c73301,0xf64233b8,
+0x5afb431a,0xf4034638,0xea487370,0xf3c50503,0x7273230f,0x991f7235,
+0xff40f7fd,0xf3c072b0,0x72f0200f,0x4638991e,0xff38f7fd,0xf3c07330,
+0x7370200f,0xb90b9b0d,0xb17c9c0e,0x46384659,0xff2cf7fd,0xf3c073b0,
+0x73f0200f,0x46384649,0xff24f7fd,0xf3c07430,0x7470200f,0xf011991f,
+0xd0126f00,0x0f10f015,0x9a09d10f,0x46384b53,0xf3c04798,0xf886230f,
+0xf886003e,0xb920303f,0xf645484f,0xf7f7419d,0x991efa1f,0x6f00f011,
+0xf015d012,0xd10f0f10,0x4b489a09,0x47984638,0x230ff3c0,0x0040f886,
+0x3041f886,0x4844b920,0x41a2f645,0xfa08f7f7,0xf011991f,0xd0276f00,
+0x3848f8d7,0x017ff001,0xf00a6818,0xf8d7feb5,0x991f3848,0xf001b2c4,
+0x6818017f,0xfeb4f00a,0xb240b264,0xb2a21a24,0x291fb211,0x221fdd01,
+0xf64fe005,0xf11173e0,0xbfb80f20,0x0292461a,0xf40205ab,0x0d9b427c,
+0x7232431a,0x72720a12,0x686b9d04,0x0f40f013,0x810cf000,0x28009813,
+0x8108f000,0x992e4b27,0x93145c5b,0x0343eb07,0x3d88f8b3,0xf0002b00,
+0x9a1880fd,0xf0137813,0xd0040f01,0xf645481e,0xf7f741bf,0x9c15f9bd,
+0xf4136823,0xf0406f80,0x9d2c80ed,0xf0402d00,0x9c1f80e9,0x46214638,
+0x9b099a11,0x47a84d16,0x98124682,0x4659b1c0,0x4c149a11,0x47a04638,
+0x46054649,0x46389a11,0x991247a0,0x788b78ca,0x2302ea43,0x0803eb05,
+0x2035f896,0x3034f896,0x2302ea43,0xe02a18c0,0xb18a9a10,0x46d09812,
+0x46c0e025,0x0001d929,0x0001d9d5,0x0001d225,0x00021040,0x00021010,
+0x0001d299,0x0001d91d,0x9a114621,0xf8df9b10,0x4638b17c,0x9d1e47d8,
+0x9b099a11,0xeb004629,0x4c57080a,0x47a04638,0x46814629,0x46389a11,
+0x47d89b10,0xfa1f4448,0x71b3f388,0x71f30a1b,0xf886b283,0x0a1b302c,
+0x302df886,0xebca9d14,0xeb070008,0xf8b30345,0x42833d88,0x8086f0c0,
+0xebc09c1f,0xf0140003,0xf0046f00,0xd016017f,0x23144a44,0x2303fb01,
+0xf3c47c1a,0xeb035301,0xf06f1392,0xfb030203,0x3b18f302,0xf8d7181d,
+0xf4043848,0x685b0600,0xd0052b02,0x4b3ae005,0x2b00565b,0xe02fda39,
+0xf4043d06,0xb17e63e0,0x3b040a1b,0xf8df2b01,0xd804e0cc,0xfb012314,
+0x68dbe303,0x2314e014,0xe303fb01,0xe00f689b,0x3b040a1b,0xf8df2b01,
+0xd804e0ac,0xfb012314,0x685be303,0x2314e004,0xf303fb01,0x300ef853,
+0x08ab0098,0xf300fb03,0x43aaf5a3,0xf44f3bf0,0xfbb352fa,0xe010f0f2,
+0x0314f1a0,0x089b004a,0xf302fb03,0x08d83b16,0x9a06e007,0x3860b10a,
+0x38c0e000,0xf300fb01,0x28ff0918,0xf44fd802,0xe0057080,0x23bef642,
+0x42985afb,0x4618bf28,0xb2809c2e,0x0344eb07,0x512bf503,0x4283880b,
+0x8008d00c,0xf7fe4638,0xe007fd8f,0xf89a2200,0x2b0b3008,0xab8ef43f,
+0xbb8df7ff,0xf8bd9d15,0x682b0084,0x0304f043,0xb023602b,0x8ff0e8bd,
+0x0001d299,0x1e00c744,0x1e00c634,0x0001d929,0x41f0e92d,0x4698b088,
+0x460d9b0e,0x93014614,0x9200ab07,0x21089302,0x4623462a,0xf7fe4606,
+0x4607fb67,0x3801b908,0x2401e01a,0xf8d62500,0x95002848,0x94029401,
+0x95049503,0x8014f8cd,0x33c6f642,0x46395cf3,0x46306912,0xfd6ef7fe,
+0x46214630,0x4623463a,0xf7fb9400,0x4628febb,0xe8bdb008,0x46c081f0,
+0x4ff0e92d,0x9000f8d1,0x4606b099,0x92079108,0xf1b9461d,0xd1040f00,
+0xf24848b1,0xf7f77101,0xf8b9f873,0x7c730014,0xb1a3900b,0x3de8f896,
+0xd1352b00,0xf7fc4648,0xf8b6fca7,0x6a823324,0x4370f403,0x5f80f5b3,
+0x2300bf14,0x429a2301,0x69444682,0xf8d6d005,0x330133c4,0x33c4f8c6,
+0x4648e12e,0xf964f7fd,0xf8134b9e,0xf8d6b000,0xea4f3844,0x18cb014b,
+0x2024f9b3,0x36fcf8b6,0xb000f8c5,0xdb0e429a,0x0f03f1bb,0x198bd80b,
+0x2dc2f8b3,0x3dc0f8b6,0x0302ea23,0x3dc0f8a6,0x000ff06f,0xf8d6e12f,
+0xf8d933d0,0x33018010,0x33d0f8c6,0x2000f898,0x3001f898,0x2703ea42,
+0x4280f417,0x8118f040,0xe00d9209,0x30acf8d4,0x3ffff1b3,0x80f4f000,
+0x0383eb04,0x30b0f8d3,0x2b009309,0x80ecf000,0x3844f8d6,0x038beb03,
+0x681b68db,0xd8022b03,0x034beb06,0xf3c7e7c8,0x2d020581,0x2200d001,
+0xf3c7e001,0xf40712c0,0xf5b37340,0xf1087f40,0xbf080418,0x041ef108,
+0x920ab90a,0x4620e006,0xfa1cf7fb,0x0007f000,0x3402900a,0xd0002d02,
+0xf417b9fd,0xd01c4f00,0x0404ebc8,0xad0cb2e4,0x46414622,0xf7f84628,
+0x2104f8c1,0xf7fd4648,0x4622f917,0x0010f8d9,0xf7f84629,0xf8d9f8b7,
+0x047b8010,0xf8880c5b,0x0a1b3000,0x3001f888,0xf8964444,0x25013d5e,
+0x5d82f886,0xf8d6b363,0x4b572d60,0x0303ea02,0x7f00f1b3,0x4630d106,
+0xf7fe2100,0x4630fc0b,0xfa30f7fc,0xb1db69f3,0x0f03f1bb,0x4b4dd818,
+0xf89a980a,0x5c192183,0x5c5b4b4c,0xf012411a,0xd00d0f01,0x42abf243,
+0xb91b5cb3,0x463054b5,0xfdfcf7fc,0x3004f8da,0x6300f043,0x3004f8ca,
+0x29009909,0x2301d02c,0x46309300,0x9a094623,0x1014f8da,0x47a04c3e,
+0x980b9a09,0x300ff992,0x900b1ac0,0x2b027a13,0xf1b0d103,0x910b0108,
+0x2b0be012,0x9a09d110,0xf1029b0b,0xf1020014,0xf1a30124,0x46430210,
+0xfed0f7fa,0x482cb120,0x0107f648,0xff68f7f6,0x990b4648,0xf88af7fd,
+0x3004f8da,0x25009809,0x90042401,0xf3c34649,0x46300380,0x95004652,
+0xf8cd9401,0x9503b008,0xf7fe9505,0x9908fc2f,0x454b680b,0x6cb0d004,
+0x46224649,0x47984b1f,0x980b9a07,0xf8d66014,0x330133a4,0x33a4f8c6,
+0x33a8f8d6,0x69f0181b,0x33a8f8c6,0xd0362800,0x990a4b12,0x5c5a980b,
+0x5c9a4b12,0x02c2eb06,0x3638f8d2,0xf8c23301,0xf8d23638,0x18c3363c,
+0xf8c24628,0xe022363c,0x22009907,0x4630600a,0xf7fb990b,0x6cb0fba9,
+0x22014649,0x47984b07,0x30fff04f,0x46c0e013,0x00021040,0x000238e6,
+0xff0000ff,0x00021010,0x0001e859,0x1e005c41,0x2010f8da,0x2a009209,
+0xaef2f47f,0xb019e6e2,0x8ff0e8bd,0x47f0e92d,0x4604680e,0x4690460f,
+0xb9264699,0xf2454817,0xf7f621c4,0x69f3fef1,0x0f04f013,0x4813d004,
+0x21c5f245,0xfee8f7f6,0xb1357c65,0x46394620,0x464b4642,0xfe5cf7ff,
+0xf8d4e016,0x463133c4,0xf8c43301,0x6ca033c4,0xf8c84b09,0x47985000,
+0x4601462a,0xf7fb4620,0x6ca0fb5b,0x22014631,0x47984b04,0x30fff04f,
+0x87f0e8bd,0x00021040,0x1e003e11,0x1e005c41,0x43ecf243,0x58c0b510,
+0xf8ecf009,0x46c0bd10,0x4a44b5f0,0x7813b097,0x460f4604,0xd17e2b00,
+0x70133301,0x6dc0f8b0,0x69cbe039,0x6f80f413,0xf8d4d006,0xa90307e8,
+0xf0049a15,0xe021f979,0x0f04f013,0xd006ad13,0x46202301,0x9314462a,
+0xfd62f7fc,0x4620e005,0xaa14a903,0xf7ff462b,0xb978ff91,0xe0094605,
+0x93002301,0xf852aa03,0x46202025,0xf7fb9913,0x3501fcb5,0x429d9b14,
+0xe00cdbf2,0x0f10f110,0x4b27d109,0x99154638,0x47989a03,0x3dc0f8b4,
+0xd00a429e,0xb146461e,0x46384631,0x4b21aa15,0x46014798,0x28009003,
+0x69e3d1bb,0x6aa1b983,0xf8b4b371,0x2b0f3df2,0xf421d82a,0x62a17180,
+0xf8d4bb31,0xf04f073c,0xf7fa32ff,0xe01ffe79,0x303ff894,0x2507b1e3,
+0xfa132301,0x6aa0f105,0xd0134201,0x5cea4b10,0xfb02230c,0xf8b34303,
+0x2b0f3dfc,0xea20d80a,0xf0330301,0x62a301ff,0xf8d4d104,0x462a073c,
+0xfe5af7fa,0xd2e33d01,0x22004b02,0xb017701a,0x46c0bdf0,0x00023c54,
+0x1e003a4d,0x1e003d3d,0x0002101c,0x3df0f8b0,0x47f0e92d,0x46062b1f,
+0x46154689,0x4882d804,0x71b3f644,0xfe18f7f6,0x0f00f1b9,0x487ed104,
+0x71b4f644,0xfe10f7f6,0x0f1cf119,0x487ad104,0x71c5f644,0xfe08f7f6,
+0xf506b91d,0x34345454,0x682be0e2,0xd1012b01,0xe0dd68ac,0x5454f506,
+0x35083434,0xf104e00f,0x788b01d4,0x431a784a,0x30d4f894,0x78ca4313,
+0x790b431a,0x794a4313,0xd01d431a,0xf8962500,0xf8d93023,0xb1eb1010,
+0x01d4f104,0x780bb9d5,0x0f01f013,0xf8b6d116,0x46302324,0x4270f402,
+0x5f80f5b2,0x2200bf14,0xf0122201,0x4607fceb,0x6943b110,0xd02c42a3,
+0x33c4f8d6,0xf8c63301,0xe07f33c4,0xf8b6780b,0xf0132324,0xd0080f01,
+0x4370f402,0x5f80f5b3,0x2350bf14,0x58e72354,0xf402e011,0x46304270,
+0x5f80f5b2,0x2200bf14,0xf0122201,0x4607fe47,0xf8d6b928,0x330133c0,
+0x33c0f8c6,0xb125e05e,0xf2454845,0xf7f60127,0x4630fd9f,0x463a4649,
+0xf8daf7fe,0x28004680,0xf8d4d050,0xf2402094,0xea021307,0xb1830303,
+0xf01369c3,0xd10c0f10,0xb953693b,0x30acf8d4,0x3ffff1b3,0xeb04d03d,
+0xf8d30383,0x2b0030b0,0xf894d037,0x2c034058,0x4831d904,0x0140f245,
+0xfd76f7f6,0x031cf108,0x611f725c,0xf013687b,0xd0060340,0xf7fc4640,
+0x4b2afe7f,0x4b2a5c1a,0xeb065c9b,0xf8d30383,0xb1233eb8,0x46394630,
+0xf7fb4642,0x4640f87f,0x91f4f8d7,0x41f8f8d7,0xfe6af7fc,0xf0004b21,
+0x46390507,0x46424620,0x47c85d5b,0x615ef506,0x310c4630,0xfe90f7ff,
+0x46c1e02b,0xb1eb69f3,0xf7fc4648,0x4c15fe55,0x5c234d15,0x5cea4648,
+0x02c2eb06,0x3658f8d2,0xf8c23301,0xf7fc3658,0x5c23fe47,0x5cec4649,
+0xeb066cb0,0x4b0e04c4,0x565cf8d4,0x19404798,0x065cf8c4,0x46496cb0,
+0x4b0a2201,0xe0044798,0x2b007923,0xaf50f43f,0x2000e721,0x87f0e8bd,
+0x00021040,0x000238e6,0x00021010,0x0002101c,0x1e003e11,0x1e005c41,
+0x3df0f8b0,0x41f0e92d,0x46062b1f,0x46144688,0x485cd804,0x7140f644,
+0xfcfef7f6,0x0f00f1b8,0x4858d104,0x7141f644,0xfcf6f7f6,0x4855b124,
+0x7143f644,0xfcf0f7f6,0xf7fc4640,0xb2c4fe01,0x0010f8d8,0x78437802,
+0x2303ea42,0x0281f3c3,0xd1052a02,0x7f40f413,0x2200bf14,0xe0082201,
+0x2200b10a,0xf3c3e005,0x2b091303,0x2200bf14,0x79032201,0xf0131d01,
+0xd00d0f01,0x2324f8b6,0x5384f243,0x4270f402,0x5f80f5b2,0xf44fbf18,
+0x18f35356,0xe025685f,0xf8b6b19a,0x46302324,0x4270f402,0x5f80f5b2,
+0x2200bf14,0xf0122201,0x4607fd4d,0xf8d6b9b0,0x330133c0,0x33c0f8c6,
+0x4630e042,0xfbd8f012,0xb1284607,0x5354f506,0x33346942,0xd005429a,
+0x33c4f8d6,0xf8c63301,0xe03133c4,0x5d1a4b28,0x5c9b4b28,0x0383eb06,
+0x3eb8f8d3,0xf243b91b,0x58f343dc,0x4630b123,0x46424639,0xffaaf7fa,
+0x538cf243,0x2d035cf5,0x481cd904,0x717cf644,0xfc7ef7f6,0x031cf108,
+0x611f725d,0xf0044b1a,0xf8d70407,0x463901f8,0x51f4f8d7,0x5d1b4642,
+0xf50647a8,0x4630615e,0xf7ff310c,0xe01afdb1,0xb19b69f3,0x6cb04b0e,
+0x4b0e5d1a,0x5c9c4641,0x04c4eb06,0x3658f8d4,0x565cf8d4,0xf8c43301,
+0x4b0a3658,0x19404798,0x065cf8c4,0x46416cb0,0x4b072201,0x20004798,
+0x81f0e8bd,0x00021040,0x000238e6,0x00021010,0x0002101c,0x1e003e11,
+0x1e005c41,0x43f0e92d,0x7c434698,0x4606b087,0x4615460f,0x903cf89d,
+0x482db923,0x61bdf248,0xfc2ef7f6,0x482ab925,0x61c0f248,0xfc28f7f6,
+0xf7fc4638,0x2807fd39,0xdd044604,0xf2484824,0xf7f661c3,0x686afc1d,
+0xea024b22,0xb1230303,0xb11369f3,0xf8134b20,0x22018004,0x9a0e9201,
+0x92052300,0x462a4630,0x93004639,0x93049303,0x8008f8cd,0xf8e2f7fe,
+0xf0044b18,0x5c980207,0xf50662fd,0x350c655e,0xdd01280d,0xe000230f,
+0x4c131c43,0x46294630,0x47a0463a,0xb1404604,0x0f00f1b9,0x4630d103,
+0xf7ff4629,0x2001fd31,0x6cb0e00a,0x46394b0b,0x47982201,0x33c0f8d6,
+0x33014620,0x33c0f8c6,0xe8bdb007,0x46c083f0,0x00021040,0x00010040,
+0x000238e6,0x0002101c,0x0001e1ad,0x1e005c41,0x43f7e92d,0x5458f500,
+0x46213408,0xf0124605,0x4606faf3,0xd0312800,0xf4136843,0xd0010700,
+0xe02c2001,0x43ecf243,0xf00658e8,0x4680fc43,0xf04fb320,0x46280901,
+0x9d62f885,0xfa0ef7fc,0x46414628,0x23034632,0x97019700,0xff66f7ff,
+0x4628b160,0x4622490b,0xf7fb4643,0xb928fd15,0x46486873,0x0300f443,
+0xe0086073,0x46282400,0x4d62f885,0xf9f2f7fc,0xe0004620,0xe8bd2000,
+0x46c083fe,0x00007aed,0x4ff0e92d,0x468a4680,0x1048f8d8,0x9102b08b,
+0x302af892,0x8b904617,0x9303b90b,0xf892e002,0x92032022,0x402cf897,
+0xf410b9a4,0xd0116f00,0x683a9b03,0x0143eb0a,0x7dd27d93,0x1160f8b1,
+0x2302ea43,0xd1054299,0x355cf8d8,0xf8c83301,0xe1ff355c,0x3d62f898,
+0x2b80f3c0,0xb9acb1b3,0x0f00f1bb,0xf89ad112,0x6a7a3184,0xf0134113,
+0xd10b0f01,0x5f00f410,0x4640d003,0xff7cf7ff,0xf888e004,0x4640bd62,
+0xf9a4f7fc,0x301cf8d8,0xf243b183,0xf81842ab,0xb15b3002,0x302af897,
+0xf897b143,0xb12b3028,0xf8082300,0x46403002,0xf990f7fc,0xf0138c3b,
+0xf0400404,0xf8da81cb,0xb9233014,0xf246486f,0xf7f6010a,0x8bbbfb21,
+0x1014f8da,0x4380f403,0xb94b637b,0x2094f8d1,0x1307f240,0x0303ea02,
+0xf891b19b,0xb183309c,0x63bc9803,0x90009902,0x46404652,0x4c62463b,
+0xb93047a0,0x43ecf243,0x0003f858,0x22024639,0xf897e17f,0x2c00402c,
+0x811ef040,0xeb0a9903,0x68390041,0x5160f8b0,0x7d8b7dca,0x2302ea43,
+0x3160f8a0,0x7d8a7dcb,0xea429903,0xf0122203,0xea4f000f,0xd14b0381,
+0x050aeb03,0x1120f8d5,0x9802b149,0x4b4d4622,0xf8c54798,0xf8c54120,
+0xf8c54140,0xf1bb4254,0xf0000f00,0x697b80f5,0xf8c54847,0x68fb3120,
+0xf5c36879,0xf8c563e4,0x22083140,0x47984b43,0x3004f8da,0xf023b110,
+0xe0010308,0x0308f043,0x3004f8ca,0x43ecf243,0x2003f858,0x4b3c9803,
+0x4b3c5c19,0xeb025c5b,0x6b130283,0xf243b933,0xf83843e0,0x2b003003,
+0x80caf000,0x464069bb,0x7c597c1a,0x2101ea42,0xffeaf7fa,0xeb0a9903,
+0xf8c30381,0xe0bb0254,0x060aeb03,0x1120f8d6,0xf022b1a1,0xf025020f,
+0x429a030f,0xf005d104,0x3301030f,0xd00f4298,0x46229802,0x47984b21,
+0x4120f8c6,0x4140f8c6,0x4254f8c6,0x3400f8d8,0xf8c83301,0xe1193400,
+0xf8d668ba,0x429a3140,0xf243d8ea,0xf85843ec,0x98032003,0x5c194b18,
+0x5c5b4b18,0x0283eb02,0xb9258e15,0x43e0f243,0x5003f838,0x69bbb345,
+0x7c1a4640,0xea427c59,0xf7fa2101,0xf8d6ffa5,0x1ac03254,0xd31b42a8,
+0xf8d69802,0x46221120,0x47984b06,0x4120f8c6,0x4140f8c6,0x4254f8c6,
+0x46c0e0e8,0x00021040,0x0001ff11,0x1e005c41,0x1e00d668,0x1e00d671,
+0x000238e6,0x00021010,0x68bd9903,0x0681eb0a,0x4120f8d6,0xf8b4462a,
+0x69209014,0x44486879,0xfb10f7f7,0xeb094620,0xf7fc0105,0xf8d6fb4b,
+0x98023140,0xf8c61b5b,0x69793140,0x4b742200,0xf1bb4798,0xd13b0f00,
+0x3120f8d6,0xb140f8c6,0xf8c6617b,0x697bb120,0xb254f8c6,0x8a99691a,
+0x0318f102,0xf1a1607b,0x60bb0318,0x3029f897,0x60f9603a,0xf102b12b,
+0x607b031e,0x031ef1a1,0xf89760bb,0xb143302a,0x9a03687b,0x607b3302,
+0xf88768bb,0x3b022022,0x683a60bb,0x78527813,0x2302ea43,0x6b7b83bb,
+0x6bb9b153,0xf991687b,0x189b200e,0xf991607b,0x68bb200e,0x60bb1a9b,
+0xb1736bbb,0x2b047a1b,0x4640d103,0x4b514639,0x6bbb4798,0x2b0b7a1b,
+0x4640d103,0xf0124639,0xf1bbfba7,0xf0400f00,0x6839808f,0x0622f10d,
+0x22063104,0xf7f74630,0x6839faa5,0x310aad07,0x46282206,0xfa9ef7f7,
+0xf10d6839,0x46200416,0x22063110,0xfa96f7f7,0x3029f897,0x6839b12b,
+0x3118a804,0xf7f72206,0x8bbbfa8d,0x7f80f413,0x7300f403,0x2b00d105,
+0x4623bf14,0x677e462b,0x677ce004,0x673db90b,0xab04e001,0x683b673b,
+0x6bbb66fb,0x7a1bb1a3,0xd0112b01,0xd00f2b03,0x99024640,0x463b4652,
+0xfa6af012,0xf243b940,0xf85843ec,0x46390003,0xf0062203,0xe043fa1b,
+0x781b6f7b,0x0f01f013,0xf8d8d004,0x33013570,0x3570f8c8,0xb1336bbb,
+0x2b027a1b,0x4640d103,0x4b1c4639,0xf8d84798,0x4639370c,0x3020f8ca,
+0x43ecf243,0x0003f858,0xe7de2200,0x301cf8d8,0x6978b1eb,0xfa6cf7fc,
+0x4d144c13,0x69785c23,0xeb085cea,0xf8d202c2,0x33013698,0x3698f8c2,
+0xfa5ef7fc,0x69795c23,0x98025cec,0x04c4eb08,0xf8d44b0b,0x4798569c,
+0xf8c41940,0x9802069c,0x22006979,0x47984b02,0xe8bdb00b,0x46c08ff0,
+0x1e005c41,0x1e008225,0x000238e6,0x00021010,0x1e003e11,0x4ff0e92d,
+0xb0a32400,0x4026f88d,0x402ff88d,0x402cf88d,0x4064f88d,0x9306461d,
+0x46068a9b,0x468a2b21,0x94214690,0x940a940f,0xd95c9207,0x9010f8d5,
+0xa81f2206,0xf7f74649,0xf109f9f1,0x92010206,0x3006f899,0xea437852,
+0xf8ad2302,0xf3c33020,0xf8ad0381,0xf8bd3022,0xf3c33020,0xf8ad1303,
+0xf8bd3024,0x2b023022,0x4888d004,0x51c0f645,0xf8eef7f6,0x3020f8bd,
+0x7340f403,0x7f40f5b3,0x2300bf14,0xf88d2301,0xf8bd302d,0x2b023022,
+0xf8bdbf0a,0x46233024,0x03c0f3c3,0x302ef88d,0x3004f898,0x0303f003,
+0xd1082b02,0x3020f9bd,0xda042b00,0x3024f8bd,0x03c0f3c3,0x2300e000,
+0xf89db2d9,0xf89d002d,0xf88d302e,0x2800102f,0x2222bf0c,0xb1032228,
+0xb1013202,0x9b063204,0x42938a9b,0xf8d6d205,0x33013404,0x3404f8c6,
+0x9901e244,0xf003790b,0x7c330201,0x2030f88d,0xd0452b00,0x3024f896,
+0xb118b103,0xf88d2300,0xe0153034,0x3020f8bd,0x7f80f413,0x3104d001,
+0xf413e005,0xd0017f00,0xe000310a,0x46303110,0xf0052201,0x3800f903,
+0x2001bf18,0x0034f88d,0xf1069801,0x3004014c,0x4b512206,0xb3384798,
+0x3020f8bd,0x7f80f413,0xf89dd105,0xb1133030,0x3034f89d,0xf89db9e3,
+0xb113302d,0x3030f89d,0x7c33b9b3,0xf89db133,0x2b003034,0x81fef000,
+0xe00e2701,0xf6454841,0xf7f66128,0xe1f5f861,0x4630b932,0xf0053104,
+0x2800f8d1,0x81eef000,0x98062700,0xf7fc2106,0x9a01f993,0x0318f102,
+0xf89d9302,0xb113302d,0x031ef102,0x23009302,0x3031f88d,0x302ef89d,
+0x9802b363,0xfa6ef7fa,0x13c0f3c0,0x3031f88d,0xf896b14b,0x2b003d46,
+0x81ccf000,0x69d39a06,0x0340f043,0x4b2961d3,0x0207f000,0x2026f88d,
+0x4b275c9a,0x930a5c9b,0x1300f3c0,0x302cf88d,0x33029b02,0xf89d9302,
+0x2b0f3026,0x3064f88d,0x481cd904,0x6153f645,0xf816f7f6,0x3031f89d,
+0x9806b90b,0x4650e003,0x4b1a9906,0x8a814798,0xf7fc3904,0x9a06f92f,
+0x8a939c02,0x93046912,0x1b1b1aa4,0x46509303,0x4b134629,0x1b004798,
+0xbb1f9005,0x43ecf243,0x990158f0,0xab219a07,0xfe86f005,0xf0402800,
+0xe1ac8185,0x7200f44f,0x7340f403,0xd0114293,0x33f8f8d6,0xf8c63301,
+0xe17733f8,0x00021040,0x1e00d671,0x000238e6,0x00021010,0x1e003e21,
+0x1e003e11,0x3848f8d6,0x68189907,0xfd72f009,0x3848f8d6,0x46214604,
+0xf0096818,0xf105fd43,0xf6420b1c,0x460125d8,0x46305170,0xff2af7fb,
+0xf88bb10c,0xf896400b,0xb17b3023,0x3024f896,0x9901b163,0x5058f506,
+0x310a3008,0x4b9f2206,0xb9184798,0x59714630,0xf8eaf7ff,0x3023f896,
+0xb95fb163,0xb11b9b21,0xf0137b1b,0xd1250f02,0xf44f4897,0xf7f541be,
+0xe01fff9b,0xb9eb9b21,0x2012f898,0x3013f898,0xea429901,0xf3c22203,
+0x463002c7,0x2a0e310a,0x2200bfd4,0xf0122201,0x9021f821,0xf896b950,
+0x2b003023,0x8116f040,0x340cf8d6,0xf8c63301,0xe10f340c,0xf8b39b21,
+0xf8ad20f0,0xb923206c,0xf6454881,0xf7f57118,0xf896ff6f,0xb1433023,
+0x3030f89d,0xb927b92b,0x1394f243,0x330154f7,0xf89d54f7,0x2b003030,
+0xf896d03c,0xb14b3023,0xf1069801,0x3010014c,0x4b722206,0x28004798,
+0x80e8f000,0x1d0c9901,0x786278a3,0x790b401a,0x40137921,0x401a78e2,
+0x40117963,0x2bff400b,0xf896d020,0xb9eb3022,0xe008461d,0xfb052206,
+0x46206102,0x4b633152,0xb1684798,0xf8d63501,0x429d3114,0xf243d3f2,
+0x58f343f0,0x8822b133,0x3333f243,0xd101429a,0xe0002300,0x2b002301,
+0x80b8f040,0x46404b59,0x47984649,0x0014f8cb,0x3030f89d,0xf0402b00,
+0xf0108092,0xd0266f00,0x0f00f410,0x63e0f400,0x0a1bd010,0x2b013b04,
+0xf0004a4f,0xd804007f,0xfb002314,0x68d82303,0x2314e017,0x2303fb00,
+0xe0126898,0x3b040a1b,0x4a472b01,0x007ff000,0x2314d804,0x2303fb00,
+0xe0066858,0xfb002314,0x5898f303,0xf000e001,0x2816007f,0xd80cd03a,
+0xd025280b,0x2802d804,0x2804d016,0xe05ad01a,0xd023280c,0xd0272812,
+0x2830e055,0xd804d03c,0xd02d2818,0xd0312824,0x2860e04d,0x286cd040,
+0x2848d044,0xe046d036,0x35d8f8d6,0xf8c63301,0xe04035d8,0x35dcf8d6,
+0xf8c63301,0xe03a35dc,0x35e0f8d6,0xf8c63301,0xe03435e0,0x35e4f8d6,
+0xf8c63301,0xe02e35e4,0x35e8f8d6,0xf8c63301,0xe02835e8,0x35ecf8d6,
+0xf8c63301,0xe02235ec,0x35f0f8d6,0xf8c63301,0xe01c35f0,0x35f4f8d6,
+0xf8c63301,0xe01635f4,0x35f8f8d6,0xf8c63301,0xe01035f8,0x35fcf8d6,
+0xf8c63301,0xe00a35fc,0x3600f8d6,0xf8c63301,0xe0043600,0x3604f8d6,
+0xf8c63301,0x99213604,0xf413684b,0xd0082f80,0x3030f89d,0xf8d6b92b,
+0xaa0107e8,0xfad6f002,0x4630e03d,0xf7ffaa01,0xe038faeb,0x1e00d671,
+0x00021040,0x0001edf9,0x1e00c744,0xb30369f3,0x3030f89d,0x9806b9eb,
+0xff76f7fb,0x4d164c15,0x98065c23,0xeb065cea,0xf8d202c2,0x33013698,
+0x3698f8c2,0xff68f7fb,0x99065c23,0x46505cec,0x04c4eb06,0xf8d44b0d,
+0x4798569c,0xf8c41940,0x4650069c,0x22009906,0x47984b09,0xf896e007,
+0xf8bd2023,0x2a003020,0xae4cf47f,0xb023e64c,0x8ff0e8bd,0x000238e6,
+0x00021010,0x1e003e11,0x1e005c41,0x4ff0e92d,0x2d00f8d0,0x9105b0a5,
+0x180cf8d0,0xf4122300,0x46070f00,0x92069107,0x3d00f8c0,0x2192d031,
+0xfc98f7fa,0xb2850040,0x4638b35d,0x0108f105,0xfc90f7fa,0xb3204681,
+0xf8d39b07,0xf105a180,0x46210418,0xf7fa4638,0xf105fc85,0x4680011a,
+0xf7fa4638,0x4621fc7f,0x46384606,0xfc7af7fa,0xd1ec4580,0x4306ea48,
+0x020aebc3,0xf2f9fbb2,0xfb093201,0x46383202,0x011cf105,0xf7fab292,
+0x9906fb49,0x1f80f411,0x48bad004,0x4154f246,0xfde2f7f5,0xf0129a06,
+0xd0020f40,0xf7fa4638,0x9b06f975,0x5f00f013,0x82e1f000,0x22009905,
+0xbf0c2900,0x31fff04f,0x91082108,0xe2b59209,0x3174f8d3,0x2086f8ad,
+0x308af8ad,0x4307f3c3,0xf8ad0c12,0xf04f308c,0xf8ad0300,0xb2933088,
+0x0307f003,0x2b056cb9,0x2084f8ad,0x93119110,0x48a0d904,0x61e0f246,
+0xfdaef7f5,0xb086f8bd,0x0360f00b,0xd1062b40,0x3568f8d7,0x331beb03,
+0x3568f8c7,0x9a11e284,0xeb072100,0xf8d30382,0x6ac30778,0x46824798,
+0x9b11b950,0xf2402b05,0x489084f8,0x5162f246,0xfd8ef7f5,0xbcf1f000,
+0x5010f8da,0x786b782a,0x2803ea42,0x204df895,0x304cf895,0x2302ea43,
+0x2084f8bd,0xd004429a,0xf2464884,0xf7f57118,0xf105fd77,0x910c016e,
+0x306ef895,0xf10a784a,0xea43091c,0x920b2202,0x3026f895,0x0f01f013,
+0xf999d018,0xeb073009,0xf8d30383,0xb9244dd0,0xf2464876,0xf7f5712a,
+0xf8b7fd5b,0xf4033324,0xf5b34370,0xbf145f80,0x23012300,0x0383eb04,
+0xe0076d1e,0xf1054638,0xf3c80126,0xf01112c0,0x4606fc61,0xf8cab10e,
+0xf8d9602c,0xf4133000,0xd00f6f80,0x6fc0f418,0x07e8f8d7,0xd104ab20,
+0x46524631,0xfbf8f001,0x4631e004,0xf0024652,0xe211fc07,0xf003782b,
+0x930f0304,0x3086f8bd,0x2203f3c3,0x3813ea5f,0xd005920e,0x33acf8d7,
+0x44433b01,0x33acf8c7,0xb1339b0e,0x33acf8d7,0x3b01990e,0xf8c7185b,
+0x9a0b33ac,0xf4824651,0xf3c36380,0x930d2380,0x4b4d6cb8,0xf8bd4798,
+0xf8971086,0xf3c12d61,0x429a13c0,0x0080f001,0x4638d001,0xf897e00a,
+0xb14b3d5f,0x4638b140,0xf7fd2100,0xf8bdf931,0x46381086,0xf92cf7fd,
+0x2086f8bd,0x13c0f3c2,0x3d61f887,0x3d5ff897,0xf002b14b,0x2b820382,
+0x2300d105,0x3d5ff887,0xf7fb4638,0xf8bdfb3f,0xf00b3086,0xf0130b1c,
+0xd0390f02,0x3000f8d9,0x1300f3c3,0x0401f083,0x3548f8d7,0xf8c73301,
+0xf8d73548,0x3b013568,0xf1b84443,0xf8c70f01,0xdd053568,0x7254f642,
+0x3b0158bb,0x50bb4443,0xb1ab9b0d,0x3578f8d7,0x7254f642,0xf8c73301,
+0x58bb3578,0xf8d7b123,0x33013554,0x3554f8c7,0x2b0158bb,0xf8d7d904,
+0x33013558,0x3558f8c7,0xf0002e00,0xf8d7840e,0x6233370c,0xbc0ff000,
+0x02fef013,0xf8d9d118,0xf4133000,0xd0135f82,0x3548f8d7,0x3301990d,
+0x3548f8c7,0xf8d7b121,0x33013578,0x3578f8c7,0xf0002e00,0xf8d783f1,
+0x4614370c,0xe3f26233,0x0f0cf1bb,0x80b5f000,0x0f10f1bb,0xf8d7d10a,
+0x330135b0,0x35b0f8c7,0x46c0e0ab,0x00021040,0x1e003e11,0x0f14f1bb,
+0x69fbd115,0x4650b133,0xfd7af7fb,0x5c1a4b8d,0x5c9b4b8d,0x02c3eb07,
+0x36d8f8d2,0x33012501,0x36d8f8c2,0x462c2200,0x920a4691,0xf1bbe097,
+0xf0000f04,0xf1bb808a,0xd1080f08,0xf2464883,0xf7f571de,0x2500fc49,
+0x950a462c,0xf1bbe080,0xd07a0f18,0x308cf8bd,0xf8d7b12b,0x330133d8,
+0x33d8f8c7,0xf895e071,0xf0133026,0xd01d0201,0x0f00f1b8,0xf8d7d004,
+0x33013548,0x3548f8c7,0x2b009b0d,0xf897d05b,0x2a002023,0xf8d7d157,
+0x33013578,0x3578f8c7,0x0f00f1b8,0xf8d7d04f,0x4614354c,0xf8c73301,
+0xe049354c,0x3023f897,0x990cb1cb,0xf0137c0b,0xd0140f01,0x2b009b0d,
+0xf8d7d048,0x33013578,0x3578f8c7,0x0f00f1b8,0xf8d7d040,0x2501354c,
+0x462c3301,0xf8c746a9,0x920a354c,0x990fe03b,0xf642b911,0xe00723ce,
+0x23cef642,0x9a0e5afb,0xd004429a,0x23d0f642,0x45985afb,0xf8d7d115,
+0x44433568,0x3568f8c7,0xb91b9b0d,0x462c2501,0xe0084699,0x3550f8d7,
+0x33012501,0x3550f8c7,0xf04f462c,0x950a0900,0xf8d7e015,0x330133bc,
+0x33bcf8c7,0x2400e005,0x0901f04f,0x940a464d,0x2400e009,0x940a2501,
+0xe00446a1,0x21002501,0x46a9462c,0xb176910a,0xf4136873,0xd00a4f80,
+0xf3c29a0b,0x2b020381,0xf8d7d105,0x463107e0,0xf0044652,0x990bf921,
+0x0381f3c1,0xd91d2b01,0xb1deb1e4,0x3086f8bd,0x0f40f013,0xf013d009,
+0xd006031c,0xd0042b14,0xf646482a,0xf7f5014d,0xf642fb97,0x5afc23d2,
+0x5afb3302,0x07f0f8d7,0x93004631,0x4623aa20,0xfe9cf00e,0x99114638,
+0xf7fa2201,0xf243fe1d,0x58f843ec,0x9b0e990f,0x2900ac20,0x2300bf08,
+0x23009301,0x46519302,0x4622465b,0x8000f8cd,0xfc14f005,0x3024f89a,
+0x4638b12b,0xf8bd4651,0xf7fa2086,0xf243fc91,0xf8571898,0x2b003008,
+0xf897d03a,0x2b003023,0xf897d036,0x2b003024,0x9a0cd032,0x5058f507,
+0x30081d11,0x4b082206,0xbb484798,0x0f00f1b9,0xf243d00c,0x54f8139c,
+0x46c0e022,0x000238e6,0x00021010,0x00021040,0x1e00d671,0xb1bb9b0a,
+0x07f0f8d7,0x46224631,0xf87cf00e,0xf243b180,0x5d3b149c,0xb2da3301,
+0xf857553b,0x429a3008,0x4638d906,0x01c7f06f,0xfc6af7fe,0x9004f807,
+0x9810b125,0x22014651,0x47984b79,0xb119990d,0xf6422200,0x50fa7354,
+0x9b089a09,0x429a3201,0xd2079209,0x380cf8d7,0x2170f8d3,0x0f01f012,
+0xad42f47f,0x43ecf243,0x210058f8,0xfa04f005,0x3df2f8b7,0xf507b12b,
+0x4638615e,0xf7fe310c,0x9909fc47,0x42919a08,0xf8d7d305,0xf0433d00,
+0xf8c75300,0x9b063d00,0x0f04f013,0xf8d7d00a,0x99073458,0xf8c73301,
+0xf2433458,0x58f843ec,0xf976f005,0xf0119906,0xd00b0f20,0xf6429b07,
+0xf8d34144,0x587b2124,0x9a074313,0x3124f8c2,0x507b2300,0xf4139b06,
+0xd0046f00,0x33d8f8d7,0xf8c73301,0x990633d8,0x4f00f411,0x80b4f000,
+0x25009a05,0xbf0c2a00,0x3bfff04f,0x0b08f04f,0x46a9462c,0xb90ce008,
+0xe000461d,0xf1096063,0x45d90901,0x461cd207,0x0778f8d7,0x47986dc3,
+0x28004603,0xf8d7d1ef,0x6e030778,0xe0884798,0xf8d5686b,0x93178010,
+0x606b2300,0x4628211e,0xa048f8d7,0xfbdcf7fb,0x300cf898,0x0f04f013,
+0x8aabd006,0xd91b2b01,0x21024628,0xfbd0f7fb,0x300cf898,0xf013692c,
+0x8aae0f01,0x482dd004,0x4149f647,0xfa84f7f5,0xd9092e07,0x79e279a3,
+0x2202ea43,0x300ef898,0x0f01f013,0xe02bd006,0x3404f8d7,0xf8c73301,
+0xe04c3404,0x0081f3c2,0xd0012802,0xd12f2800,0x0110f104,0x784a788b,
+0x431a7c24,0xea4478cb,0x43130202,0x431a790a,0x4313794b,0xf014d002,
+0xd0050f01,0x3414f8d7,0xf8c73301,0xe02e3414,0x356cf8d7,0x28023301,
+0x356cf8c7,0xe00fd009,0x3d46f897,0xf8d7b31b,0x4b0d07e0,0x462a4641,
+0x4638e021,0x46424651,0xf7ff462b,0xe01bf913,0xd80f2801,0x43ecf243,
+0x6cb958f8,0x462b4642,0xfaccf005,0x46c0e010,0x1e005c41,0x00021040,
+0x0001e491,0x3410f8d7,0xf8c73301,0x4b9b3410,0x46294650,0x47982200,
+0x2d009d17,0xaf74f47f,0xd30545d9,0x3d00f8d7,0x4300f443,0x3d00f8c7,
+0xf4119906,0xd0083f80,0x21014638,0xff14f7f9,0xf8d7b118,0xf01007f8,
+0x9a06f995,0x2f80f412,0xf8d7d004,0x68183848,0xff46f008,0xf4139b06,
+0xf0005f00,0xf8df80c6,0x68398254,0x270cf8d7,0x47c04883,0x680cf8d7,
+0xf8d76839,0x4881270c,0xf8d647c0,0xf8d62154,0xf8b63158,0xb2891434,
+0xf8b69116,0xb2891436,0xf8b69115,0xf8b613e8,0xb28993ea,0xb50ef8b6,
+0xf8b69114,0xf8d6a3ee,0xf8b61180,0x91120490,0x17c0f8b6,0x57d0f8b6,
+0x47d2f8b6,0xf8adb280,0xb2891012,0xb2ad9113,0xb2a46839,0x486c9000,
+0x462a47c0,0x99134623,0x47c0486a,0xf989fa1f,0x48699912,0xfa1f47c0,
+0x9b14fb8b,0x9a159916,0xfa8afa1f,0x9000f8cd,0x47c04864,0x46594652,
+0x47c04863,0x380cf8d7,0xf8b34862,0xb28914d0,0xf8d747c0,0x4860380c,
+0x14d2f8b3,0x47c0b289,0x380cf8d7,0xf8b3485d,0xb28914d4,0x217e47c0,
+0xf7fa4638,0x21a2f80b,0x46384604,0xf806f7fa,0x46024621,0x47c04856,
+0x311af241,0xf7f94638,0xf241fffd,0x46053116,0xf7f94638,0xf241fff7,
+0x46043118,0xf7f94638,0x4622fff1,0x46294603,0x47c0484c,0x3126f241,
+0xf7f94638,0x4601ffe7,0x47c04849,0x47c04849,0x0800f04f,0xf8d6e0c3,
+0xab182154,0x310450ca,0xd1f82920,0xab182400,0x484358e1,0x34044d43,
+0x2c2047a8,0x4842d1f7,0x0801f108,0xf1b847a8,0xf0400f08,0x68b980ac,
+0x3321f244,0x429a6b0a,0x6b4bd101,0x483bb123,0x41c9f246,0xf93cf7f5,
+0x35b4f8d7,0x073cf8d7,0xf8c73301,0xf7f935b4,0x9a06fb29,0xda742a00,
+0x380cf8d7,0x61992100,0x3d63f897,0xd16c2b02,0x2d80f8b7,0xd05b2a00,
+0x3d82f897,0xf8b7b133,0xf8873d7e,0xf8a71d82,0xe0513d80,0xf8a71e53,
+0xb29b3d80,0xd14b2b00,0x37f8f8d7,0xb993789b,0xf7f94638,0xb970fc0d,
+0x3d63f897,0xd10a2b02,0x3de0f897,0xf243b13b,0x58fb13dc,0x4638b91b,
+0xf7fc2101,0xf897fd53,0xb13b3d5f,0x0100f04f,0x1d80f8a7,0xf7fa4638,
+0xe036fb5f,0xf7fa4638,0xe032fb6d,0x1e005c41,0x00021046,0x00021086,
+0x000210ba,0x000210f2,0x00021125,0x00021138,0x00021181,0x000211a0,
+0x000211b2,0x000211c4,0x000211d6,0x000211f3,0x00021236,0x0002124b,
+0x00021252,0x1e004461,0x00021250,0x00021040,0x2b02687b,0x4823d804,
+0x21b0f646,0xf8c0f7f5,0x280cf8d7,0x5320f44f,0xf8b76193,0xb12b3df2,
+0x615ef507,0x310c4638,0xf9faf7fe,0xf7f94638,0xb920fb1f,0xf2464817,
+0xf7f541f6,0x9a05f8a9,0xd01e2a01,0x3d00f8d7,0x4812b1db,0x41f9f246,
+0xf89ef7f5,0x2100e015,0x480ee739,0x7108f246,0xf896f7f5,0xbb08f7ff,
+0xf04f4634,0x23000901,0x930a464d,0xf04fe4df,0x21000901,0x910a464d,
+0xf8d7e4ca,0x38000d00,0x2001bf18,0xe8bdb025,0x46c08ff0,0x00021040,
+0x41f0e92d,0x7c434698,0x4606b086,0x4615460f,0x4827b923,0x6177f248,
+0xf86ef7f5,0xf8d6b915,0x691d3848,0xf7fb4638,0x2807f97b,0xdd044604,
+0xf248481f,0xf7f5617e,0x2301f85f,0x93012200,0x92004b1c,0x46305d1b,
+0x9b0c9302,0x93049203,0x462a9b0d,0x46399305,0xf7fc4643,0x4b16fd2b,
+0x0207f004,0x62fd5c98,0x655ef506,0x280d350c,0x230fdd01,0x1c43e000,
+0x46304c10,0x463a4629,0x460447a0,0x4630b128,0xf7fe4629,0x2001f97d,
+0x6cb0e00a,0x46394b0a,0x47982201,0x33c0f8d6,0x33014620,0x33c0f8c6,
+0xe8bdb006,0x46c081f0,0x00021040,0x000238e6,0x0002101c,0x0001e1ad,
+0x1e005c41,0xb087b5f0,0x468e4605,0x7030f8bd,0xb10b461e,0xe002695c,
+0x5454f500,0x23023434,0xab059301,0x93029200,0xf1044628,0x21c003da,
+0xf7fc4672,0x4604fac1,0x9b05b160,0x801f4621,0x23004628,0x93004632,
+0xf7ff9301,0x2800ff79,0x2400bf08,0xb0074620,0x46c0bdf0,0x43f0e92d,
+0x790b4698,0xf013b087,0x46050401,0x4617460e,0xf500d125,0x33085358,
+0x9000f892,0xab059300,0xf1069302,0x21d0020a,0x034cf100,0x8004f8cd,
+0xfa92f7fc,0xb1904606,0x46424639,0xf7f69805,0x9a05f8b1,0x6349ea6f,
+0x6353ea6f,0x46287013,0x46224631,0x94004623,0xf7ff9401,0xb007ff41,
+0x83f0e8bd,0x41f0e92d,0x46104605,0x4616461c,0xf8c6f7fb,0x3df0f8b5,
+0x2b1f4607,0x4820d804,0x7105f644,0xffa8f7f4,0x615ef505,0x46284623,
+0x4632310c,0x47a04c1b,0x6ca8b920,0x22014631,0x47984b19,0xb97369eb,
+0xbb336aab,0x3df2f8b5,0xd9222b1f,0x073cf8d5,0x7380f44f,0xf04f2101,
+0x62ab32ff,0xf895e017,0xb1b3303f,0xfa112101,0x6aacf007,0xd1104220,
+0x5dda4b0c,0xfb02230c,0xf8b35303,0x2b1f3dfc,0xea40d907,0xf8d50304,
+0x62ab073c,0xf7f8463a,0xe8bdff93,0x46c081f0,0x00021040,0x0001e1ad,
+0x1e005c41,0x0002101c,0xf89db5f7,0x460e5020,0x88c94617,0xb165461a,
+0x0f80f011,0x7c43d001,0xf011b98b,0xd0010f40,0xb1637c43,0x7f80f411,
+0xf411e013,0xd0016f00,0xb9237c43,0x6f80f411,0x7c43d009,0x7c43b93b,
+0xbf0c2b00,0x0403f06f,0x0404f06f,0xf411e059,0xd0045f80,0x3844f8d0,
+0x2b007a1b,0x2300d04f,0x4c299301,0x46394630,0x47a0462b,0x28004604,
+0x2d00d147,0x8933d045,0x2b063b01,0x4639d841,0x2204a801,0xf806f7f6,
+0x99018933,0x2b053b02,0xe8dfd837,0x0305f003,0x22070a0c,0xe0222200,
+0xe0092300,0x4300f06f,0x2300e002,0x2300e017,0x33d3ea6f,0x33c3ea6f,
+0xf04388f0,0xf010027f,0xd0010320,0xe0032301,0x0f10f010,0x43d3bf08,
+0xdb114299,0xdc0f4291,0xf04fe013,0xea6f33ff,0xea6f4213,0x88f34202,
+0x0f20f013,0xb119d000,0x03fff042,0xd9044299,0x041cf06f,0xf06fe001,
+0x4620040a,0x46c0bdfe,0x1e003891,0x4ff0e92d,0x4617b089,0x2050f89d,
+0x469a4680,0x468b9207,0x4845b921,0x3176f643,0xfecef7f4,0x2b009b13,
+0x4841da04,0x3178f643,0xfec6f7f4,0xb9529a07,0xb1139b12,0x2a009a13,
+0x483bd16e,0x317bf643,0xfebaf7f4,0xb917e068,0x0f00f1ba,0x4836d00c,
+0x317ef643,0x9b12e006,0x0f03f013,0x4832d004,0x3184f643,0xfea8f7f4,
+0x646ef508,0xf04f3408,0x68250900,0x4658b195,0x4b2c213a,0xb9084798,
+0xe006465e,0xe0041c46,0x4b294631,0xb1204798,0x6828350c,0xd1f72800,
+0xb945e000,0x0901f109,0xf1b93434,0xd1e40f16,0x0416f06f,0xb917e038,
+0xf8dd9f12,0x892ba04c,0x4619b90b,0x9913e003,0xbf182b08,0x9b072104,
+0xb11388aa,0x1c5e0053,0x0056e000,0x23349a12,0x9a139202,0x8303fb09,
+0x9a159203,0x92059104,0xf8cd9700,0xf8d3a004,0xf8d34ef4,0x46290eec,
+0x465b4632,0xf01647a0,0x46040f01,0x4640d00c,0xfb12f7fc,0x3d58f8d8,
+0xf8c83301,0xe0033d58,0x2b049b13,0xe7a3d09b,0xb0094620,0x8ff0e8bd,
+0x00021040,0x1e00411d,0x1e004041,0x43f7e92d,0x46062934,0x4617460d,
+0xf8dd4698,0xd0159028,0x2902dc05,0x2903db0e,0x291bdd10,0x29d6e009,
+0xdc01d00c,0xe00429a3,0xd00729fb,0x130bf240,0xd0034299,0xf1b8b1e7,
+0xdd190f00,0x46294630,0x4643463a,0x9000f8cd,0xfd70f003,0x0f17f110,
+0xd10b4604,0x43ecf243,0x462958f0,0x4643463a,0x9000f8cd,0xfec8f004,
+0xe0184604,0xe009b910,0x0401f06f,0x0325f104,0xd9012b25,0xe0012400,
+0x4708f8c6,0x381cf896,0x68b0b14b,0xf7f52101,0xb120f98d,0xf6434803,
+0xf7f411ff,0x4620fdf1,0x83fee8bd,0x00021040,0x7c43b510,0xf8d0b11b,
+0xf7f8073c,0xbd10ffcf,0x4603b510,0xb1187c40,0x073cf8d3,0xffccf7f8,
+0x46c0bd10,0x2201b530,0x4604b093,0xf004460d,0xb960fc2f,0x46294620,
+0xf0042201,0x2800fc29,0x4831d15f,0x5175f640,0xfdc6f7f4,0x4b2fe059,
+0x46294620,0x0203f10d,0x6b634798,0xd0322b00,0x6340f405,0x6f40f5b3,
+0xf504d12d,0xb2e950a2,0x29023034,0xf5a3d802,0xe0016340,0x10db1e8b,
+0xf8102902,0xd801e003,0xe0042201,0xf0031e8b,0x22010307,0xea12409a,
+0xd001030e,0xe01d2201,0xd80129dd,0x10db1c8b,0x5cc029dd,0x2201d901,
+0x1c8be004,0x0307f003,0x409a2201,0xbf0c4202,0x22012200,0xb2eae00a,
+0x01d2eb04,0x4374f241,0xf0025ccb,0x41130207,0x0201f003,0x46294620,
+0x0303f10d,0xfe0ef7fa,0x23bcf642,0x462052e5,0xfa26f7fb,0xb1236b63,
+0x3d58f8d4,0xf8c43301,0xb0133d58,0x46c0bd30,0x00021040,0x0001e2f1,
+0x5354f500,0x42993334,0x460ab510,0xd1034604,0x32da2100,0xfc58f7f9,
+0xf0004620,0x2000fcc1,0x46c0bd10,0x0a007008,0x47707048,0x78007843,
+0x2003ea40,0x46c04770,0x7d98690b,0xea407ddb,0x09002003,0x46c04770,
+0x4684b500,0x0e00f04f,0x0300f04f,0x3218f8a0,0xfb0e2324,0xf503f303,
+0x44637306,0x22001c99,0xf04f3201,0x2a1033ff,0x3b01f801,0x3301d1f8,
+0x0e01f10e,0x3238f8c0,0x3230f8c0,0x322af8a0,0x322cf8c0,0xf1be3024,
+0xd1dd0f04,0x46c0bd00,0x47702001,0x6804b570,0xf8842600,0x460d602e,
+0x4608b909,0x6b63e00a,0xf7ffb133,0xb118fff1,0xf8844630,0xe001502e,
+0x0016f06f,0x46c0bd70,0x6804b510,0x31f1f241,0xf8905c63,0xf023202d,
+0xf002031f,0x431a0203,0x3027f890,0xf003009b,0x431a031c,0xbd105462,
+0x41f0e92d,0x46154606,0x460c461f,0x4837b921,0x71e2f640,0xfce0f7f4,
+0xf4136863,0xd1042f80,0xf6404832,0xf7f471e3,0x6873fcd7,0xd10418e4,
+0xf640482e,0xf7f471e6,0x7924fccf,0xd0522c00,0xf8d36833,0x2b033814,
+0x2407d101,0x2c07e006,0x4826d904,0x71f9f640,0xfcbef7f4,0x6f00f015,
+0xf415d026,0xf4050f00,0xd01063e0,0x3b040a1b,0x491f2b01,0x027ff005,
+0x2314d804,0x1303fb02,0xe01768d9,0xfb022314,0x68991303,0x0a1be012,
+0x2b013b04,0xf0054916,0xd804027f,0xfb022314,0x68591303,0x2314e006,
+0xf303fb02,0xe0015859,0x017ff005,0x0311f1c4,0x409a2201,0x185b1e53,
+0xf2f2fbb3,0xdd0e42ba,0x0303f1c7,0x2204189b,0xf4f2fb93,0xdd042cff,
+0xf6404804,0xf7f471ff,0xb2e0fc7b,0x2000e000,0x81f0e8bd,0x00021928,
+0x1e00c744,0xb5706843,0x230818cc,0xf8b07163,0x46053218,0x7f7af5b3,
+0x2310d901,0xf8b57163,0xf5b3323c,0xd9017f7a,0x71632310,0x3260f8b5,
+0x7f7af5b3,0x2310d901,0xf8b57163,0xf5b33284,0xd9017f7a,0x71632310,
+0x3028f895,0xbf182bff,0x79637163,0xbf282b14,0x71a32314,0xb92368e3,
+0xf240480e,0xf7f4314b,0x68e3fc3f,0xf44f79a1,0xfbb362c8,0x4299f3f2,
+0x4619bf28,0x71a1b2c9,0x324df895,0xbf28428b,0x71a3460b,0x4803b923,
+0x3156f240,0xfc28f7f4,0x46c0bd70,0x00021928,0xb510301c,0xb11c6904,
+0x88c38822,0xd004429a,0xf2404803,0xf7f411a7,0x4620fc17,0x46c0bd10,
+0x00021928,0x4b0cb570,0x460c4606,0xb9184798,0x215c480a,0xfc08f7f4,
+0x0507f004,0xd00342a5,0x215d4806,0xfc00f7f4,0xf0238af3,0xea450307,
+0x82f30303,0x46c0bd70,0x1e005ec1,0x00021928,0x4b06b510,0x47984604,
+0x4805b918,0xf7f42155,0x8ae0fbeb,0x0007f000,0x46c0bd10,0x1e005ec1,
+0x00021928,0x41f0e92d,0x46802300,0x700b460e,0xf7ffe015,0x78f3ffe5,
+0xd0044298,0xf640480d,0xf7f451be,0x78f4fbd1,0x4b0b6d71,0x0407f004,
+0x523cf8d1,0x0240f8d1,0x5d1b463a,0xf10847a8,0x78f10010,0x47984b05,
+0x28004607,0xe8bdd1e1,0x46c081f0,0x00021928,0x0002101c,0x1e003ac5,
+0x4ff7e92d,0x46164604,0x9101461d,0x485ab921,0x61e6f501,0xfba8f7f4,
+0x4857b926,0x7131f240,0xfba2f7f4,0x2b017833,0x80a1f040,0x990178f3,
+0xfb03220c,0x79891202,0x8bf78c12,0xbf34428a,0x460b4613,0xbfa8429f,
+0x2f00461f,0x808ff000,0xf89478b2,0x429a302f,0x428fd303,0xb92dd006,
+0xf8d4e085,0x19db3084,0x3084f8c4,0x79939a01,0xd10442bb,0x3088f8d4,
+0xf8c419db,0x78f23088,0x8bf16d73,0x0342eb03,0x2170f8b3,0x33018b73,
+0x05121ad2,0x18bb0d12,0xdc6a428b,0x0301ebc2,0x83f31bdb,0x19db78b3,
+0x9b0170b3,0xf10378f1,0x4b320010,0x46824798,0x482fb920,0x716ef240,
+0xfb52f7f4,0xf7ff4650,0x78f3ff5b,0xd0044298,0xf2404829,0xf7f4716f,
+0xf8dafb47,0x6d72301c,0x6380f443,0x301cf8ca,0xf10678f3,0xeb020514,
+0xf8b20243,0xea4f1170,0x1c4b5801,0x5818ea4f,0x090ff001,0x3170f8a2,
+0x04d9ea4f,0x8020f8aa,0xf0015d2b,0xfa430b07,0xf013f30b,0xd0040f01,
+0xf2404815,0xf7f47179,0xeb06fb1f,0x791b0309,0x4811b123,0x717af240,
+0xfb16f7f4,0xfa022201,0x5d2bf20b,0x552b4313,0x6d7178f4,0xf0044b0c,
+0x5d1b0407,0x801af8a6,0x523cf8d1,0x0240f8d1,0x47a84652,0xb29f1e7b,
+0xd19e2f00,0x2000e001,0x2001e000,0x8ffee8bd,0x00021928,0x1e003ac5,
+0x0002101c,0x41f0e92d,0x46067853,0x4614460f,0xd03c2b00,0x8b108b53,
+0x1a1b3301,0x5c03ea4f,0x5c1cea4f,0x020ff000,0xe0042500,0xb29d1c6b,
+0xf0031c53,0x4565020f,0xeb04d00f,0x7d0b01d2,0x0e07f002,0xf30efa43,
+0x0f01f013,0x7d8bd105,0xf30efa43,0x0f01f013,0x182bd0e8,0x0d1b051b,
+0x8be38323,0x83e318eb,0x2301b115,0x304af884,0x46222300,0x46394630,
+0xff02f7ff,0x78638be2,0xd904429a,0xf6404803,0xf7f42133,0xe8bdfaad,
+0x46c081f0,0x00021928,0x41f0e92d,0x5049f892,0x460e4680,0xf8d04614,
+0xb1e577e8,0x463a2100,0x6bd34608,0xd10442a3,0x0280eb07,0x63d32300,
+0x1c4be00a,0x3001b299,0x290a3204,0x482fd1f1,0x2148f640,0xfa88f7f4,
+0x0048f8d8,0x22584621,0x47984b2b,0xf892e04f,0xb9233048,0xf6404827,
+0xf7f4214d,0xf016fa79,0xf8840f02,0xd03c5048,0xf0038b23,0x8c230c0f,
+0x060ff003,0xf104e02c,0xea4f0e16,0xf81e00dc,0xf00c2000,0xfa520107,
+0xf013f301,0xd01b0f01,0x408b2301,0xb2dd43db,0x0305ea02,0x3000f80e,
+0x0e14f104,0x2000f81e,0xf301fa52,0x0f01f013,0xea02d00a,0xf80e0305,
+0xeb043000,0x2300020c,0x78a37113,0x70a33b01,0x0301f10c,0x0c0ff003,
+0xd1d045b4,0x68796d63,0x18594638,0xf7ff4622,0xf8d8ff45,0x462107e8,
+0xf0002200,0xe8bdf807,0x46c081f0,0x00021928,0x1e005c15,0x4ff0e92d,
+0x3048f891,0x4680b085,0x4614460d,0xf0402b00,0x780a80da,0xf0402a01,
+0xf89180d6,0x2b31304c,0x80d1f200,0xd1052b19,0xf8813301,0xf881304c,
+0xe0c8204b,0xb10c8b08,0xe0279003,0x8beb786a,0x010ff000,0x0702ebc3,
+0x36fff04f,0x2308e010,0xf3f3fb91,0x7d9a18eb,0xea014b5c,0x411a0303,
+0x0f01f012,0x4626bf18,0xf0031c4b,0x3401010f,0xdbec42bc,0x3ffff1b6,
+0x2300d103,0x304cf885,0x1c43e0a1,0x051b199b,0x93030d1b,0xf8d86d6b,
+0x189b2004,0x484eb923,0x11f6f640,0xf9d8f7f4,0x3009f898,0xd16f2b00,
+0xa000f8d8,0x9054f8d5,0xb003f895,0x0f00f1ba,0x4845d104,0x11adf241,
+0xf9c6f7f4,0x0f00f1b9,0x4841d104,0x11aef241,0xf9bef7f4,0x3014f8d9,
+0x483db923,0x11aff241,0xf9b6f7f4,0x0f07f1bb,0x4839d904,0x11b0f241,
+0xf9aef7f4,0x6de8f89a,0xd1392e00,0x21144650,0xfcb4f7fb,0x28004607,
+0x6904d032,0x037bf06f,0x70667023,0x70e670a6,0xf1091d20,0x22060119,
+0xfa7cf7f5,0x1014f8d9,0x000af104,0x220631da,0xfa74f7f5,0x330bea4f,
+0xf043b29b,0x74230304,0x0210f104,0x70530a1b,0x46389903,0xb29b010b,
+0x0a1b7093,0x465970d3,0xfd68f7ff,0x46502401,0x464a4639,0x96002303,
+0xf7fd9401,0xbb00fd33,0xf8852301,0xe026304b,0x404bf885,0xf8d8e023,
+0x330130b0,0x30b0f8c8,0x304cf895,0xf8853301,0x2301304c,0x3048f885,
+0x842b9b03,0x3009f898,0xd1102b01,0x0000f8d8,0x462a2102,0xfea8f7ff,
+0xf8d8e009,0x49070000,0x463b462a,0xfac0f7f9,0xd1d92800,0xb005e7db,
+0x8ff0e8bd,0x80000007,0x00021928,0x0000c0ad,0x41f0e92d,0x69d34698,
+0xf4134607,0x460d6f80,0xd1044616,0xf44f483c,0xf7f46127,0x2d00f92d,
+0x686bd070,0x2f80f413,0x687bd06c,0xd10418ec,0xf6404835,0xf7f42176,
+0x4630f91f,0xfd28f7ff,0x0080eb04,0x40d8f8d0,0xd05b2c00,0x2b027823,
+0x6d63d058,0xd00442ab,0xf640482b,0xf7f4217e,0x6932f90b,0x3084f892,
+0x2085f892,0x2302ea43,0x8b230918,0xebc37862,0x051b0300,0x42930d1b,
+0xf000da40,0xf104050f,0xea4f0114,0xf8110ed5,0xf000200e,0xfa520007,
+0xf013f300,0xd1050f01,0xf6404819,0xf7f4218e,0xe02bf8e7,0x3006f898,
+0x0602f013,0x2301d013,0xea224083,0xf8010303,0x1962300e,0x71132300,
+0x463878a3,0x70a33b01,0x6d636879,0x18594622,0xfddcf7ff,0x2201e012,
+0xf8d74082,0xf10430a4,0x33010116,0x30a4f8c7,0x300ef811,0x43134638,
+0x300ef801,0x46214632,0xfe90f7ff,0x81f0e8bd,0x00021928,0x6804b510,
+0x302ef894,0xf890b1d3,0xf003302d,0x2b030303,0x4620d109,0xf64f21ba,
+0xf7f872ff,0x4620fe03,0x220a213c,0x4620e008,0xf44f21ba,0xf7f84200,
+0x4620fdf9,0x2205213c,0xfdf4f7f8,0x46c0bd10,0x4605b537,0x22082100,
+0xf7f54668,0xf105f953,0x2206014c,0xf7f54668,0xf505f96d,0x214860e8,
+0x466b2208,0xf7fa466c,0xbd3ef855,0x47f0e92d,0x461e4614,0x46884607,
+0x21004610,0xf8dd2280,0xf7f59020,0x6931f937,0x60216166,0x780b784a,
+0xea432000,0x83a32302,0xf3c38ba2,0x83e30381,0x1303f3c2,0x790b8423,
+0x7240f402,0x0301f003,0x302cf884,0xf5b28ab3,0xbf147f40,0x22012200,
+0x8be360e3,0xbf0c4282,0x251e2518,0x2b021949,0x8c23bf0a,0xf3c34603,
+0xb2db03c0,0x002ff884,0x2029f884,0xf8846061,0xb1c3302a,0xf7ff6860,
+0xf3c0faed,0xf00013c0,0xf8840207,0x4b1e302d,0x2022f884,0x4b1d5c9a,
+0x1000f3c0,0xf8845c9b,0x62630028,0x33026863,0x1cab6063,0xf899b29d,
+0xf0033004,0x2b020303,0xf9b4d107,0x2b00301c,0x8c23da03,0x03c0f3c3,
+0x2300e000,0xf884b2db,0xb123302b,0x33046863,0x1d2b6063,0x68e3b29d,
+0x1b5b6cb8,0x463160a3,0x47984b09,0x30f0f8b8,0xf8a41b40,0x23003068,
+0xf8c46120,0x63639018,0xe8bd63a3,0x46c087f0,0x000238e6,0x00021010,
+0x1e003e11,0x47f0e92d,0xeb014699,0xf8d30382,0xb0a240f8,0x460f4680,
+0x2c004692,0x4825d143,0x212df240,0xffe0f7f3,0x88e3e040,0x030ff003,
+0x0583eb04,0xb32668ae,0x60ab2300,0x464078a3,0x70a33b01,0xf7ff4631,
+0x88e3fa87,0xd0044283,0xf2404818,0xf7f32136,0x6cabffc7,0x9300ac02,
+0x46334622,0x68394640,0xff40f7ff,0x46404622,0xf7fd6839,0xeb07fc31,
+0xf8d3038a,0xb1ac40f8,0xf8d8e006,0xf8d227e8,0x330130e0,0x30e0f8c2,
+0x71232301,0x330188e3,0x0d1b051b,0xf10980e3,0xfa1f33ff,0xf1b9f983,
+0xd1be0f00,0xe8bdb022,0x46c087f0,0x00021928,0x4ff0e92d,0x0382eb01,
+0x50f8f8d3,0x4681b0a3,0x4693460c,0xd0362d00,0xe02d88eb,0x60b32300,
+0x464878ab,0x70ab3b01,0xf7ff4639,0x88ebfa39,0xd0044283,0xf2404815,
+0xf7f32111,0x6cb3ff79,0x0a08f10d,0x46489300,0x46526821,0xf7ff463b,
+0x2301fef1,0x88eb712b,0x33014648,0x0d1b051b,0x682180eb,0xf7fd4652,
+0xeb04fbdb,0xf8d3038b,0xb14550f8,0x0301f108,0x080ff003,0x0688eb05,
+0x2f0068b7,0xb023d1ca,0x8ff0e8bd,0x00021928,0x41f0e92d,0x46164604,
+0xf8bd461d,0x29000018,0x684bd051,0x2f80f413,0x2884d04d,0x2d03d136,
+0x6863dd44,0x8000f8d4,0xd10418cf,0xf6404823,0xf7f37114,0x7832ff35,
+0xea427873,0x0b1d2303,0xd8332d07,0x0f02f013,0xeb07d130,0xf8d30385,
+0xb35910f8,0x30fcf8d4,0xf8c43301,0x78f330fc,0xea4278b2,0x88cb2203,
+0x1312ebc3,0x0d1b051b,0x6f00f5b3,0x4640d81f,0x462a4639,0xff1ef7ff,
+0x46394640,0xf7ff462a,0xe014ff73,0xd1072894,0xdd0b2d0b,0x30b4f8d4,
+0xf8c43301,0xe00a30b4,0xf6404806,0xf7f351a9,0xe004fefb,0x3104f8d4,
+0xf8c43301,0xe8bd3104,0x46c081f0,0x00021928,0xeb01b570,0xf8d60682,
+0x460530f8,0x6800b30b,0xf7ff2310,0xf8d6fef3,0xb17c40f8,0xb12378a3,
+0xf640480c,0xf7f351d1,0x682bfedb,0x6c984621,0x4b092288,0x23004798,
+0x30f8f8c6,0x3b018eeb,0x86ebb29b,0x682bb92b,0xf8d36ba9,0x4b03073c,
+0xbd704798,0x00021928,0x1e005c15,0x1e006221,0x4ff0e92d,0x469ab089,
+0x3048f8bd,0x4693460e,0xf8bd9305,0x4607904c,0x4828b920,0x1155f241,
+0xfeaef7f3,0x4825b926,0x1156f241,0xfea8f7f3,0xb9236973,0xf2414821,
+0xf7f31157,0xf897fea1,0xb1155de8,0x0018f06f,0x6973e034,0xf1034638,
+0x920002d4,0x92012209,0x9202aa07,0xf10621d0,0x33da0219,0xf94cf7fb,
+0xb9104680,0x001af06f,0x9c07e020,0x70232303,0x70632301,0x1ce14658,
+0xa002f884,0xf92af7ff,0x1d614648,0xf926f7ff,0x1de19805,0xf922f7ff,
+0xf3c94640,0xf7ff0183,0x4638fa5d,0x46324641,0x9500462b,0xf7fe9501,
+0x4628fdeb,0xe8bdb009,0x46c08ff0,0x00021928,0x0282eb01,0x47f0e92d,
+0x40d8f8d2,0x46884606,0x2c004699,0x8082f000,0x70232303,0x3048f894,
+0x461fbb6b,0x0516f104,0x00ccf3c7,0xf0075c2a,0xfa520107,0xf013f301,
+0xd01d0f01,0x408b2301,0xfa5f43db,0xea02fe83,0x542b030e,0x0514f104,
+0xfa525c2a,0xf013f301,0xd0080f01,0x030eea02,0x19e2542b,0x71132300,
+0x3b0178a3,0x463070a3,0x46224641,0xfb32f7ff,0x2f103701,0x78a3d1d2,
+0xf1b9b11b,0xd0490f00,0x8be2e008,0x429a7863,0x4823d004,0x51fdf640,
+0xfe12f7f3,0x6d626873,0x78e318d5,0x0383eb05,0x30d8f8d3,0xd004429c,
+0xf640481b,0xf7f36101,0x78e3fe03,0xeb052700,0xf8c30383,0x683370d8,
+0x0110f105,0x78e26c98,0xf7f42301,0xf894fe6d,0xb9333048,0x46216833,
+0x22586c98,0x47984b0f,0xf896e018,0xeb063030,0x6be90583,0x6833b121,
+0x6c982258,0x47984b09,0x3030f896,0x2b0963ec,0x463bd101,0x3301e001,
+0xf886b2db,0x23013030,0x3049f884,0x87f0e8bd,0x00021928,0x1e005c15,
+0x4ff0e92d,0x4680b087,0x469a4617,0xb040f8bd,0xb921460c,0xf6404843,
+0xf7f37189,0x6823fdbd,0x4840b923,0x718af640,0xfdb6f7f3,0x685b6823,
+0x2f80f413,0x483bd104,0x718bf640,0xfdacf7f3,0xd9042f07,0xf6404837,
+0xf7f3718c,0xf1bafda5,0xd0060f00,0x46214640,0x2300463a,0xff3cf7ff,
+0x4640e004,0x463a4621,0xfea6f7ff,0x6000f8d8,0xb9266825,0xf241482b,
+0xf7f31181,0xb925fd8d,0xf2414828,0xf7f31182,0x696bfd87,0x4825b923,
+0x1183f241,0xfd80f7f3,0xd9042f07,0xf2414821,0xf7f31184,0xf896fd79,
+0x2c004de8,0x696bd132,0xf1034630,0x920002d4,0x92012206,0x9202aa05,
+0xf10521d0,0x33da0219,0xf826f7fb,0xb3084681,0x23039905,0x3b01700b,
+0xea4f704b,0x033b22ca,0x4370f403,0x6200f402,0xf002431a,0x708b03ff,
+0xea4f0a12,0x70ca231b,0xf881714b,0x4639b004,0xf938f7ff,0x46494630,
+0x4623462a,0x94019400,0xfcc6f7fe,0x3108f8d8,0xf8c83301,0xb0073108,
+0x8ff0e8bd,0x00021928,0x4ff0e92d,0x781b461c,0xf003b085,0x2b03037f,
+0x46894605,0x9e0e4690,0x48aad004,0x6156f44f,0xfd26f7f3,0x0f00f1b9,
+0x815df000,0xf3402e01,0x7867814f,0xf0002f01,0xd30380bf,0xf0002f02,
+0xe1458113,0xf3402e08,0x686b8143,0xeb196828,0x90030b03,0x489bd104,
+0x6125f640,0xfd08f7f3,0xf7fe1d60,0x4606ffb7,0xf7fe1de0,0x9002ffb3,
+0xf7fe1ce0,0xf3c0ffaf,0xf1b80883,0x46070f07,0x202ef895,0x8106f200,
+0x3000f994,0xda0c2b00,0x0388eb0b,0x10d8f8d3,0xf0002900,0x780b80fb,
+0xf0402b02,0x465880f7,0x42b2e0ba,0x4613bf34,0xfa1f4633,0x682bfa83,
+0x302ef893,0xeb08b123,0xf8930305,0xb93b32a8,0x980378a3,0x22254649,
+0xa000f8cd,0xe00b9701,0xf3c07caa,0x429a0340,0x78a3d00e,0x98039001,
+0xa000f8cd,0x22264649,0xfdfef7ff,0x30f8f8d5,0xf8c53301,0xe0f230f8,
+0x46594628,0xf7ff4642,0xeb0bfdc3,0xf8d30388,0xb12330f8,0xf640486b,
+0xf7f36161,0x2088fca9,0x4b692100,0x46064798,0x78a3b938,0x46499803,
+0xf8cd2201,0x9701a000,0x2288e7da,0xf7f42100,0xf3c7fd5d,0x7d2a1387,
+0x429ab123,0x4611bf34,0xe0004619,0x98024611,0x023ff007,0x0388eb0b,
+0xf8c32701,0x707160f8,0x09037037,0xf8d580f3,0xea4230f4,0x19db1281,
+0x30f4f8c5,0x0201f022,0x980378a3,0x46499201,0xf8cd2200,0xf7ffa000,
+0xf8d5fdaf,0x19db30f8,0x30f8f8c5,0xb93b8eeb,0x6ba99b03,0x073cf8d3,
+0x463b2264,0x47a04c47,0x33018eeb,0xe09686eb,0xf3402e08,0x686b8089,
+0xa000f8d5,0x0603eb19,0x483ed104,0x619df640,0xfc4ef7f3,0x3000f994,
+0xdb5b2b00,0xf7fe1ce0,0x4680fef9,0xf7fe1d60,0xf3c0fef5,0x29070183,
+0xeb06d850,0xf8d30381,0x2c0040d8,0x7823d04a,0xd1472b02,0x0f00f1b8,
+0x7caad108,0x0340f3c0,0xd103429a,0x1087f3c0,0xd9042810,0x46214630,
+0xf844f7ff,0x7060e036,0xeb0983e0,0xf8b30341,0x70273170,0x0d1b051b,
+0x83a38323,0x051b3b01,0x83630d1b,0x30acf8d5,0x07e8f8da,0xf8c53301,
+0x462130ac,0xf7ff463a,0x4628f9e1,0x46224631,0xf7ff4643,0xe03ef851,
+0xdd312e05,0xeb19686b,0xd1040603,0xf6404813,0xf7f361e4,0xf994fbf9,
+0x2b003000,0x78a2db06,0xea4278e3,0x0b022003,0xd9052a07,0x3104f8d5,
+0xf8c53301,0xe0223104,0x23c0f3c0,0x4628b123,0xf7ff4631,0xe003fcf1,
+0x46314628,0xfd7cf7ff,0x310cf8d5,0xf8c53301,0xe010310c,0x00021928,
+0x1e00578d,0x1e0061f9,0x3104f8d5,0x33016828,0x3104f8c5,0x46224641,
+0xf7fe4633,0xb005fbd7,0x8ff0e8bd,0xe92d6843,0x18cf41f0,0xd1044605,
+0xf240480b,0xf7f3311b,0x2600fbb7,0x4628b2f4,0x46224639,0xfcc0f7ff,
+0x23003601,0x46394628,0xf7ff4622,0x2e08fd49,0xe8bdd1f0,0x46c081f0,
+0x00021928,0x4ff0e92d,0xb0858c13,0x2b089103,0x46174606,0xb022f892,
+0x9000f8d0,0x4648d001,0x9a03e048,0x489fb922,0x41d9f640,0xfb8cf7f3,
+0x68539a03,0x2f80f413,0x489ad104,0x41daf640,0xfb82f7f3,0x0f07f1bb,
+0x4896d904,0x41dcf640,0xfb7af7f3,0x302cf897,0x4892b123,0x41ddf640,
+0xfb72f7f3,0x9a036873,0x0a03eb12,0x488dd104,0x614ef44f,0xfb68f7f3,
+0x038beb0a,0x50f8f8d3,0x69bb6839,0x791bb9cd,0x0303f003,0xd10e2b02,
+0x3c03f811,0x0f08f013,0x2301d009,0x024beb0a,0x3118f882,0x30dcf8d6,
+0xf8c63301,0x990330dc,0x463a4648,0xffc0f7fc,0x791be0f0,0x0303f003,
+0xd1382b02,0x3c03f811,0x0f08f013,0xf8d6d01e,0x330130c4,0x30c4f8c6,
+0x30c8f8d6,0xf8c63301,0xf91130c8,0x2b003c03,0xf8d6da04,0x330130d4,
+0x30d4f8c6,0x3c03f811,0x0330f003,0xd11f2b10,0x30d8f8d6,0xf8c63301,
+0xe01930d8,0x2c04f811,0x3c05f811,0xf8114313,0x431a2c06,0xf8d6d105,
+0x330130c8,0x30c8f8c6,0xf8d6e00a,0x330130cc,0x30ccf8c6,0xf8d6e004,
+0x330130d0,0x30d0f8c6,0x7d9a683b,0xea427ddb,0xf0132303,0xf0400f0f,
+0x091c8092,0xf00488eb,0x429c080f,0x4648d125,0xf7fe6979,0x4284fda9,
+0x484ed004,0x5112f640,0xfaeaf7f3,0x0388eb05,0xb123689b,0xf6404849,
+0xf7f35113,0x4648fae1,0x463a9903,0xff54f7fc,0x712b2301,0x464888eb,
+0x051b3301,0x80eb0d1b,0x465a4651,0xfb38f7ff,0xebc3e078,0x051a0304,
+0x0d127869,0xd203428a,0x0388eb05,0xb913689b,0x6f00f5b2,0x4648d916,
+0xf7fe6979,0x4284fd75,0x4834d004,0x5127f640,0xfab6f7f3,0xf8d94b32,
+0x69790048,0x47982200,0x30e8f8d6,0xf8c63301,0xe05330e8,0xd328428a,
+0x0301f1c1,0xb29b18d3,0x46514648,0xf7ff465a,0xeb0afaad,0xf8d3038b,
+0xb17d50f8,0x0488eb05,0xb12368a3,0xf6404821,0xf7f3513a,0x697bfa91,
+0x69bb60a3,0x78ab64a3,0x70ab3301,0x46514648,0xf7ff465a,0xf8d6faed,
+0x330130f0,0x30f0f8c6,0xeb05e028,0x68a30488,0x4814b123,0x5148f640,
+0xfa76f7f3,0x60a3697b,0x64a369bb,0x330178ab,0xf8d670ab,0x330130e4,
+0x30e4f8c6,0xf8d9e012,0x69790048,0x4b0a2200,0xf8d64798,0x46303104,
+0xf8c63301,0x23013104,0x46519300,0x3b01465a,0xfc8af7ff,0xe8bdb005,
+0x46c08ff0,0x00021928,0x1e005c41,0x47f0e92d,0x68077913,0x460d4680,
+0xf0034616,0xe0230907,0xf41369eb,0xd1046f80,0xf640482f,0xf7f321ce,
+0x692bfa3b,0x781c2201,0x6cb8785b,0x2403ea44,0x30c0f8d8,0x33014629,
+0x30c0f8c8,0x2441f3c4,0x47984b26,0xd0092c03,0x0389eb07,0x0778f8d3,
+0x6ac32100,0x46054798,0xd1d92d00,0x79f379b2,0x2203ea42,0x0f02f012,
+0xf012d02d,0xd1120f40,0xf6404819,0xf7f321e2,0xe00cfa0f,0x4b182001,
+0x1c6b4798,0x2d0bb2dd,0x4813d106,0x21eaf640,0xfa02f7f3,0x2500e01d,
+0x380cf8d7,0x4170f8d3,0x0f01f014,0xf014d0ea,0xd0040f40,0xf640480a,
+0xf7f321ef,0xf014f9f1,0xd1040f20,0xf44f4806,0xf7f3612f,0x4638f9e9,
+0xf9984649,0xf7f8202c,0xe8bdfc7b,0x46c087f0,0x00021928,0x1e005c41,
+0x1e005d75,0x47f3e92d,0x8000f8d0,0x445cf241,0x3004f858,0x68194606,
+0xf00fa801,0xf858f8a5,0x681f3004,0x687be060,0x2f80f413,0x6873d058,
+0x0900f04f,0x46aa18fd,0x20f8f8d5,0xfc89fa5f,0xd0472a00,0xb11b7913,
+0x71132300,0xe04170d3,0x2b007893,0x78d3d03e,0xb2d93301,0x687b70d1,
+0x7f80f413,0x8e72bf14,0x23648eb2,0xf2f3fbb2,0xd32f4291,0x30ecf8d6,
+0x40f8f8d5,0xf8c63301,0xb92c30ec,0xf240481a,0xf7f32152,0xe021f995,
+0xf04f88e0,0x46020e00,0xf0024601,0xeb04030f,0x689b0383,0xbf182b00,
+0xf10e4611,0xfa1f0301,0xf1befe83,0xd0030f10,0x051a1c53,0xe7ec0d12,
+0x0301ebc0,0x0d1b051b,0x46514640,0x33014662,0xf980f7ff,0x0901f109,
+0xf1b93504,0xd1ab0f08,0xf00fa801,0x4607f82f,0xd19c2f00,0x87fce8bd,
+0x00021928,0x6803b537,0x445cf241,0x4605591b,0xa8016819,0xf830f00f,
+0x591b682b,0x68182400,0x6843e00a,0x2f80f413,0x686bd003,0x8adb18c3,
+0xa80118e4,0xf80ef00f,0xd1f22800,0xbd3e4620,0x6803b537,0x445cf241,
+0x4605591b,0xa8016819,0xf812f00f,0x591b682b,0xe00a6819,0xf413684b,
+0xd0022f80,0xf7fe4628,0xa801fcbd,0xfff2f00e,0x29004601,0xbd3ed1f2,
+0x4ff0e92d,0x9309b0a3,0x900c69d3,0x6f80f413,0x920a910b,0xf1026806,
+0xd104071c,0xf64048b3,0xf7f321fe,0x9809f915,0xf0137983,0xd1040f20,
+0xf44f48ae,0xf7f36130,0x990bf90b,0xf0002900,0x684b80a4,0x2f80f413,
+0x809ff000,0x9d0b9a0c,0x18ec6853,0x48a5d104,0x310cf640,0xf8f8f7f3,
+0xf7fe980a,0xb2c0fd01,0x0080eb04,0x20d8f8d0,0xf0002a00,0x7813808a,
+0xf0002b02,0x6d538086,0x4283980b,0x4899d004,0x3115f640,0xf8e0f7f3,
+0xf7fe980a,0x990bfcb9,0xd0044288,0xf6404893,0xf7f33116,0xf8d6f8d5,
+0x9a0b370c,0x62139d09,0xf01379ab,0xd10f0302,0x461d461e,0x2001e028,
+0x47984b8b,0xb2dc1c63,0xd1062c0b,0xf6404887,0xf7f33128,0xe058f8bd,
+0xf8d62400,0xf8d3380c,0xf0155170,0xd0ea0f01,0x0f40f015,0x487fd004,
+0x3131f640,0xf8acf7f3,0x0f20f015,0x487bd104,0x3132f640,0xf8a4f7f3,
+0x380cf8d6,0x6174f8d3,0x980c683b,0x6f80f413,0x8000f8d0,0x4873d104,
+0x3164f640,0xf894f7f3,0x798b9909,0x0f20f013,0x486ed104,0x3166f640,
+0xf88af7f3,0x68539a0b,0x2f80f413,0x980cd021,0x6843990b,0x931c18cb,
+0x4866d104,0x3172f640,0xf87af7f3,0xf7fe980a,0x9a1cfc83,0x990cb2c0,
+0x0380eb02,0xf8d3901d,0x1843b0d8,0x920e7dda,0x930d7fdb,0x0f00f1bb,
+0xf89bd003,0x2b023000,0x980cd105,0x9a09990a,0xfe10f7ff,0xf8dbe32a,
+0x980b3054,0xd0044283,0xf6404852,0xf7f3317e,0x980af853,0xfc2cf7fe,
+0x4288990b,0x484dd004,0x317ff640,0xf848f7f3,0x370cf8d8,0x21009a0b,
+0xa8206213,0xf7f42208,0x9809f905,0xf0037903,0x931b0307,0x79c37982,
+0x2103ea42,0x021cf001,0xf8989213,0xf3c12d61,0x429a13c0,0x0080f001,
+0x4640d001,0xf898e00d,0xb1633d5f,0x4640b158,0xf7fa2100,0x9809fc5d,
+0x79c17983,0xea434640,0xf7fa2101,0x9909fc55,0x09db798b,0x3d61f888,
+0x3d5ff898,0x798bb153,0x0382f003,0xd1052b82,0xf8882300,0x46403d5f,
+0xfe68f7f8,0x799a9b09,0xea4279db,0xf0132303,0xd04f0902,0x0f40f013,
+0x4824d104,0x31adf640,0xfff6f7f2,0x7ac39809,0xea427a82,0x79c32403,
+0xf015091b,0xf88d0f40,0xd0043080,0xf640481b,0xf7f231b1,0xf015ffe5,
+0xd1040f20,0xf6404817,0xf7f231b2,0xf89dffdd,0xf0053080,0xea43021e,
+0xf88d03c2,0x0a2b3080,0x3081f88d,0xf88d0c2b,0x0e2b3082,0xf88d9913,
+0x0a333083,0x3085f88d,0x39180c33,0x2101bf18,0xf88d0924,0xf04f3086,
+0x0e330901,0x91122200,0xf88d941a,0xf88d6084,0xf8cd3087,0x92109044,
+0x46c0e243,0x00021928,0x1e005d75,0x98139d0c,0x30b8f8d5,0xf8c53301,
+0x280030b8,0x80edf000,0xd10b2810,0x35b0f8d8,0x9068f8cd,0xf8c83301,
+0xf8cd35b0,0xf8cd9048,0xe0f99044,0x290c9913,0x80cef040,0x9a1d4b98,
+0x3130f8d3,0x931e4640,0xf8d84b96,0xf81367e8,0xea4fa002,0x31ec014a,
+0xfe00f7f7,0xfb0a2324,0xf8b46403,0xebc3322a,0xb29d0300,0xf0002d00,
+0xf8d680b3,0xf8a43210,0x2b00022a,0x80aff000,0x3844f8d8,0x7214f8d6,
+0xf8136b1b,0xea4f300a,0x45be2e03,0x80a3f240,0x322cf8d4,0x18eb6e71,
+0xf8d42b09,0xf8c42234,0xf240322c,0x1a898095,0xf2f3fbb1,0x3210f8d6,
+0xd905429a,0x3387f241,0xf2404299,0xe00d8089,0x0229f894,0x63e1f44f,
+0xbf342810,0x22104602,0xf503fb02,0x1218f8b4,0xdb0542a9,0xf8c46e73,
+0xf8c4922c,0xe0733234,0x030eebc7,0x4291b29a,0xf501d21c,0xb29b737a,
+0xf8a44293,0x46303218,0xf8a4bf88,0xf7ff2218,0xf8b4fde3,0x981e3218,
+0xebc32164,0xfbb00305,0xfb02f2f1,0xfbb2f203,0xfb02f2f5,0xf8c4f201,
+0xe0482238,0xd9462801,0xd10128ff,0xe000230f,0x21241e43,0xf101fb0a,
+0x3229f884,0x7306f501,0xf8911989,0x18f70229,0xbf282810,0xf44f2010,
+0xfb0063e1,0x9d1ef003,0x2218f8b1,0xfbb52464,0xebc2f3f4,0xfb030200,
+0xfbb3f302,0xfb03f3f0,0x2000f304,0x3238f8c1,0x460409dd,0x18e34b44,
+0x09da685b,0xd90f42aa,0xf44f883b,0xfb0261e1,0x1b52f303,0xf201fb02,
+0xf3f2fbb3,0x183a3301,0xbf282bff,0x709323ff,0x34143001,0xd1e5280f,
+0xf7ff4630,0x2324fd89,0x6303fb0a,0xf8c36e72,0x22002234,0x222cf8c3,
+0x0900f04f,0xf04fe01e,0x21010900,0x9068f8cd,0x9048f8cd,0x91119110,
+0x9b09e147,0x7b5b7b1a,0x2303ea52,0xf8ddd107,0x2501904c,0x9068f8cd,
+0x95119512,0xf8d8e00c,0xf8dd33d8,0x3301904c,0x33d8f8c8,0xf8cd2001,
+0xf8cd9068,0x90119048,0x9040f8cd,0x9a0ae129,0x69d3990a,0xf413311c,
+0x911f6f80,0x481ad104,0x31eef640,0xfe8cf7f2,0x9d0f9b0a,0xf1b56919,
+0x780a3fff,0xea42784b,0x93192303,0x0268f101,0x980ad107,0x1068f891,
+0x911869c3,0x3340f3c3,0x7f139316,0xea437f52,0xea4f2302,0xf8bb1a13,
+0xf89b3018,0xebc32001,0x051b030a,0x42930d1b,0xf8d8db0e,0x990a0048,
+0x4b042201,0xe0d54798,0x1e00c744,0x000238e6,0x00021928,0x1e005c41,
+0x040ff00a,0xf10b08e5,0x5d7b0714,0x0607f00a,0xf0134133,0xd1040f01,
+0xf640488e,0xf7f24109,0xeb0bfe47,0x790a0104,0xf1b9920f,0xd0450f00,
+0xebc0981a,0xb29a030a,0x0d1b0513,0xd83d2b0f,0xeb00a822,0xf81303d3,
+0xf0023c08,0x41130207,0x0f01f013,0x5d7ad032,0xf306fa52,0x0f01f013,
+0x2301d00b,0xea2240b3,0x557b0303,0x710b2300,0x3002f89b,0xf88b3b01,
+0x990f3002,0x43ecf243,0x0003f858,0x91002300,0x93029301,0x9b139a09,
+0xf002990a,0x9a1ffeaf,0xb1237a13,0x990a4640,0xf7f72202,0x4b6cff2d,
+0x0048f8d8,0x2201990a,0x9d154798,0xb2db1c6b,0xe06f9315,0x981f990b,
+0x61019a11,0xd04d2a00,0x980e9b0f,0xda494283,0xf891990c,0xb14b302b,
+0xb13a9a16,0x0204eb0b,0x9d0d7913,0xd20142ab,0xe0047115,0x0204eb0b,
+0x33017913,0xf8bb7113,0x2b0f3046,0x4855d904,0x4144f640,0xfdd4f7f2,
+0x3044f8bb,0x0343eb0b,0xb1238c5b,0xf640484f,0xf7f24145,0xf8bbfdc9,
+0x991d3044,0x0243eb0b,0xf0033301,0xf8ab030f,0xf8bb3044,0xf8a23046,
+0x3301a022,0x3046f8ab,0xf0014b46,0x5c9b0207,0x2b0d980b,0x523cf8d0,
+0x0240f8d0,0x230fdd01,0x3301e000,0x9a0a990b,0xe01b47a8,0xfa142401,
+0xf10bf206,0x5d4b0116,0x554b4313,0xf2439a0e,0xf85843ec,0x990a0003,
+0x92002300,0x93019a09,0xf0029402,0xf8d8fe33,0x990a0048,0x4b304622,
+0x94174798,0x98199d14,0xb2db1c6b,0xf3c09314,0x2b032341,0x991bd01e,
+0x0381eb08,0x0778f8d3,0x6ac32100,0x900a4798,0xf47f2800,0x4823aedc,
+0x4166f640,0xfd70f7f2,0x9d0ae00c,0xf04f2200,0x921833ff,0x92169217,
+0x92149215,0x2d00930f,0xaec9f47f,0xb1209817,0x4659980c,0xf7fe2200,
+0x9912fb31,0x9a10b909,0x9d0fb1c2,0x0301f1d9,0x2300bf38,0x07f0f8d8,
+0x9301b2ea,0x99149b18,0x9a0d9202,0x9d109304,0x91002300,0x93069203,
+0x9a09990b,0x95059b15,0xfde0f00c,0x46409b0c,0xf993991b,0xf7f7202c,
+0x980cffcf,0x465a991c,0xfa40f7fe,0xe8bdb023,0x46c08ff0,0x00021928,
+0x1e005c41,0x0002101c,0x4ff0e92d,0xb000f8d0,0xf8db4607,0xb0c90048,
+0x68089008,0x92049105,0xf7fe9047,0xb2c0f925,0x90092807,0x48a9d904,
+0x010af640,0xfd10f7f2,0x4ba79909,0x5c5b9847,0xf7fe9306,0x9016f8e5,
+0x48a2b920,0x6101f44f,0xfd02f7f2,0x68539a16,0x2f80f413,0x489dd104,
+0x0111f640,0xfcf8f7f2,0x9d16687b,0x931718eb,0x4898d104,0x0114f640,
+0xfceef7f2,0x98179909,0x0381eb00,0x60d8f8d3,0x7fdb19cb,0xb1169321,
+0x2b027833,0xf8d7d10f,0x220130c0,0xf8c73301,0x980830c0,0x99474b8d,
+0x9a054798,0x60132300,0xf000930a,0xf89bbd83,0x2b003de8,0x8563f040,
+0x9d166d73,0xd11542ab,0xf04f2100,0x220230ff,0x910d900b,0x910e910c,
+0x9110910f,0x91139112,0x91189114,0x911b911a,0x911d911c,0x911f911e,
+0xe3f09220,0xf6404877,0xf7f20124,0xe7e3fcad,0xf41369c3,0xd1046f80,
+0xf6404872,0xf7f20129,0x9947fca3,0x8c0d69cb,0x0f04f013,0xd004ab46,
+0x461a4658,0xfb64f7f8,0x4658e004,0xaa45a947,0xfd94f7fb,0x9b0a900a,
+0xd0342b00,0x0f10f113,0xf8d7d10b,0x9d05308c,0xf8c73301,0xf8dd308c,
+0x9b47a03c,0x602b2000,0xf8d7e3c4,0x8bb43090,0x42ac3301,0x3090f8c7,
+0x2308d116,0x010ff004,0xf1f3fb91,0xf0042201,0x409a0307,0x0016f106,
+0x43135c43,0x22005443,0x46314638,0xfa3af7fe,0x051b1c63,0x83b30d1b,
+0xf8dd9905,0x2300a03c,0x9319600b,0xf8dbe39f,0x9a463844,0xeb039808,
+0x68db0382,0x681c9947,0x47984b49,0xf2404284,0x9b4784e2,0xf01369db,
+0xd1040f04,0xf6404841,0xf7f20153,0x9b47fc41,0xf41369db,0xd1046f80,
+0xf640483c,0xf7f20154,0x9b47fc37,0x9010f8d3,0x0268f109,0xf1099215,
+0x7d93026e,0xf1097dd2,0xea430172,0xea4f2302,0xf0081813,0x9311030f,
+0x784a788b,0xf899431a,0x43133072,0x431a78ca,0x4313790b,0xea52794a,
+0xd12a0403,0x3094f8d7,0xf8c73301,0x8bb33094,0xd1144543,0x0307f008,
+0x409a2201,0xf1069d11,0x08e90016,0x43135c43,0x9a0a5443,0x46314638,
+0xf9d4f7fe,0x0301f108,0x0d1b051b,0x980883b3,0x22019947,0x47984b1b,
+0x9805990a,0xa03cf8dd,0x32fff04f,0x920a6001,0x9d11e0ee,0x791b1973,
+0xd1472b00,0x45418bb1,0xebc1d03e,0x051d0308,0xf5b50d2d,0xd8076f00,
+0x78728b33,0x0308ebc3,0x0d1b051b,0xdb064293,0x30a0f8d7,0xf8c73301,
+0x9b0a30a0,0xf8d7e0c2,0xf8dd3098,0x195be028,0x040ff001,0x3098f8c7,
+0x46c0e017,0x00021928,0x000238e6,0x1e005c41,0x1e003f55,0x0307f004,
+0x409a2201,0xf10608e1,0x5c430016,0x0e01f10e,0x54434313,0xf0031c63,
+0x45ae040f,0x4638d1ee,0x22004631,0xf97af7fe,0x0301f108,0x0d1b051b,
+0xe08583b3,0x0046f8b6,0xf8b6b1c0,0xeb061042,0x8c530241,0xd1114543,
+0x84539b0a,0xf0031c4b,0xf8a6030f,0x1e433042,0x2b10b29b,0x3046f8a6,
+0x8433f240,0xf44f48ad,0xe05861f6,0x2042f8b6,0xe0082100,0x0342eb06,
+0x45438c5b,0x1c53d02b,0xf0033101,0x4281020f,0xf000d1f4,0xf002bc17,
+0x2308010f,0xf1f3fb91,0x0307f002,0x409a2201,0x0016f106,0xf04f5c43,
+0x43130500,0xf8d75443,0x3301309c,0x309cf8c7,0x3042f8b6,0x0243eb06,
+0xf0033301,0xf8a6030f,0xf8b63042,0x84553046,0xf8a63b01,0xf8b63046,
+0xeb063042,0x8c5a0343,0xd1d44542,0x46382200,0xf7fe4631,0xf8b6f917,
+0xf04f3042,0xeb060000,0x33010243,0x030ff003,0x3042f8a6,0x3046f8b6,
+0x3b018450,0x2b0fb29b,0x3046f8a6,0x83d9f240,0xf2404880,0xf7f271cf,
+0xe3d2fb27,0x21089a11,0xf1f1fb92,0x0307f008,0x409a2201,0x0016f106,
+0x43135c43,0xe3c25443,0x78728b33,0x0308ebc3,0x0d1b051b,0xdb044293,
+0xf2404872,0xf7f271dc,0x2301fb0b,0xb96cb2dc,0x98084b6f,0x22019947,
+0x9b054798,0x35fff04f,0xa03cf8dd,0x950a601c,0xe2409419,0xeb069811,
+0x7d1b03d0,0x0207f000,0xf0134113,0xd1040f01,0xf6404862,0xf7f20175,
+0x9911faeb,0x18739a21,0x4293791b,0x9b0dd20c,0x2501b913,0xe013950c,
+0xf640485a,0xf7f20178,0x2001fadb,0xe00b900c,0xb911990c,0x920d2201,
+0x4854e006,0x017bf640,0xfacef7f2,0x930d2301,0xf1b59d0b,0xd1083fff,
+0x18339811,0x930b791b,0x69db9b47,0x3340f3c3,0xf899930e,0xf8992001,
+0xf64f3000,0xea4311ff,0xea032302,0x9b470101,0xf41369db,0xd0156200,
+0x2b037833,0xb18ad120,0xd10f2b03,0x78d39a15,0x0308f023,0xf89970d3,
+0xf8992038,0x9d153037,0x2302eb03,0x706bb29b,0x70ab0a1b,0x0a0b2200,
+0x1000f889,0x3001f889,0x2048f889,0x2049f889,0xa03cf8dd,0xe1d12001,
+0xb99a9a0f,0x3056f899,0x7202f441,0x03fcf003,0xd1042bb4,0xf0422301,
+0x931a0204,0x2bc4e00c,0x2501d10a,0x6200f442,0xe005951b,0x6380f441,
+0x72f3f24f,0x0202ea03,0xf8890a13,0xf8892000,0xf8993001,0xf8992038,
+0x99173037,0x2302eb03,0xf64f3303,0xea0372fc,0xf8990202,0x98133033,
+0xeb023301,0x68cb0283,0x42981880,0xd9049013,0xf6404814,0xf7f201c5,
+0x9947fa4f,0x98084b13,0x9a124798,0x18104b12,0x9012b280,0x98089947,
+0x9d0f4798,0x9a474680,0xab259811,0x2025f843,0x791b1833,0x0a01f105,
+0x6ebbb113,0x66bb3301,0x0f01f1ba,0x80bff040,0xb159990c,0x78139a15,
+0xe00b78d2,0x00021928,0x1e005c41,0x1e003e11,0x1e003f55,0x3036f899,
+0x2039f899,0xf00309dc,0x09d5037f,0x93182b20,0x4897d904,0x01e1f640,
+0xfa12f7f2,0x4a95b16d,0x9818b12c,0xfb002314,0x68da2303,0x9918e012,
+0xfb012314,0x689a2303,0x4a8ee00c,0x9818b12c,0xfb002314,0x685a2303,
+0x9918e004,0xfb012314,0x589af303,0x3029f897,0xfb039817,0x68c2f302,
+0x429308db,0x4613bf28,0x93149909,0x5c5a4b82,0x5c9b4b82,0x0343eb0b,
+0x1d88f8b3,0xf241b141,0xf83b33ea,0xb11b3003,0xbf284299,0xe0064619,
+0x33eaf241,0x3003f83b,0xbf182b00,0xb3214619,0x4a74b16d,0x9d18b12c,
+0xfb052314,0x68db2303,0x9818e012,0xfb002314,0x689b2303,0x4a6de00c,
+0x9d18b12c,0xfb052314,0x685b2303,0x9818e004,0xfb002314,0x589bf303,
+0x08cb0a9a,0xf302fb03,0x42999914,0x4619bf28,0xb1649114,0x3848f8db,
+0xf0056818,0xf400fe59,0xf5b07040,0xbf147f00,0x20032002,0x9b159020,
+0x781a9d1a,0x0380f022,0x6300f043,0x0f80f012,0xbf1c931c,0x6380f443,
+0xf899931c,0xf0222036,0xf0430380,0xf0126300,0x931d0f80,0xf443bf1c,
+0x931d6380,0x981bb90d,0x991cb168,0x9b202200,0xf7f64658,0x991dfcb5,
+0x2200901e,0x9b204658,0xfcaef7f6,0x4b45901f,0x22149918,0xfb019d06,
+0x23243202,0xf103fb05,0x685219cb,0x3238f8d3,0xd307429a,0x180b9818,
+0xf89319db,0x459a321a,0x80a4f000,0xb121990e,0x302bf897,0xf000459a,
+0x9a17809d,0x459a7953,0x8098f000,0x210c9d04,0xb301fb05,0x2df4f8d3,
+0xf8979247,0xb15b302a,0xf015b952,0xd0070f01,0x0501f025,0xb301fb05,
+0x3df4f8d3,0x93479504,0x44409810,0x98479010,0xd06e2800,0xf41369c3,
+0xd0686f80,0xfd08f7fd,0x42889916,0x9847d163,0xfd32f7fd,0xb2c09a09,
+0xd15c4290,0x4b209947,0x47989808,0x303b9d17,0x9913892b,0x9a14b280,
+0xbf2c4283,0x180918c9,0xd84c4291,0x3844f8db,0x98089a46,0x0382eb03,
+0x994768db,0x4b15681c,0x9b104798,0x428418c0,0x9d0cd93d,0x980db115,
+0xe006b910,0xb921990d,0xf6404809,0xf7f2113c,0x9b47f8f7,0x202af897,
+0xf0038c1b,0x18f3030f,0x791bb1aa,0x42939a21,0x9b0dd20e,0xe014bb1b,
+0x00021928,0x1e00c744,0x000238e6,0x00021010,0x1e003e11,0x1e003f55,
+0xb1359d0c,0x791be013,0x4298980b,0x9247d001,0xf50be00f,0x300c605e,
+0x4bb59904,0x90474798,0x48b4b938,0x114ef640,0xf8c6f7f2,0x2300e001,
+0xf8cd9347,0x9847a03c,0xf47f2800,0xf8ddac11,0x900aa03c,0x990f9019,
+0xe12cb911,0x92192200,0xf10a6e7b,0x330135ff,0x6f3b667b,0x4453a848,
+0x9b18673b,0xeb079507,0xf8d20283,0x24003110,0xf8c23301,0xeb073110,
+0xf8d2028a,0x33013190,0x3190f8c2,0x0385eb00,0x3c8cf853,0x784b6919,
+0xf891780a,0xea420033,0xf64f2203,0xea0213ff,0xf4430303,0x700b63c0,
+0x704b0a1b,0x4033f881,0xf8919a13,0xeba23037,0xf8910080,0xeb032038,
+0xb29b2302,0x10921cda,0x0382ebc3,0x0800ebc3,0x691e9b25,0x0368f106,
+0xf8839323,0x9d238001,0x2318ea4f,0x006bf106,0x902270ab,0x306bf896,
+0x203ef896,0x0308f043,0x306bf886,0x303ff896,0x2303ea52,0xf04fd102,
+0xe00b0903,0x991c4658,0x4b794642,0xf8864798,0xf3c0003e,0xf886200f,
+0x46a1003f,0x2040f896,0x3041f896,0x2303ea52,0xf1b9d012,0xd0040f00,
+0xf640486e,0xf7f21178,0x4658f83b,0x4642991d,0x47984b6b,0x0040f886,
+0x200ff3c0,0x0041f886,0x99184b68,0x9d062214,0x3202fb01,0xfb052324,
+0x68527103,0x3238f8d1,0xd30a429a,0x3218f8b1,0x42839812,0x4603bf28,
+0x3048f886,0x230ff3c3,0x2300e002,0x3048f886,0x3049f886,0xb911991a,
+0x2a009a1b,0x2501d034,0x9a1e991b,0x4c569b1c,0x9000f8cd,0x8004f8cd,
+0x46589502,0xf88647a0,0xf3c00058,0xf886200f,0x9a1f0059,0xf8cd9b1d,
+0xf8cd9000,0x95028004,0x991b4658,0xf89647a0,0xf8962059,0xf8863058,
+0xea430034,0x71b32302,0xf3c00a1b,0x71f3200f,0x3034f896,0xea43b2c2,
+0xf8862302,0x0a1b302c,0x0035f886,0x302df886,0xb1c39b0d,0x44536fbb,
+0x6ffb67bb,0x67fb3301,0x78f278b3,0x2302ea43,0x5380f443,0x0a1b70b3,
+0x9d2370f3,0x3036f896,0xf896702b,0x98223039,0x0308f043,0x990b7003,
+0x6efbb111,0x66fb3301,0xf9929a22,0x2b003000,0xf8d7da04,0x33013080,
+0x3080f8c7,0x204cf896,0x304df896,0x2203ea42,0x4f00f412,0x9d0bd008,
+0xb2eb9916,0xf8db9300,0x230107f0,0xfdaef00a,0xf9972400,0x9d07302c,
+0xab259300,0x2024f853,0x42ac4658,0x2300bf14,0x99462301,0xf7f63401,
+0x4554fdbd,0x9819d3ed,0xd0372800,0x691b9b47,0x204cf893,0x304df893,
+0x2203ea42,0x4f00f412,0x2300d006,0xf8db9300,0x991607f0,0xfd86f00a,
+0x46586f7b,0x677b3301,0x23019946,0x93009a47,0xfd9cf7f6,0xf06fe01a,
+0x910a010f,0x46c0e016,0x1e003ac5,0x00021928,0x0001d225,0x1e00c744,
+0x0001d9d5,0x30a0f8d7,0xf8c73301,0x230030a0,0x7833e448,0xf43f2b03,
+0xe435ac29,0xb049980a,0x8ff0e8bd,0xe92d6843,0x18ce41f0,0xd1044605,
+0xf240480e,0xf7f13109,0x2700ff3f,0x4628b2fc,0x46224631,0xf848f7fe,
+0x23013701,0x46314628,0xf7fe4622,0x2f08f8d1,0x682bd1f0,0x0110f106,
+0x22016c98,0xffd2f7f2,0x81f0e8bd,0x00021928,0x6803b537,0x445cf241,
+0x4605591b,0xa8016819,0xfdf2f00d,0x591b682b,0xe00b681c,0xf4136863,
+0xd0032f80,0x46214628,0xffc4f7ff,0xf00da801,0x4604fdd1,0xd1f12c00,
+0xf7fd4628,0x4620f9c5,0x46c0bd3e,0x4ff0e92d,0x469ab089,0x3048f89d,
+0x9305460f,0x304cf89d,0x93044690,0xb9204606,0xf241484c,0xf7f11110,
+0xb927feef,0xf2414849,0xf7f11111,0x697bfee9,0x4846b923,0x1112f241,
+0xfee2f7f1,0x0f07f1b8,0x4842d904,0x1113f241,0xfedaf7f1,0x0f10f1ba,
+0x483ed904,0x1114f241,0xfed2f7f1,0x5de8f896,0xf06fb115,0xe06d0018,
+0xf107697b,0xf1030b19,0x920002d4,0x92012209,0x9202aa07,0x21d04630,
+0x33da465a,0xf97cf7f9,0xb9104681,0x001af06f,0x9c07e058,0x70232303,
+0xf2417065,0x5cb372fa,0xb92b70a3,0x33015ab3,0x78a352b3,0x70a33301,
+0x138aea4f,0x72c0f64f,0x0202ea03,0x0388ea4f,0x033cf003,0x9b05431a,
+0x00581ce1,0x0002f000,0x0000ea42,0xf942f7fd,0x1d619804,0xf93ef7fd,
+0x0348eb07,0x0170f8b3,0x05001de1,0x01000d00,0xf934f7fd,0x46414648,
+0xfa70f7fd,0x4630462b,0x463a4649,0x95019500,0xfdfef7fc,0x3023f896,
+0xf896b1bb,0xb1a33d63,0xf8974b0d,0xf8132184,0x4b0c1008,0x411a5c5b,
+0x0f01f012,0x4630d009,0x462a4659,0xf8cd462b,0xf7f98000,0x4628f8f7,
+0x2000e000,0xe8bdb009,0x46c08ff0,0x00021928,0x000238e6,0x00021010,
+0x41f3e92d,0x46904606,0x460d461c,0x4839b921,0x6175f501,0xfe48f7f1,
+0xb923682b,0xf6404835,0xf7f17151,0x682bfe41,0xf413685b,0xd1042f80,
+0xf6404830,0xf7f17152,0xf1b8fe37,0xd9040f07,0xf640482c,0xf7f17153,
+0x7a33fe2f,0x2c00b10b,0xeb08d04b,0x7a9b0306,0xd0462b00,0xf8966829,
+0xf8912027,0x463031d2,0x0382f3c3,0xbf384293,0x712b4613,0xf1c32201,
+0x409a0311,0xeb054b1e,0x18d30788,0xf3f2fb93,0xf891812b,0xf44f21d2,
+0xf0025300,0x40930203,0xf7fd60eb,0xf8d7f993,0xb93c40d8,0x46212058,
+0x47984b14,0x4604b1f0,0x00d8f8c7,0x22582100,0xf7f24620,0x2302febb,
+0xf8847023,0x68298003,0x65616830,0x7cf37cb2,0xf8969200,0x9201202e,
+0xf7ff4642,0xf8d6fee3,0x330130a8,0x30a8f8c6,0x2400e000,0xe8bd4620,
+0x46c081fc,0x00021928,0x000493df,0x1e00578d,0x4ff8e92d,0x4691460d,
+0x4607469b,0x4834b920,0x61e6f240,0xfdc8f7f1,0x3010f8d9,0xa000f8d7,
+0xf3c3781b,0x2b020381,0x4648d10a,0xf9c8f7fd,0x2c07b2c4,0x482ad94c,
+0x61fbf240,0xfdb4f7f1,0x423cf8d5,0x0240f8d5,0x464a4629,0x47a0465b,
+0x4823e043,0x7101f240,0xfda6f7f1,0xeb15687b,0xd1040803,0xf240481e,
+0xf7f17103,0xeb08fd9d,0xf8d30384,0xb94660d8,0x46384633,0x46224641,
+0xff3ef7ff,0x28004606,0x7833d0da,0xd0d72b00,0x68384623,0x0110f108,
+0x4c12464a,0xb13047a0,0x46414638,0x23004632,0xf9caf7fd,0x4b0ee015,
+0x0048f8da,0x22014649,0xf8da4798,0x330133c0,0x33c0f8ca,0x3094f8d7,
+0xf8c73301,0xe0043094,0xf413686b,0xd0bc2f80,0xe8bde7c0,0x46c08ff8,
+0x00021928,0x0001e1ad,0x1e005c41,0x4ff0e92d,0xb000f8d0,0x445cf241,
+0x3004f85b,0x6819b087,0xa8054605,0xfc28f00d,0x3004f85b,0x9000f8d3,
+0xf8d9e0d6,0xf4133004,0xf0002f80,0xf8db80cd,0x685b37e8,0x0703eb19,
+0x4869d104,0x7175f44f,0xfd3af7f1,0x46b82200,0x920346ba,0xb2de9b03,
+0x30f8f8da,0x2300b123,0x3119f888,0x3118f888,0x3118f898,0xf898b1a3,
+0x24003119,0xb2db3301,0xf8882b02,0xf8884118,0xd9093119,0xf8882326,
+0x46284119,0x46399300,0x46234632,0xff48f7fd,0x40d8f8da,0xf0002c00,
+0x7823808d,0xf2002b03,0xe8df8089,0x0276f003,0x46225e41,0x46394628,
+0xf7fd2301,0xf894f94d,0xb13a204b,0xf8842200,0x4628204b,0xf7fd4621,
+0xe073facd,0x304cf894,0xd9082b31,0x93002327,0x46394628,0x23014632,
+0xff1ef7fd,0xf894e066,0xb123304a,0x204af884,0x204ff884,0x78a3e05e,
+0xf894b123,0x3301304f,0x304ff884,0x304ff894,0xd1532b02,0x30bcf8d5,
+0x33014628,0x30bcf8c5,0x93002327,0x46324639,0xf7fd2301,0xe028fefd,
+0x204df894,0x2a091c53,0x304df884,0x4638d904,0xf7fd4621,0xe039f8db,
+0x7ceb7caa,0xf8959200,0x6828202e,0x46499201,0xf7ff4632,0xf8d5fdaf,
+0x330130a8,0x30a8f8c5,0xf894e028,0x1c53204e,0xf8842a01,0xd909304e,
+0x30bcf8d5,0xf8c53301,0x462830bc,0x46324639,0xe0032301,0x46394628,
+0x23004632,0xfe34f7fd,0xf894e010,0x1c532050,0xf8842a3b,0xd9093050,
+0x46394628,0x23004632,0xfe32f7ff,0x230ab110,0x304df880,0xf10a9b03,
+0x33010a04,0x93032b08,0x0802f108,0xaf42f47f,0xf00da805,0x4681fb3b,
+0x0f00f1b9,0xaf25f47f,0xb0074648,0x8ff0e8bd,0x00021928,0xb5102901,
+0xdd086804,0x68502100,0x460a4b06,0x28064798,0xf8a4bfd8,0xf8b406fc,
+0x4b0316fc,0x47984803,0x46c0bd10,0x1e0037cd,0x1e004461,0x00021951,
+0xe92d4603,0x480d41f0,0x4619460f,0x46164b0c,0x24004798,0x480be00b,
+0xf8574621,0x47a82024,0xf014b124,0xd1010f07,0x47a84807,0x42b43401,
+0xdbf04d03,0x47a84804,0x81f0e8bd,0x0002195f,0x1e004461,0x00021964,
+0x00021250,0xe92d2901,0x460541f0,0x2200dd12,0x320418ab,0x2a402100,
+0x1110f8c3,0x186bd1f8,0x22003104,0xf8c32980,0xd1f82190,0x66ea66aa,
+0x666a672a,0xf5054819,0x22087188,0xffbcf7ff,0x48172210,0x71c8f505,
+0xffb6f7ff,0x6ea94c15,0x47a04815,0x48156ee9,0x6e6947a0,0x48146f2a,
+0x481447a0,0x260047a0,0x7aa2462c,0x32a8f894,0x3a004631,0x2201bf18,
+0xbf183b00,0x480e2301,0x36014f08,0x340147b8,0xd1ee2e08,0x480b7ce9,
+0x7d2947b8,0x47b8480a,0x81f0e8bd,0x0002196c,0x000219fa,0x1e004461,
+0x00021978,0x00021977,0x00021988,0x000219a1,0x000219ac,0x000219c1,
+0x000219d8,0x47ffe92d,0x9e0e2300,0xf0029303,0x93000301,0x46144605,
+0x46326800,0xf8dd9b0f,0xf7fca030,0x4680fc55,0xf0402800,0x9b0d8106,
+0xd9042b03,0x4651a803,0xf7f22204,0x682ffc93,0x900cf8dd,0x37e8f8d7,
+0xd004429d,0xf240487d,0xf7f1414c,0x2c0cfba1,0x80c0f000,0x2c03d814,
+0xd803d047,0xd02b2c01,0xe026d833,0xf0002c07,0xd8028093,0xd0682c05,
+0x2c08e0dd,0x80a9f000,0xf0002c09,0xe0d680a8,0xd0492c1f,0x2c18d80d,
+0x80b1f000,0x2c0dd803,0x80a4f000,0x2c19e0cb,0x80b5f000,0xd0382c1e,
+0x2c21e0c5,0xd340d044,0xd00e2c3a,0xd01c2c3b,0xf897e0bd,0xe08f302e,
+0xf1b94628,0xbf180100,0xf7fc2101,0x4680fe4f,0xf89ae0b3,0x28070000,
+0x80a4f200,0x2c024428,0x7a83bf0c,0x32a8f890,0x46304651,0x3001f88a,
+0x7830e089,0xf2002807,0x2c038095,0x0200eb05,0xd1047870,0xbf181e03,
+0x72932301,0x1e03e095,0x2301bf18,0x32a8f882,0xf895e08f,0xe05f3027,
+0x2b079b03,0x8081f300,0xdd7e2b05,0x3027f885,0xf895e007,0xe053302d,
+0x2b039b03,0xf885dc75,0x4628302d,0xfe28f7fc,0x682be077,0x302ef893,
+0xd0672b00,0x2b0779b3,0x4638d864,0xf00d4631,0x2800fa4b,0x686bd064,
+0xd06418c1,0xf4136843,0xd0602f80,0xeb0179b2,0xf8d30382,0xb11330d8,
+0x0818f06f,0x4628e059,0xf7ff2301,0x2800fcb1,0xf04fd153,0xe05038ff,
+0xf893682b,0x2b00302e,0x79b3d040,0xd83d2b07,0x46314638,0xfa24f00d,
+0xd03d2800,0x18c1686b,0x6843d03d,0x2f80f413,0x2325d039,0x462879b2,
+0x23019300,0xfd18f7fd,0x7a2be033,0x9b03e004,0xe02e722b,0x3028f995,
+0xe02a6033,0x2b209b03,0xf885dc1f,0x46283028,0xf98ef7fe,0x7cebe021,
+0xf8884630,0x7d2b3000,0xf8884641,0x22023001,0xfbacf7f2,0x7833e015,
+0x7870b143,0x2b10b130,0x2810d804,0x74ebd802,0xe00a7528,0x0801f06f,
+0xf06fe007,0xe004081c,0x081df06f,0xf06fe001,0x46400816,0xe8bdb004,
+0x46c087f0,0x00021928,0x6845b570,0x194e460c,0x4807d104,0x21faf240,
+0xfa9ef7f1,0xf1065164,0x21080010,0x6280f44f,0x47984b02,0x46c0bd70,
+0x00021928,0x1e003bcd,0x477089c0,0x47702001,0x4803b510,0x21f3f240,
+0xfa86f7f1,0x46c0bd10,0x00021aec,0xb5106e41,0xb1214604,0x22006843,
+0x4b036c98,0x23004798,0x66a36623,0xbd106663,0x1e005c41,0xf7ffb510,
+0x2000ffed,0x46c0bd10,0x47ffe92d,0x9e0e2300,0xf0029303,0x93000301,
+0x46174605,0x46326840,0xf8dd9b0f,0xf7fca040,0x4681faf7,0xd16e2800,
+0x2b039b0d,0xa803d904,0x2204990c,0xfb36f7f2,0x682c9b03,0x0800f1b3,
+0xf04fbf18,0xf8d40801,0x429d37e0,0x4830d004,0x11c1f240,0xfa40f7f1,
+0x030af1a7,0xd8092b0e,0xf003e8df,0x08082114,0x08080808,0x08080808,
+0x000b110e,0x0916f06f,0xf894e045,0xe00a302f,0x3d47f894,0xf884e007,
+0xe03c8d47,0x33f0f241,0xf3c35ce3,0xa90403c0,0x3d04f841,0x46524630,
+0xfb00f7f2,0xf241e02f,0xf24136ef,0x5de237f0,0x46285da3,0x2302ea43,
+0x6300f423,0x55a3b29b,0x55e30a1b,0xff78f7ff,0x63faf640,0xd8044298,
+0xf240480f,0xf7f12159,0xf1b8f9ff,0xd0120f00,0xf7ff4628,0xf641ff69,
+0x429863fe,0xf06fd802,0xe008091c,0x5de25da3,0x2302ea43,0x6300f443,
+0x0a1b55a3,0x464855e3,0xe8bdb004,0x46c087f0,0x00021aec,0x41f3e92d,
+0xf1be468e,0x46150f3e,0x461a4604,0xf8dd9908,0x9f0a8024,0x680cf8d0,
+0x808df000,0xf1bedc10,0xd0500f1e,0xf1bedc03,0xd0240f1d,0xf1bee01c,
+0xf0000f20,0xf1be80fb,0xf0000f22,0xe01380eb,0x0f62f1be,0xdc08d013,
+0x0f3ff1be,0x8093f000,0x0f40f1be,0x80abf000,0xf1bee006,0xf0000f7f,
+0xf1be80b7,0xd02b0f8e,0x0016f06f,0x4629e0f5,0xfd76f7f5,0x2b04e0f1,
+0x4879dc04,0x111ff240,0xf99ef7f1,0x3848f8d4,0xf0046818,0xb2c0fe4d,
+0xf8946028,0xb1133024,0x3324f894,0xf241e002,0x5ce363fc,0xf8d42600,
+0x606b07f8,0x788360ae,0xf0002b00,0xf00c80cb,0xb2c0f90b,0xe03860a8,
+0xfc64f7f5,0x290ee0c9,0xf44fbfcc,0xf44f5280,0x29e05200,0xf06fd902,
+0xe0be0012,0x6330f441,0x0303ea42,0x4629b29d,0xf0002201,0xb910ffc5,
+0x0013f06f,0xf241e0b1,0x52e563fc,0x2b007c63,0x80a4f000,0x6024f894,
+0xf0402e00,0xf8d4809f,0x68183848,0xfe08f004,0xf00042a8,0x46208097,
+0xfea4f7f6,0x46294620,0xfb70f7fc,0xf7f64620,0x4630f911,0x1c4be091,
+0xf2002b04,0xe8df8089,0x0403f003,0x00038704,0xf6422103,0x54e14316,
+0x2b007c63,0x4620d07a,0xfe88f7f6,0xf7f64620,0xf243fc63,0x4620137c,
+0xf7f658e1,0x4620f801,0xf8f0f7f6,0x7c40e06a,0xf642b928,0x5ce34315,
+0x3000f8c8,0xf8d4e069,0xf10d3848,0x68180107,0xfbc8f005,0xb1204602,
+0x3007f89d,0x3000f8c8,0xf642e054,0x5ce34315,0x3000f8c8,0x1c4be029,
+0xd84d2b04,0x3ffff1b1,0x2103bf08,0xf642b2c9,0x54c14315,0x3848f8d0,
+0xf0056818,0xe03dfbb5,0xd0402f00,0xd1162b0c,0x1d39793b,0x0501f013,
+0xf00dd139,0x4602f81d,0xf241b138,0x58e2435c,0x23014628,0x603d7113,
+0xf642e02f,0x58e323d8,0x4610603b,0x2b04e029,0xf642d125,0x58c323d8,
+0xe01b603b,0x2bfe1e4b,0xf642d81a,0xf8d420d0,0x52213844,0xb18b7a1b,
+0xe00a4b0e,0x2bfe1e4b,0xf642d80e,0xf8d420ce,0x52213844,0xb12b7a1b,
+0xf8c64b09,0xb28b3160,0x3164f8c6,0xe0042000,0x001cf06f,0xf06fe001,
+0xe8bd0001,0x46c081fc,0x00021bc4,0x00020007,0x00020006,0x41f0e92d,
+0x4614b088,0x46059a0e,0x461e4688,0xf8d0b91a,0xf1033dd0,0x68130208,
+0xbf0c2b01,0xf8d56897,0xb13c7dd0,0xd9052e03,0x4621a807,0xf7f22204,
+0xe001f975,0x93072300,0x46289b07,0x6cab9300,0x93034641,0x46334622,
+0x94029401,0xf7ff9704,0xf110fe9d,0xd1080f17,0x94019b07,0x46229300,
+0x46414628,0x4c024633,0xb00847a0,0x81f0e8bd,0x0001e5e9,0x41f0e92d,
+0x6805b088,0xf8dd9f10,0x23008044,0xf0029307,0x93000301,0x46284614,
+0x4643463a,0xf8f8f7fc,0x28004606,0x80bbf040,0x2b039b0f,0xa807d904,
+0x2204990e,0xf936f7f2,0x2c169a07,0x80adf200,0xf004e8df,0x6e3e3b38,
+0xab75ab7d,0xab32ab81,0xab8c1b18,0xabababab,0x000cabab,0x4620ac03,
+0x46424639,0xffeaf7f1,0x073cf8d5,0xf7f54621,0xe094f9df,0x3d11f895,
+0x1e14e063,0x2401bf18,0x4628b12c,0xfafef7f5,0xf0002800,0xf8858086,
+0x46284d11,0xfe08f7f7,0x3d11f895,0xd17e2b00,0xf7f74628,0xe07afdc9,
+0x493f4638,0x4b3f2204,0xe0744798,0x0bfcf8d5,0x4628e004,0xe0312101,
+0x0ac0f8d5,0x6f00f010,0xf410d026,0xf4000f00,0xd01063e0,0x3b040a1b,
+0x49352b01,0x007ff000,0x2314d804,0x1303fb00,0xe01768d8,0xfb002314,
+0x68981303,0x0a1be012,0x2b013b04,0xf000492c,0xd804007f,0xfb002314,
+0x68581303,0x2314e006,0xf303fb00,0xe0015858,0x007ff000,0xe03e6038,
+0x21024628,0x4c232300,0x460647a0,0x4638e037,0x4a212140,0x3708f8d5,
+0x47a04c20,0xf8d5e02f,0x603b3708,0x4628e02b,0x47984b1d,0xf5054638,
+0xf44f7168,0xf7f27225,0xe020f8a5,0xf7f168a8,0x4604fb15,0x68a8b918,
+0xf7f12101,0x68a8fb61,0xfef2f7f3,0xf06fb910,0xe008061d,0x463a9907,
+0xf7f34643,0x2800fe7f,0xf06fbfd8,0xb934060d,0x462168a8,0xfb4cf7f1,
+0xf06fe001,0x46300616,0xe8bdb008,0x46c081f0,0x00021be1,0x1e0040f9,
+0x1e00c744,0x0001dc01,0x00020798,0x1e003fc9,0x0001d585,0x41f0e92d,
+0x460f4680,0x25004616,0x0305eb08,0x4dd0f8d3,0xb116b154,0x01d4f104,
+0xf104e001,0x463801da,0x4b052206,0xb1184798,0x2d103504,0x2400d1ec,
+0xe8bd4620,0x46c081f0,0x1e00d671,0x4605b570,0xb921460c,0xf2404813,
+0xf7f03135,0xf44fff61,0x46207294,0xf7f22100,0x2201f821,0x33fff04f,
+0x30acf8c4,0xf8c4189b,0xf8843094,0xf8a4309d,0xf8d4309e,0x60a230e4,
+0x0303f003,0x0360f043,0x60256124,0x209cf884,0x30e4f8c4,0x20a0f884,
+0x46c0bd70,0x00021c25,0x4605b570,0xb921460c,0xf240480a,0xf7f01175,
+0x7923ff33,0x4628b163,0xfef4f7f7,0x26006ce1,0xb1297126,0xf44f6ca8,
+0x4b037200,0x64e64798,0xbd702000,0x00021c25,0x1e005c15,0x4604b570,
+0xb921460d,0xf2404822,0xf7f011c1,0x4620ff15,0xf7ff4629,0x792bffd5,
+0x481db123,0x11d9f240,0xff0af7f0,0x3de0f894,0x7c61b193,0x2200b131,
+0x21014620,0xf7f54613,0xe009facb,0xf7f74620,0xf8d4fd3f,0x3b003de4,
+0x2301bf18,0x3024f884,0x13d4f243,0xf8d458e1,0x4b0e073c,0xf8d54798,
+0xf02330e4,0xf8c50301,0x230030e4,0x4619716b,0x18a3461a,0x3dd0f8d3,
+0x795bb113,0x3101b103,0x2a103204,0xb911d1f5,0x4b034620,0xbd704798,
+0x00021c25,0x1e006221,0x0001fc75,0xb5702935,0x460c4605,0xdd044616,
+0xf2404808,0xf7f071c1,0x2c03fec3,0x4805dc04,0x71c2f240,0xfebcf7f0,
+0x1f214628,0xf7f54632,0xbd70fdf5,0x00021c38,0x4ff0e92d,0xb0872935,
+0x46884607,0xdd049203,0xf2404881,0xf7f07125,0xf897fea7,0xb923381c,
+0xf240487d,0xf7f07127,0xf642fe9f,0x5cfb2391,0xf8d7b9c3,0xf8d33dd0,
+0xf0133094,0xd1110108,0x0288eb07,0x0358f641,0xb16658d6,0xb14b6933,
+0x0f03f1b8,0x7a33dc04,0xd1012b02,0xe012460d,0xe0017b35,0x46352600,
+0x0f03f1b8,0xf10ddd0b,0x21000412,0x46202206,0xff3cf7f1,0x46414638,
+0xf7ff4622,0xea4fffa3,0xea4f0148,0xea451a08,0xf501020a,0x310461ba,
+0xb2924638,0xfbc2f7f5,0x51a3f507,0xd06d2e00,0xf1066809,0x23100b14,
+0x44514638,0xf7f5465a,0xf8d7fbf7,0x2b003830,0x7a33da6b,0xd1682b02,
+0x2391f642,0x2b005cfb,0xf8d7d163,0xf8d33dd0,0xf0133094,0xd15c0008,
+0x293579b1,0x2903d859,0x290bd957,0xf1b8d855,0xdc010f03,0xe0254681,
+0x787278b3,0x7833431a,0x78f24313,0x7933431a,0x79724313,0xd10c431a,
+0x3324f8b7,0xf4039a03,0xf5b34370,0xbf145f80,0x23542350,0x9003f852,
+0x4638e004,0xf00c4631,0x4681fd4b,0x0f00f1b9,0x4837d104,0x717ef240,
+0xfe12f7f0,0x4564f241,0x464a9903,0x4b334638,0x4798597c,0xeb0b4454,
+0x46210200,0x23084638,0xfba2f7f5,0x464a9903,0x4b2d4638,0x4798597c,
+0x44543408,0x0200eb0b,0x46384621,0xf7f52308,0xe00afb93,0x23106809,
+0x44514638,0xf7f54632,0xf1b8fb65,0xdd2f0f03,0xf1b8e03a,0xdd2b0f03,
+0x2b027a33,0x330cd122,0xf503fb08,0xf1a52400,0xf0240938,0x199b0301,
+0x7138f505,0x46381909,0x20e0f8b3,0xf7f53402,0x2c0afb2d,0xf509d1f1,
+0x46387148,0xf8b63102,0xf7f52104,0x4638fb23,0x7149f509,0x2106f8b6,
+0xfb1cf7f5,0x46414638,0xf7ff4632,0xe00bfeeb,0x46384b0a,0x22034798,
+0x92004603,0x21004638,0x4280f44f,0xfe16f7f5,0xe8bdb007,0x46c08ff0,
+0x00021c38,0x0001fccd,0x1e0085d1,0x0001e709,0xf642b513,0x5cc32391,
+0x46964604,0xd1332b00,0x3dd0f8d0,0x3094f8d3,0x0f08f013,0xeb00d12c,
+0xf6410281,0x58d20358,0x6913b122,0x7a13b113,0xd0212b0b,0xdd1c2935,
+0x6913b14a,0x2303b13b,0x93002100,0xf44f4620,0x460b4280,0x4b0be009,
+0x47984620,0x46032203,0x46209200,0xf44f2100,0xf7f54280,0xe007fdd7,
+0x46724620,0xfeb4f7ff,0x7c63e002,0xd1f72b00,0x46c0bd1c,0x0001e709,
+0xf500b57f,0x681953a3,0xf44f2200,0x46057358,0xfad0f7f5,0xf2402400,
+0x012256d4,0xb2924631,0x34014628,0xfaaaf7f5,0x2c363602,0xf10dd1f5,
+0x2100000a,0xf7f12206,0x2400fe09,0x46284621,0x020af10d,0xf7f53401,
+0x2c32fc79,0xf8d5d1f6,0x2100380c,0x443cf8a3,0x93002303,0x460b4628,
+0x4280f44f,0xfd96f7f5,0x2391f642,0xb9cb5ceb,0x3dd0f8d5,0x3094f8d3,
+0x0108f013,0x460cd112,0x0284eb05,0x0358f641,0xb14358d3,0xb133691b,
+0x5254f505,0x46214628,0xf7ff3234,0x3401fe5d,0xd1ed2c36,0x46c0bd7f,
+0xe92d2a35,0x460441f0,0x46174688,0x4854dd04,0x21bef240,0xfd00f7f0,
+0x0287eb04,0x0358f641,0x2e0058d6,0x809af000,0x2b006933,0x8096f000,
+0x3d5ef894,0xf894b31b,0xbb033d5d,0x3023f894,0xf894b1eb,0xb1d33024,
+0x53d2f243,0xb1635ae3,0x53c8f243,0xf5a358e2,0x3b415352,0x0303ea02,
+0xf642b11b,0x5ce32390,0xf894b14b,0xb1333d67,0x3d3cf894,0x0101f1d3,
+0x2100bf38,0x2100e000,0xf6422200,0x54e22390,0xf894b309,0xb1d91d5e,
+0x3d5df894,0xf894b9c3,0xb1ab3023,0x3024f894,0xf243b193,0x5ae353d2,
+0xf243b143,0x58e253c8,0x5352f5a3,0xea023b41,0xb92b0303,0x3d67f894,
+0xf894b113,0xb1133d3c,0xf7f84620,0x78b3f8fb,0x431a7872,0x43137833,
+0x431a78f2,0x43137933,0x431a7972,0xf8d4d01a,0x46203848,0x689a4631,
+0xfbacf00c,0xb1d04605,0x429e6903,0x4630d117,0x0119f105,0x4b172206,
+0xb1204798,0xf2404814,0xf7f021e5,0x2300fc81,0xe008612b,0x30acf8d8,
+0x429a79f2,0xf04fbf04,0xf8c833ff,0x462030ac,0x4b0d4631,0x2f034798,
+0x4631dd0b,0x628bf44f,0x6ca04b0a,0xeb044798,0x22000187,0x0358f641,
+0x462050ca,0x46424639,0xfebef7ff,0x81f0e8bd,0x00021c38,0x1e00d671,
+0x1e008e8d,0x1e005c15,0xb570690a,0xb1e24605,0x69497994,0xf7ff4622,
+0x2c35ff3f,0xf642dc15,0x5ceb2391,0xf8d5b98b,0xf8d33dd0,0xf0133094,
+0xd10a0f08,0x0384eb05,0x0258f641,0xb123589b,0xf2404802,0xf7f0314b,
+0xbd70fc33,0x00021c38,0x4ff0e92d,0x4605b08b,0x93014617,0x905cf8dd,
+0xb919468b,0x318548a1,0xfc22f7f0,0x3000f899,0x0f01f013,0x489dd003,
+0xf7f02186,0x2f05fc19,0x2f0dd008,0x2f20d006,0x2f10d004,0xf06fd002,
+0xe2380817,0x29039901,0xf06fd902,0xe2320807,0x0201f109,0x0302f109,
+0x93039202,0x0204f109,0x0305f109,0x0103f109,0x92059104,0xf8999306,
+0xf8993002,0x431a2001,0x3000f899,0xf8994313,0x431a2003,0x3004f899,
+0xf8994313,0xea522005,0xd1500a03,0xf99b9901,0x008b4058,0xeb03b9dc,
+0xf8d2020b,0xb94b30b0,0x638bf503,0xf303fb01,0x53c8f503,0x18eb3330,
+0x30b0f8c2,0x30b0f8d2,0x799b9a01,0xd0034293,0x21af4874,0xfbc8f7f0,
+0x8004f8dd,0xeb03e02c,0xf8d6060b,0xb1cc40b0,0x8006f894,0x0f35f1b8,
+0x486cd903,0xf7f021b5,0xeb05fbb7,0xf6410288,0xf8d60358,0x58d310b0,
+0xd0034299,0x21b64865,0xfbaaf7f0,0xf8cd4656,0xe05da01c,0x4b624628,
+0xf1b04798,0xf2c00800,0xeb0581ca,0xf6410388,0x589b0258,0x30b0f8c6,
+0x94074626,0xf895e04c,0xb1bb3024,0x3324f8b5,0xf4034628,0xf5b34370,
+0xbf145f80,0x24012400,0x46224649,0xfa9ef00c,0xb1089007,0xe00e2600,
+0x46494628,0xf00c4622,0xe003fc15,0x46494628,0xfc26f00c,0x28009007,
+0x819bf000,0x9b072601,0xb1b86918,0x8006f890,0x0304f1a8,0xd9032b31,
+0x21db4842,0xfb64f7f0,0xeb059b07,0x69190288,0x0358f641,0x429958d3,
+0x483cd012,0xf7f021dc,0xe00dfb57,0x4b3a4628,0xf1b04798,0xf2c00800,
+0xeb05817a,0xf6410388,0x589b0258,0x610b9907,0x0388eb05,0x0258f641,
+0x2100589c,0x52a0f5a2,0xf7f14620,0xf104fc03,0xf8840a14,0x99168006,
+0x4650463a,0xfc1af7f1,0xb2fb9a01,0x612371e2,0x46202206,0xf7f14649,
+0x2200fc11,0x73622f0d,0xd802d00d,0xd0052f05,0x2f10e055,0x2f20d023,
+0xe050d00c,0x72232301,0x33037323,0x2303e003,0x33017223,0x73a37323,
+0xe04473e3,0x2b0b9b15,0x7223d10a,0x73223307,0x73a373e2,0x99164650,
+0xf7f1463a,0xe036fbeb,0x72232302,0x33067323,0x230473a3,0x9915e7e8,
+0x2b011f4b,0x2304d80d,0x18db73a3,0xb2cb73e3,0x2b052203,0x73227221,
+0x2302d101,0x7362e01e,0x2304e01d,0x3b017223,0x9a077323,0x6853b132,
+0x46c0e00b,0x00021c38,0x0001e901,0xf5054628,0xf00c713d,0xb128fa09,
+0xf4136843,0xd0016f80,0x73232305,0x73a32308,0x230173e3,0xb1ce7363,
+0x3b017a23,0xd8152b0a,0xf003e8df,0x0a060806,0x14141414,0x000f1414,
+0xe0022301,0xe0062302,0x9a072304,0x30f4f8c2,0xf44fe004,0x99077380,
+0x30f4f8c1,0x99039b02,0x780b781a,0x431a9904,0x3000f899,0x780a4313,
+0x431a9905,0x9906780b,0x780a4313,0xd120431a,0xf0139b14,0xf8db0f02,
+0xd01330ac,0x3ffff1b3,0xeb0bd008,0xf8d30383,0xb11a20b0,0xf0238953,
+0x81530302,0x9a018963,0x0302f043,0x20acf8cb,0xe0068163,0x428b9901,
+0xf04fbf04,0xf8cb33ff,0x4b5730ac,0x46214628,0x47989a18,0x2b027a23,
+0xf8bbd144,0xf013309e,0xd00f0f01,0x786278a3,0x7823431a,0x78e24313,
+0x7923431a,0x79624313,0xd103431a,0xf10ba808,0xe00201a4,0xf104a808,
+0x220801b4,0xfb42f7f1,0xf10b4e46,0x9b0802da,0x00bcf104,0x47b04651,
+0x786278a3,0x7823431a,0x78e24313,0x7923431a,0x79624313,0xd00d431a,
+0x69139a07,0xd00442a3,0xf44f483b,0xf7f07102,0xf104fa3f,0x465100e0,
+0xe0044622,0x00e0f104,0xf10b4651,0xf8d402d4,0x47b03104,0x46414628,
+0xf7ff465a,0xf1b8fc8d,0xdc490f03,0x2390f642,0xf8955cee,0xb3033d5e,
+0x3d5df895,0xf895b9eb,0xb1d33023,0x3024f895,0xf243b1bb,0x5aeb53d2,
+0xf243b14b,0x58ea53c8,0x5352f5a3,0xea023b41,0xb1030303,0xf895b14e,
+0xb1333d67,0x3d3cf895,0x0101f1d3,0x2100bf38,0x2100e000,0xf6422201,
+0x54ea2390,0xf895b9a1,0xb1891d5e,0x3d5df895,0xf895b973,0xb15b3023,
+0x3024f895,0xf895b143,0xb12b3d67,0x3d3cf895,0x4628b913,0xfe3ef7f7,
+0xf8bbb936,0x2b40309e,0x4628d102,0xfdeaf7f4,0xb90b9b19,0xe0064698,
+0xf04f9919,0x600c0800,0xf06fe001,0x4640081d,0xe8bdb00b,0x46c08ff0,
+0x0001e785,0x1e003161,0x00021c38,0xf0003001,0x28db00fe,0x2000d901,
+0x0843e002,0xb2d83b6e,0x4770b240,0x38240040,0x28dcb2c0,0x20dcbf28,
+0x46c04770,0xb5102901,0xdd024602,0xf8c02300,0xf8d232d0,0x4b0212d0,
+0x47984802,0x46c0bd10,0x1e004461,0x00021ce0,0x4b0db570,0x460c4605,
+0xb1384798,0x480b4623,0x4a0b6829,0x47a04c0b,0xe00c2000,0x4370f404,
+0xf5b3b2e2,0xbf145f80,0x23012300,0xbf8c2a0e,0xf0834618,0xbd700001,
+0x0001e955,0x00021e56,0x00021c5f,0x1e004461,0x734cf243,0x58c0b510,
+0xfc28f003,0x46c0bd10,0x3848f8d0,0x6818b510,0xf0036859,0xbd10fff3,
+0xf001b510,0xbd10fd23,0xf001b510,0xbd10ff8f,0x9c04b513,0x9c059400,
+0xf0009401,0xbd1cfea7,0x9c04b513,0xf0009400,0xbd1cfe39,0x6804b570,
+0xf8944606,0xb14b381c,0x210168a0,0xfce6f7f0,0x4824b120,0x7132f44f,
+0xf94af7f0,0x370cf8d4,0x33014620,0x370cf8c4,0xff2af7f6,0x3710f8d4,
+0x4620b11b,0xfebcf7f6,0xf894e032,0xb1c33024,0x3844f8d4,0xf44f4620,
+0xf8d3719d,0xf7f450dc,0x42a8ffad,0xf5c5bf36,0xebc53380,0x181a0200,
+0x32d0f8d6,0xf8c6189b,0xf8d432d0,0xf8c33844,0xf89600dc,0xb11b3230,
+0x21014630,0xfaecf000,0x0778f8d4,0x6e032500,0xf5044798,0x6823646f,
+0xf854b113,0x47980c04,0x34343501,0xd1f62d16,0x46c0bd70,0x00021e79,
+0xf000b510,0xbd10fad5,0x4ff0e92d,0x6804b0e5,0xb1c0f8dd,0x23009e71,
+0xf0029363,0x93000301,0x46154680,0x465a4620,0xf7fb4633,0x9003f989,
+0x49a9b128,0x4ba9462a,0x479848a9,0x9b6fe147,0xd9042b03,0x996ea863,
+0xf7f12204,0x1eabf9c3,0x2b0f9963,0x8133f200,0xf013e8df,0x01390010,
+0x01310014,0x00e20131,0x00e80131,0x00f100ed,0x01050131,0x010e0131,
+0x012e0131,0xf8cb4b99,0xe1243000,0x7f9cf5b6,0x7000f8d8,0xf44fd209,
+0x4895739c,0x46324995,0x47a04c90,0x030df06f,0xae04e114,0xf44f2100,
+0x4630729c,0xf972f7f1,0x25024b8f,0x23056033,0x331b7633,0xf04f76b3,
+0x76f30301,0x0a00f04f,0x02a0f04f,0x83b2ab60,0xf8a67675,0x9300a01e,
+0xab61aa62,0x0a84f8d7,0xac524651,0xa148f8cd,0xfe56f003,0x612ef507,
+0x4620311c,0xfcbcf008,0xf8d79b62,0x62330a84,0xf1069b61,0x627302b8,
+0xf04f9b60,0x62b3090a,0x1a88f8d7,0xfa16f004,0x3a84f8d7,0x8a1b9a52,
+0x60721d21,0x9330a806,0xf954f7f1,0xf8862304,0xf8863049,0x330c304a,
+0x9048f886,0x504bf886,0x304ef886,0x304ff886,0x32c4f8d8,0x904cf8a6,
+0xd13b42ab,0x64734b67,0x2b006b7b,0x4b66d038,0x64734651,0xa8182224,
+0x4000f8d8,0xf912f7f1,0x030cf640,0x0200f04f,0xf04f6533,0xf8860301,
+0xf8863057,0xf8862056,0xf8862059,0xf886205a,0xf8d4a058,0x464a1848,
+0xf106318d,0xf7f1005b,0xf8d4f919,0xf1061848,0x318d0065,0xf7f1464a,
+0xf8d4f911,0xb1233d4c,0x0248f04f,0x2054f8a6,0xf04fe006,0xf8a60341,
+0xe0013054,0x64734b4b,0x6c6bad04,0xf043a921,0x646b4300,0x4638223c,
+0xfbe2f7f4,0x992c4b46,0x4b46681a,0x681b4c3b,0xea434845,0x932a4302,
+0x2080f8d5,0xac5c47a0,0x46202240,0x01f8f105,0xffb0f7f0,0x073cf8d7,
+0xf7f44621,0x4658f9a5,0xf44f4629,0xe01f729c,0x073cf8d4,0xf9c0f7f4,
+0xe0509003,0x073cf8d4,0xf9acf7f4,0x4658e04b,0x014cf104,0x7c63e00f,
+0xf06fb11b,0x92030204,0x4659e041,0x004cf104,0xf7f12206,0xf8d4f8bf,
+0x46590dd0,0x220630da,0xf8b8f7f1,0x0089e033,0x734cf243,0x58e09163,
+0xf003b249,0xe02afafb,0x4000f8d8,0x5000f89b,0x37f8f8d4,0xbf942d0e,
+0x5600f44f,0x5680f44f,0xb123789b,0x4b11491d,0x4798481d,0x4620e017,
+0xfd08f7f5,0x6130f445,0x43314620,0xf9d2f7fb,0xf7f44620,0xe00aff73,
+0x1218f8c8,0x4b07e007,0x49054814,0x4798462a,0x0316f06f,0x98039303,
+0xe8bdb065,0x46c08ff0,0x000220e7,0x1e004461,0x00021fc4,0x00012345,
+0x00021fdd,0x00021c42,0xdeadbeef,0x006480f1,0x007480f1,0x004080f1,
+0x00022e08,0x00022e04,0x0002200f,0x000220f8,0x00022039,0x00022074,
+0x9c04b513,0xf0019400,0xbd1cf825,0xf000b510,0xbd10ffcb,0x9c04b513,
+0x9c059400,0xf0009401,0xbd1cff37,0xf001b510,0xbd10fdb3,0xf001b510,
+0xbd10fb6f,0x69ccb5f0,0xf414b085,0x46074f00,0xf89d460d,0xd0096030,
+0x4400f424,0x9c0a61cc,0x94009602,0x94019c0b,0xf9bef000,0xf0014638,
+0xb005fd51,0x46c0bdf0,0x43f0e92d,0x9f0eb087,0x460c4681,0x46984615,
+0xb91f6806,0x3dd0f8d6,0x0708f103,0xf1b8b145,0xd9050f03,0x4629a804,
+0xf7f12204,0xe001f813,0x93042300,0x9a042c03,0xdc04d023,0xd0112c01,
+0xb164dc15,0x2c0ee080,0xdc02d00e,0xd01c2c0c,0xf5a4e07a,0x2b017383,
+0x2300d876,0x4b48e050,0xe00c602b,0xe087602c,0x602b6833,0x7c74e084,
+0xf0402c00,0xf8d68081,0xf7f4073c,0x4620f8d5,0x4648e07b,0xfcb6f015,
+0x4630e076,0xffa8f7f6,0x6f00f010,0xf410d02a,0xf4000f00,0xd01063e0,
+0x3b040a1b,0x4a372b01,0x007ff000,0x2314d804,0x2303fb00,0xe01468da,
+0xfb002314,0x689a2303,0x0a1be00f,0x2b013b04,0xf0004a2e,0xd804007f,
+0xfb002314,0x685a2303,0x2314e003,0xf303fb00,0xf44f589a,0xfbb273fa,
+0xe007f0f3,0x037ff000,0x72faf44f,0xf302fb03,0xf0f2fbb3,0xe03b6028,
+0xd1024543,0x000df06f,0x5d5ae02f,0x2a003301,0xf5b4d1f6,0xeb057f83,
+0xebc30403,0xd1080308,0x46309202,0x46224629,0xf8cd9500,0x97038004,
+0x9301e007,0x93022301,0x97039400,0x46294630,0xf7fa4613,0xe00fffc3,
+0xbf183a00,0xf8d62201,0x92003848,0x0217f10d,0x95019202,0x46216818,
+0x462b4642,0xfe22f004,0xf100b138,0x2b250325,0xf8c6d802,0xe0000708,
+0xb0072000,0x83f0e8bd,0x14e46c77,0x1e00c744,0x4b0ab570,0x460d4604,
+0xb9184798,0x214d4808,0xfe76f7ef,0x68e26923,0x429318eb,0x4804d903,
+0xf7ef214e,0x82a5fe6d,0x46c0bd70,0x1e005ec1,0x0002210d,0x4b0bb570,
+0x460d4604,0xb9184798,0x21434809,0xfe5cf7ef,0x429d8aa3,0x4806d903,
+0xf7ef2144,0x6920fe55,0x19408aa3,0x61201b5b,0xbd7082a3,0x1e005ec1,
+0x0002210d,0x4b0cb570,0x460d4604,0xb9184798,0x2139480a,0xfe40f7ef,
+0x68a26923,0x42931b5b,0x4806d203,0xf7ef213a,0x6920fe37,0x1b408aa3,
+0x612018eb,0xbd7082a3,0x1e005ec1,0x0002210d,0x3224f8d0,0x41f0e92d,
+0x460c4605,0xf0002b00,0xf5b3808f,0xd9036fe1,0x218d4847,0xfe1cf7ef,
+0x682bbb34,0x1844f8d3,0x2024f9b1,0x3026f9b1,0xf9b1189b,0x189b2028,
+0x202af9b1,0xd01742d3,0x3224f8d5,0x64e1f5c3,0xdc032c00,0x2193483a,
+0xfe02f7ef,0x3218f8d5,0xbf142b01,0x23982318,0xdd05429c,0x2228f8d5,
+0x322cf8d5,0xd35f429a,0xf240686b,0x6c987144,0x47984b30,0xb9404606,
+0xf8852301,0xf8953230,0x33013231,0x3231f885,0x2700e04e,0xf8852180,
+0xf7ff7230,0x6934ff77,0x0801f04f,0x22047823,0x0303f368,0xf362b2db,
+0x70231307,0x3224f8d5,0x189b18a0,0x70a3b29b,0x70e30a1b,0x2224f8d5,
+0x1220f8d5,0xfeaaf7f0,0x78e178a3,0xea434630,0xf7ff2101,0xf8d5ff3d,
+0x46390220,0x2224f8d5,0xfe7cf7f0,0x3228f8d5,0x7224f8c5,0xd9032b1f,
+0x21b2480f,0xfdacf7ef,0x1228f8d5,0x22c0f8d5,0x3021f852,0xf8423301,
+0x682b3021,0x7228f8c5,0x073cf8d3,0x46434639,0xf7f34632,0x682bfed9,
+0x0778f8d3,0x47986e03,0xe8bd2000,0x46c081f0,0x0002210d,0x1e005c25,
+0x4ff8e92d,0xf890469b,0x46073230,0x46164689,0x8028f8dd,0xa030f89d,
+0x2101b113,0xff50f7ff,0x3224f8d7,0x2220f8d7,0x0418f103,0xf8d7189d,
+0xf8c73218,0x2b014224,0xb166d112,0x46311914,0x46202210,0xfe4ef7f0,
+0x0010f104,0x1010f8d9,0xf7f0226e,0xf8d7fe47,0x33803224,0x3224f8c7,
+0x3224f8d7,0x6fe1f5b3,0x4843d303,0xf7ef21e0,0xb116fd53,0x0f00f1ba,
+0x2200d002,0xe0122301,0x683a990b,0xf642b911,0xe00723ce,0x23cef642,
+0x990b5ad3,0xd0044299,0x23d0f642,0x45985ad3,0x2200d106,0x712b2307,
+0x71aa716a,0xe01371ea,0xf243683b,0x589b12dc,0xd1022b05,0x33042200,
+0xf1bbe7f1,0xd1020f14,0x23082200,0x2300e7eb,0x716b712b,0x71eb71ab,
+0x061cf109,0x702b7e33,0x706b7e73,0x70ab7eb3,0x70eb7ef3,0x0f00f1b8,
+0xf108d003,0x752b33ff,0xf885e001,0x23008014,0x736b732b,0x73eb73ab,
+0x746b742b,0x74eb74ab,0x4b1a4648,0xb9184798,0x21554817,0xfcfcf7ef,
+0x3016f8b9,0xf0034a16,0x5cd40307,0xd9042c04,0xf2404811,0xf7ef1109,
+0x756cfcef,0x69739a0b,0xf1b8b112,0xe0010f02,0x0f03f1b8,0xb29abfcc,
+0x0a130c1a,0x2300726b,0x0e1372ab,0x72eb722a,0x3228f8d7,0x33014638,
+0x3228f8c7,0xf7ff2100,0xe8bdfea7,0x46c08ff8,0x0002210d,0x1e005ec1,
+0x000221c0,0x41f0e92d,0x8a884607,0x2803b086,0xf240460e,0x690c8156,
+0xf0037823,0x2d01050f,0x814ff040,0x78e378a2,0x2103ea42,0xf2004281,
+0x46308148,0xfe30f7ff,0x46302104,0xfe46f7ff,0x091b7823,0xd07a2b02,
+0xf0002b03,0x2b0180d4,0x8137f040,0x21146934,0xf7ff4630,0x7862fe37,
+0xea437823,0x78a22302,0x4302ea43,0xea4378e2,0x63736302,0x2b047c23,
+0x4897d904,0x21b5f240,0xfc8af7ef,0x4a957c23,0x5cd54630,0x47984b94,
+0x4891b918,0xf7ef215c,0xf005fc7f,0x42ac0407,0x488dd003,0xf7ef215d,
+0x8af3fc77,0x0307f023,0x0303ea44,0x69f382f3,0x4300f443,0xf8d761f3,
+0x2b0132c4,0xf897d002,0xb9a33070,0x781a6933,0xf012785b,0xea420f0c,
+0xd10c2303,0x02fcf013,0x2a20d001,0x4638d107,0x2a204631,0x2200bf14,
+0xf0002201,0x6838fb79,0x4632497a,0xf7f44633,0x2800fdc3,0x6838db05,
+0x22004631,0xff38f7f8,0x2400e0d5,0x46314638,0x46234622,0x94019400,
+0xf7ff9402,0x687bfead,0x6c984631,0x4b6e4622,0x46384798,0xf7ff2101,
+0x4620fe03,0x2104e0c8,0x69344630,0xfdc2f7ff,0x4631687b,0x4b676c98,
+0x47986935,0xe0002100,0x42813101,0x4601d101,0x5d4be002,0xd1f72b00,
+0x78237862,0xea433101,0x78a22302,0x4302ea43,0xebc178e2,0xea430400,
+0xf5b36302,0xeb057f83,0xd1090201,0x7383f5a3,0x93039302,0x90019500,
+0x46296838,0xe0084623,0x23019200,0x93022200,0x92039401,0x46296838,
+0xf7fa4613,0x2104fd13,0x46304604,0xfda2f7ff,0xf3c46932,0x70532307,
+0x4307f3c4,0x0e237093,0x701470d3,0x46302104,0xfd94f7ff,0x22046934,
+0x21004620,0xfc9ef7f0,0x25017823,0x0303f365,0x2205b2db,0x2104e04f,
+0xf88d4630,0x69345017,0xfd64f7ff,0x4631687b,0x4b386c98,0x47986935,
+0xb12d4680,0x4629a804,0xf7f02204,0xe000fca3,0x683b9504,0xf8d37821,
+0x78630848,0xea4178e2,0x78a32103,0xea419501,0x9b044103,0x6102ea41,
+0xbf183b00,0x93002301,0x0317f10d,0x46429302,0x6800462b,0xfb32f004,
+0x46042104,0xf7ff4630,0x6932fd51,0x2307f3c4,0x70537014,0x4307f3c4,
+0x70930e24,0x210470d4,0xf7ff4630,0x6934fd43,0x46202204,0xf7f02100,
+0x7823fc4d,0xf3652501,0xb2db0303,0xf3622208,0x70231307,0x4631687b,
+0x4b126c98,0xb2804798,0x0a0070a0,0x683b70e0,0xf8d32100,0x4632073c,
+0xf7f3462b,0x2000fcad,0x687be006,0x6c984631,0x4b072200,0x20014798,
+0xe8bdb006,0x46c081f0,0x0002210d,0x000221bb,0x1e005ec1,0x00010f55,
+0x1e005c41,0x1e003e11,0xf243b57f,0x58c543ec,0xb9224616,0xf2404812,
+0xf7ef2151,0x69f3fb49,0x4f00f413,0x2400d01a,0x46314628,0x46234622,
+0x94019400,0xf7ff9402,0x686bfdaf,0x7144f240,0x4b086c98,0x46014798,
+0x686bb140,0x6c984622,0x47984b05,0x21014628,0xfcfef7ff,0x46c0bd7f,
+0x0002210d,0x1e005c25,0x1e005c41,0x4ff8e92d,0x4682290a,0x4617460d,
+0x9e0a4699,0x2b00d857,0x2600bf08,0xf1066843,0x6c980148,0xbf9829ff,
+0x7180f44f,0x47984b27,0xb9384680,0xfae8f7ef,0xf2404825,0xf7ef11f1,
+0xe040fb03,0xf7ff21a4,0xf8d8fc99,0xf04f4010,0x78230b01,0xf36b2207,
+0xb2db0303,0x1307f362,0xf1067023,0xb29b030c,0x0a1b70a3,0x1d2270e3,
+0x2307f3c5,0x70537125,0x4307f3c5,0x0e2b7093,0xf3c770d3,0x71532307,
+0x4307f3c7,0x0e3b7193,0x71d37117,0x0f00f1b9,0xf104d005,0x4649000c,
+0xf7f04632,0x78a3fbb7,0x464078e1,0x2101ea43,0xfc4af7ff,0x3000f8da,
+0xf8d32100,0x4642073c,0xf7f3465b,0xe8bdfc01,0x46c08ff8,0x1e005c25,
+0x0002210d,0x4ff0e92d,0x6803461e,0xf8d3b089,0x460f3848,0x46114680,
+0x46146818,0x9048f8dd,0xb04cf8dd,0xf84af003,0x90006939,0x46204b62,
+0x7ca24798,0x21067ce3,0x2303ea42,0x46384682,0xf7ff9301,0xf8d8fc33,
+0x2b013218,0x2106d130,0xf7ff4638,0xf8d8fc47,0x46393004,0x4b576c98,
+0x8a814798,0x3104ad03,0xfc06f7ff,0x46282214,0xf7f04621,0x7b23fb67,
+0x0f04f013,0x4638d003,0xf7ff2102,0x211efc2f,0xf7ff4638,0x693cfc2b,
+0x46202214,0xf7f04629,0x7ba3fb55,0xea437be2,0xf0232302,0xf0430306,
+0x73a30306,0x73e30a1b,0x0f00f1bb,0xf89bd016,0x2b013008,0x2b03d001,
+0xf446d102,0xe00d3680,0xd1022b02,0x3600f446,0x2b04e008,0xf446d102,
+0xe0033640,0xbf082b0b,0x4600f446,0x46382118,0xfbfcf7ff,0x2100693d,
+0x46282218,0xfb06f7f0,0xf3c91d2c,0xf8852307,0x70639004,0x4307f3c9,
+0xea4f70a3,0x70e36319,0xf04f9a00,0xb2500b00,0xf870f7ff,0x027ff00a,
+0xf01a0e13,0x74206f00,0xf8847122,0xf884b005,0x71e3b006,0xf442d008,
+0x0a1a4300,0x0e1b7123,0xf8847162,0x71e3b006,0x46399a01,0x03c7f3c2,
+0x23007223,0xf8d87263,0x22063000,0x3848f8d3,0x7326889b,0x0a1b72a3,
+0xf3c672e3,0x73632307,0x4307f3c6,0x0e3373a3,0xb011f884,0x782b73e3,
+0xf3642401,0xb2db0303,0x1307f362,0xf8d8702b,0x6c983004,0x47984b0a,
+0x70a8b280,0x70e80a00,0x3000f8d8,0xf8d34659,0x463a073c,0xf7f34623,
+0xb009fb23,0x8ff0e8bd,0x0001edf9,0x1e003e21,0x1e003e11,0xb5102901,
+0xdd086804,0x68502100,0x460a4b06,0x28064798,0xf8a4bfd8,0xf8b406fc,
+0x4b0316fc,0x47984803,0x46c0bd10,0x1e0037cd,0x1e004461,0x0002212f,
+0xb5702901,0xdc014605,0xe0102400,0x02c0f8d0,0x22802100,0xfa7af7f0,
+0xf8852300,0xe0133231,0xdd042c03,0x0f03f014,0x480ed101,0xf8d547b0,
+0x462132c0,0x2024f853,0x4e0c480b,0x47b03401,0xd1ed2c20,0x47b04807,
+0x122cf8d5,0x2228f8d5,0x48074c06,0xf89547a0,0xf8951231,0x48052230,
+0xbd7047a0,0x00021250,0x00022143,0x1e004461,0x0002214d,0x0002217b,
+0xb5102901,0xdd094604,0x68502100,0x460a4b06,0x1e434798,0xbf982b1e,
+0x022cf8c4,0x122cf8d4,0x48034b02,0xbd104798,0x1e0037cd,0x1e004461,
+0x000221a3,0x03fff000,0xea400a00,0x47702003,0x78007843,0x2003ea40,
+0x46c04770,0x78434602,0x04007880,0x2003ea40,0x43187813,0xea4078d3,
+0x47706003,0x46c04770,0x4604b510,0x1c43b110,0xd0044203,0xf44f4805,
+0xf7ef610c,0x2001f945,0x1c43e001,0x0864b2d8,0xbd10d1fb,0x000221e0,
+0xb5702a05,0x460d4606,0xd9044614,0xf6404811,0xf7ef0174,0x4b10f931,
+0x0184f895,0x23015d1a,0xf102fa13,0x0384eb06,0xf8956a1b,0x2b012183,
+0xb2cbd106,0xea40431a,0xf8850303,0xe0062183,0xb2db43cb,0xf885401a,
+0xea002183,0xf8850303,0xbd703184,0x000221e0,0x0002282e,0xb5102901,
+0xdd044602,0xf8c02300,0xf8c032c8,0xf8d232cc,0x4b0312c8,0x22ccf8d2,
+0x47984802,0x46c0bd10,0x1e004461,0x000221ef,0x4603b570,0x480a460c,
+0x68224619,0x47984b09,0xe0062500,0x79191963,0xf3c14807,0x47b00245,
+0x68233501,0x429d4e03,0x4804d3f4,0xbd7047b0,0x00022204,0x1e004461,
+0x0002221e,0x00021250,0xf890b5f0,0xb08d328c,0xb11b4605,0xf6404821,
+0xe02261bd,0x69087d0b,0xb2d93b18,0xf100b91a,0x1f0a031c,0xf100e003,
+0xf1a10322,0xae02020a,0x96004619,0x68282300,0x47a04c17,0x46314817,
+0xffbef7ff,0x68286869,0x713df501,0xf960f00b,0xb9284607,0xf640480f,
+0xf7ef61d6,0xe017f8a9,0x04f8f100,0x480e4621,0xffaaf7ff,0x46306869,
+0x714af501,0xfc2ef007,0x46214630,0xfc2af007,0x46214808,0xff9cf7ff,
+0x46396828,0xffc8f00a,0xbdf0b00d,0x000221e0,0x0001df19,0x0002222a,
+0x00022238,0x0002224c,0x4b0cb570,0x460c4606,0xb9184798,0x215c480a,
+0xf87af7ef,0x0507f004,0xd00342a5,0x215d4806,0xf872f7ef,0xf0238af3,
+0xea450307,0x82f30303,0x46c0bd70,0x1e005ec1,0x000221e0,0x4b0ab570,
+0x460d4604,0xb9184798,0x214d4808,0xf85cf7ef,0x68e26923,0x429318eb,
+0x4804d903,0xf7ef214e,0x82a5f853,0x46c0bd70,0x1e005ec1,0x000221e0,
+0x4b0bb570,0x460d4604,0xb9184798,0x21434809,0xf842f7ef,0x429d8aa3,
+0x4806d903,0xf7ef2144,0x6920f83b,0x19408aa3,0x61201b5b,0xbd7082a3,
+0x1e005ec1,0x000221e0,0x4ff0e92d,0x900cf8d0,0x4617460d,0xf8d96801,
+0xb0872008,0xa044f8dd,0x92039105,0xd06f2a00,0xf2406843,0x6c987144,
+0x47984b37,0x28004606,0xf109d066,0x21ac030c,0xf7ff9304,0x6934ffc5,
+0x46209904,0xf7f02218,0xf104f8f1,0xb9270818,0xf04f4640,0x463d0b18,
+0x462be00a,0x21004640,0x4c2a463a,0xf10747a0,0xfa5f031a,0x2502fb83,
+0x9a049903,0x0418f1a1,0xf102b2e4,0xebc50118,0x445c0204,0x1b641949,
+0xf8d0f7f0,0xb2e14630,0xff80f7ff,0x3008f8d9,0x18fb8ab2,0xd004429a,
+0xf640481b,0xf7ee6183,0x7d31ffdb,0x39184640,0x2203b2c9,0x47984b17,
+0x2301b130,0x99057043,0x23bcf642,0x70835acb,0x0f00f1ba,0x9a05d109,
+0x3848f8d2,0x2b02685b,0xf04fbf0c,0xf04f0a02,0x46300a0c,0xf8c62107,
+0xf7ffa030,0x2200ff35,0x46319805,0x92004613,0xa004f8cd,0xff34f7f9,
+0xe8bdb007,0x46c08ff0,0x1e005c25,0x1e006abd,0x000221e0,0x1e003759,
+0x69c4b570,0x68a04605,0x4606b908,0x686be02a,0x7144f240,0x4b146c98,
+0x46064798,0x21acb310,0xff46f7ff,0x010cf104,0x693068a2,0xf872f7f0,
+0x68a14630,0xff22f7ff,0xb96b6863,0xf640480b,0xf7ee612f,0x682bff81,
+0x3848f8d3,0x2b02685b,0x2302bf0c,0x6063230c,0x46306863,0x21076333,
+0xfeeef7ff,0xbd704630,0x1e005c25,0x000221e0,0x4b0cb570,0x460d4604,
+0xb9184798,0x2139480a,0xff62f7ee,0x68a26923,0x42931b5b,0x4806d203,
+0xf7ee213a,0x6920ff59,0x1b408aa3,0x612018eb,0xbd7082a3,0x1e005ec1,
+0x000221e0,0x47f3e92d,0x68004606,0xf8dd4698,0xf00a9028,0x4682fe75,
+0xd04c2800,0x0f00f1b9,0x2310bfac,0x199b2308,0x68a3689c,0xd0422b00,
+0xf2406873,0x6c987144,0x47984b21,0xb9284605,0xf6404820,0xf7ee51f5,
+0xe035ff2b,0xf7ff21ac,0x68a2fedb,0x010cf104,0xf7f06928,0x4628f807,
+0xf7ff68a1,0x69ebfeb7,0xea434628,0x61eb0308,0x71e9ea29,0xfe90f7ff,
+0xf1056863,0xb96b071c,0xf6404810,0xf7ee6103,0x6833ff0b,0x3848f8d3,
+0x2b02685b,0x2302bf0c,0x6063230c,0x68306863,0x6863617b,0x93004629,
+0x93012300,0x33014652,0xfab8f7f8,0x2500e000,0xe8bd4628,0x46c087fc,
+0x1e005c25,0x000221e0,0x47f0e92d,0x46984689,0x6020f89d,0xb9084607,
+0xe0133001,0x25004614,0x46414620,0x4b084632,0x19a44798,0x3001b908,
+0x3501e003,0xd1f342bd,0xf0192000,0xbf080f01,0x0001f080,0x87f0e8bd,
+0x1e00d671,0x4ff8e92d,0x881d2400,0x468a4683,0x46984691,0x46274626,
+0xeb0be012,0x78630405,0xd307454b,0x46511ca0,0x4b0a464a,0xb9084798,
+0xe0052701,0xf8381c73,0xb2de5016,0xd8042e1f,0x2f00b115,0xe001d0e9,
+0x463cb907,0xe8bd4620,0x46c08ff8,0x1e00d671,0x6803b51f,0xf8932104,
+0xab042d5e,0x2d04f843,0xf8802200,0x91002124,0xf7fe3105,0xb005fd31,
+0x46c0bd00,0xf890b510,0x46023124,0x6803b143,0x112cf8d2,0xf8d32200,
+0x4c02073c,0x47a04613,0x46c0bd10,0x1e0061f9,0x4ff0e92d,0x9008f8d1,
+0x7d01f5ad,0x4693460f,0xf1b96806,0xd06b0f00,0x2d00680d,0x2206d13d,
+0x46294668,0xff2ef7ef,0x46ea687b,0x087ff013,0x4630d103,0xfa4ef7f4,
+0x466b4680,0x46414630,0x0204f109,0x47a04c2c,0x010cf107,0xf10d464a,
+0xf7ef0006,0x4c29ff37,0x462a4641,0x46302301,0x7848f8d6,0xf8d647a0,
+0xf8a73848,0xf8b30138,0x46302138,0xf7f3211c,0x4630fb9d,0xf7f34641,
+0x4630fd13,0xf1094669,0x465b0206,0xfe8af7f4,0x46414630,0xfb48f7f5,
+0x2d03e02a,0x2100d128,0xf1092206,0x46680406,0xfeecf7ef,0xf107b2a4,
+0x68ba010c,0x0006f10d,0xff04f7ef,0x466b1ce2,0x0203f022,0x60e8f506,
+0x711af44f,0xfdeaf7f4,0x46304622,0xf7f3214a,0x3c02fb6d,0xf8d64630,
+0xf7f31dd0,0x4630fc0f,0x46e8b2a1,0xf916f7f5,0x7d01f50d,0x8ff0e8bd,
+0x0001dce1,0x0001dac5,0xb08eb570,0x46154606,0x0016f10d,0xb1194b13,
+0x47984913,0xe0012400,0xe7fa4912,0xf304fa55,0x0301f013,0x2301bf18,
+0x3037f88d,0x0336f10d,0x23029300,0x93012200,0x93023b01,0xf10d6830,
+0x46130116,0x4036f88d,0xf7f99203,0xb910fef7,0x2c083401,0xb00ed1e2,
+0x46c0bd70,0x1e004075,0x000219ef,0x00021a94,0xb570460b,0x46152101,
+0x4604461a,0xffc4f7ff,0xb9204601,0x462a4620,0xffbef7ff,0x46084601,
+0x46c0bd70,0x4ff0e92d,0xb0896805,0x468a4607,0xf8d59203,0xf8d58dd0,
+0x461c980c,0xf0402b00,0x4619813e,0xf7f44628,0xf895f9d3,0xb9233023,
+0x2a009a03,0x2201bf08,0xf8959203,0xf04f3de8,0xf02332ff,0xf8850304,
+0x6aab3de8,0xf4234621,0x62ab7300,0xf8d3683b,0xf7f2073c,0xf243fdad,
+0x54ec1395,0x2a009a03,0x8114f000,0xf8d7683b,0xf8d31130,0x4b91073c,
+0xf1ba4798,0xd0030f00,0x46514628,0xf876f7f4,0x5bbaf505,0x763df505,
+0x0b1cf10b,0x22904659,0xf7ef4630,0xf895fe4f,0xf50522fc,0xf888713e,
+0xf1082024,0x31050025,0xfe44f7ef,0x5058f505,0x46313008,0xf7ef2206,
+0xf243fe3d,0x50ec13a0,0x50ec3304,0x4d5cf885,0x4023f895,0x0801f04f,
+0x8024f885,0xd0562c00,0x46284631,0xfdf4f00a,0xb9184606,0x0024f885,
+0xe0cf9003,0xf00a4641,0x4630fbc7,0xf00a2102,0x4630fbc3,0xf00a2110,
+0xf642fbbf,0x5ceb33c6,0xb1136872,0x0304f042,0xf022e001,0x60730304,
+0xb1836b6b,0x328cf897,0x2300b16b,0xf5079300,0xf5077222,0x46287328,
+0x32054631,0xf7f53307,0x2401fb95,0x2400e007,0x46314628,0x46234622,
+0xf7f59400,0x2200fb8b,0x9300237f,0xf5059401,0xf106704a,0x461301f8,
+0x47a04c55,0x46314628,0xfc36f00a,0x46222400,0x46314638,0xf7ff3401,
+0x2c04fbbb,0x2301d1f7,0x321df887,0x4628e021,0xfa44f7f4,0x464268b9,
+0xf7ff4638,0xf8b5fe6d,0xf8b53322,0xf8c92320,0x02913190,0x0f00f1ba,
+0xf8c9d003,0xf8c94180,0x3b004184,0x2301bf18,0x4302ea43,0x3188f8c9,
+0xf8c94628,0xf7f3118c,0x2100fc99,0x46582290,0xfd90f7ef,0x738cf241,
+0x02fff04f,0xf06f52ea,0xf6420238,0x50ea23d8,0x3848f8d5,0x68182100,
+0xfa0af002,0xf7f44628,0x2201fa0d,0x69794638,0xfe36f7ff,0x1dd0f8d5,
+0xf7f34628,0x4628fcc9,0xfb04f7f3,0xf7f34628,0x683bfc71,0xb1436b5b,
+0x32c4f8d7,0xd1042b02,0x463821ff,0xf7ff460a,0xf8b5fed3,0xf4033324,
+0xf5b34370,0xd1095f80,0xf8d7683b,0xf8d31128,0xf44f073c,0x2301727a,
+0x47a04c1a,0x3023f895,0x4628b91b,0xf7f32101,0xf8d5fd5b,0xf8b53848,
+0x681c0324,0x47984b14,0x031ef10d,0xf10d4601,0x4620021f,0xfacaf002,
+0x301ff89d,0xf89d9305,0x9306301e,0xf8954628,0xf7f31024,0x9b03f935,
+0x46382108,0x0201f1d3,0x2200bf38,0x9100ab05,0xfafef7fe,0xb0092000,
+0x8ff0e8bd,0x1e006221,0x0001ed85,0x1e0061f9,0x0001e9bd,0xb5102100,
+0x460b460a,0xfe96f7ff,0x46c0bd10,0x6804b573,0xf8944606,0x2b003024,
+0xf243d051,0x5ce31397,0xd04c2b00,0x3023f894,0x1d5ef894,0xd0462b00,
+0x1396f243,0xb1e25ce2,0x5ce33b01,0xd1184293,0xf894b1b9,0xb9a33d5d,
+0x5158f504,0x788b3108,0x431a784a,0x4313780b,0x431a78ca,0x4313790b,
+0x431a794a,0x2301d005,0x3d5cf884,0xf7f44620,0xf243fa79,0x5ce21395,
+0x5ce33302,0xd914429a,0x5d41f894,0xf894b98d,0xb1233d5c,0x5d5cf884,
+0xf7f44620,0x2301fa67,0x3d41f884,0x21024630,0x462b462a,0xf7fe9500,
+0xf243fa9b,0xf2431195,0x5c621397,0x42935ce3,0x1c53d301,0xbd7c5463,
+0x47ffe92d,0x460d4606,0xb1c24691,0xd1072a02,0x2a006b8a,0x80e7f040,
+0x69496843,0xe0df6c98,0xf0402a03,0x6b8b80e0,0xf0002b00,0x7a1b80dc,
+0xf0402b02,0x680080d8,0x47984b89,0xf891e0d3,0xb17b302d,0x32c8f8d0,
+0x42ccf8d0,0xf8c03301,0x684332c8,0x6c986949,0x47984b82,0xf8c61900,
+0xe0c302cc,0x3234f8d0,0xf0002b00,0x688f80bf,0x2f05684c,0x80baf240,
+0xf2402f07,0x487a80b7,0x22064621,0xa1e8f8df,0x280047d0,0x80aef040,
+0xf7ff88e0,0xf5b0fa3b,0xf1044f01,0xf8ad0806,0xd10c000e,0x020cf104,
+0x429a19e3,0x080af104,0x809cf200,0xf7ff8960,0xf8adfa29,0xf8bd000e,
+0xf640200e,0x429a0306,0xf8d6d122,0xf0133234,0xd01d0f01,0x0002f108,
+0x0300ebc4,0x0307ebc3,0xdc002b1c,0x7983d114,0xea4379c2,0xf5b32302,
+0xd10d7f80,0x041af108,0x700ef506,0x22044621,0xb12847d0,0x4621a802,
+0xf7ef2204,0xe063fc4f,0x300ef8bd,0x6f00f5b3,0xf895d14c,0x2b00302c,
+0x6829d048,0x78831d08,0x401a7842,0x7901790b,0x78c24013,0x7943401a,
+0x400b4011,0xd1392bff,0x3234f8d6,0x0f04f013,0xf108d034,0x79a30402,
+0xf89879e2,0xea437002,0x093b2002,0xd1292b04,0x2b117a63,0xf7ffd126,
+0x0480f9d1,0xbb080c80,0x030ff007,0x78e0009f,0xea4378a3,0xf7ff2000,
+0xf107f9c5,0x42980308,0x19e3dd30,0x78d8789a,0x2000ea42,0xf9baf7ff,
+0xf8ad2302,0x9300000c,0x023cf8d6,0x1240f8d6,0x7211f506,0xf7ffab03,
+0xb188fc2b,0x3234f8d6,0x0f02f013,0x2302d016,0xf8d69300,0xf8d60264,
+0xf5061268,0xf10d721b,0xf7ff030e,0xb948fc19,0x69696873,0x22006c98,
+0x47984b22,0x6968e03a,0xe00a2118,0xb1526baa,0x7a136968,0x2b028a84,
+0x100ff992,0x3408bf08,0xf7ff1861,0x6829fa87,0x7d8b7dca,0x2302ea43,
+0x030ff023,0x758bb29b,0x75cb0a1b,0x784a6829,0xea43780b,0xf4232302,
+0xb29b6380,0x0a1b700b,0x6968704b,0xf7ff2106,0x696bfb67,0x0178f105,
+0x22066918,0xfbb2f7ef,0x46306bab,0x69699301,0x230069aa,0x9000f8cd,
+0xf95af7fe,0x87ffe8bd,0x1e008225,0x1e003f55,0x00022828,0x1e005c41,
+0x1e00d671,0x6804b51f,0xf894ab04,0xf8432d5e,0x1e0a2d04,0x2201bf18,
+0x91002104,0xf7fe3102,0x4620f947,0xf88cf7f5,0x46c0bd1f,0x6804b5f7,
+0xf8944606,0xf0433de8,0xf8840304,0x6b633de8,0xf894b33b,0xb3233024,
+0x3023f894,0xf500b30b,0x21007022,0x3005221a,0xfb50f7ef,0x7028f506,
+0x22162100,0xf7ef3007,0xf504fb49,0x46205158,0xf00a3108,0x4605f9ad,
+0xf8d4b158,0x462907e8,0xfeb4f7fa,0x46202200,0x46134629,0xf7f59200,
+0x6833f8ed,0xf8d32700,0xf243073c,0x58e113d4,0x47984b36,0x46202102,
+0xfe92f7f3,0x738ef241,0x462056e3,0xbf181bdb,0xf8842301,0xf8843023,
+0xf8847024,0x25017d67,0xf8b4f7f4,0xf8844620,0xf7f55d14,0x4620f835,
+0xffa0f7f3,0x738cf241,0x46205ae1,0xfc6af7f9,0xf7f34620,0xf504fa0b,
+0x311051bc,0xf7f44620,0x4620fce7,0xfc4cf7f3,0x52baf504,0x21034620,
+0xf7f3321c,0x4620f931,0x1dd0f8d4,0xfcc8f7f9,0x3023f894,0xf884b923,
+0x46205d3d,0xfa72f7f3,0x210b4620,0xfe50f7f3,0x321cf896,0xf241b933,
+0x5ae27388,0xfb02230a,0xe011f503,0x7388f241,0x68f35ae5,0xb15b689b,
+0x7364f241,0x51baf504,0x46305ce2,0x463b3125,0x97019700,0xf9d4f7ff,
+0xf8d66833,0xf8d31130,0x462a073c,0x4c022300,0xbdfe47a0,0x1e006221,
+0x1e0061f9,0xf2436802,0x58d313dc,0x2b05b510,0xf8d2d10f,0xf9b11844,
+0xf9b12024,0x189b3026,0x2028f9b1,0xf9b1189b,0x42d3202a,0xf7ffd101,
+0xbd10ff3d,0xf7ffb510,0xbd10ff39,0x6800b570,0x461e4615,0x780b784a,
+0x2202ea43,0x3023f890,0xf890b943,0xb12b3024,0x7f40f412,0x2400bf14,
+0xe0002401,0x7caa2400,0x310a7ceb,0x2203ea42,0x02c7f3c2,0xbfd42a0e,
+0x22012200,0xf8d2f00a,0xb1086030,0xe0012000,0x0001f084,0x46c0bd70,
+0x4ff0e92d,0xf5ad6807,0x92037d27,0xf8979302,0x46823024,0xf8d7b95b,
+0x789b37f8,0x7c3bb93b,0xf243b92b,0x58fb13dc,0xf0002b00,0x980283b1,
+0xf1006900,0xf01b0b06,0x90060f01,0x4883d004,0x41e6f640,0xf98cf7ee,
+0xf89b9906,0x798a3001,0xea429803,0x79032203,0x0481f3c2,0x0303f003,
+0xf0022b02,0xd10705fc,0x4f00f412,0xf1d4d004,0xbf380301,0xe0002300,
+0x2c012300,0xf983fa5f,0x4872d904,0x41f4f640,0xf96af7ee,0xd1302c01,
+0x98022106,0xf918f7ff,0x21109802,0xf914f7ff,0xf1b94606,0xd0040f00,
+0x21049802,0xf90cf7ff,0x99024606,0x302ef897,0x8014f8b1,0xf0002b00,
+0x2d848367,0x2d94d002,0x8362f040,0x46594650,0xaba59a03,0xff6af7ff,
+0x28004604,0x8358f040,0xf8d79500,0x99a507e8,0x46434632,0xf9e8f7fa,
+0x9a02e34f,0xea4f8a93,0xf1a30289,0xb91c060a,0x0318f102,0xdb09429e,
+0xd0032da4,0xd0012d84,0xd1092d94,0x0310f102,0xda05429e,0x3404f8d7,
+0xf8c73301,0xe3333404,0x4b492206,0x014cf107,0x0004f10b,0x21064798,
+0x0401f1d0,0x2400bf38,0xf7ff9802,0x9802f8c1,0xf7ff4631,0xf1a6f8a3,
+0xf10b0018,0x900b0818,0x0f00f1b9,0xf10bd001,0x2d80081c,0x2dd0d02a,
+0x82d5f000,0xf0402d50,0x2c0082fd,0x830cf000,0x37f8f8d7,0xb123789b,
+0x000cf108,0x0124f1a6,0xf243e030,0x58fb13dc,0xf0402b0b,0xf50782ec,
+0xf10b51ba,0x311c0010,0x4b2b2206,0x46044798,0xf0402800,0xf01882e0,
+0xd0440f03,0xf6404825,0xe03e514f,0x0001f018,0xd0049004,0xf6404821,
+0xf7ee5166,0x990bf8c9,0xf340290b,0xf10882dd,0x3e24020c,0x37f8f8d7,
+0x96089207,0xb19b789b,0x46314610,0x4b192200,0x46014798,0x7843b118,
+0xbf882b20,0xf8d72100,0x220007f8,0x47984b14,0xf0402800,0xe2ae82b2,
+0x13dcf243,0x2b0b58fb,0xf507d120,0xf10b51ba,0x311c0010,0x4b0a2206,
+0x46044798,0xf897b9b0,0xb1233024,0xf6404805,0xf7ee517d,0x4650f891,
+0x22014641,0xf7ff4623,0xe292fad5,0x000221e0,0x1e00d671,0x1e003759,
+0x0001f781,0x3024f897,0xf897b303,0xb9ea2023,0x300af898,0x0f02f013,
+0x9807d018,0x4b8f9908,0xb1984798,0xf8977843,0x429a22fc,0xf507d10e,
+0x3002713e,0x4b8a3105,0xb9384798,0x99034638,0x4b889a06,0x28004798,
+0x8267f040,0x3024f897,0xf0002b00,0xf10b8260,0x46480910,0x713df507,
+0x4b7f2206,0x90054798,0xf0402800,0x98048254,0x5000f8da,0x487cb120,
+0x218df640,0xf844f7ee,0x98079903,0x7cca7c8b,0xea439908,0x22032602,
+0x47984b72,0xb1084604,0xb97b7843,0x0324f8b5,0x04c7f3c6,0x42a3b2c3,
+0x4b70d005,0x42a04798,0x9805d001,0x2001e000,0xe008b2c0,0xf8b54b6b,
+0x47980324,0x428378a3,0x2000bf14,0xb1402001,0xf5054648,0x2206713d,
+0x47984b61,0x2301b908,0x2300e000,0x930ab2db,0xf5054648,0x2206713d,
+0x47984b5b,0x4640bb10,0xfea8f7fe,0xf1084606,0xf7fe0004,0xf243fea3,
+0x58ea13a0,0xb91a4604,0x58eb3304,0xe00cb913,0xd3064290,0xd1084294,
+0x13a4f243,0x429e58eb,0x4628d203,0xf7f34641,0xf243faed,0x50ee13a4,
+0x50ec3b04,0x3023f895,0xf0002b00,0x9a0a80ca,0xf0002a00,0xf89581e4,
+0x2b003d67,0x80c5f000,0x9300aba4,0xaba54628,0x9a0b4641,0x47a04c42,
+0x3848f8d5,0x7b1b9009,0xd03e2b00,0x100bf898,0xf3c14628,0xf7f30180,
+0xaea3fd87,0xf50d2300,0x93a27922,0x464093a3,0x4632990b,0x4c37464b,
+0xb92847a0,0x990b4640,0x464b4632,0x47a04c34,0xb3129aa3,0x2b009ba2,
+0xf642dd1f,0x56eb33dd,0x3ffff1b3,0x7813d105,0x32dcf642,0x0340f3c3,
+0x9ba354ab,0xf013781b,0xbf180204,0xf6422201,0x54ea33ca,0x33caf642,
+0x2b0156eb,0x2200d101,0x2201e000,0x33c6f642,0x462854ea,0x010af10b,
+0xfeb6f009,0xb9204604,0xf6404819,0xf7ed21f9,0xf895ff7f,0x2a002d60,
+0x9b09d13d,0xd0312b00,0x3d63f895,0xd1042b02,0x46114628,0xfbc6f7f5,
+0xb11ce031,0x3184f894,0xd0062b0f,0x3d5ef895,0x4628b34b,0xfb98f7f7,
+0xf895e025,0xb1fb3d5e,0xf5052306,0x93005158,0x31084628,0xf7f54613,
+0xe015f9ed,0x1e003759,0x1e00d671,0x0001e0f1,0x000221e0,0x0001e9bd,
+0x0001e00d,0x1e006a51,0x1e006a75,0x3d62f895,0x9809b12b,0x0d62f885,
+0xf7f34628,0xf895fd9f,0xb12b3d65,0xf8852300,0x46283d65,0xfd96f7f3,
+0x3d5cf895,0x9906b1eb,0x4b9f9803,0x99034798,0x790a4603,0x46287949,
+0x2201ea42,0x027ff022,0x9200b2d2,0x22004641,0xf9d2f7f3,0xf8852300,
+0x46283d5c,0xfd7af7f3,0x9a0ae003,0xf0002a00,0xf243811a,0x22001395,
+0x330254fa,0xb1535cfb,0x3d41f897,0xf887b13b,0x46502d41,0x46132103,
+0xf7fd9200,0xf8d7fda1,0x99033848,0x4620681c,0xfc9cf001,0x46204601,
+0xfc70f001,0x23d8f642,0x460150f8,0xf7f34638,0xf8dafe59,0x2b013218,
+0xf8dad106,0xf8933000,0x2b003d67,0x80baf000,0x3048f89a,0xf0002b00,
+0xf8da80a8,0x2b003050,0x80b2f000,0xf8da9b04,0xb1236054,0xf6404873,
+0xf7ed2105,0x9808fed1,0x90a22100,0x3802a80e,0x7210f44f,0xf7ee9c07,
+0xf44fff8d,0xe0147580,0x78229907,0x0304ebc1,0xb2992add,0xf5b5d109,
+0xd20a7f90,0x3b02ab0e,0x1015f823,0xb29d1c6b,0xab0ee003,0xf8233b02,
+0x46201012,0x4b60a9a2,0x46044798,0xd1e32800,0x468346b0,0xf896e053,
+0x78329001,0x0f00f1b9,0xab0ed051,0xf1a32add,0xd0130302,0x0012f833,
+0x4605b908,0x9b07e001,0xf8da181d,0xf8333060,0xb9080012,0xe0024604,
+0x3058f8da,0x360218c4,0xe01746b0,0x0402f108,0x22034621,0x7300f503,
+0xf7fe9807,0xf8daffb3,0x46213060,0x22034605,0x0058f8da,0x7300f503,
+0xffa8f7fe,0x0808f108,0x46464604,0x0f01f019,0xb17dd010,0x42a5b1dc,
+0x786bd008,0x429a7862,0x1ca8d106,0x4b3b1ca1,0xb9084798,0xe0002301,
+0xb1632300,0x0f02f019,0xb90dd003,0xe000b93c,0xf10bb12c,0xf8da0b01,
+0x459b3050,0x9907d3a7,0xf8da9a08,0xf8da0058,0xf7ee4050,0x9808ff2b,
+0xf8caa90e,0x3902005c,0x0060f8da,0x7210f44f,0xff20f7ee,0xd10d45a3,
+0xf8dae00e,0xb1591044,0x2138f8da,0xfbb23201,0xfb01f3f1,0xf8ca2313,
+0xb90b2138,0xe0002001,0xb2c42000,0xa99ce02e,0xf10b3106,0xf7ee000a,
+0x4650fe49,0x9a034659,0xf7ffaba5,0x4604fc3f,0x9a0bb9e8,0x2a0099a5,
+0xf8dadc07,0xf8d22000,0x33013410,0x3410f8c2,0xf898e014,0xf0033000,
+0x2b03037f,0x980bd10d,0x3000f8da,0xf8d39000,0x465a07e8,0xf7fa4643,
+0xe003f8c3,0x2400b90c,0x2401e000,0x21069802,0xfe86f7fe,0x46c0e009,
+0x0001edf9,0x000221e0,0x1e0036f9,0x1e00d671,0x7c3b2400,0xb144b903,
+0x46502300,0x9a039902,0x93019300,0xfc74f7fd,0xf8dae006,0x99023004,
+0x46226c98,0x47984b02,0x7d27f50d,0x8ff0e8bd,0x1e005c41,0x4604b530,
+0xb0856800,0x3024f890,0xd0332b00,0x3848f8d0,0x5134f894,0x3118f8d3,
+0x020af1a3,0xf642b9ad,0x584321d8,0xda254293,0xf8842301,0x56403134,
+0xfbf4f7fd,0xab042204,0x0d04f843,0x92002105,0x462a4620,0xfc48f7fd,
+0xf642e014,0x58c023d8,0xdd0f4290,0xf7fdb240,0xab04fbe1,0xf8432204,
+0x21050d04,0x46209200,0xf7fd2200,0x2300fc35,0x3134f884,0xbd30b005,
+0xb5102901,0xd1146804,0x7185f44f,0xf7f24620,0xf8d4fc05,0x46021844,
+0x0080f8d1,0xd01e4282,0xf5c0bf96,0xebc03380,0x18980002,0x2080f8c1,
+0xb9a1e016,0x7186f501,0xf7f24620,0xf8d4fbef,0x46021844,0x0084f8d1,
+0xd0084282,0xf5c0bf96,0xebc03380,0x18980002,0x2084f8c1,0x2000e000,
+0x46c0bd10,0x4ff0e92d,0x7d0bf5ad,0xf8dd2300,0xf8dd8258,0x4607925c,
+0x93879388,0x0301f002,0x683c6840,0x93004616,0x464b4642,0xa250f8dd,
+0xf7f89d95,0x9007fde1,0xf0402800,0x2d038777,0x2204d90c,0x4651a888,
+0xfe20f7ee,0xd9052d07,0xf10aa887,0x22040104,0xfe18f7ee,0x1e739d88,
+0xbf181e29,0x2b602101,0x8755f200,0xf013e8df,0x07530061,0x07530079,
+0x07530088,0x07530184,0x0753023d,0x0753024f,0x07530753,0x07530753,
+0x0753027e,0x075302b5,0x075302ca,0x07530304,0x07530357,0x0753035d,
+0x07530362,0x0753075e,0x0753036a,0x0753038c,0x07530753,0x075303b6,
+0x075303bb,0x075303cd,0x07530409,0x0753042d,0x07530441,0x0753044c,
+0x07530457,0x07530488,0x04a7049a,0x07530753,0x075304b8,0x0753075e,
+0x050604ba,0x07530753,0x0753051c,0x0753075e,0x07530527,0x075305ae,
+0x07530601,0x0753069c,0x075306b1,0x075306d1,0x075306d9,0x06e406c9,
+0x06ef06e1,0x06fb06e9,0x071d06f5,0x07460700,0x683c0739,0xf8842301,
+0x46203d13,0xfaa8f7f4,0xf8d49700,0x464107f8,0x4b88464a,0xfa64f009,
+0x90072300,0x3d13f884,0xf7f44620,0xf000fa99,0x683cbee5,0x07f8f8d4,
+0x2b007883,0x86def000,0xf0082104,0x4620ffef,0xfa8af7f4,0xbed6f000,
+0x0f4cf1b9,0xd004683e,0x0317f06f,0xf0009307,0xf10dbecd,0x46500acc,
+0x464a4641,0xfd76f7ee,0x37f8f8d6,0xb13d789d,0x46382100,0x2301460a,
+0xfed0f7fe,0xbebaf000,0x13dcf243,0xb18b58f3,0x46294630,0xf8acf7f3,
+0x4c69683b,0x073cf8d3,0x13d4f243,0x47a058f1,0xf8d7683b,0xf8d31130,
+0x47a0073c,0x3012f89a,0x32c6f642,0x0301f1d3,0x2300bf38,0xf89a54b3,
+0x2b0e3011,0xf44fbf94,0xf44f5200,0xf4435280,0x43136330,0x728cf241,
+0xf8da52b3,0x2a012000,0xf241d103,0x54f2738e,0xf241e006,0x54f5738e,
+0x2008f8ba,0x52f23b04,0x88a2ac33,0x7388f241,0x50baf506,0xf10d52f2,
+0x220601d6,0xf7ee301c,0xf506fd21,0xa93850ba,0x30257ce2,0xfd1af7ee,
+0xf2417ce2,0xad517364,0x210054f2,0x46282228,0xfcf0f7ee,0x1d286ba2,
+0x9251a942,0xfd0af7ee,0xe0072000,0x7913180a,0xea6f3001,0xea6f6343,
+0x71136353,0xa9519b51,0xd3f34298,0x50bcf506,0xf0063010,0x6b73f845,
+0xf897b153,0xb13b328c,0x50bcf506,0xf5073025,0x22107124,0xfceaf7ee,
+0xf893ab33,0x24003034,0x321cf887,0x421df887,0x3024f896,0xd0482b00,
+0x46214630,0xfcccf7f2,0x3023f896,0x4d41f886,0x4630b11b,0xf7f54621,
+0xf8b6f841,0xf4033324,0xf5b34370,0xd1065f80,0xf8d7683b,0xf8d31128,
+0x4b1b073c,0xf8b64798,0xb96b3df2,0x1844f8d6,0x2024f9b1,0x3026f9b1,
+0xf9b1189b,0x189b2028,0x202af9b1,0xd01c42d3,0x21016ab3,0x7300f443,
+0x683b62b3,0x32fff04f,0x073cf8d3,0xfbe4f7f1,0x21054630,0xffecf7f2,
+0xf640683b,0xf8d332b8,0xf243073c,0x58f113d4,0x4c064623,0xf00047a0,
+0x4638bde5,0xf90af7ff,0xbde0f000,0x00012091,0x1e006221,0x1e0061f9,
+0xf8d5683d,0x788307f8,0x2104b113,0xfee6f008,0x13dcf243,0xb18b58eb,
+0x4cb3683b,0x073cf8d3,0x13d4f243,0x47a058e9,0xf8d7683b,0xf8d31130,
+0x47a0073c,0x21004628,0xffb6f7f2,0x3024f895,0xd0692b00,0xb3236b6b,
+0x3023f895,0xf507b30b,0x21007022,0x3005221a,0xfc3cf7ee,0x7028f507,
+0x22162100,0xf7ee3007,0xf505fc35,0x46285158,0xf0093108,0x4604fa99,
+0xf8d5b158,0x462107e8,0xffa0f7f9,0x46282200,0x46134621,0xf7f49200,
+0x2100f9d9,0x46282600,0xfc2ef7f2,0x6d67f885,0x46314628,0xffa6f7f4,
+0x3324f8b5,0x4370f403,0x5f80f5b3,0x683bd106,0x1128f8d7,0x073cf8d3,
+0x47984b89,0x4023f895,0xf44fb96c,0x46283100,0xf7f2460a,0x2301fae5,
+0x3023f885,0x4d3df885,0xf7f24628,0x4628fb7f,0xfcbef7f4,0xf5054631,
+0x2290703d,0xfbeef7ee,0x187b4631,0xb10a689a,0x60932300,0x29183104,
+0x2300d1f7,0x321df887,0x3d41f885,0x3024f885,0xf8954628,0xf7f11024,
+0xf505ffdf,0x229050ba,0x2100301c,0xfbd2f7ee,0x738cf241,0x02fff04f,
+0x230052ea,0x3048f887,0xf887653b,0x742b328c,0x3024f895,0xf8d5b93b,
+0x789b37f8,0xf243b91b,0x58eb13dc,0x4863b123,0x718ef240,0xfaf0f7ed,
+0xf7f44628,0xf000f8d5,0x2301bd21,0xf8876838,0xf8903124,0xf8803d5e,
+0x428b1d63,0xf7f4d003,0xf000ff35,0xf7febd13,0xf000fc4d,0x683cbd0f,
+0x3023f894,0xf06fb923,0x93070301,0xbd06f000,0x21004620,0xfefcf7f2,
+0xf8872300,0x4641321d,0xa8812204,0xfbaaf7ee,0x2206f89d,0xf8844620,
+0x21122350,0xf81af7f2,0xf8842101,0xf8bd1d67,0xf2412204,0x462073f8,
+0xf7f252e2,0x4620fb89,0x1d5ef894,0xff02f7f4,0xbce0f000,0x22a8ac09,
+0x46414620,0xf7ee683d,0xf997fb89,0x6863213c,0xd1034293,0xf0436fa3,
+0x67a30302,0xf5056fa3,0x93005154,0x46286f63,0xab0c9301,0xab319302,
+0x23009303,0xab809304,0x31349305,0x686368a2,0xfe56f7fc,0x7823b928,
+0xeb079a80,0xf8c30383,0x78232140,0x93004928,0x48289b80,0x6f629301,
+0x4c2768a3,0xf00047a0,0xf898bca9,0x68383000,0x0483eb07,0x3140f8d4,
+0xf0002b00,0xf500849f,0x799a5154,0xf7fc3134,0x2300fd57,0x3140f8c4,
+0xbc94f000,0xa86d2220,0x683c4641,0xfb3ef7ee,0x2a039a6d,0x848af200,
+0x5c9d4b16,0x00aa9b6f,0x620b19d1,0x19129b71,0x3eb8f8c2,0x3024f894,
+0xf0002b00,0xf894847b,0x2b003023,0x8476f000,0x713df504,0xf0094620,
+0x4601faeb,0xf0002800,0x4638846d,0xf7fe462a,0xf000f8f7,0x46c0bc67,
+0x1e006221,0x000221e0,0x00022834,0x00022285,0x1e004461,0x000221db,
+0x4641683b,0x222ca846,0x6a58f503,0xfb02f7ee,0x0900f04f,0x0a18f10a,
+0x7b90f50d,0xad4646c8,0x0309eb05,0xea4f7c1b,0xf0031249,0xf002030f,
+0x431a0260,0x200af808,0x0000f8bb,0xf8b4f7fe,0xf83b4604,0xf7fe0c08,
+0xeb0af8af,0xea400608,0x70701004,0x300cf8bb,0x095b4445,0x0a1b70b3,
+0x69e870f3,0x0308eb07,0x78726318,0x300af818,0x78f19200,0x4ca978b2,
+0x2201ea42,0x90029201,0x48a7464a,0xf10949a7,0x47a00901,0x0f04f1b9,
+0x0804f108,0x0b02f10b,0x6838d1c1,0xf7f32101,0xf000fd45,0x683abc07,
+0x43e0f243,0xf00052d5,0x683abc01,0x43dcf243,0xe3fb50d5,0xf1b56838,
+0xbf180114,0xf7f22101,0xe3f3ff83,0xa8882204,0xf7ee4641,0x9d88fa9f,
+0xdd032d20,0x031cf06f,0xe3e79307,0xfb052306,0x1d13f203,0xda034599,
+0x020df06f,0xe3dd9207,0xf8c06878,0x2d005114,0x83d8f000,0xf1083052,
+0xf7ee0104,0xe3d1fa83,0x0000f898,0x2803683e,0xf06fd903,0x93070307,
+0xf887e3c8,0xb240013c,0x0380eb06,0x54e4f243,0x2d00591d,0x83bef000,
+0x53e0f243,0xf1b358f3,0xd0073fff,0x0383eb06,0xb11c591c,0xf0238963,
+0x81630302,0xf043896b,0x816b0302,0x53e0f243,0xe3a750f0,0xf642683a,
+0x52d523cc,0x683be3a2,0x32dcf642,0x68385499,0xb1235c83,0xf6422201,
+0x54c233dd,0xf04fe396,0xf64232ff,0x54c233dd,0x220ce390,0x4641a87b,
+0xf7ee683e,0x9b7bfa3b,0x2b059a7d,0xf06fd903,0x92070201,0xeb07e382,
+0x689c0383,0xf06fb91c,0x93070315,0xf102e37a,0xf5b5050c,0xd9047f90,
+0xf6404857,0xf7ed11ae,0x4620f93b,0x462a4641,0xfa1cf7ee,0x2b039b7b,
+0x2b00d002,0x8366f040,0x3024f896,0xf0002b00,0x46308361,0xfe7ef7f2,
+0x46214638,0xf7fe2200,0x4630faa7,0xf8eaf7f2,0x687ae354,0x0301f005,
+0x68387413,0xff00f7f3,0xf8d06838,0x7a1b3844,0xf0002b00,0xf7f28347,
+0x687bf94d,0x2b007c1b,0x8340f040,0xf0139b88,0xd0060f02,0xf5006838,
+0x31345154,0xf82af7f2,0x6838e334,0xf832f7f2,0x4641e330,0x2204a886,
+0xf9dcf7ee,0x65399986,0x6d78b131,0x0104f108,0xf7ee464a,0xe321f9d3,
+0x22406d78,0xf9aef7ee,0xa87ee31c,0x22084641,0xf9c8f7ee,0xf8879b7e,
+0x9b7f3048,0xe311647b,0xb915683a,0x5d11f882,0x2301e002,0x3d11f882,
+0xf7f36838,0xf898feb9,0x68393000,0x3068f887,0x3001f998,0xf8812200,
+0xf2432d6a,0x520b10ea,0xf883683b,0xf8972d6b,0xb9122068,0x2301683a,
+0x2a02e003,0x683ad104,0xf8825a13,0xe00f3d6a,0xd1032a01,0xf883683b,
+0xe0092d6b,0xd0032a03,0x0216f06f,0xe0039207,0x5a13683a,0x3d6bf882,
+0xf7f16838,0xe2d5fec7,0xf243683b,0x549d1297,0x5c8b6839,0x085b3a01,
+0xe2cb548b,0x1e004461,0x000222d3,0x000221c8,0x000221e0,0x0000f898,
+0xfec0f7fc,0xb240683b,0x3848f8d3,0x0124f8c3,0x0118f8c3,0x683ae2b6,
+0x23d8f642,0xf7fc56d0,0xf888febd,0x683b0000,0x3848f8d3,0xf0006818,
+0xf888fd6d,0xe2a50001,0xe2a366fd,0x0f23f1b9,0xf06fd803,0x93070317,
+0xf8d7e29c,0x2b0132c4,0xf06fd103,0x92070201,0xad5be294,0x46282224,
+0xf7ee4641,0xf89df93f,0x2b04318a,0x8287f200,0x222c2100,0xf1072401,
+0xf7ee0074,0xf887f913,0x9a5b4074,0x67ba1d29,0x007cf107,0xf92af7ee,
+0xf107220a,0xf105008d,0xf7ee0114,0x687af923,0x4070f887,0x3024f892,
+0xf0002b00,0xf892826b,0x2b003023,0x8266f000,0xf5006838,0x31085158,
+0xff5af008,0x28004601,0x8259f000,0xf0086838,0xe257ff5b,0x46382100,
+0xfa8ef7ff,0x90852101,0xf7ff4638,0xa985fa89,0x22049084,0xf7ee4640,
+0xf108f8f9,0xa9840004,0xf7ee2204,0xe241f8f3,0xf8c2683a,0x9b885eb8,
+0x3ebcf8c2,0x3ec0f8c2,0x3ec4f8c2,0xf1b9e236,0xd97f0f03,0x3000f898,
+0xd05b2b02,0xd02f2b03,0xd0032b01,0x0316f06f,0xe2279307,0x1002f898,
+0x1d13004a,0xd36d4599,0xd86b2910,0x3001f898,0x1234f8d7,0xf021b923,
+0xf8c70302,0xe0073234,0x0302f041,0x3234f8c7,0x3001f898,0x3268f8c7,
+0x3002f898,0x3264f8c7,0x3002f898,0xf0002b00,0xf5078205,0xf108701b,
+0xf7ee0104,0xe1fdf8af,0x1002f898,0x1d13004a,0xd3434599,0xd8412910,
+0x3001f898,0x1234f8d7,0xf021b923,0xf8c70304,0xe0073234,0x0304f041,
+0x3234f8c7,0x3001f898,0x3240f8c7,0x3002f898,0x323cf8c7,0x3002f898,
+0xf0002b00,0xf50781db,0xf1087011,0xf7ee0104,0xe1d3f885,0x0f07f1b9,
+0xf898d91c,0x2b013002,0xf898d818,0xf8d73001,0xb9131234,0x0301f021,
+0xf041e001,0xf8c70301,0xf8983234,0x2b003002,0x81bcf000,0x700ef507,
+0x0104f108,0xf7ee2204,0xe1b3f865,0x0201f06f,0xe1af9207,0x32c4f8d7,
+0xf0402b02,0xf1b981a0,0xd8030f21,0x0317f06f,0xe1a39307,0x70c9f50d,
+0x22224641,0xf84ef7ee,0x6b5b683b,0xf89db933,0xb11b3192,0x0201f06f,
+0xe1939207,0x1192f89d,0xf8876838,0x6b43128c,0xf0002b00,0x687b818b,
+0x4023f893,0xf507b16c,0x30057022,0xf50db129,0x221a71cd,0xf82ef7ee,
+0x221ae17c,0xf80af7ee,0xf50de178,0x1ca975c9,0xffeef008,0xb9184601,
+0x0315f06f,0xe16d9307,0x228cf897,0x9400b13a,0xf1056838,0x46230208,
+0xfdacf7f3,0x9200e162,0x46136838,0xfda6f7f3,0xf8d7e15c,0x2b0232c4,
+0x814df040,0x0f15f1b9,0xd803683c,0x0217f06f,0xe14f9207,0x328cf897,
+0xf0002b00,0xf50d814b,0x462875eb,0x22164641,0xfff4f7ed,0x3024f894,
+0xf8b4b11b,0xf88d3324,0xf50731d6,0x30077028,0x22164629,0xffe6f7ed,
+0x3023f894,0xd0392b00,0x33e2f642,0xf1b356e3,0xd12b3fff,0x46283502,
+0xfd8ef7fd,0x33e1f642,0xf00056e3,0x42930203,0x4620d003,0xf7f2210b,
+0x4628fa9f,0xfd80f7fd,0x33e3f642,0xf3c05ce3,0x42930280,0x4620d003,
+0xf7f2210d,0x4628fa91,0xfd72f7fd,0x33e5f642,0xf3c05ce3,0x42931200,
+0x4620d017,0xf7f2210f,0xe012fa83,0xbf0c2b01,0x22002203,0x33e1f642,
+0xe00a54e2,0xf7fd1ca8,0xf000fd5b,0x28030003,0x2204d103,0x4304f642,
+0xf89450e2,0x2b003024,0x80e8f000,0x3023f894,0xf0002b00,0xf50480e3,
+0x46205158,0xf0083108,0x4605fdd7,0x4870b940,0x7178f640,0xfea0f7ec,
+0x0301f06f,0xe0d19307,0xf5072300,0x93007222,0x46294620,0xf50d3205,
+0xf7f373eb,0x4620fd0f,0xf0084629,0xe0c1fdc5,0x32c4f8d7,0xf0402b02,
+0x220480b2,0xa988a883,0xff68f7ed,0x320cf89d,0xf2402b02,0x485c80b3,
+0x412df240,0xfe78f7ec,0x683be0ac,0x2b006b5b,0x809df000,0x32c4f8d7,
+0xf0402b02,0xa9888098,0xa8822204,0xff4ef7ed,0xf89d4638,0xf89d1208,
+0xf7fe2209,0x9007f899,0x4620e094,0x1848f8d4,0xf7f1462a,0x9007fa73,
+0x4620e08c,0x462a2102,0x4c482300,0x900747a0,0x4620e084,0x462a2101,
+0x4c442300,0x900747a0,0xf8a4e07c,0xe07956fc,0x36fcf8b4,0x3000f8c8,
+0x4620e074,0xf7f24629,0x9007ffb5,0x4620e06e,0xfaa8f7f1,0x0000f8c8,
+0x4620e068,0xf7f14629,0x9007ff3b,0xf8d4e062,0xf8c83814,0xe05d3000,
+0x2300aa88,0x0220f89d,0x3206a985,0x3214f88d,0x3226f8ad,0xfac0f7f1,
+0xd0482800,0xf8bd2302,0x93002226,0xf89d9b87,0x46201214,0xbf142b00,
+0x23004613,0xfe76f7f1,0xaa88e040,0xf89d2300,0xa9850220,0xf88d3206,
+0xf8ad3214,0xf7f13226,0xb360faa3,0x3214f89d,0x0343eb04,0x2af4f8b3,
+0x3226f8bd,0xbf0c421a,0x23012300,0x3000f8c8,0x4620e024,0xf7f1a988,
+0xb1c0fc85,0xf8bd4620,0xf8bd1220,0xf7f1221c,0xe017fb41,0xa9884620,
+0xfc78f7f1,0x4620b158,0x1220f8bd,0xfc56f7f1,0x0000f8c8,0xf06fe00a,
+0x92070216,0xf06fe006,0x93070301,0xf04fe002,0x920732ff,0xf50d9807,
+0xe8bd7d0b,0x46c08ff0,0x000221e0,0x0001dc01,0x7943b510,0xb10b460c,
+0xe01eb2d8,0xb9097901,0xe01a2001,0xf8931903,0xf04fc01f,0xb9140e01,
+0x3024f890,0xf890e001,0x44633049,0xb25bb24a,0x0f43ebb2,0xfa5fdd02,
+0xe006f08e,0x0e01f10e,0xf1be3009,0xd1ea0f05,0xbd102004,0x468cb530,
+0x461d4614,0x0209f1a2,0xfb0c2309,0xf89d2303,0xb2db100c,0xb911181b,
+0x2024f893,0xf893e001,0x18432048,0xe01ff893,0x0f01f1bc,0x0302eb0e,
+0xd102b2da,0xfe82fa5f,0x1903e009,0xf893b911,0xe0013024,0x3048f893,
+0xfa5f4473,0xb939fe83,0xb9141940,0x006cf890,0xf890e005,0xe002007b,
+0xf8931943,0xf1bc008a,0xd0040f01,0x2b00b243,0x4610dc01,0x1813e008,
+0xb242b2d8,0xf38efa4f,0xbfc8429a,0xf08efa5f,0x46c0bd30,0x41f3e92d,
+0xf881fa5f,0x4170f401,0x5f00f5b1,0x2602bf14,0x79412600,0x46144607,
+0xb2cdb109,0x4631e003,0xff7ef7ff,0x46294605,0x46432200,0x46389600,
+0xff9cf7ff,0xf0000040,0x702000fe,0x70a07060,0x462970e0,0x46432201,
+0x46389600,0xff8ef7ff,0xf0000040,0x712000fe,0x46297160,0x46432202,
+0x46389600,0xff82f7ff,0xf0000040,0x71a000fe,0x462971e0,0x46432203,
+0x46389600,0xff76f7ff,0xf0000040,0x722000fe,0x46297260,0x46432204,
+0x46389600,0xff6af7ff,0xf0000040,0x72a000fe,0x462972e0,0x46432205,
+0x46389600,0xff5ef7ff,0x0040b240,0x46297520,0x46432206,0x46389600,
+0xff54f7ff,0xf0000040,0x756000fe,0x462975a0,0x46432207,0x46389600,
+0xff48f7ff,0xf0000040,0x75e000fe,0x96007620,0x46294638,0x46432208,
+0xff3cf7ff,0xf0000040,0x766000fe,0x76e076a0,0x81fce8bd,0x6805b570,
+0xf8d57101,0xb0923848,0xf0006818,0xf10df979,0x46010603,0x46284632,
+0x47984b0b,0x3848f8d5,0x4620681c,0xf96cf000,0x46024631,0xf0004620,
+0xf8d5f977,0xf04f3848,0x681831ff,0xf0012200,0xb012fb87,0x46c0bd70,
+0x0001e2f1,0x460eb573,0x24004615,0x2200e00c,0xa9014b07,0x55a04798,
+0x1c629801,0xb90b7803,0xe0044610,0x46143001,0xd1f042ac,0xbd7c4628,
+0x1e0037cd,0xf8a36c83,0xf8b313f6,0xb28003fa,0x46c04770,0xf8a36c83,
+0xf8a313f6,0x477023fa,0xf7ffb510,0xbd10fff7,0xf8a36c83,0xf8b313fc,
+0xb28003fe,0x46c04770,0xf8a36c83,0xf8a313fc,0x477023fe,0xf8a36c83,
+0xf8b313fc,0x400a13fe,0x23fef8a3,0x46c04770,0xf8a06c80,0xf8b013fc,
+0xb29b33fe,0xf8a0431a,0x477023fe,0x40136c80,0x13fcf8a0,0x13fef8b0,
+0xea21b289,0x430b0102,0x33fef8a0,0x46c04770,0x0032f990,0x46c04770,
+0x1032f880,0x46c04770,0xf240b510,0xf7ff41fb,0xf3c0ffc3,0xbd102006,
+0xf240b510,0xf64f414c,0xf7ff72fc,0xbd10ffc7,0x460cb570,0x22074605,
+0xf2404623,0xf7ff41ea,0x4628ffd1,0x41ebf240,0x46232207,0xffcaf7ff,
+0x46c0bd70,0xb5702280,0x46044613,0xf240460e,0xf24061d1,0xf7ff65d7,
+0x4620ffbd,0xf44f2207,0xf7ff61da,0x4620ff9d,0x22014629,0xf7ff2300,
+0x2202ffb1,0x46294620,0xf7ff4613,0x2204ffab,0x46294620,0xf7ff4613,
+0x4620ffa5,0x22084629,0xf7ff2300,0x4620ff9f,0x22104629,0xf7ff2300,
+0x4620ff99,0x22204629,0xf7ff2300,0x4620ff93,0x22404629,0xf7ff2300,
+0x4620ff8d,0x22804629,0x23003506,0xff86f7ff,0x46294620,0x46332201,
+0xff80f7ff,0x46200073,0x22024629,0xf7ff3d01,0x2201ff79,0x46294620,
+0xf7ff2300,0x2202ff73,0x46294620,0xf7ff4613,0x2204ff6d,0x46294620,
+0xf5a54613,0xf7ff75ec,0x3d01ff65,0x7200f44f,0x46294620,0xf7ff4613,
+0x4620ff5d,0x46292300,0x7200f44f,0xff56f7ff,0x4b014620,0xbd704798,
+0x1e007459,0x47702000,0xb5106c83,0x3120f8d3,0x46046c43,0x3710f8d3,
+0x0f01f013,0xb1a1d115,0x414cf240,0x02fff24e,0xff28f7ff,0xf44f4620,
+0xf24f6196,0xf7ff72f7,0x4620ff21,0x41f9f240,0x72f7f64f,0xff1af7ff,
+0x4620e02f,0x414df240,0x32fff248,0xff12f7ff,0xf2404620,0xf44f414c,
+0xf7ff52f8,0x4620ff15,0x41b7f240,0x02fff248,0xff04f7ff,0xf2404620,
+0xf64d41b1,0xf7ff72ff,0x4620fefd,0x6196f44f,0x0208f640,0xff00f7ff,
+0xf2404620,0xf64f41fa,0xf7ff72f7,0x4620feef,0x41f9f240,0xf7ff2208,
+0xbd10fef3,0x0030f990,0x46c04770,0x1030f880,0x46c04770,0x47708581,
+0x47708d80,0x46c04770,0x5c5b4b02,0xf99018c0,0x4770016d,0x00023ac4,
+0xf9911841,0x47700175,0xf04fb500,0xeb000e00,0xf81e020e,0xf10e3001,
+0xf1be0e01,0xf8820f04,0xd1f431c9,0x0e00f04f,0x020eeb01,0x030eeb00,
+0xf10e7912,0xf1be0e01,0xf8830f08,0xd1f321cd,0x0e00f04f,0x020eeb01,
+0xb9037d13,0xf10e7913,0xf8800e01,0x300131d5,0x0f08f1be,0xbd00d1f2,
+0x2300b122,0x3d7cf8c0,0x3d80f8a0,0x1d24f8c0,0x47702001,0x69412200,
+0x180b4610,0x3015f993,0x18d23001,0xd1f82808,0xf0f0fb92,0x4770b240,
+0x3258f890,0x4696b510,0x2b006bc4,0xf013d037,0xd0160f01,0x3260f8d0,
+0xd10c428b,0x6a1a6943,0xf883189b,0x6942e015,0x2b076a13,0x2300d101,
+0x3301e000,0xf8906213,0xf0233258,0xf8800301,0xf8903258,0xf0133258,
+0xd00f0f02,0x3264f8d0,0xd105428b,0xf503191b,0x3358532a,0xe004f883,
+0x3258f890,0x0302f023,0x3258f880,0x3258f890,0x0f04f013,0xf023bf1c,
+0xf8800304,0xbd103258,0xb5102100,0x025bf06f,0xf7ff460b,0xbd10ffb9,
+0x69432100,0x310118cb,0x755a2908,0x6943d1f9,0x621a2200,0x2b03691b,
+0xf8d0d10a,0xf0133d8c,0xd0050f02,0xf8d36c43,0x3308370c,0x3d84f8c0,
+0x46c04770,0xf8c02300,0xf8a03d90,0x461a3d94,0x32041883,0x2a202100,
+0x1d98f8c3,0xf8c0d1f8,0x47701db8,0x4604b530,0xb1d9460d,0x1db8f8d0,
+0x3d90f8d0,0x0081eb00,0x2d98f8d0,0x1a9b3101,0x2d96f8b4,0xf8c4195b,
+0x1e533d90,0xf8c4400b,0xf8b43db8,0xf8c03d94,0x429a5d98,0x3301d902,
+0x3d94f8a4,0x0d94f8b4,0xf8d4b118,0xfb933d90,0xbd30f0f0,0x798a7a4b,
+0x4b090899,0x565b2a7f,0xf5a2bfc8,0x18d37280,0x0f2ef113,0x2912dd02,
+0x3307bf88,0x0f9ff990,0x18c03002,0x46c04770,0x000238ee,0x46c04770,
+0x71e0ea80,0x71e0eba1,0xb2d02200,0xf300fa51,0x2b003201,0x4770dcf9,
+0x46c04770,0x2902b570,0x6be34604,0xf8944610,0xd0085258,0xd0162903,
+0xd1192901,0x0301f045,0x2260f8c4,0x18d3e00c,0x532af503,0xf06f3358,
+0x711a025b,0x3258f894,0x0264f8c4,0x0302f043,0x3258f884,0xf045e009,
+0xf8c40304,0xe7f72268,0xf6494805,0xf7ec51dd,0xb925fa0b,0xf8d36c63,
+0xf8c4370c,0xbd70325c,0x0002299e,0x41f0e92d,0x2320461e,0x9c06290e,
+0x70134607,0x2c00d80e,0x2400da01,0x2c13e006,0x4822dd04,0x311ff248,
+0xf9eef7ec,0xf893193b,0xe0373088,0x2500237f,0xea347033,0xbf280424,
+0x462a2404,0x58d34b1a,0xd0084299,0x32143501,0xd1f72d0e,0xf2484815,
+0xf7ec3131,0x2c13f9d5,0x4812dd04,0x3139f248,0xf9cef7ec,0x3d1cf8d7,
+0x5d5bb10b,0xf1a5e016,0x2b15030e,0x193bd803,0x30e2f893,0xf1a57033,
+0x2b050324,0x193bd803,0x310ff893,0xf1a57033,0x2b08032a,0x193bd803,
+0x30b5f893,0xe8bd7033,0x46c081f0,0x0002299e,0x1e00cc2c,0x47ffe92d,
+0x46822500,0x4690460f,0x26ff4699,0xf10d462c,0x4650030f,0xf10d4639,
+0x9400020e,0xff96f7ff,0x300ff89d,0x2b06b123,0x3b06d902,0xe000b2db,
+0x34012300,0xbf2842ab,0x42b3461d,0x461ebf38,0xf88d2c0c,0xd1e2300f,
+0x5000f888,0x6000f889,0x87ffe8bd,0x2b011e4b,0x4605b570,0xd904460c,
+0xf2484816,0xf7ec21d7,0xf895f973,0x25006cdd,0x58e94b13,0xbf8c290e,
+0x5380f44f,0x5300f44f,0x6230f441,0xb2984313,0x2994b11e,0x29a5d901,
+0x2c02d908,0x290ed102,0xe003d90e,0xd1012c01,0xd809290e,0xf5b53514,
+0xd1e17f8c,0xf2484803,0xf7ec21fd,0x20fff94d,0x46c0bd70,0x0002299e,
+0x1e00cc2c,0x4605b570,0x460c4616,0x4807b921,0x71fef646,0xf93cf7ec,
+0x313cf895,0xb1166023,0x324cf895,0x20007033,0x46c0bd70,0x0002299e,
+0xb5106bc3,0x3830f8d3,0xf0134604,0xd0135f00,0xf8d36c83,0xf0133120,
+0xd0040f01,0xf6444807,0xf7ec41ec,0x6ca3f91d,0x0203f04f,0x26b4f8a3,
+0x02fff04f,0x26b8f8a3,0x46c0bd10,0x0002299e,0x47f0e92d,0x41dff240,
+0x4604b08a,0xfc8cf7ff,0x2b7fb2c3,0x3f8cf8a4,0x2007f3c0,0xf5a3bfc4,
+0xf8a47380,0x287f3f8c,0xf5a0bfc8,0xf8a47380,0xbfc80f8e,0x3f8ef8a4,
+0x93052311,0x090cf10d,0x9306332f,0xf2402720,0xf10d4357,0xf04f0a20,
+0xf2400802,0x46204656,0xf2404649,0x4d2b4255,0xa00cf8cd,0x8010f8cd,
+0x96009707,0x9b0847a8,0xd9012b3f,0x93083b80,0xf8c49b08,0x9b093f90,
+0xd9012b3f,0x93093b80,0xf2409b09,0xf8c44134,0x46203f94,0xfc48f7ff,
+0x287fb2c0,0xf5a0bfc4,0xb2987380,0x0f98f884,0x4124f240,0xf7ff4620,
+0xf3c0fc3b,0xf8a42007,0xf2400f9a,0x46204125,0xfc32f7ff,0xb2c0230d,
+0x330f9305,0x0f9cf8a4,0x46209306,0x4357f240,0xf2404649,0xf8cd4255,
+0xf8cda00c,0x97078010,0x47a89600,0xf8c49b08,0x9b093f7c,0x3f80f8c4,
+0xf8c44b05,0x4b053f84,0x3f88f8c4,0xe8bdb00a,0x46c087f0,0x1e00705d,
+0xf1e64d96,0xf1e60018,0x4b61b570,0x4605b08a,0x2600aa08,0x0003e893,
+0x0003e882,0xf240e00d,0x495c4356,0x23149300,0x1103fb02,0xf2404628,
+0xf2404255,0x4c584357,0x4b5847a0,0x681bb2b2,0x429a3601,0x22ffd3eb,
+0x462823a2,0x4116f240,0xfc04f7ff,0x231422ff,0xf44f4628,0xf7ff6184,
+0x4628fbfd,0x41fff240,0x427cf44f,0x53c0f44f,0xfbf4f7ff,0x230b220f,
+0xf44f4628,0xf7ff6185,0x2207fbed,0x46132130,0xf7ff4628,0x2207fbe7,
+0x46282303,0x412ff240,0xfbe0f7ff,0x22382320,0xf2404628,0xf7ff412f,
+0x6c6bfbd9,0x6a5b689b,0x639ef5a3,0x2b013b0d,0x2400d85b,0xf240e00c,
+0x49374356,0x23149300,0x1103fb02,0xf2404628,0xf2404255,0x47b04357,
+0xb2a24b32,0x3401681b,0x4e2d429a,0x2208d3eb,0x46284613,0x41def240,
+0xfbb4f7ff,0xf2404628,0x227f41e1,0x3020f8bd,0xfbacf7ff,0x46289b09,
+0xf240021b,0xf44f41e1,0xf40342fe,0xf7ff437f,0xab08fba1,0x23029303,
+0x330f9304,0x33319305,0x23209306,0xf2409307,0x93004356,0xa9034628,
+0x4255f240,0x47b03301,0xf44f4628,0xf44f6184,0xf44f427f,0xf7ff5390,
+0x4628fb85,0x4124f240,0x427ff44f,0x5300f44f,0xfb7cf7ff,0xf2404628,
+0xf246514b,0xf7ff3233,0x4628fb5b,0xf2402244,0xf7ff414a,0x4628fb65,
+0x414af240,0xf7ff2280,0xb00afb4f,0x46c0bd70,0x000228f8,0x0002311c,
+0x1e006fcd,0x0002381c,0x0002341c,0x00023818,0xb5106982,0x460c2a06,
+0x2301d80c,0xf0134093,0xd1140f35,0x0f40f013,0x2901d004,0xf441d00f,
+0xe00c7400,0xd90a2a02,0xd0082a04,0xd0062a05,0xd0042a06,0xf6414803,
+0xf7eb6103,0x4620ff95,0x46c0bd10,0x0002299e,0x41f0e92d,0x46064615,
+0x461c4688,0xffd4f7ff,0x46304601,0xfaf6f7ff,0xea20402c,0x43220205,
+0x46414630,0xf7ffb292,0xe8bdfaf5,0x46c081f0,0x4604b570,0x4615460e,
+0xffbef7ff,0x46204601,0xfae0f7ff,0x0205ea40,0x46204631,0xf7ffb292,
+0xbd70fae1,0x4604b570,0x4615460e,0xffacf7ff,0x46204601,0xfacef7ff,
+0xea004631,0x46200205,0xfad0f7ff,0x46c0bd70,0x4604b510,0xff9cf7ff,
+0x46204601,0xfabef7ff,0x46c0bd10,0x6bc0b510,0xf7f12102,0xbd10fc73,
+0x4ff0e92d,0xb0854b4f,0xac014680,0xe893460d,0xe8840007,0xf2400007,
+0x46406145,0xfab8f7ff,0x6146f240,0x46400587,0xfab2f7ff,0x61d1f240,
+0x22040586,0x23004640,0xfaccf7ff,0x46132240,0xf2404640,0xf7ff614b,
+0x4640fac5,0x6145f240,0x32fff240,0xf7ff2300,0x4640fabd,0x6146f240,
+0x32fff240,0xf7ff2300,0x4623fab5,0x46294640,0x4c352220,0x0dbf47a0,
+0x46830db6,0xd04a2800,0xf8dd9d02,0xf8dda00c,0xeb0a9004,0x2b010305,
+0xf04fd802,0xe03e0b00,0xf7ff4648,0x4604fcb1,0xf7ff4650,0xf1a4fcad,
+0xb21a0314,0xdb062a00,0xf102fa35,0x3201d041,0xf202fa35,0x4253e006,
+0xf103fa15,0x43d2d039,0xf202fa15,0xf1c3b223,0xfa09031e,0xebc3f303,
+0xf1a00402,0xb21b030b,0x460a2b00,0xfa35db02,0xe002f103,0xfa15425b,
+0xd022f103,0xf1c3b203,0xfa0a031f,0xfb94f303,0xfb93f4f2,0xfb04f0f1,
+0x4b100014,0x05a74798,0x0dbf0586,0x46400db6,0x6145f240,0x32fff240,
+0xf7ff463b,0x4640fa57,0x6146f240,0x32fff240,0xf7ff4633,0x4658fa4f,
+0x2000e000,0xe8bdb005,0x46c08ff0,0x00022af8,0x1e007879,0x0001ebd1,
+0x460db570,0xb1884606,0x3030f890,0xd0042b14,0xd0042b28,0xd0092b0a,
+0x2240e003,0x2280e007,0x4811e005,0x11faf242,0xfe86f7eb,0x21cc2200,
+0x020cf042,0xf7ec4628,0x4c0cfac1,0x47a02002,0x2202210a,0xf7ec4628,
+0x2001fab9,0x462847a0,0x22002102,0xfab2f7ec,0x47a02001,0x4630b11e,
+0x4b032101,0xbd704798,0x0002299e,0x1e005d75,0x0001ea19,0x2b011e4b,
+0x4606b570,0x4614460d,0x4815d904,0x21bcf248,0xfe56f7eb,0x21004620,
+0xf7ec221c,0x2000ff17,0x58c24b10,0x3cddf896,0x2a94b11b,0x2aa5d901,
+0x2d02d910,0x2a0ed102,0xe00bd904,0xd1092d01,0xd9072a0e,0xf00208d1,
+0x22010307,0x5c63409a,0x54634313,0xf5b03014,0xd1e17f8c,0x46c0bd70,
+0x0002299e,0x1e00cc2c,0x2380b530,0x7d09f5ad,0x9384ac03,0x93852318,
+0x33082100,0x7200f44f,0x46204605,0x93879483,0xf7ec9186,0x4622fedf,
+0x2300f44f,0x32086053,0x7300f504,0xd1f7429a,0x4356f240,0x46289300,
+0xf240a983,0x33014255,0x47a04c02,0x7d09f50d,0x46c0bd30,0x1e006fcd,
+0x4ff0e92d,0x7d0bf5ad,0xf8bd461f,0x46893258,0xf89d9303,0xf240325c,
+0x005b61a3,0x46052202,0x4250f89d,0xb254f8bd,0x8260f8bd,0xa264f8bd,
+0xf98cf7ff,0x93862380,0xae052318,0x21009387,0x96853308,0x91889389,
+0xf44fb1bc,0x46307200,0xfe9cf7ec,0xf44f4632,0x60532300,0xf5063208,
+0x429a7300,0xf240d1f7,0x93004356,0xa9854628,0x4255f240,0x4c283301,
+0xf1b947a0,0xd12f0f00,0xf2404628,0x464261a1,0xf946f7ff,0xf2404628,
+0x465261a2,0xf940f7ff,0xf2404628,0x463a617e,0xf93af7ff,0x1c7a2314,
+0xf203fb02,0x46283a01,0x61c8f44f,0xf7ffb292,0x4628f92f,0x617bf240,
+0xf7ff465a,0x4628f929,0x617cf240,0xf7ff9a03,0x4628f923,0x6176f240,
+0x02a1f24b,0xf91cf7ff,0xe0034c0e,0x4b0e200a,0x3c0a4798,0xf2404628,
+0xf7ff6176,0xf010f909,0xd0010f01,0xd1f12c09,0x46282280,0x6176f240,
+0xf7ff4613,0xf50df91f,0xe8bd7d0b,0x46c08ff0,0x1e006fcd,0x000f4249,
+0x1e005d75,0xf241b510,0x5cc30311,0xb92b4604,0xf7f06bc0,0xf04ffa1b,
+0xe0060320,0xf7f06bc0,0x2801fa15,0x2340bf0c,0xf8a42346,0xf04f3f6a,
+0xf8a40300,0xbd103f6c,0x6c00b510,0xf7f02102,0xbd10fcc1,0x4604b510,
+0xfe00f7ff,0xf7ff4620,0x2000fff3,0x46c0bd10,0x29016943,0x7519b507,
+0x2303d906,0x22019300,0x21006bc0,0xe0054613,0x93002303,0x6bc02100,
+0x460b2201,0xfd9af7f0,0x46c0bd0e,0x4b5ab570,0x4605b0a0,0x002cf890,
+0x23074798,0x3319931c,0x2100931e,0xf992186a,0xa8023169,0xf840425b,
+0x31013021,0xf8822904,0xd1f33fe4,0x316df995,0x425ba91a,0xf8859306,
+0x93073fe8,0x3fe9f885,0x316ef995,0x4255f240,0x9308425b,0x3feaf885,
+0xf8859309,0xf9953feb,0x4c44316f,0x930a425b,0x3fecf885,0xf885930b,
+0xf9953fed,0x425b3170,0xf885930c,0x930d3fee,0x3feff885,0x3171f995,
+0x930e425b,0x3ff0f885,0xf885930f,0xf9953ff1,0x425b3172,0xf8859310,
+0x93113ff2,0x3ff3f885,0x3173f995,0x9312425b,0x3ff4f885,0xf8859313,
+0xf9953ff5,0x901a3174,0x9314425b,0x3ff6f885,0x317cf995,0x425b4628,
+0xf8859315,0x23183ff7,0x3328931b,0xf240931d,0x93004356,0x47a03301,
+0x037ff10d,0x2301931a,0x3307931b,0x3378931e,0x2300931d,0x307ff88d,
+0xf240461e,0x93004356,0x33014628,0xf240a91a,0x4c184255,0x9b1d47a0,
+0x931d3301,0x307ff89d,0xb2db3301,0xf88d2b20,0xbf04307f,0x031ff06f,
+0x307ff88d,0x2e403601,0x4628d1e3,0x41a7f240,0xf812f7ff,0x31c8f895,
+0x4298b2c0,0x4628d006,0x41a7f240,0xf7ff22ff,0xe003f829,0x0311f241,
+0xb1135ceb,0xf7ff4628,0xb020ff0d,0x46c0bd70,0x1e00679d,0x1e006fcd,
+0x43f0e92d,0xab08b08b,0x23029303,0x330b9304,0x33139305,0xf9909307,
+0x46079f9e,0x0f0ff119,0x33feda2c,0xf303fb09,0x53a0f503,0x131b331c,
+0xf8803b02,0xae033f9f,0x4556f240,0x9306231a,0xf2404631,0xf2404255,
+0xf8df4357,0x950082a4,0x231c47c0,0x46389306,0xf2404631,0xf2404255,
+0x4ca24357,0x47a09500,0x46389500,0xf2404631,0xf2404255,0x47c04357,
+0xe0942406,0x0f12f1b9,0xf44fdc44,0xfb09738f,0xf5a3f303,0x3b0a6344,
+0xf240131b,0xf8804456,0xad033f9f,0x4e94231a,0x94009306,0xf2404629,
+0xf2404255,0x47b04357,0x9306231c,0x46389400,0xf2404629,0xf2404255,
+0xf8df4357,0x47c08228,0x46389400,0xf2404629,0xf2404255,0x47b04357,
+0x93062336,0x3f84f8d7,0x93084638,0x3f88f8d7,0x93094629,0xf2409400,
+0xf2404255,0x47c04357,0x46389400,0xf2404629,0xf2404255,0x47b04357,
+0xe04c2403,0x0f45f1b9,0xf8dfad03,0x4e7581dc,0x2f7cf8d0,0x1f80f8d0,
+0xf44fdc20,0xfb09738f,0xf5a3f303,0x3b1a531c,0xf880131b,0xf2403f9f,
+0x231c4456,0x92089306,0x94009109,0xf2404629,0xf2404255,0x47b04357,
+0x46389400,0xf2404629,0xf2404255,0x47c04357,0xe0202400,0x738ff44f,
+0xf303fb09,0x438cf5a3,0x131b3b62,0x3f9ff880,0x4456f240,0x9306231c,
+0x91099208,0x46299400,0x4255f240,0x4357f240,0x940047b0,0x46294638,
+0x4255f240,0x4357f240,0xf06f47c0,0xf8b70402,0xb2a53f8c,0x22ff18eb,
+0xf2404638,0xb29b41df,0xff3cf7fe,0x3f8ef8b7,0x427ff44f,0x021b18eb,
+0x46384013,0x41dff240,0xff30f7fe,0x9303ab08,0x3f90f8d7,0x18e34638,
+0xf8d79308,0xa9033f94,0x930918e3,0x93042302,0x9305330f,0x9306332f,
+0x93072320,0x4356f240,0xf2409300,0x33014255,0x47a04c38,0x3f98f997,
+0x18eb22ff,0x4638b29b,0x4134f240,0xff0af7fe,0x030ff109,0xd8082b21,
+0xf8974b32,0x4798002c,0x137bf640,0xd8304298,0xf1a9e00b,0x2b130332,
+0x4b2cd813,0x002cf897,0xf6404798,0x4298137b,0x22ffd805,0xf2404638,
+0x46134134,0x4638e01b,0x4134f240,0x230022ff,0xf1b9e015,0xdd140f45,
+0xf8974b20,0x4798002c,0x137bf640,0xd8054298,0xf2404638,0x22ff4134,
+0xe00423fd,0xf2404638,0x22ff4134,0xf7fe23fe,0xf8b7fecd,0xf44f3f9a,
+0x18eb427f,0x4013021b,0xf2404638,0xf7fe4124,0xf8b7fec1,0x46383f9c,
+0xb29b18eb,0xf24022ff,0xf7fe4125,0x4638feb7,0xf2402244,0xf7fe414a,
+0x4638fea7,0x414af240,0xf7fe2280,0x4638fe91,0xfdd4f7ff,0xe8bdb00b,
+0x46c083f0,0x1e006fcd,0x1e00705d,0x1e00679d,0x41f0e92d,0x460521e0,
+0xf7f06bc0,0xf8b5f96f,0x46074f68,0x0400ebc4,0x41a5f240,0xf7fe4628,
+0x2301fe6b,0x2602f3c0,0xb2a440b3,0xdd0c429c,0x7f68f8a5,0xf2404628,
+0xf7fe41ab,0xf3c0fe5d,0xf8a52006,0xf8a50f6a,0xe8bd6f6c,0x46c081f0,
+0x460db570,0x41a4f240,0xf7fe4604,0xf400fe4d,0xb1554660,0x4f00f5b5,
+0xf5b5d007,0xd0044f60,0xf6444826,0xf7eb5197,0x42aefabb,0xf5b6d045,
+0xd1094f60,0xf7ff4620,0x4620ffbb,0x47984b20,0x4f60f5b5,0xe027d12a,
+0x4f60f5b5,0x4620d126,0xfd78f7ff,0xf2404620,0x227f41a4,0x3f6af8b4,
+0xfe44f7fe,0x3f6cf8b4,0x62e0f44f,0xf403021b,0x4620437f,0x41a5f240,
+0xfe38f7fe,0x6be021e0,0xf90cf7f0,0xf8a44b0f,0x21000f68,0x47984620,
+0x33fff04f,0x3f70f884,0xe0002300,0x46202310,0x61a3f240,0xf7fe2210,
+0x4620fe21,0x41a4f240,0x4260f44f,0xf7fe462b,0xbd70fe19,0x0002299e,
+0x1e0070f9,0x1e007415,0x47f0e92d,0xb094297f,0x46894607,0x4855dd04,
+0x7151f644,0xfa60f7eb,0xf8872307,0xf04f9f70,0x930a0a01,0x33194638,
+0x41a4f240,0xf8cd930c,0xf7fea024,0xf410fdd5,0xd0044f60,0xf44f4638,
+0xf7ff4100,0xf509ff79,0xf10d73a0,0x930b0820,0xf240ab13,0x4e444556,
+0x46389308,0xf2404641,0xf2404255,0x95004357,0xf10947b0,0x930b03c0,
+0x9308ab12,0x46414638,0x4255f240,0x4357f240,0x47b09500,0x46389b12,
+0x02fff003,0x2034f8ad,0x2207f3c3,0x4307f3c3,0x3038f8ad,0xf8ad9b13,
+0xf3c32036,0xf8ad7302,0xa90d303a,0x47984b2f,0x104bf89d,0xf0014638,
+0x4b2d017f,0x99134798,0xf3c14638,0x4b2b5107,0x9b134798,0xf3c34638,
+0x059b2289,0xf8ad0d9b,0x2300303e,0x33109305,0xab0f9307,0x23029303,
+0x334e9304,0x203cf8ad,0xa9039306,0x4255f240,0x4357f240,0x95004c1e,
+0xf50947a0,0x930b73e0,0x9308ab11,0x46414638,0x4255f240,0x4357f240,
+0x47b09500,0xf8bd4638,0x4b161044,0xf5094798,0x930b7310,0x9308ab10,
+0x46414638,0x4255f240,0x4357f240,0x47b09500,0x46389b10,0xb29b00db,
+0x61a6f240,0x72fff641,0xfd68f7fe,0x46514638,0x47984b09,0xe8bdb014,
+0x46c087f0,0x0002299e,0x1e00705d,0x1e0075f9,0x1e00729d,0x1e007321,
+0x1e006fcd,0x1e00739d,0x1e007415,0xf647b570,0x4604757f,0x462a2158,
+0xf7ef6bc0,0x6be0feff,0x462a215a,0xfefaf7ef,0x21706be0,0xf7ef462a,
+0x6be0fef5,0x462a2172,0xfef0f7ef,0x46c0bd70,0x6bc5b5f7,0xf8d54604,
+0x7a1b3844,0xd05d2b00,0x3033f890,0xd0412b00,0x21284628,0xf7ef223f,
+0x4628fedd,0x22102124,0xfed8f7ef,0x21c8f894,0x21264628,0xf7ef0112,
+0x4628fed1,0xf8b42132,0xf7ef2250,0x4626fecb,0x4b212700,0x18fb4628,
+0x4b207919,0x017ff001,0xf9964798,0x4604216d,0x46281da1,0xf7efb292,
+0xf996feb9,0x2302216d,0xf2f3fb92,0x46284252,0x010ef104,0x3701b292,
+0xfeacf7ef,0x2f083601,0x2303d1df,0x93002280,0x21014628,0xf7f04613,
+0xe017f9ad,0x20044601,0x316df991,0x33072208,0xf3f2fb93,0x300100db,
+0x316df881,0x280c3101,0xf994d1f2,0x4628216d,0x214e3207,0x02cff3c2,
+0xfe88f7ef,0x46c0bdfe,0x1e00c60c,0x0001d839,0x4ff0e92d,0x3ffff1b1,
+0x4605b091,0x9202468a,0x8d81d115,0x7340f401,0x7f40f5b3,0xb2cfd101,
+0xf5b3e00e,0xb2c97f00,0x29ddd103,0x1c8fd803,0x2902e006,0x2700d801,
+0x1e8fe002,0x460fe000,0x0b00f04f,0x46a922ff,0x920346a8,0x4639465e,
+0x023ef10d,0x033ff10d,0xf8984628,0x9600413c,0xfef0f7fe,0x21c9f998,
+0x303ff89d,0x0111f10d,0xbfa84293,0xb2db4613,0x303ff88d,0xbf2842a3,
+0x54734623,0x2b0bb2f3,0xf89dd903,0x3b0c301c,0x6c6b5473,0x0801f108,
+0x26fef893,0xfb035c73,0x2264f302,0xf3f2fb93,0x5473b2db,0x36019a03,
+0xbf28429a,0x459b461a,0x469bbf38,0x92032e14,0xf1bad1c5,0xd00a3fff,
+0xb9239b02,0xf2484826,0xf7eb416f,0x9a02f8b9,0xb000f882,0xf505e041,
+0x210070b4,0x222d3001,0xf974f7ec,0xf8859b03,0xf885b031,0x210031c8,
+0x0311f10d,0xf8955cca,0xf8893033,0xb91b2196,0x3031f895,0xe0031a9b,
+0x31c8f895,0x0302ebc3,0x29143101,0x3169f889,0x0901f109,0x4628d1e8,
+0x6192f501,0xfc10f7fe,0x4f60f410,0x4628d012,0x41a4f240,0xfc08f7fe,
+0x46042100,0xf7ff4628,0x4628fdaf,0xfb4ef7ff,0xf4044628,0xf7ff4160,
+0xe002fda7,0xf7ff4628,0xb011fee3,0x8ff0e8bd,0x0002299e,0x4604b570,
+0xb90b461d,0xe000461e,0x29d3681e,0xdc04d038,0xd011291b,0xd0092987,
+0x29dce005,0x29ddd016,0x29d4d018,0xf06fd038,0xe05b0516,0xf7fe4620,
+0xb240fd4d,0xe0546028,0x7c5d6c63,0xf06fb115,0xe04f0504,0xf0104620,
+0xe04bfe55,0xf8936c63,0xe01f36fe,0xd8412e64,0xf8836c63,0x6c6366fe,
+0x2b007c5b,0x6be0d03d,0xffbaf005,0x28004605,0x4620d137,0x31fff04f,
+0xf7ff462a,0xe031ff09,0x691a6963,0xf8d4602a,0xf0133d8c,0xd0280f02,
+0x0380f042,0xe024602b,0xd81f2e03,0x69136962,0xd01e42b3,0x61166c63,
+0xb1d37c5b,0xf7f06be0,0xb126fd69,0x21004620,0xf7fe2201,0x6963fcfd,
+0x46202201,0xf7fe6919,0x2800fcf7,0xbf146be0,0xf06f2500,0xf7ef0502,
+0xe003ffc9,0x051cf06f,0x2500e000,0xbd704628,0xb570297f,0xd9014604,
+0xe01a2005,0x18a32200,0x2a2d3201,0x113cf883,0x2300d1f9,0x324cf884,
+0x7c5b6c63,0x6be0b163,0xff66f005,0xb9384605,0xf04f4620,0x462a31ff,
+0xfeb6f7ff,0xe0004628,0xbd702000,0x6c43b5f0,0x4607b089,0x6898b2cc,
+0x71fff640,0x7272f44f,0xfc7af7eb,0x031ff10d,0x23019302,0x33139303,
+0x23089304,0x6c7b9306,0x6a5b689b,0x639ef5a3,0x2b013b0d,0x4638d869,
+0x61aaf44f,0x72a5f44f,0xfb3ef7fe,0xd8052c04,0xf2404638,0x22ff4134,
+0xe00823fd,0xb2db1f63,0xd8072b03,0xf2404638,0x22ff4134,0xf7fe23fe,
+0xe012fb45,0x0309f1a4,0x2b05b2db,0x22ffd80d,0xf2404638,0x46134134,
+0xfb38f7fe,0xf44f4638,0xf44f61aa,0xf7fe72af,0x2302fb17,0xf88d2c07,
+0xd117301f,0xae023337,0x4556f240,0x46389305,0xf2404631,0xf2404255,
+0x95004357,0x47a04c73,0x9305233a,0x46314638,0x4255f240,0x4357f240,
+0xe0d79500,0xd1172c0b,0xae022306,0x4556f240,0x46389305,0xf2404631,
+0xf2404255,0x95004357,0x47a04c66,0x93052307,0x46314638,0x4255f240,
+0x638af503,0xe0bd9500,0xf0402c0d,0x231980bc,0x4638e08e,0x61aaf44f,
+0x72aff44f,0xfad4f7fe,0xd1222c01,0x25052317,0xf2409305,0x93004356,
+0xa9024638,0x4255f240,0xf88d3301,0x4c53501f,0x463847a0,0x412ff240,
+0x462b2207,0xfad6f7fe,0xf2404638,0x22ff4134,0xf7fe23fd,0x4638facf,
+0x4116f240,0x23a322ff,0x2c02e041,0x2605d114,0xf2402507,0x93004356,
+0xa9024638,0x4255f240,0xf88d3301,0x9505601f,0x47a04c40,0xf2404638,
+0x462a412f,0xe01c4633,0xd1042c03,0x23372505,0x501ff88d,0x2c04e005,
+0x2505d13c,0x501ff88d,0x93052327,0x4356f240,0x46389300,0xf240a902,
+0x33014255,0x47a04c31,0xf2404638,0x2207412f,0xf7fe462b,0x4638fa93,
+0x4134f240,0x23fd22ff,0xfa8cf7fe,0xf2404638,0x22ff4116,0xf7fe23a2,
+0x4638fa85,0xf2402300,0xf44f5152,0xf7fe4278,0x4638fa7d,0x5153f240,
+0x42c0f44f,0x4380f44f,0xfa74f7fe,0xf2404638,0x22ff4117,0xf7fe2378,
+0xe030fa6d,0xd12e2c0d,0xf88d2302,0x3317301f,0xf240ae02,0x4c154556,
+0x46389305,0xf2404631,0xf2404255,0x95004357,0x231a47a0,0x46389305,
+0xf2404631,0xf2404255,0x95004357,0x232647a0,0x46389305,0xf2404631,
+0xf2404255,0x95004357,0x232747a0,0x95009305,0x46314638,0x4255f240,
+0x6386f503,0xb00947a0,0x46c0bdf0,0x1e006fcd,0x4ff0e92d,0x46054b46,
+0x0003e893,0xb08b4b45,0x23149303,0x23089305,0x9307ac08,0x090cf10d,
+0xf2402300,0xf2404a55,0xe8844b57,0x27400003,0xf2409306,0x46284856,
+0x46524649,0x4e3a465b,0xf8cd9704,0x47b08000,0xf6406c6b,0x689871ff,
+0x627ef44f,0xfb14f7eb,0x22074628,0xf2402303,0xf7fe412f,0x22fffa03,
+0x46134628,0x4134f240,0xf9fcf7fe,0x22ff4628,0xf24023a4,0xf7fe4116,
+0x4628f9f5,0x5152f240,0x4278f44f,0x43b0f44f,0xf9ecf7fe,0xf2404628,
+0xf44f5153,0xf44f42c0,0xf7fe5300,0x2364f9e3,0x22ff4628,0x4117f240,
+0xf9dcf7fe,0xf2404628,0xf24f41df,0xf7fe42f1,0x4628f9bb,0x4124f240,
+0x427ff44f,0x53e8f44f,0xf9ccf7fe,0x22ff4628,0xf2402306,0xf7fe4125,
+0x2302f9c5,0x330f9304,0x330f9305,0x93079403,0x46494628,0x465b4652,
+0x444af240,0xf8cd9706,0x47b08000,0x46214628,0xf7fe2244,0x4628f9a5,
+0x22804621,0xf990f7fe,0xe8bdb00b,0x46c08ff0,0x000228c0,0x000233dc,
+0x1e006fcd,0x4ff0e92d,0xb08bb2ca,0x92024607,0xf7fe9101,0x4638faa3,
+0xff5ef7ff,0x461a2300,0xf8dd49b1,0x58508008,0x90094540,0x3301d004,
+0x2b0e321c,0xe219d1f4,0xfb03241c,0x46381404,0x7a2221a2,0xf958f7fe,
+0x463821a4,0xf7fe7a62,0x21a6f953,0x7aa24638,0xf94ef7fe,0x463821a1,
+0xf7fe7ae2,0x21b4f949,0x7b224638,0xf944f7fe,0x463821b6,0xf7fe7b62,
+0x21d0f93f,0x7ba24638,0xf93af7fe,0x463821d3,0xf7fe7be2,0x21d6f935,
+0x7c224638,0xf930f7fe,0x463821d9,0xf7fe7c62,0x21dff92b,0x7ca24638,
+0xf926f7fe,0xf44f4638,0x7d227180,0xf920f7fe,0xf2404638,0x7d621103,
+0xf91af7fe,0x46387da2,0x1115f240,0xf914f7fe,0x4638210f,0xfe3cf7fe,
+0x021ef040,0x210f9006,0xb2924638,0xf908f7fe,0xf8d74b80,0x68605dc8,
+0xbf8c429d,0x0902f04f,0x0901f04f,0x13b4f640,0xd9014298,0xe0000040,
+0x24030080,0xf104fb05,0xf8df4e77,0x2210b1e8,0x91039004,0x0dc8f8d7,
+0x47d84631,0x22104631,0x47d84628,0xf106fb09,0x90052210,0x47d84628,
+0x22104621,0x98049008,0x40a547d8,0x22022179,0x46389007,0xf8d4f7fe,
+0x217c4b68,0xf303fb09,0xf3f3fbb5,0x085b3301,0xfa5f3b01,0x2207fa83,
+0xea4f4638,0xf7fe039a,0xf10afdb3,0x217d0801,0x46382260,0x134aea4f,
+0xfdaaf7fe,0xf308fb09,0xfbb54c5b,0x192cf5f3,0xf4f6fbb4,0xb2e43c01,
+0x4622217b,0xf7fe4638,0x9a08f8ab,0x01159807,0x22104629,0x340147d8,
+0xf604fb08,0xf006fb00,0xdb0a2800,0x46299807,0x47d82210,0xf006fb00,
+0x300113c0,0x1e441040,0x9807e00d,0x22104629,0xea6f47d8,0xfb03030a,
+0xfb00f304,0x13c0f003,0xea6f3001,0xf3c40460,0x46382307,0x220f217d,
+0xfd6ef7fe,0xb2e24638,0xf7fe217e,0x9b04f879,0x4224f24f,0xf202fb03,
+0xfbb29803,0x011ef3f0,0x2313fb00,0xe0020118,0x36019903,0x9a031a40,
+0xd2f94290,0x4d334611,0x47a82214,0x46042170,0x4638221f,0x1307f3c6,
+0xfd4af7fe,0x46380133,0xf44f2171,0xf00372f8,0xf7fe03f0,0xf3c4fd41,
+0x46384307,0x220f2171,0xfd3af7fe,0x2207f3c4,0x21724638,0xf844f7fe,
+0x4638b2e2,0xf7fe2173,0x4638f83f,0x22b9216c,0xf83af7fe,0x216d4638,
+0xf7fe2288,0x4638f835,0x2228216e,0xf830f7fe,0x216f4638,0xf7fe2263,
+0x9807f82b,0xf1002229,0xf5034374,0xfb030390,0x4813f302,0x6296f44f,
+0xf3f2fb93,0xf000fb06,0x6294f5a2,0x1103f242,0x14d8f503,0x190247a8,
+0xfb931e53,0x2b3cf3f4,0x2500bfd4,0xb18d2501,0xfb920063,0xe011f3f3,
+0x00023914,0x018cba80,0x000f4240,0x004c4b40,0x000f423f,0x1e007165,
+0x000203a0,0x0364eb00,0xf3f4fb93,0xb2dc3b08,0x223f2168,0x46384623,
+0xfcdef7fe,0x22402168,0x463801ab,0xfcd8f7fe,0x20649905,0xfb012210,
+0x4b6af000,0x47989907,0xfb031c6b,0xf104f300,0xfb010108,0xf5b1f103,
+0xbfd40f16,0x24012400,0x22061c63,0xf302fb03,0xf0f3fb91,0x3f00f5b0,
+0x2300d501,0xf5a0e005,0x13db33c0,0xf3c33301,0x21690347,0x4638221f,
+0xfcaef7fe,0x22202169,0x46380163,0xfca8f7fe,0x46132204,0x46382181,
+0xfca2f7fe,0x2dc8f8d7,0x429a4b51,0x4638d905,0x22022181,0xfcb0f7fe,
+0x4638e004,0x22fd2181,0xfcbcf7fe,0x218122fe,0xf7fe4638,0x9a05fcb7,
+0x1f34f5b2,0x4638dd05,0x22022175,0xfc9cf7fe,0x4638e004,0x22fd2175,
+0xfca8f7fe,0x211b2203,0x46384613,0xfc78f7fe,0x20014d3e,0x211b47a8,
+0x23002203,0xf7fe4638,0x2300fc6f,0x211a2240,0xf7fe4638,0x2164fc69,
+0xf7fe4638,0xf000fca1,0x216404f8,0x46384622,0xff6ef7fd,0x47a82001,
+0xf0442164,0x46380204,0xff66f7fd,0x47a82001,0xf0442164,0x46380206,
+0xff5ef7fd,0x47a82001,0xf0442164,0x46380207,0xff56f7fd,0x7096f44f,
+0x224047a8,0x46384613,0xf7fe211a,0x4638fc3d,0x9a06210f,0xff48f7fd,
+0x8024f8dd,0x707af44f,0x47984b1c,0x4b1c4638,0x9b024798,0x85fb9801,
+0x9902b29e,0x4370f400,0x5f80f5b3,0xbf084c17,0x7680f446,0xf8341e4d,
+0x46382025,0x6157f240,0x0485eb04,0xff34f7fd,0xf44f4638,0x886261cb,
+0xff2ef7fd,0x6bf84632,0xf7ef21a0,0x6cbaf8fb,0xf388fa1f,0x33f0f8a2,
+0xf8872301,0x22003dc4,0x0311f241,0xb00b54fa,0x8ff0e8bd,0x1e007165,
+0x018cba80,0x1e005d75,0x1e007459,0x1e00d028,0x4ff0e92d,0x4607b0fd,
+0x4615460e,0x22162100,0x70adf50d,0xf7eb9303,0x497afc3d,0xf50d220c,
+0xf7eb70d9,0x4978fc57,0xf50d220c,0xf7eb70d3,0xf50dfc51,0x497570cd,
+0xf7eb220c,0x2300fc4b,0x33109363,0x2d039365,0xe8dfd862,0x0d02f005,
+0x2206091e,0x73adf50d,0x79d9f50d,0xe011920f,0x46992300,0xe025930f,
+0x3f56f897,0x4868b923,0x11b1f245,0xfb48f7ea,0xf5072106,0xf50d6374,
+0x910f79d3,0x0b00f04f,0xf50de04d,0x936173ad,0x93622307,0x93643349,
+0x4356f240,0xf2409300,0x46384255,0x3301a961,0x47a04c5a,0xf50d2206,
+0x920f79d3,0x9300ab7b,0xab7ba97b,0x33013103,0x72f7f50d,0x4c544638,
+0xf89d47a0,0xf89d21ef,0xf04f31ee,0xea430100,0xf8ad2302,0xf04f3168,
+0xf8ad0300,0xf89d316a,0xf89d21ed,0x2d0231ec,0x2302ea43,0x316cf8ad,
+0x116ef8ad,0x73adf50d,0x2206d0c0,0x79d9f50d,0x0b02f04f,0xe00a920f,
+0x0900f04f,0xf245483e,0xf7ea11d3,0x46cbfaf5,0xf8cd464b,0x9361903c,
+0x9362230b,0x93643335,0x4356f240,0x4255f240,0x46389300,0xa9613301,
+0x47a04c36,0x41a4f240,0xf7fd4638,0x2100fe61,0x46389004,0xf808f7ff,
+0xf2404638,0xf7fd413b,0xf3c0fe57,0x900e1080,0x4638b118,0x4b2ca974,
+0xb9664798,0xb9239b0e,0xf8b74638,0xf7ff1f6a,0xac76f857,0x46214638,
+0x47984b25,0x88734626,0x011b8832,0x2302ea43,0x463188b2,0xfa1f4313,
+0x8dbbf883,0xf4032208,0xa8784370,0x5f80f5b3,0x2500bf14,0xf7eb2501,
+0x220afb8d,0x70dff50d,0xf7eb2100,0x4b17fb67,0xf8332200,0x46104015,
+0x4b15e02d,0x3025f853,0x880b18c1,0x45433012,0x884ad124,0x70dff50d,
+0x21e0f8ad,0xf8ad888b,0xf83131e2,0xf8ad2f06,0x220a21e4,0xfb6af7eb,
+0x46c0e017,0x000228d0,0x000228dc,0x000228ec,0x0002299e,0x1e00705d,
+0x1e006f41,0x1e006fcd,0x1e0073d9,0x000228e8,0x000228c8,0x42a23201,
+0x4638d1cf,0x4bb0a978,0x22404798,0x46384613,0x61daf240,0xfe06f7fd,
+0x21184bac,0x47984638,0x413cf240,0xf7fd4638,0xf240fddb,0x900a110b,
+0xf7fe4638,0x214cfafd,0x4638900b,0xfaf8f7fe,0x41f3f240,0x4638900c,
+0xfdcaf7fd,0x22382300,0xf240900d,0x4638413c,0xfde4f7fd,0x22fe214c,
+0xf7fe4638,0x214cfad3,0x46382202,0xfabcf7fe,0x5280f44f,0xf2404638,
+0xf7fd41f3,0xf240fdc9,0x4638413e,0xfdacf7fd,0xf24023af,0x900732ff,
+0x413ef240,0xf7fd4638,0xf240fdc5,0x46381121,0xfac6f7fe,0x900522f2,
+0x1121f240,0xf7fe4638,0x227ffaad,0xf2404638,0xf7fe111f,0xf240faa7,
+0x46386176,0xfd8cf7fd,0x22802300,0xf2409008,0x46386176,0xfda6f7fd,
+0x5103f240,0xf7fd4638,0x2208fd7f,0x90094613,0x5103f240,0xf7fd4638,
+0x4638fd99,0x5103f240,0x23002204,0xfd92f7fd,0x26144b73,0xf50d9361,
+0x230078c2,0x4556f240,0x46389364,0xf2404641,0xf2404255,0x4c6d4357,
+0x95009662,0x4b6c47a0,0x93614638,0x93642320,0xf2404641,0xf2404357,
+0x96624255,0x47a09500,0xf2404638,0xf6404153,0xf7fd22a9,0xf8d7fd51,
+0x2b003dbc,0x80aef040,0x63a6f640,0x3dbcf8c7,0xf44f4638,0x22e06182,
+0xf7fd2380,0x2401fd5b,0x4340f649,0xf303fb04,0x62a6f640,0xf3f2fbb3,
+0x2e40b29e,0x4855d904,0x01e0f245,0xf9a4f7ea,0xd1032c03,0x46a02400,
+0xe0334625,0xb29c1c63,0x4b4fe7e6,0xa9724640,0x9a734798,0xfb022358,
+0x2a00f203,0x13d3db04,0xf3c33301,0xe0060149,0x13db4253,0x105b3301,
+0x0599425b,0x9a720d89,0xfb022358,0x2a00f203,0x13d3db04,0xf3c33301,
+0xe0060249,0x13db4253,0x105b3301,0x059a425b,0xea420d92,0xaa112381,
+0x1c6350ab,0x1807f508,0x3504b29c,0xd1cc42b4,0xf2404638,0x220361d6,
+0xf7fd2300,0x2208fd07,0x46384613,0x61daf240,0xfd00f7fd,0x46132202,
+0xf2404638,0xf7fd61da,0xab11fcf9,0x2315935c,0x330b935e,0x93602500,
+0x4356f240,0x46389300,0xf240a95c,0x33014255,0x955f965d,0x47a04c1f,
+0x46132280,0xf2404638,0xf7fd61da,0x1e73fcdf,0xf2404638,0xf2406142,
+0xb29b32ff,0xfcd6f7fd,0x72fff64f,0x46384613,0x61c8f44f,0xfccef7fd,
+0xf2404638,0xf64f6141,0x462b72ff,0xfcc6f7fd,0xf2404638,0xf6474153,
+0xf7fd72ff,0x4638fcab,0x4153f240,0x4200f44f,0xfcaef7fd,0x024bea4f,
+0x73cdf50d,0x0802eb09,0x0a02eb03,0xe0b046d9,0x1e0075f9,0x1e006ec9,
+0x00023acc,0x1e006fcd,0x00023a9c,0x0002299e,0x1e0071b5,0x0300f04f,
+0x31e8f8ad,0x3000f8b8,0xf3c3a97c,0xeb012403,0xf8330344,0xf8ba1c32,
+0xb1212000,0x03fff002,0x2301ea43,0x4638b29a,0x4152f240,0xfc6cf7fd,
+0xb29b1ee3,0x93062b01,0xf50dd81d,0x936173f5,0x93622301,0x3344ae61,
+0x4556f240,0x46389364,0xf2404631,0xf2404255,0x4c864357,0x47a09500,
+0x9361ab7a,0x46389500,0xf2404631,0xf2404255,0x4c814357,0x463847a0,
+0x4151f240,0x2000f8b8,0xfc42f7fd,0xe0072400,0x4b7c2064,0x34014798,
+0x3389f241,0xd007429c,0xf2404638,0xf7fd4151,0xf410fc2b,0xd1ef4f40,
+0xf2404638,0xf7fd4151,0xf410fc23,0xd17a4f40,0x220bab51,0xad619361,
+0xf2402360,0x92624456,0x46389364,0xf2404629,0xf2404255,0x94004357,
+0xb198f8df,0x234047d8,0x46299364,0x46389400,0x4255f240,0x4357f240,
+0x47b04e61,0x29019906,0xf50dd80e,0x936173f5,0x93622301,0x93643344,
+0x46389400,0xf2404629,0xf2404255,0x47b04357,0x6374f507,0x220b9361,
+0x92622360,0x94009364,0x46294638,0x4255f240,0x4357f240,0xf10947d8,
+0xf1080901,0xf10a0802,0x990f0a02,0xf4ff4589,0x230baf59,0x6874f507,
+0xf240ae61,0x93624556,0x93643355,0x46314638,0x4255f240,0x4357f240,
+0xf8cd4c42,0x95008184,0x230447a0,0x334c9362,0x46389364,0xf2404631,
+0xf2404255,0xf8cd4357,0x95008184,0x47a04c3a,0x330a4643,0x23029361,
+0x33539362,0x95009364,0x46314638,0x4255f240,0x4357f240,0x9a0347a0,
+0x4638b912,0x47984b32,0x46382300,0x5103f240,0xf7fd2208,0x4638fbbb,
+0x111ff240,0xf7fe2280,0x4638f897,0x413ef240,0xf7fd9a07,0x9b05fb95,
+0xb2da4638,0x1121f240,0xfb82f7fd,0xf2404638,0x9a086176,0xfb88f7fd,
+0xf2404638,0x9a095103,0xfb82f7fd,0xf2404638,0x9a0a413c,0xfb7cf7fd,
+0xf2404638,0x9a0b110b,0xfb6af7fd,0x214c4638,0xf7fd9a0c,0x9a0dfb65,
+0xf2404638,0xf7fd41f3,0x4b14fb6b,0x21404638,0x46384798,0x413bf240,
+0x72fbf64f,0xfb66f7fd,0x61daf240,0x22404638,0xf7fd2300,0x990efb73,
+0x4638b119,0x4b0aa974,0x9a044798,0xf4024638,0xf7fe4160,0xb07dfcf1,
+0x8ff0e8bd,0x1e00705d,0x1e006fcd,0x1e005d75,0x0001ec65,0x1e006ec9,
+0x1e0075f9,0x4ff0e92d,0x46072380,0x22e0b097,0x6182f44f,0xfb4ef7fd,
+0x6c7b2400,0x4f57f887,0x370cf8d3,0x4dc4f887,0x3dc0f8c7,0x302cf897,
+0x3f57f887,0xf8d36cbb,0xf0833120,0xf0130301,0x93020301,0x6bf8d102,
+0xfce4f7ef,0x46382280,0x6131f240,0xf7fd4623,0xf44ffb2d,0x46235280,
+0x61daf240,0xf7fd4638,0x4638fb25,0xfe4cf7fd,0x41a4f240,0xf7fd4638,
+0x4621fafb,0x46389003,0xfca2f7fe,0x46384ba6,0x90054798,0xf7fd4638,
+0x2110fb27,0x4ba39004,0x47984638,0xf7ee6bf8,0x2801fc19,0xf04fd10a,
+0xf8ad03ff,0xf04f3040,0xf8ad033c,0xf04f3042,0xe00903ff,0x0307f04f,
+0x3040f8ad,0x033cf04f,0x3042f8ad,0x03f8f04f,0xad102200,0x3044f8ad,
+0x46134638,0xf8ad4629,0xf7ff4046,0xf10dfbbd,0x93000352,0xf10d4638,
+0xf10d0355,0xf10d0157,0x4c8b0256,0xf99d47a0,0x2b003055,0x425bbfb8,
+0xd11c2b0f,0x3052f99d,0xbfb82b00,0x2b0f425b,0xf04fd115,0xf8ad0307,
+0xf04f3040,0xf8ad032d,0xf04f3042,0xf8ad03ba,0x22003044,0x0300f04f,
+0x3046f8ad,0x46294638,0xf7ff4613,0xab12fb8d,0x23029306,0xf10d2410,
+0xf2400918,0x93074856,0x334e2500,0x93094649,0xf8cd940a,0x46388000,
+0x4255f240,0x4357f240,0x95084e6e,0xf10d47b0,0x940a0352,0x24019306,
+0x93092355,0x8000f8cd,0xf2404649,0x95084357,0x46389407,0x4255f240,
+0xb048f8bd,0xa04af8bd,0x230747b0,0x3319930d,0xf8bd930f,0xab139052,
+0x930b940c,0x78a0f44f,0xf240ae0b,0xf8cd4556,0x46388038,0xf2404631,
+0xf2404255,0x4c574357,0x47a09500,0xea4f9b13,0x0d1b528a,0x0d92051b,
+0xea4f431a,0x0d9b538b,0x2283ea42,0x46389213,0xf2404631,0xf2404255,
+0x4c4d4357,0x47a09500,0x0380f108,0xf8cd930e,0x9500904c,0x46314638,
+0x4255f240,0x4357f240,0x0801f108,0xf5b847a0,0xd1c97fe0,0x99054638,
+0x47984b42,0x99044638,0x47984b3c,0x46389b03,0x4160f403,0xfbc4f7fe,
+0x22002101,0x4b3c4638,0x6bf84798,0xfb42f7ee,0x46042802,0x2208d172,
+0x46134638,0x414cf240,0xfa28f7fd,0x46382208,0xf2404613,0xf7fd414d,
+0x4638fa21,0x46234622,0x41f9f240,0xfa1af7fd,0x46224638,0xf2402300,
+0xf7fd41fa,0x2201fa13,0x46134638,0x41f9f240,0xfa0cf7fd,0x22014638,
+0xf2402300,0xf7fd41fa,0x4638fa05,0xf2402300,0xf44f41b1,0xf7fd5200,
+0xf44ff9fd,0x46386200,0xf44f4613,0xf7fd6196,0x4638f9f5,0x41b7f240,
+0x42fef44f,0x5300f44f,0xf9ecf7fd,0x46382208,0xf44f4613,0xf7fd6196,
+0x4638f9e5,0x23002280,0x41e6f240,0xf9def7fd,0x46132240,0xf2404638,
+0xf7fd41e5,0x4638f9d7,0xf44f228c,0xf7fd7192,0x4638f9ab,0x1125f240,
+0xf7fd2200,0xe01bf9a5,0x1e00735d,0x1e00729d,0x1e006f41,0x1e00705d,
+0x1e006fcd,0x1e007321,0x1e0072c5,0x46132220,0xf2404638,0xf7fd414c,
+0x2220f9b5,0xf2404638,0x4613414d,0xf9aef7fd,0x41a4f240,0xf7fd4638,
+0x2100f987,0x46384606,0xfb2ef7fe,0xf2404638,0xf7fd413b,0xf3c0f97d,
+0xb11d1580,0xa9104638,0x47984b80,0x4638217f,0xfb82f7fe,0x497e4638,
+0x47984b7e,0x46132201,0xf2404638,0xf7fd413b,0x2201f989,0x46382300,
+0x413cf240,0xf982f7fd,0x6200f44f,0x46384613,0x414cf240,0xf97af7fd,
+0x5200f44f,0xf2404613,0x4638414d,0xf972f7fd,0x46384c6f,0x227f47a0,
+0x46382300,0x619df44f,0xf968f7fd,0x46382300,0x619df44f,0x42fef44f,
+0xf960f7fd,0x2305227f,0xf2404638,0xf7fd41e9,0x4638f959,0x41e9f240,
+0x42fef44f,0x63a0f44f,0xf950f7fd,0x46132208,0xf2404638,0xf7fd41e7,
+0x2210f949,0x46384613,0x41e7f240,0xf942f7fd,0x23002260,0xf2404638,
+0xf7fd41e7,0x2204f93b,0x46382300,0x41e7f240,0xf934f7fd,0x46132202,
+0xf2404638,0xf7fd41e7,0x4638f92d,0x61daf240,0xf7fd2210,0x2220f91d,
+0x46384613,0x6189f44f,0xf920f7fd,0x4180f44f,0xf7fd4638,0x4638fe31,
+0x463847a0,0xf934f7fd,0xf2404638,0x2208414c,0xf7fd2300,0x4638f90f,
+0x414cf240,0x23002220,0xf908f7fd,0xf2404638,0x220241f9,0xf7fd2300,
+0x4638f901,0x41f9f240,0x23002201,0xf8faf7fd,0x4b34b11d,0xa9104638,
+0x4b33e002,0x46294638,0x46384798,0x4160f406,0xfa76f7fe,0x21004638,
+0x47984b2e,0xf44f4638,0xf44f6196,0x23006200,0xf8e0f7fd,0xf44f4638,
+0x22086196,0xf7fd2300,0x4638f8d9,0x41e5f240,0x23002240,0xf8d2f7fd,
+0xf44f4638,0x22106196,0xf7fd2300,0x4638f8cb,0x413bf240,0x23002201,
+0xf8c4f7fd,0xf2404638,0xf44f414c,0x23006200,0xf8bcf7fd,0x46132280,
+0xf2404638,0xf7fd6131,0xf44ff8b5,0x46135280,0xf2404638,0xf7fd61da,
+0x9b02f8ad,0x6bf8b913,0xfcccf7ee,0xf7ee6bf8,0xf44ff9b5,0x28026182,
+0x2320bf14,0x22e02360,0xf7fd4638,0xb017f89b,0x8ff0e8bd,0x1e0073d9,
+0x001007f0,0x1e00769d,0x1e0072f1,0x1e0075f9,0x1e007415,0x1e007559,
+0xe92d6c83,0xf8d347f0,0xb0863120,0x0301f083,0x0a01f013,0xd1024607,
+0xf7ef6bc0,0xf240fa2b,0x463861da,0xf854f7fd,0x46132240,0xf2404681,
+0x463861da,0xf86ef7fd,0x413ef240,0xf7fd4638,0xf240f847,0x46065103,
+0xf7fd4638,0x2204f841,0x46804613,0x5103f240,0xf7fd4638,0x2300f85b,
+0xf2404638,0xf44f413e,0xf7fd5200,0x220ff853,0x46382300,0x413ef240,
+0xf84cf7fd,0x23b022f0,0xf2404638,0xf7fd413e,0xf44ff845,0xf44f52e0,
+0x463853a0,0x413ef240,0xf83cf7fd,0x4638210d,0xfd3ef7fd,0x413cf240,
+0x46384604,0xf810f7fd,0x23282238,0xf2404605,0x4638413c,0xf82af7fd,
+0x7200f44f,0x46384613,0x5103f240,0xf822f7fd,0x46382300,0x5103f240,
+0x7200f44f,0xf81af7fd,0x46132280,0xf44f4638,0xf7fd7191,0x2240fcdd,
+0x46382300,0x7191f44f,0xfcd6f7fd,0x46382300,0x7191f44f,0xf7fd2220,
+0x220ffccf,0x0302ea04,0xf44f4638,0xf7fd7191,0x4638fcc7,0x7191f44f,
+0x23002210,0xfcc0f7fd,0x4c34ab04,0xf44f9300,0x220071c8,0x4638ab05,
+0xf44f47a0,0x46137200,0xf2404638,0xf7fc5103,0x4638ffe5,0x5103f240,
+0x7200f44f,0xf7fc2300,0x2210ffdd,0x46384613,0x7191f44f,0xfca0f7fd,
+0x9300ab02,0x71c8f44f,0xab032200,0x47a04638,0x9c039b05,0xf2404638,
+0x4632413e,0xf7fc18e4,0x2204ffab,0x0302ea08,0xf2404638,0xf7fc5103,
+0x2238ffbd,0x0302ea05,0xf2404638,0xf7fc413c,0x2240ffb5,0x10644613,
+0xf44f4638,0xf7fd7191,0xb220fc77,0x213df640,0x47984b0f,0xf5001240,
+0xf24440c0,0x30cb5155,0x47984b0c,0x12043080,0x61daf240,0x464a4638,
+0xff7ef7fc,0x0f00f1ba,0x6bf8d102,0xfbb6f7ee,0xf8874620,0xb0064f9e,
+0x87f0e8bd,0x1e007975,0x1e0044d1,0x1e0044a9,0x4ff0e92d,0xb08b6c43,
+0xaa064605,0xf2406898,0xa9076bda,0xf854f7ea,0x46284659,0xff54f7fc,
+0xf2402240,0x4613463e,0x46599005,0xf7fc4628,0x4631ff6d,0xf7fc4628,
+0xf240ff47,0x90045a03,0x46284651,0xff40f7fc,0x90032204,0x46284651,
+0xf7fc4613,0x4628ff5b,0x23004631,0x5200f44f,0xff54f7fc,0x46314628,
+0x230d220f,0xff4ef7fc,0x46314628,0x238022f0,0xff48f7fc,0x493cf240,
+0x46314628,0x52e0f44f,0x5380f44f,0xff3ef7fc,0x46284649,0xff18f7fc,
+0x1821f240,0x23202238,0x46499002,0xf7fc4628,0x4641ff31,0xf7fd4628,
+0x4641fc33,0x220f4607,0x23044628,0xfbf0f7fd,0x7200f44f,0x46514628,
+0xf7fc4613,0x4628ff1f,0x23004651,0x7200f44f,0xff18f7fc,0x9300ab08,
+0xab092128,0x46282200,0x47a04c1c,0x46314628,0xf7fc9a04,0x9c03fef1,
+0xea042204,0x46280302,0xf7fc4651,0x9c02ff03,0xea042238,0x46280302,
+0xf7fc4649,0x4628fefb,0x463a4641,0xfed0f7fc,0x46289a05,0xf7fc4659,
+0xf9bdfed7,0xf2460024,0x4b0b6166,0xf2474798,0x4b0a61f4,0x6c6b4798,
+0x64b1f647,0x24a0eb04,0x68989907,0xf7e99a06,0x1260ff91,0xe8bdb00b,
+0x46c08ff0,0x1e007975,0x1e0044d1,0x1e0044a9,0x4ff0e92d,0x9108b0b9,
+0x9a084614,0x1108f89d,0x46072a01,0xf89d9107,0xd904b10c,0xf2454832,
+0xf7e96170,0x4b31fb19,0x47984638,0x90092101,0x46384b2f,0x4b2f4798,
+0x21014638,0xf2404798,0x463841ea,0xfe8cf7fc,0x41ebf240,0x46389011,
+0xfe86f7fc,0x90122155,0xf7fd4638,0xf44ffba9,0x9013719c,0xf7fd4638,
+0x2105fba3,0x46389014,0xfebef7fc,0x7a23b15c,0x4638b12b,0x1009f994,
+0xf87ef7fe,0x4638e003,0x4b1b4621,0x214c4798,0xf7fd4638,0x21f3fb8d,
+0x4638900c,0xfb88f7fd,0x900d6c7b,0x6a5b689b,0x639ef5a3,0x2b013b0d,
+0x4638d809,0x221821f3,0xf7fd2310,0x4638fb3d,0x220221f3,0x4638e002,
+0x221821f3,0xf7fd4613,0x6bf8fb33,0xff76f7ed,0xd10f2802,0x214c4638,
+0x23202230,0x46c0e00e,0x0002299e,0x1e00735d,0x1e007b0d,0x1e007a89,
+0x1e0075f9,0x214c4638,0x23102230,0xfb18f7fd,0x46382100,0xfe82f7fc,
+0x6131f240,0xf7fc4638,0x2215fe23,0x900a4613,0x6131f240,0xf7fc4638,
+0xf240fe3d,0x463861d6,0xfe16f7fc,0x22032300,0xf240900b,0x463861d6,
+0xfe30f7fc,0x61daf240,0xf7fc4638,0x228ffe09,0xf2409010,0x463861da,
+0xfe1af7fc,0xf04f2607,0xab360801,0x80c4f8cd,0x93309632,0x3009f994,
+0x0920f04f,0x7310f503,0x4a56f240,0xf8cd9333,0xf24090d0,0x46384357,
+0xf240a930,0x4cb34255,0xa000f8cd,0x9a3647a0,0x00d24638,0xf2409236,
+0xb2926171,0xfde4f7fc,0x46382103,0xfb00f7fd,0x900e2121,0xf7fd4638,
+0x2103fafb,0x900f2218,0xf7fc4638,0x2121fdc9,0x4638221e,0xfdc4f7fc,
+0xac1b4ba3,0xcd0f461d,0xe895c40f,0xe884000f,0x2221000f,0xf2404638,
+0xf7fc6189,0x2303fdc1,0x4638221f,0x617af240,0xfdd4f7fc,0xf2404638,
+0xf2416173,0xf7fc7270,0x22c8fdb3,0xf2404638,0xf7fc6179,0x4638fdad,
+0x6174f240,0x4244f240,0xfda6f7fc,0x4638223f,0x6175f240,0xfda0f7fc,
+0xf44f4638,0xf24061ce,0xf7fc6281,0x4638fd99,0x6182f240,0x42d8f640,
+0xfd92f7fc,0xf2404638,0xf24c619b,0xf7fc125c,0x221bfd8b,0xf2404638,
+0xf7fc619c,0x2249fd85,0xf2404638,0xf7fc618c,0x2227fd7f,0xf2404638,
+0xf7fc617f,0x22fffd79,0xf44f4638,0xf7fc61d0,0x4638fd73,0x6181f240,
+0x123ff240,0xfd6cf7fc,0x463822ff,0x6183f240,0xfd66f7fc,0x46384642,
+0x618df240,0xfd60f7fc,0xf2404638,0xf240619d,0xf7fc72ff,0x2200fd59,
+0xf2404638,0xf7fc618a,0x2200fd53,0xf2404638,0xf7fc619f,0x4632fd4d,
+0xf44f4638,0xf7fc61d4,0x2200fd47,0xf2404638,0xf7fc61a4,0x2200fd41,
+0xf2404638,0xf7fc61a5,0x2208fd3b,0xf2404638,0xf7fc619a,0x4638fd35,
+0x6187f240,0xf7fc2260,0x4632fd2f,0xf2404638,0xf7fc6142,0x4638fd29,
+0x6177f240,0xf7fc2200,0x2315fd23,0x44462500,0xab1b932d,0x90bcf8cd,
+0x4638932b,0x4357f240,0xf240a92b,0x962c4255,0xf8cd952e,0x4c45a000,
+0x463847a0,0x617df240,0xf7fc462a,0x4638fd09,0x618bf240,0x7280f44f,
+0xfd02f7fc,0x0904f04f,0x240046a8,0xbfa82e0f,0x4d3b260f,0x94019400,
+0x94039402,0xb2b14638,0x46234622,0x462547a8,0x1c6be003,0x2d05b2dd,
+0x4638d01f,0xfd7cf7ff,0x63aff44f,0xf44f9301,0x21004382,0xf5a39302,
+0x22014381,0x91034604,0x91059304,0x46383316,0x92009908,0xfb48f7fd,
+0xf7ff4638,0xf897fd65,0x429c3fcd,0x4298dbdd,0x9b08dbdb,0xf240bb1b,
+0x463861ba,0xfcbcf7fc,0x61bbf240,0x4638b204,0xfcb6f7fc,0xb2a401a4,
+0x1489f344,0xf404fb04,0x0009f340,0x4300fb00,0x5f00f5b3,0xfa5fda07,
+0x2b04f388,0x0606ebc9,0x3e01d105,0xf5b3e003,0xdb084f80,0xf108444e,
+0xf1b80801,0xd0020f05,0x0959ea4f,0x2500e79d,0x71e6ea26,0x1f74f8c7,
+0x95004638,0x95029501,0xb2899503,0x462b462a,0x47a04c05,0xf7fd4638,
+0xe009fad3,0x1e00705d,0x0002288c,0x1e006fcd,0x0001ecf1,0xd82c2d04,
+0xf7ff4638,0x2301fd11,0xf44f9300,0x930163af,0x4382f44f,0xf5a39302,
+0x22004381,0x93044606,0x23464638,0x92039908,0xf7fd9205,0x4638fadd,
+0xfcfaf7ff,0x3fcdf897,0x429e4604,0x4298db01,0x4bbbda05,0x7096f44f,
+0x1c6b4798,0xf897b2dd,0x429e3fcd,0x429cdbd2,0xf1bbdbd0,0xf0400f01,
+0xf2408103,0x463861ba,0xfc42f7fc,0x61bbf240,0x46389015,0xfc3cf7fc,
+0x64aff44f,0x21009016,0x4382f44f,0xf303fb04,0xf64f139a,0x429a73fe,
+0xf64fbf8c,0xb29474ff,0xb2991c4b,0xd1ef296e,0xf8ada923,0x4608408c,
+0x4382f44f,0xf303fb04,0xf64f139a,0x429a73fe,0xf64fbf8c,0xb29474ff,
+0x4f02f821,0x031ef100,0xd1ed4299,0xf2404638,0xf7fc61b7,0xf04ffc0d,
+0x4606097d,0x0a01f04f,0x0b00f04f,0x905cf8cd,0xf10be0b5,0xfa5f0301,
+0xf1bbfb83,0xf0000f10,0x2600820f,0x2e04e001,0x4638d82a,0xfc90f7ff,
+0x92002201,0x9a169203,0xf44f9915,0x92054382,0x46802200,0x91049302,
+0x46384613,0x94019908,0xfa5ef7fd,0xf7ff4638,0xf897fc7b,0x46053fcd,
+0xdb014598,0xda054298,0xf44f4b7b,0x47987016,0xb2de1c73,0x3fcdf897,
+0xdbd44598,0xdbd2429d,0xf2404638,0xf7fc61b7,0xf410fbc7,0x46064f00,
+0xf1bad02c,0xf0000f00,0xf1a981d3,0xb2da0305,0x429a9b17,0x1e53d101,
+0xf1a2b2da,0xb2db036e,0xd9032b0f,0xf44f2000,0xe01464af,0xeb01a938,
+0xf5a30342,0x881c7398,0xf44fe058,0xfb044382,0x1399f303,0x73fef64f,
+0xbf8c4299,0x74fff64f,0x1c43b28c,0x4290b298,0xe047d1ef,0x5f00f5b0,
+0xf44fd311,0xfb044382,0x139af303,0x73fef64f,0xf109429a,0xbf940301,
+0xf64fb294,0xb2da74ff,0x0a00f04f,0x4638e032,0x01dff10d,0x02def10d,
+0x47984b4e,0x30dff99d,0x005b2202,0xb2dd3301,0x3b01b26b,0xf3f2fb93,
+0x033df1c3,0xe0def89d,0x2100b2d8,0xf44fe00d,0xfb044382,0x139af303,
+0x73fef64f,0xbf8c429a,0x74fff64f,0x1c4bb294,0x4281b299,0xea4fd1ef,
+0xf88d034e,0xeb0930de,0xf88d0300,0xb2da50df,0x905cf8cd,0xf4164691,
+0xf43f4f00,0xf1baaf46,0xf47f0f00,0xe157af42,0x02def10d,0x46384b31,
+0x01dff10d,0x4c304798,0xf44f2100,0x47a07000,0x46832100,0x47a02080,
+0xf1bb4682,0xd1040f00,0xf245482a,0xf7e87175,0xf1baffa7,0xd1040f00,
+0xf2454826,0xf7e87176,0x2300ff9f,0xf8032500,0x3301500a,0xd1f92b80,
+0x20def99d,0xf99d465b,0x463810df,0xa000f8cd,0x47a04c1d,0x61baf240,
+0xf7fc4638,0xf240fb0d,0x901961bb,0xf7fc4638,0x4629fb07,0xf5059018,
+0xf44f65af,0xfb054382,0x139af303,0x73fef64f,0xbf8c429a,0x75fff64f,
+0x1c4bb295,0x2946b299,0x9a07d1ef,0x0346f1a2,0xf44fe07c,0xfb054382,
+0x139af303,0x73fef64f,0xbf8c429a,0x75fff64f,0x2600b295,0x46c0e00c,
+0x1e005d75,0x0001ea45,0x1e00578d,0x0002299e,0x0001ec05,0xd82a2e04,
+0xf7ff4638,0xf44ffb6d,0x22014382,0x93029918,0x92009b19,0x3a019203,
+0x93044680,0x46139105,0x99084638,0xf7fd9501,0x4638f93b,0xfb58f7ff,
+0x3fcdf897,0x45984604,0x4298db01,0x4b99da05,0x7016f44f,0x1c734798,
+0xf897b2de,0x45983fcd,0x429cdbd4,0x4638dbd2,0x01dff10d,0x02def10d,
+0x47984b91,0xf99d4c91,0x465b20de,0x10dff99d,0xa000f8cd,0x47a04638,
+0x20dff99d,0x30def99d,0x32010052,0xf88db2d2,0xb25220df,0x2a00005b,
+0x30def88d,0x2320dd10,0x23189334,0xab369332,0xf2409330,0x92334356,
+0x46389300,0xf240a930,0x33014255,0x47a04c7e,0x30dff99d,0xd0072b7f,
+0x33fff109,0xf983fa1f,0x0f00f1b9,0xaf7df47f,0x2300f44f,0xab359335,
+0x2318932b,0x3308932d,0x932f2201,0x4356f240,0x922e922c,0x46389300,
+0xf240a92b,0x33014255,0x47a04c6e,0xf81a2603,0xf10d3006,0x2b0108ac,
+0x91a8f8df,0xf85bd10c,0x46383026,0xf2409335,0x93004356,0xf2404641,
+0x33014255,0xe014962e,0xf2401eb3,0x932e4556,0x46414638,0x4255f240,
+0x4357f240,0x4c5c9500,0x962e47a0,0x46389500,0xf2404641,0xf2404255,
+0x47c84357,0xb2de1cb3,0xd1d02e81,0x0800f04f,0x4456f240,0x0301f108,
+0x932ead2b,0x46389400,0xf2404629,0xf2404255,0x4e4d4357,0xf10847b0,
+0x932e0303,0x46389400,0xf2404629,0xf2404255,0x47b04357,0x93352300,
+0x80b8f8cd,0x46389400,0xf2404629,0xf2404255,0x4c424357,0x0802f108,
+0xf1b847a0,0xd1d30f7e,0x46596c7b,0xf44f6c98,0x4c3d7200,0x6c7b47a0,
+0x6c984651,0x47a02280,0x21034638,0xf7fc9a0e,0x4638f9e3,0x9a0f2121,
+0xf9def7fc,0x9a114638,0x41eaf240,0xf9e4f7fc,0x9a124638,0x41ebf240,
+0xf9def7fc,0x21554638,0xf7fc9a13,0x4638f9cd,0xf44f9a14,0xf7fc719c,
+0x4638f9c7,0xf2409a0a,0xf7fc6131,0x4638f9cd,0xf2409a0b,0xf7fc61d6,
+0x9b10f9c7,0xf0434638,0xb2920201,0x61daf240,0xf9bef7fc,0x46382101,
+0xfa0cf7fc,0xf7fc4638,0x4638f9ef,0x9a0c214c,0xf9a6f7fc,0x21f34638,
+0xf7fc9a0d,0xf44ff9a1,0x46386200,0xf2402300,0xf7fc414c,0x4638f9bf,
+0x4b122100,0x46384798,0x4b112100,0x46384798,0x4b102100,0x46384798,
+0xf2402300,0x2201413b,0xf9acf7fc,0x99094638,0x47984b0b,0xe8bdb039,
+0x46c08ff0,0x1e005d75,0x0001ea45,0x0001ec05,0x1e00705d,0x1e006fcd,
+0x1e005c15,0x1e007a89,0x1e007b0d,0x1e007559,0x1e007321,0x41ffe92d,
+0x460e4605,0x461c4617,0x238022e0,0x6182f44f,0xf984f7fc,0xf8d36cab,
+0xf0833120,0xf0130301,0xd0020801,0xf7ed6be8,0x68b2fd9d,0x3201b90a,
+0x6be8e00b,0xb29221dc,0xfb28f7ed,0x6be88972,0xf7ed21de,0xf240fb23,
+0x68f31201,0xb1a36be8,0xf7ed21d8,0x6872fb1b,0x00d26be8,0x21da3a7c,
+0xf7edb292,0x68f3fb13,0x93006be8,0x0111f106,0x463b4622,0xfcf4f7f1,
+0xf042e00a,0x21da0408,0xf7ed88b2,0x6be8fb03,0x462221d8,0xfafef7ed,
+0x21dc6be8,0xfc1af7ed,0xf8ad2400,0xe00c000e,0x4b152064,0x21dc4798,
+0xf7ed6be8,0x1c63fc0f,0x2c64b2dc,0x000ef8ad,0xf8bdd003,0x2b00300e,
+0x6be8d1ee,0x220021d8,0xfae0f7ed,0x0f00f1b8,0x6be8d002,0xfad2f7ee,
+0xf7ed6be8,0xf44ffa2f,0x28026182,0x2320bf14,0x22e02360,0xf7fc4628,
+0xe8bdf915,0x46c081ff,0x1e005d75,0x4ff0e92d,0xf5ad2280,0x46077d01,
+0xf2402300,0xf7fc6131,0x2300f905,0x46382280,0x6176f240,0xf8fef7fc,
+0xf8d36cbb,0xf0833120,0xf0130301,0x93040301,0x6bf8d102,0xfaa2f7ee,
+0x463821a5,0x2fd0f8b7,0xf8c6f7fc,0x4638218e,0x2fd2f8b7,0xf8c0f7fc,
+0x463821a2,0x2fd4f8b7,0xf8baf7fc,0x46382194,0x2fd6f8b7,0xf8b4f7fc,
+0x46382193,0x2fd8f8b7,0xf8aef7fc,0x463821a4,0x2fdaf8b7,0xf8a8f7fc,
+0x21a3ac10,0xf8b74638,0xf7fc2fdc,0x2100f8a1,0xf44f4620,0xf7e97280,
+0x2307fde1,0x33199373,0x93752540,0x78e2f50d,0xf2402318,0xf04f4656,
+0x94710980,0x4c689372,0x46389574,0xf2404641,0xf2404255,0x96004357,
+0x957247a0,0x46414638,0x4255f240,0x4357f240,0x91d0f8cd,0x47a09600,
+0x233822ff,0xf2404638,0xf7fc41a7,0x2300f897,0x6131f240,0x4638464a,
+0xf890f7fc,0xf7fc4638,0x22fffebb,0x46382301,0x6195f44f,0xf886f7fc,
+0x2501230a,0x31f6f88d,0x93653328,0x9366231e,0x7310f242,0x226c2400,
+0x46389300,0x73fbf50d,0x9564a964,0xf88d9467,0xf7ff41a0,0xf240fedf,
+0x463841ab,0xf848f7fc,0x2006f3c0,0xf2409005,0x463861da,0x5280f44f,
+0xf7fc4623,0x22e0f85f,0xf44f464b,0x46386182,0xf858f7fc,0xf7fc4638,
+0xf240fb7f,0x463841a4,0xf82ef7fc,0x90024621,0xf7fd4638,0x9b05f9d5,
+0x4f78f8c7,0x9303b2db,0x31edf88d,0x51ecf88d,0x46384b30,0x46294798,
+0x4b2f900c,0x47984638,0x46384b2e,0x47984629,0x41eaf240,0xf7fc4638,
+0xf240f80f,0x900941eb,0xf7fc4638,0x2155f809,0x46389008,0xfd2cf7fc,
+0x719cf44f,0x46389007,0xfd26f7fc,0x90062105,0xf7fc4638,0xf89df841,
+0xb12b31ec,0xf99d4638,0xf7fd11ed,0xe003fa01,0xa9794638,0x47984b1a,
+0x4638214c,0xfd10f7fc,0x900b21f3,0xf7fc4638,0x6c7bfd0b,0x689b900a,
+0xf5a36a5b,0x3b0d639e,0xd8092b01,0x21f34638,0x23102218,0xfcc0f7fc,
+0x21f34638,0xe0022202,0x21f34638,0x46132218,0xfcb6f7fc,0xf7ed6bf8,
+0x2802f8f9,0x4638d10e,0x2230214c,0xe00d2320,0x1e006fcd,0x1e00735d,
+0x1e007b0d,0x1e007a89,0x1e0075f9,0x214c4638,0x23102230,0xfc9cf7fc,
+0x21004638,0xf806f7fc,0x6131f240,0xf7fb4638,0x2215ffa7,0xf2404613,
+0x46836131,0xf7fb4638,0xf240ffc1,0x463861d6,0xff9af7fb,0x22032300,
+0x61d6f240,0x46384682,0xffb4f7fb,0x61daf240,0xf7fb4638,0xf240ff8d,
+0x228f61da,0x46384681,0xff9ef7fb,0x936cab7f,0x936d2301,0x936e3306,
+0x31edf99d,0xf5034638,0x936f7310,0x93702320,0x4356f240,0xa96c9300,
+0xf2403301,0x4c974255,0x9a7f47a0,0x00d24638,0xf240927f,0xb2926171,
+0xff6ef7fb,0x46382103,0xfc8af7fc,0x46062121,0xf7fc4638,0x2103fc85,
+0x46802218,0xf7fb4638,0x4638ff53,0x221e2121,0xff4ef7fb,0x462c2500,
+0xf7fe4638,0xab50ffe9,0x182d50e0,0xf44f4b84,0x34047061,0x2c404798,
+0x2000d1f2,0x4601112a,0x58cbab50,0x42983104,0x4618bfb8,0xbfa8429a,
+0x2940461a,0x1e83d1f4,0x3fcdf887,0xf8872103,0x46382fce,0xf7fb4632,
+0x2121ff27,0x46424638,0xff22f7fb,0xf2404638,0x9a0941ea,0xff28f7fb,
+0xf2404638,0x9a0841eb,0xff22f7fb,0x46382155,0xf7fb9a07,0x4638ff11,
+0x719cf44f,0xf7fb9a06,0x4638ff0b,0x6131f240,0xf7fb465a,0x4638ff11,
+0x61d6f240,0xf7fb4652,0xf049ff0b,0xb2920201,0xf2404638,0xf7fb61da,
+0x2101ff03,0xf7fb4638,0x4638ff51,0xff34f7fb,0x4638214c,0xf7fb9a0b,
+0x21f3feeb,0x9a0a4638,0xfee6f7fb,0x6200f44f,0x46382300,0x414cf240,
+0xff04f7fb,0x46382100,0x47984b50,0x46382100,0x47984b4f,0x46382100,
+0x47984b4e,0x23002201,0xf2404638,0xf7fb413b,0x990cfef1,0x4b4a4638,
+0x4b4a4798,0x47984638,0x41a4f240,0x4638900d,0xfec2f7fb,0x413bf240,
+0x4638900f,0xfebcf7fb,0x1080f3c0,0xb120900e,0xf50d4638,0x4b4071f7,
+0x46384798,0xf834f7fd,0x21004638,0xf858f7fd,0xf88d2301,0x9b0331e2,
+0x2660f64e,0x31e3f88d,0xf04f9b05,0xb2dd0800,0x46b346a9,0x210046c2,
+0x240123db,0x46389300,0xf50d460b,0x940172ed,0xffe2f7fe,0x936cab7f,
+0x936e2318,0x93703308,0x936f335f,0x4356f240,0x9300946d,0x191ba96c,
+0xf2404638,0x4c1f4255,0x9b7f47a0,0x010bf343,0xf64eb911,0xe00a2260,
+0xf3432264,0xfb03330b,0xfb93f302,0xea83f3f1,0xeba272e3,0x42b272e3,
+0xf04fdc02,0xe0060a00,0x0301f10a,0xfa83fa5f,0x0f02f1ba,0xf89dd016,
+0x455a31e3,0xf89dbfdc,0x469351e3,0xb2db3b04,0x0f80f013,0x31e3f88d,
+0xf108d108,0xfa5f0301,0xf1b8f883,0xd0010f04,0xe7ac4616,0xd017454d,
+0x0309ebc5,0xd1112b10,0xe0101d2b,0x1e00705d,0x1e005d75,0x1e007a89,
+0x1e007b0d,0x1e007559,0x1e007321,0x1e00735d,0x1e0073d9,0xb2dd1cab,
+0x2660f64e,0x0800f04f,0x51e3f88d,0x46c146b2,0x23db2100,0x93002401,
+0x460b4638,0x72edf50d,0xf7fe9401,0xab7fff6d,0x2318936c,0x3308936e,
+0x335f9370,0xf240936f,0x946d4356,0xa96c9300,0x4638191b,0x4255f240,
+0x47a04c62,0xf3439b7f,0xb181010b,0xf3432264,0xfb03330b,0xfb93f302,
+0xea83f3f1,0xeba272e3,0xf5b272e3,0xda047ffa,0x51e3f89d,0xf64ee024,
+0x42b22260,0xf04fdc02,0xe0060900,0x0301f109,0xf983fa5f,0x0f02f1b9,
+0xf89dd016,0x455231e3,0xf89dbfbc,0x469251e3,0xb2db3b01,0x0f80f013,
+0x31e3f88d,0xf108d108,0xfa5f0301,0xf1b8f883,0xd0010f05,0xe7a74616,
+0x23db2400,0x46389300,0x46214623,0x72edf50d,0x51e3f88d,0xf7fe9401,
+0x9b0eff13,0x4638b123,0x71f7f50d,0x47984b3c,0x990d4638,0x47984b3b,
+0x46389b0f,0x4160f403,0xff5ef7fc,0xf7fc4638,0x9b02ff33,0xf4034638,
+0xf7fc4160,0x2301ff55,0xf44f4638,0x22ff6195,0xfdc4f7fb,0xb9139b04,
+0xf7ed6bf8,0x6bf8f9e3,0xfeccf7ec,0x280222e0,0x2320bf14,0xf44f2360,
+0x46386182,0xfdb2f7fb,0x46382280,0xf2404613,0xf7fb6131,0xf44ffdab,
+0x46385280,0xf2404613,0xf7fb61da,0xf44ffda3,0x46387200,0xf2404613,
+0xf7fb6131,0xf44ffd9b,0x46387280,0xf2404613,0xf7fb6131,0xf241fd93,
+0x22010311,0x463854fa,0x320521a5,0xfd64f7fb,0x218e4638,0xf7fb220f,
+0x4638fd5f,0x462221a2,0xfd5af7fb,0x21944638,0xf7fb22ff,0x4638fd55,
+0x22ff2193,0xfd50f7fb,0x21a44638,0xf7fb220c,0x4638fd4b,0x226621a3,
+0xfd46f7fb,0x7d01f50d,0x8ff0e8bd,0x1e00705d,0x1e0075f9,0x1e007321,
+0x4b1fb570,0x6bc04604,0x4798460d,0x481db120,0x113af248,0xf9b0f7e8,
+0xf7ec6be0,0xf405fe63,0xf5b34370,0xbf145f80,0x23012302,0xd0044298,
+0xf2484814,0xf7e8113b,0x4620f99f,0xf7fd4629,0x8da1fba1,0xf7fd4620,
+0x4620f9c1,0xf910f7fc,0xf7fc4620,0x6be0f881,0xf912f003,0x6be0b978,
+0xfbf2f7ec,0x4620b958,0xf9d4f7fe,0xf7ff4620,0x4620fc19,0xfc9cf7fe,
+0xf7fc4620,0xbd70fd09,0x0001e955,0x0002299e,0x4ff0e92d,0x46054b51,
+0xf890b093,0x4798002c,0x4d28f895,0xbb244683,0xf7ec6be8,0x2802fe1f,
+0xf04fd108,0xf8ad0304,0xf04f3038,0xf8ad030c,0xe009303a,0x0307f04f,
+0x3038f8ad,0x030ff04f,0x303af8ad,0x030ef04f,0x303cf8ad,0xa90e4628,
+0x403ef8ad,0x47984b3e,0x21964628,0x47984b3d,0xf8b5e1f9,0xb2832f6e,
+0xd104429a,0x46b92700,0x970346b8,0xf640e05c,0x429813c3,0xf995d838,
+0x2b043f9e,0xf9b5dc0c,0xf9b59066,0xf9b58068,0xf895706a,0xf8952f61,
+0xf8953f62,0xe01a1f63,0xdc0c2b36,0x9060f9b5,0x8062f9b5,0x7064f9b5,
+0x2f5ef895,0x3f5ff895,0x1f60f895,0xf9b5e00b,0xf9b5906c,0xf9b5806e,
+0xf8957070,0xf8952f64,0xf8953f65,0xf4421f66,0xea425200,0xea421203,
+0x46282281,0x413ef240,0xf7fbb292,0xe01bfc8d,0x43c8f241,0xd8064298,
+0x9072f9b5,0x8074f9b5,0x7076f9b5,0xf241e010,0x42986344,0xf9b5d806,
+0xf9b59078,0xf9b5807a,0xe005707c,0x907ef9b5,0x8080f9b5,0x7082f9b5,
+0xf8a52301,0x9303bf6e,0x46284b09,0x23074798,0x3319930b,0xab10930d,
+0x23019309,0x3b01930a,0xe016930c,0x1e00679d,0x1e0075f9,0x1e007321,
+0x1e0070f9,0x4356f240,0x46289300,0xa9093301,0x4255f240,0x47a04cbb,
+0x33019b0c,0x9b10930c,0x93103301,0x2b3f9b10,0x22ffd9ec,0x46284613,
+0x41a5f240,0xfc56f7fb,0xf2404628,0xf44f41a5,0xf44f42e0,0xf7fb43a0,
+0x2300fc4d,0xf2404628,0xf44f41a5,0xf7fb62e0,0x223ffc45,0x4628231f,
+0x41a6f240,0xfc3ef7fb,0x23002201,0xf2404628,0xf7fb5103,0x2204fc37,
+0x46284613,0x5103f240,0xfc30f7fb,0x46132210,0xf2404628,0xf7fb5103,
+0xf240fc29,0x46281121,0xf92af7fc,0x02f3f000,0x1121f240,0xf0424628,
+0xf7fb0201,0x214cfbf5,0x46282202,0xf8f8f7fc,0xf2404628,0xf44f41f3,
+0xf7fb5280,0x2251fc05,0xf44f4628,0xf7fb718a,0x214cfbe3,0x23002201,
+0xf7fc4628,0x2238f8cd,0x46282300,0x413cf240,0xfbfcf7fb,0x4200f44f,
+0x46284613,0x41a6f240,0xfbf4f7fb,0x46282300,0x6195f44f,0x427ff44f,
+0xfbecf7fb,0x46282201,0x6195f44f,0xfbccf7fb,0x2300227f,0xf2404628,
+0xf7fb41a4,0x2300fbdf,0xf2404628,0xf44f41a5,0xf7fb62e0,0xf44ffbd7,
+0xf2404260,0xf44f41a4,0x46284300,0xfbcef7fb,0xf7fb4628,0x2101fef5,
+0x4b6d4628,0xf44f4798,0x46135280,0xf2404628,0xf7fb414c,0xae04fbbf,
+0x46282300,0x414df240,0x4280f44f,0xfbb6f7fb,0x46302214,0x6cac4963,
+0xf8f0f7e9,0xf8d36cab,0xf0133120,0xd0040f01,0xf646485f,0xf7e731f3,
+0x4633ffff,0x21006c28,0xf7ed2214,0xf04fffcf,0xf8a40300,0xf44f3568,
+0xf8a47380,0xf04f37c0,0xf8a40341,0xf641350c,0xf8a42302,0xf04f3514,
+0xf8a40300,0xf8a43508,0xf8a4350a,0xf04f354c,0xf8a40314,0xf640356a,
+0xf8a40326,0xf04f3568,0xf8a40300,0x26003500,0x03d0f04f,0x3502f8a4,
+0x200ae002,0x47984b45,0x2e1f3601,0xf8b4d009,0xf013350e,0xd1f40f80,
+0x200ae003,0x47984b3f,0x2600e000,0x2e0b3601,0xf8b4d009,0xf413350e,
+0xd0f26f80,0x200ae003,0x47984b38,0x2600e000,0x2e0b3601,0xf8b4d004,
+0xf4133690,0xd1f27f80,0xf2404628,0xf7fb41ab,0xf410fb27,0xd0094f00,
+0x03fff000,0x46283b20,0x41a6f240,0xb29b223f,0xfb3cf7fb,0x46282400,
+0x414cf240,0x5280f44f,0xf7fb2300,0xf44ffb33,0xf8a57340,0x46284f6e,
+0x6195f44f,0x427ff44f,0xfb28f7fb,0x9309ab11,0x930a2301,0x2389ea4f,
+0x1a88eb07,0x0947ea4f,0xf503940c,0x46a04600,0x3780f44f,0xf2f7fb96,
+0x4356f240,0x93009211,0x33014628,0xf240a909,0x4c0e4255,0x9b0c47a0,
+0x0801f108,0xf1b83301,0x930c0f40,0x444f4456,0x9b03d1e8,0xf241b91b,
+0x5ceb0311,0x4628b113,0xf9e4f7fc,0xf44f4628,0xf7fc4160,0xb013fc7d,
+0x8ff0e8bd,0x1e006fcd,0x1e007415,0x000228ac,0x0002299e,0x1e005d75,
+0x4ff0e92d,0xb0892300,0x460c4616,0x8050f8dd,0x46829306,0x9058f8dd,
+0xfbecf7ec,0x0301f006,0x46059300,0x6c404621,0x9b154642,0xffc4f7f2,
+0x28004607,0x81a4f040,0x2b039b13,0xa806d904,0x22049912,0xf802f7e9,
+0x9a062e7e,0xd80bd063,0xd04f2e28,0x2e01d805,0xd31cd033,0xd03c2e10,
+0x2e29e016,0xe013d04c,0xf0002ebc,0xd8068155,0xd0592e81,0xd05a2e82,
+0xd04e2e80,0x2ec4e008,0x8173f000,0xf0002ec5,0x2ebe8160,0x8147f000,
+0x0716f06f,0x4628e174,0xf10da905,0xf7fb021f,0x4607fda9,0xf0402800,
+0xf89d816b,0x9a05301f,0xbf142b00,0x4300f04f,0x43132300,0x3000f8c8,
+0xf022e15e,0x29ff4100,0x21ffbfa8,0xb2c94628,0xf7fc0fd2,0x4607fedd,
+0xac02e152,0x220c4639,0xf7e84620,0x2301ff93,0x46214640,0x9302220c,
+0xe1409703,0xf7fb4628,0xf8c8fa77,0xe13f0000,0x2b011c53,0x2a01d902,
+0x8138f040,0x46114628,0xfa6ef7fb,0x9706e134,0xf995e002,0x93063dea,
+0xa9064640,0xe1262204,0x2deaf885,0x6be8e128,0xfbfcf7ed,0x413ef240,
+0xf7fb4628,0xf240fa25,0x46825103,0xf7fb4628,0x2204fa1f,0xf2404613,
+0x46835103,0xf7fb4628,0x4628fa39,0x413ef240,0x5200f44f,0xf7fb463b,
+0x220ffa31,0x46282308,0x413ef240,0xfa2af7fb,0x23a022f0,0xf2404628,
+0xf7fb413e,0xf44ffa23,0xf44f52e0,0x46286340,0x413ef240,0xfa1af7fb,
+0x413cf240,0xf7fb4628,0x2238f9f3,0xf2402320,0x4681413c,0xf7fb4628,
+0x220ffa0d,0x46282304,0x1121f240,0xfed0f7fb,0x7200f44f,0x46284613,
+0x5103f240,0xf9fef7fb,0x7200f44f,0x4628463b,0x5103f240,0xf9f6f7fb,
+0x413bf240,0xf7fb4628,0x2204f9cf,0xf2404613,0x4606413b,0xf7fb4628,
+0x2204f9e9,0xf2404628,0x463b413c,0xf9e2f7fb,0x7200f44f,0x46284613,
+0x5103f240,0xf9daf7fb,0xf2404628,0xf44f5103,0x463b7200,0xf9d2f7fb,
+0x46282328,0x5105f240,0x72fff64f,0xf9caf7fb,0xf2404628,0xf64f5104,
+0x463b72ff,0xf9c2f7fb,0x46282220,0x5103f240,0xf7fb4613,0x463cf9bb,
+0x4b4b2001,0x46284798,0x5103f240,0xf990f7fb,0x0f20f010,0x2000bf14,
+0x34012001,0xd0022c02,0xd0ed2800,0xb908e002,0xe0184604,0x5106f240,
+0xf7fb4628,0xf240f97d,0x46045107,0xf7fb4628,0x0424f977,0xf44f0c24,
+0xeb0461a1,0x46284400,0xf96ef7fb,0xf2404628,0xf7fb5109,0x2204f969,
+0x0302ea06,0xf2404628,0xf7fb413b,0x4628f983,0x413ef240,0xf7fb4652,
+0x2204f963,0x0302ea0b,0xf2404628,0xf7fb5103,0x2238f975,0x0302ea09,
+0xf2404628,0xf7fb413c,0xb220f96d,0x6166f246,0x47984b24,0x61f4f247,
+0x47984b23,0x6be81284,0xfd84f7ec,0x44fcf504,0x126434b1,0xe7039406,
+0x33fff04f,0xf895e027,0x4639002c,0x4c1b463a,0x42835913,0x2314d104,
+0x4303fb01,0xe0046858,0x32143101,0xd1f2290e,0x4b152000,0x90064798,
+0x2a08e012,0x1e53dc16,0xd0024213,0x0701f06f,0xf8dae012,0xf8a53848,
+0x68182d96,0xfaf6f7fb,0xf8b5e00a,0x93063d96,0xa9064640,0xf7e8464a,
+0xe001fe69,0x071cf06f,0xb0094638,0x8ff0e8bd,0x1e005d75,0x1e0044d1,
+0x1e0044a9,0x1e00cc2c,0x1e007ca1,0x4605b570,0xfa28f7ec,0x3054f890,
+0x2b004604,0x4628d052,0xffcef7eb,0x2d78f8d4,0x6c63b13a,0x370cf8d3,
+0x69621a9b,0x42936852,0x4628d30c,0xfcdcf002,0x4620b940,0xf9aaf7fb,
+0x6c63b120,0x370cf8d3,0x3d78f8c4,0x69626c63,0x170cf8d3,0x3dc4f894,
+0xf8d4b933,0x68d23dc0,0x0301ebc3,0xd3074293,0xf0024628,0xb918fcc1,
+0xf7eb4628,0xb1b0ffa1,0xf0026be0,0xb918fcb9,0xf7eb6be0,0xb190ff99,
+0x3258f894,0x6c63b1b3,0x225cf8d4,0x370cf8d3,0x2b051a9b,0x2300d90e,
+0x3258f884,0x4628e00a,0xff88f7eb,0x4620e7e4,0xf8942101,0xf7fb202c,
+0xe7e5fae1,0x46c0bd70,0x47f0e92d,0x46056803,0x78db18c3,0xf0034691,
+0xf44f007f,0xfb0073fa,0x468af203,0x19ab2600,0x2b007d5b,0x00f3d07f,
+0xf04fb2d9,0x29200800,0x2907d879,0x6300f041,0x2920d901,0xf443d102,
+0xe0016300,0x53c0f443,0x0f00f1ba,0xf443d002,0xe0016c80,0x7c00f443,
+0x0f00f1b9,0xf44cd001,0xf01c0c00,0xd0266700,0x0f00f41c,0x63e0f40c,
+0x0a1bd010,0x2b013b04,0xf00c4c2e,0xd8040e7f,0xfb0e2314,0x68db4303,
+0x2314e017,0x4303fb0e,0xe012689b,0x3b040a1b,0x4c262b01,0x0e7ff00c,
+0x2314d804,0x4303fb0e,0xe006685b,0xfb0e2314,0x591bf303,0xf00ce001,
+0x4293037f,0xb337d92a,0x0f00f41c,0x63e0f40c,0x0a1bd010,0x2b013b04,
+0xf00c4c18,0xd8040e7f,0xfb0e2314,0x68da4303,0x2314e017,0x4303fb0e,
+0xe012689a,0x3b040a1b,0x4c102b01,0x0e7ff00c,0x2314d804,0x4303fb0e,
+0xe006685a,0xfb0e2314,0x591af303,0xf00ce001,0x4660027f,0x0301f108,
+0xf883fa5f,0xf1b81c4b,0xb2d90f08,0x3601d183,0xf47f2e10,0xe8bdaf78,
+0x46c087f0,0x1e00c744,0x29287e43,0xf043bf0c,0xf0230301,0x76430301,
+0x46c04770,0xb5104603,0x22284608,0xf7e84619,0xbd10fd4d,0x43f0e92d,
+0x4605b09d,0x46914688,0x0003f10d,0x226d2100,0xfd20f7e8,0x2000682c,
+0x182be00d,0xf0017919,0x2a6c027f,0x4b23d806,0xb11b5c9b,0x18b3ae1c,
+0x1c6df803,0x42a03001,0x2600d1ef,0xe0144637,0x0307eb08,0xf003791b,
+0x2c6c047f,0x481ad904,0x119bf240,0xfc38f7e7,0x1913aa1c,0x2c6df813,
+0x19abb112,0x3601711a,0xf8d83701,0x429f3000,0x602ed3e6,0x20004629,
+0x0300eb08,0x7d5b7d4a,0x401a3001,0x3101754a,0xd1f52810,0xb1596829,
+0x0f00f1b9,0x2200d00a,0xf99318ab,0x2b003004,0x3201db04,0xd1f7428a,
+0xe0002000,0xb01d2001,0x83f0e8bd,0x1e00c634,0x00022b1b,0x43f0e92d,
+0x4607b08d,0x505cf89d,0x4b174816,0x6058f89d,0xbf082d14,0xac024618,
+0xbf142900,0x46804688,0xf89d4621,0xf7ff9050,0xb14eff81,0xd1072d14,
+0x23004622,0x32017593,0x030ff104,0xd1f8429a,0xa8029b15,0x46399300,
+0x96012200,0x4c07464b,0x463847a0,0x22004641,0xff70f7ff,0xe8bdb00d,
+0x46c083f0,0x1e00c9d8,0x1e00c594,0x0001ed85,0xb09db530,0x460d4604,
+0x0003f10d,0x226d2100,0xfc88f7e8,0xe0112000,0x79191823,0x027ff001,
+0xd80a2a6c,0x5c9b4b1f,0xab1cb13b,0xf812189a,0xea413c6d,0xf8020303,
+0x30013c6d,0x42986823,0x2000d3ea,0x182be011,0xf0017919,0x2a6c027f,
+0x4b14d80a,0xb13b5c9b,0x189aab1c,0x3c6df812,0x0303ea41,0x3c6df802,
+0x682b3001,0xd3ea4298,0x60232300,0xf10d4618,0x5cc10303,0x6823b161,
+0x330118e2,0x71112b10,0xd9056023,0xf44f4806,0xf7e771bc,0xe002fb81,
+0x286d3001,0xb01dd1eb,0x46c0bd30,0x1e00c634,0x00022b1b,0x46c04770,
+0x46c04770,0x460cb510,0xf890b111,0xe0012078,0x2079f890,0x3074f890,
+0xf1131a9b,0xbf4831ff,0x01dff103,0x031ff001,0x409a2201,0xeb00114b,
+0x6d1b0383,0xd007421a,0x6f03b11c,0x67033b01,0x6ec3e002,0x66c33b01,
+0x46c0bd10,0x460cb510,0xf890b111,0xe00120d7,0x20d8f890,0x30d4f890,
+0xf1131a9b,0xbf4832ff,0x022ff103,0x0101f002,0xb2c90089,0x408b230f,
+0x0262eb00,0x20b4f892,0x410b4013,0xb12cb2d9,0x30d0f8d0,0xf8c01a5b,
+0xe00430d0,0x30ccf8d0,0xf8c01a5b,0xbd1030cc,0xf890b510,0x468ce186,
+0x0207f00e,0x40912101,0x0301f00c,0x46044093,0x00deeb00,0x2180f890,
+0xea01b2c9,0xea220303,0x43130201,0x0f2ff1be,0x3180f880,0x2200d101,
+0xf10ee002,0xb2da0301,0x3187f894,0x2186f884,0xfa5f4463,0xb2d3fe83,
+0x002ff1b3,0x1c58bf48,0x0107f000,0x408a2201,0x03e0eb04,0x3180f893,
+0xe187f884,0x410b4013,0x030eebc3,0x3187f884,0x317cf8d4,0x3ffff1b3,
+0x3301d002,0x317cf8c4,0x46c0bd10,0xf890b172,0xf01330d6,0xd0040f01,
+0xf8931843,0x4b092097,0x7902e001,0xf8534b08,0xe00a0022,0x3077f890,
+0xb11b4a05,0xf8931843,0xe0003025,0xf8527903,0x47700023,0x1e00d148,
+0x1e00d060,0x18c96883,0xf8917913,0xf3c32075,0x429a03c1,0x2000d001,
+0xf891e005,0xf1d33076,0xbf380001,0x47702000,0x47f0e92d,0x9020f8dd,
+0x4615460e,0x9f09469a,0x802cf8dd,0xb9204604,0xf2414855,0xf7e71186,
+0x68a3fa9b,0x0200f04f,0xf8a818f0,0xf8902000,0x1e1c30a8,0x2401bf18,
+0xf890b15c,0xf01330d6,0xd0060f10,0x0301f023,0x2077f880,0x30d6f880,
+0xf8902400,0x703b3162,0x2162f890,0x701a9b0a,0xf64f882b,0xea0372e7,
+0x802a0202,0x3075f890,0xf00300db,0x431a0318,0x0c520452,0xb9a4802a,
+0x1076f890,0x3046f890,0xd3034299,0xb2d93b01,0x1076f880,0x791a1843,
+0xf8534b36,0x46223022,0x3000f8ca,0xff7af7ff,0xf890e05d,0xf8903085,
+0x2b0010d5,0xf44fbf14,0x24000400,0x68db6803,0xd10d2b01,0x30eaf890,
+0x0f01f013,0xf890d024,0xea6f10e9,0xea6f4342,0x24004353,0xe01b802b,
+0xd1192b02,0x316cf8b0,0x0f01f013,0xf890d014,0xb92b3174,0x1165f890,
+0x3163f890,0xe005703b,0x3164f890,0x1166f890,0x703b2400,0xea6f882b,
+0xea6f4343,0x802b4353,0x30a8f890,0xd3034299,0xb2d93b01,0x10d5f880,
+0x30eef890,0xf8b8b12b,0xf0433000,0xf8a80301,0x180b3000,0x2086f893,
+0xf8534b0d,0x43233022,0x3000f8ca,0x68db6803,0xd1052b02,0x10d5f890,
+0xf7ff2201,0xe002ff1f,0xf7ff2201,0xf8c9ff1b,0xe8bd0000,0x46c087f0,
+0x00022b3d,0x1e00d060,0x1e00d148,0x460eb570,0x4010f89d,0xb9204605,
+0xf6404811,0xf7e77125,0x68a8f9e3,0x1830b9d4,0x30eaf890,0x0f01f013,
+0x6fc3bf1c,0xf890601c,0xf02330ea,0xf8800301,0xf8b030ea,0xf013316c,
+0xbf1c0f01,0x601c6fc3,0x316cf8b0,0x0301f023,0x316cf8a0,0x46c0bd70,
+0x00022b3d,0x41f0e92d,0xf8904698,0x461630d5,0xf89318c3,0x4b3e2086,
+0xf8134604,0x460f3022,0x057ff003,0x3083f890,0xf890b953,0xb93b3084,
+0x3085f890,0x4837b123,0x4143f640,0xf9a4f7e7,0x30d5f894,0x70332f01,
+0x2d07d121,0x6823d10b,0x3b0168db,0xd8112b01,0x3085f894,0xd1532b00,
+0x3083f894,0x2d0fe007,0xf894d108,0x2b003085,0xf894d14a,0x2b003084,
+0xe02fd046,0x30a8f894,0x20d5f894,0x429a3b01,0x1c53d03e,0xf1b7e014,
+0xd1393fff,0x20d5f894,0xd0352a00,0x68db6823,0x2b013b01,0x2d08d80a,
+0x2a08d108,0x2300dc01,0xf1a2e002,0xb2db0308,0xe0117033,0x1085f894,
+0x2d07b149,0x2d0fd00c,0x4812d00a,0x4163f640,0xf95af7e7,0x1e53e004,
+0xe0027033,0xe0002101,0x78332100,0xf89318e3,0x4b092086,0x0022f853,
+0x0000f8c8,0xf440b111,0xe0010300,0x0300f420,0xf8c82001,0xe0003000,
+0xe8bd2000,0x46c081f0,0x1e00d148,0x00022b3d,0x41f0e92d,0xf8904698,
+0x46173076,0x791a18c3,0x46044b3a,0x5022f853,0x3083f890,0xb953460e,
+0x3084f890,0xf890b93b,0xb1233085,0xf6404834,0xf7e72153,0xf894f91d,
+0x2e013076,0xd128703b,0x6f00f015,0xf005d01b,0x2b07037f,0x6823d10c,
+0x3b0168db,0xd8122b01,0x3083f894,0xf894b17b,0x2b003085,0xe00ad033,
+0xd1082b0f,0x3084f894,0xd03f2b00,0x3085f894,0xd13b2b00,0xf894e027,
+0xf8943046,0x3b012076,0xd033429a,0x703b1c53,0xf1b6e01b,0xd12d3fff,
+0x2085f894,0xf015b172,0xd0056f00,0x037ff005,0xd00e2b07,0xd00c2b0f,
+0xf44f4813,0xf7e76127,0xe006f8db,0x3076f894,0x3b01b1c3,0x703b4611,
+0x2100e002,0x2101e000,0x18e3783b,0x4b09791a,0x0022f853,0x0000f8c8,
+0xf440b111,0xe0010300,0x0300f420,0xf8c82001,0xe0003000,0xe8bd2000,
+0x46c081f0,0x1e00d060,0x00022b3d,0x4b0eb510,0x0080f890,0x490d468e,
+0xbf082800,0x2a004619,0x2015bf14,0xe0052000,0x3020f851,0xd0094573,
+0xb2d81c43,0xd9f72831,0xf6404805,0xf7e7119f,0x2000f89b,0x46c0bd10,
+0x1e00d4d8,0x1e00d5a0,0x00022b3d,0x2000b510,0xf8534b07,0x428b3020,
+0x3001d008,0xd1f72811,0xf2404804,0xf7e751ad,0x2000f883,0x46c0bd10,
+0x1e00d148,0x00022b3d,0x2000b510,0xf8534b07,0x428b3020,0x3001d008,
+0xd1f7281d,0xf2404804,0xf7e75197,0x2000f86d,0x46c0bd10,0x1e00d060,
+0x00022b3d,0x2400b570,0xf8c04605,0xf8c040e0,0xf5004168,0x300170b8,
+0x22034621,0xf91ef7e8,0x416ff885,0x416ef885,0x46c0bd70,0x4604b510,
+0xffe8f7ff,0x3174f894,0x0301f1c3,0x2b01b2db,0x3174f884,0xf8b4d106,
+0xf013316c,0xbf080310,0x3174f884,0x46c0bd10,0x2400b570,0xf8c04605,
+0xf8c040e0,0x462140dc,0x00e4f100,0xf7e82203,0xf885f8f5,0xf88540e7,
+0xbd7040e8,0x43f7e92d,0x2076f890,0x3046f890,0x429a4605,0xd3034689,
+0xf8803b01,0xe2e13076,0xd00229ff,0x1076f885,0x1883e2e8,0x4bb2791a,
+0x2022f853,0x3082f890,0xf012b163,0xd0096f00,0x037ff002,0xd9052b01,
+0x30d6f890,0x0310f023,0x30d6f880,0xf04f4628,0xf10d31ff,0x466b0207,
+0xfec2f7ff,0xf0002800,0x682b8126,0x203ef893,0x2a01b112,0xe10dd011,
+0xf8956cea,0x6eeb1079,0xbf944291,0x0301ebc3,0x0302ebc3,0x207bf895,
+0xbf344293,0x20012000,0xf895e103,0x2b033160,0x4610d901,0xf8d5e0fe,
+0xf1b33118,0xd1043fff,0xf6404892,0xf7e621a8,0xf895ffcf,0x18eb3076,
+0x4b8d791a,0x1022f853,0x3085f895,0x6f00f011,0x2b00d030,0xf44fbf14,
+0x23000300,0xf413430b,0xf8950f00,0xd0100080,0x4a85b138,0x017ff001,
+0xfb012314,0x68da2303,0x4a81e017,0x017ff001,0xfb012314,0x689a2303,
+0xb138e00f,0xf0014a7c,0x2314017f,0x2303fb01,0xe006685a,0xf0012214,
+0xfb03037f,0x4a76f302,0xf44f589a,0xfbb273fa,0xe001f7f3,0x077ff001,
+0xf0119900,0xd0276f00,0x0f00f411,0x0080f895,0xf8dfd00e,0xf001c1b4,
+0xb120027f,0xfb022314,0x68dac303,0x2314e013,0xc303fb02,0xe00e689a,
+0xc194f8df,0x027ff001,0x2314b120,0xc303fb02,0xe004685a,0xfb022314,
+0xf853f303,0xf44f200c,0xfbb273fa,0xe001f6f3,0x067ff001,0x30fcf8d5,
+0xd008428b,0x3100f8d5,0x3ffff1b3,0xf04fbf1c,0xf8c533ff,0xf8d53100,
+0xf0122114,0xd0276f00,0x0f00f412,0x0080f895,0xf8dfd00e,0xf002c13c,
+0xb120027f,0xfb022314,0x68dac303,0x2314e013,0xc303fb02,0xe00e689a,
+0xc11cf8df,0x027ff002,0x2314b120,0xc303fb02,0xe004685a,0xfb022314,
+0xf853f303,0xf44f200c,0xfbb273fa,0xe001f4f3,0x047ff002,0xd90142b7,
+0xd20642a6,0x40f4f8d5,0x33fff04f,0x3118f8c5,0xf8d5e00f,0xebc63118,
+0xfb030107,0xf8d5f301,0xebc400f4,0xfb000206,0xebc43202,0xfbb20307,
+0x682bf4f3,0x203ff893,0x40932301,0xd904429c,0xf640482a,0xf7e621c8,
+0xf8d5feff,0xf1b00100,0xd00c3fff,0xf8d56829,0x684b2104,0x370cf8d3,
+0x6c8a1a9b,0xd2024293,0xbf284284,0xf8d54604,0xfb0630f4,0xfb03f204,
+0x429af307,0x2000bf94,0xe0062001,0xf44f4819,0xf7e6612e,0x2000fedd,
+0xb140e009,0x3007f89d,0x3076f885,0xf3c39b00,0xf88553c0,0xf0103085,
+0xf0400fff,0xf04f8193,0xf88d33ff,0x682b3007,0x403ef893,0x2c01b114,
+0xe161d018,0x2078f895,0x42936ceb,0x4621d201,0x6f2be008,0x0302ebc3,
+0x207af895,0xbfcc4293,0x21012100,0xe15bb2cc,0x1e00d060,0x00022b3d,
+0x1e00c744,0x3118f8d5,0x3ffff1b3,0x48a5d104,0x3103f640,0xfea0f7e6,
+0x6cea682b,0x429a6c5b,0x81a3f0c0,0x46214628,0x0207f10d,0xf7ff466b,
+0x2800fd5b,0x8199f000,0x3076f895,0x791a18eb,0xf8534b99,0xf8951022,
+0xf0113085,0xd0306f00,0xbf142b00,0x0300f44f,0x430b2300,0x0f00f413,
+0x0080f895,0xb138d010,0xf0014a90,0x2314017f,0x2303fb01,0xe01768da,
+0xf0014a8c,0x2314017f,0x2303fb01,0xe00f689a,0x4a88b138,0x017ff001,
+0xfb012314,0x685a2303,0x2214e006,0x037ff001,0xf302fb03,0x589a4a81,
+0x73faf44f,0xf8f3fbb2,0xf001e001,0x9900087f,0x6f00f011,0xf411d027,
+0xf8950f00,0xd00e0080,0xc1e0f8df,0x027ff001,0x2314b120,0xc303fb02,
+0xe01368da,0xfb022314,0x689ac303,0xf8dfe00e,0xf001c1c4,0xb120027f,
+0xfb022314,0x685ac303,0x2314e004,0xf303fb02,0x200cf853,0x73faf44f,
+0xf7f3fbb2,0xf001e001,0xf8d5077f,0x428b3108,0xf8d5d008,0xf1b3310c,
+0xbf1c3fff,0x33fff04f,0x310cf8c5,0x3076f895,0x18ebb1ab,0x4b5c791a,
+0x1114f8d5,0x2022f853,0x3085f895,0xbf142b00,0x0300f44f,0x43132300,
+0xd1044299,0xf6404853,0xf7e6311a,0xf895fdfd,0xf8d53076,0x18eb4114,
+0x4b4f791a,0x610cf8d5,0x2022f853,0x3085f895,0xbf142b00,0x0300f44f,
+0x43132300,0xd05c429c,0x3ffff1b6,0x6829d009,0x2110f8d5,0xf8d3684b,
+0x1a9b370c,0x42936c8a,0xf8d5d34f,0xf8d5e118,0x45b660f4,0xf014d949,
+0xd0276f00,0x0f00f414,0x0080f895,0xf8dfd00e,0xf004c0ec,0xb120027f,
+0xfb022314,0x68dac303,0x2314e013,0xc303fb02,0xe00e689a,0xc0ccf8df,
+0x027ff004,0x2314b120,0xc303fb02,0xe004685a,0xfb022314,0xf853f303,
+0xf44f200c,0xfbb273fa,0xe001f1f3,0x017ff004,0xd9014547,0xd2044588,
+0x33fff04f,0x3118f8c5,0xebc1e013,0xfb060307,0xebc8f303,0xfb0e0207,
+0xebc13212,0xfbb20308,0x682bf6f3,0x203ff893,0x40932301,0xbf88429e,
+0xf8952600,0xf8d53076,0x18eb1114,0x4b16791a,0x2022f853,0x3085f895,
+0xbf142b00,0x0300f44f,0x43132300,0xf8d54299,0xd10c10f4,0xf893682b,
+0x2355203f,0x22644093,0xf3f2fbb3,0xbf944299,0x24012400,0xfb07e014,
+0xfb01f206,0x429af308,0x2400bf94,0xe00b2401,0xf6404802,0xf7e6315d,
+0xe062fd5b,0x00022b3d,0x1e00d060,0x1e00c744,0xf89db1a4,0x2bff3007,
+0x4628d107,0xf10d2101,0x466b0207,0xfc10f7ff,0x9b00b148,0x53c0f3c3,
+0x3085f885,0x3007f89d,0x3076f885,0xf0104620,0xd0440fff,0x3046f895,
+0x1076f895,0xf895b13b,0xb12330a8,0x21004628,0xf98cf000,0xf8954649,
+0x18eb3076,0x4b1b791a,0x2022f853,0x3082f895,0xf012b163,0xd0096f00,
+0x037ff002,0xd9052b01,0x30d6f895,0x0310f023,0x30d6f885,0xd00929ff,
+0x3075f895,0xd9012b02,0xe0012300,0xb2db3301,0x3075f885,0x46212400,
+0x64ac221c,0xf10564ec,0xf7e70050,0x4b08fdc7,0x672c66ec,0x4074f885,
+0x47984628,0x601c6feb,0x2400e001,0xe8bde7b6,0x46c083fe,0x1e00d060,
+0x0001f451,0x4ff8e92d,0x4617460e,0xf8bd4699,0x4604b028,0x489fb920,
+0x6176f640,0xfce0f7e6,0x197468a5,0x489bd104,0x61b6f640,0xfcd8f7e6,
+0xf894793b,0xf3c32075,0x429a03c1,0x8122f040,0xf8935973,0x2b01303e,
+0xf04fd002,0xe0060a00,0xf8944620,0x22001076,0xf9e4f7ff,0x79ba4682,
+0xea4279fb,0xf0132303,0xd0090f40,0x031cf013,0x2b14d006,0x4887d004,
+0x7162f240,0xfcb0f7e6,0x79fa79bb,0x2302ea43,0x3813ea5f,0x2603f3c3,
+0x2e00d102,0x80e7f000,0x3074f894,0x09582201,0x031ff003,0xf103fa12,
+0x454eb14e,0x2300d901,0x45d8e003,0x2300bf8c,0xb2dd2301,0x45c8e003,
+0x2500bf8c,0xeb042501,0x6d020080,0xbf142d00,0xf04f468e,0xea010e00,
+0x459e0302,0xea81bf1c,0x65030302,0x3074f894,0xd9012bde,0xe0012300,
+0xb2db3301,0x3074f884,0x79bbb1b5,0x0f02f013,0xf894d012,0xb90a2077,
+0x601a6fe3,0x20d6f894,0xea122301,0xf8840103,0xbf043077,0x60196fe3,
+0x0301f042,0x30d6f884,0x0f00f1be,0x6ee3d005,0x66e33301,0x33016f23,
+0x21006723,0xf7ff4620,0x2101f8dd,0xf7ff4620,0x6ce3f8d9,0x3ffff1b3,
+0x3301d001,0x682564e3,0x303ef895,0xf0002b00,0xf8948082,0xf8d43076,
+0x18e310f0,0x4b4a791a,0x0022f853,0x2085f894,0xbf142a00,0x0300f44f,
+0x43032300,0xd00d4299,0xbf142a00,0x0300f44f,0x43032300,0x30f0f8c4,
+0x203ff895,0x40932301,0x30f4f8c4,0x3114f8d4,0xd1044553,0x3118f8d4,
+0x3ffff1b3,0x6823d108,0xa114f8c4,0x203ff893,0x40932301,0x3118f8c4,
+0x6ce36825,0x2042f895,0xbf94454e,0xf04f46de,0x42930e00,0xf895bf34,
+0xf8950041,0x26010040,0x4576e00b,0xf104bfd4,0xf50401f4,0x680b718c,
+0xfa333601,0x1a9bf200,0xf108600b,0x429e0301,0x79bbd1ef,0x0f02f013,
+0x45f0d015,0x303ff895,0x1a1bdc08,0x409a2201,0x30f4f8d4,0xf8c4189b,
+0xe01030f4,0x22011a1b,0xf8d4409a,0x189b3118,0x3118f8c4,0x45f0e001,
+0x6823dd05,0xf8d3685b,0xf8c4370c,0x79bb311c,0x0f02f013,0x2300d001,
+0xf894e003,0x33013160,0xf884b2db,0xf8943160,0xb1333046,0x30a8f894,
+0x4620b11b,0xf7ff2100,0x4620f88f,0xf7ff21ff,0xe005fb85,0xf1b36ca3,
+0xbf183fff,0x64a33301,0x8ff8e8bd,0x00022b3d,0x1e00d060,0x4602b510,
+0x6803468e,0xf893b991,0x2b01303e,0xf04fd105,0xf8c033ff,0xf8c03128,
+0xf8923158,0x18d33076,0x1188f893,0xf0004672,0xe010f813,0x303ef893,
+0xd1052b01,0x33fff04f,0x30f4f8c0,0x3118f8c0,0x30d5f892,0xf89318d3,
+0xf7ff11a9,0xbd10fb4f,0x43f7e92d,0xf8904689,0xf89030d5,0x460510a8,
+0xd303428b,0xf8801e4b,0xe3b030d5,0x0ffff1b9,0xf880d002,0xe3b890d5,
+0xf0402a00,0xf04f831f,0xf10d31ff,0x466b0207,0xf998f7ff,0xf0002800,
+0x682b8156,0x203ef893,0x2a01b112,0xe111d014,0x20b0f8d5,0x30d8f895,
+0xbf284293,0x220f4613,0xf302fb03,0x20ccf8d5,0xf8951a9b,0x429320da,
+0x2400bf34,0xe1042401,0x3160f895,0xd9012b03,0xe1004614,0x3158f8d5,
+0x3ffff1b3,0x48abd104,0x419df640,0xfb2cf7e6,0x30d5f895,0xf89318eb,
+0x4ba72086,0x1022f853,0x3085f895,0x6f00f011,0x2b00d030,0xf44fbf14,
+0x23000300,0xf413430b,0xf8950f00,0xd0100080,0x4a9eb138,0x017ff001,
+0xfb012314,0x68da2303,0x4a9ae017,0x017ff001,0xfb012314,0x689a2303,
+0xb138e00f,0xf0014a95,0x2314017f,0x2303fb01,0xe006685a,0xf0012214,
+0xfb03037f,0x4a8ff302,0xf44f589a,0xfbb273fa,0xe001f7f3,0x077ff001,
+0xf0119900,0xd0276f00,0x0f00f411,0x0080f895,0xf8dfd00e,0xf001c218,
+0xb120027f,0xfb022314,0x68dac303,0x2314e013,0xc303fb02,0xe00e689a,
+0xc1f8f8df,0x027ff001,0x2314b120,0xc303fb02,0xe004685a,0xfb022314,
+0xf853f303,0xf44f200c,0xfbb273fa,0xe001f6f3,0x067ff001,0x3138f8d5,
+0x3ffff1b3,0xf8d5d007,0x428b3130,0xf04fbf1c,0xf8c533ff,0xf8d53138,
+0xf0122150,0xd0276f00,0x0f00f412,0x0080f895,0xf8dfd00e,0xf002c1a0,
+0xb120027f,0xfb022314,0x68dac303,0x2314e013,0xc303fb02,0xe00e689a,
+0xc180f8df,0x027ff002,0x2314b120,0xc303fb02,0xe004685a,0xfb022314,
+0xf853f303,0xf44f200c,0xfbb273fa,0xe001f4f3,0x047ff002,0xd90142b7,
+0xd20642a6,0x4128f8d5,0x33fff04f,0x3158f8c5,0xf8d5e00f,0xebc63158,
+0xfb030107,0xf8d5f301,0xebc40128,0xfb000206,0xebc43202,0xfbb20307,
+0x682bf4f3,0x203ff893,0x40932301,0xd904429c,0xf6404842,0xf7e641c2,
+0xf8d5fa5b,0xf1b00138,0xd00c3fff,0xf8d56829,0x684b213c,0x370cf8d3,
+0x6c8a1a9b,0xd2024293,0xbf284284,0xf8d54604,0xfb063128,0xfb03f204,
+0x429af307,0x2400bf94,0xe0062401,0xf6404831,0xf7e641da,0x2400fa39,
+0x2c00e034,0xf89dd032,0xf8853007,0x9b0030d5,0x53c0f3c3,0x3085f885,
+0x30d5f895,0xf89318eb,0x4b272086,0x3022f853,0x037ff003,0xd11d2b08,
+0x68db682b,0xd1032b01,0xf7ff4628,0xe015f9dd,0xd1132b02,0xf7ff4628,
+0xf895f9ad,0xf8953161,0x3b012162,0xdb01429a,0xe0012300,0xb2db1c53,
+0x3163f885,0x3162f895,0x3164f885,0xf0104620,0xd0010fff,0xe1b62300,
+0x33fff04f,0x3007f88d,0xf893682b,0xb114403e,0xd01d2c01,0xf895e16b,
+0xf8d520d7,0x429330b0,0x4621d201,0x230fe00b,0xf303fb02,0x20d0f8d5,
+0xf8951a9b,0x429320d9,0x2100bfcc,0xb2cc2101,0x46c0e15b,0x00022b3d,
+0x1e00d148,0x1e00c744,0x3158f8d5,0x3ffff1b3,0x48b9d104,0x5107f640,
+0xf9caf7e6,0xf8d5682b,0x6c5b20b0,0xf0c0429a,0x4628825d,0xf10d4621,
+0x466b0207,0xfffaf7fe,0xf0002800,0xf8958253,0x18eb30d5,0x2086f893,
+0xf8534bac,0xf8951022,0xf0113085,0xd0306f00,0xbf142b00,0x0300f44f,
+0x430b2300,0x0f00f413,0x0080f895,0xb138d010,0xf0014aa3,0x2314017f,
+0x2303fb01,0xe01768da,0xf0014a9f,0x2314017f,0x2303fb01,0xe00f689a,
+0x4a9bb138,0x017ff001,0xfb012314,0x685a2303,0x2214e006,0x037ff001,
+0xf302fb03,0x589a4a94,0x73faf44f,0xf8f3fbb2,0xf001e001,0x9900087f,
+0x6f00f011,0xf411d027,0xf8950f00,0xd00e0080,0xc22cf8df,0x027ff001,
+0x2314b120,0xc303fb02,0xe01368da,0xfb022314,0x689ac303,0xf8dfe00e,
+0xf001c210,0xb120027f,0xfb022314,0x685ac303,0x2314e004,0xf303fb02,
+0x200cf853,0x73faf44f,0xf7f3fbb2,0xf001e001,0xf8d5077f,0x428b3140,
+0xf8d5d008,0xf1b33148,0xbf1c3fff,0x33fff04f,0x3148f8c5,0x30d5f895,
+0x195bb1b3,0x2086f893,0xf8d54b6e,0xf8531150,0xf8952022,0x2b003085,
+0xf44fbf14,0x23000300,0x42994313,0x4866d104,0x5123f640,0xf924f7e6,
+0x30d5f895,0x4150f8d5,0xf89318eb,0x4b612086,0x6148f8d5,0x2022f853,
+0x3085f895,0xbf142b00,0x0300f44f,0x43132300,0xd05c429c,0x3ffff1b6,
+0x6829d009,0x214cf8d5,0xf8d3684b,0x1a9b370c,0x42936c8a,0xf8d5d34f,
+0xf8d5e158,0x45b66128,0xf014d949,0xd0276f00,0x0f00f414,0x0080f895,
+0xf8dfd00e,0xf004c134,0xb120027f,0xfb022314,0x68dac303,0x2314e013,
+0xc303fb02,0xe00e689a,0xc114f8df,0x027ff004,0x2314b120,0xc303fb02,
+0xe004685a,0xfb022314,0xf853f303,0xf44f200c,0xfbb273fa,0xe001f1f3,
+0x017ff004,0xd9014547,0xd2044588,0x33fff04f,0x3158f8c5,0xebc1e013,
+0xfb060307,0xebc8f303,0xfb0e0207,0xebc13212,0xfbb20308,0x682bf6f3,
+0x203ff893,0x40932301,0xbf88429e,0xf8952600,0xf8d530d5,0x18eb1150,
+0x2086f893,0xf8534b27,0xf8952022,0x2b003085,0xf44fbf14,0x23000300,
+0x42994313,0x1128f8d5,0x682bd10c,0x203ff893,0x40932355,0xfbb32264,
+0x4299f3f2,0x2400bf94,0xe00e2401,0xf206fb07,0xf308fb01,0xbf94429a,
+0x24012400,0x4814e005,0x5164f640,0xf880f7e6,0x2c00e118,0xf89dd032,
+0x2bff3007,0x4628d107,0xf10d2101,0x466b0207,0xfeb0f7fe,0x9b00b338,
+0x52c0f3c3,0x2085f885,0x037ff003,0x2007f89d,0xf8852b0c,0xd11920d5,
+0x68db682b,0xd1092b01,0xf7ff4628,0xe011f821,0x00022b3d,0x1e00d148,
+0x1e00c744,0xd1092b02,0x3174f895,0xd1052b01,0xf7fe4628,0x2300ffe7,
+0x3174f885,0xf0104620,0xd0030fff,0xf8852301,0xe08830ee,0x68db682b,
+0xd0222b02,0xf0402b01,0xf8d580d7,0x2b1130dc,0x80d2f240,0x10e9f895,
+0x30d5f895,0xf000428b,0xf89580cb,0x428b30a8,0x80c6f240,0x30e7f995,
+0x20edf895,0x0312f1c3,0xf3004293,0xf88580bd,0x462810d5,0xffe0f7fe,
+0xf8d5e06f,0xf9951168,0xf895316f,0xebc32170,0x42930301,0xf895d92e,
+0xf8951174,0xb9d13161,0x2163f895,0x429a3b01,0x460adb01,0x1c53e001,
+0xf895b2da,0xf8853162,0x42932163,0xf895d116,0x3b013161,0xdb01429a,
+0xe0012300,0xb2db1c53,0x3163f885,0xf895e00a,0x3b012164,0xdb01429a,
+0xe0012300,0xb2db1c53,0x3164f885,0xf7fe4628,0xe07dff91,0xd97b2911,
+0x3174f895,0xf895b933,0xf8853165,0xf89530d5,0xe0053163,0x3166f895,
+0x30d5f885,0x3164f895,0x3162f885,0x3161f895,0x2162f895,0x429a3b01,
+0x2300db01,0x1c53e001,0xf885b2db,0xf8953163,0x46283162,0x3164f885,
+0xff68f7fe,0xf895e00d,0xf8953046,0xb13b20d5,0x30a8f895,0x4628b123,
+0xf7ff2101,0xe000fc0b,0xf8954691,0x18eb30d5,0x2086f893,0xf8534b21,
+0xf8952022,0xb1633082,0x6f00f012,0xf002d009,0x2b01037f,0xf895d805,
+0xf04330d6,0xf8850310,0xf00230d6,0x2b07037f,0x2b0fd004,0x2300d002,
+0x3085f885,0x0ffff1b9,0xf895d009,0x2b023075,0x2300d901,0x3301e001,
+0xf885b2db,0x24003075,0x22184621,0x40acf8c5,0x40b0f8c5,0x00b4f105,
+0xf838f7e7,0xf8c54b08,0xf8c540cc,0xf88540d0,0x462840d4,0x6feb4798,
+0xe001601c,0xe7192400,0x83fee8bd,0x1e00d148,0x0001f021,0x4ff0e92d,
+0x460eb085,0xf89d4615,0xf89d1048,0x93032050,0x8038f89d,0x903cf89d,
+0xb040f89d,0xa044f89d,0xf89d9102,0x9201704c,0xb9204604,0xf64048a8,
+0xf7e561d2,0x68a3ff41,0xf89418f4,0xb92b30a8,0xf64048a3,0xf7e561da,
+0xe2b2ff37,0xf894792b,0xf3c32075,0x429a03c1,0x82a3f040,0xf04fb117,
+0xe0130901,0xf01379ab,0xd006031c,0xd0042b14,0xf6404897,0xf7e50116,
+0x79abff1f,0x0f20f013,0x4893d104,0x0119f640,0xff16f7e5,0x30d5f894,
+0x18e39902,0x2086f893,0xf8534b8e,0xf0013022,0xf003027f,0x4293037f,
+0x6823d05d,0x2a0168da,0x45d3d159,0xf8d4d30a,0xf1b330e0,0xf0003fff,
+0x3301825d,0xf8c44615,0xe25a30e0,0x0f00f1b9,0x2200d001,0x9b03e004,
+0xbf144598,0x22012200,0xe0e8f894,0x2101b295,0x0207f00e,0xfa154091,
+0xeb04f202,0xf89000de,0xb2c930e4,0x0202ea01,0x0301ea23,0xf1be431a,
+0xf8800f17,0xd10120e4,0xe0022200,0x0301f10e,0xf894b2da,0xf88430e7,
+0x195b20e8,0xb2d3b2dd,0x0013f1b3,0x1d58bf48,0x0107f000,0xfa162601,
+0xeb04f201,0xf89303e0,0xf88430e4,0x401350e7,0xebc3410b,0xf8840305,
+0xf8d430e7,0xf1b330dc,0xf0003fff,0x199b820f,0x30dcf8c4,0x796be06b,
+0xd06a09db,0x68db6823,0xd1662b02,0xd30945d3,0x30e0f8d4,0x3ffff1b3,
+0x81fcf000,0xf8c43301,0xe1f730e0,0x3174f894,0xf894b913,0xe0013163,
+0x3164f894,0x42999901,0x81ecf040,0x0f00f1b9,0x2200d001,0x9b03e004,
+0xbf144598,0x22012200,0xe16ef894,0x2101b295,0x0207f00e,0xfa154091,
+0xeb04f202,0xf89000de,0xb2c93171,0x0202ea01,0x0301ea23,0xf1be431a,
+0xf8800f1d,0xd1012171,0xe0022200,0x0301f10e,0xf894b2da,0xf884316f,
+0x195b216e,0xb2d3b2dd,0x0013f1b3,0xf103bf48,0xf000000b,0x26010107,
+0xf201fa16,0x03e0eb04,0x3171f893,0x516ff884,0x410b4013,0x0305ebc3,
+0x316ff884,0x3168f8d4,0x3ffff1b3,0x81a2f000,0xf8c4199b,0x46353168,
+0x6823e19f,0x303df893,0x45d3b91b,0x8198f080,0x45d3e006,0x9903d904,
+0x0f41ebb8,0x8190f340,0x0f00f1b9,0x2507d001,0x9a03e009,0x0308ebc2,
+0x00dbb29b,0xf3f8fb93,0x030ff1c3,0xf894b29d,0xf005e0d4,0xf00e030f,
+0x00920201,0x4093b2d2,0x005eeb04,0xbf142a00,0x210f21f0,0x20b4f890,
+0x0303ea01,0x0201ea22,0xf1be4313,0xf8800f2f,0xd10130b4,0xe0022200,
+0x0301f10e,0x6823b2da,0x20d4f884,0x203ef893,0xd0052a01,0xe0092600,
+0x00022b3d,0x1e00d148,0xf8944620,0xf7fe10d5,0x4606fb0d,0x0f00f1b9,
+0xf1b8d11a,0xd0170f00,0x45439b03,0x45d3d114,0xf894d212,0xf01220d6,
+0xbf040101,0x60196fe3,0x0301f042,0x2077f894,0x30d6f884,0x6fe3b90a,
+0x2301601a,0x3077f884,0x30ccf8d4,0x195b2100,0x30ccf8c4,0x30d0f8d4,
+0x195b4620,0x30d0f8c4,0xfa70f7fe,0x46202101,0xfa6cf7fe,0x30b0f8d4,
+0x3ffff1b3,0x3301d002,0x30b0f8c4,0xf8936823,0xf8d4203c,0x429330b0,
+0x2300d302,0x30eef884,0x68db6823,0xd1222b01,0x20b0f8d4,0x10ebf894,
+0xf3f1fbb2,0x2313fb01,0x20ecf894,0xd1164293,0x30eaf894,0x01fef003,
+0x0f10f013,0x10eaf884,0xf894d00a,0xf89430a8,0x3b0120e9,0xbfbc429a,
+0x0301f041,0x30eaf884,0x23006fe2,0x68236013,0x2b0268db,0xf8d4d123,
+0xf8b420b0,0xfbb21176,0xfb01f3f1,0xf8b42313,0x42932178,0xf8b4d117,
+0xf64f316c,0xea0372fe,0xf8940202,0xf8a43174,0xb913216c,0x2300f3c2,
+0xf3c2e001,0xb11b1300,0x0301f042,0x316cf8a4,0x23006fe2,0x68236013,
+0x303ef893,0xf0002b00,0x990380b7,0x0f41ebb8,0xf894dd03,0x33013160,
+0x45d3e002,0x2300d202,0x3160f884,0xf20045d3,0xf89480a7,0xf8d430d5,
+0x18e31120,0x2086f893,0xf8534b5d,0xf8940022,0x2a002085,0xf44fbf14,
+0x23000300,0x42994303,0x2a00d014,0xf44fbf14,0x23000300,0x68214303,
+0x3120f8c4,0x303ff891,0xfa122201,0xf8c4f303,0xf8913128,0x409a304c,
+0x2124f884,0x3150f8d4,0xd10442b3,0x3158f8d4,0x3ffff1b3,0x6821d10e,
+0x6150f8c4,0x303ff891,0xfa122201,0xf8c4f303,0xf8913158,0x409a304c,
+0x2154f884,0xf8946823,0xf8930124,0xf893204d,0x1a9b304c,0xf103fa08,
+0xf302fa50,0xbfac4299,0x0301ebc3,0xb2db1a5b,0x45d3181b,0x3124f884,
+0xf894d313,0xf8d430d5,0x18e31150,0x2086f893,0xf8534b31,0xf8942022,
+0x2b003085,0xf44fbf14,0x23000300,0x42994313,0xf504d102,0xe0017594,
+0x75acf504,0x9a036826,0xc03ff896,0xfa026829,0xf896f30c,0xfb932042,
+0xf8d4fef8,0x429330b0,0xf896bf94,0xf8960041,0x458e0040,0x2301d910,
+0xf20cfa03,0x1ad24083,0xd9044291,0xfc0cfa31,0x1c4bd10c,0xebc1e009,
+0x40c3030e,0xe004185b,0x0301ebce,0xebc340c3,0x602b0301,0xd30745d3,
+0xf8d36873,0xf8c4370c,0xe001315c,0xe0002501,0xf8942500,0xb1333046,
+0x30a8f894,0x4620b11b,0xf7fe2101,0x4620f96d,0xb2ea21ff,0xf914f7ff,
+0xf8d4e007,0xf1b330ac,0xd0023fff,0xf8c43301,0xb00530ac,0x8ff0e8bd,
+0x1e00d148,0x41f0e92d,0x460d4606,0x46174608,0x22102100,0xf7e6461c,
+0x7833fd39,0xb134702b,0xb10f7870,0xe0027068,0x030ff020,0xe8bd706b,
+0x46c081f0,0x4ff0e92d,0xb0994604,0x9f274699,0x461668a3,0x0088f99d,
+0x2094f89d,0x2f0318cd,0xa090f8dd,0xf89d9001,0x9200808c,0xb098f89d,
+0x48a7dd04,0x01d7f241,0xfc4af7e5,0xf2436822,0x58d143ec,0xf5a3b181,
+0xfb075353,0x1853f203,0x3074f893,0x1889b113,0xe003a803,0x3074f891,
+0xb113a803,0xe0013178,0x4631a803,0xf7e62228,0xf1bafd15,0xd1040f00,
+0xf2414895,0xf7e501ee,0x2100fc27,0x72def44f,0xf7e64628,0x2201fce7,
+0x602c60e2,0x45a02400,0x2302bf0c,0xf8854613,0xf8c54081,0xf885a07c,
+0xf8859080,0xf89d30a9,0x49883021,0x033ff003,0xbf082b3f,0x2081f885,
+0x2209a814,0xfceaf7e6,0x0045f10d,0x220b4982,0xfce4f7e6,0xb9239b03,
+0xf640487d,0xf7e5718c,0x9903fbf7,0xe0084622,0x1883a818,0x3c50f813,
+0xd1012b16,0xe0032701,0x428a3201,0x2700d1f4,0xf8852300,0xb9173046,
+0x463e463a,0x461ae03c,0xe00a461e,0x188ba918,0xf813a818,0x19831c50,
+0x3c10f813,0xd004428b,0x9b033201,0xd3f1429a,0xf001e01a,0x2b02037f,
+0x4046f895,0x2b04d005,0x2b0bd003,0x2b16d001,0xf001d102,0xe003017f,
+0x037ff001,0x6100f443,0xf7fe4628,0x192bfb3d,0x1c637118,0x3046f885,
+0x2e083601,0x2200d830,0xa918e7db,0xa818188b,0x1c50f813,0xf8131983,
+0x428b3c1b,0x3201d004,0x429a9b03,0xe01ad3f1,0x037ff001,0xf8952b02,
+0xd0054046,0xd0032b04,0xd0012b0b,0xd1022b16,0x017ff001,0xf001e003,
+0xf443037f,0x46286100,0xfb0ef7fe,0x7118192b,0xf8851c63,0x36013046,
+0xd8012e0a,0xe7db2200,0x3081f895,0x8080f895,0xf0002b00,0x493f80c6,
+0xf10d2203,0xf7e6005d,0x2204fc59,0x0059f10d,0xf7e6493b,0x2200fc53,
+0x2046f885,0xd0402f00,0x3080f895,0xd03c2b00,0xe00a4616,0x188ba918,
+0xf813a818,0x19831c50,0x3c07f813,0xd004428b,0x9b033201,0xd3f1429a,
+0xf001e01a,0x2b02037f,0x4046f895,0x2b04d005,0x2b0bd003,0x2b16d001,
+0xf001d102,0xe003017f,0x037ff001,0x6100f443,0xf7fe4628,0x192bfac1,
+0x1c637118,0x3046f885,0x2e033601,0x2200d83e,0xa918e7db,0xa818188b,
+0x1c50f813,0xf8131983,0x428b3c03,0x3201d007,0x2200e001,0x9b034616,
+0xd3ee429a,0xf001e01a,0x2b02037f,0x4046f895,0x2b04d005,0x2b0bd003,
+0x2b16d001,0xf001d102,0xe003017f,0x037ff001,0x6100f443,0xf7fe4628,
+0x192bfa8f,0x1c637118,0x3046f885,0x2e023601,0x2200d80c,0x46c0e7db,
+0x00022b3d,0x00022b29,0x00022b32,0x00022b26,0x00022b7c,0x30a9f895,
+0x3b012200,0x2301bf18,0x0021f10d,0x0135f10d,0xfe6cf7ff,0x3039f89d,
+0x0f01f013,0xf895d00d,0xb1533080,0x49ae4628,0x4046f895,0xfa60f7fe,
+0x3401192b,0xf8857118,0x26004046,0xeb01a918,0xf81303d6,0xf0063c2b,
+0x41130207,0x0f01f013,0xf006d014,0x2e07017f,0xf44fbf8c,0xf44f53c0,
+0xf0416300,0x43196100,0xf8954628,0xf7fe4046,0x192bfa3f,0x71183401,
+0x4046f885,0x2e103601,0xf105d1dc,0x210000f0,0xf7e62230,0xf04ffb73,
+0xf8c533ff,0xf89530f4,0xb9233046,0xf2414891,0xf7e50110,0x2300faa1,
+0x3082f885,0x4b8e792a,0x3022f853,0x6f00f013,0xf003d10c,0x2b02037f,
+0x2b04d005,0x2b0bd003,0x2b16d001,0x2301d102,0x3082f885,0xe0242100,
+0xd8012902,0xe0012000,0xb2d81e8b,0x7922186c,0xf8534b7f,0xf0133022,
+0xd0116f00,0x037ff003,0xd0072b07,0x3b0cd30c,0xd8092b01,0xd9032904,
+0xe0041f0b,0xd8012903,0xe0012000,0xb2d81ecb,0x791b182b,0xf8843101,
+0xf8953025,0x42993046,0x2100d3d6,0x4643460a,0x46284c6e,0x240047a0,
+0x0076f885,0x46284b6c,0x4077f885,0x682b4798,0x0021f10d,0xf89568da,
+0x1b1230a9,0x2201bf18,0xbf183b01,0xf10d2301,0xf7ff0135,0xf885fdc3,
+0xf89d40a8,0xf0133039,0xd00b0f01,0x3080f895,0x4628b143,0xf7fe4958,
+0x2301f9a1,0x0086f885,0x30a8f885,0x0800f04f,0xeb02aa18,0xf81303d8,
+0xf0083c2b,0x41130207,0x0f01f013,0xf1b8d051,0xd8010f02,0xe0022700,
+0x0302f1a8,0xf008b2df,0xf1b8067f,0xbf8c0f07,0x53c0f44f,0x6300f44f,
+0x6100f046,0x46284319,0x40a8f895,0xf976f7fe,0xf8831963,0x682b0086,
+0xb97268da,0xd0082e07,0xf1a6d324,0x2b01030c,0x2c04d820,0x1f23d903,
+0x2c03e01b,0x4617d818,0x1ff3e018,0xd8152b06,0xf003e8df,0x0909090e,
+0x00040909,0xd9092c09,0x0309f1a4,0x2c08e009,0xf1a4d904,0xe0040308,
+0xd8012c03,0xe0012700,0xb2df1ee3,0x20a8f895,0xf893197b,0x19513086,
+0xf8813201,0xf8853097,0xf10820a8,0xf1b80801,0xd19d0f10,0x30a8f895,
+0x2100b1eb,0xf8952201,0x46283080,0x47a04c21,0x30d6f895,0x00d5f885,
+0x0301f023,0x30d6f885,0x7090f505,0x22402100,0xfa78f7e6,0x33fff04f,
+0x3128f8c5,0x3158f8c5,0x4b184628,0xf8954798,0x2b003046,0x80b0f000,
+0x30a8f895,0xf0002b00,0xf04f80ab,0xe04a0a00,0x0708eb05,0x4b0c793a,
+0xf8534c0f,0x46281022,0xf89547a0,0x4b0d2086,0xf8534606,0x46281022,
+0x428647a0,0x2300d214,0x3188f887,0x46c0e031,0x08000820,0x00022b3d,
+0x1e00d060,0x0001eec1,0x0001f451,0x0001f021,0x0001ef7d,0x1e00d148,
+0xeb082400,0xf8830305,0xf8954188,0x3b0230a8,0xdc16429c,0xf8931963,
+0xf8df3087,0x4628917c,0x1023f859,0x47b84f5b,0xd30a4286,0xb2dc1c63,
+0xf8931963,0x46283086,0x1023f859,0x428647b8,0xf10ad2df,0xf8950a01,
+0xfa5f3046,0x4543f88a,0xf04fd8ae,0xe04d0a00,0x0305eb08,0x2086f893,
+0xf8534b4d,0xf0111022,0xd0086f00,0x037ff001,0xd9042b07,0x0220f1b3,
+0x2201bf18,0x2200e000,0x4632b2d6,0xf7fe4628,0x792af879,0x46074b43,
+0x1022f853,0x46324628,0xf870f7fe,0xd2054287,0x0205eb08,0xf8822300,
+0xe02131a9,0xeb082400,0xf8830305,0xf89541a9,0x3b023046,0xdc17429c,
+0x795b1963,0x90d4f8df,0xf8594628,0x46321023,0xf854f7fe,0xd30b4287,
+0xb2dc1c63,0x791b192b,0xf8594628,0x46321023,0xf848f7fe,0xd2de4287,
+0x0a01f10a,0x30a8f895,0xf88afa5f,0xd8ab4543,0x682a9900,0xf8852901,
+0xd9181161,0x60d32302,0x3161f895,0xb162f885,0x459b3b01,0x2300db01,
+0xf10be002,0xb2db0301,0x3163f885,0x2300682a,0xb164f885,0x3174f885,
+0xb9c37c13,0x2301e002,0xe01460d3,0x74132301,0x22086828,0x21003011,
+0xf990f7e6,0x9a00682b,0x682a765a,0x33fff04f,0x682a7693,0xf8823301,
+0xf8a53034,0x682b31ba,0x639a2200,0xf8833206,0x9b01203c,0x3ffff1b3,
+0x3302d104,0x3083f885,0x3084f885,0xe8bdb019,0x46c08ff0,0x0001ef7d,
+0x1e00d148,0x1e00d060,0xf002b51f,0x92000201,0x93032300,0x9b094604,
+0x9a086840,0xf934f7f0,0xb9984603,0x2b039b07,0xa803d904,0x22049906,
+0xf974f7e6,0xf8d36823,0x429c37f0,0x4805d004,0x31e6f240,0xf884f7e5,
+0x0316f06f,0xb0044618,0x46c0bd10,0x00022b3d,0x37f8f8d0,0x47707898,
+0xeb006983,0x8b800043,0x46c04770,0x7883b510,0x69014602,0x8803b183,
+0x0f08f013,0xf023d00c,0xf0430308,0x80030380,0x073cf8d1,0x11f8f8d2,
+0x46132200,0x47a04c01,0x46c0bd10,0x1e0061f9,0x41ffe92d,0x31e2f990,
+0x2b004604,0x481adc04,0x61caf44f,0xf84cf7e5,0x320ef894,0x1214f8d4,
+0xf994b143,0x392421e2,0xfb022324,0xf9941503,0xe00281e3,0x8210f8d4,
+0x2600460d,0xf894e017,0x6920320e,0xb90b682f,0xe001461a,0x2230f8d4,
+0x92014b0a,0x92022200,0x1d299203,0x9300463a,0xfadaf7ec,0x320ef894,
+0x3524b903,0x45463601,0xe8bddbe5,0x46c081ff,0x00022bd0,0x00022bf5,
+0x6905b537,0x46284604,0xfd68f7ea,0xf8b44628,0xf7f011e0,0xf895fa33,
+0xb92b3023,0x3024f895,0x4628b113,0xf9b4f7ea,0x46282400,0x4d3ef885,
+0xf84cf7ea,0xf7e94628,0xf8d5ffc5,0x68183848,0xfe4cf7f9,0x3d5ef895,
+0xf895b163,0xf8853d63,0x2b014d60,0xf895d102,0xb11b3d66,0x46214628,
+0xfc3cf7ec,0xf7eb4628,0xf895fbff,0x46283de8,0x0301f023,0x3de8f885,
+0x93002303,0x23002101,0x6282f44f,0xf83ef7ea,0x3df2f8b5,0xf505b12b,
+0x4628615e,0xf7ee310c,0xbd3ef913,0x43f0e92d,0x31e2f990,0xf113b085,
+0x46050f02,0xd1036904,0xf8803301,0xe29131e2,0x2b007c63,0x828ef000,
+0xf0138803,0xd00e0f40,0x0340f023,0x46208003,0xfcccf7e9,0x4620b938,
+0xfe04f7ea,0xf043882b,0x802b0308,0xf895e27a,0x330131e2,0x69abb2df,
+0x71e2f885,0x0343eb05,0x801cf8b3,0x2b006b63,0xf408d033,0xf5b36340,
+0xd12e6f40,0x50a2f504,0xf188fa5f,0x29023034,0xf5a3d802,0xe0016340,
+0x10db1e8b,0x5cc62902,0x2201d801,0x1e8be004,0x0307f003,0x409a2201,
+0x0306ea12,0x2301d001,0x29dde011,0x1c8bd801,0x29dd10db,0xd9015cc0,
+0xe0042201,0xf0031c8b,0x22010307,0x4202409a,0x2300bf0c,0xb2db2301,
+0xfa5fe00b,0xeb04f288,0xf24101d2,0x5ccb4374,0x0207f002,0xf0034113,
+0xb1130301,0x0901f04f,0xf895e001,0xb27b91e4,0xf289fa4f,0xf3404293,
+0x1c5180c2,0xd103428b,0xf023882b,0x802b0310,0x31dcf8d5,0x3b0169aa,
+0xdb01429a,0xe00227ff,0x0342eb05,0x882b8bdf,0x0380f013,0xf8d5bf1c,
+0x330131f0,0x31f0f8c5,0x31e2f995,0xf040428b,0xf8b58099,0x2b0031e6,
+0x8094f000,0xf0002fff,0xf8d5809a,0xf8d521f0,0x429a31ec,0x6b60da79,
+0xd02f2800,0x6340f408,0x6f40f5b3,0xf504d12a,0xfa5f50a2,0x3034f188,
+0xd8022902,0x6340f5a3,0x1e8be001,0x290210db,0xd8015cc6,0xe0042201,
+0xf0031e8b,0x22010307,0xea12409a,0xd1580306,0xd80129dd,0x10db1c8b,
+0x5cc029dd,0x2101d901,0x1c8be005,0x0307f003,0xfa122201,0x4201f103,
+0xe00dd147,0xf288fa5f,0x01d2eb04,0x4374f241,0xf0025ccb,0x41130207,
+0x0f01f013,0xb360d139,0x6340f407,0x6f40f5b3,0xf504d127,0xb2f950a2,
+0x29023034,0xf5a3d802,0xe0016340,0x10db1e8b,0x5cc62902,0x2201d801,
+0x1e8be004,0x0307f003,0x409a2201,0x0306ea12,0x29ddd11b,0x1c8bd801,
+0x29dd10db,0xd9015cc0,0xe0042201,0xf0031c8b,0x22010307,0x4202409a,
+0xb2fae00a,0x01d2eb04,0x4374f241,0xf0025ccb,0x41130207,0x0f01f013,
+0x4628d012,0xfe88f7ff,0xf8d4882b,0xf023073c,0x802b0380,0x11f8f8d5,
+0x21e6f8b5,0x4c9a2300,0xe16747a0,0xd0062fff,0x46b869ab,0x61ab3301,
+0xf8852300,0xf99531e2,0x2b0031e2,0xf894d15d,0x2b003024,0x882bd056,
+0x0f80f013,0xf8d4d152,0x68183848,0xfb2cf7f8,0x31e0f8b5,0xd1494283,
+0x3023f894,0x4620b303,0x47984b88,0xf894b1e0,0xb9cb3d5e,0x320ef895,
+0xf8d5b113,0xb19b3234,0x2101882b,0x0320f043,0x4620802b,0x1d60f884,
+0xfab0f7ec,0x2d5ff894,0x882bb97a,0x0320f023,0xf884802b,0xe0082d60,
+0x3023f894,0xf894b12b,0xb1133d5e,0xf8842301,0xf8943d60,0xb9133023,
+0xf7e94620,0x4620fe9d,0xfb5cf7e9,0x882bb968,0x0f20f013,0x4620d106,
+0xfc90f7ea,0xf043882b,0xe0010308,0x0340f043,0x882b802b,0x0f28f013,
+0x8100f040,0xf8852301,0xf99531e2,0x2a0021e2,0x80c8f340,0xf389fa4f,
+0xf300429a,0xf8b580c3,0x4b5f01e0,0xfa5f4798,0x4287f788,0x2303d008,
+0x6282f44f,0x46209300,0x46132101,0xfe76f7e9,0x3848f8d4,0xf7f86818,
+0x4580fabb,0x4620d00f,0xfb58f7ea,0x3023f894,0x4620b913,0xfe58f7e9,
+0x46414620,0xf81ef7f0,0xf7e94620,0xf894fdbf,0xb1433024,0x31e0f8b5,
+0xd0044543,0x3de8f894,0x0301f043,0xf894e003,0xf0233de8,0xf8840301,
+0x692e3de8,0xf8862301,0x46303d3e,0xfe2af7e9,0xf013882b,0xd1370204,
+0xb3536b73,0x6340f408,0x6f40f5b3,0xf506d125,0x313451a2,0xd8012f02,
+0xe0014613,0x10db1ebb,0x5cc82f02,0x2201d801,0x1ebbe004,0x0307f003,
+0x409a2201,0x0300ea12,0x2fddd11a,0x1cbbd801,0x2fdd10db,0xd9015cc9,
+0xe0042201,0xf0031cbb,0x22010307,0x420a409a,0xeb06e009,0xf24102d7,
+0x5cd34374,0x0207f007,0xf0134113,0xd01a0f01,0x320ef895,0xf8d5b13b,
+0x69a92224,0xfb01230c,0x689a2303,0xf8b5b90a,0xf8d621ea,0xf8d5073c,
+0x230011f8,0x47a04c16,0xf5054630,0xaa0371fa,0xfac8f7e9,0xf895e01b,
+0xb13b320e,0xf8d569a9,0x230c2224,0x2303fb01,0xb92c689c,0x21e8f8b5,
+0x31e4f995,0xf4f3fb92,0xf7ff4628,0x4622fd19,0x073cf8d6,0x11f8f8d5,
+0x4c052300,0xf8d647a0,0x21023848,0x463a6818,0xfb2cf7f8,0x46c0e036,
+0x1e0061f9,0x0001d1ed,0x0001e9bd,0xf7ff4628,0x882bfd3f,0xf0232600,
+0x802b0380,0x33fff04f,0x70ae61ab,0xf7ea4620,0x7c63fbad,0x4620b113,
+0xfb2ef7eb,0x07f8f8d4,0x4b0e4631,0xf5044798,0x312451a4,0x46204b0c,
+0xf8944798,0x2b023d63,0xf894d10c,0xb14b3023,0x4b084620,0xb1284798,
+0x3d5ef894,0x4620b913,0xffa8f7e9,0xe8bdb005,0x46c083f0,0x0001f765,
+0x0001dec9,0x0001d1ed,0x7883b573,0x460e4605,0x2b006904,0xf8d4d05e,
+0x68183848,0xf9c8f7f8,0x31e0f8b5,0xd00a4283,0xf7ea4620,0x4620fa63,
+0x11e0f8b5,0xff2ef7ef,0xf7e94620,0xf894fccf,0xb17b3d5e,0x3d63f894,
+0x2b012100,0x1d60f884,0xf894d102,0xb12b3d66,0xf7ec4620,0x4620f94b,
+0xff70f7e9,0x3848f8d4,0xf7f96818,0x4620fb43,0xf906f7eb,0x3de8f894,
+0xf0232101,0xf8840301,0x23033de8,0x6282f44f,0x46209300,0xf7e92300,
+0x882bfd45,0xf0234620,0x802b0380,0x0301f06f,0x31e2f885,0x61ab3301,
+0x70ab3301,0xfb2ef7ea,0xf7eb4620,0x882bfab1,0x0f28f013,0xf023d006,
+0x802b0328,0x07f8f8d4,0xfcf4f7ff,0x46314628,0x47984b01,0x46c0bd7c,
+0x0001f765,0x4604b570,0x460d78a3,0xb1436900,0x51a4f500,0x4b033124,
+0x46204798,0xf7ff4629,0xbd70ff87,0x0001dec9,0x7883b510,0x69044602,
+0x8801b1e3,0x0f20f011,0xf894d018,0xb1533d5f,0x320ef890,0xf8d0b13b,
+0x2b013234,0x2104d103,0xffd8f7ff,0xf021e00a,0x80130320,0x11f8f8d2,
+0xf8d42200,0x4613073c,0x47a04c01,0x46c0bd10,0x1e0061f9,0x4ff0e92d,
+0x460cb087,0x1060f8bd,0x91039204,0x2064f89d,0x1074f89d,0xf8dd4605,
+0x9e17b040,0x9070f8dd,0x91019202,0x46986907,0x489fb923,0x7102f44f,
+0xfc62f7e4,0x0f00f1bb,0x489bd104,0x2109f240,0xfc5af7e4,0xd9042c02,
+0xf44f4897,0xf7e47103,0x2100fc53,0xe008460a,0x300bf852,0xd9022b20,
+0xf8422320,0x3101300b,0x45413224,0xf995dbf4,0xf89531e2,0xf113a002,
+0xd1020f02,0x92052201,0xf1bae00c,0xd1020f00,0xa014f8cd,0x882be006,
+0x0f28f013,0x2300bf14,0x93052301,0xf003882b,0x802b0301,0x320cf895,
+0x31e3f885,0x3024f897,0xf8b5b143,0xf8b51208,0xf8a52204,0xf8a511e8,
+0xe00521e6,0x1206f8b5,0x31e6f8a5,0x11e8f8a5,0x220af8b5,0x320df995,
+0x21eaf8a5,0x882bb11b,0x0304f043,0xf507802b,0x781b53c0,0x2b009904,
+0x2400bf08,0x606c2206,0x0009f105,0xfce2f7e5,0x321cf8d5,0x45982224,
+0x4698bfa8,0x0214f8d5,0xfb084659,0xf7e5f202,0x9b11fcd5,0x8210f8c5,
+0x882bb91b,0x0304f023,0x9c11e005,0xd1032c01,0xf043882b,0x802b0304,
+0xf013882b,0xd0020f04,0xf8852301,0x991331e3,0x29009a14,0xbfc89b15,
+0x11e8f8a5,0xbfc82a00,0x21eaf8a5,0xdb052b00,0x3024f897,0x9c15b113,
+0x41e6f8a5,0x29009912,0x882bdd05,0x0f04f013,0xf885bf08,0x9a0211e3,
+0x882bb11a,0x0302f043,0x2ee0802b,0x2e00dc03,0x9b16dd02,0x2600b903,
+0xe00a2400,0x46389a16,0x1014f832,0xf7f42201,0x3401fa03,0xbf082800,
+0x42b42600,0x2e00dbf2,0x462bdd0b,0x9c162200,0x4012f834,0x839c3201,
+0x42b23302,0xf8c5d1f7,0x990161dc,0xf8d5b139,0xf8d5222c,0x429331dc,
+0xf8c5bfc8,0x882b21dc,0x0f01f013,0x240cd001,0xf8d5e003,0xb9b331dc,
+0xf1ba240d,0xd0030f00,0x46214628,0xfec2f7ff,0x51a4f507,0x31244638,
+0x47984b26,0xb11a9a1a,0x4621981b,0x47989b1a,0x0019f06f,0xf1bae096,
+0xd0070f00,0x13dcf243,0xb91b58fb,0x21044628,0x47984b1d,0x991b9c1a,
+0xf8c52300,0xf8c541fc,0xf8c51200,0xf1b931f0,0xd1090f00,0x21e8f8b5,
+0xfb933364,0xf1b9f9f2,0xbfb80f01,0x0901f04f,0xf8c59a01,0xf88591ec,
+0xb12a220e,0x0f00f1b8,0xfa5fd002,0xe001f288,0x21e3f895,0x23009c03,
+0x21e4f885,0xb1a461ab,0x01dcf8d5,0x4619462a,0x8b93e00d,0x32029c03,
+0xd10742a3,0xe00861a9,0x00022bd0,0x0001dec9,0x0001f765,0x42813101,
+0xf04fdbef,0x260133ff,0x51a4f507,0x31e2f885,0x70ae4638,0x4b233124,
+0x46384798,0xfd50f7e8,0x4821b920,0x21e5f240,0xfb0af7e4,0xf7ea4638,
+0xf897f969,0xb1233024,0x1324f8b7,0x11e0f8a5,0xf1bae01f,0xd11c0f00,
+0x3848f8d7,0xf7f76818,0x4632ffab,0x46384601,0xf94ef7f4,0x3848f8d7,
+0xb1184604,0xf7f76818,0xe008ff9f,0xf7f76818,0x4622ff9b,0x46334601,
+0x4c0c4638,0xf8a547a0,0x9e0501e0,0x2000b10e,0xf8d7e008,0xf8d5073c,
+0x463211f8,0x4c064633,0x463047a0,0xe8bdb007,0x46c08ff0,0x0001dec9,
+0x00022bd0,0x0001e9a1,0x1e0061f9,0x4ff0e92d,0x7d01f5ad,0x46994682,
+0xb230f89d,0x57f8f8d0,0xd05f2a00,0xf8c59b8a,0xf8c51230,0xf8d53234,
+0x2100322c,0xbfb4429a,0x46984690,0xfb03220c,0xf8d5f202,0xf7e50224,
+0xa810fb6d,0xf44f2100,0xf7e572e0,0x2600fb67,0xe0174637,0x0224f8d5,
+0x0407eb09,0x220c1838,0xf7e54621,0x8863fb7b,0x2b0e370c,0xf44fbf94,
+0xf44f5200,0xf4435280,0x431a6330,0xf823ab10,0x36012016,0xdbe54546,
+0x9b8e9a8b,0x93009202,0x0301f1d2,0x2300bf38,0xf04f9301,0x930533ff,
+0x9306ab10,0x73fff64f,0x9b8f9308,0x930a2200,0x92039b90,0xebbb930b,
+0xbf180302,0x930c2301,0x92042301,0x930d9209,0xf8da920e,0x210207f8,
+0x9b8d4a04,0x801cf8cd,0xfddcf7ff,0x7d01f50d,0x8ff0e8bd,0x00022bf5,
+0x4ff0e92d,0x69024692,0xf1bab0fb,0x46070fc3,0x4698460d,0xb210f8dd,
+0xd97b9209,0xf44f2100,0xa80a72e0,0xfb06f7e5,0x21004650,0x47984b4c,
+0xb9104604,0x46814606,0x4629e021,0xf7e54652,0xf994fb19,0xb13b3000,
+0xf2439a09,0x58d343ec,0x689b68db,0xd0612b00,0x30b8f8d4,0xd05d2b00,
+0x00c0f8d4,0xf44fb910,0xe0026628,0xfb00230c,0x4630f603,0x4b3a2100,
+0x46814798,0xf06fb910,0xe0520515,0x50c0f8d4,0xd04c2d00,0xf104220c,
+0xfb0501c4,0xf7e5f202,0xf8d7faed,0x429d322c,0xf8d4dd08,0x2b0030c0,
+0xf06fbf0c,0xf06f051c,0xe03a0501,0x460a2100,0x685b18a3,0x3101b103,
+0x2ab43224,0xb911d1f8,0x72216061,0xf8d73101,0x4299321c,0xf1b8dc27,
+0xd1030f00,0xb010f8d7,0x8084f8df,0x30bcf8d4,0x9300462a,0x3000f994,
+0x93012500,0x91037863,0x1d239302,0xf8cd9304,0xf8cd8014,0x6938b018,
+0x10b8f8d4,0xf7ff464b,0xe010ff05,0x46342600,0xe00446b1,0x46b12600,
+0x35fff04f,0xf06fe001,0xf1b80501,0xd0020f00,0x21014658,0xb12c47c0,
+0x46219b09,0x46526c98,0x47984b08,0x0f00f1b9,0x9a09d005,0x6c904649,
+0x46324b04,0x46284798,0xe8bdb07b,0x46c08ff0,0x1e00578d,0x1e005c15,
+0x000076b1,0x2400b510,0x231446a6,0x0303fb04,0x3244f241,0x4299589b,
+0xf10ed00a,0x34010e01,0x0f08f1be,0x4803d1f1,0x418ef240,0xf988f7e4,
+0xbd104620,0x00022c1c,0x460db570,0xb9204604,0xf2404804,0xf7e4216d,
+0x7b23f97b,0x0305ea23,0xbd707323,0x00022c1c,0x460db570,0xb9204604,
+0xf2404819,0xf7e42155,0xf015f96b,0xd0030f01,0xf0237b23,0x73230304,
+0x0f02f015,0x7b23d00e,0x0303ea45,0x0f01f013,0x480fd104,0x215df240,
+0xf956f7e4,0xf0237b23,0x73230308,0x0f10f015,0x7b23d00c,0x0f02f013,
+0x6863d108,0x5f00f013,0x4805d104,0x2163f240,0xf942f7e4,0xea457b23,
+0x73230303,0x46c0bd70,0x00022c1c,0x4604b510,0x4806b918,0xf7e421d1,
+0x6820f933,0xf8d0b118,0x60233278,0x6020e000,0x46c0bd10,0x00022c1c,
+0x460cb570,0xb9184605,0x21c44805,0xf920f7e4,0xf8d4b11c,0x602b3278,
+0x602ce000,0x46c0bd70,0x00022c1c,0x127cf8d0,0x30f8b510,0x22003178,
+0xfca8f7fc,0x46c0bd10,0x780bb570,0xf0134605,0x460e0f01,0xd0044614,
+0xf44f480c,0xf7e47150,0xf241f8ff,0x58eb435c,0x0384eb03,0xe008699c,
+0xf1044630,0x22060119,0x47984b05,0xf8d4b118,0x2c004274,0x4620d1f4,
+0x46c0bd70,0x00022c1c,0x1e00d671,0x3848f8d0,0x689bb570,0x429a4604,
+0x4615460e,0x4805d004,0x3197f240,0xf8d8f7e4,0x46314620,0xf7ff462a,
+0xbd70ffc7,0x00022c1c,0x3848f8d0,0x689ab510,0xffbef7ff,0x46c0bd10,
+0x6b43b57f,0xf891b173,0xb12331ce,0x31cff891,0x3301b90b,0xf642e006,
+0x5cc34319,0xbf142b01,0x23012300,0x684bb2da,0x4ec0f3c3,0x3d4cf8d0,
+0x3ffff1b3,0xf8b0d111,0xf4033324,0xf5b36340,0xd1036f40,0xf013688b,
+0xe0050f02,0x6f00f5b3,0x688bd103,0x0f01f013,0x2300d101,0x23ffe000,
+0x9300b25b,0x032cf101,0x23009302,0x93039201,0x93059304,0x07f0f8d0,
+0x02f8f101,0xf7fe4673,0xb007fc21,0x46c0bd00,0x435cf241,0x4ff0e92d,
+0x8003f850,0xf8b8b085,0x46053014,0x468a2b07,0x2100d807,0x0020f8d8,
+0x47984b5e,0x28004601,0xf241d133,0x592b445c,0x29006819,0x80a3f000,
+0xf8d5a803,0xf7ff770c,0x592bff3b,0x68182400,0xe00b4626,0xb9337e03,
+0xebc36a03,0x42b30307,0x461ebf24,0xa8034604,0xff18f7ff,0xd1f12800,
+0xf0002c00,0xe0898088,0x3014f8b8,0xd9042b07,0xf44f4849,0xf7e47190,
+0x2100f843,0x0020f8d8,0x47984b44,0x28004601,0xf8b8d075,0x460e3014,
+0xf8a83301,0x46083014,0x2020f8d8,0xf7e52100,0xf8d5f8f5,0x46b1370c,
+0xf5056233,0x33345354,0xa27cf8c6,0x22006173,0x320218b3,0x31fff04f,
+0xf8a32a10,0xd1f71160,0x27004644,0x6aa3e006,0x6b60b113,0x47984631,
+0x34103701,0x3024f8d8,0xd3f4429f,0xb18b7c6b,0x738cf241,0x5ae94628,
+0xf7f32200,0xb148fe61,0x3024f895,0xf505b113,0xe005744a,0x54bcf505,
+0xe0013410,0x0414f10a,0x2023f895,0xf89ab9d2,0xb1bb300c,0x07f8f106,
+0x0b7ff04f,0xf8cd9201,0x4620b000,0x23014639,0xa068f8df,0xf8d647d0,
+0xb98a20f8,0xb000f8cd,0x46209201,0x46134639,0xe00947d0,0x2200237f,
+0x46209300,0xf1069201,0x461301f8,0x47a04c0f,0x46314628,0xff04f7ff,
+0x3000f8d8,0x6000f8c8,0x3278f8c6,0xf04fe009,0xe0060900,0x46214628,
+0x47984b07,0xd0f62800,0x4648e76e,0xe8bdb005,0x46c08ff0,0x1e00578d,
+0x00022c1c,0x0001ed85,0x0001fb25,0x47f0e92d,0x4605780b,0x0f01f013,
+0x4616460f,0x481ed004,0x3162f240,0xffa0f7e3,0x46394628,0xf7ff4632,
+0x4604fe8f,0xf44fbb68,0xfb06739e,0xf509f903,0x18696128,0x31044628,
+0xff0af7ff,0xb3004604,0x0819f100,0x46402206,0xf7e54639,0xf241f86b,
+0x58eb435c,0xeb0362a6,0x699a0386,0xf8c4619c,0xf8952274,0xb9633023,
+0x0305eb09,0x3a90f893,0x7c6bb13b,0x4628b12b,0x46224641,0xf7eb230c,
+0x4620fa0b,0x87f0e8bd,0x00022c1c,0x3848f8d0,0x689bb570,0x429a4604,
+0x4615460e,0x4805d004,0x7163f44f,0xff58f7e3,0x46314620,0xf7ff462a,
+0xbd70ffa5,0x00022c1c,0x3848f8d0,0x689ab510,0xff9cf7ff,0x46c0bd10,
+0x78434602,0x04007880,0x2003ea40,0x43187813,0xea4078d3,0x47706003,
+0xf1d06b80,0xbf380001,0x47702000,0x4b0ab570,0x460d4604,0xb9184798,
+0x214d4808,0xff2cf7e3,0x68e26923,0x429318eb,0x4804d903,0xf7e3214e,
+0x82a5ff23,0x46c0bd70,0x1e005ec1,0x00022c26,0x4ff0e92d,0x9203b095,
+0x6b9f461e,0xb014f8d2,0x2060f893,0x3062f8b3,0x93059204,0x68736e74,
+0x94066832,0x930a9207,0xf8d67a3b,0x2b029014,0xf8d64605,0x6ef4a008,
+0x8014f8b9,0x80ccf040,0x0f07f1ba,0x80c6f240,0xf1a44444,0xf7ff0008,
+0x9008ffab,0xf7ff1f20,0xf1a8ffa7,0x90090108,0x464860f1,0xffb2f7ff,
+0x0408f1aa,0x940b69b3,0x7b9b60b4,0x0318f003,0xd07f2b08,0x0936f10d,
+0x6f712206,0xf7e44648,0x2206ffbd,0xf1096f31,0xf7e40006,0x9a03ffb7,
+0x4b514659,0x47984628,0x0414f107,0x18225823,0x30fcf8c7,0xf10d6851,
+0xf10d084c,0xf8c70a48,0xf8cd1100,0xf8cd8000,0x220ca004,0xf8d74c47,
+0x464b00fc,0x9b1347a0,0xf8c72204,0x991230fc,0x1100f8c7,0x3022f896,
+0x8000f8cd,0xf8cd9311,0xf8d7a004,0xab1100fc,0x9b1347a0,0xf8c72200,
+0x9b1230fc,0xf8c7990b,0x980a3100,0x47984b38,0x8000f8cd,0xa004f8cd,
+0x9b0a4602,0x00fcf8d7,0x1100f8d7,0x9b1347a0,0x42939a08,0x2001d001,
+0x9b12e004,0x1b189c09,0x2001bf18,0xf8d5b310,0x33013580,0x3580f8c5,
+0x3023f895,0xd0452b00,0x00c4f8db,0x3584f8d5,0x3301b930,0x3584f8c5,
+0xf8cb233c,0xe03c30c4,0xf5053301,0xf8c5615e,0x6ca83584,0x2201310c,
+0xff0cf7e4,0xf88b2301,0xe02b30cc,0xf64f9a05,0x429a73ff,0x9a04d110,
+0xf8879c06,0x1c632108,0xf8c79c07,0xf1043104,0xf107020a,0xf10700e0,
+0x4c120114,0xe00f47a0,0xf1066df1,0x42990340,0x220ad112,0x00e0f107,
+0xff24f7e4,0x9b049a06,0x2104f8c7,0x3108f887,0x79b94628,0xf7f3465a,
+0xe001f893,0xe0002000,0xb0152001,0x8ff0e8bd,0x1e0085d1,0x1e00348d,
+0x1e003505,0x1e003161,0x6b88b510,0xf990460c,0x6849300e,0x1ac92210,
+0xf5003102,0xf7e46089,0x6ba1fefd,0x784a788b,0x6089f501,0x780b431a,
+0x78ca4313,0x790b431a,0x794a4313,0xd102431a,0x22012110,0x2110e001,
+0xf7e42202,0xbd10fdb9,0x4ff0e92d,0xb08d4f5a,0x495a6838,0xfe64f7e4,
+0xd0452801,0xe18cf8df,0xf8de4c57,0x48571000,0x6821910b,0x91096803,
+0x930a4955,0x2200680b,0x4b549308,0xb000f8d2,0x4d544e53,0x600a6003,
+0x49544853,0x8000f8d7,0x9000f8d6,0xa000f8d5,0xf8ce603a,0x602a2000,
+0x60226032,0x3a011a09,0x47984b4d,0x42984b4d,0x4b41d1fc,0xf8c32100,
+0x4b458000,0x9000f8c3,0xf8c34b44,0x680aa000,0x601a4b47,0xb000f8c1,
+0x990b4b46,0x60199a0a,0x99094b3a,0x4b38601a,0x60199a08,0x601a4b38,
+0xf9d8f007,0x46072100,0xfa80f7e4,0x21004638,0xf9ecf7e4,0x6a03b128,
+0xbfbc2b00,0x4300f04f,0x46386203,0x8030f8d7,0x9034f8d7,0xfb70f007,
+0xfbb04c35,0x4638f6f4,0xfb74f007,0xf5f4fbb0,0xf0074638,0x4b31ff5f,
+0xf0f4fbb0,0x4b309300,0x93019006,0x4a30492f,0x8008f8cd,0x900cf8cd,
+0x95059604,0x4b2e482d,0x47a04c2e,0xf640482e,0xf244010d,0xf00732f4,
+0xb148f933,0xf640482a,0xf2440129,0xf00732f4,0xb108f92b,0xe0002400,
+0x46382401,0xfae8f007,0x73fff64f,0x3218f244,0xbf184298,0xf6404602,
+0x48200112,0xf918f007,0x481db11c,0x685b6a03,0x4b1d4798,0x701a2201,
+0xfce0f7e3,0xf7e34638,0xb00dfd5f,0x8ff0e8bd,0x00022d9c,0x00022c73,
+0x00000944,0x00000938,0x0000094c,0xbbadbadd,0x00022da0,0x00022d98,
+0x00000000,0x00031658,0x1e003981,0xdebb20e3,0x0000093c,0x00000948,
+0x000f4240,0x00022cb4,0x00020f59,0x00022ca9,0x00022cae,0x00022c79,
+0x00022cb2,0x1e004461,0x00022dc8,0x00023820,0x00023af6,0x4ff7e92d,
+0x4604460e,0x4844b918,0xf7e321da,0x1ce3fd0d,0x0503f023,0x40b32301,
+0x5f80f5b3,0xf44fbf28,0x2b045380,0x469bbf2c,0x0b04f04f,0x26004b3b,
+0xc000f8d3,0x4f3b4b3a,0x9000f8d3,0x46b246b0,0xe0179601,0x42a86820,
+0xeb04d313,0xeb010109,0xf1cb0e00,0xebc50200,0x401a030e,0xd308428a,
+0x0300ebc5,0xd2044563,0x97014626,0x4690469c,0x462746f2,0x2c00687c,
+0x2e00d1e4,0x4b2ad049,0x681a681b,0x429a4b29,0x4823d004,0x7183f44f,
+0xfccaf7e3,0x030aebc8,0x0103ebc5,0x681c4b20,0x0008f104,0xd8014281,
+0xe00b186d,0xeb086833,0x1a5b0205,0xebc46033,0xf8480301,0x68733005,
+0x60726053,0x1b5a6833,0xf1bbd004,0xd1050f04,0xd8034282,0x9a016873,
+0xe00c6053,0xd20542a2,0x20004a13,0x33016813,0xe0136013,0x0302ebc4,
+0x60335195,0x490f1996,0x680b6832,0x4a0e18d0,0x68136008,0x6013191b,
+0x68134a0c,0xbf884298,0x46306010,0x8ffee8bd,0x000206dc,0x00000408,
+0x000003c4,0x000003d0,0x000003d8,0x5354414b,0x000003e0,0x000003cc,
+0x000003f0,0x0000040c,0x4694b510,0xf8d04604,0x20002084,0xe00c4686,
+0x308cf8d4,0x0380eb03,0x3080f8d3,0xd103428b,0xd00545e6,0x0e01f10e,
+0x42903001,0x2011d1f0,0x46c0bd10,0x4010ea80,0x2010ea80,0x1010ea80,
+0x0090ea80,0x0050ea80,0x0001f000,0x46c04770,0xf890b510,0xb10b30b4,
+0xe0004b02,0x47984b02,0x46c0bd10,0x1e004865,0x1e0047d5,0x4604b510,
+0xd0652800,0x20d8f8d0,0x30dcf8d0,0xd004429a,0xf2404830,0xf7e321e5,
+0xf8d4fc2f,0xf8d42104,0x429a3108,0x482bd004,0x21e6f240,0xfc24f7e3,
+0x30b4f894,0xf8d4b15b,0xb12b30d0,0x00f0f8d4,0x0003ebc0,0x47984b24,
+0x30fcf8d4,0xf8d4e00a,0xb12b30cc,0x00f0f8d4,0x0003ebc0,0x47984b1e,
+0x30f8f8d4,0xf8d4b12b,0xebc0011c,0x4b1a0003,0xf8d44798,0xb13110e0,
+0x20d4f8d4,0x00acf8d4,0x4b160092,0xf8d44798,0xb131110c,0x2100f8d4,
+0x00acf8d4,0x4b110092,0xf8d44798,0xb13110e8,0x20d4f8d4,0x00acf8d4,
+0x4b0c0092,0xf8d44798,0xb1311114,0x2100f8d4,0x00acf8d4,0x4b070092,
+0xf8d44798,0x462100ac,0x72a2f44f,0x47984b03,0x46c0bd10,0x00020b04,
+0x1e005dcd,0x1e005c15,0x4ff7e92d,0x9001461f,0xf44f9100,0x210070a2,
+0x46164bb7,0xa030f8dd,0x8034f8dd,0x9038f8dd,0xb03cf8dd,0x47989d12,
+0x28004604,0x815ef000,0xf44f2100,0xf7e472a2,0x4baefc75,0xbf082d00,
+0xf8c4461d,0xb92650a0,0xf44f48ab,0xf7e371cb,0x2100fba3,0x460a4630,
+0xffdcf7e3,0xf8c42300,0xf1083140,0xf3c033ff,0xea133000,0xf8840f08,
+0xd00400b4,0xf44f48a0,0xf7e371d2,0xf109fb8d,0xea1333ff,0xd0040f09,
+0xf240489b,0xf7e311a5,0xf1b9fb83,0xd1070f00,0x0f00f1ba,0x4896d004,
+0x11a7f240,0xfb78f7e3,0x0f00f1b8,0xb127d105,0xf2404891,0xf7e311a9,
+0x9b01fb6f,0x60b0f8c4,0x30acf8c4,0x30b4f894,0xf5b8b32b,0xd9047f00,
+0xf2404889,0xf7e311b1,0xf5b9fb5f,0xd9047f00,0xf44f4885,0xf7e371d9,
+0xf44ffb57,0xf1b85300,0xf8c40fff,0xf8c470c0,0xf8c4a0c4,0xd80630c8,
+0x0ffff1b9,0xf5a3bf9c,0xf8c45380,0x462030c8,0xfdecf7e4,0xf5b8e013,
+0xd9047f00,0xf44f4876,0xf7e371df,0xf5b9fb39,0xd9047f00,0xf2404872,
+0xf7e311bf,0xf8c4fb31,0xf8c470b8,0x2208a0bc,0x4b6e9900,0x00a4f104,
+0x23004798,0x30abf884,0x80d4f8c4,0x9100f8c4,0xfdd2f7e4,0xbf864583,
+0x030bebc0,0x3124f8c4,0xb124f8c4,0x22009b10,0x3128f8c4,0xf8c49b11,
+0xf8c42130,0xf8c4312c,0x68732138,0xd11f2b01,0xf5b368b3,0xd1056f02,
+0x30b4f894,0xf04fb113,0xe00b4300,0xf2446b32,0x429a3322,0xf04fbf0c,
+0xf04f4300,0xf8c44380,0x23003130,0x3134f8c4,0x3130f8d4,0x3138f8c4,
+0x3134f8d4,0x313cf8c4,0xf7e34630,0xf640fdfd,0x42980329,0x4630d10c,
+0xfff0f7e3,0x4630b140,0xffecf7e3,0xd8032802,0xf8842300,0xe00430b5,
+0x4b434620,0xf8844798,0xf1b800b5,0xd00d0f00,0x0588ea4f,0x21004628,
+0x47984b39,0x00e0f8c4,0xd0792800,0x462a2100,0xfb84f7e4,0x0f00f1b9,
+0xea4fd00d,0x46280589,0x4b312100,0xf8c44798,0x2800010c,0x2100d068,
+0xf7e4462a,0xf1b8fb73,0xd0050f00,0x21014620,0x47984b2e,0xd05b2800,
+0x0f00f1b9,0x4620d005,0x4b2a2102,0x28004798,0xf8d4d052,0xf1b33130,
+0xd1084f80,0x30ecf8d4,0x4f80f1b3,0xf894d903,0x2b0030b5,0xf8d4d044,
+0xf1b33130,0xd1084f80,0x3118f8d4,0x4f80f1b3,0xf894d903,0x2b0030b5,
+0xf1b8d036,0xd00d0f00,0x0588ea4f,0x21004628,0x47984b11,0x00e8f8c4,
+0x2100b350,0xf7e4462a,0xe001fb35,0x80e8f8c4,0x0f00f1b9,0xea4fd00d,
+0x46280589,0x4b082100,0xf8c44798,0xb1b80114,0x462a2100,0xfb22f7e4,
+0xf8c4e001,0x46209114,0xfd0cf7e4,0xe00f4620,0x1e00578d,0x00023c14,
+0x00020b04,0x1e0040f9,0x1e0044fd,0x0001cd65,0x4b024620,0x20004798,
+0x8ffee8bd,0x0001cd81,0xea43058b,0xb5702392,0xfef0fbb3,0x3e1efb00,
+0x3380f44f,0xf3f0fbb3,0xf303fb00,0x3380f5c3,0x4606041b,0xf0f0fbb3,
+0x3010fb06,0x75fff64f,0x2391ea05,0xf303fb00,0xfbb30400,0xfb06f4f6,
+0xfbb03414,0xfb06f3f6,0xea050313,0xfb056591,0xfbb5f503,0xfb06f3f6,
+0x44745313,0xfbb418e4,0xfb06f0f6,0x05924010,0xeb020d92,0xbd702080,
+0x3024f890,0x4618b90b,0xf890e015,0xb90b3023,0xe0102001,0x5158f500,
+0x788b3108,0x431a784a,0x4313780b,0x431a78ca,0x4313790b,0x431a794a,
+0x2000bf0c,0x47702001,0x6000f011,0x4694b510,0x2314d02f,0x027ff001,
+0xf203fb02,0xf4014c16,0x191063e0,0x0f00f411,0xe010f890,0x0a1bd006,
+0x2b013b04,0x68c3bf94,0xe0056883,0x3b040a1b,0xbf942b01,0x59136843,
+0xf44f009a,0xfb0c53fa,0xf503f303,0x33ef43aa,0xfbb3189b,0xf3c1f3f2,
+0xeb025201,0x3204129e,0x230318d2,0xf203fb02,0xb2801ed0,0x46c0bd10,
+0x1e00c744,0x6f00f011,0x41f0e92d,0x4680469c,0xf0014615,0xd0390e7f,
+0xfb0e2214,0x4f2efe02,0x5301f3c1,0x0007eb0e,0xf4017c02,0xeb030400,
+0x009b1392,0x0f02f015,0x0618f103,0x61e0f401,0xf103bf08,0xb1340620,
+0x3b040a0b,0xbf942b01,0x688368c3,0x0a0be006,0x2b013b04,0x6843bf94,
+0x3007f85e,0xf44f009a,0xfb0c53fa,0xf503f303,0x33ef43aa,0xfbb3189b,
+0xeb06f3f2,0xf8d80083,0x685b3848,0xd1252b02,0xe0233006,0xf9134b13,
+0x2b00300e,0xea4fda12,0xf102024e,0xeb030315,0xfbb303cc,0x009af3f2,
+0x3848f8d8,0x0014f102,0x2b02685b,0xf102d10e,0xe00b001a,0x33fff10e,
+0x130ceb03,0x0f01f012,0xf0fefbb3,0x3060d001,0x30c0e000,0x81f0e8bd,
+0x1e00c744,0x1e00c634,0x468eb510,0xf8d0b122,0x685b3848,0xd122429a,
+0x6300f01e,0x0848f8d0,0x6f84d102,0xe0184619,0x037ff00e,0xd8162b20,
+0x01d3eb00,0x0207f00e,0x40932301,0x208df891,0x0003ea02,0x1843e00c,
+0x207cf893,0x037ff00e,0xd101429a,0xe0032001,0x42a13101,0x2000d1f3,
+0x46c0bd10,0x4604b510,0x46084696,0xe013b959,0x380cf8d4,0x0e02f1ae,
+0x365af8b3,0x0a1ab29b,0x70437002,0xf1be3002,0xdcf10f01,0xf8d4d104,
+0xf8b3380c,0x7003365a,0x46c0bd10,0x4696b500,0x189b680a,0x4293600b,
+0xbf386803,0x0e01f10e,0x60034473,0x46c0bd00,0x469eb500,0x459e680b,
+0x0303ebce,0x6803600b,0x3201bf88,0x60031a9b,0x46c0bd00,0xd2014290,
+0xe0062001,0x2000d001,0x4299e003,0x2000bf2c,0x47702001,0x3088f8d0,
+0x2084f8d0,0xf042b10b,0xf8d06280,0xb11b308c,0x2380f422,0x3200f443,
+0xf8c36983,0x47702120,0x4604b570,0xb929460d,0x37c0f890,0xf890b17b,
+0xb9633d0d,0xb11868a0,0x462a2103,0xfbdaf7e3,0x581cf884,0xf884b91d,
+0xf8845970,0xbd705854,0x0f01f011,0x41f0e92d,0x460f4680,0x461d4616,
+0x480ed004,0x51cdf24b,0xf89af7e3,0x0f01f015,0x480ad004,0x51cef24b,
+0xf892f7e3,0xdd0b2d00,0x19e12400,0xf7e74640,0x1933ff09,0x340255a0,
+0x42ac0a00,0xdbf47058,0x81f0e8bd,0x00021040,0xf642b570,0x5341451a,
+0x71c4f44f,0xf7e74604,0x5b63fef5,0x7270f420,0x4620431a,0xf44fb292,
+0xf7e771c4,0x2122fdcb,0xf7e74620,0x5b63fee7,0x7270f420,0x4620431a,
+0xb2922122,0xfdbef7e7,0x46c0bd70,0x41f0e92d,0x4844f8d0,0x343431e0,
+0x18a74615,0xf7e74606,0x4601fed1,0x42815960,0x2000d101,0xbf98e00d,
+0x3380f5c0,0x628cf506,0xebc0bf8c,0x18580001,0x59533204,0x5153181b,
+0xe8bd6039,0x46c081f0,0x41f0e92d,0x46057c43,0xf0002b00,0x2100814e,
+0x460a4ca7,0x210247a0,0x46282204,0x210447a0,0x46282208,0x210647a0,
+0x4628220c,0x210847a0,0x46282210,0x462847a0,0x2214210a,0x260047a0,
+0x00b2270c,0x32184639,0x4c994628,0x47a03601,0x2e063702,0x211cd1f5,
+0x46282238,0x211e47a0,0x4628223c,0x212447a0,0x46282240,0x212647a0,
+0x46282244,0x212847a0,0x46282248,0x212a47a0,0x4628224c,0x212c47a0,
+0x46282250,0x212e47a0,0x46282254,0x213047a0,0x46282258,0x213247a0,
+0x4628225c,0x226047a0,0x46282134,0x213647a0,0x22644628,0x213847a0,
+0x46282268,0x213a47a0,0x4628226c,0x213c47a0,0x46282270,0x213e47a0,
+0x46282274,0x214047a0,0x46282278,0x214247a0,0x4628227c,0x214447a0,
+0x46282280,0x214647a0,0x46282284,0x214847a0,0x46282288,0x228c47a0,
+0x4628214a,0x214c47a0,0x22904628,0x214e47a0,0x46282294,0x215047a0,
+0x46282298,0x215247a0,0x4628229c,0x215447a0,0x462822a0,0x215647a0,
+0x462822a4,0x215a47a0,0x462822a8,0x215c47a0,0x462822ac,0x215e47a0,
+0x462822b0,0x216047a0,0x462822b4,0x22b847a0,0x46282162,0x216447a0,
+0x22bc4628,0x216647a0,0x462822c0,0x216847a0,0x462822c4,0x216a47a0,
+0x462822c8,0x216c47a0,0x462822cc,0x216e47a0,0x462822d0,0x217047a0,
+0x462822d4,0x217247a0,0x462822d8,0x217447a0,0x462822dc,0x217647a0,
+0x462822e0,0x217a47a0,0x72aaf44f,0x47a04628,0xf44f2120,0x462872e4,
+0x212247a0,0x72e6f44f,0x47a04628,0x14d0f8d5,0x343cf8d5,0x2440f8d5,
+0x0301ebc3,0x3560f8c5,0x34b0f8d5,0x1a9b462c,0x3574f8c5,0x3468f8d5,
+0x2444f8d5,0x1a9b1a5b,0x3564f8c5,0x0778f8d4,0xf8d0b1b0,0xf8d5209c,
+0x189b33c0,0x33c0f8c5,0x2098f8d0,0x33f0f8d5,0xf8c5189b,0xf8d033f0,
+0xf8d52094,0x189b3408,0x3408f8c5,0x47986f43,0xf1053404,0x429c0318,
+0xf8d5d1e0,0xf8d523c0,0x210033c4,0xf8d5189b,0x189b23d4,0x23c8f8d5,
+0xf8d5189b,0x189b2448,0x244cf8d5,0xf8d5189b,0x189b2450,0x33b0f8c5,
+0x2420f8d5,0x33f0f8d5,0xf8d5189b,0x189b2400,0x2404f8d5,0xf8d5189b,
+0x189b2408,0x240cf8d5,0xf8d5189b,0x189b2414,0x33e8f8c5,0xf8d5186b,
+0xf8d323e8,0x31043424,0x291818d2,0x23e8f8c5,0xe8bdd1f4,0x46c081f0,
+0x0001d541,0xf0014b0a,0x569b027f,0x2b00b510,0xbfac4b07,0x7200f44f,
+0x72e0f44f,0xf0015c59,0xeb02010f,0xf7e70141,0x0040fd4d,0xbd10b280,
+0x1e00c634,0x41f0e92d,0x460d6987,0xe0172600,0x886319ac,0xd0062b02,
+0xd0042b04,0xf24b480c,0xf7e23149,0x8863feb9,0xd1032b02,0x88a35b72,
+0xe00452bb,0xd1022b04,0x68635b72,0x360850bb,0xf64f5b72,0x429a73ff,
+0xe8bdd1e2,0x46c081f0,0x00021040,0x6f00f011,0x41f0e92d,0x017ff001,
+0x46174606,0x0848f8d0,0x4a0fd006,0xfb012314,0x7c5b2303,0xe00018c3,
+0xf8931843,0x463050a0,0x22004629,0x4c092301,0xb92047a0,0xf6474808,
+0xf7e25190,0x4630fe81,0x463a4629,0x4c05230e,0xe8bd47a0,0x46c081f0,
+0x1e00c744,0x0001d375,0x00021040,0x0001d299,0x4b01b510,0xbd104798,
+0x0001d8b9,0x47f0e92d,0xf8d0461f,0x46043848,0x4688685b,0xbf142b01,
+0x2610260a,0x46914b09,0x18304798,0xb157b280,0x46410045,0x464a4620,
+0x4c05463b,0xb2ad47a0,0x19401830,0xe8bdb280,0x46c087f0,0x0001d8b9,
+0x0001d299,0x6f00f011,0x41f0e92d,0x017ff001,0x46174606,0x0848f8d0,
+0x4a0fd006,0xfb012314,0x7c5b2303,0xe00018c3,0xf8931843,0x463050a0,
+0x22004629,0x4c092301,0xb92047a0,0xf6474808,0xf7e2517d,0x4630fe25,
+0x463a4629,0x4c052388,0xe8bd47a0,0x46c081f0,0x1e00c744,0x0001d375,
+0x00021040,0x0001d299,0x47f0e92d,0xf8d04698,0x46053848,0xf89d685b,
+0xf89d6020,0x2b019028,0x230abf14,0xb9492310,0xfb032403,0x4611f404,
+0x46324b0f,0x18244798,0xe000b2a7,0x4c0d005f,0x46414628,0x9b094632,
+0x183847a0,0xf1b9b284,0xd0040f00,0x46284b08,0x46324641,0x4b07e003,
+0x46414628,0x47984632,0xb2801820,0x87f0e8bd,0x0001d91d,0x0001d299,
+0x0001d971,0x0001d8b9,0x6f00f011,0xd003b510,0xf2454819,0xe02a7123,
+0xf0014b18,0x565b017f,0xda082b00,0x0382eb01,0x3b01005b,0xfbb3004a,
+0x009bf3f2,0x2904e00b,0xd802d00b,0xd0052902,0x290be012,0x2916d007,
+0xe00dd009,0xb29800d3,0x0093e010,0x0113e7fb,0xf3f1fbb3,0x00d3e7f7,
+0xfbb3220b,0xe7f2f3f2,0xf2454803,0xf7e27140,0x2000fda3,0x46c0bd10,
+0x00021040,0x1e00c634,0x6f00f011,0x460cb570,0x461d4696,0x2000d001,
+0x4a0fe01c,0x037ff001,0x2b0056d3,0x221ada08,0x47984b0c,0xbf142d00,
+0x24002402,0xe00c3414,0x4b082218,0x0f00f1be,0x24c0bf0c,0x47982460,
+0xbf142d00,0x25002503,0x18201964,0xbd70b280,0x1e00c634,0x0001da4d,
+0x4608b510,0x2203460c,0xf7e34912,0x2302fe4f,0x3b0170e3,0x71637123,
+0x72233302,0x73233324,0x7423331b,0x74633301,0x74a3331b,0x75233304,
+0x22002332,0x015bf06f,0x232f7563,0x71e271a2,0x72a27261,0x736172e2,
+0x73e273a2,0x75a374e2,0xbd1075e2,0x000203b8,0x47f0e92d,0x4681461e,
+0x7b507b13,0xea434614,0x46882000,0xff52f7e6,0x46072108,0xf7e84630,
+0x4621fe8f,0x22064605,0xfe14f7e3,0x1da12206,0xf7e31da8,0x4631fe0f,
+0x46404b13,0x380e4798,0xf7e6b280,0xf105ff3b,0x7328040e,0x0355f06f,
+0x200ff3c0,0x22007368,0x706373ab,0x70a33359,0x712270e2,0x46394648,
+0xf83cf7e7,0xb1084603,0x0307f06f,0x46387163,0xff20f7e6,0xf3c071a0,
+0x71e0200f,0x87f0e8bd,0x1e003e11,0x41f0e92d,0x3ffff1b2,0x4616bf14,
+0x46072600,0x460a4698,0x2902b111,0xe038d003,0x5848f8d0,0xf8d0e007,
+0x685b3848,0xd1302b02,0x6528f500,0xb12e3504,0x46314638,0x4c172301,
+0xb33047a0,0x2b02686b,0x7b2bd10f,0xb166b96b,0x6f00f016,0xf006d11d,
+0x2b02037f,0x2b04d005,0x2b0bd003,0x2b16d001,0xf416d113,0xd0045f60,
+0x4319f642,0x2b015cfb,0xf1b8d00b,0xd0020f00,0x642e2000,0x4638e007,
+0xf7e863ee,0x4640ff57,0xf04fe001,0xe8bd30ff,0x46c081f0,0x0001d375,
+0xe92d680b,0x460741f0,0xb123460e,0xf647480c,0xf7e221e8,0x463cfca5,
+0x5b04f854,0x00ad1d30,0x462a4621,0xfd82f7e3,0x21004620,0xf7e3462a,
+0x683bfd5d,0x23006033,0xe8bd603b,0x46c081f0,0x00021040,0x41f0e92d,
+0x6700f011,0x461c4616,0xf001d01f,0x701a027f,0x2302f3c1,0x2b013b04,
+0x2a20d901,0xea6fd104,0xea6f6342,0x70236353,0x70a30a33,0x0370f401,
+0xf0430c1b,0xf4110307,0x70660f00,0xd07a70e3,0x6343ea6f,0x6353ea6f,
+0x4a3de074,0x057ff001,0x2b005753,0x5d55da23,0x0f7ff015,0x4839d104,
+0x717df245,0xfc58f7e2,0x46202206,0xf7e34639,0x7823fd19,0x020ff005,
+0x030ff023,0x7022431a,0x78a30532,0x01520d12,0x4312ea43,0x786370a3,
+0x2312ea43,0x78237063,0x70234313,0x2d02e04e,0x2d04d00a,0x2d0bd015,
+0x2d16d006,0x4825d004,0x71c8f245,0xfc30f7e2,0xd00a2d04,0x2d02dc02,
+0xe025d005,0xd0062d0b,0xd00f2d16,0x00f3e020,0x00b3e00a,0x0133e008,
+0xf2f5fbb3,0xfb00b290,0x4293f205,0x1c43d01c,0xe019b298,0x00f2210b,
+0xf3f1fbb2,0xfb00b298,0x429af301,0x1c43d010,0xfb00b298,0x1a9bf301,
+0xd9092b07,0xe0082280,0xf245480c,0xf7e271b0,0x2000fbff,0xe0004602,
+0x23052200,0xf303fb05,0xf0427023,0x70630304,0x0a0370a0,0x230070e3,
+0x71637123,0x81f0e8bd,0x1e00c634,0x00021040,0x4605b570,0x46acf243,
+0xf8d0460c,0x59a9073c,0x47984b11,0xf895b1fc,0xb1e33d5e,0x3de0f895,
+0xf243b1cb,0x592b44b0,0xf505b1ab,0x46285158,0xf7fe3108,0xb170fafd,
+0xf0136843,0xd00a0f40,0x3183f890,0x592ab13b,0x073cf8d5,0x085259a9,
+0x4c022301,0xbd7047a0,0x1e006221,0x1e0061f9,0x460cb570,0x46114606,
+0x7813b13a,0x0501f013,0xf7fed103,0xb100fadd,0x6ba163a5,0x073cf8d6,
+0xfbc8f7e6,0x46014b04,0xf104220f,0x4798001e,0xf8842300,0xbd70302d,
+0x1e0040f9,0x47f0e92d,0x46812600,0x46b0460d,0xeb05e016,0x687c0708,
+0x6e21b17c,0xf8d9b129,0xf8b40048,0x4b0a2064,0x4b094798,0x0048f8d9,
+0x22904621,0x23004798,0x3601607b,0x0804f108,0x429e682b,0x2300d3e5,
+0xe8bd602b,0x46c087f0,0x1e005c15,0x4ff0e92d,0xf10db08d,0x90010808,
+0x4617460c,0x22282100,0x461e4640,0xb058f8dd,0x90d0f8df,0xfc26f7e3,
+0x46204639,0x47c82201,0x28004601,0x7842d054,0x0504f108,0xbf282a10,
+0x31022210,0x92024628,0xfc34f7e3,0x46204639,0x47c82232,0x460146c2,
+0x9802b170,0xf1c0784b,0x429c0410,0x461cbfa8,0x31021828,0xf7e34622,
+0x9b02fc21,0x9302191b,0xf106b12e,0x46510034,0xf7e32228,0x9a01fc17,
+0xf8d24640,0x22001848,0xf7fa3178,0xb978fec3,0xf2439a01,0x5cd343d8,
+0x4640b1f3,0x47984b11,0xb12eb1d0,0x0034f106,0x22284641,0xfbfef7e3,
+0x2b109b02,0x480cd904,0x2173f249,0xfb10f7e2,0x0f00f1bb,0x4658d101,
+0x4658e008,0x2228a902,0xfbecf7e3,0xe0012000,0x30fff04f,0xe8bdb00d,
+0x46c08ff0,0x0001ee69,0x00021040,0x1e003759,0x41f3e92d,0x8020f8dd,
+0x2300461f,0x4606703b,0x3000f8c8,0x000cf101,0xf1a24b24,0x2205010c,
+0x46044798,0x2301b980,0x3d5df886,0xf7e84630,0xf506f941,0x46305158,
+0x46223108,0x94004623,0xfd6cf7e9,0xe02f4620,0xf8907903,0xf003c001,
+0x788305fe,0x0f04f1bc,0x3000f8c8,0xf0037903,0x703b0301,0x7943d102,
+0xb1e5b903,0x73f8f241,0xf3c65af6,0x45ae0eca,0x1d60d315,0xe00a4629,
+0xd1064571,0xf0067803,0x41130207,0x0001f003,0x3101e00a,0xf1ac3001,
+0xebc10204,0x42d30305,0x458ed401,0x2000d2ec,0x81fce8bd,0x1e003759,
+0xf241b537,0x5903445c,0x68194605,0xf7fea801,0x592bf96f,0x68182400,
+0x7b03e008,0x0f02f013,0x1c63d001,0xa801b2dc,0xf950f7fe,0xd1f42800,
+0xbd3e4620,0x4ff7e92d,0x460e4617,0xa901466a,0xf7e64683,0xf107ffbf,
+0xf7e6001e,0x4682fcad,0x0022f107,0xfca8f7e6,0x8000f8dd,0x46819d01,
+0x46404629,0x4653464a,0x47a04c1c,0x2001b108,0x7c73e032,0xea4f7c32,
+0xea424115,0x042b2203,0x429a0c1b,0x4101ea4f,0x9101d201,0xb119e009,
+0x3380f5a1,0xe0049301,0x93014b11,0x33fff108,0x9b019300,0x43134639,
+0x46309301,0x47984b0d,0x46012218,0x46584b0c,0x4c0c4798,0xa9011f03,
+0x22004668,0x980047a0,0x464a9901,0x4c034653,0x380047a0,0x2001bf18,
+0x8ffee8bd,0x0001d441,0xffff0000,0x0001edf9,0x0001da4d,0x0001d409,
+0x47ffe92d,0xf04f4698,0x930333ff,0xfb08330d,0x460f1303,0x8a5b8a19,
+0x42994605,0xd2084692,0x88bb88f9,0xd2074299,0x46414638,0x47984b3c,
+0xf8cde06f,0xe00c800c,0xa9034638,0x47984b39,0x4839b920,0x61dcf644,
+0xfa02f7e2,0x45439b03,0x9a03dc61,0xdb512a00,0xfb02230c,0x8a1b7303,
+0x4831b923,0x61e4f644,0xf9f2f7e2,0xf8959903,0x410b3d84,0xf0034541,
+0xd1020301,0xd04a2b00,0xb113e000,0x46384b29,0x4b29e001,0x47984638,
+0xb9204606,0xf6444824,0xf7e261ea,0x69ebf9d9,0x4630b313,0xfae8f7e8,
+0xf8df4c22,0x5c239094,0xf8194630,0xeb052003,0xf8d202c2,0x33013658,
+0x3658f8c2,0xfad8f7e8,0x46315c23,0x4003f819,0xeb056ca8,0xf8d404c4,
+0x9301365c,0x47984b16,0x18c09b01,0x065cf8c4,0x6ca84b14,0x22014631,
+0xf8d54798,0x330133c0,0x33c0f8c5,0x46414638,0x4b074652,0xb9204798,
+0xf6444807,0xf7e261f9,0x2001f99f,0x2000e000,0xe8bdb004,0x46c087f0,
+0x1e0039cd,0x1e003ced,0x00021040,0x1e003ac5,0x1e003b05,0x000238e6,
+0x1e003e11,0x1e005c41,0x00021010,0x41f0e92d,0x460c4606,0xf7f14617,
+0xf896ffff,0x2b003024,0x4620d06b,0x47a04c36,0xf8b64605,0x47a00324,
+0xd1624285,0x2700f896,0x36fff996,0x1a9b4639,0x783b0098,0x4298463a,
+0x4603bfb8,0x787b703b,0xbfb84298,0x707b4603,0x428378bb,0x4603bfa8,
+0x78fb70bb,0xbfa84283,0x70fb4603,0x42987913,0x4603bfb8,0x7b137113,
+0xbfb84298,0x73134603,0xf1073201,0x429a0308,0x463ad1f0,0x7d132400,
+0x42983401,0x4603bfb8,0x7f137513,0xbfb84298,0x77134603,0x302cf892,
+0xbfb84298,0xf8824603,0xf892302c,0x42983034,0x4603bfb8,0x3034f882,
+0x2c083201,0x2200d1e3,0x3024f891,0x42983201,0x4603bfb8,0x3024f881,
+0x303cf891,0xbfb84298,0xf8814603,0x3101303c,0xd1ed2a08,0x3044f897,
+0xbfb84298,0xf8874603,0xe8bd3044,0x46c081f0,0x0001e9bd,0x03fcf001,
+0xd0012b88,0xe0082000,0x7340f401,0x7f40f5b3,0x2318bf14,0x5cd3231e,
+0x477009d8,0xe92d8a8b,0x2b2d41f0,0x460e4605,0xd8056847,0x3404f8d7,
+0xf8c73301,0xe02a3404,0x1da2690c,0x785179a3,0x2101ea43,0x47984b16,
+0xf8d5b928,0x33013090,0x3090f8c5,0xf104e01b,0x788b0110,0x7c20784a,
+0x78cb431a,0x0202ea40,0x790a4313,0x794b431a,0xd0024313,0x0f01f010,
+0xf8d7d005,0x33013414,0x3414f8c7,0x2001e003,0x66ae666e,0xf8d5e005,
+0x200030a4,0xf8c53301,0xe8bd30a4,0x46c081f0,0x0001e3e9,0x41f0e92d,
+0x46156843,0x7b8a6c9f,0x3088f8d0,0x0241f3c2,0x46043301,0xf8c0460e,
+0x2a033088,0xe8dfd866,0x020df002,0x6e034b22,0xf8d0b133,0x33013094,
+0x3094f8c0,0xfe16f7f0,0xe0502301,0x2b016e03,0x7b0bd114,0x0f04f013,
+0x483fd004,0x61a6f44f,0xf88af7e2,0x2b0e8aab,0x6ea3d91c,0x483abb43,
+0x5139f240,0x6e03e022,0xd0052b01,0x3094f8d4,0xf8c43301,0xe05c3094,
+0x66032303,0xf0137b0b,0xd0040f04,0xf2404830,0xf7e2514c,0x8aabf86d,
+0xd8062b11,0xf8d26862,0x33013404,0x3404f8c2,0x6ea3e047,0x4828b923,
+0x5155f240,0xf85cf7e2,0x66a56ea3,0xe01f601d,0xb1336e03,0x3094f8d0,
+0xf8c03301,0xf7f03094,0x6e63fdcd,0x6ea3b90b,0x481db123,0x61adf44f,
+0xf846f7e2,0x66232303,0x46294620,0x47984b19,0xe022b930,0xf2404816,
+0xf7e25174,0xe01cf839,0x2b036e23,0x2200d121,0x66226e63,0x666266a2,
+0x686169da,0x0280f042,0xf8d161da,0x6820256c,0xf8c13201,0xf8d4256c,
+0x6c89208c,0xf8c43201,0x4632208c,0xfef2f7eb,0x4620e007,0xfd96f7f0,
+0x46294638,0x4b042200,0xe8bd4798,0x46c081f0,0x00021aec,0x0001e409,
+0x1e005c41,0x294bb500,0xe004f8dd,0xd0269a02,0x2921dc06,0x293dd01b,
+0x291fd015,0xe005d01c,0xd006298d,0xd01d29a2,0xd01d294c,0x0016f06f,
+0xf890e028,0xb90b3cfc,0xe0024618,0x3848f8d0,0x60106858,0xf642e01d,
+0x56c34316,0xf642e002,0x5ac323d0,0xe0146013,0x23cef642,0xf241e7f9,
+0xe7f663f8,0xe7f57c43,0x32fff10e,0x73fef64f,0xd902429a,0x001cf06f,
+0xf241e004,0xf82063f8,0x2000e003,0x46c0bd00,0x18432100,0x2dd0f8d3,
+0xf8d2b12a,0xb93b3094,0x309df892,0x3104b923,0xd1f22910,0xe0002000,
+0x47702001,0x41f0e92d,0x46164605,0xb921460f,0xf2404818,0xf7e1315d,
+0xb925ffab,0xf2404815,0xf7e1315e,0xeb07ffa5,0xf8d40486,0xf1b88050,
+0xd0010f00,0xe01b2000,0x719ef44f,0xf101fb06,0x6128f501,0x46281869,
+0xf7fd3104,0x6520ff0d,0xf06fb910,0xe00b001a,0x76032301,0x6d206147,
+0x30194905,0xf7e32206,0x6d23f869,0x629e4640,0x81f0e8bd,0x00021c25,
+0x00021c32,0x53d2f243,0xb97b5ac3,0x18424619,0x0358f641,0xb13258d2,
+0xb1236913,0x2b017a13,0x2b03d006,0x3104d004,0xd1f02910,0xe0012000,
+0x4080f44f,0x46c04770,0x4618b510,0x3008f89d,0x690cb963,0x6923b154,
+0x79a3b143,0xd9122b35,0xf240480a,0xf7e141f4,0xe00cff4f,0xd9062803,
+0xf2404806,0xf7e141fb,0x2400ff47,0xeb02e003,0xf8d30380,0x462040b0,
+0x46c0bd10,0x00021c38,0x7c43b570,0x4615460c,0x680cf8d0,0xd05d2b00,
+0x482fb921,0x7171f44f,0xff2ef7e1,0x3b017a23,0xd8532b0a,0xf003e8df,
+0x25061b06,0x52525252,0x003a5252,0x265af8b6,0x365af8b6,0xb2dbb292,
+0x4203ea42,0x0300f04f,0x20b4f8c4,0x30b8f8a4,0x0034f104,0x22802100,
+0xffd4f7e2,0xb11de036,0xf8c4682b,0xe0013104,0x5104f8c4,0xf8842300,
+0x21003108,0xb12d00cb,0x191b682a,0x88aa635a,0xe002871a,0x635d191b,
+0x3101871d,0xd1f12910,0xf8a42300,0xf8c430b8,0xe01730b4,0x190a2100,
+0xf8822336,0x33263436,0x3437f882,0x2b101c8b,0xd1f44619,0x190a2100,
+0xf8822336,0x33263448,0x3449f882,0x2b101c8b,0xd1f44619,0x46c0bd70,
+0x00021c38,0x460db5f7,0xf89d461f,0x46146020,0x4824b922,0x41cef240,
+0xfec6f7e1,0x2b0b7a23,0xb1b6d11f,0x786278a3,0x6086f504,0x7823431a,
+0x0006f100,0x78e24313,0x7923431a,0x79624313,0xd102431a,0x22012110,
+0x2110e001,0xf7e22202,0xf504fe63,0x46386186,0x22123104,0xff8af7e2,
+0xf8b5e01f,0xf013309e,0xd00e0f01,0x786278a3,0x7823431a,0x78e24313,
+0x7923431a,0x79624313,0xd102431a,0x01a4f105,0xf104e001,0xf8d501b4,
+0x46203094,0x96019300,0xf105463a,0x4c0203da,0xbdfe47a0,0x00021c38,
+0x1e008fed,0xf890b570,0x46053023,0xbf0c2b00,0x22362214,0x53c2f500,
+0x24043328,0xf853e003,0xb1291b04,0x42943401,0xf06fdbf9,0xe00c0415,
+0xf44f4b07,0x4798608b,0x0284eb05,0x0358f641,0x50d02800,0xf06fbf08,
+0x4620041a,0x46c0bd70,0x1e00578d,0x46c04770,0x4370f401,0x5f80f5b3,
+0xf5b3d002,0xd11b5f00,0x6340f401,0x6f40f5b3,0xf5b3d009,0xd1136f00,
+0x7340f401,0x7040f5b3,0x2001bf18,0xf401e00d,0xf5b07040,0xd1027f00,
+0x7000f5a0,0xf5b0e005,0xbf187080,0xe0002001,0x47702001,0x0ffff011,
+0xd103b510,0xf7f12101,0xe004fcaf,0x3848f8d0,0xf7f56818,0xbd10fad5,
+0xf400b570,0xf5b47440,0x46057f40,0xb2c0d101,0xf400e020,0xf5b36340,
+0xd0046f40,0xf240480e,0xf7e1416c,0xf5b4fe0d,0xd1047f00,0x28ddb2e8,
+0x1c83d80c,0xf5b4e00d,0xd0047f80,0xf2404806,0xf7e14174,0xb2e8fdfd,
+0xd8012802,0xe0012000,0xb2d81e83,0x46c0bd70,0x00021e79,0x4604b510,
+0xf240b131,0xf64f413b,0xf7f572f8,0xe00af97b,0x413cf240,0xf7f52207,
+0x4620f97f,0x413bf240,0xf7f52207,0xbd10f979,0x47f0e92d,0xf2404688,
+0x460461b7,0xf7f54691,0xf240f957,0x460561b6,0xf7f54620,0xf240f951,
+0x460661b5,0xf7f54620,0xf240f94b,0x460761b4,0xf7f54620,0xf04ff945,
+0x46620c00,0xfa504664,0xf013f304,0xd0010101,0xe0032101,0x0301f10c,
+0xfc83fa5f,0xb2da1c53,0xd0122a10,0x29003401,0xe00ed0ed,0x0310f1a2,
+0xf303fa57,0x0f01f013,0x2101d001,0xf10ce003,0xfa5f0301,0x1c53fc83,
+0x2a1fb2da,0x2900d811,0xe00ed0ec,0x0320f1a2,0xf303fa56,0x0f01f013,
+0x2101d001,0xf10ce003,0xfa5f0301,0x1c53fc83,0x2a2fb2da,0x2900d811,
+0xe00ed0ec,0x0330f1a2,0xf303fa55,0x0f01f013,0x2101d001,0xf10ce003,
+0xfa5f0301,0x1c53fc83,0x2a3fb2da,0x2900d801,0xf04fd0ec,0x22000e3f,
+0xfa55240f,0xf013f304,0xd0010101,0xe0032101,0x33fff10e,0xfe83fa5f,
+0xb2da1c53,0xd0122a10,0x29003c01,0xe00ed0ed,0x031ff1c2,0xf303fa56,
+0x0f01f013,0x2101d001,0xf10ee003,0xfa5f33ff,0x1c53fe83,0x2a1fb2da,
+0x2900d811,0xe00ed0ec,0x032ff1c2,0xf303fa57,0x0f01f013,0x2101d001,
+0xf10ee003,0xfa5f33ff,0x1c53fe83,0x2a2fb2da,0x2900d811,0xe00ed0ec,
+0x033ff1c2,0xf303fa50,0x0f01f013,0x2101d001,0xf10ee003,0xfa5f33ff,
+0x1c53fe83,0x2a3fb2da,0x2900d801,0xf888d0ec,0xf889e000,0xe8bdc000,
+0x46c087f0,0x20004601,0x4686b500,0x4380f04f,0xf30efa43,0x428a181a,
+0x0050ea4f,0x1a89d802,0x0000ea43,0x0e02f10e,0x0f20f1be,0x4288d1ee,
+0x3001bf38,0x46c0bd00,0x2a3fb5f0,0x4615b089,0x9f0e461c,0x2900dc23,
+0x004adb21,0x006d2318,0x3201b26d,0x33089305,0xb2569307,0x0385eb04,
+0xebc59303,0x33010306,0xf2409304,0x93004356,0x4255f240,0xa9039506,
+0x4c063301,0xb2aa47a0,0x2301e003,0x18d354bb,0x42b2b29a,0xb009ddf9,
+0x46c0bdf0,0x1e00705d,0xb5102300,0x3dbcf8c0,0x6144f240,0xf7f54604,
+0xf010f847,0xd0050301,0x46202202,0x613ff240,0xe0074613,0x0f02f010,
+0x4620d006,0x4153f240,0x4200f44f,0xf856f7f5,0x22084620,0xf2402300,
+0xf7f561da,0x4620f84f,0x23002280,0x61daf240,0xf848f7f5,0x46202203,
+0xf2402301,0xf7f561d6,0x2100f841,0x4b084620,0x6be04798,0xf94af7e6,
+0x6182f44f,0xbf142802,0x23602320,0x462022e0,0xf830f7f5,0x46c0bd10,
+0x1e007b0d,0xf8bdb570,0x460c601c,0x72fff64f,0x41b6f240,0x0303f006,
+0xf7f54605,0x220ff81f,0xf2404628,0xea0441b7,0xf7f50302,0x6be8f817,
+0xf924f7e6,0xd1112802,0x462802f3,0x41b1f240,0x52c0f44f,0x4378f403,
+0xf808f7f5,0xb29b00f3,0xf2404628,0x221841e6,0xf800f7f5,0x46c0bd70,
+0x2100b500,0x4b074686,0x18d000ca,0x459e58d3,0x7900d101,0x3101e004,
+0xd1f4290c,0x30fff04f,0x46c0bd00,0x00022d38,0x18422100,0x23003101,
+0x75532910,0x4770d1f9,0x41f0e92d,0x8018f8dd,0xf89d4604,0x4608701c,
+0x46162100,0x468c461d,0xeb04e015,0xf893030c,0xb116e004,0x0f80f01e,
+0xb12dd00b,0xf00e4a0f,0x56d3037f,0xdb042b00,0xea0e1842,0x71130308,
+0xf10c3101,0x68230c01,0xd3e6459c,0x60017d23,0xb13f7503,0x3015b935,
+0x0115f104,0xf7e22210,0xe001fcf1,0x47984b02,0x81f0e8bd,0x1e00c634,
+0x0001ed75,0x7c83b510,0x0307f003,0xd0012b04,0xd11b2b06,0xf0037903,
+0x28010003,0x2802d01b,0xb958d001,0x780ae01d,0x037ff002,0x0f80f012,
+0x6000f043,0xf440d019,0xe0166080,0xf240480b,0xf7e111cb,0xf44ffbe1,
+0xe00e7000,0x7903b11b,0x0f01f013,0x780bd005,0xf0034a05,0x5cd00307,
+0x780ae003,0xfbb22305,0xbd10f0f3,0x00022b1b,0x00022996,0x4604b530,
+0xb08b6800,0x2100b320,0x22284668,0xfc86f7e2,0x46082100,0x1863e010,
+0xf002791a,0x2b7f037f,0x7522d101,0xad0ae007,0xf803182b,0x9b002c24,
+0x33013001,0x31019300,0x42996823,0x9b00d3eb,0xf844a901,0x46203b04,
+0xf7e22210,0x2001fc87,0xbd30b00b,0x4605b570,0x461e460c,0xbb424610,
+0xe046f895,0xd0482900,0x182be020,0x4b25791a,0x3022f853,0x6f00f013,
+0xf003d012,0x4922027f,0x2314b126,0x1303fb02,0xe003685b,0xfb022314,
+0x585bf303,0xf44f005b,0xfbb3727a,0xe001f3f2,0x037ff003,0xd929429c,
+0xb2d81c43,0xd1dc4570,0xf895e024,0xb301e0a8,0xe01b2000,0xf8931943,
+0x4b122086,0xf8134910,0xf0033022,0xb126027f,0xfb022314,0x685b1303,
+0x2314e003,0xf303fb02,0x005b585b,0x727af44f,0xf3f2fbb3,0xd905429c,
+0xb2d81c43,0xd1e14570,0x4670e000,0x1e43b108,0xbd70b2d8,0x1e00d060,
+0x1e00c744,0x1e00d148,0x4a0cb510,0x4b0c468e,0x1080f890,0xbf142900,
+0x46194611,0xf8512200,0xb2d03022,0xd0084573,0x2a1d3201,0x4805d1f7,
+0x1187f640,0xfb28f7e1,0xbd102000,0x1e00d464,0x1e00d3f0,0x00022b3d,
+0xf890b570,0x460430a8,0xb923460d,0xf2404813,0xf7e151bb,0x2200fb15,
+0xb2d14b11,0x3022f853,0x037ff003,0xd10342ab,0x20a8f894,0xe0102000,
+0x2a113201,0x4809d1f0,0x51c5f240,0xfb00f7e1,0xe00a2000,0xf8931903,
+0x428b3086,0x1c43d005,0x4290b2d8,0xf04fd1f6,0xbd7030ff,0x00022b3d,
+0x1e00d148,0x4ff8e92d,0x30a8f890,0xb9234604,0xf24048c3,0xf7e1619e,
+0xf894fae3,0x18e330d5,0x5086f893,0x5d5a4bbf,0xf88418eb,0x7c5b20d7,
+0x30d8f884,0x5d5a4bbc,0xf88418eb,0x7c5b20d9,0xf884012a,0x4bb930da,
+0x290058d1,0x4620dd0c,0x4bb7b2c9,0x28004798,0xf894dd06,0xf88430ea,
+0xf04300e9,0xe0070310,0x30d5f894,0x30e9f884,0x30eaf894,0x0310f023,
+0x30eaf884,0x01294bab,0x685a18cb,0x20edf884,0xf884689a,0x68db20eb,
+0x30ecf884,0x58c94ba7,0xdd0c2900,0xb2c94620,0x47984ba3,0xdd062800,
+0x316cf8b4,0x0166f884,0x0310f043,0xf04fe007,0xf88433ff,0xf8b43166,
+0xf023316c,0xf8a40310,0xf8b4316c,0xf894316c,0xf44310d5,0xf8a47380,
+0x4b96316c,0x1165f884,0x1305eb03,0xf8d4685a,0xf884e000,0x891a2170,
+0xf8a4899b,0xf8a42176,0xf89e3178,0x2b00303e,0x8193f000,0xf8931863,
+0x4b8b2086,0x2022f853,0x3085f894,0xbf142b00,0x0300f44f,0xea432300,
+0xf8d40502,0xf1b33128,0xf0003fff,0xf0158166,0xd0276800,0x0f00f415,
+0x3080f894,0xf8dfd00e,0xf005b1fc,0xb123027f,0xfb022314,0x68dab303,
+0x2314e013,0xb303fb02,0xe00e689a,0xb1dcf8df,0x027ff005,0x2314b123,
+0xb303fb02,0xe004685a,0xfb022314,0xf853f303,0xf44f200b,0xfbb273fa,
+0xe001f0f3,0x007ff005,0x1120f8d4,0x6c00f011,0xf411d027,0xf8940f00,
+0xd00e3080,0xb19cf8df,0x027ff001,0x2314b123,0xb303fb02,0xe01368da,
+0xfb022314,0x689ab303,0xf8dfe00e,0xf001b180,0xb123027f,0xfb022314,
+0x685ab303,0x2314e004,0xf303fb02,0x200bf853,0x73faf44f,0xf2f3fbb2,
+0xf001e001,0x4290027f,0x7aa0f504,0x7790f504,0x7698f504,0x79a8f504,
+0xf8d4d952,0xf1b33138,0xd0103fff,0x2004f8de,0x313cf8d4,0x270cf8d2,
+0xf8de1a9b,0x42932048,0x4648d205,0x22104631,0xfac4f7e2,0xf04fe00a,
+0xf8c433ff,0x68233158,0x204cf893,0x40932301,0x3154f884,0x46392210,
+0xf7e24630,0x6821fab3,0xf8d2684a,0xf8c4370c,0xf8d4313c,0xf1b33148,
+0xd0113fff,0x270cf8d2,0x314cf8d4,0x6c8a1a9b,0xd2094293,0x3140f8d4,
+0xd10542ab,0x46514638,0xf7e22210,0xe00cfa97,0x22016821,0x303ff891,
+0xf303fa12,0x3128f8c4,0x304cf891,0xf884409a,0xf04f2124,0xe0bd33ff,
+0x0f00f1b8,0xf415d027,0xf8940f00,0xd00e3080,0xb088f8df,0x027ff005,
+0x2314b123,0xb303fb02,0xe01368da,0xfb022314,0x689ab303,0xf8dfe00e,
+0xf005b06c,0xb123027f,0xfb022314,0x685ab303,0x2314e004,0xf303fb02,
+0x200bf853,0x73faf44f,0xf0f3fbb2,0xf005e001,0xf1bc007f,0xd0380f00,
+0x0f00f411,0x3080f894,0xf8dfd01f,0xf001b030,0xb1ab027f,0xfb022314,
+0x68dab303,0x46c0e024,0x00022b3d,0x1e00d18c,0x1e00d1ae,0x1e00d1d0,
+0x0001efbd,0x1e00d2e0,0x1e00d148,0x1e00c744,0xfb022314,0x689ab303,
+0xf8dfe00e,0xf001b0e4,0xb123027f,0xfb022314,0x685ab303,0x2314e004,
+0xf303fb02,0x200bf853,0x73faf44f,0xf2f3fbb2,0xf001e001,0x4290027f,
+0x2210d23f,0x46504639,0xfa14f7e2,0x684a6821,0x370cf8d2,0x314cf8c4,
+0x3138f8d4,0x3ffff1b3,0xf8d2d011,0xf8d4270c,0x1a9b313c,0x42936c8a,
+0xf8d4d209,0x42ab3130,0x4638d105,0x22104631,0xf9f8f7e2,0x6821e00c,
+0xf8912201,0xfa12303f,0xf8c4f303,0xf8913128,0x409a304c,0x2124f884,
+0x46302210,0xf7e24649,0xf04ff9e5,0xf8c433ff,0x68233158,0x204cf893,
+0x40932301,0x3154f884,0xf89ee012,0x2201303f,0xf303fa12,0x3128f8c4,
+0xf8936823,0x409a304c,0x33fff04f,0x2124f884,0x3138f8c4,0x3148f8c4,
+0xf8c42300,0xf8845120,0xe8bd3160,0x46c08ff8,0x1e00c744,0x4ff8e92d,
+0x3076f890,0xe000f8d0,0x791918c3,0x46044bb1,0x18cb5c5a,0x2078f880,
+0xf8807f5b,0x4bae3079,0x18cb5c5a,0x207af880,0xf8807f5b,0xf89e307b,
+0x2b00303e,0x8169f000,0xc004f8de,0x3034f8dc,0xf0002b00,0x4ba58162,
+0x2021f853,0x3085f890,0xbf142b00,0x0300f44f,0xea432300,0xf8d00502,
+0xf1b330f4,0xf0003fff,0xf015813d,0xd0266b00,0x0f00f415,0x3080f890,
+0xf005d00e,0xb12b027f,0x23144897,0x0303fb02,0xe01368da,0x23144994,
+0x1303fb02,0xe00d689a,0x027ff005,0x4e90b12b,0xfb022314,0x685a6303,
+0x2314e004,0xf303fb02,0x581a488b,0x73faf44f,0xf0f3fbb2,0xf005e001,
+0xf8d4007f,0xf01110f0,0xd0266a00,0x0f00f411,0x3080f894,0xf001d00e,
+0xb12b027f,0x23144e80,0x6303fb02,0xe01368da,0x23144e7d,0x6303fb02,
+0xe00d689a,0x027ff001,0x4e79b12b,0xfb022314,0x685a6303,0x2314e004,
+0xf303fb02,0x599a4e74,0x73faf44f,0xf2f3fbb2,0xf001e001,0x4290027f,
+0x7984f504,0x07f0f104,0x06fcf104,0x788af504,0xf8d4d943,0xf1b33100,
+0xd00e3fff,0x270cf8dc,0x3104f8d4,0xf8de1a9b,0x42932048,0x4640d205,
+0x220c4631,0xf90ef7e2,0xf04fe003,0xf8c433ff,0x220c3118,0x46304639,
+0xf904f7e2,0x684a6821,0x370cf8d2,0x3104f8c4,0x310cf8d4,0x3ffff1b3,
+0xf8d2d011,0xf8d4270c,0x1a9b3110,0x42936c8a,0xf8d4d209,0x42ab3108,
+0x4638d105,0x220c4649,0xf8e8f7e2,0x6823e006,0x203ff893,0x40932301,
+0x30f4f8c4,0x33fff04f,0xf1bbe0a0,0xd0260f00,0x0f00f415,0x3080f894,
+0xf005d00e,0xb12b027f,0x23144843,0x0303fb02,0xe01368da,0x23144840,
+0x0303fb02,0xe00d689a,0x027ff005,0x483cb12b,0xfb022314,0x685a0303,
+0x2314e004,0xf303fb02,0x581a4837,0x73faf44f,0xf0f3fbb2,0xf005e001,
+0xf1ba007f,0xd0260f00,0x0f00f411,0x3080f894,0xf001d00e,0xb12b027f,
+0x2314492d,0x1303fb02,0xe01368da,0x2314492a,0x1303fb02,0xe00d689a,
+0x027ff001,0x4926b12b,0xfb022314,0x685a1303,0x2314e004,0xf303fb02,
+0x585a4921,0x73faf44f,0xf2f3fbb2,0xf001e001,0x4290027f,0x220cd23a,
+0x46484639,0xf87ef7e2,0x684a6821,0x370cf8d2,0x3110f8c4,0x3100f8d4,
+0x3ffff1b3,0xf8d2d011,0xf8d4270c,0x1a9b3104,0x42936c8a,0xf8d4d209,
+0x42ab30fc,0x4638d105,0x220c4631,0xf862f7e2,0x6823e006,0x203ff893,
+0x40932301,0x30f4f8c4,0x46414630,0xf7e2220c,0xf04ff855,0xf8c433ff,
+0xe0153118,0x1e00d0d4,0x1e00d10e,0x1e00d060,0x1e00c744,0x303ff89e,
+0x409a2201,0x33fff04f,0x20f4f8c4,0x3118f8c4,0x3100f8c4,0x310cf8c4,
+0xf8c42300,0xf88450f0,0xe8bd3160,0x46c08ff8,0x21fcf8d0,0xb5102300,
+0x31fcf8c0,0x4200f8d0,0x3200f8c0,0x4620b10a,0xbd104790,0x41f0e92d,
+0x46067a04,0x2c00460d,0xf8d0d12c,0x2b013210,0xf8d0d103,0x681b3214,
+0xb32db323,0x29207869,0xb15ad822,0x1ca8b301,0xe0044622,0xb10b5c13,
+0xd1032b20,0x428a3201,0xe015d1f8,0x4214f8d6,0xe00a2700,0x786b6822,
+0xd104429a,0x1ca91d20,0x47984b07,0x3424b130,0xf8d63701,0x429f3210,
+0xe001dbf0,0xe0002001,0xe8bd2000,0x46c081f0,0x1e00d671,0xf8d0b108,
+0x47700278,0xe92db082,0x290747f0,0x460d4680,0x93094692,0x9030f8dd,
+0x9e0a9f0b,0xd904461c,0xf240480f,0xf7e041ad,0xb104feeb,0x480cb926,
+0x41aff240,0xfee4f7e0,0xfb052314,0xf2418303,0x509c3244,0x509f3204,
+0xf8433204,0x32049002,0x3204509e,0xa002f843,0x47f0e8bd,0x4770b002,
+0x00022c1c,0x43f0e92d,0xfb022414,0xb0870404,0x549af504,0x3404ad01,
+0x46174689,0xcc0f4680,0x6823c50f,0x602b9a02,0xfb07230c,0xf8d39303,
+0x980531f4,0xb10ab35b,0x47904649,0x240c2000,0x9604fb00,0xf8d64640,
+0xf7fc11f4,0x42b8fd0b,0xfb07d1f5,0x46409504,0x11f4f8d5,0xfd02f7fc,
+0xfb002414,0xf2418004,0x58c33344,0xf8c64640,0xf8d531f4,0xf7fc11f4,
+0xfb00fcf5,0xf2418404,0x58e33354,0x31f8f8c6,0xf8c52300,0xb00731f4,
+0x83f0e8bd,0x4ff0e92d,0xfb022414,0xb0890404,0x549af504,0x3404ad03,
+0x46904689,0xcc0f4682,0x6823c50f,0xb014f8dd,0x9b07602b,0x230c9301,
+0x9203fb08,0x31fcf892,0xf8d2b113,0xb12331f4,0xf2404827,0xf7e041ce,
+0x4b26fe63,0xf8532400,0x230c5028,0x9303fb04,0xf8d34650,0xf7fc11f4,
+0x4607fcb9,0x4b1fb130,0x3020f853,0xd20942ab,0xe7ee4604,0x0f07f1b8,
+0x4819d004,0x41dcf240,0xfe46f7e0,0xf8534b17,0x42ab3027,0x4814d104,
+0x41ddf240,0xfe3cf7e0,0xfb082214,0x210ca002,0x9501fb04,0x3644f241,
+0xfb075983,0xf241a202,0xf8c53454,0xfb0831f4,0x59039101,0x31f8f8c5,
+0xf8c15993,0x591331f4,0x31f8f8c1,0x0f00f1bb,0x9801d002,0x47d84649,
+0xe8bdb009,0x46c08ff0,0x00022c1c,0x00022bfc,0xb5702a06,0x460c4606,
+0xd9044615,0xf2404818,0xf7e05151,0x230cfe09,0x4103fb05,0x72fcf501,
+0xb3237913,0x71132300,0x31f4f8d1,0x4630b1fb,0x462a4621,0x47984b0f,
+0xd0022d03,0xd00b2d04,0xf894e015,0xb11b322c,0x46214630,0xe00c2204,
+0x3214f894,0xe005b15b,0x3214f894,0xf8d4b13b,0xb9233218,0x46214630,
+0x4b032202,0xbd704798,0x00022c1c,0x0001f861,0x0001f8f1,0xe92d2a07,
+0x460741f0,0x4616460d,0x482ed904,0x5106f240,0xfdcaf7e0,0xfb062314,
+0xf2417303,0x589b3244,0xd04c2b00,0xfb06230c,0xf5015103,0x791372fc,
+0xd1442b00,0x71133301,0x31f4f8d1,0x4821b123,0x5112f240,0xfdb0f7e0,
+0xd1062e02,0x3224f8d5,0xd1342b00,0x3218f8d5,0x2e03e025,0x4638d109,
+0x22024629,0x47a04c18,0x46294638,0x47a02204,0x2e06e020,0x4638d103,
+0x22054629,0x1e73e00e,0xd8122b06,0xf003e8df,0x04111116,0x0016110d,
+0x3218f8d5,0x4638b99b,0x22024629,0x47984b0a,0xf8d5e008,0xb953323c,
+0x4806e004,0x5142f240,0xfd7af7e0,0x46294638,0x4b044632,0xe8bd4798,
+0x46c081f0,0x00022c1c,0x0001f861,0x0001f8f1,0x41f0e92d,0x435cf241,
+0x7e0b58c7,0x460d4680,0xf0402b00,0x684b8083,0x0f80f413,0x6908d17e,
+0x0380f443,0xb170604b,0x0119f101,0x4b432206,0xb1204798,0xf44f4842,
+0xf7e071c3,0x4640fd4d,0xf7f04629,0x463cf8f5,0xe0062600,0xb1136ae3,
+0x46296b60,0x36014798,0x6a7b3410,0xd3f5429e,0x2600462c,0x1120f8d4,
+0x4b36b149,0x0048f8d8,0x47982200,0xf8c42300,0xf8c43120,0x1c733140,
+0x3404b2de,0xd1ed2e08,0x732b2300,0xf0137e6b,0xd1230f01,0x327cf8d5,
+0xeb07689b,0x699c0383,0x4827b924,0x11bff240,0xfd16f7e0,0xd11242ac,
+0x327cf8d5,0x2274f8d5,0xeb07689b,0x619a0383,0xf8d4e00c,0x42ab3274,
+0xf8d5d104,0xf8c43274,0xe0033274,0x2c00461c,0xe021d1f3,0x42aa683a,
+0x4628d10e,0x47984b18,0xe00c6038,0x3278f8d2,0xd10442ab,0x3278f8d5,
+0x3278f8c2,0x461ae003,0xd1f32a00,0x4b11e012,0x0048f8d8,0x6a3a4629,
+0x8abb4798,0x3b012001,0xe00d82bb,0xe00b2000,0xf2404807,0xf7e011cb,
+0xe7d7fcd7,0xf2404804,0xf7e011db,0xe7e6fcd1,0x81f0e8bd,0x1e00d671,
+0x00022c1c,0x1e005c41,0x0001f7f9,0x1e005c15,0xf241b573,0x460e455c,
+0x46045941,0x6809b1e9,0xf7fca801,0x5963fb91,0xe0096819,0x2300b10e,
+0x4b0a760b,0x47984620,0xf7fca801,0x4601fb73,0xd1f32900,0xf241b14e,
+0x58e3435c,0xb1238a9b,0xf5014803,0xf7e07100,0xbd7cfc9f,0x0001fb25,
+0x00022c1c,0x46c04770,0x0023f890,0xbf142800,0x20102018,0x46c04770,
+0x47f0e92d,0xf243461e,0x56c343e3,0xf1b3460f,0x46903fff,0x1020f8bd,
+0xf243d104,0x5cc343e2,0xe012b113,0xd0102b01,0x00c8eb07,0x429e6b43,
+0x2001d201,0xd001e007,0xe0042000,0x428b8f03,0x2000bf94,0xb2c02001,
+0x2330e0ef,0x7203fb08,0x3150f8d2,0x70a8f502,0xf0c0429e,0xd10380e5,
+0x428b8883,0x80e0f200,0x3158f8d2,0x70acf502,0xd201429e,0xe0072301,
+0x2300d001,0x8883e004,0xbf34428b,0x23012300,0x0afff001,0xb1734699,
+0xfb082330,0xeb037303,0xf89303da,0xf0013130,0x41130207,0x0f01f013,
+0x80bef040,0x2330e0ab,0xfe03fb08,0x0407eb0e,0x75acf504,0xc004f8b5,
+0x6158f8c4,0xb91680a9,0xf24029ff,0xf504809c,0xe89572a8,0xe8820003,
+0x88910003,0x0150f8d4,0x03fff1a1,0xb29b8093,0xd2024299,0xf8c41e43,
+0x88aa3150,0x0302ebcc,0x2c01b29c,0x8083f240,0xd9052cff,0x7098f50e,
+0x46491838,0xe0782220,0x0301f10c,0xfc83fa1f,0x05fff00c,0x06fff002,
+0xd91642ae,0xebb008e8,0xd1120fd6,0x0307f002,0xfa1121ff,0x4470f303,
+0xf89019c0,0x401a2130,0x0307f00c,0x0308f1c3,0x400a4119,0x2130f880,
+0xf015e059,0xd0140307,0x0008f1c3,0x21ffb280,0x22304101,0xf202fb08,
+0x02d5eb02,0xf89219d2,0x400b3130,0x3130f882,0xebc01943,0xb2dd0004,
+0xf006b284,0x28070007,0x3001d013,0x408121ff,0xfb082230,0xeb02f202,
+0x19d202d6,0x3130f892,0xf882400b,0xebc03130,0xebc00306,0xb2de0004,
+0xf014b284,0xd0030f07,0x21dd481d,0xfbb0f7e0,0xd20b42b5,0xfb082030,
+0xf500f000,0x18387098,0x0201f1c5,0xeb001992,0xe01000d5,0x2430b19c,
+0xf404fb08,0x7498f504,0xf5c5193c,0x10d27280,0x00d5eb04,0xf7e12100,
+0x1c72fc59,0x21004620,0xf7e110d2,0xf00afc53,0x21010307,0x22304099,
+0xf202fb08,0x02daeb02,0xf89219d2,0x20003130,0xf882430b,0xe0003130,
+0xe8bd2001,0x46c087f0,0x00022c26,0x4ff0e92d,0xf893461e,0x6b5ba060,
+0x4607b0d3,0x4614468b,0x5170f89d,0x8014f8d2,0xd1492b00,0x2094f8d8,
+0x1307f240,0x0303ea02,0xf0002b00,0xf898822b,0x2b00309c,0x8226f000,
+0x7d9b6833,0x0f0ff013,0x68b3d108,0xd9282b07,0x6871489a,0x4b9a2208,
+0xbb104798,0x7d9a6833,0xea427ddb,0xf0122203,0xd00d0f0f,0x0345eb04,
+0x3160f8b3,0x020ff022,0x030ff023,0xd103429a,0xf0136863,0xd00c0f08,
+0x3068f8b6,0xf0002b00,0x692181fd,0xf0002900,0x690b81f9,0xf0002b00,
+0xf8d781f5,0x33013410,0x3410f8c7,0x35acf8d7,0xf8c73301,0xe1e735ac,
+0x68756913,0x7a1bb133,0xd1032b0b,0xf003782b,0xe0010301,0x099b78eb,
+0xf89663f3,0x4621302c,0x46429300,0x4c796bf3,0x47a04638,0x63b04639,
+0xf8d84604,0x46302094,0xfbc2f7fc,0xd10b2801,0x357cf8d7,0x33013801,
+0x357cf8c7,0x359cf8d7,0xf8c73301,0xe1be359c,0x486db924,0x11e9f240,
+0xfaeaf7e0,0x799b6bb3,0xd9042b35,0xf44f4868,0xf7e071f5,0x6bb1fae1,
+0x200ef991,0x300ff991,0x68b2189b,0xf0c0429a,0x7a0b81a3,0xd0262b04,
+0xd04b2b0b,0xd15f2b02,0x782a78ab,0x91031d28,0x2902ea43,0xfb80f7fc,
+0x3068f8b6,0xf0134680,0x99030501,0xf8cdd153,0x46389000,0x46434652,
+0x47a04c54,0xd04a2800,0x357cf8d7,0xf8c73301,0xf8d7357c,0x33013588,
+0x3588f8c7,0x786ae024,0xea43782b,0x79ab2902,0x041b79ea,0x6302ea43,
+0x4313792a,0xea43796a,0xf8b62802,0xf0133068,0xd12c0501,0x9000f8cd,
+0x46524638,0x4c414643,0xb32047a0,0x357cf8d7,0xf8c73301,0xf8d7357c,
+0x33013590,0x3590f8c7,0xe1544628,0x22101cac,0xf5014620,0xf7e16189,
+0x2800fa49,0x4621da0c,0x48352210,0xfa56f7e1,0x48346bb1,0x6189f501,
+0xf7e12210,0xe13bfa4f,0x0900f04f,0xf64246c8,0x5cfb2391,0xf8d7b9b3,
+0xf8d33dd0,0xf0133094,0xd10f0f08,0x7a136bb2,0xd1032b02,0x2b037993,
+0xe001d908,0xd0052b0b,0x7b1b69b3,0x0f08f013,0x80b5f040,0x69db6973,
+0x0f40f013,0x8118f040,0x7b0b69b1,0xea437b4a,0xf0432302,0x730b0308,
+0x734b0a1b,0x7a0b6bb1,0x2b0a3b01,0x8099f200,0xf003e8df,0x974c064c,
+0x97979797,0x008d9797,0x2b03798b,0xf897d802,0xb1433023,0x3104f8d1,
+0xd8044598,0xf891d01e,0x45533108,0x6832d01a,0x0540f106,0x31144628,
+0x4643320a,0x47a04c08,0xe01265f5,0x1e00d668,0x1e00d671,0x0001e73d,
+0x00022c26,0x0001fcdd,0x00022c67,0x00022c6d,0x1e003161,0x03e0f101,
+0x6bb165f3,0x054af106,0x31144628,0x464b6df2,0x47a04c68,0x0416f10d,
+0x21104628,0x4b664622,0x6bb34798,0xf9936870,0x68b1300e,0x1ac91818,
+0xe01d4622,0x6871ac46,0x46202203,0xfacef7e1,0x1ce06bb3,0x0114f103,
+0xf7e1691a,0x6bb3fac7,0x0516f10d,0x46206919,0x462a3103,0x47984b56,
+0x68706bb3,0x300ef993,0x181868b1,0x462a1ac9,0x47984b52,0x68706bb3,
+0x300ef993,0x181868b1,0xf04f1ac9,0x4b4e32ff,0x4b4e4798,0x429869b1,
+0x7b0bd107,0xea437b4a,0xf0232302,0xb29b0310,0x7b0be005,0xea437b4a,
+0xf0432302,0x730b0310,0x734b0a1b,0xf101e00f,0x68f20014,0x68333124,
+0xf82ef7e4,0xd16f2800,0xf8d7e005,0x3301357c,0x357cf8c7,0x6bb1e068,
+0xf9916873,0x189b200e,0xf9916073,0xf991300e,0x18d2200f,0x1a9b68b3,
+0xf99160b3,0xf991300e,0x18d2200f,0x1a9b6933,0x69b36133,0x7b5b7b1a,
+0x2303ea42,0x0f08f013,0xf013d02a,0xd0270f10,0x357cf8d7,0xf8c73301,
+0xf8d7357c,0x3301358c,0x358cf8c7,0x3594f8d7,0xf8c73301,0x7a0b3594,
+0xd0042b02,0xd0082b03,0xd0062b01,0xf8d7e030,0x330135a8,0x35a8f8c7,
+0xf8d7e02a,0x330135a0,0x35a0f8c7,0x359cf8d7,0xf8c73301,0xe01f359c,
+0x6bb16972,0x60f08a90,0xf896b1e1,0xb933302d,0x100ff991,0x0100ebc1,
+0x60f14610,0x4611e009,0x46584b0f,0x6bb34798,0xf9938a82,0xebc1100f,
+0xf7fc0102,0xf8c6fa03,0xf8a68064,0xe0019062,0xe0002000,0xb0532001,
+0x8ff0e8bd,0x1e0032a1,0x1e002431,0x1e002489,0x1e003981,0xdebb20e3,
+0x1e003e21,0x00f25000,0x00ac0f00,0x004c9000,0x02f25000,0x50000000,
+0x000102f2,0x01f25000,0x18100000,0x00000000,0x540a0000,0x3a504152,
+0x70797420,0x64252065,0x7065202c,0x78302063,0x202c7825,0x72737063,
+0x25783020,0x73202c78,0x20727370,0x78257830,0x20000a2c,0x20307220,
+0x25783020,0x2c783830,0x20317220,0x30257830,0x202c7838,0x20203272,
+0x30257830,0x202c7838,0x20203372,0x30257830,0x0a2c7838,0x72202000,
+0x30202034,0x38302578,0x72202c78,0x78302035,0x78383025,0x3672202c,
+0x78302020,0x78383025,0x3772202c,0x78302020,0x78383025,0x20000a2c,
+0x20387220,0x25783020,0x2c783830,0x20397220,0x30257830,0x202c7838,
+0x20303172,0x30257830,0x202c7838,0x20313172,0x30257830,0x0a2c7838,
+0x72202000,0x30203231,0x38302578,0x73202c78,0x78302070,0x78383025,
+0x726c202c,0x78302020,0x78383025,0x6370202c,0x78302020,0x78383025,
+0x6e68000a,0x65747264,0x6d72615f,0x7200632e,0x616c6365,0x73206d69,
+0x69746365,0x32206e6f,0x6552203a,0x6e727574,0x25206465,0x79622064,
+0x20736574,0x74206f74,0x68206568,0x0a706165,0x63657200,0x6d69616c,
+0x63657320,0x6e6f6974,0x203a3120,0x75746552,0x64656e72,0x20642520,
+0x65747962,0x6f742073,0x65687420,0x61656820,0x4d000a70,0x726f6d65,
+0x73752079,0x3a656761,0x6554000a,0x203a7478,0x25286425,0x2c294b64,
+0x74614420,0x25203a61,0x64252864,0x202c294b,0x3a737342,0x28642520,
+0x294b6425,0x7453202c,0x3a6b6361,0x4b642520,0x7241000a,0x20616e65,
+0x61746f74,0x25203a6c,0x64252864,0x202c294b,0x65657246,0x6425203a,
+0x4b642528,0x49202c29,0x7375206e,0x25203a65,0x64252864,0x202c294b,
+0x3a4d5748,0x28642520,0x294b6425,0x6e49000a,0x65737520,0x6f202b20,
+0x68726576,0x3a646165,0x28642520,0x294b6425,0x614d202c,0x656d2078,
+0x79726f6d,0x206e6920,0x3a657375,0x28642520,0x294b6425,0x614d000a,
+0x636f6c6c,0x69616620,0x6572756c,0x756f6320,0x203a746e,0x000a6425,
+0x63617453,0x6f62206b,0x6d6f7474,0x73616820,0x65656220,0x766f206e,
+0x72777265,0x65747469,0x53000a6e,0x6b636174,0x746f6220,0x3a6d6f74,
+0x25783020,0x6c202c70,0x203a6d77,0x70257830,0x7563202c,0x203a7272,
+0x70257830,0x6f74202c,0x30203a70,0x0a702578,0x65657246,0x61747320,
+0x203a6b63,0x78257830,0x29642528,0x6d776c20,0x7830203a,0x25287825,
+0x490a2964,0x6573756e,0x61747320,0x203a6b63,0x78257830,0x29642528,
+0x6d776820,0x7830203a,0x25287825,0x000a2964,0x45535341,0x22205452,
+0x20227325,0x6c206e69,0x20656e69,0x000a6425,0x72646e68,0x632e6574,
+0x00756d00,0x6d00776d,0x6f742077,0x206c6174,0x0a4b6425,0x646e6800,
+0x5f657472,0x736e6f63,0x3f00632e,0x003f000a,0x74756973,0x2e736c69,
+0x65640063,0x00646976,0x69306c77,0x62730064,0x2f75252f,0x6f727000,
+0x00646964,0x72616f62,0x70797464,0x6f620065,0x66647261,0x7367616c,
+0x61747800,0x6572666c,0x656c0071,0x00636464,0x74756273,0x2e736c69,
+0x73250063,0x6425203a,0x25000a20,0x20783230,0x00732500,0x30256325,
+0x25007833,0x64252e64,0x2e64252e,0x62006425,0x74756d63,0x2e736c69,
+0x6e550063,0x69666564,0x2064656e,0x6f727265,0x64252072,0x69706700,
+0x0064256f,0x6f697067,0x58585858,0x004b4f00,0x65646e55,0x656e6966,
+0x72652064,0x00726f72,0x20646142,0x75677241,0x746e656d,0x64614200,
+0x74704f20,0x006e6f69,0x20746f4e,0x4e007075,0x6420746f,0x006e776f,
+0x20746f4e,0x4e005041,0x5320746f,0x42004154,0x4b206461,0x49207965,
+0x7865646e,0x64615200,0x4f206f69,0x4e006666,0x6220746f,0x20646e61,
+0x6b636f6c,0x4e006465,0x6c63206f,0x006b636f,0x20646142,0x65746152,
+0x6c617620,0x65736575,0x61420074,0x61422064,0x4200646e,0x65666675,
+0x6f742072,0x6873206f,0x0074726f,0x66667542,0x74207265,0x6c206f6f,
+0x00676e6f,0x79737542,0x746f4e00,0x73734120,0x6169636f,0x00646574,
+0x20646142,0x44495353,0x6e656c20,0x74754f00,0x20666f20,0x676e6152,
+0x68432065,0x656e6e61,0x6142006c,0x68432064,0x656e6e61,0x6142006c,
+0x64412064,0x73657264,0x6f4e0073,0x6e452074,0x6867756f,0x73655220,
+0x6372756f,0x55007365,0x7075736e,0x74726f70,0x42006465,0x6c206461,
+0x74676e65,0x6f4e0068,0x65522074,0x00796461,0x20746f4e,0x6d726550,
+0x65747469,0x6f4e0064,0x6d654d20,0x0079726f,0x20746f4e,0x52206e49,
+0x65676e61,0x454d5700,0x746f4e20,0x616e4520,0x64656c62,0x50535400,
+0x4e204345,0x4620746f,0x646e756f,0x4d434100,0x746f4e20,0x70755320,
+0x74726f70,0x4e006465,0x5720746f,0x4120454d,0x636f7373,0x69746169,
+0x53006e6f,0x204f4944,0x20737542,0x6f727245,0x6f440072,0x656c676e,
+0x746f4e20,0x63634120,0x69737365,0x00656c62,0x6f636e49,0x63657272,
+0x65762074,0x6f697372,0x3025006e,0x253a7832,0x3a783230,0x78323025,
+0x3230253a,0x30253a78,0x253a7832,0x00783230,0x736d6362,0x2e6d6f72,
+0x67610063,0x6e680030,0x69686364,0x632e6370,0x646e6800,0x2e756d70,
+0x6d720063,0x72006e69,0x0078616d,0x74642572,0x64257200,0x00000064,
+0x0001cd81,0x1e004a49,0x1e004edd,0x1e004a95,0x1e004aad,0x1e004ac1,
+0x1e004ad5,0x1e004b35,0x1e005325,0x1e004aed,0x00001bd1,0x1e004d89,
+0x1e0051bd,0x1e0046c1,0x1e0046c9,0x1e0046e9,0x1e004b5d,0x1e004769,
+0x1e004e99,0x1e004a29,0x1e004b05,0x1e004719,0x1e004b1d,0x1e0056e9,
+0x1e00558d,0x00001c29,0x1e005195,0x1e00474d,0x00001c51,0x1e0045b1,
+0x00000000,0x00000000,0x00000000,0x1e004701,0x1e004691,0x00000024,
+0x0001cd81,0x1e004945,0x1e005105,0x1e004989,0x1e0049a1,0x1e0049b5,
+0x1e0049c9,0x1e005075,0x1e005459,0x1e0049e1,0x00001bfd,0x1e004e11,
+0x1e0051bd,0x1e0046c1,0x1e0046c9,0x1e0046e9,0x1e004f61,0x1e004769,
+0x1e0050c1,0x1e004925,0x1e0049f9,0x1e004719,0x1e004a11,0x1e0056e9,
+0x1e00558d,0x00001c29,0x1e005195,0x1e00474d,0x00001c51,0x1e0045b1,
+0x00000000,0x00000000,0x00000000,0x1e004701,0x1e004691,0x00000024,
+0x64646e68,0x632e616d,0x78742600,0x69617661,0x6e68006c,0x65747264,
+0x6c736f5f,0x0000632e,0x00000078,0x000000f0,0x000001e0,0x000003c0,
+0x00000780,0x0000103c,0x72646e68,0x6c5f6574,0x2e667562,0x6e680063,
+0x6d726164,0x7200632e,0x74736d61,0x69647962,0x4e280073,0x7564206f,
+0x6572706d,0x77207367,0x6f687469,0x42207475,0x42444d43,0x000a2947,
+0x7478616d,0x746b7078,0x6d6f6c67,0x6c787400,0x64797a61,0x79616c65,
+0x67787400,0x616d6f6c,0x6e67696c,0x67787400,0x006d6f6c,0x77737874,
+0x6e656c71,0x64787400,0x00706f72,0x666b6361,0x66747361,0x61006477,
+0x69736b63,0x6874657a,0x72006473,0x6b636178,0x64730073,0x646d6370,
+0x632e7665,0x71787400,0x6e656c20,0x6425203a,0x616d203a,0x64252878,
+0x64000a29,0x70706f72,0x66206465,0x656d6172,0x64252073,0x6f48000a,
+0x41207473,0x20736b63,0x65286425,0x696c7078,0x20746963,0x2b206425,
+0x67697020,0x61627967,0x64656b63,0x0a642520,0x73756200,0x72726520,
+0x3a73726f,0x66787220,0x666f6669,0x3a776f6c,0x0a642520,0x73756200,
+0x6f6c6620,0x6e6f6377,0x6c6f7274,0x7872203a,0x3a6d696c,0x2c642520,
+0x68787220,0x6d696c5f,0x6425203a,0x6f64000a,0x656c676e,0x6f6c6620,
+0x6e6f6377,0x6c6f7274,0x6366203a,0x6425203a,0x7865202c,0x63696c70,
+0x203a7469,0x202c6425,0x6c696166,0x6425203a,0x4453000a,0x45444f49,
+0x43500056,0x4149434d,0x00564544,0x69707367,0x726f7764,0x53470064,
+0x44204950,0x64726f77,0x646f4d20,0x6e652065,0x656c6261,0x47000a64,
+0x20495053,0x726f7744,0x6f4d2064,0x44206564,0x62617369,0x0a64656c,
+0x73756200,0x74617473,0x64730073,0x646d6370,0x725f7665,0x632e6574,
+0x70647300,0x63646d63,0x64256364,0x3a732500,0x6f724220,0x6f636461,
+0x4453206d,0x444d4350,0x43444320,0x69726420,0x0a726576,0x6d636200,
+0x2e636463,0x75620063,0x64003a73,0x5f6c676e,0x2e657472,0x6c770063,
+0x63620030,0x70746f6d,0x0a00632e,0x30257830,0x003a7834,0x25783020,
+0x00783430,0x00070e15,0x1c232a31,0x383f464d,0x545b6269,0x70777e85,
+0x8c939aa1,0xa8afb6bd,0xc4cbd2d9,0xe0e7eef5,0xfc030a11,0x181f262d,
+0x343b4249,0x50575e65,0x6c737a81,0x888f969d,0xa4abb2b9,0xc0c7ced5,
+0xdce3eaf1,0xf8ff060d,0x141b2229,0x30373e45,0x4c535a61,0x686f767d,
+0x848b9299,0xa0a7aeb5,0xbcc3cad1,0xd8dfe6ed,0xf4fb0209,0x10171e25,
+0x2c333a41,0x484f565d,0x646b7279,0xfee990d6,0xb73de1cc,0xc214b616,
+0x052cfb28,0x769a672b,0xc304be2a,0x261344aa,0x99068649,0xf450429c,
+0x7a98ef91,0x430b5433,0x62accfed,0xa91cb3e4,0x95e808c9,0xfa94df80,
+0xa63f8f75,0xfca70747,0xba1773f3,0x193c5983,0xa84f85e6,0xb2816b68,
+0x8bda6471,0x4b0febf8,0x359d5670,0x5e0e241e,0xa2d15863,0x3b7c2225,
+0x87782101,0x574600d4,0x5227d39f,0xe702364c,0x9ec8c4a0,0xd28abfea,
+0xb538c740,0xcef2f7a3,0xa11561f9,0xa45daee0,0x551a349b,0x303293ad,
+0xe3b18cf5,0x2ee2f61d,0x60ca6682,0xab2329c0,0x6f4e530d,0x4537dbd5,
+0x2f8efdde,0x726aff03,0x515b6c6d,0x92af1b8d,0x7fbcddbb,0x415cd911,
+0xd85a101f,0x8831c10a,0xbd7bcda5,0x12d0742d,0xb0b4e5b8,0x4a976989,
+0x7e77960c,0x09f1b965,0x84c66ec5,0xec7df018,0x204ddc3a,0x3e5fee79,
+0x4839cbd7,0x725f6c77,0x632e6574,0x72756300,0x6874655f,0x64617265,
+0x70007264,0x5f6d7265,0x65687465,0x64646172,0x6c770072,0x77006425,
+0x3a64256c,0x6f724220,0x6f636461,0x4342206d,0x3430254d,0x30382078,
+0x31312e32,0x72695720,0x73656c65,0x6f432073,0x6f72746e,0x72656c6c,
+0x0a732520,0x322e3400,0x302e3831,0x7700302e,0x6166006c,0x64656c69,
+0x206f7420,0x74696e69,0x72697720,0x73656c65,0x69732073,0x202c6564,
+0x3a727265,0x0a642520,0x256c7700,0x25203a64,0x73252073,0x72657620,
+0x6e6f6973,0x0a732520,0x63654400,0x20312020,0x38303032,0x3a393100,
+0x333a3132,0x77680038,0x746c6966,0x64007265,0x73706565,0x7065656c,
+0x00000000,0x00020fba,0x00000000,0x00000008,0x00020fc3,0x00000001,
+0x00000001,0x00000000,0x00000000,0x00000000,0x02000001,0x00040002,
+0x00080002,0x01000002,0x02000002,0x04000002,0x10000002,0x03020001,
+0x00000000,0x00000000,0x06000204,0x0e0c0a08,0x03020001,0x00000002,
+0x00000000,0x0000b689,0x00004bf5,0x00000000,0x00000000,0x2e636c77,
+0x6c770063,0x203a6425,0x204d5350,0x7263696d,0x646f636f,0x61772065,
+0x64686374,0x6620676f,0x64657269,0x20746120,0x28206425,0x6f636573,
+0x2973646e,0x6552202e,0x74746573,0x2e676e69,0x6c77000a,0x203a6425,
+0x204d5350,0x7263696d,0x646f636f,0x61772065,0x64686374,0x6620676f,
+0x64657269,0x20746120,0x28206425,0x6f636573,0x2973646e,0x6c77000a,
+0x203a6425,0x646d7370,0x67756265,0x25783020,0x2c783830,0x79687020,
+0x75626564,0x78302067,0x78383025,0x7370202c,0x72625f6d,0x78302063,
+0x78383025,0x2020000a,0x77202020,0x74637065,0x7830206c,0x78383025,
+0x6370202c,0x6c74636d,0x25783020,0x2c783830,0x6d637020,0x74617473,
+0x25783020,0x0a783830,0x66737400,0x6d69745f,0x6f6c7265,0x78302077,
+0x000a7825,0x5f657872,0x72796870,0x20325f73,0x78257830,0x7872202c,
+0x68705f65,0x5f737279,0x78302033,0x70207825,0x78727968,0x74617473,
+0x20307375,0x78257830,0x6870202c,0x73787279,0x75746174,0x30203173,
+0x0a782578,0x65787400,0x6174735f,0x20737574,0x78257830,0x79687020,
+0x72657874,0x20726f72,0x000a6425,0x504d4350,0x67655243,0x203d2030,
+0x78257830,0x4350000a,0x5243504d,0x20316765,0x7830203d,0x000a7825,
+0x504d4350,0x67655243,0x203d2032,0x78257830,0x414c000a,0x72205453,
+0x74657365,0x6f726620,0x6425206d,0x7974202c,0x25206570,0x74000a64,
+0x20656d69,0x7473616c,0x73696420,0x64726163,0x25783020,0x63202c78,
+0x6c20746e,0x20747361,0x63736964,0x20647261,0x78257830,0x7563202c,
+0x65722072,0x20746573,0x20746e63,0x78257830,0x4552000a,0x20544553,
+0x54415453,0x47455220,0x25783020,0x50000a78,0x203a2043,0x3020000a,
+0x20782578,0x62002020,0x66637373,0x77003a67,0x68637461,0x00676f64,
+0x69646172,0x7363006f,0x75710061,0x00746569,0x6f707370,0x77006c6c,
+0x5f636573,0x0079656b,0x736f6c63,0x656e6465,0x61650074,0x65725f70,
+0x69727473,0x77007463,0x00636573,0x5f636c77,0x61766f69,0x77007372,
+0x695f636c,0x7261766f,0x6f725f73,0x7665726d,0x65760030,0x6469646e,
+0x616f6200,0x65726472,0x72730076,0x65726d6f,0x6f620076,0x66647261,
+0x7367616c,0x61610032,0x61006735,0x00673261,0x00316161,0x00306161,
+0x00316761,0x68637874,0x006e6961,0x68637872,0x006e6961,0x6d306c69,
+0x64616361,0x74007264,0x75645f78,0x635f7974,0x656c6379,0x64666f5f,
+0x7874006d,0x7475645f,0x79635f79,0x5f656c63,0x006b6363,0x20617473,
+0x656d7700,0x6f6e0020,0x6e776f64,0x65720020,0x206d6c63,0x706d6100,
+0x00207564,0x64736d61,0x72002075,0x5f697373,0x6e657665,0x74730074,
+0x65725f61,0x5f797274,0x656d6974,0x73736100,0x725f636f,0x79727465,
+0x78616d5f,0x696f6a00,0x72705f6e,0x66006665,0x74716572,0x6b636172,
+0x616c7600,0x6f6d5f6e,0x77006564,0x7700656d,0x625f656d,0x645f7373,
+0x62617369,0x7700656c,0x6e5f656d,0x6b63616f,0x656d7700,0x7370615f,
+0x6d770064,0x70615f65,0x745f6473,0x67676972,0x77007265,0x745f656d,
+0x67676972,0x615f7265,0x6d770063,0x75615f65,0x745f6f74,0x67676972,
+0x73007265,0x5f646e65,0x6c6c756e,0x61746164,0x656d7700,0x736f715f,
+0x6f666e69,0x656d7700,0x0070645f,0x5f656d77,0x63657270,0x6575715f,
+0x676e6975,0x656d7700,0x756f635f,0x7265746e,0x6d770073,0x6c635f65,
+0x5f726165,0x6e756f63,0x73726574,0x666c7700,0x75746165,0x6c666572,
+0x77006761,0x615f656d,0x74735f63,0x65700061,0x68635f72,0x695f6e61,
+0x006f666e,0x5f617473,0x6f666e69,0x61707700,0x67736d5f,0x70770073,
+0x75615f61,0x77006874,0x635f6170,0x76007061,0x5f72646e,0x77006569,
+0x65696170,0x65737700,0x65725f63,0x69727473,0x66007463,0x74676172,
+0x73657268,0x5f610068,0x7461726d,0x67620065,0x61726d5f,0x35006574,
+0x726d5f67,0x00657461,0x6d5f6732,0x65746172,0x6e617200,0x73610064,
+0x72636f73,0x006d616f,0x53534249,0x696f6a5f,0x6e6f5f6e,0x7200796c,
+0x5f6d616f,0x0066666f,0x73616572,0x00636f73,0x6f737361,0x6e695f63,
+0x61006f66,0x636f7373,0x7165725f,0x7365695f,0x73736100,0x725f636f,
+0x5f707365,0x00736569,0x6e657665,0x736d5f74,0x72007367,0x74657365,
+0x3131645f,0x73746e63,0x73626900,0x6c615f73,0x65776f6c,0x6f630064,
+0x72746e75,0x696c5f79,0x655f7473,0x6e657478,0x00646564,0x7361636d,
+0x696c5f74,0x63007473,0x736e6168,0x00636570,0x5f6e6362,0x656d6974,
+0x0074756f,0x6e616373,0x75736572,0x5f73746c,0x726e696d,0x00697373,
+0x61637369,0x7369006e,0x726e6163,0x6c757365,0x63007374,0x746e756f,
+0x61007972,0x636f7475,0x746e756f,0x645f7972,0x75616665,0x6100746c,
+0x6e65746e,0x0073616e,0x73736269,0x616f635f,0x6373656c,0x6c615f65,
+0x65776f6c,0x73700064,0x6c6c6f70,0x6472705f,0x6e636200,0x5f696c5f,
+0x006e6362,0x5f6e6362,0x645f696c,0x006d6974,0x6f737361,0x696c5f63,
+0x6e657473,0x666e6900,0x635f6172,0x69666e6f,0x61727567,0x6e6f6974,
+0x6c756600,0x616f726c,0x7265706d,0x00646f69,0x5f637462,0x67616c66,
+0x74620073,0x61705f63,0x736d6172,0x66787400,0x5f6c6961,0x6d616f72,
+0x65726874,0x6d006873,0x656c6773,0x006c6576,0x6e776f64,0x65766f5f,
+0x64697272,0x6c610065,0x6c756d6c,0x6c006974,0x63616765,0x72705f79,
+0x0065626f,0x5f326d70,0x65656c73,0x65725f70,0x6d700074,0x5f64696b,
+0x6f666e69,0x63746200,0x646f6d5f,0x74620065,0x69775f63,0x64006572,
+0x63797475,0x656c6379,0x6b63635f,0x74756400,0x63796379,0x6f5f656c,
+0x006d6466,0x5f637462,0x63757473,0x61775f6b,0x74620072,0x74735f63,
+0x5f6b6375,0x65746564,0x64657463,0x61726e00,0x6d006574,0x5f6f6d69,
+0x63007370,0x6d5f7275,0x65737363,0x696d0074,0x665f6f6d,0x626f0074,
+0x635f7373,0x0078656f,0x7373626f,0x6163735f,0x61705f6e,0x736d6172,
+0x746e6900,0x30346c6f,0x746e6900,0x30346c6f,0x7465645f,0x6d696d00,
+0x73735f6f,0x6674735f,0x6f6d6e00,0x6e006564,0x64716572,0x625f6e00,
+0x6d6e0077,0x5f65646f,0x746f7270,0x69746365,0x6e006e6f,0x65646f6d,
+0x6f72705f,0x74636574,0x5f6e6f69,0x7265766f,0x65646972,0x5f666700,
+0x746f7270,0x69746365,0x67006e6f,0x72705f66,0x6365746f,0x6e6f6974,
+0x65766f5f,0x64697272,0x696d0065,0x625f6f6d,0x61635f77,0x69720070,
+0x73007366,0x5f636274,0x73007872,0x5f636274,0x73007874,0x725f6967,
+0x67730078,0x78745f69,0x63787400,0x6e696168,0x746e635f,0x73787400,
+0x61657274,0x7200736d,0x61686378,0x635f6e69,0x7200746e,0x72747378,
+0x736d6165,0x6c656400,0x735f6174,0x73746174,0x746e695f,0x61767265,
+0x6564006c,0x5f61746c,0x74617473,0x70690073,0x6d5f3676,0x74736163,
+0x76616e00,0x7365725f,0x775f7465,0x645f7261,0x62617369,0x0000656c,
+0x0060005e,0x00780062,0x0060005e,0x00780062,0x0000ea55,0x0000d339,
+0x00000000,0x00000000,0x00021934,0x00800000,0x00000001,0x000219ef,
+0x00000001,0x00020008,0x000219f9,0x0000000f,0x00000003,0x00021a07,
+0x00800010,0x00000007,0x00021a17,0x00000002,0x00070008,0x00021a28,
+0x00000003,0x00070008,0x00021a39,0x00800004,0x00000001,0x00021a4b,
+0x00000006,0x00000002,0x00021a56,0x0000001b,0x00020008,0x00021a6c,
+0x0000001c,0x00020008,0x00021a85,0x0000000c,0x00000008,0x00021a94,
+0x0000001d,0x00020008,0x00000000,0x00000000,0x00000000,0x5f636c77,
+0x64706d61,0x00632e75,0x64706d61,0x65720075,0x61007073,0x7564706d,
+0x6174735f,0x6d007374,0x78747861,0x62757000,0x78616d2e,0x25207874,
+0x25000a64,0x000a3a73,0x255b6425,0x00095d64,0x7273636d,0x73657461,
+0x61007465,0x7564706d,0x7465725f,0x203a7972,0x000a6425,0x6d617874,
+0x3a756470,0x2c642520,0x6d787420,0x3a756470,0x0a642520,0x20616200,
+0x666e6f63,0x000a203a,0x203a6425,0x203a7874,0x202c6425,0x203a7872,
+0x0a206425,0x20585400,0x77206162,0x6f646e69,0x73207377,0x20657a69,
+0x000a6425,0x62205852,0x69772061,0x776f646e,0x69732073,0x2520657a,
+0x61000a64,0x7564706d,0x6469745f,0x706d6100,0x645f7564,0x69736e65,
+0x61007974,0x7564706d,0x5f78725f,0x74636166,0x6100726f,0x7564706d,
+0x6e65735f,0x64615f64,0x00616264,0x64706d61,0x65735f75,0x645f646e,
+0x61626c65,0x706d6100,0x6d5f7564,0x61756e61,0x6f6d5f6c,0x61006564,
+0x7564706d,0x64706d5f,0x6d610075,0x5f756470,0x72746572,0x696c5f79,
+0x5f74696d,0x00646974,0x64706d61,0x72725f75,0x7465725f,0x6c5f7972,
+0x74696d69,0x6469745f,0x706d6100,0x625f7564,0x73775f61,0x00657a69,
+0x64706d61,0x78725f75,0x6469745f,0x00000000,0x00021af8,0x0080000c,
+0x00000001,0x00021afe,0x0000000b,0x00000001,0x00021b0a,0x00000003,
+0x00000005,0x00021b16,0x00000004,0x00000007,0x00021b25,0x00800005,
+0x00000001,0x00000000,0x00000000,0x00000000,0x5f636c77,0x64736d61,
+0x00632e75,0x64736d61,0x6d610075,0x5f756473,0x63616f6e,0x6d61006b,
+0x5f756473,0x73676761,0x6d610066,0x5f756473,0x62676761,0x73657479,
+0x736d6100,0x725f7564,0x78616d78,0x00000000,0x00021be5,0x00000001,
+0x00000007,0x00021bed,0x00000000,0x00000007,0x00021bf5,0x00000000,
+0x00000007,0x00021bfc,0x00000001,0x00000007,0x00021c04,0x00000003,
+0x00400008,0x00021c10,0x00000002,0x00000002,0x0002143d,0x00000004,
+0x02940008,0x00021c20,0x00000005,0x00000008,0x00021c19,0x00000006,
+0x00000001,0x00021c1d,0x00000007,0x20000008,0x00021f29,0x0000000b,
+0x00000008,0x00000000,0x00000000,0x00000000,0x5f636c77,0x65736162,
+0x636f695f,0x632e6c74,0x73616200,0x6f695f65,0x73726176,0x412f4e00,
+0x5f673200,0x65746172,0x5f673500,0x65746172,0x725f6100,0x00657461,
+0x725f6762,0x00657461,0x656d6362,0x726f7272,0x00727473,0x656d6362,
+0x726f7272,0x63706d00,0x70746f00,0x706d7564,0x636c7700,0x7373625f,
+0x2e676663,0xffff0063,0xffffffff,0x5f636c77,0x2e79656b,0x6c770063,
+0x6d6c5f63,0x635f6361,0x77007061,0x615f636c,0x63617474,0x6d6c5f68,
+0x77006361,0x765f636c,0x64696c61,0x6168635f,0x6570736e,0x00000063,
+0x00022098,0x00000002,0x00000008,0x000220a1,0x00000003,0x00000000,
+0x000220a9,0x00000004,0x00000000,0x000220b3,0x00000005,0x00000008,
+0x000220c0,0x00000006,0x00000007,0x000220cd,0x00000008,0x00000007,
+0x00020f01,0x00000005,0x00000008,0x000220d7,0x00000007,0x00000008,
+0x00000000,0x00000000,0x00000000,0x766f7872,0x776f6c66,0x73616320,
+0x61207365,0x25206572,0x6d000a64,0x635f7363,0x746e756f,0x6425203a,
+0x78300020,0x20783225,0x31314400,0x20544820,0x20504143,0x20657261,
+0x4c4c554e,0x2a2a000a,0x2054482a,0x49444441,0x75442045,0x203a706d,
+0x72617453,0x2a2a2a74,0x6461000a,0x65695f64,0x74633e2d,0x68635f6c,
+0x7830203a,0x78323025,0x6461000a,0x65695f64,0x79623e2d,0x3a316574,
+0x25783020,0x0a783230,0x64646100,0x2d65695f,0x6d706f3e,0x3a65646f,
+0x25783020,0x0a783430,0x64646100,0x2d65695f,0x73696d3e,0x69625f63,
+0x203a7374,0x30257830,0x000a7838,0x482a2a2a,0x44412054,0x20454944,
+0x706d7544,0x4e45203a,0x2a2a2a44,0x2a2a000a,0x2054482a,0x49504143,
+0x75442045,0x203a706d,0x72617453,0x2a2a2a74,0x6569000a,0x61633e2d,
+0x30203a70,0x34302578,0x69000a78,0x703e2d65,0x6d617261,0x30203a73,
+0x32302578,0x69000a78,0x653e2d65,0x685f7478,0x70616374,0x7830203a,
+0x78343025,0x6569000a,0x78743e2d,0x635f6662,0x203a7061,0x30257830,
+0x000a7838,0x3e2d6569,0x635f7361,0x203a7061,0x30257830,0x000a7832,
+0x482a2a2a,0x41432054,0x20454950,0x706d7544,0x6e45203a,0x2a2a2a64,
+0x6c77000a,0x203a6425,0x203a7325,0x666c616d,0x656d726f,0x68632064,
+0x70736e61,0x30206365,0x0a782578,0x636c7700,0x616d6c5f,0x00632e63,
+0x64256c77,0x7325203a,0x6c77203a,0x74615f63,0x68636174,0x69616620,
+0x0a64656c,0x256c7700,0x25203a64,0x6c203a73,0x5f63616d,0x6f666e69,
+0x6c6c6120,0x6620636f,0x656c6961,0x77000a64,0x6c5f636c,0x5f63616d,
+0x61766f69,0x77007372,0x3a64256c,0x3a732520,0x636c7720,0x646f6d5f,
+0x5f656c75,0x69676572,0x72657473,0x69616620,0x0a64656c,0x256c7700,
+0x25203a64,0x77203a73,0x6e695f6c,0x745f7469,0x72656d69,0x726f6620,
+0x74647720,0x72656d69,0x69616620,0x0a64656c,0x30367300,0x7265765f,
+0x746f6700,0x30367320,0x7265765f,0x20736920,0x000a7325,0x00302e35,
+0x5f303673,0x73726576,0x206e6f69,0x73207369,0x74207465,0x6425206f,
+0x6c77000a,0x203a6425,0x203a7325,0x6f727265,0x6e692072,0x6e697469,
+0x68742067,0x4d4c2065,0x53204341,0x6d204154,0x6c75646f,0x77000a65,
+0x3a64256c,0x3a732520,0x72726520,0x6920726f,0x6974696e,0x7420676e,
+0x4c206568,0x2043414d,0x746f7250,0x6f6d206f,0x656c7564,0x6c77000a,
+0x72647872,0x0073706f,0x203a7325,0x6e6b6e75,0x206e776f,0x69746361,
+0x64696e6f,0x0a642520,0x3a732500,0x66756220,0x20726566,0x676e656c,
+0x25206874,0x6f742064,0x6873206f,0x2074726f,0x20726f66,0x43414d4c,
+0x70616320,0x64252820,0x63000a29,0x69706968,0x78302064,0x203a7825,
+0x70696863,0x20766572,0x78257830,0x6375202c,0x7265646f,0x30207665,
+0x0a782578,0x3a732500,0x6e614320,0x63207427,0x676e6168,0x68742065,
+0x68632065,0x656e6e61,0x6877206c,0x74206e65,0x73206568,0x206e6163,
+0x69207369,0x7270206e,0x6572676f,0x000a7373,0x203a7325,0x75736e55,
+0x726f7070,0x20646574,0x61766f69,0x61202c72,0x6f697463,0x2064696e,
+0x000a6425,0x63616d6c,0x7061635f,0x616d6c00,0x70755f63,0x616d6c00,
+0x6f645f63,0x6c006e77,0x5f63616d,0x6163616d,0x00726464,0x63616d6c,
+0x7078745f,0x7265776f,0x616d6c00,0x6f6d5f63,0x6c006564,0x5f63616d,
+0x63746573,0x6e6e6168,0x77006c65,0x6c5f636c,0x5f63616d,0x6f696f64,
+0x00726176,0x5f636c77,0x63616d6c,0x7465735f,0x6168635f,0x6c656e6e,
+0x636c7700,0x616d6c5f,0x72705f63,0x2e6f746f,0x78740063,0x61747373,
+0x74007374,0x6c677378,0x70006d6f,0x6d2e6275,0x78747861,0x206f7420,
+0x25206562,0x25000a64,0x25286432,0x20296434,0x78616d00,0x6c677874,
+0x69206d6f,0x64252073,0x7563202c,0x6e657272,0x65702074,0x6e69646e,
+0x6f632067,0x20746e75,0x25207369,0x74000a64,0x6d207378,0x6f6c6c61,
+0x61662063,0x72756c69,0x61207365,0x25206572,0x70202c64,0x69646e65,
+0x2520676e,0x6d000a64,0x78747861,0x6d6f6c67,0x20736920,0x20746573,
+0x25206f74,0x00000a64,0x06060501,0x00010100,0x03030202,0x5f636c77,
+0x63616d6c,0x6e6f635f,0x5f676966,0x01006361,0x03030200,0x5f636c77,
+0x63616d6c,0x6174735f,0x6100632e,0x7564736d,0x6425203a,0x64736d20,
+0x203a7375,0x000a6425,0x203a7325,0x45544152,0x20544553,0x6d656c45,
+0x73746e65,0x6425203a,0x7830000a,0x78323025,0x29642528,0x52460020,
+0x53414d4f,0x52434f53,0x003a5145,0x4f464542,0x41204552,0x434f5353,
+0x4f4e5320,0x003a504f,0x20424353,0x45544152,0x00544553,0x5f636c77,
+0x63616d6c,0x5f617473,0x61766f69,0x72007372,0x72616461,0x63737000,
+0x676e6168,0x6d610065,0x73756473,0x73746174,0x3a732500,0x756c7020,
+0x6e69626d,0x68742067,0x656b2065,0x6c612079,0x69206f67,0x64252073,
+0x656b202c,0x656c5f79,0x7369206e,0x2c642520,0x646e6920,0x25207865,
+0x6e612064,0x656b2064,0x74705f79,0x73692072,0x25783020,0x25000a78,
+0x61203a73,0x64252063,0x4341203a,0x78302049,0x202c7825,0x20574345,
+0x78257830,0x5854202c,0x3020504f,0x2c782578,0x66696c20,0x6d697465,
+0x78302065,0x000a7825,0x63616d6c,0x6163735f,0x6d6c006e,0x735f6361,
+0x736e6163,0x00706f74,0x63616d6c,0x696f6a5f,0x6d6c006e,0x725f6361,
+0x74657365,0x616d6c00,0x65735f63,0x00737074,0x63616d6c,0x7465735f,
+0x5f737362,0x61726170,0x6c00736d,0x5f63616d,0x6d5f6d72,0x75736165,
+0x6c006572,0x5f63616d,0x735f6d72,0x00706f74,0x63616d6c,0x6464615f,
+0x79656b5f,0x616d6c00,0x65645f63,0x656b5f6c,0x6d6c0079,0x635f6361,
+0x69666e6f,0x00715f67,0x63616d6c,0x6e6f635f,0x5f676966,0x6c006361,
+0x5f63616d,0x5f78616d,0x696c7872,0x69746566,0x6c00656d,0x5f63616d,
+0x5f78616d,0x696c7874,0x69746566,0x6c00656d,0x5f63616d,0x746f6c73,
+0x6d69745f,0x6d6c0065,0x705f6361,0x6d616572,0x00656c62,0x63616d6c,
+0x61636d5f,0x745f7473,0x656c6261,0x616d6c00,0x65645f63,0x65775f66,
+0x656b5f70,0x6d6c0079,0x725f6361,0x68747374,0x68736572,0x616d6c00,
+0x74635f63,0x65733273,0x6c00666c,0x5f63616d,0x706d6574,0x6574616c,
+0x616d6c00,0x78725f63,0x746c6966,0x6c007265,0x5f63616d,0x63616562,
+0x695f6e6f,0x69665f65,0x7265746c,0x616d6c00,0x65625f63,0x6e6f6361,
+0x746c6966,0x655f7265,0x6c62616e,0x6d6c0065,0x735f6361,0x7065656c,
+0x616d6c00,0x61775f63,0x6e69656b,0x76726574,0x6c006c61,0x5f63616d,
+0x63616562,0x6f6c6e6f,0x6f637473,0x00746e75,0x63616d6c,0x7063725f,
+0x72687469,0x6f687365,0x6c00646c,0x5f63616d,0x74617473,0x61745f73,
+0x00656c62,0x63616d6c,0x7362695f,0x00737073,0x63616d6c,0x7278745f,
+0x74657461,0x656c6261,0x616d6c00,0x78745f63,0x6f747561,0x65746172,
+0x6c626174,0x6d6c0065,0x655f6361,0x74637272,0x6c007372,0x5f63616d,
+0x7564736d,0x78616d5f,0x696c7874,0x69746566,0x6c00656d,0x5f63616d,
+0x65746172,0x00746573,0x63616d6c,0x746b705f,0x746c6966,0x6c007265,
+0x5f63616d,0x72656570,0x6374685f,0x6c007061,0x5f63616d,0x73627468,
+0x61705f73,0x736d6172,0x616d6c00,0x74685f63,0x5f737362,0x62636573,
+0x705f6e63,0x6d617261,0x616d6c00,0x74685f63,0x5f737362,0x635f6162,
+0x00666e6f,0x63616d6c,0x5f67325f,0x65746172,0x7265766f,0x65646972,
+0x616d6c00,0x67355f63,0x7461725f,0x65766f65,0x64697272,0x6d6c0065,
+0x6e5f6361,0x65746172,0x7265766f,0x65646972,0x616d6c00,0x6d645f63,
+0x78616d61,0x00000000,0x0002230c,0x00000000,0x00000008,0x00022316,
+0x00000001,0x00000000,0x00022324,0x00000002,0x00000008,0x0002232e,
+0x00000003,0x00000008,0x00022339,0x00000004,0x00000001,0x00022344,
+0x00000005,0x00000008,0x00022357,0x00000006,0x00000008,0x00022367,
+0x00000007,0x00000008,0x00022374,0x00000008,0x00000008,0x00022381,
+0x00000009,0x00000008,0x0002238e,0x0000000a,0x00000008,0x0002239c,
+0x0000000b,0x00000008,0x000223ab,0x0000000c,0x00000007,0x000223bf,
+0x0000000d,0x00000007,0x000223d3,0x0020000e,0x00000007,0x000223e2,
+0x0000000f,0x00000007,0x000223f0,0x00000010,0x00000008,0x00022401,
+0x00000011,0x00000007,0x00022412,0x00200013,0x00000007,0x00022421,
+0x00000014,0x00000001,0x0002242f,0x00000015,0x00000008,0x0002243d,
+0x00000016,0x00000007,0x0002244b,0x00000017,0x00000008,0x00022461,
+0x00000018,0x00000008,0x0002247a,0x00000019,0x00000007,0x00022485,
+0x0000001a,0x00000008,0x00022497,0x0000001b,0x00000007,0x000224ac,
+0x0000001c,0x00000007,0x000224bf,0x0000001d,0x00000008,0x000224d0,
+0x0000001e,0x00000007,0x000224dc,0x0000001f,0x00000008,0x000224ed,
+0x00000020,0x00000008,0x00022502,0x00000021,0x00000008,0x0002250f,
+0x00000022,0x00000007,0x00022527,0x00000023,0x00000007,0x00022534,
+0x00000024,0x00000008,0x00022543,0x00000025,0x00000008,0x00022553,
+0x00000026,0x00000008,0x00022565,0x00000027,0x00000007,0x0002257d,
+0x00000028,0x00000007,0x00022590,0x00000029,0x00000007,0x000225a5,
+0x0000002a,0x00000007,0x000225ba,0x0000002b,0x00000007,0x000225cd,
+0x0000002c,0x00000007,0x000216c1,0x0000002d,0x00000007,0x000216ca,
+0x0080002e,0x00000007,0x00021654,0x0440002f,0x00000008,0x0002165e,
+0x04400030,0x00000008,0x00000000,0x00000000,0x00000000,0x0003aaaa,
+0x00010000,0x63630302,0x5f636c77,0x63616d6c,0x7465735f,0x0079656b,
+0x5f636c77,0x696b6f6e,0x00632e61,0x5f616763,0x47345f6a,0x61676300,
+0x355f6a5f,0x67630047,0x47355f61,0x63006c5f,0x355f6167,0x006d5f47,
+0x5f616763,0x755f4735,0x67630031,0x47355f61,0x3131755f,0x00000000,
+0x0007fc00,0x0005a569,0x000001ff,0x000a5d69,0x00080400,0x000a5e97,
+0x00000201,0x0005a697,0x000201cc,0x00d40000,0x00000000,0x01000000,
+0x00000000,0x00000003,0xffffffe8,0x00022984,0x00022ae4,0x83348434,
+0x82678084,0x82348056,0x83238423,0x82568073,0x82238045,0x00010001,
+0x7a977a97,0x7a877a97,0x7b977a87,0x00000000,0x00000009,0x00022a5f,
+0x00100000,0x00000007,0x00022a68,0x00000008,0x000c0008,0x00022a75,
+0x00800014,0x00000002,0x00022a83,0x0040003d,0x00070007,0x00022a8f,
+0x0400003f,0x00000006,0x00022a9f,0x00000040,0x00000006,0x00022ab4,
+0x04000041,0x00000006,0x00022ac4,0x0000005e,0x00000006,0x00022acf,
+0x0000005f,0x00000002,0x00022ada,0x00000062,0x00000005,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x30600000,0x486c0c18,0x6c771224,0x68705f63,0x00632e79,0x32697274,
+0x78620067,0x00673261,0x6f707872,0x72006732,0x73697373,0x6732666d,
+0x73737200,0x636d7369,0x72006732,0x73697373,0x67327661,0x73737200,
+0x666d7369,0x6c5f6732,0x0030776f,0x69737372,0x32636d73,0x6f6c5f67,
+0x72003177,0x73697373,0x67327661,0x776f6c5f,0x73720032,0x6d736973,
+0x5f673266,0x00306968,0x69737372,0x32636d73,0x69685f67,0x73720031,
+0x61736973,0x5f673276,0x00326968,0x6d306170,0x77707861,0x61700072,
+0x64256230,0x6b636300,0x6f006f70,0x706d6466,0x706f006f,0x6870006f,
+0x696f6e79,0x70006573,0x71007968,0x6f707874,0x00726577,0x5f796870,
+0x69737372,0x746e615f,0x6d696d00,0x72705f6f,0x626d6165,0x7000656c,
+0x725f7968,0x65716978,0x6c007473,0x79687070,0x6d65745f,0x6e657370,
+0x6c006573,0x79687070,0x6c61635f,0x6c65645f,0x745f6174,0x00706d65,
+0x6870706c,0x62765f79,0x65737461,0x0065736e,0x5f6d756e,0x65727473,
+0x62006d61,0x5f646e61,0x676e6172,0x73720065,0x775f6973,0x00006e69,
+0x000707ef,0x000e000e,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x5b207325,0x352e0020,0x29622800,0x25642500,
+0x20732573,0x77005d00,0x725f636c,0x2e657461,0x04020063,0x0b04020b,
+0x48302416,0x04026c60,0x18120c0b,0x60483024,0x636c776c,0x7461725f,
+0x65735f65,0x00632e6c,0x65746172,0x006c6573,0x65746172,0x5f6c6573,
+0x6d6d7564,0x00000079,0x00022b54,0x00800000,0x00000001,0x00000000,
+0x00000000,0x00000000,0x160b0402,0x6e616373,0x7373615f,0x745f636f,
+0x00656d69,0x6e616373,0x616e755f,0x636f7373,0x6d69745f,0x63730065,
+0x705f6e61,0x69737361,0x745f6576,0x00656d69,0x6e616373,0x6d6f685f,
+0x69745f65,0x7300656d,0x5f6e6163,0x6f72706e,0x00736562,0x5f636c77,
+0x6e616373,0x7700632e,0x735f636c,0x5f6e6163,0x61766f69,0x73007372,
+0x746e6163,0x72656d69,0xffffff00,0x00ffffff,0x00000000,0x00000001,
+0x00000002,0x00000004,0x00000002,0x00000003,0x00000003,0x00000005,
+0x5f636c77,0x2e626373,0x6c770063,0x65735f63,0x69727563,0x632e7974,
+0x3a732500,0x534d5320,0x72432034,0x20747079,0x6f727245,0x25203a72,
+0x66202c64,0x7020726f,0x656b6361,0x70252074,0x6b70202c,0x656c5f74,
+0x47000a6e,0x203a544f,0x50584500,0x6e00203a,0x6372636f,0x54520a00,
+0x25282045,0x25732573,0x29732573,0x20732520,0x42206e6f,0x58254d43,
+0x64257220,0x25204020,0x64252f64,0x2064252f,0x0a7a484d,0x49445300,
+0x4443004f,0x00490043,0x00010052,0x0002096c,0x00030971,0x00040976,
+0x0005097b,0x00060980,0x00070985,0x0008098a,0x0009098f,0x000a0994,
+0x000b0999,0x000c099e,0x000d09a3,0x000e09a8,0x000009b4,0x002d0000,
+0x001a90a7,0x000e0947,0x00072001,0x0003938b,0x0001ca38,0x0000e52a,
+0x00007297,0x0000394c,0x00001ca6,0x00000e53,0x00000729,0x00000395,
+0x000001ca,0x000000e5,0x00000073,0x00000039,0x0000001d,0x00000002,
+0x00000000,0x00000004,0x00000008,0x0000000b,0x00000010,0x00000016,
+0x00000018,0x0000000c,0x00000000,0x00000012,0x00000002,0x00000018,
+0x00000008,0x00000024,0x0000000a,0x00000030,0x00000010,0x00000048,
+0x00000012,0x00000060,0x00000019,0x0000006c,0x0000001a,0x00000000,
+0x00000000,0x00000000,0x00024e3d,0x00024e09,0x00024e05,0x00002c15,
+0x00000000,0x00002b95,0x00002c09,0x00002bdd,0x00002b9d,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00022da4,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000002,0x00000207,0x00200000,0x00050001,
+0x00250009,0x04290029,0x04270027,0x0447042b,0x044b00c1,0x044f0833,
+0x04570453,0x045b0157,0x0c5b085b,0x083308db,0x015b084f,0x04d708cf,
+0x055708d7,0x04db055b,0x095b0957,0x0757015f,0x055b0b57,0x07570b5b,
+0x0f5b1cd7,0x0045075b,0x00c50049,0x00550051,0x00d500d1,0x00d500d1,
+0x015500d9,0x015d0159,0x035d0359,0x035b0357,0x040c035f,0x042c0410,
+0x000d004c,0x004d002d,0x044d042d,0x04550451,0x04cb00ce,0x085708cb,
+0x002c000c,0x04ce0855,0x000408ce,0x00240008,0x00440040,0x00410048,
+0x00360409,0x0056003a,0x005b005a,0x00db00d7,0x10000000,0x00000040,
+0x20000000,0x00000040,0x30000000,0x00000040,0x40000000,0x00000040,
+0x50000000,0x00000040,0x40000000,0x00000048,0x50000000,0x00000048,
+0x60000001,0x00000048,0x70000002,0x00000048,0x80000002,0x00000048,
+0x50000083,0x00000058,0x60000104,0x00000058,0x70004185,0x00000058,
+0xd0004185,0x0000000b,0xe0008206,0x0000000b,0xf020c287,0x0000000b,
+0x00410308,0x0000000c,0x10614389,0x00000014,0x6081840a,0x00000010,
+0x20a1c48b,0x00000014,0xc0c2050d,0x00000012,0x30e2458e,0x00000014,
+0x41028698,0x0000001c,0x31230b91,0x0000001c,0x5143481a,0x0000001c,
+0x6185cc94,0x0000001c,0x71a4099c,0x0000001c,0x81e64d96,0x0000001c,
+0x9204ca9e,0x0000001c,0xa246cea1,0x0000001c,0xb2655024,0x0000001c,
+0x436751a6,0x00000019,0xc3e95529,0x00000019,0x6449d42e,0x00000019,
+0x04aa95ae,0x0000001a,0x14ea162e,0x0000001a,0x44ea162e,0x0000001a,
+0x10000000,0x00000040,0x20000000,0x00000040,0x30000000,0x00000040,
+0x40000000,0x00000040,0x50000000,0x00000040,0x40000000,0x00000048,
+0x50000000,0x00000048,0x60000001,0x00000048,0x70000002,0x00000048,
+0x40000002,0x00000058,0x50000083,0x00000058,0x60000104,0x00000058,
+0xc0000104,0x0000000c,0xd0004185,0x0000000b,0xd0008206,0x0000000c,
+0xf020c287,0x0000000b,0x00410308,0x0000000c,0x10614389,0x00000014,
+0x6081840a,0x00000010,0x20a1c48b,0x00000014,0xc0c2050d,0x00000012,
+0x30e2458e,0x00000014,0x51028698,0x00000014,0x31230b91,0x0000001c,
+0x5143481a,0x0000001c,0x6185cc94,0x0000001c,0x71a4099c,0x0000001c,
+0xe1e64d96,0x0000001c,0xf204ca9e,0x0000001c,0x0246cea1,0x0000001d,
+0xb2655024,0x0000001c,0x436751a6,0x00000019,0xc3e95529,0x00000019,
+0x6449d42e,0x00000019,0x04aa95ae,0x0000001a,0x14ea162e,0x0000001a,
+0x44ea162e,0x0000001a,0x00022ecc,0x00000094,0x0000000d,0x00000000,
+0x00000020,0x00023158,0x0000001a,0x0000000e,0x00000000,0x00000010,
+0x00023504,0x00000060,0x00000012,0x00000000,0x00000010,0x00000000,
+0x00000000,0x00020001,0x00040003,0x00060005,0x00080007,0x00000085,
+0x00000000,0x00010000,0x00030002,0x00050004,0x00070006,0x00850084,
+0x00000000,0x00000060,0x00000000,0x00000060,0x10000000,0x00000065,
+0x20000000,0x00000065,0x10000000,0x0000006d,0x20000000,0x0000006d,
+0xc0000000,0x0000006c,0x20000001,0x00000075,0x20000002,0x00000070,
+0x30000002,0x00000070,0x20000083,0x00000078,0x30000104,0x00000078,
+0x40004185,0x00000078,0x10004185,0x0000002d,0x20008206,0x0000002d,
+0x3020c287,0x0000002d,0x40410308,0x0000002d,0x50614389,0x0000002d,
+0x6081840a,0x0000002d,0x70a1c48b,0x0000002d,0xb0c2050d,0x0000002a,
+0xc0e2458e,0x0000002a,0x31028698,0x0000002c,0x71230b91,0x0000003d,
+0xb143481a,0x0000003a,0xc185cc94,0x00000038,0xd1a4099c,0x0000003a,
+0x91e64d96,0x0000003d,0xa204ca9e,0x0000003d,0xb246cea1,0x0000003d,
+0xc2655024,0x0000003d,0xd36751a6,0x0000003d,0xe3e95529,0x0000003d,
+0xf449d42e,0x0000003d,0x24aa95ae,0x00000039,0x94ea162e,0x00000039,
+0x24ea162e,0x0000003a,0x00000000,0x00000060,0x00000000,0x00000060,
+0x10000000,0x00000065,0x20000000,0x00000065,0x10000000,0x0000006d,
+0x20000000,0x0000006d,0xc0000000,0x0000006c,0x20000001,0x00000075,
+0x20000002,0x00000070,0x30000002,0x00000070,0x20000083,0x00000078,
+0x30000104,0x00000078,0x00000104,0x00000028,0x10004185,0x0000002d,
+0x20008206,0x0000002d,0x3020c287,0x0000002d,0x40410308,0x0000002d,
+0x50614389,0x0000002d,0x6081840a,0x0000002d,0x70a1c48b,0x0000002d,
+0xb0c2050d,0x0000002a,0xc0e2458e,0x0000002a,0x31028698,0x0000002c,
+0x71230b91,0x0000003d,0xb143481a,0x0000003a,0xc185cc94,0x00000038,
+0xd1a4099c,0x0000003a,0x91e64d96,0x0000003d,0xa204ca9e,0x0000003d,
+0xb246cea1,0x0000003d,0xc2655024,0x0000003d,0xd36751a6,0x0000003d,
+0xe3e95529,0x0000003d,0xf449d42e,0x0000003d,0x24aa95ae,0x00000039,
+0x94ea162e,0x00000039,0x24ea162e,0x0000003a,0x01010101,0x01010101,
+0x01010101,0x01010101,0x01010101,0x01010101,0x01010101,0x03030101,
+0x01030301,0x01010101,0x01010101,0x01010101,0x01010101,0x01010101,
+0x01010101,0x01010101,0x0002318c,0x00000094,0x0000000d,0x00000000,
+0x00000020,0x00022e0c,0x00000060,0x00000012,0x00000000,0x00000010,
+0x00200000,0x00050001,0x00250009,0x04290029,0x04270027,0x0447042b,
+0x044b0447,0x044f0833,0x04570453,0x045b0457,0x0c5b085b,0x083308db,
+0x0457084f,0x04d708cf,0x055708d7,0x04db055b,0x095b0957,0x07570557,
+0x055b0b57,0x07570b5b,0x0f5b1cd7,0x1357075b,0x175b135b,0x00000000,
+0x00000000,0x08000400,0x10000a00,0x18001400,0x14011c00,0x1c011801,
+0x04012001,0x0c010801,0x14011001,0x1c011801,0x1c211821,0x24212021,
+0x200d2041,0x0c561849,0x14491849,0x184d14c5,0x18cd1c4d,0x194d2051,
+0x214d24cd,0x0829254d,0x00000409,0x00000000,0x00000000,0x00000000,
+0x00200000,0x00050001,0x00250009,0x04290029,0x04270027,0x0447042b,
+0x044b0447,0x044f0833,0x04570453,0x045b0457,0x0c5b085b,0x083308db,
+0x0457084f,0x04d708cf,0x055708d7,0x04db055b,0x095b0957,0x07570557,
+0x055b0b57,0x07570b5b,0x0f5b1cd7,0x0045075b,0x00c50049,0x00550051,
+0x00d500d1,0x00d500d1,0x015500d9,0x015d0159,0x035d0359,0x035b0357,
+0x040c035f,0x042c0410,0x000d004c,0x004d002d,0x044d042d,0x04550451,
+0x04cb00ce,0x085708cb,0x002c000c,0x04ce0855,0x18cd08ce,0x194d2051,
+0x214d24cd,0x0829254d,0x00000000,0x00000000,0x00000000,0x00000000,
+0x0000000d,0x10000000,0x00000040,0x20000000,0x00000040,0x30000000,
+0x00000040,0x40000000,0x00000040,0x50000000,0x00000040,0x40000000,
+0x00000048,0x50000000,0x00000048,0x60000001,0x00000048,0x70000002,
+0x00000048,0x80000002,0x00000048,0x50000083,0x00000058,0x60000104,
+0x00000058,0x70004185,0x00000058,0x50004185,0x00000000,0x60008206,
+0x00000000,0x5020c287,0x00000008,0x60410308,0x00000008,0x70614389,
+0x00000008,0x8081840a,0x00000008,0x50a1c48b,0x00000018,0x60c2050d,
+0x00000018,0x70e2458e,0x00000018,0x81028698,0x00000018,0x91230b91,
+0x00000018,0xa143481a,0x00000018,0xc185cc94,0x00000018,0xd1a4099c,
+0x00000018,0xf1e64d96,0x00000018,0x0204ca9e,0x00000019,0x2246cea1,
+0x00000019,0x32655024,0x00000019,0xb36751a6,0x00000019,0xf3e95529,
+0x00000019,0x2449d42e,0x0000001a,0x54aa95ae,0x0000001a,0x74ea162e,
+0x0000001a,0xa4ea162e,0x0000001a,0x10000000,0x00000040,0x20000000,
+0x00000040,0x30000000,0x00000040,0x40000000,0x00000040,0x50000000,
+0x00000040,0x40000000,0x00000048,0x50000000,0x00000048,0x60000001,
+0x00000048,0x70000002,0x00000048,0x40000002,0x00000058,0x50000083,
+0x00000058,0x60000104,0x00000058,0x40000104,0x00000000,0x50004185,
+0x00000000,0x40008206,0x00000008,0x5020c287,0x00000008,0x60410308,
+0x00000008,0x70614389,0x00000008,0x8081840a,0x00000008,0x50a1c48b,
+0x00000018,0x60c2050d,0x00000018,0x70e2458e,0x00000018,0x81028698,
+0x00000018,0x91230b91,0x00000018,0xa143481a,0x00000018,0xc185cc94,
+0x00000018,0xd1a4099c,0x00000018,0xf1e64d96,0x00000018,0x0204ca9e,
+0x00000019,0x2246cea1,0x00000019,0x32655024,0x00000019,0xb36751a6,
+0x00000019,0xf3e95529,0x00000019,0x2449d42e,0x0000001a,0x54aa95ae,
+0x0000001a,0x74ea162e,0x0000001a,0xa4ea162e,0x0000001a,0x00000002,
+0x00000003,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x0002385c,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00025099,0x00004705,
+0x00004991,0x00004859,0x00000000,0x00004719,0x00000000,0x000046d9,
+0x00000000,0x0e0e0e0e,0x0d09020e,0x010d080a,0x080a0d09,0x0d09010d,
+0x010d080a,0x080a0d09,0x0e0a010d,0x020e090b,0x090b0e0a,0x3a09020e,
+0x050e0e16,0x0e163a09,0x0e0a050e,0x050e090b,0x090b0e0a,0x0e0a020e,
+0x020e090b,0x0e163a09,0x3a09050e,0x050e0e16,0x0e163a09,0x3a09050e,
+0x050e0e16,0x0e163a09,0x0001050e,0x02020100,0x08080303,0x08080808,
+0x080a0908,0x00070708,0x00000000,0x01010100,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000001,0x0000096c,0x043c3c6f,0x0505550e,
+0x44770505,0xf3708080,0x0000000c,0x00000002,0x00000971,0x043c3c6f,
+0x0505550e,0x44770505,0xf3708080,0x0000000b,0x00000003,0x00000976,
+0x043c3c6f,0x0505550e,0x44770505,0xf3708080,0x00000009,0x00000004,
+0x0000097b,0x042c2c6f,0x0505550d,0x44770505,0xf3708080,0x00000008,
+0x00000005,0x00000980,0x042c2c6f,0x0505550d,0x44770505,0xf3708080,
+0x00000007,0x00000006,0x00000985,0x042c2c6f,0x0505550c,0x44770505,
+0xf3708080,0x00000006,0x00000007,0x0000098a,0x042c2c6f,0x0505550b,
+0x44770505,0xf3708080,0x00000005,0x00000008,0x0000098f,0x042c2c6f,
+0x0505550b,0x44770505,0xf3708080,0x00000004,0x00000009,0x00000994,
+0x041c1c6f,0x0505550a,0x44770505,0xf3708080,0x00000004,0x0000000a,
+0x00000999,0x041c1c6f,0x05055509,0x44770505,0xf3708080,0x00000003,
+0x0000000b,0x0000099e,0x041c1c6e,0x05055508,0x44770505,0xf3708080,
+0x00000003,0x0000000c,0x000009a3,0x041c1c6e,0x05055507,0x44770505,
+0xf3708080,0x00000002,0x0000000d,0x000009a8,0x041c1c6e,0x05055506,
+0x44770505,0xf3708080,0x00000002,0x0000000e,0x000009b4,0x040c0c6e,
+0x05055502,0x44770505,0xf3708080,0x00000001,0x02000100,0x06000400,
+0x0b000800,0x17001000,0x2d002000,0x40014000,0x40034002,0x40054004,
+0x40074006,0x80075b07,0x04030200,0x0f070605,0x03000200,0x06000400,
+0x0b000800,0x10011000,0x10031002,0x10051004,0x10071006,0x20071707,
+0x40072d07,0x80075b07,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x4604b510,0xff00f000,0xf7dc4816,0x4620fe73,
+0xfe98f000,0x4a154b14,0xfbb318c3,0x4a14f3f2,0x60134620,0xfa8af000,
+0x7078f500,0xf44f3007,0xfbb0737a,0x4b0ff0f3,0x60184a0f,0x490f69e3,
+0xbfcc2b00,0x437ff06f,0x33fff240,0x4a0a6013,0xfbb36813,0x6013f3f0,
+0x22204620,0xf0002300,0xbd10fac9,0x0000042d,0x000f423f,0x000f4240,
+0x000003b0,0x000003a8,0x000003ac,0x000004c9,0x460eb573,0x46044615,
+0x481ab918,0xf7dc2174,0x42a6fc87,0x4817d803,0xf7dc2175,0x4b16fc81,
+0x602b462a,0x4b14e001,0x32046013,0x037cf1ad,0xd3f8429a,0xf0201ce0,
+0x4b100003,0x0406ebc0,0x4b0f601c,0x60192100,0xf5054b0e,0x60195200,
+0x3c084b0d,0x4b0d6019,0x601d6041,0x601a4b0c,0x22084b0c,0x4b0c6019,
+0x4b0c601a,0x60586004,0x46c0bd7c,0x000206dc,0x5354414b,0x00000408,
+0x000003cc,0x000003f0,0x0000040c,0x000003d8,0x000003dc,0x000003e0,
+0x000003c4,0x000003d0,0x6fe0f5b1,0x4605b573,0x4616460c,0x6a03d106,
+0x21009100,0x681c9101,0xe00c460a,0x22004b0d,0xf7dd6818,0x4601f877,
+0x6a2bb180,0x94002200,0x681c9201,0x46334628,0xb13847a0,0x62a84a06,
+0x20006813,0x626e632b,0xe0016015,0x30fff04f,0x46c0bd7c,0x00023afc,
+0x00023b00,0x47f0e92d,0x460e2010,0x21004699,0x46174b16,0x46044798,
+0xf06fb910,0xe022001a,0x68284d13,0xff22f7dc,0x46804631,0x6828463a,
+0xf844f7dd,0x480fb920,0x41ebf240,0xfbf4f7dc,0xf7dd6828,0x2301f907,
+0x4a0b4083,0x9b0860e3,0x9004f8c4,0x681360a3,0x60236828,0x60144641,
+0xf828f7dd,0xe8bd2000,0x46c087f0,0x1e00578d,0x00023afc,0x000206dc,
+0x00023b08,0x4b2db57f,0xf841a904,0xf5a13d04,0x460a5100,0xf7ff482a,
+0xf7dcff3b,0xf000fb1f,0x2000f871,0xfd7ef000,0x60204c26,0x4826b920,
+0x513cf240,0xfbbcf7dc,0xf0056820,0x4e23f82f,0xb9206030,0xf44f4820,
+0xf7dc61a8,0x6830fbb1,0xf7dc2100,0x4c1efff3,0xb9206020,0xf240481a,
+0xf7dc51bc,0x6823fba5,0x24004a1a,0x6370f503,0x6100f44f,0x46206013,
+0x4b174622,0xf7ff9400,0x6830ff85,0xfec4f7ff,0x47984b14,0xf0006830,
+0x4d13f86d,0x48134622,0x47a84913,0x48134622,0x47a84913,0x48144b13,
+0x4b14605c,0x601c4914,0x47a84622,0xb0046830,0x46c0bd70,0xdeaddead,
+0x00031654,0x00023b0c,0x000206dc,0x00023afc,0x000003e8,0x00023af8,
+0x0000063d,0x1e005d41,0x1e006061,0x000206e5,0x000005bd,0x000206e8,
+0x00000725,0x00023b10,0x0002226e,0x00023b04,0x000005b9,0x20a4b570,
+0x4e142100,0x4d1447b0,0xb1786028,0x22a42100,0xfc10f7dd,0x6080f44f,
+0x682c2100,0x616047b0,0x69446828,0x4b0db92c,0x602c4798,0x30fff04f,
+0x6144e00f,0x6280f44f,0x21004620,0xfbfaf7dd,0x2000682a,0x60936953,
+0x6380f44f,0x4b0460d3,0xbd70601a,0x1e00578d,0x00023b28,0x1e0057b1,
+0x00000410,0x2240b570,0x49272300,0x4d274606,0xf944f000,0x23004a26,
+0x682b6093,0x4c25b933,0xb90b6823,0xffbaf7ff,0x602b6823,0x23884c1f,
+0x605a6822,0xd0362a00,0x3b0e6bb3,0xd9032b01,0x491d4630,0xf966f000,
+0x688a4919,0x6823b132,0x109cf8c3,0x25004b15,0xe01c681c,0x601a6823,
+0xf04f605a,0xf8c332ff,0xe7f3209c,0x309cf8d4,0x3ffff1b3,0x2105d00e,
+0x009cf8d4,0xfbd2f7dc,0x0f20f010,0x6963d0f7,0x009cf8d4,0x5d5a2100,
+0xfbcef7dc,0x69233501,0xd3e7429d,0x49084807,0x4b084622,0xbd704798,
+0x00000811,0x00000410,0x00023b18,0x00023b28,0x0002407d,0x0002070a,
+0x000007f1,0x1e006061,0x4d1bb570,0x2e0068ae,0x0914d131,0x81ab602c,
+0x4461f504,0x33e1f44f,0xf4f3fb94,0x606960a8,0x21034628,0xf7dc2280,
+0x4628fb9f,0xb2e24631,0xfb9af7dc,0x21014628,0xf7dc1222,0x2103fb95,
+0x4628460a,0xfb90f7dc,0x460a2101,0xf7dc4628,0x4628fb8b,0x22082104,
+0xfb86f7dc,0x21024628,0xf7dc2201,0xf44ffb81,0x4b02707a,0xbd704798,
+0x00023b18,0x1e005d75,0x46c04770,0x2000b510,0xfaeaf7dd,0x46c0bd10,
+0x490bb510,0xf7ff4604,0xb280fff5,0x6f60b978,0xf7dd4907,0xb280fadd,
+0x6f60b948,0xf7dd4905,0xf64ffad7,0xb28073ff,0xbf082800,0xbd104618,
+0x00020716,0x0002071c,0xe92d6e01,0x460441f0,0xf8d0b171,0xf8d02080,
+0xeb03308c,0xf8d30382,0x6d832080,0xd103429a,0x47886dc0,0xe0004606,
+0x46202600,0xf0006ce1,0x6e65fa0d,0xb16d4607,0x2080f8d4,0x308cf8d4,
+0x0382eb03,0x2080f8d3,0x429a6da3,0x6de0d102,0x47a84631,0xe8bd4638,
+0x46c081f0,0x4604b510,0xfd2cf7dc,0x46204601,0xfa10f000,0x46c0bd10,
+0x4604b510,0xfd22f7dc,0x46204601,0xf9a0f000,0x46c0bd10,0xe92d6e01,
+0x460441f0,0xf8d0b171,0xf8d02080,0xeb03308c,0xf8d30382,0x6d832080,
+0xd103429a,0x47886dc0,0xe0004606,0x46202600,0xf0006ce1,0x6e65f949,
+0xb16d4607,0x2080f8d4,0x308cf8d4,0x0382eb03,0x2080f8d3,0x429a6da3,
+0x6de0d102,0x47a84631,0xe8bd4638,0x46c081f0,0x9c04b570,0xb1219d05,
+0xf2404808,0xf7dc118b,0xb144f9e7,0x4a06b13d,0xb90b7813,0x70133301,
+0x60232300,0x2000602b,0x46c0bd70,0x000209ac,0x00023bcd,0x47f0e92d,
+0x46884606,0x461f4615,0xfcf0f7dc,0x46812100,0xf7dc4630,0x4604fe0f,
+0x4813b918,0xf7dc21ec,0x2200f9c3,0x48114611,0x685b180b,0x330cb97b,
+0xf303fb02,0x181a501d,0xf8c26a63,0x60978004,0xea454a0b,0x60130303,
+0x24016263,0x3201e004,0x2a05310c,0x2400d1e7,0x46494630,0xfdeaf7dc,
+0xe8bd4620,0x46c087f0,0x000209ba,0x00023bd0,0x00023c0c,0x47f0e92d,
+0x46894604,0xfc92f7dc,0x21004620,0xfdd6f7dc,0xb9184605,0x2147482d,
+0xf98af7dc,0x69674620,0x8018f8d4,0xfc50f000,0x46822f0a,0x2f0fd916,
+0x4620d019,0xff54f7ff,0x46062f14,0x68abd903,0x0308f023,0x68ab60ab,
+0x0301f043,0xd90360ab,0xf04368ab,0x60ab0308,0xe0112201,0xd8022f02,
+0x22304e1b,0x4620e00c,0xff44f7ff,0x30a4f8d5,0xf0234606,0xf04303ff,
+0xf8c50302,0x220230a4,0x68abb15f,0x0f01f013,0xf008d107,0x2b080318,
+0xf44fbf14,0xfbb616e1,0xf008f6f2,0x24000803,0xf505e00f,0xb1177040,
+0x2004eb00,0xeb00e001,0xf1b900c4,0xd0030f00,0x46324651,0x47c82300,
+0x45443401,0xe8bddbed,0x46c087f0,0x000209ba,0x053ec600,0x47704800,
+0x00026f08,0xb5106983,0x5f80f013,0x4803d104,0x1197f640,0xf920f7dc,
+0x46c0bd10,0x000209c5,0xb5706983,0x5f80f013,0x460d4604,0x4809d104,
+0x1179f640,0xf910f7dc,0x46204629,0xf0042200,0x4620fec1,0xfc2af7dc,
+0x46204601,0xfd4af7dc,0x46c0bd70,0x000209c5,0xb5706983,0x5f80f013,
+0xd1044605,0xf240481d,0xf7dc71ba,0x4628f8f5,0xfc14f7dc,0x46062100,
+0xf7dc4628,0x4604fd33,0x4816b920,0x71bff240,0xf8e6f7dc,0x2b0169eb,
+0xf8d4d104,0xf4233600,0xe0047300,0xf8d4dd05,0xf4433600,0xf8c47300,
+0x6b6b3600,0xd1102b02,0x3658f8c4,0x365cf8d4,0x7380f443,0x365cf8c4,
+0xf8c42303,0xf8d43658,0xf043365c,0xf8c40304,0x4628365c,0xf7dc4631,
+0xbd70fd05,0x000209c5,0xb5706983,0x5f80f013,0xd1044604,0xf2404815,
+0xf7dc61ff,0x4620f8b1,0xfbd0f7dc,0x46062100,0xf7dc4620,0x4605fcef,
+0x480eb920,0x7104f240,0xf8a2f7dc,0xb90b6b63,0xe00d4d0b,0xf8c52301,
+0xf8d53660,0x4a093664,0x03fff003,0xf2f3fbb2,0x737af44f,0xf503fb02,
+0x46314620,0xfcd2f7dc,0xbd704628,0x000209c5,0x0249f000,0x000d6d80,
+0xf7ffb510,0xbd10ffc5,0xe92d6983,0xf01341f0,0x46055f80,0x481dd104,
+0x61c5f240,0xf874f7dc,0xf7dc4628,0x2100fb93,0x46284607,0xfcb2f7dc,
+0xb9204604,0xf2404815,0xf7dc61ca,0xf8d4f865,0x46283600,0x0684f3c3,
+0xff30f7ff,0xe0034604,0x42b378a3,0x340cd004,0x8823b124,0xd1f72b00,
+0xb9038823,0x88234c0a,0x4808b923,0x517bf240,0xf84af7dc,0x46394628,
+0xf7dc8824,0xf44ffc8b,0xfb04707a,0xe8bdf000,0x46c081f0,0x000209c5,
+0x00026fa4,0xb5706983,0x5f80f013,0xd1034604,0x21ec480b,0xf830f7dc,
+0xf7dc4620,0x2100fb4f,0x46204605,0xfc6ef7dc,0x4805b918,0xf7dc21f1,
+0x4620f823,0xf7dc4629,0xf640fc65,0xbd7030b8,0x000209c5,0x41f0e92d,
+0x8058f8df,0xf8d84606,0xb9fc4000,0xfb32f7dc,0x46074621,0xf7dc4630,
+0x4605fc51,0x480db920,0x714cf240,0xf804f7dc,0x7010f242,0xf8d54b0a,
+0x47984614,0x3614f8d5,0x1b1b2264,0xf302fb03,0x46394630,0x3000f8c8,
+0xfc38f7dc,0x68184b03,0x81f0e8bd,0x000209c5,0x1e005d75,0x00023c10,
+0xe92d6983,0xf01341f0,0x46075f80,0xd1044616,0xf44f4866,0xf7db61d2,
+0x4638ffdb,0xfafaf7dc,0x46802100,0xf7dc4638,0x4604fc19,0x485fb920,
+0x6195f240,0xffccf7db,0xf0002e00,0x463880b0,0xfe98f7ff,0xe0024605,
+0xd00642b3,0x2d00350c,0x80a5f000,0x2b00882b,0x882bd1f6,0xf0002b00,
+0xf8d4809e,0x78aa3600,0x0384f3c3,0xf0004293,0xf8d48096,0xf6433618,
+0xf42326a1,0xf8c41340,0xf8d43618,0xf423361c,0xf8c41340,0xe003361c,
+0x4b47200a,0x3e0a4798,0x31e0f8d4,0x3f00f413,0x2e09d001,0xf8d4d1f4,
+0xf41331e0,0xd0043f00,0xf240483e,0xf7db51bf,0x2300ff8b,0x3660f8c4,
+0x792b78ea,0x1664f8d4,0x0512061b,0x6370f003,0x0270f402,0x617ff021,
+0x430b4313,0x3664f8c4,0xb9536b7b,0xf8c43301,0xf8d43660,0xf4233664,
+0xf443437f,0xf8c46360,0x23023664,0x3660f8c4,0xf8d488ea,0x4b2b1664,
+0xea020512,0xf0210303,0xf42151fe,0xf4431178,0x430b3300,0x3664f8c4,
+0xf8c42303,0xf8d43660,0x68ab2664,0x427ff002,0x437ff023,0xf8c44313,
+0x23053664,0x3660f8c4,0x2664f8d4,0xf0024b1c,0xea4202ff,0xf8c40303,
+0x69fb3664,0xdd052b01,0x3600f8d4,0x6380f443,0x3600f8c4,0xf8d478aa,
+0x88290600,0xf64f0092,0xea007383,0xf0020303,0x317f027c,0x11c9431a,
+0x39016b7b,0x4001ea42,0xf8d4b93b,0xf4203630,0x041b7080,0xf8c40c1b,
+0xf8c43630,0x46380600,0xf7dc4641,0xe8bdfb5b,0x46c081f0,0x000209c5,
+0x1e005d75,0x1ff00000,0x88888800,0x4ff0e92d,0xb0872400,0x94049405,
+0x46806983,0x5f80f013,0x4854d104,0x21eff240,0xfefaf7db,0xf7dc4640,
+0x4621fa19,0x46409001,0xfb38f7dc,0xb9204606,0xf44f484c,0xf7db713d,
+0xf8d8feeb,0x4a4a3034,0x4b4a2b00,0x2702bf14,0xbf142701,0x469a4692,
+0x3020f8d8,0xf3c34a46,0x78132b04,0xf8c646a1,0x88533620,0x3628f8c6,
+0xad02e015,0x46282108,0x464b4a40,0x47a04c40,0x46292000,0xff0cf7dc,
+0x2100b138,0x9620f8c6,0x4b3c460a,0xf8c64798,0xf1090628,0x45d90901,
+0xeb0ad1e7,0xf8541407,0x3f013c04,0x4640b113,0xb3604798,0xe0282500,
+0x40ab2301,0x2c10f854,0xd0214213,0x5620f8c6,0x3c0cf914,0x2b01b12b,
+0xf1b3d006,0xd00b3fff,0xf854e011,0xe0043c08,0x3624f8d6,0x2c08f854,
+0xf8c64313,0xe00b3624,0x3624f8d6,0x2c08f854,0x0302ea23,0x481be7f5,
+0x3177f240,0xfe88f7db,0x455d3501,0x3c10d1d4,0xd1c82f00,0xad02e014,
+0x46282108,0x463b4a1a,0x47a04c17,0x46292000,0xfebaf7dc,0x2100b138,
+0x7620f8c6,0x4b13460a,0xf8c64798,0x37010624,0xd1e8454f,0xa9054640,
+0xf7ddaa04,0x9b05f859,0xf8c6b10b,0x9b043618,0xf8c6b10b,0x4640361c,
+0xf7dc9901,0xb007fa9f,0x8ff0e8bd,0x000209c5,0x00026ed8,0x00026ef8,
+0x00026fc8,0x000209d8,0x1e003fc9,0x1e0037cd,0x000209dd,0x2100b570,
+0x4b084605,0x47982010,0xb9184604,0x21184806,0xfe3af7db,0x21004620,
+0xf7dc2210,0x4620fefb,0xbd706065,0x1e00578d,0x00020b16,0x4604b510,
+0xf928f7dc,0x46204601,0xfda2f7ff,0x46c0bd10,0x47f0e92d,0x46144681,
+0x461d4688,0xf91af7dc,0xf7dc4648,0x4621f93b,0x462a4682,0xf7dc4648,
+0xb918fa5d,0x21784821,0xfe0ef7db,0xf7dc4648,0x1c46fb21,0x460745b0,
+0xf1b8d006,0xd0030f00,0x217b481a,0xfe00f7db,0xf6404648,0x2200012a,
+0xfa44f7dc,0xb9184605,0x217e4814,0xfdf4f7db,0x0f00f1b8,0x2401d00f,
+0xf307fa14,0xea3269aa,0xd1020703,0xf7db4620,0xfa14ff57,0xf7dbf006,
+0x61afff35,0x2401e00b,0xf006fa14,0xff4cf7db,0x40bc4620,0xff2af7db,
+0x431c69ab,0x464861ac,0xf7dc4651,0xe8bdfa17,0x46c087f0,0x00020b4a,
+0x4606b570,0xf8c6f7dc,0xf6404630,0x2200010e,0xfa0cf7dc,0xb1f04605,
+0xf3c36803,0xb91c1403,0x21bb483d,0xfdb8f7db,0xf7dc4630,0x2804fac7,
+0x2000d911,0xf7dc4939,0xb120fe1b,0x4b38e00b,0x612c3c01,0x2c00616b,
+0xf8d5d1f9,0xf02331e8,0xf8c50310,0x463031e8,0x012af640,0xf7dc2200,
+0x4c30f9e5,0xb9186020,0x21e3482b,0xfd94f7db,0xf7dc4630,0x4b2cfaa3,
+0x60186822,0x24a1f643,0xf8c22300,0xe00331e0,0x4b28200a,0x3c0a4798,
+0x682b4d24,0x31e0f8d3,0x3f00f413,0x2c09d101,0x2100d1f2,0x4630460b,
+0x6200f44f,0xff50f7ff,0x460b2100,0xf6404630,0xf7ff0212,0x2100ff49,
+0x0229f640,0x4630460b,0xff42f7ff,0xf247682a,0x68135439,0x7380f043,
+0xe0036013,0x4b13200a,0x3c0a4798,0x682a4d0f,0x31e0f8d2,0x3f00f413,
+0x2c09d101,0xf8d2d1f2,0xf41331e0,0xd1043f00,0xf44f4805,0xf7db719f,
+0x682afd47,0xf0436a13,0x62130303,0x46c0bd70,0x00020b4a,0x00020b53,
+0x21017fff,0x00023c18,0x00023c1c,0x1e005d75,0x41f0e92d,0xf7dc4604,
+0x4620f82d,0xfa42f7dc,0x46204606,0xf84af7dc,0x012af640,0x22004607,
+0xf7dc4620,0x4605f96b,0x4809b918,0xf7db215c,0x2301fd1b,0x69aa40b3,
+0xd0014213,0xe0002500,0x46201c75,0xf7dc4639,0x4628f955,0x81f0e8bd,
+0x00020b4a,0x2400b570,0xf8804605,0x69004175,0xf9eef000,0xf7dd4628,
+0x68e8fbb5,0xf7dc4621,0xf8d5f89d,0xb1280190,0x47984b0c,0x0190f8d5,
+0x47984b0b,0x018cf8d5,0x4b08b128,0xf8d54798,0x4b07018c,0x68e84798,
+0xf84af7dc,0x462968a8,0x72e8f44f,0x47984b03,0x46c0bd70,0x1e005a49,
+0x1e005a11,0x1e005c15,0x47f0e92d,0xf2414699,0xb08843e4,0x46144299,
+0xd1059f10,0x33f4f244,0xd101429a,0xe0002301,0x2b002300,0x80a9f000,
+0x70e8f44f,0x4b552100,0x46054798,0xf0002800,0x210080a0,0x72e8f44f,
+0xf7dc4606,0x2310fd7b,0x31a4f8c5,0x0028f105,0x22312101,0xf8c54b4c,
+0x616f9008,0x23004798,0x93019300,0x46209302,0x463a4649,0xf0049b11,
+0x60f0f953,0xd07a2800,0xffb2f7db,0x68e86028,0xf9a8f7dc,0x6068696c,
+0x4a406863,0x0301f083,0xf003493f,0x2b000301,0x4611bf18,0xf885682a,
+0xf6403176,0x429a0329,0xa008f8d5,0xc00cf8d5,0xb920d10a,0x7e00f504,
+0x7304f504,0xf504e008,0xf5047e00,0xe0037308,0x7e00f504,0x7304f504,
+0xf2409300,0x93037344,0xf04f2306,0x93040810,0x33022700,0xf8cd9305,
+0xf8cd8004,0x97068008,0x46624650,0x4c274673,0x626847a0,0xd0362800,
+0x46394628,0x464b68ea,0xf94af000,0x28006128,0x2305d02d,0x3194f8c5,
+0xf8c52302,0x331e3198,0x319cf8c5,0xf8c53344,0x68eb31b0,0x7179f885,
+0x81a4f8c5,0x71acf8c5,0x71a0f8c5,0x2b016b5b,0x4638d909,0xf7dc4914,
+0xb120fc9f,0x48144b13,0x23014798,0x4b11e003,0x47984812,0xf8852300,
+0x481131ba,0x462a4911,0x47984b11,0x68a8e006,0xf44f4629,0x4b0f72e8,
+0x26004798,0xb0084630,0x87f0e8bd,0x1e00578d,0x1e003bcd,0x00020cae,
+0x00020cb6,0x0001ce65,0x00020cc0,0x1e004461,0x00020cca,0x00020ce3,
+0x00020cfd,0x00002b15,0x1e006061,0x1e005c15,0x47702000,0x6a84b570,
+0x69a04601,0xf8b8f000,0x69a04605,0xf888f000,0x22382100,0x001cf104,
+0xfcb0f7dc,0x68a04b03,0x62246263,0xfca0f7dd,0xbd704628,0x00002c25,
+0x47f3e92d,0x46994f25,0x4605683b,0x46882b07,0xdc3f4692,0xfd8ef7ff,
+0x46062100,0x20544b20,0x46044798,0xd0352800,0x22542100,0xfc8ef7dc,
+0x6065683b,0xf8a46023,0xf8c49014,0x60e68010,0xf2414620,0x464a41e4,
+0xf8cd4633,0xf8cd8000,0xf7ffa004,0x60a0fedd,0x2000b1e0,0x9a0b990a,
+0x95004b10,0xff9af7fe,0x68a0b118,0xfe9ef7ff,0x4b0de010,0x681b490d,
+0x61a3683a,0x4b0c4628,0x4b0c4798,0x4629480c,0x683b4798,0x33014620,
+0xe000603b,0xe8bd2000,0x46c087fc,0x00023c20,0x1e00578d,0x00002bdd,
+0x00023c58,0x00020d15,0x1e003fe9,0x1e004461,0x00020d21,0x41f0e92d,
+0x460e4680,0x2034461d,0x4b082100,0x47984617,0xb1404604,0x22342100,
+0xfc38f7dc,0x602660e5,0xf8c46067,0x46208008,0x81f0e8bd,0x1e00578d,
+0x4b12b530,0x681bb087,0x42984604,0x4810d004,0x7100f44f,0xfb5cf7db,
+0x1044f894,0x6c23b9a1,0x2501b17b,0x46202304,0x9100aa05,0x95029101,
+0xf94ef7de,0xdb042800,0x4b069a05,0xbf08429a,0x230163a5,0x3044f884,
+0xbd30b007,0x00023c58,0x00020d4f,0x14e46c77,0x4604b537,0x460d4811,
+0xfb7af7db,0x46286420,0xfb76f7db,0x63e06c23,0xb198b1a3,0x6be26358,
+0x68606c23,0x6c236353,0xf1d34621,0xbf380301,0x93002300,0x462b6822,
+0xff9cf7ff,0xb10860e0,0xe0012000,0x30fff04f,0x46c0bd3e,0x00020d5a,
+0xb5106c03,0x2200b11b,0x6bc3635a,0x68c0635a,0xff5af7dd,0x46c0bd10,
+0x41f0e92d,0x461e4d0f,0x4607682b,0x46902b07,0x2048dc14,0x4b0c2100,
+0x46044798,0x2100b170,0xf7dc2248,0x682bfbbb,0x63636027,0x602b3301,
+0x60664b06,0x8008f8c4,0xe000601c,0x46202400,0x81f0e8bd,0x00023c24,
+0x1e00578d,0x00023c58,0x2010b570,0x4b09460c,0x46152100,0xb9104798,
+0x001af06f,0x4a06e008,0x60432310,0x60c46813,0x60856003,0x20006010,
+0x46c0bd70,0x1e00578d,0x00023c4c,0xb5104b06,0xb93b681b,0x68194b05,
+0x4b05b121,0xb10a681a,0xffdaf7ff,0xbd102000,0x00023c4c,0x00022d9c,
+0x00022da0,0x4ff0e92d,0xb0894604,0x4699460e,0x21002088,0x46174b30,
+0x804cf8dd,0x46054798,0xd0492800,0x22882100,0xfb64f7dc,0xf7ff4620,
+0xab07fc55,0x93059001,0xf04f4683,0x46280a00,0x41e4f241,0x4643464a,
+0xf8cd9602,0x9703a000,0xf0049504,0x4606ff5f,0xd02f2800,0x60286068,
+0x465060ac,0x46429912,0x94004b1c,0xfe6af7fe,0xbb184607,0x2301682a,
+0x3718f882,0x46204b18,0x676b636b,0x67eb67ab,0x3080f8c5,0x46424915,
+0x47984b15,0x464168b3,0x48146b1a,0x4c154b14,0x4b1547a0,0x93004630,
+0x4a154914,0x9701462b,0xf0049702,0xb908f825,0xe0094628,0x4b0d9907,
+0x47984810,0x46294658,0x4b0f2288,0x20004798,0xe8bdb009,0x46c08ff0,
+0x1e00578d,0x000046d9,0x0dadbeef,0x00020f1e,0x1e003fe9,0x00020f23,
+0x00020f59,0x1e004461,0x0000463d,0x00020fd0,0x00020f63,0x00020f66,
+0x1e005c15,0x6840b510,0xf908f000,0xbd102000,0x180cf8d0,0xf44f4a19,
+0xf8c13080,0xb5100160,0x4164f8d1,0x0160f8c1,0x2164f8c1,0x0160f8c1,
+0x3164f8d1,0xd11e4293,0xf8c14a11,0xf8c10160,0xf8c12164,0xf8d10160,
+0x42933164,0x2300d113,0x0160f8c1,0x4164f8c1,0x318cf8c1,0x0120f8d1,
+0x42984b08,0x2001d101,0x4b07e006,0xbf144298,0x20012000,0x2000e000,
+0x46c0bd10,0xaa5555aa,0x55aaaa55,0x04000400,0x84000400,0x4803b510,
+0x6166f642,0xf9e4f7db,0xbd102000,0x00021040,0x3ffff1b1,0x41f0e92d,
+0x460e4604,0xf8d0d106,0x68193848,0x460eb909,0x688ee000,0x781df894,
+0x4620b91f,0xf7e04639,0x68a0fe77,0xfe02f7db,0x2500b170,0xf8d31963,
+0xb1080778,0x47986883,0x2d183504,0xf8d4d1f6,0xb1080778,0x47986c83,
+0x5d10f894,0x2200b13d,0x2d00f8c4,0x21034620,0xf95af7e0,0xf8d4e033,
+0x46313844,0x68a0721d,0xf7db462a,0xf8d4fd43,0x23012844,0x46207213,
+0xf04f4a14,0xf8c431ff,0xf8c457c4,0xf8c457c8,0xf7e057cc,0x4620f941,
+0xf7e04629,0xf8d4fe3d,0x68a13848,0xf7ef6818,0xf44ffaef,0x460a6180,
+0xf7e04620,0x4620f931,0x462a2104,0xf92cf7e0,0x5d00f8c4,0x4620b91f,
+0xf7e02102,0xe8bdfe25,0x46c081f0,0x04000400,0x738ef44f,0x0303fb01,
+0x2844f8d0,0x6304f503,0x429a330c,0x4604b570,0xd016460d,0x3844f8c0,
+0x381cf890,0xf890b13b,0xb9222d10,0xf44f6880,0xf7db5100,0x68a0fd9b,
+0x0112f640,0xf7db462a,0xf8c4fd9d,0xf8c4080c,0xbd700758,0x739ef44f,
+0xf303fb01,0x6328f503,0x330418c3,0xf8c0b570,0x460d3848,0x03c1eb00,
+0x1840f8d0,0x63ecf503,0xf8c04604,0x2901375c,0x4629bf8c,0xf7ff2100,
+0xf894ffbf,0xb15b381c,0x3d10f894,0xf44fb943,0x68a05100,0xbf0c2d00,
+0x2200460a,0xfd66f7db,0x46c0bd70,0x3454f8d0,0x3301b570,0xf8c04605,
+0x68803454,0xfd52f7db,0x4628b110,0x47984b15,0xf8852400,0x46284d5c,
+0x31fff04f,0xff2cf7ff,0x030cf641,0x192b50ec,0x0778f8d3,0x6a83b110,
+0x47982101,0x2c183404,0xf8d5d1f5,0x6e430778,0xf8d54798,0x21000844,
+0x7354f642,0x84c18481,0x85418501,0x85c18581,0x303450e9,0xf7dc22e8,
+0xbd70f9b1,0x0001d585,0x4ff0e92d,0xb08d7c84,0xb99c4607,0x21014b9d,
+0x68b84798,0xfe58f7fe,0x46384621,0xfd84f7e0,0xf7e14638,0xf8d7f953,
+0x68183848,0xff0af000,0x74bb2301,0x3d04f8d7,0x4893b123,0x4188f642,
+0xf8c6f7db,0x4b8f2101,0x47984638,0xf7fe68b8,0x2100fe3b,0xf7e04638,
+0xf8b7fd67,0xf2442828,0x429a3321,0x3b0ed010,0xd00d429a,0x429a3307,
+0x3310d00a,0xd007429a,0x429a3b14,0x3307d004,0xd001429a,0xe0052300,
+0x3840f8d7,0xbf142b02,0x23012300,0x0840f8d7,0xe0004619,0x28023101,
+0xf244d114,0x429a3321,0x3b0ed00e,0xd00b429a,0x429a3307,0x3310d008,
+0xd005429a,0x429a3b14,0x3307d002,0xd101429a,0xe0002302,0x42992301,
+0x68b8d3e4,0xfb94f7db,0x0312f640,0xd0044298,0xf6424869,0xf7db41a9,
+0x4638f873,0xffa4f7e0,0x3710f8d7,0xf897b1bb,0xb97b3d0d,0x3394f8d7,
+0x0f04f013,0x2301d10a,0x3d0df887,0x073cf8d7,0x1d34f8d7,0x7248f44f,
+0x47a04c5c,0x21004638,0x47984b58,0x4638e162,0xf928f7e1,0xf04f4638,
+0xf7ff31ff,0xf8b7fe6d,0xf2441828,0x42993321,0x3b0ed011,0xd00e4299,
+0x42993307,0x3310d00b,0xd0084299,0x42993b14,0x3307d005,0xbf144299,
+0x21012100,0x2101e000,0x46389109,0xf7ff9909,0x4c47fee1,0x2108a80a,
+0xf8d74a46,0x47a03740,0x6778f8d7,0xf0402e00,0xf8d78099,0xf8d71758,
+0xf501074c,0xf8d77100,0xf7dca748,0xf8d7fadf,0xf8d73758,0xf503274c,
+0x91007108,0x91022110,0x7144f240,0x21089103,0x31169104,0x49369105,
+0x0820f04f,0x91064d35,0x7300f503,0xf8cda90a,0x46508004,0xf8d747a8,
+0x492f3758,0x0778f8c7,0x274cf8d7,0x91064604,0x7310f503,0x9600a90a,
+0x8004f8cd,0x96039602,0x96059604,0x47a84650,0x3758f8d7,0xf8c74924,
+0xf8d7077c,0x4683274c,0xf5039106,0xa90a7320,0xf8cd9600,0x96028004,
+0x96049603,0x46509605,0xf8d747a8,0x491a3758,0x0780f8c7,0x274cf8d7,
+0x91064681,0x7330f503,0xf8cd9600,0x96028004,0x96049603,0x46509605,
+0x47a8a90a,0x0401f1d4,0x2400bf38,0x0f00f1bb,0xf044bf08,0xf1b90401,
+0xbf080f00,0x0401f044,0xbf142800,0xf0444623,0xf8c70301,0xb17b0784,
+0xe03e4633,0x0001d47d,0x00021040,0x1e0061f9,0x1e003fc9,0x00020f1e,
+0x00023c50,0x0001ce65,0x461d463c,0x0778f8d4,0x6f03b120,0x47984951,
+0x07a8f8c4,0x34043501,0xd1f32d06,0x4848f8d7,0x22082100,0x0070f104,
+0xf7dc6825,0xf8d7f847,0xf0133388,0xd0050f20,0x3070f8b4,0x6380f443,
+0x3070f8a4,0xf2428a2a,0x429a0350,0x7cabd108,0xd8052b05,0x3072f8b4,
+0x0304f043,0x3072f8a4,0xf0132301,0xd0710fff,0xf1b39b09,0xf43f3fff,
+0xf8d7af12,0xf8d737a8,0xf8d72844,0x60d3073c,0x37acf8d7,0xf8d76113,
+0x615337b0,0x37b4f8d7,0xf8d76193,0x61d337b8,0x37bcf8d7,0xf7df6213,
+0x69f9f93d,0x2303b139,0x7280f44f,0x46389300,0x46132100,0x2303e005,
+0x46389300,0x7280f44f,0x2501460b,0xff9ef7df,0x4638747d,0xfb7ef001,
+0x3d6cf897,0x4820b123,0x511df642,0xff28f7da,0x073cf8d7,0x1d1cf8d7,
+0x727af44f,0x4c1b462b,0x463847a0,0x5d6cf887,0xfbd6f7e2,0xf7e24638,
+0xb130fb15,0xf7df4638,0x4638fab9,0xf7df4629,0x4638fab7,0xf7e02102,
+0xf8d7fbb7,0xb1233d04,0xf642480d,0xf7da513e,0xf897ff03,0xb14b381c,
+0x462968b8,0xfa92f7db,0x4807b120,0x5135f44f,0xfef6f7da,0x073cf8d7,
+0xff70f7de,0xb00d2000,0x8ff0e8bd,0x00020b0d,0x00021040,0x1e0061f9,
+0x5154f500,0x4f70e92d,0xf04f3134,0xf8c00901,0xf8801dd0,0x46049d0c,
+0xf7e92500,0xf642ff6f,0x54e533c6,0xf04f330a,0xf80436ff,0x3b059003,
+0x3b0454e6,0x330654e5,0x9003f804,0x54e53b03,0x33e8f241,0x210254e6,
+0x46204632,0xfa78f7e0,0x46494620,0xf7e0462a,0x210cfa73,0x46204632,
+0xfa6ef7e0,0x4620210b,0xf7e0462a,0x210efa69,0x46204632,0xfa64f7e0,
+0x4620210d,0xf7e0462a,0x2104fa5f,0x46202202,0xfa5af7e0,0x33ccf642,
+0x0a03f04f,0x9003f804,0xf8043349,0x444ba003,0xa003f804,0x73c2f5a3,
+0x122af640,0x332c52e5,0xf50452e2,0x801a532b,0x23c2f642,0x330252e2,
+0x330252e2,0x330252e2,0x330252e2,0x330252e2,0x122bf640,0x330252e2,
+0x0207f04f,0x330252e2,0x0204f04f,0x0b02f04f,0x330252e2,0xa003f824,
+0xf824445b,0xf243b003,0x54e543ab,0x50e53305,0x3304220f,0x4b4f54e2,
+0x0258f641,0x3d08f8c4,0x2391f642,0xf50454e5,0x333053c8,0x9023f884,
+0x5d63f884,0x5d5df884,0x5d5ef884,0x5d5ff884,0x5d60f884,0x5d61f884,
+0x5d66f884,0x5da8f884,0x5d68f884,0x5d62f884,0x9d85f884,0xf64150a3,
+0x54e51336,0x53ecf504,0x32043308,0xf64150a3,0xf804538e,0xf5049003,
+0xf5045306,0x336052c3,0xf2426013,0xf80413e6,0xf504b003,0x33385318,
+0x0264f641,0xf24250a3,0xf804633e,0xf243a003,0x54e533f8,0xf5a32208,
+0x210a731a,0x3b0c50e2,0x336650e1,0x3b5452e1,0x320c54e1,0x54e2444b,
+0x7275f502,0x50e23b0f,0x50e53320,0x50e13304,0x726bf5a2,0x50e23304,
+0x4824f642,0x73fff241,0x54e561e6,0x0608eb04,0xf8842364,0x462936fe,
+0xf884220b,0xf884503e,0xf884903f,0xf884902e,0xf884502f,0xf8845d46,
+0xf8845d52,0xf8c49d53,0xf8845d58,0xf8c45d54,0x46305708,0xfea6f7db,
+0x0322f06f,0x3008f804,0x7073332c,0x000beb06,0x46524909,0xfebaf7db,
+0x53c0f504,0xb005f886,0x9000f883,0x0301f641,0x9003f804,0x503cf884,
+0x8f70e8bd,0xb0e7a864,0x000203d5,0x4ff0e92d,0xa81df890,0x4607b0a1,
+0x0f00f1ba,0x4651d102,0xfa62f7e0,0x073cf8d7,0xffa2f7de,0x3848f8d7,
+0x9cfcf897,0x8008f8d3,0xf8872300,0xf2413cfc,0x5afe63fc,0xf4064683,
+0xf5b36340,0xd11f6f40,0xb15b6b7b,0x739ef44f,0x7203fb08,0x3acbf892,
+0x0f18f013,0xf892d102,0xb98b3b98,0x66fcf241,0x4d645bb8,0x460447a8,
+0x47a85bb8,0x6430f444,0xbf8c280e,0x5080f44f,0x5000f44f,0xb2a64304,
+0x46414638,0xfc2ef7ff,0x3dd0f8d7,0x0388eb03,0xb9236d1b,0xf2424858,
+0xf7da016d,0xf44ffd71,0xfb08739e,0xf8d37303,0xb9233a94,0xf2424852,
+0xf7da016e,0xad14fd65,0x46294638,0xfdecf7e1,0xf8d76b7b,0x227f1848,
+0xbf183b00,0x92002301,0x93012200,0x46134628,0x4c483178,0x463847a0,
+0xf7e04629,0x4638fff9,0x22004631,0xfba4f7ea,0x4638b920,0xf7ea2101,
+0x4606fbcb,0x3848f8d7,0x68184631,0x040bf10d,0xf9ecf7ee,0x46384631,
+0x4b3b4622,0xf8d74798,0x46323848,0x46216818,0xf9f2f7ee,0x3848f8d7,
+0x68182200,0x31fff04f,0xfc02f7ef,0x3848f8d7,0x9cfcf887,0xf0006818,
+0x2201fb5f,0x635cf243,0x46385af9,0xf7df4613,0xf243faf7,0x5af9635e,
+0x23012200,0xf7df4638,0x68b8faef,0x6758f8d7,0xf8a4f7db,0xf04f4638,
+0xf24031ff,0xf7df4204,0xf8d7fcaf,0xf5073814,0x3b0268e8,0xd9042b01,
+0xf24b481b,0xf7da01c6,0xf8d7fcf7,0x46381810,0xfe6cf7e0,0x31fff04f,
+0x1128f8c6,0x4a174638,0xfc96f7df,0xe0034c16,0x4b16200a,0x3c0a4798,
+0x3128f8d6,0x0f01f013,0x2c09d101,0x4638d1f4,0x4140f44f,0xf8d62200,
+0xf8d73128,0xf7df580c,0xf8d7fc7f,0xb1bc47d4,0x349ef8b5,0x0303ea44,
+0x47d0f8d7,0xf8a5b29b,0xe010349e,0x0001e9bd,0x00021040,0x0001ed85,
+0x0001e2f1,0x00020402,0x000f4249,0x1e005d75,0xf7e04638,0xf8d7fd33,
+0x68b83388,0x0f02f013,0x46216a42,0x43a4f240,0xf444bf1c,0x43217400,
+0xd002429a,0x6f96f5b2,0xf8b7d11f,0x051b3384,0xf5b30d1b,0xdb187f00,
+0xf2446b02,0x429a3322,0x6b43d113,0xf8b5b98b,0xf444349e,0xb29b5480,
+0x5380f443,0x349ef8a5,0x349cf8b5,0xf4234321,0x041b5380,0xf8a50c1b,
+0x4622349c,0x68b82300,0xf89cf7db,0x49c24640,0x47984bc2,0x080cf8d7,
+0x25002406,0x3844f8d7,0x6b19022a,0x4200f442,0xb2925d4b,0xb29b18e3,
+0xea443b01,0xb29b2303,0x2540f8a0,0x3520f8a0,0x2540f8a0,0x35015d4b,
+0x2d0618e3,0xd1e5b29c,0x780a784b,0xea424638,0x21982203,0xf9b2f7df,
+0x3844f8d7,0x6b1b4638,0x78dc219a,0xea42789a,0xf7df2204,0xf8d7f9a7,
+0x46383844,0x219c6b1b,0x791a795c,0x2204ea42,0xf99cf7df,0x219e4638,
+0xf7df2200,0x4ca2f997,0x21984638,0x027af10d,0x47a0462b,0xf8d72400,
+0x6b193844,0x037af10d,0x5d0b5ce2,0xd004429a,0xf24b489a,0xf7da11a4,
+0x3401fc23,0xd1ee2c06,0x3120f8d6,0x3ffff1b3,0x4894d104,0x11a9f24b,
+0xfc16f7da,0x21804638,0xf7df2208,0x4638f96f,0x220a215c,0xf96af7df,
+0x7380f04f,0x3100f8c6,0xf44f4638,0x22002180,0xfbaef7df,0x3100f44f,
+0x4638460a,0xfba8f7df,0x2392f642,0x46385afa,0xf7df2174,0xf897f953,
+0xf2423d48,0x21827210,0xbf182b00,0x62bcf44f,0xf7df4638,0xf642f947,
+0x5cf933c7,0x4638b111,0xfa4cf7df,0x07e8f8d7,0xfb28f7e6,0x4300f04f,
+0x3188f8c6,0x4302f103,0x318cf8c6,0x4380f44f,0xf8c62110,0xf5033128,
+0x460a4340,0x68b86273,0xf80cf7db,0xf7fe68b8,0xb283f967,0x0824f8a7,
+0xf8a62100,0x463836a8,0xfa3cf7df,0x46042102,0xf7df4638,0xea40fa37,
+0xf8c74004,0x2156082c,0xf7df4638,0xf507fa2f,0x004053a3,0xf8d76018,
+0x2b003830,0x4638da07,0xf7df21b2,0xf241fa23,0x00404364,0x463850f8,
+0x88ba2116,0xf8faf7df,0x21c04638,0x2830f8b7,0xf8f4f7df,0x21c24638,
+0x2832f8b7,0xf8eef7df,0x46384b4f,0x3160f8c6,0x23cef642,0x21445afb,
+0x3164f8c6,0x24004b4b,0x3160f8c6,0x23d0f642,0xf8c65afb,0xf6423164,
+0x5afa23d2,0xf8d6f7df,0x23d4f642,0x5afa2146,0xf7df4638,0x4638f8cf,
+0xf994f7df,0xf7e04638,0xeb07fe09,0xf8d30384,0xb1111dd0,0xf7e54638,
+0x3401fdff,0xd1f42c04,0x5154f507,0x31344638,0xfa84f7df,0xf7e94638,
+0x2200fdf7,0x030cf641,0x461450fa,0x0384eb07,0x0778f8d3,0x6843b108,
+0x34014798,0xd1f52c06,0x0778f8d7,0x47986c43,0x0778f8d7,0x47986e03,
+0x380cf8d7,0x23e0f8b3,0x3848f8d7,0x2203f3c2,0x681b681b,0xd004429a,
+0xf2424820,0xf7da01ef,0xf8d7fb2f,0xf5071848,0x317064e8,0xf7df4638,
+0x4620f8f1,0x4b17491c,0xf8d74798,0x25013848,0xf0006818,0xf642fb83,
+0x5af9431a,0x4b174638,0x5714f887,0xf8d74798,0x46383848,0x1134f8b3,
+0xffccf7de,0x3848f8d7,0xf8b34638,0xf7de1136,0xf642ffef,0x5cf933c7,
+0xf7df4638,0x4638f96b,0xfd12f7df,0x3848f8d7,0x681b2152,0x46c0e010,
+0x00026fcc,0x0001d869,0x0001d4ad,0x00021040,0x00020006,0x00020007,
+0x00027d4c,0x0001d4fd,0x881a4638,0xf842f7df,0x3848f8d7,0x681b2150,
+0x889a4638,0xf83af7df,0xf7e04638,0xf897ff8d,0x4a443023,0xbf0c2b00,
+0x74faf44f,0x7496f44f,0x3848f8d7,0x691b681b,0x437ff023,0xd1044293,
+0x6f16f5b4,0xf44fbf38,0x46386416,0x46222194,0xf81cf7df,0x3848f8d7,
+0x69fb735d,0xf8d7b163,0x4638280c,0x3688f8b2,0xb29b2100,0x0304f043,
+0x3688f8a2,0xfe1ef7e0,0x33fff04f,0x605cf507,0x3dc0f8a7,0x21003002,
+0xf7db220c,0x69fbfb67,0xf04fb923,0xf8a733ff,0xe00d3dc4,0x030ff04f,
+0x3dc2f8a7,0x03f0f04f,0x3dc4f8a7,0x6370f44f,0x3dc6f8a7,0x0300f24f,
+0x3dc8f8a7,0x37c8f8d7,0xf0434638,0xf8c70304,0xf7df37c8,0xf8d7fa4b,
+0x4659073c,0xfc66f7de,0xb13b6abb,0x62b92100,0x073cf8d7,0x32fff04f,
+0xfa96f7de,0xf8872300,0x687b3dce,0xd9042b09,0x280cf8d7,0xf8c24b0e,
+0x240233dc,0x4d18f887,0x4d1af887,0xf9974638,0xf7de103c,0xf1bafed3,
+0xd1030f00,0x46214638,0xff02f7df,0x3848f8d7,0xf7f16818,0xb021fce7,
+0x8ff0e8bd,0x00082050,0x00989680,0x6800b510,0xf85cf7ff,0x46c0bd10,
+0x41f0e92d,0x46076805,0xf7ff4628,0xf642f955,0x5aeb23bc,0xb9734606,
+0x46282101,0xf8bcf7ea,0x46284604,0xff86f7df,0x46214628,0xfc52f7e5,
+0xf7df4628,0x2300f9f3,0x7290f241,0xf24150ab,0xf04f738c,0x52ea02ff,
+0x4638b916,0xf804f000,0xe8bd4630,0x46c081f0,0x4604b510,0xb0866800,
+0xb1bb6b43,0x32c4f8d4,0xd1132b02,0x2210ab06,0x2d04f843,0x23049300,
+0x93012200,0x93022301,0x46134907,0xf7e59203,0x21fffb21,0x460a4620,
+0xfc32f7eb,0xf7e06820,0x2000ffdf,0xbd10b006,0x00021a85,0x2100b500,
+0x32fff04f,0x4300f06f,0xf880468e,0xf8a01039,0xf8c02cde,0xf8a03664,
+0xf8a02660,0xf880226e,0xf8a02cdc,0xe00b2252,0xf04f3201,0x2a0933ff,
+0x3b01f801,0xf10ed1f8,0xf1be0e01,0xd0080f20,0xfb0e2309,0xf503f303,
+0x18c36396,0x22001c99,0xbd00e7ea,0xf8802301,0x47703037,0x47702000,
+0xb5106c83,0x3120f8d3,0x0f01f013,0x4803d004,0x21a9f242,0xf9b4f7da,
+0x46c0bd10,0x0002299e,0x4ff0e92d,0xb0894e53,0x25004607,0xf240e00b,
+0x93004356,0x46384631,0x4255f240,0x4c4e3301,0x350147a0,0x4b4d3614,
+0x429d681b,0x6bf8d3ef,0xfe4cf7de,0xd1492802,0xf7de6bf8,0x2307fe47,
+0x33199304,0x23019306,0xab079303,0xbf142801,0x0b70f04f,0x0b10f04f,
+0xf04f9302,0xf04f0900,0x493f0ac0,0x0808f10d,0x0401eb09,0x78a27863,
+0xea43021b,0xf8194302,0xf2402001,0x43134656,0x630bea43,0xf8cd9307,
+0x4638a014,0xf2404641,0xf2404255,0x4d304357,0x47a89600,0x792278e3,
+0xea43071b,0x93075302,0x0380f10a,0x96009305,0x46414638,0x4255f240,
+0x4357f240,0x0905f109,0xf5b947a8,0xf10a7f20,0xd1ca0a01,0x689b6c7b,
+0xf2406a5a,0x429a5304,0x3baed108,0x46389300,0xf2404920,0x33014255,
+0x47a04c1b,0x93042307,0x93063319,0x93032301,0xab072500,0xe0119302,
+0x220a014b,0xf3f2fb93,0xf5019307,0x93057310,0x4356f240,0x46389300,
+0xf240a902,0x33014255,0x47a04c0d,0x3501b2e9,0xd1e92d81,0xf7de6bf8,
+0x2802fdcd,0x4638d118,0x6189f44f,0x4200f44f,0xfcaaf7ed,0xf44f4638,
+0x22406182,0xfca4f7ed,0x46c0e018,0x00027f98,0x1e006fcd,0x000235c4,
+0x0002809c,0x00028394,0xf44f4638,0xf6476189,0xf7ed72ff,0x4638fc87,
+0x6182f44f,0x72bff64f,0xfc80f7ed,0x7380f44f,0xf44f4638,0xf44f6189,
+0xf7ed7240,0x4638fc8b,0xf2402250,0xf7ed4139,0x4638fc6b,0x413af240,
+0x4208f44f,0xfc64f7ed,0x22004638,0x413bf240,0xfc5ef7ed,0x22004638,
+0x413cf240,0xfc58f7ed,0x22004638,0x41e5f240,0xfc52f7ed,0x22004638,
+0x414cf240,0xfc4cf7ed,0x22004638,0x6196f44f,0xfc46f7ed,0x22004638,
+0x41f9f240,0xfc40f7ed,0x22004638,0x414ef240,0xfc3af7ed,0x3f5df897,
+0x22ff4638,0x4134f240,0xfc4cf7ed,0x22444638,0x414af240,0xfc3cf7ed,
+0x22804638,0x414af240,0xfc26f7ed,0xf2404638,0xf64a413d,0xf7ed1254,
+0xf897fc1f,0xf8972f5e,0xf4423f5f,0xea425200,0xf8971203,0x46383f60,
+0x2283ea42,0x413ef240,0xf7edb292,0x4638fc0d,0x4127f240,0x4260f44f,
+0x43c0f44f,0xfc1ef7ed,0x220f4638,0xf44f230a,0xf7ed6185,0x4638fc17,
+0x6184f44f,0x427ff44f,0x53f0f44f,0xfc0ef7ed,0x46382201,0xf2404613,
+0xf7ed510e,0x2332fc07,0xf2404638,0xf44f510e,0xf7ed72ff,0x2201fbff,
+0x46134638,0x510af240,0xfbf8f7ed,0x463823a4,0xf24022ff,0xf7ed4116,
+0x4638fbf1,0x514bf240,0x0233f246,0xfbd0f7ed,0x22ff4638,0xf2402346,
+0xf7ed4123,0x4638fbe3,0x4123f240,0x427ff44f,0x5334f44f,0xfbdaf7ed,
+0x22ff4638,0xf2402306,0xf7ed4125,0x4638fbd3,0x4125f240,0x427ff44f,
+0x43bef44f,0xfbcaf7ed,0x220f4638,0xf240230a,0xf7ed4126,0x4638fbc3,
+0x23002208,0x515af240,0xfbbcf7ed,0x22ff4638,0xf44f2312,0xf7ed6184,
+0x4638fbb5,0x4124f240,0x427ff44f,0x53e8f44f,0xfbacf7ed,0x220f4638,
+0xf2402309,0xf7ed4129,0x4638fba5,0x4112f240,0x427ff44f,0x5340f44f,
+0xfb9cf7ed,0x23004638,0x4127f240,0x52f8f44f,0xfb94f7ed,0x463822ff,
+0xf2404613,0xf7ed4134,0x4638fb8d,0x41dff240,0x427ff44f,0x4374f44f,
+0xfb84f7ed,0x22ff4638,0xf2402300,0xf7ed5145,0x4638fb7d,0x4392f44f,
+0x5145f240,0x427ff44f,0xfb74f7ed,0x22034638,0x6156f240,0xfb54f7ed,
+0xf44f4638,0xf2406340,0xf44f41ff,0xf7ed427c,0x4638fb65,0xf240226c,
+0xf7ed411f,0x4638fb45,0x230c227f,0x510ff240,0xfb58f7ed,0x22ff4638,
+0xf240230c,0xf7ed6134,0x4638fb51,0xf44f2217,0xf7ed61c1,0x4638fb31,
+0x6104f240,0x32eaf240,0xfb2af7ed,0xe8bdb009,0x46c08ff0,0xf890b570,
+0x46045038,0xd1572d00,0x6c832601,0x6038f880,0x3120f8d3,0x0f01f013,
+0x4828d004,0x2141f242,0xff86f7d9,0xf8c46c63,0x68985d24,0x462a4629,
+0xfbbcf7da,0x0f04f010,0x4820d104,0x214bf242,0xff76f7d9,0x46314620,
+0x47984b1d,0x8da16be0,0xf7e9462a,0xb938fdc9,0x6be04631,0xfdf0f7e9,
+0x46204601,0xfc16f7ed,0xf4038da3,0xf5b36340,0xbf146f40,0x21282114,
+0x3030f894,0xd0024299,0xf7df6be0,0x4631feeb,0xf7ed4620,0x4620fba9,
+0xf818f000,0xf8844620,0xf7ee5037,0x6963fdb9,0x6919462a,0xf7ed4620,
+0x6963fc33,0x7d194620,0xf9faf7ee,0x5038f884,0x46c0bd70,0x0002299e,
+0x0001ea19,0x47f0e92d,0xf7ef4607,0x2101f8a1,0xf7ed4638,0x4638fb0b,
+0xfd7af7ff,0x41a2f240,0x46382202,0xf8d74ca8,0xf7ed903c,0x2001fabd,
+0x463847a0,0x41a2f240,0x72fdf64f,0xfaaaf7ed,0x47a02001,0x6bf84ca1,
+0xf7deb170,0x2801fbc7,0xf834d10a,0xf4111c04,0xd0114f00,0xf8140489,
+0x46382c02,0xe0090c89,0x1c04f834,0x4f80f411,0x0489d006,0x2c01f814,
+0x0c894638,0xfa78f7ed,0x2b04f834,0x73fff64f,0xd1dc429a,0x22002120,
+0xf7ed4638,0x2108fa6d,0x46382238,0xff70f7ed,0x22562157,0xf7ed4638,
+0x2300fa63,0x220221f3,0xf7ed4638,0x2152ff4d,0x46382200,0xfa58f7ed,
+0x21402220,0xf7ed4638,0xf241fa53,0x58fa33b8,0x3ffff1b2,0x4638d003,
+0xb2922143,0x4638e002,0x22ff2143,0xfa44f7ed,0x22822105,0xf7ed4638,
+0x2140fa3f,0x46382250,0xfa3af7ed,0x22802143,0xf7ed4638,0x214efa35,
+0x46382215,0xfa30f7ed,0x2215214f,0xf7ed4638,0x214dfa2b,0x46382215,
+0xfa26f7ed,0x210423ff,0x463822f8,0xff10f7ed,0x22ff2105,0xf7ed4638,
+0x2106fa1b,0x463822ff,0xfa16f7ed,0x46382107,0xf7ed22ff,0x2108fa11,
+0x22074638,0xf7ed23ff,0xf04ffefb,0x4c5c0800,0xf8384638,0x44446004,
+0x796578a3,0x409d78e1,0xff2af7ed,0x78a27923,0xf303fa50,0x4093b29b,
+0x4638b2ad,0x462a4631,0xf108b29b,0xf7ed0806,0xf1b8fa15,0xd1e20fc6,
+0x21042300,0x463822f8,0xfed6f7ed,0x22002105,0xf7ed4638,0x2106f9e1,
+0x46382200,0xf9dcf7ed,0x22002107,0xf7ed4638,0x2300f9d7,0x22072108,
+0xf7ed4638,0x4638fec1,0x619ef44f,0x42bff44f,0xf9d6f7ed,0x46382200,
+0x41f1f240,0xf9d0f7ed,0x23032207,0xf2404638,0xf7ed41ea,0x2302f9e3,
+0x46382207,0x41ebf240,0xf9dcf7ed,0xf44f221f,0x4638719c,0xf9b0f7ed,
+0x073cf8d9,0xf81cf7de,0x46046c7b,0x68986c99,0xff90f7da,0x073cf8d9,
+0xf7de4621,0x2181f80b,0xf7ed4638,0x2181fec9,0x22044606,0xf7ed4638,
+0x213af997,0xf7ed4638,0x213afebf,0x46052200,0xf7ed4638,0x215af98d,
+0x4638227e,0xf988f7ed,0x22f7211a,0xf7ed4638,0x215afe9d,0x4638227c,
+0xf97ef7ed,0x2215215b,0xf7ed4638,0x2270f979,0x4638215c,0xf974f7ed,
+0x2dc8f8d7,0x429a4b11,0x4638d103,0x22a0215d,0x4b0fe005,0xd104429a,
+0x215d4638,0xf7ed2252,0x4638f963,0x2201215e,0xf95ef7ed,0x215a4638,
+0xf7ed227d,0x2032f959,0x47984b01,0xe00f4c05,0x1e005d75,0x00028710,
+0x00028bb0,0x0249f000,0x01c9c380,0x00989689,0x4b33200a,0x3c0a4798,
+0x4638215f,0xfe6cf7ed,0x0f02f010,0x2c09d101,0x215fd1f2,0xf7ed4638,
+0xf010fe63,0xd1040f02,0x213a4638,0xf7edb2ea,0x2155f92f,0xf7ed4638,
+0x2155fe57,0x46052200,0xf7ed4638,0x215af925,0x4638227e,0xf920f7ed,
+0x227c215a,0xf7ed4638,0x215bf91b,0x46382255,0xf916f7ed,0x215c2276,
+0xf7ed4638,0xf8d7f911,0x4b182dc8,0xd108429a,0x215d4638,0xf7ed22fc,
+0x4638f907,0x2200215e,0x4b13e015,0xd103429a,0x215d4638,0xe0092296,
+0x429a4b10,0x4638d103,0x223d215d,0x4638e002,0x2213215d,0xf8f0f7ed,
+0x215e4638,0xf7ed2201,0x4638f8eb,0x227d215a,0xf8e6f7ed,0x4b022032,
+0x4c054798,0x46c0e00e,0x1e005d75,0x016e3600,0x0249f000,0x01c9c380,
+0x00989689,0x4bb1200a,0x3c0a4798,0x4638215f,0xfdfaf7ed,0x0f02f010,
+0x2c09d101,0x215fd1f2,0xf7ed4638,0xf010fdf1,0xd1040f02,0x21554638,
+0xf7edb2ea,0x4638f8bd,0x227e215a,0xf8b8f7ed,0x21814638,0xf7edb2f2,
+0x223ff8b3,0x21554638,0xf8aef7ed,0x8db94638,0xff30f7ee,0x46388db9,
+0xfd50f7ee,0xf7ed4638,0x4638fc9f,0xfc10f7ed,0xf7f04638,0x4638f839,
+0xfba2f7f1,0x187a2100,0x31c9f892,0x292d3101,0x3fa0f882,0x4638d1f7,
+0xfd5cf7ef,0xf7ee4638,0x4638f897,0xfb90f7f1,0x463822bf,0x61aef44f,
+0xf88ef7ed,0x463822ff,0x5171f240,0xf888f7ed,0xf2404638,0xf64f5172,
+0xf7ed7233,0x4638f881,0x5173f240,0x7243f64f,0xf87af7ed,0x463822cc,
+0x5174f240,0xf874f7ed,0xf2404638,0xf44f5175,0xf7ed7280,0x2200f86d,
+0xf2404638,0xf7ed5176,0x2200f867,0xf2404638,0xf7ed5177,0x2200f861,
+0xf44f4638,0xf7ed61af,0x2200f85b,0xf2404638,0xf7ed5179,0x2278f855,
+0xf44f4638,0xf7ed61bc,0x4638f84f,0x51e1f240,0x72c1f64f,0xf848f7ed,
+0xf2404638,0xf44f51e2,0xf7ed7280,0x4638f841,0x51e3f240,0x72c1f64f,
+0xf83af7ed,0x46382278,0x51e4f240,0xf834f7ed,0xf2404638,0xf64f51e5,
+0xf7ed727a,0x4638f82d,0x51e6f240,0x72eef64f,0xf826f7ed,0x46382200,
+0x51e7f240,0xf820f7ed,0xf44f4638,0x221261bd,0xf81af7ed,0x46382286,
+0x51e9f240,0xf814f7ed,0x4638228f,0x51eaf240,0xf80ef7ed,0xf2404638,
+0xf64f51eb,0xf7ed727b,0x2201f807,0xf2404638,0xf7ed51ec,0x4638f801,
+0x51edf240,0x72f8f64f,0xfffaf7ec,0x463822fb,0x51eef240,0xfff4f7ec,
+0xf2404638,0xf64f51ef,0xf7ec72db,0x224effed,0xf44f4638,0xf7ec61be,
+0x4638ffe7,0x51f1f240,0x72ebf64f,0xffe0f7ec,0xf2404638,0xf64f51f2,
+0xf7ec72bb,0x2231ffd9,0xf2404638,0xf7ec51f3,0x2280ffd3,0x46384613,
+0x6131f240,0xffe6f7ec,0x5280f44f,0x46384613,0x61daf240,0xffdef7ec,
+0x22402300,0xf2404638,0xf7ec6131,0x4638ffd7,0x612cf240,0x72fff647,
+0xffb6f7ec,0x72fff647,0xf2404638,0xf7ec612d,0xf241ffaf,0xf8a73388,
+0x21a53f72,0xf7ed4638,0x218efcc7,0x0fd0f8a7,0xf7ed4638,0x21a2fcc1,
+0x0fd2f8a7,0xf7ed4638,0x2194fcbb,0x0fd4f8a7,0xf7ed4638,0x2193fcb5,
+0x0fd6f8a7,0xf7ed4638,0x21a4fcaf,0x0fd8f8a7,0xf7ed4638,0x21a3fca9,
+0x0fdaf8a7,0xf7ed4638,0xf8a7fca3,0xe8bd0fdc,0x46c087f0,0x1e005d75,
+0x47702000,0x41f0e92d,0xf241461e,0x58c4435c,0x8aa3460f,0xb11b4615,
+0x21e64817,0xfbe0f7d9,0xf0136a23,0xd0030f03,0x21e74813,0xfbd8f7d9,
+0x2b096a63,0x4810d903,0xf7d921e8,0x6a62fbd1,0xd9062a09,0x21eb480c,
+0xfbcaf7d9,0x30fff04f,0x1c53e010,0x9b066263,0x1202eb04,0x9b076313,
+0x63536295,0x6a2262d6,0x19db1cd3,0x0303f023,0x46106223,0x81f0e8bd,
+0x00022c1c,0xf241b537,0x5903445c,0x68194605,0xf7f5a801,0x592bfa81,
+0xe00d681c,0xf7f54620,0xf8d4fa8d,0xb91b30f8,0x46214628,0x47984b04,
+0xf7f5a801,0x4604fa5f,0xd1ef2c00,0x46c0bd3e,0x0001fb25,0x00000200,
+0x000000ff,0x0000000c,0x00000000,0x00200000,0x00000001,0x000d8020,
+0x00000000,0x00200000,0x00000001,0x000d8020,0x00000000,0x03012ee0,
+0x00090016,0x00ffffef,0x010232c8,0x000b0006,0x00483483,0x01033840,
+0x000a000a,0x001c71c7,0x01043c00,0x000b0005,0x00755555,0x01053f48,
+0x0005000a,0x006e9e06,0x010641a0,0x0005000a,0x003cf3cf,0x01074b00,
+0x000b0004,0x00755555,0x01084d58,0x0004000b,0x000a57eb,0x01094e20,
+0x0004000b,0x00000000,0x030a5dc0,0x000a000b,0x00000000,0x050b61a8,
+0x000b0010,0x00000000,0x010c6590,0x00100002,0x00ec4ec4,0x030d7530,
+0x000b0008,0x00000000,0x0c0e9600,0x01130001,0x00000000,0x010f9c40,
+0x000b0002,0x00000000,0x00000000,0x00000000,0x00000000,0x1501000d,
+0x00040160,0x03010005,0x00040164,0x00140000,0x00040124,0x00000004,
+0x00040128,0x00000000,0x0004012c,0x00000000,0x00040130,0x00000000,
+0x00040134,0x0070040a,0x00040134,0x00d4beef,0x00040134,0xff000005,
+0x00040134,0xff02ff01,0x00040130,0x00000018,0x00040134,0x00e0040a,
+0x00040134,0x0048beef,0x00040134,0xff000005,0x00040134,0xff02ff01,
+0x00040134,0x01181000,0x00040134,0x10000302,0x00040134,0xf3f2f118,
+0x00040134,0x0000ccbb,0x00040130,0x00000038,0x00040134,0x00000000,
+0x00040130,0x00000058,0x00040134,0x00000000,0x00040130,0x00000038,
+0x00040134,0x0700200f,0x00040134,0x00940000,0x00040134,0x90000000,
+0x00040134,0x77767574,0x00040134,0x00000000,0x00040134,0x00050000,
+0x00040134,0xffffffff,0x00040130,0x00000268,0x00040134,0x0033846e,
+0x00040134,0x0050badc,0x00040134,0xab0000d4,0x00040134,0xdabadaba,
+0x00040134,0xf1181000,0x00040134,0x1000f3f2,0x00040134,0xf3f2f118,
+0x00040134,0x00000010,0x00040134,0x00000000,0x00040134,0x000a0000,
+0x00040134,0x0e000001,0x00040134,0x4d435242,0x00040134,0x5345545f,
+0x00040134,0x53535f54,0x00040134,0x04014449,0x00040134,0x968b8482,
+0x00040134,0x06010103,0x00040134,0x00000002,0x00040130,0x00000068,
+0x00040134,0x0228040a,0x00040134,0x0080badc,0x00040134,0xffff0000,
+0x00040134,0xffffffff,0x00040134,0xf1181000,0x00040134,0x1000f3f2,
+0x00040134,0xf3f2f118,0x00040134,0x0000afd0,0x00040134,0x00000000,
+0x00040134,0x01000000,0x00040134,0x0e000002,0x00040134,0x4d435242,
+0x00040134,0x5345545f,0x00040134,0x53535f54,0x00040134,0x04014449,
+0x00040134,0x968b8482,0x00040134,0x06010103,0x00040134,0x00000102,
+0x00040130,0x00000468,0x00040134,0x0228040a,0x00040134,0x0080badc,
+0x00040134,0xffff0000,0x00040134,0xffffffff,0x00040134,0xf1181000,
+0x00040134,0x1000f3f2,0x00040134,0xf3f2f118,0x00040134,0x0000afd0,
+0x00040134,0x00000000,0x00040134,0x01000000,0x00040134,0x0e000002,
+0x00040134,0x4d435242,0x00040134,0x5345545f,0x00040134,0x53535f54,
+0x00040134,0x04014449,0x00040134,0x968b8482,0x00040134,0x06010103,
+0x00040134,0x00000102,0x00040100,0x01000000,0x00020490,0x00000000,
+0x000204a0,0x0000f3f1,0x000204b0,0x0000fdef,0x000204a8,0x0000ffff,
+0x000204a8,0x00000000,0x000204aa,0x00000000,0x000204a4,0x00001acf,
+0x000204ac,0x00000000,0x000204bc,0x00000000,0x000204a6,0x000002c7,
+0x000204b6,0x0000fdff,0x000204ae,0x0000ffff,0x00020406,0x00000001,
+0x00020406,0x00000000,0x0002040c,0x00000014,0x00020406,0x00000000,
+0x00020448,0x00000c00,0x00020402,0x00000630,0x00020502,0x00000000,
+0x00020500,0x00004000,0x00020502,0x00000004,0x00020500,0x00004000,
+0x00020502,0x00000008,0x00020500,0x00004000,0x00020502,0x0000000c,
+0x00020500,0x00004000,0x00020502,0x000000c0,0x00020580,0x0000ffff,
+0x00020582,0x0000ffff,0x00020584,0x0000ffff,0x00020586,0x0000ffff,
+0x00020588,0x0000ffff,0x0002059c,0x0000fff0,0x00020540,0x00008000,
+0x00020520,0x00000f06,0x00020540,0x00008000,0x00020540,0x00008100,
+0x00020520,0x00001d10,0x00020540,0x00008100,0x00020540,0x00008200,
+0x00020520,0x0000281e,0x00020540,0x00008200,0x00020540,0x00008300,
+0x00020520,0x00003129,0x00020540,0x00008300,0x00020540,0x00008400,
+0x00020520,0x00003f32,0x00020540,0x00008400,0x00020540,0x00008500,
+0x00020520,0x00004140,0x00020540,0x00008500,0x00020612,0x00000001,
+0x0002062e,0x0000a2e9,0x00020630,0x0000000b,0x00020600,0x00008004,
+0x00020696,0x00000008,0x0002069a,0x000000e4,0x00020688,0x00000000,
+0x0002069c,0x00000002,0x00020688,0x00001000,0x0002069c,0x00000002,
+0x00020688,0x00002000,0x0002069c,0x00000002,0x00020688,0x00003000,
+0x0002069c,0x00000002,0x00020688,0x00000f0b,0x0002069e,0x00000007,
+0x00020510,0x0000000b,0x00020450,0x00004e01,0x00020452,0x0000015b,
+0x000204e4,0x00000090,0x00040160,0x03010004,0x00040164,0x00000000,
+0x00040164,0x00000080,0x00040164,0x00470047,0x00040164,0x00640000,
+0x00040164,0x00400930,0x00040160,0x0301000d,0x00040164,0x00020002,
+0x00040164,0x00040001,0x00040164,0x00000005,0x00040160,0x03010011,
+0x00040164,0x00640064,0x00040164,0x0047000e,0x00040164,0x00002800,
+0x00040160,0x03010015,0x00040164,0x06b40000,0x00040164,0xffffffff,
+0x00040164,0x0000000a,0x00040160,0x0301001d,0x00040164,0x00002710,
+0x00040164,0x08d80000,0x00040160,0x03010020,0x00040164,0x27100006,
+0x00040160,0x03010024,0x00040164,0x08ee0000,0x00040164,0x00320000,
+0x00040164,0x090b0e0a,0x00040164,0x0000020e,0x00040160,0x03010029,
+0x00040164,0x013f0000,0x00040164,0x0c00ffff,0x00040164,0x7b420474,
+0x00040164,0x08640002,0x00040160,0x0301002e,0x00040164,0x80000000,
+0x00040160,0x03010058,0x00040164,0x4d435242,0x00040164,0x5345545f,
+0x00040164,0x53535f54,0x00040164,0x00004449,0x00040160,0x03010060,
+0x00040164,0x00000039,0x00040164,0x00000050,0x00040164,0x000000c0,
+0x00040160,0x03010070,0x00040164,0x03f803f8,0x00040164,0x03f803f8,
+0x00040164,0x03f803f8,0x00040164,0x03f803f8,0x00040164,0x04200434,
+0x00040164,0x03f8040c,0x00040164,0x042a043e,0x00040164,0x04020416,
+0x00040164,0x03f803f8,0x00040164,0x03f803f8,0x00040164,0x03f803f8,
+0x00040164,0x03f803f8,0x00040164,0x04200434,0x00040164,0x03f8040c,
+0x00040164,0x042a043e,0x00040164,0x04020416,0x00040164,0x04480448,
+0x00040164,0x04480448,0x00040164,0x04480453,0x00040164,0x045e0448,
+0x00040164,0x04480448,0x00040164,0x04480448,0x00040164,0x04480448,
+0x00040164,0x04480469,0x00040164,0x04480448,0x00040164,0x04480448,
+0x00040164,0x04480453,0x00040164,0x045e0448,0x00040164,0x04480448,
+0x00040164,0x04480448,0x00040164,0x04480448,0x00040164,0x04480469,
+0x00040164,0x001f0000,0x00040164,0x001f03ff,0x00040164,0x00000002,
+0x00040164,0x00000002,0x00040160,0x03010098,0x00040164,0x001f0000,
+0x00040164,0x001f03ff,0x00040164,0x00000001,0x00040164,0x00000001,
+0x00040160,0x030100a0,0x00040164,0x001f0000,0x00040164,0x001f03ff,
+0x00040164,0x00000001,0x00040164,0x00000001,0x00040160,0x030100a8,
+0x00040164,0x001f0000,0x00040164,0x001f03ff,0x00040164,0x00000001,
+0x00040164,0x00000001,0x00040160,0x030100c0,0x00040164,0x24372437,
+0x00040164,0x24372437,0x00040160,0x03010192,0x00040164,0x0000048c,
+0x00040160,0x030101a0,0x00040164,0xffffffff,0x00040164,0xffffffff,
+0x00040164,0xffffffff,0x00040164,0xffffffff,0x00040164,0xffffffff,
+0x00040164,0xffffffff,0x00040164,0xffffffff,0x00040164,0xffffffff,
+0x00040160,0x030101fc,0x00040164,0x01cb0020,0x00040164,0x00540000,
+0x00040164,0x08ab0000,0x00040164,0x04100000,0x00040164,0x00020084,
+0x00040164,0x01cf0014,0x00040164,0x00440002,0x00040164,0x08af0000,
+0x00040164,0x04100002,0x00040164,0x02020064,0x00040164,0x01ca0010,
+0x00040164,0x003c0002,0x00040164,0x08aa0000,0x00040164,0x04100002,
+0x00040164,0x08020054,0x00040164,0x01ce0008,0x00040164,0x00340000,
+0x00040164,0x08ae0000,0x00040164,0x04100000,0x00040164,0x0a020044,
+0x00040164,0x01c90008,0x00040164,0x00300002,0x00040164,0x08a90000,
+0x00040164,0x04100002,0x00040164,0x1002003c,0x00040164,0x01cd0004,
+0x00040164,0x002c0000,0x00040164,0x08ad0000,0x00040164,0x04100000,
+0x00040164,0x12020034,0x00040164,0x01c80004,0x00040164,0x002c0000,
+0x00040164,0x08a80000,0x00040164,0x04100000,0x00040164,0x19020030,
+0x00040164,0x01cc0000,0x00040164,0x002c0002,0x00040164,0x08ac0000,
+0x00040164,0x04100002,0x00040164,0x1a020030,0x00040164,0x040a00c0,
+0x00040164,0x00000070,0x00040164,0x040a013a,0x00040164,0xc02c0228,
+0x00040164,0x040a02f2,0x00040164,0x00600100,0x00040164,0x00380414,
+0x00040164,0x01020000,0x00040164,0x01140414,0x00040164,0x01dec02c,
+0x00040164,0x00800414,0x00040164,0x04370022,0x00040164,0x00000015,
+0x00040164,0x043700df,0x00040164,0xc02c0065,0x00040164,0x0437012e,
+0x00040164,0x0011002f,0x00040164,0x000b846e,0x00040164,0x00d40000,
+0x00040164,0x0033846e,0x00040164,0x00fcc02c,0x00040164,0x0018846e,
+0x00040164,0x9d8a0002,0x00040164,0x080200fb,0x00040164,0x00fa4ec5,
+0x00040164,0x34830a02,0x00040164,0x100200fe,0x00040164,0x00f92762,
+0x00040164,0x1a421202,0x00040164,0x190200fd,0x00040164,0x00f813b1,
+0x00040164,0x11811a02,0x00040164,0x1c0200fc,0x00040164,0x00fc0fc1,
+0x00040160,0x03010346,0x00040164,0x00000207,0x00040160,0x0301034e,
+0x00040164,0x00010000,0x00040160,0x03010350,0x00040164,0x000c0000,
+0x00040160,0x0301046c,0x00040164,0xeb300035,0x00040164,0x4444eb24,
+0x00040164,0x40200000,0x00040164,0x10080020,0x00040164,0xde5e0008,
+0x00040164,0xe331e832,0x00040164,0x00264d26,0x00040164,0x00201420,
+0x00040164,0x0008fe08,0x00040164,0x00180000,0x00040160,0x03010477,
+0x00040164,0x1d4c0bb8,0x00040164,0x00640ea6,0x00040164,0x01f40000,
+0x00040164,0x00000041,0x00040164,0x3a9861a8,0x00040164,0x001e0000,
+0x00040160,0x0301047f,0x00040164,0x0000c350,0x00040160,0x03010481,
+0x00040164,0x05140000,0x00040164,0x00002008,0x00040160,0x03010485,
+0x00040164,0x00004e20,0x00040164,0x000f0000,0x00040164,0x000601f4,
+0x00040160,0x0301048b,0x00040164,0x00010000,0x00040164,0x00060000,
+0x00040164,0x000f0002,0x00040164,0x0000afc8,0x00040164,0x00001388,
+0x00040164,0x000f17ec,0x00040160,0x03010492,0x00040164,0x012c0000,
+0x00040164,0x0fa00000,0x00040160,0x030104c3,0x00040164,0x00070000,
+0x00040164,0x001e0014,0x00040160,0x030104d1,0x00040164,0x00be0000,
+0x00040160,0x00020003,0x00040164,0x0000001f,0x00040160,0x00020004,
+0x00040164,0x000003ff,0x00040160,0x00020005,0x00040164,0x0000001f,
+0x00040160,0x00020006,0x00040164,0x00000007,0x00040160,0x00020007,
+0x00040164,0x00000004,0x00040160,0x00020008,0x00040164,0x0000ffff,
+0x00040160,0x00020009,0x00040164,0x00000000,0x00040160,0x0002000a,
+0x00040164,0x00000000,0x00040160,0x0002000b,0x00040164,0x00000000,
+0x00040160,0x0002000c,0x00040164,0x00000000,0x00040160,0x0002000d,
+0x00040164,0x00000000,0x00040160,0x0002000e,0x00040164,0x00000000,
+0x00040160,0x0002000f,0x00040164,0x00000000,0x00040160,0x00020010,
+0x00040164,0x0000001f,0x00040160,0x00020011,0x00040164,0x00000000,
+0x00040160,0x00020012,0x00040164,0x00000000,0x00040160,0x00020013,
+0x00040164,0x00000000,0x00040160,0x00020015,0x00040164,0x00000000,
+0x00040160,0x00020016,0x00040164,0x00000000,0x0000ffff,0x00000000,
+0x00020686,0x000009d0,0x00020680,0x00003e3e,0x00020682,0x0000023e,
+0x00020700,0x0000003c,0x00020684,0x00000212,0x00040160,0x00010003,
+0x00020164,0x000000c0,0x00040160,0x00010003,0x00020166,0x0000000a,
+0x00040160,0x00010004,0x00020164,0x00000014,0x00040160,0x00010007,
+0x00020164,0x00000183,0x00040160,0x00010025,0x00020164,0x000001f4,
+0x00040160,0x000104d2,0x00020166,0x0000042b,0x00040160,0x000104d3,
+0x00020164,0x00000100,0x00040160,0x000101fe,0x00020164,0x0000003c,
+0x00040160,0x00010203,0x00020164,0x00000034,0x00040160,0x00010208,
+0x00020164,0x00000030,0x00040160,0x0001020d,0x00020164,0x0000002c,
+0x00040160,0x00010212,0x00020164,0x0000002c,0x00040160,0x00010217,
+0x00020164,0x00000028,0x00040160,0x0001021c,0x00020164,0x00000028,
+0x00040160,0x00010221,0x00020164,0x00000028,0x0000ffff,0x00000000,
+0x1f29365f,0x1f29365f,0x1f29365f,0x1f29365f,0x03000200,0x06000400,
+0x0b000800,0x10011000,0x10031002,0x10051004,0x10071006,0x20071707,
+0x40072d07,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x03000200,0x06000400,0x0b000800,0x10011000,
+0x10031002,0x10051004,0x10071006,0x20071707,0x40072d07,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x40000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x19130d07,0x0d0905fc,
+0x0a060401,0x14120f0c,0x000c0600,0x00120000,0x00180000,0x00000000,
+0x00000000,0x00000000,0x001e0000,0x00000000,0x09060300,0x15120f0c,
+0x001e1b18,0x00000000,0x0000e803,0x1e00cb5c,0x00000040,0x00000002,
+0x00000000,0x00000010,0x1e00cbdc,0x00000028,0x00000001,0x00000000,
+0x00000010,0x0002836c,0x0000000a,0x0000000b,0x00000000,0x00000020,
+0x0002831c,0x00000014,0x0000000c,0x00000000,0x00000020,0x000235c8,
+0x00000094,0x0000000d,0x00000000,0x00000020,0x00023158,0x0000001a,
+0x0000000e,0x00000000,0x00000010,0x00028428,0x00000040,0x0000000f,
+0x00000000,0x00000010,0x00027e6c,0x00000010,0x00000010,0x00000000,
+0x00000008,0x00027f54,0x00000044,0x00000011,0x00000000,0x00000008,
+0x00023444,0x00000060,0x00000012,0x00000000,0x00000010,0x000233dc,
+0x00000040,0x00000014,0x00000000,0x00000008,0x1e00ca28,0x0000009a,
+0x00000017,0x00000000,0x00000010,0x00027e7c,0x0000006c,0x00000000,
+0x00000000,0x00000010,0x00ffff07,0xfff60755,0xea075500,0x075500ff,
+0x5500ffdc,0x00f1dc07,0xf1d10755,0xc5075500,0x075500f1,0x5500f1bf,
+0x00f1ba07,0xf1b40755,0xaf075500,0x075500f1,0x5500f1aa,0x00f1a507,
+0xf1a10755,0x9c075500,0x075500f1,0x5500f198,0x00f19307,0xf18f0755,
+0x8b075500,0x075500f1,0x5500f187,0x00f18307,0xf1800755,0x7c075500,
+0x075500f1,0x5500f179,0x00f17507,0xf1720755,0x6f075500,0x075500f1,
+0x5500f16b,0x00f16807,0xf1650755,0x63075500,0x075500f1,0x5500f160,
+0x00f15d07,0xf15a0755,0x58075500,0x075500f1,0x5500f155,0x00f15307,
+0xf1510755,0x4e075500,0x075500f1,0x5500f14c,0x00f14a07,0xf1480755,
+0x46075500,0x075500f1,0x5500f144,0x00f14207,0xf1400755,0x3e075500,
+0x075500f1,0x5500f13c,0x00f13b07,0xea3b0755,0x39075500,0x075500ea,
+0x5500e339,0x00e33707,0xdd370755,0x36075500,0x075500dd,0x5500d736,
+0x00d73407,0xd0340755,0x33075500,0x075500d0,0x5500cb33,0x00cb3107,
+0xc5310755,0x30075500,0x075500c5,0x5500bf30,0x00bf2f07,0xba2f0755,
+0x2d075500,0x075500ba,0x5500b52d,0x00b52c07,0xaf2c0755,0x2b075500,
+0x075500af,0x5500aa2b,0x00aa2a07,0xa62a0755,0x28075500,0x075500a6,
+0x5500a128,0x00a12707,0x9c270755,0x26075500,0x0755009c,0x55009826,
+0x00982507,0x94250755,0x24075500,0x07550094,0x55008f24,0x008f2307,
+0x8b230755,0x22075500,0x0755008b,0x55008722,0x00872107,0x84210755,
+0x20075500,0x07550084,0x55008020,0x00801f07,0x7c1f0755,0x1e075500,
+0x0755007c,0x5500791e,0x00791d07,0x751d0755,0x1d075500,0x07550075,
+0x5500721d,0x00721c07,0x6f1c0755,0x1b075500,0x0755006f,0x55006c1b,
+0x006c1a07,0x681a0755,0x19075500,0x07550068,0x55006619,0x00661907,
+0x63190755,0x18075500,0x07550063,0x55006018,0x00601707,0x5d170755,
+0x17075500,0x0755005d,0x55005a17,0x005a1607,0x58160755,0x15075500,
+0x07550058,0x55005515,0x00551507,0x53150755,0x14075500,0x07550053,
+0x55005114,0x00511407,0x4e140755,0x13075500,0x0755004e,0x55004c13,
+0x00e38e08,0x00e08e38,0x00000000,0x00000000,0x00000000,0x00002080,
+0x00006180,0x00003002,0x00000040,0x00002042,0x00180047,0x00080043,
+0x00000041,0x000020c1,0x00046006,0x00042002,0x00040000,0x00002003,
+0x00180006,0x00080002,0x000141fc,0x000021fc,0x000021b7,0x0000416f,
+0x0001ff27,0x0000217f,0x00002137,0x000040ef,0x0001fea7,0x0000024f,
+0x000283a8,0x00000040,0x0000000f,0x00000000,0x00000010,0x01100120,
+0x00080001,0x00100020,0x00100020,0x01200120,0x00080001,0x00100020,
+0x00100020,0x00010001,0x00010001,0x00010001,0x00010001,0x00200020,
+0x00200020,0x00200020,0x00200020,0x01200120,0x00080001,0x00100020,
+0x00100020,0x01200120,0x00080001,0x00100020,0x00100020,0x00010001,
+0x00010001,0x00010001,0x00010001,0x00200020,0x00200020,0x00200020,
+0x00200020,0x01280128,0x00090009,0x00280028,0x00280028,0x01280128,
+0x00090009,0x00280028,0x00280028,0x00090009,0x00090009,0x00090009,
+0x00090009,0x00180018,0x00180018,0x00180018,0x00180018,0x01280128,
+0x00090009,0x00280028,0x00280028,0x01280128,0x00090009,0x00280028,
+0x00280028,0x00090009,0x00090009,0x00090009,0x00090009,0x00180018,
+0x00180018,0x00180018,0x00180018,0x325f4c50,0x64685f47,0x00000062,
+0x01030000,0x4c50001f,0x5f47355f,0x00626468,0x00000000,0x00200103,
+0x5f716672,0x00004732,0x00000000,0x01050000,0x66720006,0x47345f71,
+0x00000000,0x00000000,0x00080105,0x5f716672,0x6c5f4735,0x00000000,
+0x01050000,0x6672000a,0x47355f71,0x00006d5f,0x00000000,0x000c0105,
+0x5f716672,0x685f4735,0x00000000,0x01050000,0x6470000e,0x0047325f,
+0x00000000,0x00000000,0x00100105,0x345f6470,0x00000047,0x00000000,
+0x01050000,0x64700012,0x5f47355f,0x0000006c,0x00000000,0x00140105,
+0x355f6470,0x006d5f47,0x00000000,0x01050000,0x64700016,0x5f47355f,
+0x00000068,0x00000000,0x00180105,0x5f677874,0x00004732,0x00000000,
+0x01020000,0x7874001a,0x47345f67,0x00000000,0x00000000,0x001b0102,
+0x5f677874,0x6c5f4735,0x00000000,0x01020000,0x7874001c,0x47355f67,
+0x00006d5f,0x00000000,0x001d0102,0x5f677874,0x685f4735,0x00000000,
+0x01020000,0x4732001e,0x314c505f,0x6264685f,0x00000000,0x00240902,
+0x505f4732,0x685f324c,0x00006264,0x09020000,0x4732002d,0x334c505f,
+0x6264685f,0x00000000,0x00360902,0x505f4732,0x685f344c,0x00006264,
+0x09020000,0x4735003f,0x314c505f,0x6264685f,0x00000000,0x00480802,
+0x505f4735,0x685f324c,0x00006264,0x08020000,0x47350051,0x334c505f,
+0x6264685f,0x00000000,0x005a0802,0x505f4735,0x685f344c,0x00006264,
+0x08020000,0x67630063,0x63635f61,0x47325f6b,0x00000000,0x006d0e02,
+0x5f616763,0x6d64666f,0x0047325f,0x0d020000,0x6170007c,0x47325f62,
+0x00000000,0x00000000,0x016b0603,0x5f626170,0x00004735,0x00000000,
+0x06030000,0x73720171,0x615f6973,0x325f6a64,0x00000047,0x01770103,
+0x69737372,0x6a64615f,0x355f6a5f,0x01030047,0x73720178,0x615f6973,
+0x355f6a64,0x006c5f47,0x01790103,0x69737372,0x6a64615f,0x5f47355f,
+0x0103006d,0x7372017a,0x615f6973,0x355f6a64,0x00685f47,0x017b0103,
+0x00004000,0x00000002,0x00000003,0x00000004,0x00000005,0x00000006,
+0x00000007,0x00000008,0x00000009,0x0001800a,0x0000000b,0x0000000c,
+0x0000000d,0x0606000e,0x0f0f000f,0x00004010,0x00004011,0x00004012,
+0x00004013,0x00004014,0x00004015,0x00004016,0x00004017,0x00004018,
+0x7f7f0019,0x3f3f001a,0x0000001b,0xd4e8c01c,0x53a7c01d,0xffff001e,
+0x0ff0c01f,0x01010020,0x5e1f4021,0x7e7f4022,0xf0304023,0x35350024,
+0x3f3f0025,0x0202c026,0x7f7fc027,0x00000028,0x00000029,0x0c0cc02a,
+0x0000002b,0x3f3c802c,0xfefc802d,0xffff002e,0xffff002f,0x00000030,
+0x00000031,0x0808c032,0x0f0f0033,0x22220034,0xa8a80035,0x6060c036,
+0x11110037,0x00000038,0x00000039,0x3030c03a,0x0101003b,0x0303003c,
+0x0b0cc03d,0x0f10c03e,0x0f0f003f,0x80800040,0x68680041,0x68680042,
+0x80800043,0xffff0044,0x03030045,0x38380046,0xffff0047,0x38380048,
+0xc0c00049,0xffff004a,0xffff004b,0xfd3dc04c,0x0c0c004d,0x9696004e,
+0x5a5a004f,0x7f7f0050,0x7f7f0051,0x33330052,0x0202c053,0x00000054,
+0x30300055,0x00000056,0x5656c057,0x06060058,0x0e0e0059,0x7e7e005a,
+0x1515005b,0x0f0f005c,0x0000005d,0x0000005e,0x0000005f,0x00000060,
+0x00000061,0x00000062,0x00000063,0x04040064,0x00000065,0x00000066,
+0xcfcf0067,0x59590068,0x07070069,0x4242006a,0x0000006b,0xdbdb006c,
+0x9494006d,0x2828006e,0x6363006f,0x07070070,0xd3d30071,0xb1b10072,
+0x3b3b0073,0x06060074,0x58580075,0xf7f7c076,0x00000077,0x00000078,
+0x02020079,0x0000007a,0x0909007b,0x0505007c,0x1616007d,0x6b6b007e,
+0x0000007f,0xb3b30080,0x04040081,0x00000082,0x00000083,0x00000084,
+0x00000085,0x00000086,0x00000087,0x00000088,0x00000089,0x0000008a,
+0x0000008b,0x0202008c,0x0000008d,0x0000008e,0x6666008f,0x66660090,
+0x66660091,0x66660092,0x66660093,0x66660094,0x66660095,0x00000096,
+0x00000097,0x00000098,0x00000099,0x0000009a,0x0000009b,0x0000009c,
+0x0000009d,0x0000009e,0x0000009f,0xffff00a0,0x000000a1,0x606000a2,
+0x666600a3,0x0c0c00a4,0x666600a5,0x0c0c00a6,0x010100a7,0x666600a8,
+0x666600a9,0x666600aa,0x666600ab,0x666600ac,0x666600ad,0x000000ae,
+0x010100af,0x000000b0,0x000000b1,0xf0f0c0b2,0x000000b3,0x050500b4,
+0x303000b5,0x555500b6,0x333300b7,0x000000b8,0x333300b9,0x000000ba,
+0x353500bb,0x000000bc,0x333300bd,0x000000be,0x333300bf,0x000000c0,
+0x000000c1,0x444400c2,0x000000c3,0x7171c0c4,0x7171c0c5,0x030300c6,
+0x888800c7,0x444400c8,0x010100c9,0x000000ca,0x000000cb,0x000000cc,
+0x000000cd,0x000000ce,0x30f080cf,0x050500d0,0x333300d1,0x000000d2,
+0x050500d3,0x000000d4,0x000000d5,0x050500d6,0x000000d7,0x000000d8,
+0x050500d9,0x000000da,0x333300db,0x000000dc,0x333300dd,0x000000de,
+0x7777c0df,0x888800e0,0x000000e1,0x444400e2,0x0303c0e3,0x0f0fc0e4,
+0x0f0fc0e5,0x444400e6,0x010100e7,0x000000e8,0x000000e9,0x000000ea,
+0x000000eb,0x7777c0ec,0x585800ed,0x7777c0ee,0x585800ef,0x000000f0,
+0x000000f1,0x747400f2,0x0404c0f3,0xa2a200f4,0xaaaa00f5,0x242400f6,
+0x0909c0f7,0x282800f8,0x101000f9,0x555500fa,0x808000fb,0x888800fc,
+0x888800fd,0x888800fe,0x888800ff,0x80800100,0x38380101,0xb8b80102,
+0x80800103,0x38380104,0x78780105,0xc0c00106,0x03030107,0x00000108,
+0x00000109,0x0000010a,0x0400810b,0x0c0c010c,0x0000010d,0x0000010e,
+0x9696010f,0x77770110,0x5a5a0111,0x00000112,0x00000113,0x21210114,
+0x70700115,0x00000116,0x00000117,0x00000118,0xb3b30119,0x5555011a,
+0x0b0b011b,0x0000011c,0x0303c11d,0x0000011e,0xb3b3011f,0x55550120,
+0x30300121,0x46460122,0x00000123,0x00000124,0x00000125,0x21210126,
+0x23230127,0x02020128,0x0000ffff,0x3d0604f4,0x04f30103,0x01014c0c,
+0x500804f3,0x04f27f00,0xff004408,0x4a0004f3,0x04f2ff00,0xff004d04,
+0x4e0404f3,0x04f2ff00,0x0f004f0c,0x4f0004f3,0x04f50f04,0x0f004900,
+0x460304f6,0x04f50704,0x0100460f,0x460004f6,0x04f50701,0x07044808,
+0x480b04f5,0x04f50f00,0x0f044904,0x450f04f4,0x04f70100,0x0704520d,
+0x520004f8,0x04f70107,0x07054103,0x410604f7,0x04f70f00,0x0705420a,
+0x420f04f6,0x04f70100,0x07014200,0x430b04f6,0x04f60f04,0x0f004307,
+0x450604f6,0x04f40101,0x0f044007,0x400b04f4,0x04f30f00,0x03033c0e,
+0x3c0004f4,0x04f40705,0x07003c03,0x520004f2,0x00000f00,0x4ff7e92d,
+0x46059f0c,0x4691468b,0xa038f8dd,0xb11b4698,0x5303ea4f,0xb1230d1b,
+0xf44f488a,0xf7d77108,0x4e89fcaf,0x21004628,0xf7d82290,0x6834fd6f,
+0xf44fb96c,0x46217032,0x47984b84,0x28006030,0x80fbf000,0xf44f4621,
+0xf7d87232,0x6833fd5f,0xbf082f01,0xf8c52700,0xf893308c,0x261122c4,
+0xf8833201,0xf8c522c4,0x9b0d807c,0x652b612e,0x904cf8c5,0x2f00606f,
+0x80dff040,0x53c0f04f,0x0f13681a,0x0413602b,0x632b0c1b,0x4303f3c2,
+0x5203f3c2,0x63aa636b,0x2301b10a,0x6bab63ab,0x3b0e4628,0xbf8c2b01,
+0x23012300,0x3040f885,0x465a4641,0xfa02f000,0x3084f8d5,0xf0002b00,
+0x462880bc,0xf7d84639,0x4604f8a1,0x485db920,0x71a2f44f,0xfc54f7d7,
+0xf7d84628,0x280af963,0xbfc46168,0x63eb6ae3,0xf0136863,0x61ab5f80,
+0xf8d4d005,0x622b3604,0x03fff003,0xf44f61eb,0x60ab63e0,0xf04f463c,
+0x60eb33ff,0xe011612e,0x46284621,0xf87af7d8,0xf7d74628,0x4628ff49,
+0xf940f7d8,0x308cf8d5,0x3024f853,0xbf084598,0x34014627,0x3084f8d5,
+0xd3e9429c,0x46284639,0xf864f7d8,0xf7fc4628,0x9a0ff955,0x46286ceb,
+0x21009201,0xf8cd4642,0xf7fba000,0x2800fa21,0xf1bad16b,0xd1010f00,
+0xe0014656,0x6000f8da,0x43e4f241,0xb12e62ab,0x49354630,0xfc6cf7d8,
+0xb9406268,0x49332000,0xfc66f7d8,0xb9106268,0x73fff64f,0x6a6b626b,
+0x482ab923,0x210ff240,0xfbeef7d7,0x492c4630,0xfc56f7d8,0x80b8f8df,
+0xf89862e8,0x2c004000,0x696bd12b,0xdd0b2b13,0x6100f44f,0x46224628,
+0xf824f7d8,0x65844639,0x462865c4,0xf81af7d8,0x6ce94628,0xfad0f7fb,
+0x6ce94628,0xfab0f7fb,0x4630491c,0xf7d86cec,0x4621fc33,0x46284602,
+0xfbdaf7fb,0x6ce94628,0xfcb4f7fb,0x6ce94628,0xfa90f7fb,0xf8882301,
+0x696b3000,0xdd112b0f,0x49114630,0xfc1cf7d8,0x21004b10,0xbf082800,
+0x90004618,0x46282288,0x33fff04f,0xff4af7d7,0x2500e000,0xe8bd4628,
+0x46c08ffe,0x0002070c,0x00023b30,0x1e00578d,0x00020729,0x00020730,
+0x0002073a,0x00020745,0x0002074e,0x000a005a,0x00023bcc,0x4f18b5f0,
+0x7839b085,0xb1094604,0xe0274816,0x4b174a16,0x4d142800,0x4602bf08,
+0x4603bf08,0x91019100,0x92039302,0xf2444628,0x46227110,0x53c0f04f,
+0xfeacf7ff,0xb9584606,0x108cf8d5,0x4608b909,0x4620e00c,0x7232f44f,
+0x47984b09,0xe0054630,0x23204a08,0x23016013,0x4628703b,0xbdf0b005,
+0x00023b34,0x00023b3c,0x00023bb4,0x00023bb0,0x1e005c15,0x00023b38,
+0x47ffe92d,0x46884681,0x2090461d,0x4b142100,0x9e0d4692,0x47989f0e,
+0xb1e04604,0x46499b0c,0x46429301,0x95004653,0x97039602,0xfe72f7ff,
+0xb9304605,0x46214640,0x4b0a2290,0x46284798,0xb90ee00a,0xe0004633,
+0x67636833,0x463bb90f,0x683be000,0x462067a3,0xe8bdb004,0x46c087f0,
+0x1e00578d,0x1e005c15,0x4ff0e92d,0xb0872b01,0x91054605,0x93039204,
+0xd9019f11,0xe0a32000,0x0a00f04f,0x8084f8d0,0x9040f8dd,0xe09046d3,
+0x208cf8d5,0x0688ea4f,0xf8c318b3,0x9b0591c0,0x45994641,0x9c04bf08,
+0xbf084628,0x4028f842,0xf87cf7d8,0x8080f8c5,0x462867e8,0x408cf8d5,
+0xf808f7d8,0x308cf8d5,0x18f31934,0x0080f8c4,0x3080f8d3,0x6f00f5b3,
+0x4628d125,0xf7d86fec,0x2804f811,0x2805d001,0x6823d903,0x6703f3c3,
+0x6b2ae059,0x3306f244,0xd101429a,0xe0522706,0x7304f244,0xd101429a,
+0xe04c2709,0x3365f245,0xd101429a,0xe0462707,0xf240482d,0xf7d72103,
+0x2701fabb,0xf5b3e03f,0xd13c6f03,0x46286fe9,0x6670f501,0x6177f501,
+0xffc8f7d7,0x0301f108,0x3084f8c5,0x051b0d03,0x5fc0f1b3,0xf420d12b,
+0xf024647e,0x2200041f,0xf8d5e008,0xeb03308c,0xf8d30382,0x429c31c0,
+0x3201d005,0x3084f8d5,0xd3f2429a,0x2a11e001,0xf106d115,0x4628019c,
+0xffa4f7d7,0x9c039400,0x4003f3c0,0x90011c63,0x46289905,0xf7ff9a04,
+0x9b10ff67,0xf1b34483,0xbf085fc0,0xf10a1a3f,0xf1080a01,0xf5090801,
+0x45ba5980,0xf1b8d203,0xf67f0f0f,0xeb0baf69,0xf8c5030a,0x46183084,
+0xe8bdb007,0x46c08ff0,0x00020754,0x460db537,0x46046fc1,0x617bf501,
+0xff74f7d7,0xffb2f7d7,0x53c0f04f,0x23019300,0x93014601,0x462a4620,
+0xf7ff3b01,0xf8c4ff35,0xbd3e0084,0x4604b570,0xfd68f7d7,0x46052100,
+0xf7d74620,0xb920fe87,0xf6404804,0xf7d71137,0x4620fa3b,0xf7d74629,
+0xbd70fe7d,0x000209c5,0x4ff8e92d,0xa028f8dd,0x46884605,0xf8dd4699,
+0x4617b02c,0x481fb922,0x2198f643,0xfa24f7d7,0x0f00f1ba,0xf1bbd109,
+0xd1060f00,0xb9239b0c,0xf6434818,0xf7d72199,0xf505fa17,0x3308636c,
+0x781e2200,0x2434b9c6,0xf404fb02,0x606cf504,0x4b113008,0x46391828,
+0x4798221f,0xf8c41964,0x9b0cbef0,0xf8c44630,0xf8c48ee8,0xf8c49eec,
+0xf8c4aef4,0xe00a3ef8,0x33343201,0xd1e02a16,0xf6434804,0xf7d721a9,
+0xf06ff9ef,0xe8bd0015,0x46c08ff8,0x00021040,0x1e0040f9,0x4ff0e92d,
+0x9004b091,0x4699460c,0x7050f243,0x4ba92100,0xf8dd4615,0xf8dda06c,
+0xf89d8078,0x47986068,0x28004607,0x8521f000,0xf2432100,0xf7d87250,
+0xf507fa91,0x9a046b28,0x6304f507,0xf10b330c,0xf8c70b04,0xf8c73844,
+0x4649273c,0xf8c74638,0xf8c7b848,0xf8c79000,0xf8c7a048,0xf8878808,
+0xf7fc603d,0x4638fac9,0xfc86f7db,0xf887683b,0xf8c76774,0xf5073740,
+0xf8c763ec,0xf507375c,0x3b0c62ea,0xa748f8c7,0x92014628,0x46519302,
+0x9b1d9a1c,0x8000f8cd,0xfe4af7ff,0x074cf8c7,0x230bb910,0xbce2f000,
+0x8750f8d7,0xf8c760b8,0x4640800c,0xf7d84980,0xb120f9cb,0x460a2100,
+0x47984b7e,0x4640b284,0xf7d8497d,0xb120f9c1,0x460a2100,0x47984b79,
+0x4620b285,0x4b794629,0xb9104798,0xf000230c,0x2200bcc1,0x0112f640,
+0x4826f8a7,0x5828f8a7,0x074cf8d7,0xfdaef7d7,0x0758f8c7,0x074cf8d7,
+0xfe70f7d7,0xf8d768ba,0xf8c73758,0x60780744,0x93056b11,0x380cf8c7,
+0x3306f244,0xd1174299,0x2b026b53,0x6b91d91a,0xd1052902,0x2828f8b7,
+0x3303f244,0xd117429a,0x2828f8b7,0x3321f244,0xd002429a,0x429a3303,
+0x2901d108,0xe005d10c,0x3311f244,0xd1014299,0xb12b6b53,0x1380f44f,
+0xf0034103,0xe0000001,0xb9102000,0xf000230d,0xf8d7bc79,0xf7fa074c,
+0x4638fe9f,0xf7dc2100,0x4638fdcb,0x31fff04f,0xff3af7fb,0xf7fb4638,
+0xb910feef,0xf000230e,0x4949bc65,0xf7d84640,0x68baf97b,0xbf0828ff,
+0xb2802001,0x0384f8a7,0xb1b86a51,0xd80128ff,0xe0142401,0x3b010b03,
+0xd80f2b01,0x2303f3c0,0xd80b2b09,0xf3c0b153,0x2b091303,0xf000d806,
+0x2b09030f,0x2400bf8c,0xe0002401,0x6a922400,0x43e4f241,0xd110429a,
+0x6382f5a1,0x2b013b07,0x283fd801,0xf240e007,0x4299430c,0x3315d004,
+0xd1024299,0xd8002850,0xb9142400,0xf000230f,0x492abc25,0xf7d84640,
+0x4929f93b,0x0386f887,0xf7d84640,0x4927f935,0x0388f8c7,0xf7d84640,
+0xf8d7f92f,0xf8c7174c,0x6a8a038c,0x036bf241,0xd10c429a,0x2b4e6a4b,
+0xf8b7d109,0x2b403384,0xf8d7d905,0xf0433388,0xf8c70302,0xf8d73388,
+0xf0133388,0xd1020f20,0xf8872301,0xf24437c0,0x429d3324,0x3b0bd014,
+0xd011429d,0x429d3b07,0x3316d00e,0xd00b429d,0x429d3303,0x3b17d008,
+0xd005429d,0x429d3307,0x3319d002,0xd113429d,0xe0122302,0x1e00578d,
+0x000212c6,0x1e0037cd,0x00020716,0x1e006919,0x000212cd,0x000212d6,
+0x0002073a,0x000212de,0xf8c72301,0xf8d73770,0x46383770,0x32f0f8c7,
+0xf8c72301,0xf0013840,0xf8c7fadd,0xb9080818,0xe3b72310,0x3321f244,
+0xd011429d,0x429d3b0e,0x3307d00e,0xd00b429d,0x429d3310,0x3b14d008,
+0xd005429d,0x429d3307,0x2600bf14,0xe0002601,0x46312601,0xf7fb4638,
+0xf8d7fefd,0x2e002848,0x2302bf0c,0x60532301,0xf8d76096,0xf8d7074c,
+0xf7d74844,0x6020fb73,0x074cf8d7,0x4844f8d7,0xfb58f7d7,0x380cf8d7,
+0xf8d36060,0xf8c7315c,0xf8c73830,0x687b3834,0x2b103b04,0x4896d904,
+0x213ff64a,0xf824f7d7,0x4a946879,0xfb012306,0xf8d72303,0xf8d70844,
+0x6303475c,0x3848f8d7,0x685a4638,0x3818f8d7,0x93009905,0xf001463b,
+0x6020f875,0x2311b908,0xf8d7e35c,0x6819375c,0x2b01684b,0x2312d001,
+0xf8d7e354,0xf04f2848,0xf8a2030f,0xf2403134,0xf8a233ff,0x68533136,
+0x2b026011,0x3b01d115,0x68b97313,0x3306f244,0x429a6b0a,0x6b8bd106,
+0xd1032b02,0x2848f8d7,0x73132300,0x3848f8d7,0x21034638,0xf7dc7b1a,
+0xf8d7fb97,0x68532848,0xd1012b02,0x73133b01,0x210a2201,0x4638637a,
+0xfb8af7dc,0x2848f8d7,0x0356f242,0x8a016810,0xd8064299,0x42993b01,
+0x3b05d234,0xd0094299,0xf242e030,0x42990360,0xf24ed01f,0x429943f5,
+0xe027d021,0x2b017c83,0xf06fd105,0xf8c2033b,0x334b3124,0xf06fe004,
+0xf8c20345,0x335a3124,0x3128f8c2,0x3388f8d7,0x5f80f413,0xf8d2d019,
+0x3b023124,0x3124f8c2,0xf06fe013,0xf8c2034a,0x335a3124,0xf06fe00b,
+0xf8c20395,0xf5033124,0xe0047396,0x034af06f,0x3124f8c2,0xf8c2335f,
+0xf8d73128,0x46381848,0x3124f8d1,0xf8c14c46,0xf8c13120,0xf8d13118,
+0xf8c13128,0x3114311c,0xf806f7de,0xf8d76b7b,0x227f1848,0xbf183b00,
+0x92002301,0xf1012200,0x93010014,0x46133178,0x4b3a47a0,0xf8d7493a,
+0x2e000750,0x4619bf08,0xffcef7d7,0xb940b2c0,0x49374b36,0x0750f8d7,
+0xbf082e00,0xf7d74619,0xb240ffc3,0x2b0e1e43,0x2300d901,0x68bbe039,
+0xf2446b1a,0x429a3325,0x2801d001,0xf642d105,0x23004215,0x320154bb,
+0x2802e006,0x2301d105,0x4215f642,0x18d254bb,0x4b2654bb,0xf8d74926,
+0x2e000750,0x4619bf08,0x4848f8d7,0xff9cf7d7,0x010df884,0x1848f8d7,
+0x310df891,0xd1082bff,0x2386f897,0xd1042a01,0xf8812308,0x4613310d,
+0xf343e007,0x099b0205,0x0382eb03,0x310df881,0xb90b2301,0xe2653314,
+0x3ffff1b6,0xaeaaf43f,0x46382100,0xf818f7dc,0x46382103,0xf882f7dd,
+0x4d0f4b0e,0xf8d7681c,0xf04f0758,0x46297340,0x3160f8c0,0x46c0e02c,
+0x00021040,0x00023868,0x0001ed85,0x000212ef,0x000212ea,0x000212f8,
+0x000212f4,0x000209b6,0x000212fc,0x00031650,0x0002ad24,0x78ca790b,
+0xea43041b,0x798a6302,0x794a4313,0x2302ea43,0x3164f8c0,0x780a784b,
+0xea43021b,0x788a4302,0x43133107,0x3164f8c0,0x0301ebc5,0xd3e542a3,
+0x49804640,0xff34f7d7,0x4617f642,0x497e55b8,0xf7d74640,0xf507ff2d,
+0x34175430,0xf6427823,0xf507481c,0x351c5530,0x0008f807,0x3301b90b,
+0x462055bb,0x4c752101,0xf64247a0,0xb2c04318,0x330154f8,0x782b54f8,
+0x3301b913,0x3008f807,0x21014628,0xf64247a0,0xb2c0431d,0x240054f8,
+0x54f83301,0x4621e007,0xf7fb4638,0x4638fd21,0xfae4f7dc,0xf8d73401,
+0x429c3840,0xf8d7d3f3,0x2300074c,0x4a634962,0xf7d79700,0xf897f985,
+0xb153381c,0x074cf8d7,0xf7d72101,0xb120fa13,0xf64a485d,0xf7d6312b,
+0x4b5cfe77,0x21004638,0xf8d74798,0x495a0750,0xfeb2f7d7,0xb9784603,
+0x041af10d,0x49584b57,0x4620221f,0xf8d74798,0x46210750,0xfea4f7d7,
+0xb9084603,0xe1ad2315,0x6802f507,0x0818f108,0x46414618,0x47984b4f,
+0x1839f897,0x283af897,0x6838f897,0x083bf897,0x0302ea01,0x483cf897,
+0x0303ea06,0x583df897,0x0303ea00,0x0303ea04,0x0303ea05,0xd0092bff,
+0x0302ea41,0x0303ea46,0x0303ea40,0x0303ea44,0xd101431d,0xe1812316,
+0x99044638,0x464b4652,0xf92ef001,0x07f8f8c7,0x231fb908,0x4638e176,
+0xfad2f000,0x0800f8c7,0x233db908,0x4934e16e,0xf7d768f8,0xf243fe85,
+0x52f8635c,0x68f84931,0xfe7ef7d7,0x635ef243,0x463852f8,0xf940f7dc,
+0x3848f8d7,0xf6426818,0x5cf94315,0xf8c0f7eb,0x5058f507,0x22064641,
+0xf7d7300e,0x4641fee3,0xf1072206,0xf7d7004c,0x4638fedd,0xf972f001,
+0x435cf241,0xb90850f8,0xe13f2329,0xf0004638,0xf8c7fa51,0xb90807e0,
+0xe1372331,0xf0004638,0xf8c7f971,0xb90807e8,0xe12f2332,0xf0014638,
+0xf8c7f87d,0xb90807f0,0xe1272334,0xf0004638,0xf243fc5f,0x50f8734c,
+0xf0402800,0x23368127,0x46c0e11c,0x00021300,0x00021308,0x1e003645,
+0x0000ba35,0x0000ba25,0x00021040,0x0001d47d,0x00021313,0x1e0040f9,
+0x00021310,0x1e00366d,0x0002131b,0x0002132e,0x3848f8d7,0x68596818,
+0xfc2cf7ea,0x63fcf241,0xf8d752f8,0x6b7c3848,0xf8d36818,0x68068004,
+0xfa48f7ea,0x0a00f04f,0x23ffb2c0,0x55b8f507,0x90039301,0x3c004643,
+0x2401bf18,0x46514628,0xf8cd4632,0x9402a000,0xf984f7ef,0xb12b6b7b,
+0x62d2f241,0xf0435abb,0x52bb0320,0x50baf507,0x22904649,0xf7d7301c,
+0x4649fe61,0xf5072290,0xf7d7703d,0xf04ffe5b,0xf04f0206,0xf8a70305,
+0xf8a726fc,0x4c7333a0,0x7225f44f,0x03c4f04f,0x0501f04f,0x23a2f8a7,
+0x3636f8a7,0x5634f8a7,0x4a6d4651,0x46384b6d,0xa000f8cd,0xf7fd9701,
+0x1d23f969,0x0007e893,0xe883466b,0x68230007,0x21074638,0x4c66463a,
+0x463847a0,0x6159f507,0x47984b64,0x07e0f8d7,0xfab4f7e5,0xf887b108,
+0x22025d46,0x33e4f241,0x465954fa,0xaac8f887,0x5c04f887,0xf7db4638,
+0xf507fa5b,0x4638613c,0xfa56f7db,0xf241221e,0x54fa33ef,0x22183301,
+0x34fff04f,0x463854fa,0xf7db2101,0x4638f8cb,0xf8c74651,0xf7dc4d4c,
+0xf241f8ad,0xf88733ee,0xf887aaca,0x54fcac06,0x54fc191b,0x54fc191b,
+0x46514638,0xfed6f7db,0xf10d2206,0x4946003a,0xfdecf7d7,0x2828f8b7,
+0x3321f244,0xd011429a,0x429a3b0e,0x3307d00e,0xd00b429a,0x429a3310,
+0x3b14d008,0xd005429a,0x429a3307,0x2400bf14,0xe0002401,0x46382401,
+0x1dd0f8d7,0x4b374622,0x46054798,0x2339b108,0xf10de034,0x4622013a,
+0xf7f24638,0xf44ffd77,0xfb04739e,0x19caf103,0x0a94f8c2,0x2337b908,
+0x2301e024,0xf8d27603,0x18790a94,0x612ef501,0x311c30f8,0xf7d72228,
+0xf1b4fdad,0xd0b73fff,0x2398f8d7,0x605ef507,0x2110300c,0x4b2232c0,
+0x6cba4798,0x60d74b21,0x46386093,0xfa9cf7dd,0xb1029a1f,0x46386015,
+0x231ee024,0xb90a9a1f,0xe01f4610,0x20009a1f,0xe01b6013,0x59b6f507,
+0x090cf109,0x22902100,0xf7d74648,0xf241fd63,0xf04f63f8,0x52fa0264,
+0x33302203,0x463854fa,0x23012200,0x512cf44f,0x47a04c0d,0xf43f28ff,
+0xe6dfaedb,0xe8bdb011,0x46c08ff0,0x00021030,0x000072e9,0x00007501,
+0x0001f801,0x0001db1d,0x00021028,0x0001e691,0x1e003bcd,0x0000584d,
+0x0001e9a1,0x2100b5f0,0x4606b085,0xf44f4b56,0x4798702c,0xb9084605,
+0xe0a14607,0xf44f2100,0x4607722c,0xfd26f7d7,0x2100602e,0x186a2301,
+0x290818c9,0xd1f97293,0x742b3b01,0x732b746b,0x461a72eb,0x18ab2101,
+0x2a081852,0x12a8f883,0x2310d1f8,0x752b74eb,0xf8852306,0xf04f3027,
+0xf88533ff,0xf44f3028,0x866b737a,0x03c8f04f,0x230086ab,0x20052203,
+0xf88574a9,0x1849302a,0x6300f503,0x202cf885,0x202df885,0x0029f885,
+0x102bf885,0x3214f8c5,0x75a97568,0x7d6b462a,0x7dab75d3,0x320177d3,
+0x0308f105,0xd1f6429a,0x24002201,0x33e7f241,0x202ff885,0x402ef885,
+0x54f24628,0xff10f7e1,0xf44f4630,0x4a277194,0x94004b27,0xf7fd9501,
+0x42a0f819,0xdb386068,0x46304b24,0x4b249300,0x93014924,0x4a254b24,
+0x462b9302,0xf9c4f7ff,0xd12a2800,0x073cf8d6,0x462a4921,0x4c224b21,
+0x63a847a0,0x462ab308,0x48214c20,0x47a04921,0x4821462a,0x47a04921,
+0x1d234c21,0x0007e893,0xe883466b,0x68230007,0x21064630,0x4c1d462a,
+0x462847a0,0x102ef896,0xfebcf7e1,0xf8c523c8,0x46283210,0xfe8cf7e1,
+0x6cb0e006,0xf44f4629,0x4b15722c,0x27004798,0xb0054638,0x46c0bdf0,
+0x1e00578d,0x0000f0ad,0x0000e769,0x0000ee69,0x0000eb41,0x0002188c,
+0x0000e7b5,0x00021934,0x0000d249,0x0002193a,0x1e0061d1,0x1e006061,
+0x0002193f,0x0000eda9,0x0002194b,0x0000ed29,0x0002187c,0x0001f801,
+0x1e005c15,0x4605b57f,0x20ac2100,0x47984b1c,0x4604b908,0x2100e030,
+0x460422ac,0xfc52f7d7,0x60254b18,0x93006065,0x26004b17,0x46289302,
+0x4a174916,0x96014623,0xf94af7ff,0xf04fb9b0,0x82630301,0x682082a3,
+0xf86cf7db,0x63fbf640,0xf64181a0,0xf5b062ff,0xbfd45ffc,0x20012000,
+0xbf1842b0,0x74204613,0xe00581e3,0x6ca84621,0x4b0822ac,0x46344798,
+0xb0044620,0x46c0bd70,0x1e00578d,0x0000f125,0x0000f119,0x00021aa4,
+0x00021af8,0x1e005c15,0x2100b530,0xb0854605,0x4b0c2004,0xb9084798,
+0xe0104604,0x22042100,0xf7d74604,0x4b08fc07,0x93006025,0x93012300,
+0x46289302,0x4a064905,0xf7ff4623,0x4620f901,0xbd30b005,0x1e00578d,
+0x0000f521,0x00021b34,0x00021bd5,0x47f0e92d,0xf89db086,0xf8dd4038,
+0x9400a04c,0x461f9c0f,0x9c109401,0xa014f8cd,0x9c119402,0x9c129403,
+0xf7ff9404,0x4605f92f,0xf8dab918,0x48464000,0xf44fe00b,0x21007035,
+0x47984b44,0x48ecf243,0xf8454604,0xb9280008,0x46394841,0x4b424a41,
+0xe0734798,0xf44f2100,0xf7d77235,0xf855fbbf,0x237f2008,0x60156055,
+0x36fff885,0x24006853,0x4700f883,0x94014b39,0x94029300,0x49384628,
+0xf8554a38,0xf7ff3008,0x4606f8af,0x4836b108,0xf8d5e7db,0x4935073c,
+0x2008f855,0x4c354b34,0xf8df47a0,0xf8c590b4,0xb9280d1c,0x46394832,
+0x47c84a28,0xe0414634,0x2008f855,0xf8852301,0x492e6d11,0x32c4f8c2,
+0xf7d768e8,0x4604fb05,0x482b4621,0xb14c47c8,0x492a4620,0x47984b2a,
+0xf855b920,0x23022008,0x32c4f8c2,0x44ecf243,0x4826592b,0x12c4f8d3,
+0x47b04e17,0xf0005928,0xb110f893,0x48224604,0x5928e006,0xf84af000,
+0xb1284603,0x481f4604,0x4a0e4639,0xe00d47b0,0x0f00f1ba,0xf8cad001,
+0x592a0000,0xf8c2481a,0x491a3218,0x47984b1a,0xe0024628,0x4000f8ca,
+0xb0062000,0x87f0e8bd,0x00021e84,0x1e00578d,0x00021ea1,0x00021c4f,
+0x1e004461,0x000103fd,0x00021c74,0x00021ec3,0x00021ed3,0x00010349,
+0x00021263,0x1e0061d1,0x00021ef9,0x00021f25,0x00021f2d,0x00021f40,
+0x1e004041,0x00021f44,0x00021f5e,0x00021f8b,0x00021fba,0x00010291,
+0x1e006061,0x2100b570,0x4c174605,0x60e1f44f,0xf8c547a0,0xb3280220,
+0xf44f2100,0xf7d762e1,0x2080fb0d,0x47a02100,0x02c0f8c5,0x2100b1d0,
+0xf7d72280,0x4c0dfb03,0x490e480d,0x47a0462a,0x490e480d,0x47a0462a,
+0x462a480d,0x47a0490d,0x23082200,0xf8c54610,0xf8c52224,0xf885322c,
+0xe0002230,0xbd702001,0x1e00578d,0x1e006061,0x0002211e,0x0001127d,
+0x00022127,0x000112f5,0x0002194b,0x00011249,0x4b3fb57f,0x93004605,
+0x93012300,0x68409302,0x4a3d493c,0xf7fe462b,0x2800ffd3,0x682bd16d,
+0xf8d3493a,0x462a073c,0x4e3a4b39,0xf8c547b0,0xb3000130,0x4938682b,
+0x073cf8d3,0x4b37462a,0xf8c547b0,0xb1b00128,0x4b35682c,0x073cf8d4,
+0x462a4934,0xf24347b0,0x50e013d4,0x682bb158,0xf8d34931,0x462a073c,
+0x47b04b30,0x012cf8c5,0x2301b108,0x2300e000,0xd03e2b00,0x21002040,
+0x47a04c2b,0x28006568,0xf44fd037,0x21006080,0x65a847a0,0xd0302800,
+0x7010f44f,0x47a02100,0xb3506628,0xf44f2100,0xf7d77210,0x2400fa83,
+0x7090f44f,0x4b1e2100,0xb1f04798,0x3404192b,0x2c182100,0x60986081,
+0x460ad1f2,0x320418ab,0x2ad82400,0x4140f8c3,0x682bd1f8,0xf8832201,
+0x682b2d11,0xf8834813,0x49132d63,0x4070f885,0x4b12462a,0x46204798,
+0x2001e000,0xbd70b004,0x00012b41,0x000225dc,0x00022258,0x00011d59,
+0x00022329,0x1e0061d1,0x00011359,0x0002226b,0x00021516,0x00012241,
+0x000118bd,0x00022271,0x1e00578d,0x0002227a,0x000113e1,0x1e006061,
+0x2100b5f0,0x4604b087,0xf44f4b70,0x479870be,0x28004605,0x81bdf000,
+0xf44f2100,0xf7d772be,0xf640fa29,0xf44f108a,0x80e8539b,0x4050f241,
+0x8168812b,0x53a4f241,0x6044f241,0x81ab602c,0x462e81e8,0x2100462a,
+0xf44f186b,0x82186080,0x76932350,0x231d3102,0x320177d3,0xd1f3290a,
+0xf8852308,0x3b013024,0x3025f885,0x3026f885,0xf8852303,0xf06f3027,
+0xf8850301,0xf8853029,0xf885302a,0xf885302b,0xf06f302c,0x24000305,
+0x3036f885,0x3037f885,0x3038f885,0x3039f885,0x303af885,0x303bf885,
+0x303cf885,0x303df885,0x303ef885,0x030df06f,0x4028f885,0x402df885,
+0x402ef885,0x402ff885,0x4030f885,0x4031f885,0x4032f885,0x4033f885,
+0x4034f885,0x4035f885,0x303ff885,0x3040f885,0x3041f885,0x3042f885,
+0x3043f885,0x3044f885,0x0048f105,0x3045f885,0x0124f105,0x3046f885,
+0x3047f885,0xf7d72224,0x1c63f9d1,0xb2dc2200,0x206cf886,0x207bf886,
+0x2c0f3601,0x18abd1f5,0x24003201,0xf8832ae1,0xd1f8408a,0xf8852328,
+0x2324316b,0x316cf885,0x70b8f505,0xf5052320,0xf88571b4,0xf885316d,
+0xf885316e,0xf885316f,0x30013170,0x22063103,0xf9a8f7d7,0x46274e1a,
+0x23124819,0x0003fb07,0xf88cf7d9,0xd0362800,0x8a347bf2,0x7bb32a01,
+0x2b03d11c,0x2b05d010,0x2b02d002,0xe011d00c,0x460a2100,0x47984b0f,
+0xf821a906,0x22020d02,0xf7d71928,0xe01ef987,0x460a2100,0x47984b09,
+0xe0185528,0xf2404808,0xe01231ed,0x2b013b02,0x1929d80c,0xfbeaf7e9,
+0x46c0e00d,0x1e00578d,0x000284a8,0x1e0037cd,0x00022844,0xf44f486e,
+0xf7d6717f,0x3701f881,0x2f223612,0xf895d1bc,0x486a3020,0x3021f885,
+0x3022f885,0x3023f885,0xf844f7d9,0x2210b1b0,0x0106f10d,0xfbc6f7e9,
+0xd10f2804,0x3006f89d,0x3143f885,0x3007f89d,0x3147f885,0x3008f89d,
+0x314bf885,0x3009f89d,0x314ff885,0xf7d9485a,0xb190f829,0xf10d2210,
+0xf7e90106,0x2803fbab,0xf89dd10b,0xf8853006,0xf89d3093,0xf8853007,
+0xf89d3097,0xf8853008,0x4850309b,0xf812f7d9,0x2210b330,0x0106f10d,
+0xfb94f7e9,0xd11f2808,0x3006f89d,0x30adf885,0x3007f89d,0x30aff885,
+0x3008f89d,0x30b1f885,0x3009f89d,0x30b3f885,0x300af89d,0x30b5f885,
+0x300bf89d,0x30b7f885,0x300cf89d,0x30b9f885,0x300df89d,0x30bbf885,
+0xf7d8483b,0xb1b0ffe7,0xf10d2210,0xf7e90106,0x2804fb69,0xf89dd10f,
+0xf8853006,0xf89d30bf,0xf8853007,0xf89d30c3,0xf8853008,0xf89d30c7,
+0xf8853009,0x482f30cb,0xffccf7d8,0x2210b390,0x0106f10d,0xfb4ef7e9,
+0xd12b280b,0x3006f89d,0x30eff885,0x3007f89d,0x30f3f885,0x3008f89d,
+0x30f7f885,0x3009f89d,0x30fbf885,0x300af89d,0x30fff885,0x300bf89d,
+0x3103f885,0x300cf89d,0x3107f885,0x300df89d,0x310bf885,0x300ef89d,
+0x310ff885,0x300ff89d,0x3113f885,0x3010f89d,0x3117f885,0xf7d84814,
+0xb1b0ff95,0xf10d2210,0xf7e90106,0x2804fb17,0xf89dd10f,0xf8853006,
+0xf89d3120,0xf8853007,0xf89d3124,0xf8853008,0xf89d3128,0xf8853009,
+0x4628312c,0xbdf0b007,0x00022844,0x00022850,0x00022859,0x00022862,
+0x0002286b,0x00022874,0x0002287e,0x4ff0e92d,0x21004688,0x4607b089,
+0x68804691,0x469b460a,0xfbccf7d6,0x0f08f010,0xd00a4605,0x681c9b12,
+0x4658b13c,0xf7fa6a21,0x6d23fda3,0x65233301,0xf44fe1d0,0x2100509e,
+0x47984bb3,0x28004606,0x81d0f000,0xf44f2100,0xf7d7529e,0xf50bf837,
+0xf8c663e8,0x6433b03c,0x64779b12,0x23016173,0x0f02f1b9,0x8048f8c6,
+0x3037f886,0xf015d105,0xbf1c0f01,0x5300f44f,0x6a316233,0xf7fa4658,
+0x6cb3fd77,0x33e0f8b3,0xf3c3b29b,0xf0032103,0x0b1b020f,0x61b12902,
+0x627361f2,0x2904d906,0x2905d004,0x2906d002,0x819ef040,0x4b972101,
+0x47984630,0x46302101,0xffe6f7e9,0x24016cb3,0x43f6f8a3,0x33f8f8b3,
+0xea404625,0xf3c04003,0xb29a330f,0xf2428533,0x0f000363,0xf886429a,
+0xf040002a,0x21008181,0xf7e94630,0x4630fb79,0xfd2cf7fb,0xf8c6233c,
+0x23143d88,0xf886220a,0xf2413030,0x54f213c4,0x2203191b,0x54f22100,
+0x0308f04f,0x1d8cf8c6,0x4054f886,0x3d96f8a6,0x426cf886,0x31011872,
+0x292d237f,0x31c9f882,0x313cf882,0xf04fd1f6,0xf8a633ff,0x6c73324e,
+0x3388f8d3,0x3f80f413,0x2301d104,0x3033f886,0x3d28f886,0x68986c73,
+0xfcc2f7f9,0x737af44f,0xf2f3fbb0,0x0313fb02,0x0dc8f8c6,0x4868b123,
+0x01fcf242,0xfedcf7d5,0xf8c62400,0x6bf04f78,0xf7da6c77,0x2802fb8b,
+0x810af040,0x68f84961,0xff3af7d6,0x0f59f886,0x68f8495f,0xff34f7d6,
+0x0f5cf886,0x68f8495d,0xff2ef7d6,0x0f5df886,0x68f8495b,0xff28f7d6,
+0x0f5ef886,0x68f84959,0xff22f7d6,0x0f5ff886,0x68f84957,0xff1cf7d6,
+0x0f60f886,0x68f84955,0xff16f7d6,0x0f61f886,0x68f84953,0xff10f7d6,
+0x0f62f886,0x68f84951,0xff0af7d6,0x0f63f886,0x68f8494f,0xff04f7d6,
+0x0f64f886,0x68f8494d,0xfefef7d6,0x0f65f886,0x68f8494b,0xfef8f7d6,
+0x0f66f886,0x494968f8,0xfef2f7d6,0xfa80fa5f,0xf98afa5f,0x9084f886,
+0x464346a0,0x4a442120,0x4d444668,0x68f847a8,0xf7d64669,0xeb06fee1,
+0xf1080348,0xf1b80801,0xf8a30f03,0xd1ec0060,0x0800f04f,0x0303f108,
+0x4a392120,0x4d394668,0x68f847a8,0xf7d64669,0xeb06fecb,0xf1080348,
+0xf1b80801,0xf8a30f03,0xd1eb0066,0x0800f04f,0x0306f108,0x4a2e2120,
+0x4d2e4668,0x68f847a8,0xf7d64669,0xeb06feb5,0xf1080348,0xf1b80801,
+0xf8a30f03,0xd1eb006c,0x492768f8,0xfe80f7d6,0x28004604,0x2100d04e,
+0x4b24460a,0xfa4f4798,0xb280f58a,0x19322400,0x030ff000,0xeba53401,
+0x09000343,0xf8822c04,0xd1f43088,0x491c68f8,0xf7d6b2ed,0x1932fe8d,
+0x030ff000,0xeba53401,0x09000343,0xf8822c0c,0xd1f43088,0x46c0e04c,
+0x1e00578d,0x0001ea19,0x0002299e,0x000229a8,0x000229ae,0x000229b4,
+0x000229bb,0x000229c5,0x000229cf,0x000229d9,0x000229e8,0x000229f7,
+0x00022a06,0x00022a14,0x00022a22,0x00022a30,0x00022a3a,0x1e003fc9,
+0x00022a41,0x1e0037cd,0x00022a47,0x492768f8,0xfe2af7d6,0x4621b120,
+0x4b254622,0xb2c04798,0x9088f886,0x9089f886,0x908af886,0x908bf886,
+0xebc02204,0xb2d90309,0x320118b3,0xf8832a0c,0xd1f61088,0x320118b3,
+0xf8832a14,0xd1f91088,0x4c186d33,0x65333301,0xf8db6973,0x681b073c,
+0x64f34915,0x46329b12,0x4b14601e,0x460447a0,0x0c24f8c6,0x6c73b940,
+0x6c984631,0x529ef44f,0x47984b0f,0xe00e4620,0xf1064630,0x22140118,
+0xfe8cf7d6,0xe0064630,0x46316cb8,0x529ef44f,0x47984b07,0xb0092000,
+0x8ff0e8bd,0x00022a4e,0x1e0037cd,0x1e0061d1,0x00014171,0x00022a52,
+0x1e005c15,0x2100b530,0x4605b085,0x20244b0f,0x46044798,0x2100b1b8,
+0xf7d62224,0x230ffe47,0x332d6063,0x333c60a3,0x230360e3,0x4b086123,
+0x93004628,0x49084b07,0x4b089301,0x93024a08,0xf7fe462b,0x4620fb39,
+0xbd30b005,0x1e00578d,0x0001877d,0x00018b19,0x00022900,0x00026279,
+0x00022a5b,0x2100b5f0,0x4605b085,0x20504b27,0x46074798,0x4604b908,
+0x2100e044,0x26002250,0xf7d64604,0x603dfe13,0x4628607d,0x71def44f,
+0x4b204a1f,0x97019600,0xf954f7fc,0x60b842b0,0x4b1ddb2a,0x93009601,
+0x68789602,0x4a1c491b,0xf7fe463b,0xb9f8fb01,0x647b231e,0x33fff04f,
+0x304ef887,0xf887330d,0x2302303f,0xf8872201,0x33083041,0x203df887,
+0x203ef887,0xf88764ba,0x32033042,0xf8872305,0xf8842040,0xf8870043,
+0xf887204d,0xe005304c,0x46396ca8,0x4b092250,0x24004798,0xb0054620,
+0x46c0bdf0,0x1e00578d,0x00018f11,0x00018f15,0x0001b4b5,0x00022b64,
+0x00022b4c,0x1e005c15,0x47ffe92d,0x56bcf240,0x46894680,0x21004630,
+0x46924b30,0x46054798,0xd0562800,0x46322100,0xfdb0f7d6,0x33fff04f,
+0xf04f61ab,0xf8a50314,0xf04f3208,0xf8a50328,0xf04f3206,0xf8a5032d,
+0xf04f3204,0x270003fa,0x320af8a5,0xf8852302,0x4921320c,0x4b21462a,
+0x616e4c21,0x8010f8c5,0xf88570af,0x4648720d,0x230547a0,0x710ef505,
+0x723bf505,0x321cf8c5,0xbf0c42b8,0x34fff04f,0x3337463c,0x01f8f8c5,
+0x1218f8c5,0x2228f8c5,0x322cf8c5,0x1214f8c5,0x2224f8c5,0x4b11b97c,
+0x93024640,0x4a104621,0x9400462b,0xf7fe9401,0xb150fa6f,0xf8d54648,
+0x4b0c11f8,0x46294798,0x46324650,0x47984b0a,0x4628463d,0xe8bdb004,
+0x46c087f0,0x1e00578d,0x0001b669,0x00022beb,0x1e0061d1,0x00026e1d,
+0x00022bdb,0x1e0061e9,0x1e005c15,0x2100b570,0x4b084605,0x479820cc,
+0xb1404604,0x22cc2100,0xfd3cf7d6,0x7320f44f,0x50c8f8c4,0x46206223,
+0x46c0bd70,0x1e00578d,0x0360bc01,0x034e1000,0xf002debf,0xa803580a,
+0x00f0025e,0x5ea6030a,0x0a00f002,0x535e8202,0x020a0000,0x00af5e85,
+0x88020a00,0x0000b3de,0x8084020a,0x0a0000c3,0xff63bc01,0x0040f01f,
+0xf002de00,0x01000000,0x00f0025e,0x60800100,0x6c900d02,0x025e5903,
+0x030d00f0,0xf0025ed8,0xd8030e00,0x00f002de,0x0004020f,0x120000bf,
+0x23450102,0x01120000,0x000360bc,0x01021511,0x00002345,0x42000215,
+0x1900001f,0x025e0200,0x02d30bf0,0x00b3de01,0x6b001900,0x20d36444,
+0xc585021a,0x19000023,0x025e0200,0x019b0bf0,0xf502e089,0x0102ac97,
+0x000023c5,0xe088011c,0xac97f502,0x8361bc01,0x00291100,0x007b00b0,
+0xbc012b11,0x11000363,0x5e120323,0x1c09f002,0x025e9703,0x028509f0,
+0x00b38101,0x85022f00,0x000023c5,0x8187022f,0x280000b3,0x02dea303,
+0x032f00f0,0xf002dea0,0x02002f00,0x09f0025e,0xe0870175,0x6c800d04,
+0x6444e000,0x00bdb70d,0xf766446b,0xbc0129a0,0x97010360,0x60bc0180,
+0x81370003,0x6b60bc01,0x018a5000,0x060360bc,0xbf039237,0x01f002de,
+0x5ed003ee,0x3302f002,0x02ded003,0x03fb03f0,0xf002ded5,0x9103df08,
+0x04f0025e,0xde96036c,0xda08f002,0x025e0200,0x02c10bf0,0x0073c188,
+0xc4035400,0x05f0025e,0x5ec703bf,0xd905f002,0x02dedc03,0x03670df0,
+0xf0025eaa,0x83032006,0x07f0025e,0xde910328,0xe104f002,0x02dec203,
+0x014e09f0,0x020360bc,0x02003e00,0x0ef0025e,0xde0603a5,0x4100f002,
+0x025e2303,0x021509f0,0x0037c087,0xd4031509,0x05f002de,0xde230352,
+0x4600f002,0x025edb03,0x034500f0,0xf002debf,0x02000200,0x0cf0025e,
+0x5e02008c,0xa00cf002,0x025ea203,0x035100f0,0xf0025e56,0x86014f00,
+0x10090660,0x5e1f0348,0x4f00f002,0x235e6a00,0x004e0000,0x002700b0,
+0xe8008817,0x3700235e,0x5ea60388,0xa400f002,0x0e602800,0x03c5e008,
+0xf002dec4,0x2000ab09,0x200003c2,0xdebf03d5,0x1801f002,0x025e8103,
+0x035600f0,0xf002de00,0x88013600,0x900b02e0,0xdebf035c,0x2102f002,
+0x63408702,0x01580000,0xf4066086,0x86021830,0x00006340,0x5eb0005a,
+0xa1170087,0x02de0200,0x020000f0,0x00634087,0xb0005d00,0x10008b5e,
+0xe0860119,0x1830f406,0xafde8102,0x02620000,0x0063c086,0xb0006100,
+0x1700875e,0xde0200a1,0x0000f002,0x0360bc01,0x02068002,0x0007de80,
+0xda016e00,0x17f00260,0x5e080280,0x7e000007,0x0360bc01,0x00a1171e,
+0xf4025ee0,0xbc016530,0x171c0360,0x5ee000a1,0x6430f402,0x0360bc01,
+0x038d2600,0xf002debf,0x10018400,0x1700035e,0x5e8800a1,0xa2370087,
+0x865ee000,0x00a157f4,0xf45a01e0,0x86026330,0x0000c300,0x56b00077,
+0x6210000b,0x0354b000,0x01621000,0x000360bc,0xbf038d26,0x00f002de,
+0x41b00086,0x6210008f,0x03de0901,0x00a11700,0x00875e88,0xe000a157,
+0x37d4845e,0x5ee000a1,0x06c00387,0x0360bc01,0x038d4600,0xf002debf,
+0xbc018600,0x17020760,0x5ee000a1,0x6530f402,0x0760bc01,0x00a11700,
+0xf4025ee0,0xbc016430,0x00180360,0x60bc0106,0x8d060003,0x035ab000,
+0x00621000,0x000358b0,0x05016310,0x17004301,0x008800a1,0x0620f41a,
+0x02de0200,0x000000f0,0x003340e8,0xb000a197,0x17000b40,0x5e6d00a3,
+0x8e60f486,0x8f5e9000,0x03a33700,0xf002debf,0x90008f00,0x3700875e,
+0x5ee000a3,0xa337008e,0x9741f001,0x00a11700,0xf486de6d,0x8702a260,
+0x000097c1,0x5a380196,0xa1170003,0x035a3c01,0x03a21700,0xf002debf,
+0x3c019800,0x1700035a,0x5a3801a1,0xa2170007,0x865e6800,0x009d80f4,
+0x008b5ed8,0xe100a237,0x50f49641,0xc1e10065,0x65300097,0x02debf03,
+0x009000f0,0x008b5ed8,0xe100a237,0x57f49641,0xdee100a1,0xa1370087,
+0x875ef001,0x00a11700,0xf486de6e,0xbc01a360,0xf71fff63,0xde0200a4,
+0x0000f002,0x8ee32000,0x02020009,0x00b35e81,0xa8030200,0x00f002de,
+0xde1e030a,0xab00f002,0x025e9f03,0x00ab00f0,0xf0025e02,0xbf03cc00,
+0x00f002de,0x41080202,0xa900001f,0x025e0200,0x007509f0,0x00ab00b0,
+0xb0008610,0x10006301,0x5e02008a,0x500bf002,0x0360bc01,0x00921704,
+0x003b00b0,0x90011d11,0x10090660,0xdea10348,0xc000f002,0x06e08101,
+0x01481009,0x000360bc,0xbc014290,0x11000360,0xde9e032d,0xc300f002,
+0x02608401,0x009497f2,0x001745b0,0xb0008f17,0x1700175e,0x44000290,
+0xbe00001f,0x02608501,0x01481009,0x00076081,0xf0014710,0x37000fde,
+0x44a000a1,0x4531f4b6,0x02de9e03,0x01c300f0,0x123761bc,0xbf0380b0,
+0x00f002de,0x61bc0102,0x80701027,0x02debf03,0x000200f0,0x0982e020,
+0x0c010200,0x170053de,0x5e8801a1,0x47100087,0x0360bc01,0x01425000,
+0x001f4108,0x8c01a117,0x97f286de,0xdebf0394,0x0200f002,0x0360bc01,
+0x00429000,0x00235ee8,0x69008837,0x000023de,0x00e800d0,0x88370027,
+0x02608601,0x00481009,0x009b0088,0x90002671,0xb1019b00,0x63bc0128,
+0x24110003,0x02de0200,0x030000f0,0xf0025edb,0x2000d500,0x00097ee0,
+0xc5310102,0xa117001b,0x875e6d00,0x020a8000,0x001fc283,0x04020200,
+0x0000bf00,0x5e9403e0,0x0200f002,0x8f42a000,0x0080f701,0x2d005e68,
+0x020002c0,0x09f0025e,0xdebf0375,0x0a00f002,0x8fc20102,0x01020000,
+0x00630014,0x6800a117,0x6000875e,0x5e020002,0x7509f002,0x0f609401,
+0x00180000,0xf0025e02,0xbf03e700,0x00f002de,0x0014010a,0xa1170063,
+0x875eb000,0x01a51000,0x191360bc,0x68006010,0x0000875e,0x41e000ee,
+0x60500683,0x875ee800,0x03a13700,0xf002debf,0x8002ea00,0x0000b350,
+0x608701f8,0xa0100304,0x6300b000,0x00b41000,0x00d342b0,0x88000018,
+0x30008341,0x60bc01b6,0xb5100a03,0x6300b000,0x03b4b000,0xf002de17,
+0x9703f500,0x00f002de,0x608001f6,0x2c948506,0x02de0200,0x000000f0,
+0x8012e020,0x87011741,0x10030460,0x000302a0,0xff0000c7,0x975eb000,
+0x00b51000,0x086300b0,0x8302b470,0x0000d342,0x00b000fe,0xb4100063,
+0x0360bc01,0x00b5100d,0x006300b0,0xbc01b4f0,0x10114760,0x00b000b6,
+0xb4100063,0x0360bc01,0x02b5d002,0x000b5007,0xbc011301,0xd0030360,
+0x608e01b5,0x9497f202,0x0b500402,0x020c0100,0x000bd004,0x86010c01,
+0x97f20660,0x42e00094,0xb5d000d7,0x0b50a000,0x00a11711,0x1187de68,
+0x86011201,0x97f206e0,0x42e00094,0xb55000d7,0x0bd00702,0x00120100,
+0x00d742e0,0xb000b590,0x1100d742,0x00b000e1,0xb4b00063,0x025ea903,
+0x031701f0,0xf002de17,0x97031501,0x01f002de,0xde020016,0x0000f002,
+0xab1a6800,0x001b0100,0xd564c46c,0xbc010a40,0x06000360,0x1a6800aa,
+0x1e0100a7,0x64c46c00,0x010a20d5,0x000360bc,0xa803a906,0x00f002de,
+0x5edb030a,0x2001f002,0xbee02000,0x03020009,0xf0025e90,0x00020a00,
+0x01001f42,0x6083012c,0x6c900d02,0xbf000402,0x03280100,0xf0025e14,
+0x6e002801,0x61805644,0x60bc0129,0x15110003,0x025e2203,0x012e01f0,
+0x00630014,0x8800a117,0x37f40660,0xc22000a1,0x6021f48e,0x02608201,
+0x03481009,0xf002debf,0xb0000200,0x17007f01,0xde9e03a6,0x3401f002,
+0x02de3803,0x003501f0,0x048f4220,0x94010200,0x00001760,0xdebf0318,
+0x6001f002,0x025e1f03,0x024101f0,0x00c30003,0x20003701,0x01028fc2,
+0x5e25033b,0x4101f002,0x8fc22000,0x003b0102,0xff538168,0xbf030ae0,
+0x01f002de,0x6094013d,0x18000013,0x02debf03,0x036001f0,0xf002de9e,
+0x68004001,0xc10b98de,0x41010240,0xaf0a001f,0x02608501,0x00481009,
+0x0b985e68,0x690045c1,0x61009f5e,0x42980265,0x4501008f,0x02debf03,
+0x026501f0,0x001f4101,0x0402af0a,0x0100bf00,0x5e020050,0xe00cf002,
+0x025e0200,0x00020df0,0x00bb8568,0x84014c01,0x77f50660,0xdebf03ab,
+0xaf0af002,0x87059401,0x02180000,0x00af5e87,0x84016001,0x77f50260,
+0xdebf03ab,0x6001f002,0x9b140002,0x02590100,0x002b1600,0xb0005c01,
+0x17003714,0xde6800a1,0x5921ae84,0x3b14b000,0x00a11700,0xae84de68,
+0xb0005941,0x17003f14,0xde6800a1,0x5961ae84,0x87149e02,0x025c0100,
+0x008fc201,0x94015e01,0x00000f60,0xdebf0318,0x6001f002,0x8fc20102,
+0x015e0100,0x0d066080,0x00026c90,0x0a008fc2,0x609401af,0x18000007,
+0x025e0200,0x02e700f0,0x00bf0004,0x85029401,0x01006300,0x60830194,
+0x6c900d06,0x02debf03,0x019401f0,0x180360bc,0xb0006010,0x10007b01,
+0x00680065,0x6d0100eb,0x135a8800,0x00a11701,0xf46644e8,0x6e00a137,
+0x410784de,0x02e0006d,0xa620009b,0x02debf03,0x014b05f0,0x09126090,
+0x94014810,0x00001f60,0x5a080118,0x8117000f,0x065e8801,0x010a5481,
+0x000f5a34,0x02008017,0x00f0025e,0x01b00064,0x6510007b,0x2356b000,
+0x00a11700,0xa0865ee0,0xe800a197,0xf400845e,0x5ee80003,0x16f40084,
+0x035ab000,0x00131400,0x00075ab0,0xb0001414,0x14000b5a,0xde680015,
+0x85410007,0x9700e800,0x01a15700,0xf0865ebc,0x7c011b14,0xf400875e,
+0x1ab0001c,0x81170037,0x025e0200,0x00780bf0,0x007b01b0,0x08016510,
+0x17000f5a,0x5eb00081,0x1e140087,0x02debf03,0x008801f0,0x001756b0,
+0xb0001b14,0x14001b56,0x54b0001c,0x1e140013,0x1350b000,0x00861000,
+0x00a7006d,0x90018e81,0x10006301,0x41b0008a,0x6210008f,0x025e0200,
+0x004e0df0,0x002b42b0,0xbc010614,0x17180360,0xc16d00a1,0x9101208c,
+0x0360bc01,0x00a19702,0x03845ee0,0xe000a177,0x11b0865e,0xdebf031d,
+0xe701f002,0xc7000302,0x02a40100,0x0003d00c,0x1401a401,0x17006300,
+0x008502a1,0xa4010063,0x87de8000,0x01a2d701,0x1e1760bc,0xe000a297,
+0xb00d8a5e,0xde800065,0xa2b70087,0x0f60bc01,0x00a2971c,0x0d8a5ee0,
+0xb00064b0,0x14009741,0x41b0002e,0x2f140093,0x13d86800,0x02b40100,
+0x00135a00,0x8001a601,0xf4840660,0xdebf0327,0x7c04f002,0x03d00102,
+0x00a60100,0x009b50b0,0x81022b14,0x0200b7d0,0xd0060208,0xad010003,
+0x8650e900,0x00a13723,0x238ad0e8,0x6900a257,0x01008bde,0x609101ad,
+0x27f48416,0x02debf03,0x010b02f0,0x0003d00b,0x3c01a117,0x17002b50,
+0x5e8c01a2,0xa157f486,0x43014801,0x00a21700,0xf4865e68,0x9101b441,
+0xf4841260,0xdebf0327,0x0b02f002,0x0360bc01,0x00a51700,0xf0025e02,
+0xb000f900,0x10001350,0x50b00086,0x8a100017,0x03d00c02,0x02c10100,
+0x00c70003,0xb000be01,0x14009b50,0x5e02002b,0xfa0df002,0x46426d00,
+0x030a80c0,0xf002debf,0x6d00bf01,0x80844a42,0x5006010a,0xa1170007,
+0x86de8201,0x032db485,0xf0025ea2,0x2000d201,0x010403d0,0x50b000c7,
+0xf211004f,0x5350b000,0x00f31100,0x005750b0,0xbc01f411,0x91000360,
+0x010102f0,0xc90100b3,0x06e08701,0x02ab77f5,0x00035006,0x0702ce01,
+0x0100afde,0xde0002ce,0xd20100b3,0x331ae800,0x03425100,0xf002debf,
+0x8102d201,0x03000350,0xd00202e5,0xd10100b7,0x2b500802,0x02d20100,
+0x0003d085,0x9001f703,0xb4851260,0x5ea2032d,0xdf01f002,0x0f50b000,
+0x02161100,0x00b7d002,0xb000d701,0x11005b50,0xd0820216,0xdf010003,
+0xc3478102,0x02d80100,0x004f5080,0x2000dd01,0x813fc747,0xc72000df,
+0x0ac200db,0x02debf03,0x03df01f0,0xf0025ea5,0x8002df01,0x0200dfc7,
+0x5088020a,0xee0100b7,0xb7d08202,0x01e70100,0x00275038,0x08018017,
+0x17001350,0x50020181,0xa1170013,0x865e8201,0x008137f0,0x007f50b0,
+0xbf038910,0x01f002de,0x503801ed,0x8017006f,0x2b500801,0x01811700,
+0x0007d006,0x8201a117,0x37f0865e,0x50b00081,0x8a10001b,0x8350b000,
+0x01891000,0x000b5029,0x02009217,0x00f0025e,0x5e020064,0x4b0bf002,
+0x1b420201,0x01811700,0xd1045e82,0x020081b7,0x0bf0025e,0x5ee00078,
+0xa1170184,0x87ded901,0x02831000,0x00b30100,0xe001f701,0x1000b701,
+0x00040283,0xfa0100bf,0x03508702,0x03fa0100,0xf0025e94,0x2203fb01,
+0x01f0025e,0x61bc01fd,0x80300003,0x02debf03,0x010200f0,0x033361bc,
+0x2b0391b7,0x02f0025e,0x00900003,0xa1970063,0x8264e000,0x006530f4,
+0x00135a6e,0x88010322,0x37f206e0,0xde680091,0x0582024b,0x3761bc01,
+0x0091b703,0x044bde68,0xbc010782,0xb703bb61,0xdebf0391,0x0e02f002,
+0x0e609101,0x0327f484,0xf002debf,0x91010b02,0xf4840660,0x60bc0127,
+0xb4100003,0x06e08101,0x032db485,0xf002debf,0x68007c04,0x82044b5e,
+0xdec40329,0xab09f002,0x03500602,0x02190200,0x00afde07,0xbc011902,
+0x37000361,0x50070291,0x15020003,0x0362bc01,0x0291f700,0x00b3de00,
+0xbc011702,0x77000361,0x01e00091,0x4220000b,0x02debf03,0x011a02f0,
+0x000360bc,0xb0004220,0x1000475e,0x01000280,0x200200b3,0x06608201,
+0x02813010,0x00b38101,0xbc012002,0xb7050360,0xdebf0393,0x7a05f002,
+0x17c56800,0x03020000,0xf002de80,0x81032602,0x02f0025e,0xe0880125,
+0x5c900b0e,0x02debf03,0x030200f0,0xf0025ed0,0xbc013302,0x11000360,
+0x5e02002d,0x830bf002,0x02debf03,0x000200f0,0x0017c568,0x1e013102,
+0x17009f50,0x5e8800a1,0xa237f40e,0x06608800,0x00a137f4,0x00875ee8,
+0xb000a137,0x57f4865e,0x5ea000a1,0xa197f086,0xb644a000,0x004531f4,
+0x00475eb0,0xbf038010,0x00f002de,0x80070202,0x360200bf,0x331ab000,
+0x03421100,0xf0025ec4,0xbc013602,0x90000360,0x41a80004,0x48103023,
+0x0f62bc01,0x01e01100,0xf5026081,0x8701aed7,0x77f502e0,0x816800ab,
+0x3d22000b,0x6744b000,0x01430000,0x0906e082,0x81014810,0x900d0260,
+0x6082016c,0x44912806,0x02e08801,0x015c900b,0x000360bc,0xbc018510,
+0x10000360,0x5e2903b8,0x4602f002,0x02e0d201,0x03849010,0xf002debf,
+0xbc01e802,0x10000360,0x01e00084,0x702000c3,0xb3818102,0x035d0200,
+0xf002de20,0x81017202,0xb7f50660,0xde6800ad,0x5da2044b,0xbbde0302,
+0x004f0200,0x000b26e0,0xbf036510,0x02f002de,0x60bc0150,0x6590101b,
+0x7f5ea000,0x00ec10fe,0x00035ab0,0xb000ed10,0x1000075a,0x5ab000ee,
+0xef10000b,0x0f5ab000,0x01f01000,0x1ee363bc,0xbc0184f0,0x30000360,
+0x60bc0185,0xb4100003,0x0360bc01,0x01a6d001,0x040360bc,0xbc01b550,
+0xd0042360,0x02e000b4,0xab2000af,0x02debf03,0x01b602f0,0x1f0360bc,
+0x030184f0,0x170053de,0x5e8601a2,0xe3701c8a,0x93c36a00,0x00690200,
+0x009043e8,0x0202e4d0,0x02001b42,0x00900067,0xa137001b,0x1b422000,
+0x00664200,0x00871ab0,0xe000a117,0x30f49243,0xc36900e4,0x69020093,
+0x0360bc01,0x01e41000,0x000360bc,0xbc01b410,0x10000360,0x60bc01a6,
+0xb5100203,0x2360bc01,0x00b4d004,0x064b5e68,0xe00070a2,0x2000cb01,
+0xdebf0372,0xb602f002,0xcf01e000,0x03732000,0xf002debf,0x2003b602,
+0x02f0025e,0xe08101bd,0x48100902,0xd701e000,0x03752000,0xf002de1e,
+0xbc019e02,0x17000360,0x5e6a00a2,0x7a020023,0x8f420201,0x01a21700,
+0x098a5e85,0x80014810,0x301006e0,0xde840281,0x7e020053,0x1360bc01,
+0x03a1570d,0xf002debf,0xbc017f02,0x570d0360,0x006800a1,0x9e020027,
+0x845ee000,0x01a1f701,0x101b60bc,0x88006510,0x30009741,0x60bc01b6,
+0xb4100003,0x875e9000,0x01a65000,0x010360bc,0xbc01b510,0xb0002360,
+0xde1703b4,0x8702f002,0x02de9703,0x008802f0,0x0087de20,0x20009142,
+0x220087de,0x5eb8018e,0x8016d022,0x8a5e8001,0x038136d0,0xf002debf,
+0xbc019702,0x16d0225e,0x5e840180,0x8136d08a,0x02debf03,0x009702f0,
+0x0087de20,0xb8019522,0x36d0225e,0x5e800181,0x8256d08a,0x02debf03,
+0x019702f0,0xd0225ebc,0x84018136,0x56d08a5e,0x60880182,0xa830f402,
+0x035ab000,0x00b01000,0x00075ab0,0x8002b110,0x0200a342,0x42e0009a,
+0xa89000a3,0x0b5ab000,0x00b01000,0x000f5ab0,0x8701b110,0x90100660,
+0x5ee00084,0x89370027,0x275eda01,0x01ee1000,0x000360bc,0xbc01b410,
+0x50030360,0x00b000a6,0xb5100033,0x53de8402,0x01a70200,0x030760bc,
+0xb000a650,0x10003700,0x60bc01b5,0xb4d00423,0x06608401,0x019497f2,
+0x09026086,0x9e034810,0x02f002de,0x448002b1,0xb402001f,0x3f5eb000,
+0x01451100,0x000360bc,0xb0008f17,0x1700435e,0x5eb00085,0x9017000f,
+0x02debf03,0x00b402f0,0x000f5eb0,0x80028517,0x02001f44,0x44a000b4,
+0x45b1f0b6,0x0360bc01,0x01421001,0xf2066083,0x84019497,0x11000760,
+0x5ea003e0,0xb203f002,0xaf5e0602,0x01b40300,0xf506e086,0xbc01ab77,
+0x10000360,0x5e020080,0x7b09f002,0x02debf03,0x03e104f0,0xf0025ea1,
+0x81011303,0xd7f50660,0x602000ae,0xd6a2850e,0x04608701,0x00a01003,
+0x006300b0,0xbc01b410,0x100a0360,0x00b000b5,0xb4f00063,0xb7d00202,
+0x00ca0200,0x005f50b0,0xb000e010,0x10006350,0x50b000e1,0xe2100067,
+0x6b50b000,0x00e41000,0x021342b0,0x000284f0,0x0200b750,0x00b000d1,
+0xb4100063,0x0360bc01,0x00b51002,0x046300b0,0x8401b4d0,0x11000760,
+0x60bc01e0,0x8e170003,0x02debf03,0x00b803f0,0x00c701e0,0xb0007120,
+0x10006300,0x60bc01b4,0xb5d00203,0x6300b000,0x03b4d004,0xf002debf,
+0x03014303,0x17000350,0x5eb800a1,0xa1370087,0x865e8701,0x02801010,
+0x0003d00c,0x03021203,0x0200c700,0x60bc01dd,0xb2170003,0x27503801,
+0x02a31700,0x00b7d002,0xb000e802,0x17001323,0x50b801a1,0xe030f46e,
+0x7350b000,0x01a11700,0xf41623b8,0x8501e130,0x301c06e0,0x42b000e1,
+0x84700013,0x6f503801,0x02a31700,0x00134282,0xb000e802,0x10007b50,
+0x42b000e4,0x84100213,0x04608701,0x01a01003,0x00735038,0x7c01a117,
+0x37f46e50,0x5e8800a1,0xb9900087,0xc7000302,0x00fb0200,0x00cbde68,
+0xb000f702,0x1000bb50,0x5abc0165,0xe070f406,0x075a3c01,0x01a21700,
+0xf43e60bc,0xb000e150,0x70001342,0x5ab00084,0x8309000b,0x2360bc01,
+0x00b85001,0x000f2668,0xbf030323,0x03f002de,0x60bc0107,0xb8700103,
+0x0f266800,0x01032300,0x010360bc,0xbf03b870,0x03f002de,0xd00c0107,
+0xa1170003,0x025ea903,0x010003f0,0x012360bc,0x6800b850,0x6300875e,
+0xdebf0303,0x0703f002,0x0360bc01,0x00b87001,0x00875e68,0xbc010743,
+0x70010360,0x000302b8,0x050300c7,0x6750bc02,0x01060300,0x1702e081,
+0xbc01b810,0xf0000360,0x000302a5,0x0b0300c7,0xcb5eb000,0x00b51000,
+0x086300b0,0x8302b470,0x0300d342,0x60bc010a,0xb5100d03,0x6300b000,
+0x00b41000,0x006300b0,0xb000b4f0,0x1800d342,0x60880100,0xb4100308,
+0x06608101,0x036c900d,0xf002debf,0x02024303,0x0300b7d0,0x50b00019,
+0xe010006f,0x7350b000,0x00e11000,0x007750b0,0x8202e210,0x03001342,
+0x50b00018,0xe410007b,0x1342b000,0x0084f002,0x009f5ee0,0xa103a737,
+0x03f0025e,0x60bc0122,0xa7170003,0x04608701,0x00a01003,0x006300b0,
+0xbc01b410,0x100d0360,0x00b000b5,0xb4f00063,0x08608801,0x03b41003,
+0xf002debf,0xb0003803,0x10007b01,0x5ab00065,0xe5100003,0xff63bc01,
+0x00c5f01f,0x00075ab0,0xbc01e610,0xf01fff63,0x5ab000c6,0xe710000b,
+0xff63bc01,0x00c7f01f,0x003b9a68,0xe0002b03,0x3700275e,0x1a680089,
+0x2f03003b,0x07e08501,0x01e31000,0x0007e085,0xb000c310,0x10011342,
+0x5eda0184,0xee100027,0x06608701,0x00849010,0x1c1342b0,0xbc018410,
+0x10000360,0x60bc01b4,0xa6501303,0x9700b000,0x01b51000,0x042360bc,
+0x8401b4d0,0x11000760,0xdebf03e0,0xa303f002,0x4b5e0801,0x00a11700,
+0x00875e68,0x02024323,0x03000350,0x509e0242,0x3f03009f,0x03d00102,
+0x003f0300,0x00275ee0,0x58018937,0x1400275e,0x50da0129,0xee1000a7,
+0x06608701,0x03849010,0xf002debf,0xbc014303,0x14000360,0xc1040129,
+0xa1170007,0x025e2203,0x014603f0,0x0053de03,0xb000a117,0x1700875e,
+0x5e8802a2,0x4a03004b,0x4b5e6800,0x014a8306,0x000360bc,0x8301a217,
+0x97f286de,0xde830194,0x27f48486,0x13c28102,0x01510300,0x008b5e86,
+0x8601e310,0x10000760,0xe08101c3,0x84901006,0x02debf03,0x015303f0,
+0x1c8a5e86,0x8601e370,0x70180660,0x47b802c3,0x8c0300a7,0xb3de0002,
+0x01570300,0x1c06e087,0x8701e370,0x701806e0,0x5e0801c3,0xa117004b,
+0x875e6800,0x029a2300,0x009f501e,0x85015c03,0x701c06e0,0xe08501e3,
+0xc3701806,0x63001401,0x00a11700,0x0087de68,0xb0006583,0x17005301,
+0xde6800a2,0x61e3ff8b,0x47426800,0x00622300,0x848ade68,0x850165c3,
+0x10090260,0xe0860148,0xe3701c02,0x06e08601,0x01c37018,0x00075010,
+0x6800a617,0x03009b5e,0x60bc019a,0xe4110003,0x07503a01,0x00801700,
+0x00035e88,0xe0008077,0x10f0ae00,0xde680064,0x7643009b,0x03d00702,
+0x01700300,0x182360bc,0xe000a2f7,0x370b005e,0x5e0200a3,0x050cf002,
+0x1b60bc01,0x0081d715,0x018341e0,0xe0006370,0xb0008f41,0x5e020065,
+0xda0bf002,0x1b60bc01,0x01649015,0x004760bc,0x0200a217,0x0cf0025e,
+0x5e68002d,0xa143009b,0x4660a401,0x00e071f4,0x009b5e68,0x68007e63,
+0xa3009b5e,0x50b0007e,0xe211002f,0x3350b000,0x03e21100,0xf002debf,
+0x0201a103,0x1700c780,0xde8701a1,0xe8113d86,0x02608701,0x00e8113d,
+0x009bde68,0x870183a3,0x113d0660,0x422000e8,0x8a43001b,0x0360bc01,
+0x02ea1100,0x002b5088,0xb0008803,0x11007750,0xdebf03eb,0x8a03f002,
+0x6f503c01,0x01a21700,0xf47250bc,0x9201eb51,0xb7001bc2,0x5eb801a2,
+0xe8113d8a,0xc7800202,0x01a10300,0x090360bc,0xb000ea11,0x11002f50,
+0x50b000eb,0xeb110033,0x3750b000,0x00eb1100,0x003b50b0,0xb000eb11,
+0x11003f50,0x50b000eb,0xeb110043,0x4750b000,0x00eb1100,0x004b50b0,
+0x8601eb11,0x113d0660,0x60bc01e8,0x65901823,0x025e0200,0x03470ef0,
+0xf002debf,0x8401a103,0x11000760,0xde9e03e0,0xa103f002,0x02de3803,
+0x00a103f0,0x044bde68,0x8401a183,0x97f20660,0x50000294,0xa103004f,
+0x06608501,0x01481009,0x000360bc,0xb0002d11,0x14008344,0x60bc0128,
+0x8e170003,0x4b5e6800,0x02a6a305,0x00035000,0x8301af03,0x100906e0,
+0x41b00048,0x00180023,0x0360bc01,0x038eb704,0xf0025ea9,0x6800b403,
+0x23044b5e,0x60bc01b4,0x8e370603,0x4b5e6800,0x01b4a305,0x060360bc,
+0xbf038eb7,0x03f002de,0x608101b4,0xab77f506,0x0f5eb000,0x00851700,
+0xf0025e02,0xbc01830b,0x17000360,0x60bc018c,0x8d170003,0x02de2303,
+0x01b803f0,0x1006e087,0x00028370,0x0300b3de,0x62bc01b8,0x83300003,
+0xa7006d00,0x03ca8300,0xf0025e29,0x0302e203,0x0300c700,0xd08202c6,
+0xbe0300b7,0xb318e000,0x032c2600,0xf002debf,0xe000bf03,0x2600b718,
+0x2668002d,0xc623000f,0xcb5ee000,0x01b23700,0x00cb5e0a,0xe000a117,
+0x30f4ba50,0x60d00065,0xa257f606,0x125a2000,0x03c643f4,0xf002debf,
+0xd503c003,0x08f002de,0xded603df,0xf408f002,0x02de5003,0x03c603f0,
+0xf002debf,0x6800fb03,0x0300a700,0x428802ce,0xce03001b,0x6744e000,
+0x03a11705,0xf002debf,0xe000cf03,0x17026744,0x5e9103a1,0x0200f002,
+0x66c46800,0x00cf23f4,0x00a70068,0x8002d803,0x03001b42,0x60bc01d6,
+0xa1370503,0x0360bc01,0x03659005,0xf002debf,0xbc01dc03,0x770f1360,
+0xdebf03a1,0xdb03f002,0x0360bc01,0x01a1770f,0x060360bc,0xbf036590,
+0x03f002de,0x60bc01dc,0x65100703,0x025e0200,0x005800f0,0x01075ad8,
+0x3c018116,0x1700035a,0x5eb801a1,0x8136d086,0x035ad800,0x01801601,
+0xd06640b8,0x05028016,0x0300af5e,0xe08701e4,0x33712606,0x02debf03,
+0x010200f0,0x850a6090,0x82022db4,0x0300b7d0,0x503c01ee,0x80170027,
+0x2b500901,0x01811700,0x00075007,0x8201a117,0x37f0865e,0x50b00081,
+0x8a10001f,0x0f50b000,0x03161100,0xf002debf,0x3801f403,0x17005f50,
+0x500a0180,0x8117002b,0x07d00701,0x01a11700,0xf0865e82,0xb0008137,
+0x10002350,0x50b0008a,0x1611005b,0xb7508002,0x01f90300,0x050360bc,
+0xbf0392b7,0x01f002de,0x609001d7,0x2db48506,0x02debf03,0x01e603f0,
+0x060360bc,0xbf039237,0x01f002de,0x608e01d7,0xe8113d02,0x025e2b03,
+0x020904f0,0x00f30000,0xe8000004,0x51002300,0x60bc0142,0x4251280a,
+0x025e9403,0x000504f0,0x008b05b0,0x68006410,0x04000358,0x44b00005,
+0x12110067,0x0358b000,0x00151100,0x001f4568,0xa2030904,0x04f0025e,
+0xe0850109,0xab77f506,0x025e0200,0x02b30cf0,0x00e3c201,0x03023604,
+0x0400c700,0x2668000e,0x1724000f,0x46426e00,0x031744f6,0xf002debf,
+0x6e001004,0x24004742,0x00030217,0x140400c7,0x02de1503,0x011004f0,
+0x85026080,0xbc012c94,0x17000360,0xded503a3,0xdf08f002,0x06e08101,
+0x012db485,0x840e6091,0xbf0327f4,0x04f002de,0x503c0136,0xa1170067,
+0x865ebc01,0x01ba5017,0x010360bc,0x0302b890,0x0400c700,0xa6680027,
+0x2124000f,0x02e08101,0x03b81017,0xf002ded5,0xd603df08,0x08f002de,
+0xde5003f4,0x1d04f002,0x02debf03,0x003604f0,0x000f26e8,0xb0008329,
+0x1000cb5e,0x00b000b5,0xb4700863,0xd3428302,0x00240400,0x00cb5eb0,
+0xbf03a517,0x04f002de,0xe0860128,0xa0100304,0x025e0200,0x00f000f0,
+0xf0025e02,0xd503f900,0x08f002de,0xded603df,0xf408f002,0x02de5003,
+0x022a04f0,0x00a34700,0xbc014102,0x11000360,0x508802ea,0x3204002b,
+0x7750b000,0x03eb1100,0xf002debf,0x3c013404,0x17006f50,0x50bc01a2,
+0xeb51f472,0xa347b000,0x03e8d100,0xf002debf,0xbc014102,0xf0000360,
+0xe08201a5,0x48100902,0x1f62bc01,0x01e01100,0x000f60bc,0x8502e811,
+0x04000b50,0x6082013c,0x48100902,0xb3818102,0x03430400,0xf002dea0,
+0xd5034104,0x08f002de,0xded603df,0xf408f002,0x025e2003,0x014304f0,
+0x09026088,0xbf034810,0x00f002de,0x60bc010a,0xa1370003,0xb3010002,
+0x02510400,0x00b30104,0xe9005004,0x2000bb01,0x81e8006e,0x6f0000bf,
+0xbb816800,0x00500400,0x00bf8168,0x81025004,0x0400b381,0x60bc014d,
+0x6c000003,0x02debf03,0x017c04f0,0x000360bc,0x02006c00,0x09f0025e,
+0xdebf033b,0x0a00f002,0x0360bc01,0x00a11700,0xf0025e02,0x0102900a,
+0x0400b301,0xdebf0354,0x0a00f002,0x1360bc01,0x00a17715,0xf0025e02,
+0x34015800,0x17006740,0x016d00a1,0x5924f49a,0x875eb000,0x00660000,
+0xf49e016e,0xb0005b24,0x0000875e,0xdea30367,0x0a00f002,0xb7500002,
+0x01640400,0x000360bc,0x82018010,0x10090660,0x60800148,0x2db48502,
+0x07c10401,0x01a11700,0xf286de83,0xe0009497,0x2000cb01,0xdebf0372,
+0x1801f002,0xb3010102,0x01660400,0xf506e087,0xb000ab77,0x17000b01,
+0xde6d00a1,0x7c040884,0x6444e800,0x00a17708,0x08845e6e,0x87017c24,
+0x77f506e0,0xdebf03ab,0x7c04f002,0xaf5e8202,0x01780400,0xf5066082,
+0xb000ab77,0x06006744,0x01b00098,0xa217006b,0x1b428002,0x00720400,
+0x004b01b0,0x6800a217,0x04008b5e,0x45900077,0xa197002b,0x86de8000,
+0x00a157f4,0x00b741b0,0xe000a117,0x2623865e,0x61bc01a9,0x33110003,
+0x6444e800,0x00a517d3,0x01975e6d,0x82013300,0x77f50260,0x5ed103ab,
+0x0200f002,0xb3500002,0x03d80400,0xf002de25,0x83018004,0xf4840660,
+0xdebf0327,0xb504f002,0x03d00c02,0x02b30400,0x00c70003,0x1401a204,
+0x17006300,0xde6d00a1,0xb3840087,0xbb50b000,0x00651000,0x00bf50b0,
+0x91026410,0x04009f50,0xd081028a,0x8a0400b7,0x025e2903,0x038b04f0,
+0xf002debf,0xbc019004,0x16000360,0x60bc0104,0x80370003,0x025e0200,
+0x03310ef0,0xf0025e29,0xb000b304,0x1400af50,0xdebf0326,0xb304f002,
+0x06608201,0x002db485,0x00135ab0,0xb0008d14,0x1400175a,0x18b0008e,
+0xa11700b3,0x0360bc01,0x012c0600,0xf4ba18bc,0xbc01a137,0x06000360,
+0x5eb0002e,0x8f140087,0xb718b000,0x01a11700,0x000360bc,0xbc012d06,
+0x37f4be18,0x60bc01a1,0x2f060003,0x875eb000,0x00901400,0x00f701b0,
+0xbc019014,0x00000360,0x5e02007d,0x310ef002,0x0f58b000,0x038c1400,
+0xf002debf,0x6800ae04,0x040047c2,0xe08101a7,0x2db48506,0x0e609101,
+0x0127f484,0x000360bc,0xbf032c14,0x00f002de,0x50b00002,0xa117009f,
+0x025e0200,0x00ef00f0,0x00875eb0,0x86012714,0x100304e0,0x42b000a0,
+0x00180083,0x03d00c01,0x00a11700,0x0087de68,0x0201a264,0x1700b750,
+0x5e8001a1,0x27f48486,0x0ee08a01,0x0027f484,0x00af50b0,0xbf032614,
+0x04f002de,0xe08601b5,0xa0100304,0x9f500002,0x01b50400,0x100360bc,
+0x86024210,0x040007c1,0x5e2903d5,0xbb04f002,0x3352b000,0x00291400,
+0x003752b0,0x9e01a117,0xf484865e,0x50b00027,0xa117009f,0x86de8001,
+0x00a137f4,0xf0025e02,0x0702d30b,0x0400bf80,0x608001c8,0x8f26f402,
+0x9b50b000,0x00900600,0x00a750b0,0xb0009106,0x0600ab50,0x50b00092,
+0x9306009b,0x6300b000,0x00950600,0x008341b0,0x80019406,0x97f50660,
+0xdebf03ac,0xd504f002,0xab50b000,0x008f1000,0x00a750b0,0xb0008e10,
+0x10009b50,0x6080018d,0x8c30f406,0xb7500202,0x00d40400,0x004352b0,
+0xb0008f10,0x10003f52,0x52b0008e,0x8d10003b,0x37521a01,0x01a11700,
+0x0487de98,0xb801a137,0xb091865e,0x6082018c,0x2db48502,0x02608101,
+0x036c900d,0xf002de25,0x9c01d804,0xf4840260,0xdebf0327,0xdc04f002,
+0x0360bc01,0x012c1400,0xf5026081,0x8502aed7,0x04000b50,0x50a800dc,
+0x2d1405b7,0x02608301,0x0127f484,0x0902e085,0xbc014810,0x14000360,
+0x5ea2032a,0x1801f002,0x02debf03,0x030a00f0,0xf002de23,0xa3032f05,
+0x05f0025e,0xdea2032f,0x2f05f002,0x06608101,0x03ab77f5,0xf0025eaa,
+0x83012f05,0x100902e0,0xde510348,0xec04f002,0xb3de8002,0x00320500,
+0x006b02e0,0x80019a20,0x77f506e0,0xdebf03ab,0xf104f002,0x02de0103,
+0x00ef04f0,0x064f5e68,0xbc01ef24,0x17000360,0x5ea403a8,0xf104f002,
+0x02dec103,0x013205f0,0x09026084,0x04024810,0x0400bf00,0x60bc01f6,
+0x15110003,0x63001401,0x00a11700,0xf40266e0,0x02006530,0x0bf0025e,
+0x6082018b,0x48100902,0x025ea903,0x001105f0,0x043b5e68,0xf00101a5,
+0x370017de,0x5ea00085,0x8597f016,0x3b5e6800,0x02012506,0x00035001,
+0x87020005,0x0500bf80,0xe0850100,0x48100906,0x03d08002,0x00110500,
+0x001b5eb0,0xb000a317,0x17008b00,0x000402a4,0x070500bf,0x97416e00,
+0x01076530,0x00035a18,0x1a01a317,0x1700035a,0xc16800a4,0x0a051883,
+0x9302e000,0x03a42000,0xf002debf,0x6d000c05,0x85f42e5e,0xe082010c,
+0x2db48506,0x335ee000,0x008c3700,0xf432de68,0xb0000f65,0x17000f5e,
+0xde6d0085,0x1d65f42e,0x02debf03,0x002a05f0,0x001f5eb0,0xb000a317,
+0x17008f00,0x000402a4,0x170500bf,0x97416e00,0x01176530,0x00035a1c,
+0x1e01a317,0x1700035a,0x5e6d00a4,0x1985f42e,0x06e08201,0x002db485,
+0x00375ee0,0x68008d37,0x65f436de,0x5eb0001c,0x8517000f,0x2e5e6d00,
+0x012a65f4,0x0902e085,0xd1034810,0x05f002de,0x5e68001f,0x2485044b,
+0x025e0200,0x00830bf0,0x18834168,0x81014b05,0xb48506e0,0xdebf032d,
+0x7c04f002,0x4f50b000,0x00f21100,0x005350b0,0xb000f311,0x11005750,
+0x60bc01f4,0xf5110103,0x0360bc01,0x03f05100,0xf002debf,0x02007c04,
+0x0bf0025e,0x60810183,0x48100902,0x025e2903,0x022f05f0,0x00c70083,
+0xbf03ad0d,0x04f002de,0xded1037c,0x3005f002,0x02dea503,0x037c04f0,
+0xf002debf,0x80020a00,0x0000b301,0x5006020a,0x39050003,0x0b01b000,
+0x00a11700,0x0884de6d,0xe8003905,0x77086444,0x5e6e00a1,0x39250884,
+0x06e08701,0x01ab77f5,0x004b5e08,0x6800a117,0x2500875e,0x5eb0003c,
+0x8517000f,0x025e0200,0x00830bf0,0x063b5e68,0xbc014225,0x17000360,
+0xd000028c,0x44050003,0x0360bc01,0x038d1700,0xf002debf,0xbc014405,
+0x17000360,0xdebf038c,0x1801f002,0x83416800,0x014a0518,0x84066080,
+0x290327f4,0x04f0025e,0x6082017c,0x2db48506,0xc7008302,0x03ad0d00,
+0xf002debf,0xe0007c04,0x20009702,0x608101a5,0x48100902,0x0360bc01,
+0x008e0600,0x007b01e0,0xbc015ea0,0x17191360,0x016d00a1,0x0a20f47a,
+0x1360bc01,0x035e8011,0xf002debf,0x02000a00,0x09f0025e,0xde380375,
+0x0a00f002,0x02de9e03,0x000a00f0,0x004c44e8,0xe800a1f7,0x1701845e,
+0xde6a00a1,0x5b050184,0x845ee800,0x01871101,0x000360bc,0xa5018811,
+0x113022e0,0x60bc0180,0x13110003,0x0360bc01,0x00141100,0x006744b0,
+0xb000a117,0x17006b44,0x5eb000a2,0x04110087,0x8b5eb000,0x03051100,
+0xf002deb8,0xbf035d05,0x00f002de,0x5e87020a,0x8f070053,0x0360bc01,
+0x0192b704,0x040360bc,0xbc01a117,0xf01fff63,0x63bc01cb,0xccf01fff,
+0xff63bc01,0x01cdf01f,0x1fff63bc,0xbc01cef0,0xf01fff63,0x63bc01cf,
+0xd0f01fff,0x0360bc01,0x02e41000,0x00c30086,0xb0007d05,0x17000f54,
+0xde6900a2,0x7185908a,0x1252e800,0x00e450f4,0x00379a68,0xbc017d05,
+0x10000360,0x54b000e4,0xe0100027,0x2b54b000,0x03e11000,0xf002debf,
+0xa4038605,0x07f002de,0xdea90328,0x2807f002,0xbf800702,0x027a0500,
+0x000fd287,0xbc01bc05,0xd7010360,0x26e000a1,0x8c290033,0x05e08101,
+0x02936932,0x00c30006,0x80027f05,0x05005fde,0x54b00084,0xe0100007,
+0x371a6800,0x01820500,0xa086ded2,0xb000e030,0x10000b54,0xdebf03e1,
+0x8605f002,0x865ebc01,0x01e01090,0x001f60bc,0xbc01e110,0x10000360,
+0x52b000e2,0xe5100023,0xff63bc01,0x00c5f01f,0x002752b0,0xbc01e610,
+0xf01fff63,0x52b000c6,0xe710002b,0xff63bc01,0x00c7f01f,0x004700b0,
+0x08018610,0x1700371a,0x52380181,0x80170003,0x27c00201,0x00a61700,
+0xf0025e02,0xb000420d,0x17000754,0x81810280,0x950500b3,0x025e0200,
+0x004b0bf0,0x00371a68,0x68009e25,0x0500379a,0x541a0298,0x9e050007,
+0xa7006800,0x009c8500,0x00a70068,0x03019cc5,0x170027c0,0xdebf03a1,
+0x9d05f002,0x3bc00601,0x01a11700,0x10865e82,0xa90386d0,0x07f002de,
+0x5e680076,0xb725044f,0xff63bc01,0x00c3f01f,0x054f5e68,0xbc01a6a5,
+0x901a0360,0x60bc01e3,0x92b70603,0x4f5e6800,0x03b72505,0xf002debf,
+0xbc01b105,0x37060360,0x44980292,0x7c080007,0x07468002,0x017c0800,
+0x180360bc,0x0702e390,0x0500bf80,0xd20702b1,0xb105000f,0x06608101,
+0x01ac97f5,0x1c06e087,0xb000e370,0x10008f41,0x5e9f0362,0xb105f002,
+0x0360bc01,0x00453100,0x00371ab0,0x02008117,0x0bf0025e,0x5ee80078,
+0xa1d70084,0x865e6a00,0x00b78590,0xf41252e8,0xbf03e430,0x05f002de,
+0x60bc01ba,0xe4100003,0x02de3803,0x01ba05f0,0x1c06e087,0x9001e490,
+0x10090a60,0x61bc0148,0x91370403,0x4f5e6800,0x037ca805,0xf0025e83,
+0xbf032807,0x00f002de,0x41040202,0xc8050063,0x02e08901,0x01ac97f5,
+0x0b026084,0x05025810,0x0500af5e,0xe08701c4,0x33712606,0xbf000402,
+0x01c70500,0xf502e085,0x0200ab77,0x0cf0025e,0xdebf03b3,0x0200f002,
+0x23c58502,0x01ca0500,0x0b066084,0xbc015810,0x11000361,0x80050233,
+0xd10500bf,0x1360bc01,0x00a15711,0xf0025e02,0x96015800,0x30030e60,
+0x40b00019,0xa2170067,0x025e0200,0x005d00f0,0x006744e0,0x02029946,
+0x0500b35e,0xe08901d4,0xac97f506,0x37c08302,0x000a0000,0x001f02e0,
+0x02008720,0x0bf0025e,0xe08901af,0xac97f506,0x02debf03,0x010a00f0,
+0x3201e081,0x83019369,0x693201e0,0x5e020093,0xaf0bf002,0x13408102,
+0x01020000,0x000360bc,0xa3038010,0x05f002de,0x609001e0,0x48100902,
+0x6744b000,0x009e1700,0x006b44b0,0xb0009d17,0x17006f44,0x44b0009c,
+0x9b170073,0x7ade6800,0x00e02523,0x002302e0,0x15018820,0x17003b40,
+0x00680097,0xec8500a7,0xa7006800,0x00ecc500,0x005f5ea0,0x68009737,
+0x0500a780,0x60bc01ec,0x97370003,0x4301b000,0x01a11700,0x0584dec9,
+0x81017926,0x900d02e0,0x4086026c,0xf2050037,0xbb02e000,0x03ae2000,
+0xf002debf,0xbc011709,0x14000360,0x60bc0180,0x81140003,0x0a60b801,
+0x01249004,0x040360bc,0xbc01a006,0x46000360,0x60bc019f,0x2ad00003,
+0x0760b301,0x01041000,0x000360bc,0xbc018406,0x06000360,0x60bc0185,
+0x86060003,0x0360bc01,0x01870600,0xf502e083,0x8702aed7,0x090037c0,
+0x60bc0114,0x3e200003,0x025e0200,0x00a50ef0,0x005fde68,0x3c010546,
+0x17000352,0x52bc01a1,0xa137f406,0x845e6e00,0x035ba90b,0xf0025e43,
+0x6800fe05,0x46005f5e,0x5e680017,0x1426005f,0xa7806800,0x000aa600,
+0x906644e0,0xbc01aa26,0x1700c362,0x528002a1,0x0d060003,0x03529601,
+0x00a11700,0x9086de80,0x03029a37,0x06000352,0x5ee00012,0x9a37906a,
+0x03d20702,0x00120600,0x006b5ee8,0x9e029a37,0x09006b5e,0xdebf035b,
+0x1a06f002,0x03d25201,0x01a11700,0xf406d285,0xbf039a37,0x06f002de,
+0x523c011a,0xa1170003,0x0652bc01,0x009a37f4,0x0b685e6e,0x04025ba9,
+0x06003bc0,0x40870220,0x3b070037,0x0360bc01,0x003e4000,0xf0025e02,
+0x8702a50e,0x0600afc0,0x4058011b,0x9a1700af,0x025e2a03,0x022206f0,
+0x00afc087,0xb0001409,0x10282341,0x60800148,0x9497f202,0x02e08401,
+0x01481009,0x00af4058,0x01012a10,0x1700b3c1,0x5e8301a1,0xa1771087,
+0x865ebb01,0x00049000,0x001340b0,0x68000018,0x2900ab40,0xde290314,
+0x3206f002,0xab405801,0x029a1700,0x00a34700,0xbc013206,0x113c1e62,
+0x60bc01e0,0xea110003,0x6b5eb000,0x01eb1100,0x3d1e6098,0x8303e811,
+0x06f0025e,0x60bc0136,0x3e600003,0x025e0200,0x00a50ef0,0x0433406d,
+0xbc0132c6,0x06000360,0xe0880176,0x7706000f,0x33406d00,0x01230702,
+0x000f5229,0x09019317,0x17000f52,0x609601aa,0x9497f202,0x8741e000,
+0x0165f001,0x000f60bc,0x2800a117,0x669086de,0x60860142,0x9497f206,
+0x9741e000,0x00657000,0x00831ae0,0x0601a0c6,0x1700535e,0x5ea000a2,
+0xa177044f,0x87de6800,0x01504604,0xf206e086,0xb8009497,0x37008b5e,
+0x5ab000a2,0xa0170003,0x03da0a02,0x014a0600,0xf2066087,0x84029497,
+0x06003bc0,0xda030250,0x50060003,0x025eb003,0x024e06f0,0x00074104,
+0x80015006,0xe6ce0460,0x5e060177,0xa2170053,0x8ade8201,0x03049000,
+0xf002dea9,0xb0035b06,0x06f0025e,0xd2870257,0x57060013,0x1352b000,
+0x01861100,0x300ae0a5,0xbf038011,0x06f002de,0x52080257,0x5b06000f,
+0x1302e000,0x01842000,0xf2066080,0xbf039497,0x07f002de,0x52070224,
+0xc106000f,0xa3478002,0x00be0600,0x00831ae0,0xe800a086,0x86007f1a,
+0x60bc019f,0xe4110003,0xff63bc01,0x01a5f71f,0x030360bc,0x0602e1d1,
+0x0600535e,0x60bc0164,0xe1910403,0x53de0602,0x00680600,0x008747e0,
+0x0702e151,0x06000fd2,0x47e00068,0xe1910087,0x33406d00,0x0023c702,
+0x054f5e68,0x68006b86,0x4600abde,0x5eb003c1,0x6e06f002,0x17520002,
+0x03c10600,0xf002de9e,0x02007506,0x0af0025e,0xc00002a9,0x72060077,
+0x77402901,0x00a51700,0x00975ee0,0x6800a597,0xe6ff97de,0x52800275,
+0xc1060017,0xbf000702,0x01c10600,0x061b60bc,0x9000a217,0x30008747,
+0x41e00065,0x6550f496,0x8747e000,0x03960601,0xf0025e83,0xbc017d06,
+0x80000360,0x5e02003e,0xa50ef002,0x30406d00,0x0079c6d2,0xd230406d,
+0x680023c7,0xe6ff97de,0x5a0f0180,0xa5170007,0x0b60bc01,0x00a1571d,
+0xf4965ee0,0x2a016430,0x17000358,0xde9e0399,0x9006f002,0x02e08201,
+0x029937f3,0x00175200,0x16019006,0x170003d8,0x5a0f01a6,0xa4170007,
+0x03d80c01,0x00a11700,0xf492de68,0xe0008c26,0x1702675e,0xdebf0399,
+0x9106f002,0x03d80d01,0x00a11700,0xf492de68,0xe000c126,0x1704675e,
+0xdebf0399,0x9106f002,0x03581001,0x00a61700,0x00675e88,0xe000a277,
+0x50f4ae00,0xdeaa0164,0x76c6ce64,0x9bde6800,0x02ac4600,0x00878107,
+0x6d009f06,0x060c8bde,0x5285029f,0x9f06000f,0x3b521801,0x00a11700,
+0x0087de68,0x81019f06,0xe6ce04e0,0x5ee00077,0xa3370b88,0x8f5ee000,
+0x00a39700,0x008741e0,0x0200a277,0x0cf0025e,0x1ae80005,0x9f06017f,
+0x1b60bc01,0x0081d715,0x00975e88,0xe800a177,0xb0f4865e,0x60bc0163,
+0xa1170e07,0x8e41e000,0x006330f4,0x001756b0,0xb000a117,0x17001b56,
+0xde6800a2,0xc146d086,0x8ade6800,0x00c166d0,0xf0025e02,0xbc01da0b,
+0x90151b60,0x62bc0164,0xa217004f,0x025e0200,0x002d0cf0,0x009b5e68,
+0xbc01be46,0x71f41e62,0x5e6800e0,0xb166009b,0x9bde6800,0x01bea600,
+0x00c78002,0x8701a117,0x113d86de,0x609801e8,0xe8113d06,0x831ae000,
+0x00a08600,0x007f1ae8,0xbc019f86,0x11000360,0xde6800ea,0xb946005f,
+0x6b5eb000,0x01eb1100,0x3d5ede92,0x8701e811,0x113d0260,0xde6800e8,
+0xbda6009b,0x06608701,0x01e8113d,0x3d166098,0x8101e811,0xc6ce04e0,
+0xdeaa0176,0x76c6ce64,0x02debf03,0x01c506f0,0x000f62bc,0xbc01e011,
+0x11000360,0xe08101e4,0x77e6ce00,0x0f60bc01,0x02e81100,0x00df1900,
+0xe000cc06,0x46f37e1a,0x1ab0009f,0x25100083,0x7e1ae800,0x009fa604,
+0x017f9a6a,0xb801ccc6,0x90040660,0xe0820124,0x9497f206,0xa3c70702,
+0x01e60600,0x090360bc,0xe000ea11,0x17018747,0x5e8303a1,0xd106f002,
+0x32406d00,0x00cf26f4,0xf432406d,0xbc01e626,0x370b0360,0xde0602a1,
+0xd5060053,0x825e9c01,0x00a137f4,0x00875eb0,0xb000eb11,0x11002352,
+0x52b000eb,0xeb110027,0x2b52b000,0x00eb1100,0x00874790,0xbc016530,
+0x17061b60,0x41e000a1,0x6530f496,0x0f5ad800,0x00eb1101,0x010b5ad8,
+0xd800eb11,0x1101035a,0x5ee800eb,0xa1373c6a,0x875ee800,0x00a1d701,
+0x01875ed8,0x8601eb11,0x113d0660,0x60bc01e8,0x6510061b,0x025e0200,
+0x01470ef0,0x3d06e086,0x8801e811,0x90000a60,0xc0040104,0xa117003b,
+0x86de8101,0x036c900d,0xf002dea0,0x6800ee06,0xa6064f5e,0x523801f3,
+0x80170003,0x5f5eb000,0x00811700,0xf0025e02,0x68006400,0x4600abde,
+0x5ea000f3,0xa177044f,0x875e6800,0x00c94800,0x04875e68,0xbf03c948,
+0x0af002de,0xde86033d,0x1509f002,0x37c08702,0x00140900,0xf0025e02,
+0xbc01c10b,0xa0000360,0x5e02003e,0xa50ef002,0x025e0303,0x03f306f0,
+0xf002dea9,0xbc01fe06,0xc0000360,0x5e02003e,0xa50ef002,0x37400702,
+0x00fa0600,0xf0025e02,0x6e009d0a,0x07023040,0xde010328,0x2807f002,
+0xabde6800,0x03100700,0xf0025e30,0xe0000407,0x20002b02,0xdebf038a,
+0x0807f002,0x17528002,0x00070700,0x004302e0,0xbf039020,0x07f002de,
+0x02e00008,0x95200057,0x4f5e6800,0x00b60904,0x024f5e68,0x6800b689,
+0x08024f5e,0x5e680083,0xc288044f,0x4f5e6800,0x002f0a05,0x064f5e68,
+0x68002f0a,0x8a064f5e,0xdebf0338,0x3d0af002,0xabde6800,0x03212700,
+0xf0025e30,0xe0001407,0x20002f02,0xdebf038b,0x1807f002,0x17528002,
+0x00170700,0x004702e0,0xbf039120,0x07f002de,0x02e00018,0x9620005b,
+0x4f5e6800,0x0061a806,0x044f5e68,0x68004f2a,0xaa044f5e,0x5e68004f,
+0xcea8054f,0x4f5e6800,0x00612806,0x054f5e68,0xa0002d2a,0x77ff4f5e,
+0x5e6800a1,0x452a0787,0x02debf03,0x007c08f0,0x001302e0,0xbf038420,
+0x08f002de,0x02e00080,0x8320000f,0x0f60bc01,0x02e81100,0x003bc084,
+0x8401c106,0x100906e0,0xdebf0348,0xc106f002,0x93c00002,0x03020000,
+0xf0025ea3,0xc3032c07,0x07f0025e,0xdebf032b,0x5709f002,0x0360bc01,
+0x003e0001,0xf0025e02,0x0702a50e,0x0700afc0,0x40070230,0x2c070037,
+0xafc00701,0x00a11700,0x00875eb8,0x8201a137,0x900d865e,0x44b0006c,
+0x7806007f,0x02608301,0x00481009,0xf0025e02,0x8702c10b,0x090037c0,
+0xde860314,0x1509f002,0x0360bc01,0x003e2001,0xf0025e02,0x4303a50e,
+0x07f0025e,0xc0870235,0x14090037,0xb3810002,0x01600700,0xf2066080,
+0x01039497,0x07f002de,0x5eb00360,0x4207f002,0x0702e000,0x03812000,
+0xf002debf,0xe0004307,0x20000302,0x60bc0180,0x65b01227,0x9541e000,
+0x01659032,0x006b402d,0x8800a217,0x37018b5e,0x403801a2,0x8016002b,
+0x27408802,0x014a0700,0xd0066084,0xb0008016,0x56f4025a,0x60bc0180,
+0xa1d70d1b,0x025e0200,0x005800f0,0x006740b0,0xbc018116,0xf70d1b60,
+0x5e0200a1,0x5800f002,0x6740b000,0x00821600,0x005326e0,0x69009469,
+0x87015326,0x60bc0154,0x94090003,0xb3818402,0x01590700,0x0d04e084,
+0xbc016c80,0x00000360,0x60bc016e,0x6f000003,0x02debf03,0x005e07f0,
+0xf73a52e8,0xe800a1b7,0x1702875e,0x5e9000a1,0xa1970087,0xba01e100,
+0x006e20f4,0x00bf81e0,0xb0006f00,0x17003b52,0x010502bd,0x5b0900b3,
+0xdf198002,0x00620700,0x0230406e,0x81035d08,0x07f002de,0x02e0006c,
+0x85200017,0x02dea903,0x016707f0,0x0906e084,0x80014810,0x100902e0,
+0x5e020048,0x9b0bf002,0x02de8603,0x011509f0,0xce046080,0x800176c6,
+0x97f20660,0xdebf0394,0xe107f002,0x02de8603,0x031509f0,0xf0025e30,
+0xa9038f07,0x07f002de,0xde680074,0x8f4700ab,0x3b52b000,0x009f1700,
+0x003b52b0,0xbc01be17,0x26000360,0xdebf0384,0x8f07f002,0x02dea003,
+0x037e07f0,0xf002debf,0x90016305,0x10090a60,0x52b00048,0x9f17003b,
+0x3b52b000,0x01be1700,0x00835e9e,0x0601ebb0,0x17000f52,0x5eb800a1,
+0xa1370087,0x86de8201,0x01ab77f5,0x000361bc,0xe8008030,0xf7f33a52,
+0xd26b00a2,0x81e7f33a,0x7e5ee800,0x00a2d791,0x008b5e90,0xbc01a197,
+0x90101b60,0x526b0064,0x8ce7f33a,0x875e1801,0x01a21700,0x00875e0a,
+0x8800a317,0x57f40660,0x41e000a2,0x6470f492,0x0258b000,0x000056f4,
+0x91fade6b,0xb0008fc7,0x17003b52,0xdebf03be,0x8f07f002,0x025e0200,
+0x00820df0,0x00131ab0,0xb0008426,0x17003b52,0xde20039f,0x9c07f002,
+0x535e0702,0x01930700,0x0902e080,0xbf034810,0x07f002de,0xde68009c,
+0x9907005f,0x07541a02,0x01970700,0x0027c003,0x8201a117,0xd010865e,
+0xc0020186,0xa1170027,0x2a42e000,0x018a30f4,0xce04e080,0xa90376c6,
+0x07f002de,0x5eb0009c,0x80100047,0x4f5e0801,0x00a11700,0x00875e68,
+0xb003b927,0x07f0025e,0x520002bd,0xac070017,0xabde6800,0x00a24700,
+0x005302e0,0x86029420,0x0700535e,0x528402e1,0x5b09000f,0x0fd28402,
+0x03a70700,0xf0025eb3,0xbf03aa07,0x07f002de,0x5e3103b2,0xb207f002,
+0x4f5e6800,0x01aa0704,0xf2066084,0x68009497,0x07024f5e,0xdebf03e1,
+0xd107f002,0x02de1e03,0x03af07f0,0xf0025e31,0x8401af07,0x97f20260,
+0xde680094,0xb44700ab,0x3f02e000,0x038f2000,0xf002debf,0x6800b707,
+0x4700ab5e,0x528002b7,0xe107002f,0x07410202,0x00b70700,0x044f5e68,
+0x6800e107,0x87024f5e,0x410402e1,0x5b090007,0x02debf03,0x03e107f0,
+0xf0025e30,0x6800e107,0xa7054f5e,0x5e6800d1,0xd127054f,0x02debf03,
+0x02e107f0,0x00535e06,0xe000c007,0x20006302,0xdebf0398,0xe107f002,
+0x02de2303,0x01c807f0,0x000b5029,0x6800a317,0x27058fde,0xe08701c8,
+0x83701002,0x02608401,0x00481009,0x00875eb0,0x6e00a117,0x270003e0,
+0xded103c7,0xc807f002,0xabde6800,0x00ce4700,0x002702e0,0x07028920,
+0x0700bf80,0xd20701ce,0xa117000f,0x865e8101,0x01ac97f5,0x000360bc,
+0x6800a817,0x07004f5e,0x5e6800e1,0xe107014f,0x4f5e6800,0x02e18705,
+0x00c74780,0x29035b08,0x07f002de,0xde0201d7,0xa11700af,0x0f520601,
+0x00a21700,0xf4865e38,0x8201e147,0x77f58ade,0x52b000ab,0xf2110023,
+0x2752b000,0x00f31100,0x002b52b0,0x0601f411,0x17000f52,0x5ee000a1,
+0xf5310087,0x5b00b000,0x00f01100,0x00c347b0,0x34010018,0x1700c7c7,
+0xde6e00a1,0xe1a70284,0x0360bc01,0x02421008,0x0007c183,0x8002e307,
+0x0900535e,0x40b0005b,0xa1170033,0xdf990801,0x00a21700,0x008b5e68,
+0xe800eb67,0x17d43040,0x198102a1,0xeb0700df,0x831ab000,0x02a11700,
+0x00df9980,0xb000eb07,0x1700635e,0x5e6e00a1,0x5d080284,0x875eb000,
+0x01700600,0xce006081,0x020276c6,0x070013c0,0x5ee000f1,0x70460384,
+0x04608101,0x0276c6ce,0x00df1901,0x03010908,0x1700535e,0xde8701a1,
+0x76c6ce84,0x02de8603,0x011509f0,0x010360bc,0x02003e40,0x0ef0025e,
+0x5e8503a5,0xf407f002,0x02608e01,0x01e8113d,0x0083c707,0x8201a117,
+0xc6ce845e,0x99010276,0xfe0700df,0x97c70301,0x01a11700,0xce845e82,
+0x070277e6,0x0a00afc0,0x60bc0182,0xe811000f,0x04608401,0x0077e6ce,
+0x002740b0,0xb0007206,0x06002b40,0x40b00073,0x7406006b,0x6f40b000,
+0x01750600,0xce046084,0x020077e6,0x0af0025e,0x63bc019d,0xa8d71fff,
+0x025e0200,0x008b0bf0,0xf0025e02,0xa801820a,0x90000a60,0x19010204,
+0x6d0d00df,0x23016800,0x03590800,0xf002de20,0x06025908,0x080053de,
+0x5e680059,0x1228044f,0x4f5ea000,0x00a17704,0x0487de68,0xbc015948,
+0x10100360,0x52b00073,0x74100023,0x2752b000,0x00741000,0x002b52b0,
+0x1e017410,0x1000835e,0x60bc0174,0x71101203,0x0360bc01,0x0172f017,
+0x083360ac,0xb0007030,0x1800c341,0x41800200,0x1b0800c3,0xc3c18702,
+0x01590800,0xf506e083,0x8301aed7,0x700e0660,0x41280173,0xa11700cf,
+0x87de8000,0x01a1b700,0x062760bc,0xe0008249,0xa90d0a26,0x5e680082,
+0x4a28044f,0x0b26b000,0x00651000,0x00fb5e90,0xe800be97,0x97d0fa5e,
+0xde8502a1,0x49080087,0x7f5e9000,0x009f9700,0x07875ee8,0x0502a1f7,
+0x080087de,0x5ee80031,0xa197d07e,0x87de0502,0x00380800,0xf40260e8,
+0xbc01a137,0x90101b60,0x5e020064,0x970df002,0x02debf03,0x004008f0,
+0x07fb5ee8,0x9e0184f6,0x96d00260,0x609e0184,0xa137f402,0x875e6e00,
+0x003be807,0x009741e0,0x02006410,0x0df0025e,0x5ee80097,0xa197d07e,
+0x1b60bc01,0x00649010,0xf0025e02,0xbf03820d,0x08f002de,0x1ab00040,
+0x80160013,0x171ab000,0x00811600,0x001b1ab0,0xb0008216,0x16001f1a,
+0xdebf0383,0x4808f002,0x035ab000,0x00a11700,0xd0845eb0,0xb0008096,
+0x1700075a,0x5eb000a1,0x81b6d084,0x0b5ab000,0x00a11700,0xd0845eb0,
+0xb00082d6,0x17000f5a,0x5eb000a1,0x83f6d084,0x135a8800,0x039f9700,
+0xf002debf,0xb0005908,0x10000b26,0x5e900065,0xa297007f,0x8a5ee800,
+0x02a197d0,0x0087de85,0xb0005808,0x16008b5e,0x60e80084,0xa237f4fe,
+0x8bde8502,0x00540800,0x009741e0,0x02006410,0x0df0025e,0xdebf0397,
+0x5808f002,0x0360bc01,0x01801600,0x000360bc,0xbc018116,0x16000360,
+0x60bc0182,0x83160003,0x135ab000,0x009f1700,0x001340a8,0xbf030450,
+0x04f002de,0x02e000e1,0xa1200087,0x02debf03,0x005e08f0,0x000b02e0,
+0x84018220,0x10090660,0xe0840148,0x48100906,0x02debf03,0x035b09f0,
+0xf0025e30,0x68007408,0xa8064fde,0x02e00065,0x8e20003b,0x02debf03,
+0x006608f0,0x003702e0,0x23038d20,0x08f002de,0xde68007c,0x7cc8f14e,
+0x02e08701,0x01837010,0x09026084,0xb0004810,0x1700875e,0xe06e00a1,
+0x6c280003,0x02ded103,0x006d08f0,0x064f5e68,0x05026f28,0x08000b50,
+0x6082017c,0x48100906,0xbf800702,0x02730800,0x000fd207,0x80017308,
+0x97f506e0,0xdebf03ac,0x7c08f002,0xc3008702,0x00790800,0x064fde68,
+0x680079a8,0x080013d2,0x60bc0179,0x83110003,0x0360bc01,0x00821100,
+0x064fde68,0xe0007c28,0x20004f02,0xdebf0393,0x7c08f002,0x025eb003,
+0x027e08f0,0x00074104,0x83028108,0x07000741,0xdebf0328,0x8108f002,
+0x07418402,0x01280700,0xf2066080,0xbf039497,0x07f002de,0x5e9f0328,
+0x8608f002,0x02de9e03,0x023d0af0,0x00535e03,0x04023d0a,0x08004381,
+0x0100018a,0xa1170063,0x27c00201,0x00a21700,0xf486de38,0xb0038048,
+0x08f0025e,0x5200028c,0x80080017,0x2f528002,0x038e0800,0xf0025e33,
+0x3c023d0a,0x08003f52,0x523c019f,0xa117003f,0x84de6800,0x01be8804,
+0x160360bc,0xbc016410,0x10081b60,0x5e680065,0x9b280087,0x035ab000,
+0x00a21700,0xc08ade68,0xe000be08,0x30009741,0x41e00065,0x64300093,
+0x875ee800,0x00a15700,0x00875e6a,0x68009428,0x0800875e,0x5a3801a0,
+0xa1170003,0x03583801,0x00a21700,0xf486de68,0xbf03be48,0x08f002de,
+0xc18502a0,0x3d0a0007,0x1b60bc01,0x0165f007,0x050360bc,0x0200a4b7,
+0x00f0025e,0x00800289,0xbe0800c3,0x1360bc01,0x00a61719,0x007f01e0,
+0x6d00a5b7,0xc8f4965e,0x60bc01a8,0xa5971113,0x945e6800,0x00c0c80b,
+0x007b01b0,0xb0006510,0x17002752,0x52b000a2,0xa317002b,0x94416800,
+0x00b3e80b,0xd08ede68,0x6800af48,0x28d08a5e,0x41e000be,0x65b00097,
+0x96416d00,0x01acc8f4,0x111360bc,0xbf036590,0x08f002de,0x02e000ac,
+0xa220008b,0x7f01b000,0x00651000,0x002352b0,0xb0008016,0x16002752,
+0x52b00081,0x8216002b,0x0252bc01,0x01a1f7f2,0xf4025ea9,0x90008336,
+0x16016744,0xde680084,0xbda80593,0x06608401,0x008496d0,0x00975eb0,
+0xb0035f00,0x05f0025e,0xdebf0376,0x2807f002,0x8f02e000,0x03a32000,
+0xf002debf,0x9e038008,0x0af002de,0x5eb0033d,0xc508f002,0x17520002,
+0x03800800,0xf0025e33,0x84013d0a,0x97f20660,0x5eb00394,0x7605f002,
+0x02debf03,0x032807f0,0xf0025e83,0x6d00cb08,0x88033340,0x406d00c9,
+0x80880333,0x025e3003,0x033e0af0,0xf002debf,0x30037605,0x08f0025e,
+0x02e000d1,0x8c200033,0x02debf03,0x007a05f0,0x004b02e0,0x03019220,
+0x170027c0,0x5e820181,0x81b7d104,0x025e0200,0x00780bf0,0x00230088,
+0xe000a237,0xf700885e,0x5ee000a2,0x8951f486,0x06e08601,0x03801130,
+0xf002debf,0xa2037c08,0x00f002de,0xdea30334,0xf408f002,0xff01e000,
+0x017f2000,0x000360bc,0xbf03a317,0x08f002de,0x608701f6,0xa0100304,
+0x0360bc01,0x00e45100,0x009347b0,0xbc010018,0x90020360,0x62bc0104,
+0xe011000f,0x0f60bc01,0x00e83101,0x00a347b0,0xbc010018,0x11000f60,
+0x608401e8,0x48100906,0x1e602000,0x00eb0809,0x00fb01e0,0xbf037e20,
+0x08f002de,0x60bc01fc,0xa1d70e03,0x63001401,0x00a21700,0xf4865ee0,
+0xe0006550,0x3600035a,0x00030280,0xf10800c7,0x025ea903,0x02f608f0,
+0x009f5091,0x9101f508,0xf4841a60,0xdebf0327,0xf508f002,0xff01e000,
+0x017f2000,0x000360bc,0x2303a337,0x08f002de,0xe08301fc,0x48100902,
+0x0360bc01,0x018e1700,0x1002e087,0x82018370,0x10090260,0x5e020048,
+0x830bf002,0x02ded003,0x03fd08f0,0xf0025ed0,0x8201fe08,0x100902e0,
+0xded50348,0x0009f002,0x0360bc01,0x01b41000,0x000360bc,0x6800a1f7,
+0x0900a700,0x42850104,0xa137f41a,0x025e0200,0x005800f0,0x006740b0,
+0xbc01a517,0xf71fff63,0x5e0200a2,0x5d00f002,0x07608800,0x00a45701,
+0xf4865eb8,0x0200a197,0x00f0025e,0x5e68005d,0x0200008f,0xb3016800,
+0x010f0900,0x000360bc,0xbf032605,0x09f002de,0xe0200012,0x1209091e,
+0x975eb000,0x032a1400,0xf002debf,0xa8000b02,0xf0002341,0xdebf0348,
+0x0200f002,0x02608301,0x00481009,0x0230406e,0xe0001709,0x20007702,
+0x5e02009d,0x420ef002,0x025ea303,0x032807f0,0xf002dec6,0x84011a09,
+0x100906e0,0xdebf0348,0x5b09f002,0x8ae32000,0x02210009,0x00234584,
+0x91032100,0x00f0025e,0xde960321,0x2100f002,0x025e9603,0x002100f0,
+0xf0025e02,0xbc017509,0x30000360,0xe0870142,0x23712402,0x0360bc01,
+0x03206000,0xf0025e12,0xbc012509,0x40000360,0x61bc0120,0x25110083,
+0x7b00b000,0x01271100,0x111360bc,0xbc015e80,0x80111360,0xe080015f,
+0xaed7f506,0x07c10701,0x01ab1700,0x000f60bc,0xbc01e811,0x11000f62,
+0x5e0200e0,0x3b09f002,0xcf61bc01,0x015c100c,0x000360bc,0xbc015d10,
+0xf001cf61,0x60bc015e,0x5ff0083b,0xc7000302,0x010a0000,0x000360bc,
+0xbc01e803,0x03000360,0x60bc01ed,0xf2030003,0x0360bc01,0x01f70300,
+0x000360bc,0xbf03a906,0x00f002de,0x60bc010a,0x48100003,0xb35ea800,
+0x01ac5703,0x1fff63bc,0xbc0154f0,0xf01fff63,0x63bc0155,0x56f01fbf,
+0xff63bc01,0x0057f01f,0xf0025e02,0x8701420e,0x712406e0,0x60bc0123,
+0x54100003,0x0360bc01,0x01551000,0x000360bc,0xbc015610,0x10000360,
+0x60bc0157,0x1720000f,0x07c10601,0x01a11700,0x02845e82,0x070117e0,
+0x17000741,0x5eb800a1,0xa1370087,0x87de8001,0x00160000,0xf002de02,
+0x85020000,0x000037c0,0x60bc0102,0x3e600103,0x025e0200,0x02a50ef0,
+0x00374086,0x02004e09,0x0bf0025e,0x608201af,0xac97f506,0x1b02e000,
+0x03862000,0xf002de86,0x87021509,0x090037c0,0x60580115,0x2a100003,
+0x0360bc01,0x00049000,0x001340b0,0xbf03a117,0x00f002de,0x60b8010a,
+0x2490040a,0x025eaa03,0x015e09f0,0x00036058,0xbc012a10,0x90020360,
+0x40b00004,0x00180013,0x0360bc01,0x00e45100,0x009347b0,0xbc010018,
+0x11000f62,0x608001e0,0x77e6ce00,0x025e8503,0x016409f0,0x000f62bc,
+0xbc01e011,0x31010f60,0x47b000e8,0x001800a3,0x0f60bc01,0x01e81100,
+0x010360bc,0xe800a157,0x3700875e,0xde6800a1,0x6a090087,0x0360bc01,
+0x00049002,0x001340b0,0x24030018,0x04f002de,0x608601e1,0xab77f506,
+0x025e0200,0x017509f0,0x10066080,0xb0008130,0x1700875e,0x608001a1,
+0x81301002,0x02debf03,0x01e104f0,0x000361bc,0xb0008010,0x18000342,
+0xe06e0000,0x78290003,0x025e5003,0x007b09f0,0xf0025e01,0xbf030000,
+0x02f002de,0x41a80033,0x48f00423,0x02608201,0x02481009,0x00afde06,
+0xd5038009,0x09f002de,0xde500380,0x7e09f002,0x0360bc01,0x02b41000,
+0x0083c784,0xbc018309,0x11000b60,0x608e01e0,0xab77f502,0x02de0200,
+0x030000f0,0xf002dea2,0xbc022100,0x09008742,0x60bc018c,0xa4370003,
+0x0360bc01,0x01a3f71f,0x00630014,0x8800a217,0x57f40660,0xdebf03a2,
+0x9109f002,0x07608800,0x01a41701,0x00ff63bc,0x1401a317,0x17006300,
+0x5ee000a2,0xa217018b,0x06608800,0x01a257f4,0x191360bc,0x20006510,
+0x89f486c2,0x41e00097,0x65500697,0x935e8800,0x00a43700,0xf4925e20,
+0xbf032160,0x09f002de,0xde680092,0x9b49f492,0x02dea003,0x009b09f0,
+0x1623c120,0x02009309,0x09f0025e,0xde6d0075,0xa8092093,0xb35a0002,
+0x02a70900,0x00b35a3c,0x8503a709,0x00f002de,0x5e850321,0x2100f002,
+0x02dea203,0x032100f0,0xf002dea3,0x97032100,0x00f002de,0x41b00021,
+0x60100097,0x06608800,0x01a497f4,0x840a6091,0xbf0327f4,0x02f002de,
+0x6080010b,0xac96d502,0x935eb000,0x01a11000,0x000360bc,0xbf034330,
+0x09f002de,0xc2830293,0x0200001f,0x875eb000,0x03a11700,0xf002ded0,
+0xbc01fb03,0x10040360,0xde9e0342,0x0a00f002,0x3f5eb000,0x01451100,
+0x000360bc,0xb0008f17,0x1700435e,0x5eb00085,0x9017000f,0x025e0200,
+0x037509f0,0xf002debf,0x6d000a00,0x88053340,0x5eb30381,0xbb09f002,
+0x4f5e6800,0x00ed8902,0x006702e0,0xbf039920,0x09f002de,0x5e6800ed,
+0xec89024f,0x5f02e000,0x03972000,0xf0025e9f,0x9e032b0a,0x09f002de,
+0xde2103cd,0xcd09f002,0x6f02e000,0x009b2000,0xf0025e02,0x86017509,
+0x10090260,0x60800148,0x48100902,0x02e08101,0x01481009,0x020360bc,
+0x80024210,0x09001f44,0x5eb000cc,0x4511003f,0x0360bc01,0x008f1700,
+0x00435eb0,0xb0008517,0x17000f5e,0xdebf0390,0xcd09f002,0xb644a000,
+0x034571f0,0xf0025e9f,0x82022b0a,0x0900c300,0x00b000ec,0xa1170073,
+0x865ee000,0x00a117b0,0xf47a5ee1,0xe1009e37,0x170077de,0xdee1009d,
+0x9c170073,0x6fdee000,0x039b1700,0xf002de9e,0x6e00dd09,0x4a926e5e,
+0x5e6d002b,0xdd49926e,0x725e6e00,0x002b2a92,0x92725e6d,0x6e00dd29,
+0x0a92765e,0x5e6d002b,0xdd099276,0x7ade6d00,0x002bea91,0x006744b0,
+0xb000a806,0x06006b44,0x44b000a7,0xa606006f,0x7344b000,0x00a50600,
+0x23a29a68,0xe900dd29,0xd7f3a21a,0x9ae9009e,0x9db7f39e,0x9a9ae900,
+0x009c97f3,0xf3969ae8,0xe1009b77,0xf7917a5e,0x5eb000a1,0x19110087,
+0x76dee100,0x001a1192,0x9272dee1,0xe0001b31,0x51926ede,0xde68001c,
+0xe6292386,0x02de1e03,0x002b0af0,0x024f5e68,0xbc012b8a,0xb0081b60,
+0x60bc0165,0xa4970003,0x025e0200,0x008900f0,0x0093de68,0x85021b8a,
+0x0a00c300,0xc107021b,0xf7090097,0x0f5a3c01,0x01a21700,0xf4125abc,
+0xbf03a257,0x09f002de,0x5ab000f8,0xa217000f,0x0360bc01,0x03321100,
+0xf0025e33,0x8002fe09,0x0a001f44,0x5eb0001b,0x8611008b,0x0ee0a501,
+0x03801130,0xf002debf,0x9b021b0a,0x0a002f40,0x44000214,0x0e0a0007,
+0x07c40002,0x02080a00,0x00074481,0x82011b0a,0x900107e0,0x52b00010,
+0x1110002f,0x3352b000,0x00111000,0x003752b0,0xb0001110,0x11008b5e,
+0xdebf030f,0x1b0af002,0x07e08201,0x00103001,0x002f52b0,0xb0001110,
+0x10003352,0x52b00011,0x11100037,0x8b5eb000,0x030d1100,0xf002debf,
+0x82011b0a,0xd00007e0,0x52b00010,0x1110002f,0x3352b000,0x00111000,
+0x003752b0,0xb0001110,0x11008b5e,0xdebf030b,0x1b0af002,0x02de3303,
+0x00170af0,0x008b5eb0,0xbf030b11,0x0af002de,0x5e34031b,0x1a0af002,
+0x8b5eb000,0x030d1100,0xf002debf,0xb0001b0a,0x11008b5e,0xde1e030f,
+0x2b0af002,0x025e9f03,0x002b0af0,0x024f5e68,0x33032b8a,0x0af0025e,
+0x60bc012b,0x65b0081b,0x0360bc01,0x00a4b700,0xf0025e02,0x68008900,
+0xaa0093de,0xc107022b,0x270a0097,0x075a3c01,0x01881700,0x000b5a3c,
+0xbf03a117,0x0af002de,0x5a380129,0x88170007,0x0b5a3801,0x01a11700,
+0xf2865e84,0x87019497,0x912486de,0x5eb00324,0x7605f002,0x02debf03,
+0x032807f0,0xf0025e30,0xbf038008,0x05f002de,0x5eb00376,0x320af002,
+0x025e3303,0x038008f0,0xf002debf,0xb0003e0a,0x11002352,0x52b000f2,
+0xf3110027,0x2b52b000,0x01f41100,0x000360bc,0xb000f591,0x11005b00,
+0xdebf03f0,0x7605f002,0x3f523801,0x02a11700,0x00535e06,0x38013b0a,
+0x17004b52,0xde6800a1,0x3d8a0087,0x02debf03,0x032807f0,0xf0025eb0,
+0x00027605,0x0a00f300,0xde060243,0x430a0053,0x835e1801,0x00a11700,
+0x0087de68,0xbc0143aa,0x51020b60,0x52000242,0x80080017,0x02debf03,
+0x012807f0,0x000360bc,0xbc018311,0x11000360,0x40190182,0xa117002f,
+0x875e6800,0x017c0800,0x2086de99,0x31030011,0x08f0025e,0x5ea0007c,
+0xa297003b,0x4e5e2000,0x017c48f4,0x09026084,0xbf034810,0x08f002de,
+0x5e30037c,0x7c08f002,0x4fde6800,0x00542a04,0x003352b0,0xb0009f17,
+0x10002f52,0x528102eb,0x6305002f,0xab02e000,0x02aa2000,0x002f5281,
+0x08026608,0x05002f52,0xdebf0376,0x2807f002,0x0360bc01,0x01671000,
+0x000360bc,0x80014610,0x300906e0,0xc1820249,0x600a001f,0x2f60bc01,
+0x0165f01f,0x000360bc,0xe8008016,0x30009741,0xc1690065,0x5d0a0097,
+0x0b60bc01,0x01941700,0x000360bc,0xbc01ab17,0x17000360,0x60bc01ac,
+0xad170003,0x0360bc01,0x01ae1700,0x000360bc,0xbc01bf17,0x20000360,
+0x60bc0120,0xa1170003,0x025e0200,0x015800f0,0x00674038,0x1c012800,
+0x00006740,0x60bc0129,0x49500003,0x0360bc01,0x01a71700,0x000360bc,
+0xbc01a817,0x17000360,0x60bc01a9,0xac170003,0x0360bc01,0x01ad1700,
+0x0f06e082,0x06027810,0x0a00e3c1,0x80680072,0x750a00a7,0x02debf03,
+0x00760af0,0x00a78068,0xbc01768a,0xe0000b60,0x60bc0100,0x01400003,
+0x2f62bc01,0x01022003,0x1b5b60bc,0xbc010340,0x00000360,0x60bc0104,
+0x05000003,0x1b60bc01,0x01611006,0x1f1360bc,0xbc016050,0x06000360,
+0x5eb0009e,0x8517000f,0xb644a000,0x034571f0,0xf002debf,0x88012209,
+0x46ce5c5e,0x60bc0172,0x07100e1b,0x0360bc01,0x01085001,0x00066088,
+0x07020490,0x0600afc0,0xde860320,0x1509f002,0x02de0503,0x03870af0,
+0xf002de86,0x85031509,0x0af002de,0x5eb00089,0xa1170087,0x03e06e00,
+0x038d2a00,0xf002de86,0xbc011509,0x10000760,0xde020042,0x0000f002,
+0x025e2103,0x00940af0,0xf43a1ae0,0xb0008e26,0x17003b1a,0xdebf038b,
+0x9c0af002,0xb7508102,0x01990a00,0x009f501c,0xe0008b17,0x37f42e5e,
+0x5e9c018b,0x27f4842e,0x02debf03,0x019c0af0,0x009f501e,0xe0008b17,
+0x37f42e5e,0x5e9e018b,0x27f4842e,0x02de0200,0x000000f0,0x00a70068,
+0x0201a28a,0x060027c0,0x8068009d,0xa8aa00a7,0x771ae000,0x009d2600,
+0xf002de02,0xbc010000,0x26000360,0x40bc019d,0xa117002b,0x875e9800,
+0x00a11701,0x012b4098,0x6a00a217,0x2af48ade,0x60bc01a8,0x9d860003,
+0x02de0200,0x000000f0,0x002352b0,0xb0001f10,0x10002752,0x52b00020,
+0x2110002b,0x07608001,0x021d1000,0x00774080,0x0200ad0a,0x00f002de,
+0xe0870100,0xab77f502,0x025e9103,0x000200f0,0x09fee320,0x81020200,
+0x0a00535e,0x418302bb,0xb50a001f,0x53de8102,0x01c10a00,0x000360bc,
+0xbc015111,0x11000360,0x62bc0152,0x53110003,0x0360bc01,0x01505100,
+0xf2066089,0xbf039497,0x00f002de,0xc5800202,0x02000043,0x47c5f001,
+0x01561100,0x0047c507,0xf001a117,0x31f44ac5,0x60890155,0x9497f20a,
+0x0360bc01,0x02471008,0x0007c104,0x92030200,0x00f002de,0xde9e0302,
+0xc80af002,0x02deb803,0x000200f0,0x007f01b0,0x6800a117,0xc00b84de,
+0xdebf0302,0xca0af002,0x53de0302,0x00020000,0x0023de68,0x8402cb0a,
+0x0000535e,0xc4870202,0x02000093,0x0361bc01,0x00231100,0x002b01b0,
+0xb000a317,0x17000b44,0x44b000a1,0xa217000f,0x865ee900,0x00a13723,
+0x238adee8,0xe900a257,0x66f4865e,0xdee8008a,0x8b06008b,0x6f816800,
+0x00d70a00,0x00235e68,0x6800eb2a,0x2a002700,0x5ee800eb,0xa1370023,
+0x87de6900,0x00da0a00,0x01845ee0,0xb000a137,0x18001f44,0x44880000,
+0xa3570123,0x23449000,0x01a4d700,0x006f013c,0x6800a517,0x0a0097de,
+0x013801e4,0xa517006f,0x975e6800,0x00e70a00,0x00975ee8,0x6800a137,
+0x0a00875e,0xdebf03eb,0xe70af002,0x975ee800,0x00a53700,0x0194de80,
+0xe000a537,0xb70d865e,0x1ae100a1,0x8a66f42a,0x2e9ae000,0x008b86f4,
+0x00875ee8,0x6a00a137,0x0a00875e,0x1a6900e7,0xf00a002f,0x2f9a6800,
+0x00ee0a00,0x2a2a9a6e,0x8001f08a,0x97f206e0,0xdebf0394,0xf20af002,
+0x02e08001,0x039497f2,0xf002debf,0x68000200,0x0a002741,0x458402fd,
+0xf30a0023,0xa7006800,0x00f6aa00,0x00a78068,0xb000f9ca,0x17006744,
+0x44e800a1,0xa237f466,0x8b5e6d00,0x03f74a00,0xf002de92,0x02002e09,
+0x0cf0025e,0x5e02005f,0x5a0cf002,0x025e0200,0x016a0cf0,0x000f60bc,
+0x1e03e811,0x0bf002de,0x60bc0104,0x5c100003,0x0360bc01,0x015d1000,
+0x045360bc,0xbc015e10,0x10000360,0xdebf035f,0x080bf002,0x0b60bc01,
+0x015c1000,0x000360bc,0xbc015d10,0x10044360,0x60bc015e,0x5f100003,
+0x0360bc01,0x02208000,0x00bf0085,0xb0003d0b,0x11002b1a,0x1ab00051,
+0x5211002f,0x0360bc01,0x01503100,0x0c0360bc,0x00004090,0x00f002de,
+0xc1680000,0x110b0003,0x43458002,0x010d0b00,0x000360bc,0x84025011,
+0x0b004345,0x44b00012,0xa1170067,0x865e6800,0x01142b23,0x000360bc,
+0x86012040,0x11200660,0x1ae90000,0xa1372a2a,0x2e9ae800,0x00a2572a,
+0xf46644e1,0xe1001931,0x51f46ac4,0xc4e1001a,0x1b11006f,0x73c4e000,
+0x001c1100,0x001f44b0,0x88000018,0x57012344,0x449000a3,0xa4d70023,
+0x0b44b000,0x00a11700,0x000f44b0,0xe900a217,0x3723865e,0xdee800a1,
+0xa257238a,0x8bde6900,0x002b0b00,0xf40a44e1,0xe0000271,0x91f40ec4,
+0x5ee80003,0x88370023,0x23de6900,0x00200b00,0x002700e8,0xbf038837,
+0x0bf002de,0x60860120,0x00112002,0x53de0002,0x013f0b00,0xf202e080,
+0x02009497,0x0cf0025e,0x60bc015d,0x40100003,0x02debf03,0x02320bf0,
+0x00c38000,0xe000360b,0x57096444,0x5ee800a1,0xa1372186,0x66c46c00,
+0x03342bf4,0xf002debf,0xe8003f0b,0x26212a01,0x60bc018a,0x8b060003,
+0x2b1ab000,0x01511100,0x000360bc,0xbc015211,0x31000360,0x45800250,
+0x3b0b0043,0x02debf03,0x01160bf0,0x000360bc,0xb0004010,0x11002b01,
+0xde000009,0x0000f002,0x025e5603,0x00420bf0,0xf0025e02,0xb000cc00,
+0x11002f01,0x61bc0109,0x5c100ccf,0x0360bc01,0x015d1000,0x01cf61bc,
+0xbc015ef0,0xf0083b60,0x5e02005f,0x660cf002,0x025e0200,0x006f0cf0,
+0xf0025e02,0xbf03630c,0x09f002de,0x5e88012e,0x86d01006,0x075e0201,
+0x01a11700,0x10865e82,0x680086d0,0x8b00a780,0x5e9d0150,0x86d01002,
+0x1b420802,0x01670b00,0x061b60bc,0x0200a137,0x00f0025e,0x608d0158,
+0xa2370306,0x025e0200,0x015d00f0,0x006f5018,0x8002a317,0x0b001bc2,
+0x60bc015b,0x81d71d03,0x8fde0002,0x02640b00,0x008f5e00,0xbf035e0b,
+0x0bf002de,0x60bc0161,0x81f70303,0x8f5e6e00,0x00644b00,0x008f5e68,
+0x8301610b,0x37030660,0x5e0200a2,0x5d00f002,0x02debf03,0x016c0bf0,
+0x03066083,0x0200a237,0x00f0025e,0xdebf035d,0x6c0bf002,0x02608301,
+0x00a23703,0xf0025e02,0xbf035d00,0x0bf002de,0x60bc016c,0xa137061b,
+0x025e0200,0x015800f0,0x0302608d,0x0200a237,0x00f0025e,0x60bc015d,
+0x81d71d03,0x07c18102,0x026c0b00,0x00634087,0xbc016d0b,0x10070760,
+0x60bc0119,0x18700183,0x63408702,0x00700b00,0x00075eb0,0xbc011910,
+0xb0018360,0x40870218,0x730b0063,0xa7006800,0x02778b00,0x001b420b,
+0xbf03770b,0x0bf002de,0xde020077,0x0000f002,0x1354b000,0x02a11700,
+0x0007de00,0xb000820b,0x10008b41,0x60bc0165,0xa1d70103,0x025e0200,
+0x00570df0,0x00845ee0,0xe000a1d7,0xf700845e,0x5e0202a1,0x820b0007,
+0x845ee800,0x03a137d4,0xf002debf,0x0200820b,0x00f002de,0x00040200,
+0x860b00bf,0x025e0200,0x03340df0,0xf002debf,0xa0008a0b,0xb1f0b644,
+0x80070245,0x8a0b00bf,0x17c56800,0x018a0b00,0x000360bc,0x02004531,
+0x00f002de,0x00000200,0x9a0b00bf,0xa35ee000,0x00a83700,0x05a05e6d,
+0xb0009acb,0x17009726,0x5e0200a1,0x5800f002,0x6740b000,0x00a21700,
+0xffa3de68,0xb00097eb,0xd734895e,0x006d00a2,0x968b00a7,0x779a6d00,
+0x03984b00,0xf002debf,0x6800970b,0x0b00779a,0x5eb80098,0xa2d73489,
+0x025e0200,0x015d00f0,0x000360bc,0x0200a817,0x00f002de,0x5e010200,
+0xae0b00b3,0x02608101,0x01ac97f5,0x1f0f60bc,0x90016210,0x30020460,
+0x54b00086,0x8a100027,0x0361bc01,0x0080f000,0x00a702e0,0xbc01a920,
+0x10000360,0x60bc0184,0x85100003,0x0754b000,0x00e01000,0x000b54b0,
+0xbc01e110,0x901a0360,0x60bc01e3,0xe4100003,0x0360bc01,0x0192b706,
+0x1fff63bc,0xbc01c3f0,0xf01fff63,0x60bc01c4,0x84f01f03,0x0a609001,
+0x01481009,0x0902e084,0x02004810,0x00f002de,0xde000200,0xc00b00b3,
+0xb35e0002,0x02c00b00,0x001f4200,0xbc01c00b,0x10000361,0x42b00080,
+0x00180003,0x03e06e00,0x03b52b00,0xf0025e50,0x0100b80b,0x00f0025e,
+0xdebf0300,0x3302f002,0x2341a800,0x0148f001,0xf502e087,0xb000ab77,
+0x1100331a,0x02e00042,0xa720009f,0x7060a001,0x008fe6d1,0xf0025e02,
+0x8001d30b,0x900d06e0,0x5e02006c,0x8b0bf002,0x02de0200,0x030000f0,
+0xf002de28,0x2000c00b,0x0b098ae0,0x1ab000c0,0x60100053,0x571ab000,
+0x00180000,0x006300b0,0xb000a010,0x18008342,0x42680000,0xc00b0047,
+0x02608001,0x002c9485,0xf0025e02,0xb000e700,0x17004f1a,0xde6800a5,
+0xcfcb8496,0x02e08001,0x016c900d,0x8506e082,0xbf032db4,0x0bf002de,
+0xe08601c0,0xa0100304,0x8342b000,0x00001800,0x00a302e0,0xbf03a820,
+0x0bf002de,0x5e0002c0,0xd90b00b3,0x4b1ab000,0x008f1000,0x00471ab0,
+0xb0008e10,0x1000431a,0x1ab0008d,0x8c30003f,0x02608001,0x00ac97f5,
+0xf002de02,0xd8000000,0x1701035a,0x5ab801a2,0xa257f406,0x0356b000,
+0x00ae0600,0x000756b0,0xb000af06,0x06000b56,0x56b000b0,0xb106000f,
+0x1356b000,0x00b20600,0xf41256e0,0xb000b346,0x0600035a,0x5e3801ac,
+0xad06008b,0xcf1ab000,0x01a41700,0x000360bc,0xb000a217,0x10009341,
+0x5eb80065,0xa417d092,0x065ee000,0x006350f4,0x00935ef0,0xf000a317,
+0x7700935e,0x5ee000a4,0xa237008b,0x925eb800,0x00a477f4,0xf49241e0,
+0xe0006550,0x95f40256,0x56b00080,0xa4170003,0x8bde6e00,0x00e7ab00,
+0xc0925eb8,0xd800a2d7,0x37008b5e,0x1ae000a2,0xae46f4ba,0xbb1ab000,
+0x00a41700,0xc0925eb8,0xd800a2f7,0x37008b5e,0x1ae000a2,0xaf46f4be,
+0xbf1ad800,0x00a23700,0xf4c21ae0,0xd800b046,0x3700c31a,0x1ae000a2,
+0xb146f4c6,0xc71ad800,0x00a23700,0xf4ca1ae0,0xd800b246,0x3700cb1a,
+0x1ae000a2,0xb346f4ce,0xcf1ab000,0x00a21700,0xc08a5eb8,0x9000a217,
+0x37008b5e,0x5ebc01a2,0xada6d588,0x02de0200,0x010000f0,0x3c066080,
+0x8701e491,0xd13c0660,0x60a801e6,0xe6d13c02,0x02608b01,0x00e6d13c,
+0x008f5eb0,0xb0006310,0x11000356,0x56b000e7,0xe7110007,0x0b56b000,
+0x00e71100,0x000f56b0,0xa901e711,0x913c4260,0x60a801e4,0xe6d13c02,
+0x06608b01,0x00e6d13c,0x008b5eb0,0xbc016310,0x57000360,0x560402a1,
+0x150c0003,0x0360bc01,0x00a11701,0xf48e41e0,0xb0006330,0x11000356,
+0x56b000e7,0xe7110007,0x0b56b000,0x00e71100,0x008b5eb0,0xbc016310,
+0xb7000360,0xd60402a1,0x1f0c0003,0x0360bc01,0x02a11701,0x00535e06,
+0xbc011f0c,0x97010360,0x41e000a1,0x6330f48e,0x0356b000,0x00e71100,
+0x000756b0,0xb000e711,0x11000b56,0x60bc01e7,0xa1170003,0x53de0602,
+0x002a0c00,0x008b5eb0,0x06026310,0x0c00535e,0x56a00029,0xa1f7013f,
+0x02debf03,0x002a0cf0,0x013356a0,0xb000a1f7,0x1100875e,0x60bc01e7,
+0xe7110003,0x02de0200,0x010000f0,0x020760bc,0x6800e311,0x4c009bde,
+0x47e80039,0xe1110187,0x0360bc01,0x01e21100,0x000360bc,0xbc01e211,
+0x11000360,0x60bc01e2,0xe2110003,0x0360bc01,0x01e21100,0x000360bc,
+0xbc01e211,0x11000360,0x60bc01e2,0xe2110003,0x4261b000,0x00e051f4,
+0x000358b0,0xb000e211,0x11000758,0x58b000e2,0xe211000b,0x0f58b000,
+0x00e21100,0x001358b0,0xb000e211,0x11001758,0x58b000e2,0xe211001b,
+0x1f58b000,0x00e21100,0x009b5eb0,0x6800a417,0xac009bde,0x60bc0144,
+0xa4770003,0x93de9201,0x00a31702,0xf002de02,0x81020000,0x0c0007c1,
+0x60bc014d,0xa1770103,0x035ea000,0x00a2f71f,0xf0025e02,0xbc015d00,
+0xb7010360,0x5e0200a1,0x5800f002,0x6740a000,0x0081f71f,0xf002de02,
+0x81020000,0x0c0007c1,0x60bc0157,0xa1770103,0x06e08101,0x00ab77f5,
+0x1f035ea0,0x0200a2f7,0x00f0025e,0x60bc015d,0xa1b70103,0x075eb000,
+0x00a21700,0xf0025e02,0x81015d00,0x77f502e0,0xde0200ab,0x0000f002,
+0xa7006800,0x0396ce00,0xf002debf,0x02006e0c,0x0cf0025e,0x5e02005d,
+0x6f0cf002,0x02de0200,0x000000f0,0x00a70068,0x020069ce,0x00f002de,
+0x60810100,0x49300906,0xa7006800,0x00628c00,0xf0025e02,0x02007f0c,
+0x00f002de,0x5e020000,0x7f0cf002,0x02608101,0x00493009,0xf002de02,
+0x88010000,0x30090ee0,0x41b00049,0x00180027,0x2b00b000,0x00021000,
+0xf002de02,0xbc010000,0x10000360,0xe0820102,0x78100f02,0x0360bc01,
+0x00491000,0x002741b0,0x02000018,0x00f002de,0x00680000,0x70cc00a7,
+0x53de8002,0x01760c00,0x071360bc,0x0200a177,0x00f0025e,0x60900158,
+0xa2370302,0x025e0200,0x005d00f0,0xf002de02,0xbc010000,0x97071360,
+0x5e0200a1,0x5800f002,0x1e609001,0x00a23703,0xf0025e02,0xbc015d00,
+0x77071360,0x5e0200a1,0x5800f002,0x1e609001,0x00a23703,0xf0025e02,
+0x02005d00,0x00f002de,0xde000100,0xa6170053,0xa7806800,0x0184cc00,
+0x099ade81,0xb0004930,0x18002741,0xde020000,0x0000f002,0x0360bc01,
+0x03a13700,0xf002debf,0x0200860c,0x00f0025e,0x60870158,0xa2370306,
+0x9bde6800,0x018a0c00,0x03026087,0x0200a237,0x00f0025e,0xde02005d,
+0x0000f002,0x1f410202,0x029f0c00,0x00535e82,0x8201910c,0x97f20660,
+0x44b00094,0x00180067,0x6b44b000,0x00970600,0x006744b0,0xe8000018,
+0xf7d26844,0x006800a4,0x948c00a7,0x93de6d00,0x00994c00,0x036744e0,
+0x9003a317,0x0cf0025e,0xc585029c,0x9c0c0023,0x8ede6800,0x01962c23,
+0x020360bc,0xbc014710,0x90000360,0x60820143,0x9497f202,0x02608201,
+0x00adb7f5,0x00a70068,0x68009f8c,0xac00a700,0xde02009f,0x0000f002,
+0x1fc10102,0x02b20c00,0x00af5e85,0x8501a50c,0x77f50660,0x44b000ab,
+0x9a060067,0x6b44b000,0x009b0600,0xd36444e9,0xe800a157,0x77d368c4,
+0x5ed000a2,0xa1770087,0x8adee101,0x00a237f4,0x26865ee9,0xe800a197,
+0xb7268ade,0x5e6900a2,0xb20c008b,0x0361bc01,0x00331100,0xf4da44e1,
+0xe1003631,0x51f4de44,0x60850137,0xab77f502,0x0360bc01,0x01471001,
+0x000360bc,0x02004350,0x00f002de,0x45b00000,0x8117001f,0xb705b000,
+0x01a61700,0x040760bc,0xbc016410,0x10191360,0x60bc0165,0xa1170003,
+0xafde0502,0x00cb0c00,0x000f58b0,0x68008017,0x2c2c845e,0x5e0002d8,
+0xcb0c009b,0x03da8002,0x01c10c00,0x001f5818,0xe0008217,0x37000b5e,
+0x5e980182,0x07f6c00a,0x02debf03,0x01c40cf0,0x001fd819,0xe0008217,
+0x3700035e,0xde990182,0x07f6c00a,0x03def001,0x00803700,0xc0025ea0,
+0xb0008057,0x1600035e,0x44a00003,0x8217f0b6,0x0b5eb000,0x00051600,
+0xc00a5ee0,0xbf030696,0x0cf002de,0x58b000d8,0x82170013,0x065ee800,
+0x02a557f0,0x00afde00,0xe800d20c,0x97d4085e,0x5eb000a3,0xa5170007,
+0x8fde6a00,0x00d20c00,0xf4965ee8,0x6a00a577,0x0c0097de,0x58e800d6,
+0x05b6f416,0x17d86900,0x01d60c00,0x000360bc,0xb0000516,0x17001758,
+0x58e000a5,0x06b6f412,0x9341e000,0x00641002,0x069741e0,0xe0006550,
+0x3700875e,0x5e9000a1,0xa637009b,0x87de6800,0x01b88c00,0xf502e080,
+0xbc01ab77,0x11000360,0xde020047,0x0000f002,0x0360bc01,0x016c0100,
+0x000360bc,0xbc016d01,0x100a0760,0x60bc0164,0xa4d70b17,0x0360bc01,
+0x00a17700,0x008f42b0,0xa0008017,0xf701035e,0x5eb00080,0x6e010003,
+0xff63bc01,0x00a2f71f,0x0003de68,0xbc01eb0c,0x17000360,0x608800a2,
+0x8137f406,0xba052000,0x00f02cf0,0xc08ade68,0xe000f0cc,0x2100b305,
+0x05b0006c,0x6d21f0b6,0x035e6800,0x00f40c00,0xf0065e20,0x6e00fb0c,
+0xccc08ade,0xdebf03fb,0xf50cf002,0x8ade6d00,0x00fbccc0,0x00875eb0,
+0xb000a317,0x01009341,0x5eb00066,0x67010093,0x1b58b000,0x01a21700,
+0x000360bc,0xbc016c01,0x01000360,0x41e8006d,0x64100293,0x935ee800,
+0x00a45706,0x00875ee8,0x6900a137,0x0c0087de,0x5eb000eb,0x6501008f,
+0x8b5eb000,0x00640100,0xf002de02,0xb0000000,0x10009b05,0x58b00064,
+0x4511001b,0x9305b000,0x00600100,0x009b05b0,0xb0006201,0x01009f05,
+0x05b00063,0x61010097,0x0f58b000,0x00851700,0x000758b0,0xb0008317,
+0x17000b58,0x58980184,0x8c97f11e,0x1ed89901,0x008db7f1,0xf002de02,
+0x87010000,0x77f50260,0x05b000ab,0x80170097,0x005e6800,0x01322d2c,
+0x000360bc,0xbc011211,0x11000360,0x05b00015,0x6410009b,0x23450002,
+0x001c0d00,0x001f45b0,0xe8008117,0x37f09205,0xde6a0080,0x1a0d0003,
+0x035eb000,0x03451100,0xf002debf,0xbc011d0d,0x31000360,0xdebf0345,
+0x1d0df002,0x9305b000,0x00451100,0x008305b0,0xb0006901,0x01008b05,
+0x05b0006a,0x6b01008f,0x8705b000,0x00680100,0x00ab05b0,0x84026510,
+0x0d001f5a,0x5eb00026,0x83160017,0x325e9801,0x0187f6d0,0xd036de99,
+0x840187f6,0xf6d00260,0x05b00087,0x60010093,0x9b05b000,0x00620100,
+0x009f05b0,0xb0006301,0x01009705,0x05b00061,0x6410008b,0x0f58b000,
+0x00851700,0x000758b0,0xb0008317,0x17000b58,0x58980184,0x8c97f11e,
+0x1ed89901,0x038db7f1,0xf002debf,0x8701330d,0x77f50660,0xde0200ab,
+0x0000f002,0x8b05b000,0x00641000,0x2a93416e,0xa000400d,0xb7f0b644,
+0x5eb000a1,0x05160087,0x1258e000,0x020636f4,0x00f30000,0x6d003d0d,
+0x0d289341,0xde00023d,0x3d0d00af,0x0b60bc01,0x00425102,0x00875eb0,
+0x01026f01,0x0d00af5e,0x5eb00040,0x03160017,0x02608101,0x00ab77f5,
+0xf002de02,0x0c010000,0x17004381,0x60bc01a1,0x8a100003,0x875e6800,
+0x014e4d00,0x000360bc,0x68008a50,0x0d00075e,0x5e680056,0x4e0d0087,
+0x0360bc01,0x008ab000,0x00075e68,0x82024e2d,0x0d0003de,0x60bc014e,
+0x8a900003,0x03de8302,0x004e0d00,0xf40a60e0,0x68008ad0,0x0d00075e,
+0x42900156,0x8a30a12a,0x075e6800,0x01562d00,0xa02a4290,0x09018a10,
+0x170003de,0x5e8f01a2,0x8a50118a,0x8b5e6800,0x01560d00,0x110ee091,
+0x02008a50,0x00f002de,0xde090100,0xa4170003,0x065ae000,0x00a597f4,
+0xf4965e90,0x0302a597,0x0d0003de,0xde82025d,0x5d0d0003,0x94de8000,
+0x00a5f70a,0x00875e88,0xe000a177,0xd702875e,0xde8000a1,0xa137f496,
+0xb741e100,0x00a5f7ff,0x0187dee0,0x9000a1f7,0x9700875e,0x5e8800a1,
+0xa1570087,0x43010501,0x00a21700,0xf4865e88,0x0200a157,0x00f002de,
+0x19000200,0x0a0000df,0x53de8202,0x016d0d00,0x04026088,0xe0002490,
+0x06f3821a,0x1ae800a0,0x9f06f37e,0x02debf03,0x01e107f0,0x041660b8,
+0xbc012490,0xd0010360,0x5e050325,0x7f0df002,0x37c08702,0x03140900,
+0xf002de86,0xbc011509,0xe0000360,0x5e02003e,0xa50ef002,0x02de5c03,
+0x006f0df0,0x019b40d8,0xe000a117,0x3702875e,0x5ea80098,0x98770063,
+0x53de0201,0x01a11700,0xf202e082,0x88019497,0xe6ce84de,0x9a6e0077,
+0x7f0df37e,0x635ee800,0x0125d001,0x040660b8,0xbf032490,0x00f002de,
+0x60810102,0x77e6ce04,0x0a60b801,0x03249004,0xf002debf,0x28020200,
+0x0d00875e,0x41b00095,0xa4170093,0x9341e000,0x01647000,0x00875e0a,
+0xe800a217,0x50f49241,0x5e180163,0xa1170087,0x4260e800,0x00a237f4,
+0xf4025688,0x68000036,0x8df48e41,0x41e80091,0x6330008f,0x9341e800,
+0x00643000,0x028b5e68,0x9000890d,0x57f40256,0x58b000a3,0x0176f406,
+0x02debf03,0x00890df0,0xf4924168,0xe800958d,0x30009341,0x60bc0164,
+0x00160003,0x02debf03,0x00910df0,0x00875eb0,0x0200a117,0x00f002de,
+0x5e280200,0xab0d0087,0x875e0a01,0x00a21700,0xf49241e0,0x18016350,
+0x1700875e,0x60e800a1,0xa237f442,0x0360bc01,0x00a31700,0x009341e8,
+0xe0006430,0x97009341,0x58b000a4,0x0076f402,0x9341e000,0x00643000,
+0xf4025690,0x68000036,0x8df48e41,0x41e000a7,0x6330008f,0x8b5e6800,
+0x009f0d02,0xf4025688,0xbf03a357,0x0df002de,0x4168009f,0xab8df492,
+0x0360bc01,0x00011600,0x009341e0,0xbf036430,0x0df002de,0x5eb000a7,
+0xa1170087,0x02de0200,0x000000f0,0x00bb50b0,0xb0006510,0x17000b5a,
+0x01e000a1,0x7d2000f7,0xd201e000,0x007420f4,0x00bf50b0,0xb0006410,
+0x17001358,0x60bc0182,0x04160003,0x1b60bc01,0x0265d005,0x00b7d002,
+0xbc01b70d,0xf0051b60,0x50e00065,0x649000bb,0x0360bc01,0x01b41700,
+0x000360bc,0xbc018017,0x37000360,0x60bc0181,0xa5170003,0x0360bc01,
+0x00a61700,0x00335290,0xe000a497,0xb7018741,0x608701b5,0xa0100304,
+0x8342b000,0x00001800,0xf0d25e68,0xb000f64d,0x1000035e,0x00b000b5,
+0xb4700863,0xd3428302,0x01c40d00,0x090360bc,0xb000b510,0xf0006300,
+0x60bc01b4,0xb6101147,0x0360bc01,0x00b5d000,0x006300b0,0xb000b4b0,
+0x1800d342,0xde170300,0xcb0df002,0x02de9703,0x00cc0df0,0xf002d820,
+0x9000e32d,0x5700975e,0x50e000a1,0x6330f4ba,0x975e8901,0x00a21700,
+0xf41a5690,0x8800a357,0x57f43e60,0x5ea000a1,0xa3f7018f,0x8f5ee000,
+0x00a33700,0xf41a56a8,0xe0008635,0x3700975e,0x500202a5,0xe70d00b7,
+0x17239000,0x00a19700,0xf4865ee8,0x6900a197,0x0d00875e,0xde6900e7,
+0xe70d0487,0x875e0a01,0x00a21700,0xf4d65ee0,0xda016350,0x37f40260,
+0x608800a1,0xa137f406,0x02562000,0x00e72df4,0xf00258b0,0xe0000036,
+0x3600035a,0xde680080,0xf00d009b,0x1b23b000,0x012b1400,0x030ce08e,
+0xbf03a010,0x0df002de,0xde6d00f1,0xe4cdf08e,0x9b5e9000,0x01a25700,
+0x009b5e89,0xe000a117,0x50f4ba50,0x60880063,0xa237f43e,0x8e5e8800,
+0x00a337f4,0xf41a56a8,0xb0008655,0x75f41a56,0x5ee00086,0xa637009b,
+0x035ee000,0x00803700,0x00d35ee0,0xd000b437,0x3700075e,0x5e980281,
+0xc10d00d3,0x9341e000,0x03643000,0xf002debf,0x8001c10d,0x94850260,
+0x5ee8002c,0x8017f0d2,0x035e6800,0x030a0000,0xf002debf,0xd0008004,
+0x97c00660,0x41e00080,0xb5970097,0x13580a01,0x00a11700,0xf4d65ee0,
+0xb000b537,0x10000f58,0x56160163,0x81170003,0x13d86800,0x010d0e00,
+0x00630014,0xbc01a117,0x90090360,0x5e900062,0xa2370087,0x8a41e000,
+0x006250f4,0x01035488,0x00028016,0x0e00875e,0x54a00008,0x8016e003,
+0x035ae800,0x01801630,0x000360bc,0xbc018116,0x16000360,0x60bc0182,
+0x83160003,0x02debf03,0x00120ef0,0xc08e41e0,0x6e006390,0x2ec08ec1,
+0x41e80012,0x6330c08e,0x0358e800,0x00a13700,0xf48e41e0,0xbc016330,
+0x17000360,0x586800a5,0x2fee0313,0x8e416800,0x002f4ec0,0x040bda6d,
+0x16012f0e,0x17000356,0xde6800a1,0x2f2ef086,0x03565801,0x00a11700,
+0x0c875ee0,0xb000a257,0x1000d75e,0xde200062,0x260ea002,0x865ee000,
+0x00a337d0,0xd08e5ee0,0x6d00a377,0x4ef4025a,0x63bc012f,0xa4f71fff,
+0x8e5e6e00,0x002f8ef4,0xf40260e8,0xb0008336,0x16008f5e,0x5aa00081,
+0x8376000f,0x0360bc01,0x00a53700,0x000b5ae0,0xe8008236,0x56f4025a,
+0x5ed00080,0x80370003,0x1358e000,0x00043600,0x008f41e0,0x98026330,
+0x0e001358,0x5ee0002c,0xb53700d7,0x8ec16e00,0x00122ec0,0x000358b0,
+0xbf036310,0x0ef002de,0x5e680012,0x300e0097,0x02de0200,0x000000f0,
+0x000758b0,0xe000a117,0x16f00e58,0xd86e0003,0x372ef40e,0x865ee800,
+0x00a117c0,0xf40e58e8,0xe8000336,0x36000f58,0x5e180103,0xa1170003,
+0x03de6d00,0x003f0e02,0xf44260e8,0x9000a237,0x36f4125a,0x5a880084,
+0xa257f416,0x165a9000,0x008536f4,0xf4125ab0,0xbf038456,0x0ef002de,
+0x5a900041,0x8436f416,0x0360bc01,0x00851600,0xf002de02,0x58010000,
+0x10000360,0x60bc012a,0x04900203,0x0a60b801,0x01249004,0x0d02e089,
+0x02006c90,0x00f002de,0x47e80000,0xa1170187,0x875ed800,0x01eb1101,
+0x111f63bc,0xa000a1f7,0x31f40e5a,0x5ab000eb,0xeb110017,0x1b5ab000,
+0x00eb1100,0x001f5ab0,0xb000eb11,0x1100235a,0x5ab000eb,0xeb110027,
+0x2b5ab000,0x00eb1100,0x002f5ab0,0xb000eb11,0x1100335a,0x5ab000eb,
+0xeb110037,0x3b5aa000,0x00ebf101,0x009741b0,0x06026410,0x0e00535e,
+0x58b0005b,0xeb11003f,0x4358b000,0x00eb1100,0x004758b0,0xe000eb11,
+0x70009341,0xde060264,0x5e0e0053,0x3f58a000,0x00ebf101,0x009341e0,
+0x07026430,0x0e000fda,0x58b00061,0xeb11003f,0x4358b000,0x02eb1100,
+0x00ab4710,0xbc01640e,0x11000360,0xdebf03eb,0x610ef002,0xabc71101,
+0x01a11700,0x060360bc,0xe800ea11,0x5100875e,0xe08601eb,0xe8113d06,
+0x02de0200,0x020000f0,0x0053de00,0xbc01880e,0xb7091360,0x5e0200a1,
+0x5800f002,0x0260a501,0x00a23703,0xf0025e02,0xbc015d00,0x97091360,
+0x5e0200a1,0x5800f002,0x7e60a401,0x00a23703,0xf0025e02,0xbc015d00,
+0xf7161360,0x5e0200a1,0x5800f002,0x0260b401,0x00a23703,0xf0025e02,
+0xbc015d00,0x37161360,0x5e0200a1,0x5800f002,0x02e08601,0x00a23703,
+0xf0025e02,0xbc015d00,0x17161360,0x5e0200a1,0x5800f002,0x06e08101,
+0x01a23703,0x0306e085,0x0200a237,0x00f0025e,0x60bc015d,0xa1571f13,
+0x025e0200,0x015800f0,0x0302e081,0x0200a237,0x00f0025e,0x60bc015d,
+0xa1371f13,0x025e0200,0x015800f0,0x0306e081,0x0200a237,0x00f0025e,
+0xde02005d,0x0000f002,0x1360bc01,0x00a19709,0xf0025e02,0xa4015800,
+0x37030260,0x5e0200a2,0x5d00f002,0x1360bc01,0x00a11716,0xf0025e02,
+0x81015800,0x370302e0,0xe08501a2,0xa2370302,0x025e0200,0x015d00f0,
+0x1f1360bc,0x0200a137,0x00f0025e,0xe0810158,0xa2370302,0x025e0200,
+0x005d00f0,0xf002de02,0x00020000,0x0e0053de,0x60bc01a0,0xa1b70913,
+0x025e0200,0x015800f0,0x03026087,0x0200a237,0x00f0025e,0x60bc015d,
+0xa1970913,0x025e0200,0x015800f0,0x03066086,0x0200a237,0x00f0025e,
+0xde02005d,0x0000f002,0x1360bc01,0x00a19709,0xf0025e02,0x86015800,
+0x37030260,0x5e0200a2,0x5d00f002,0x02de0200,0x020000f0,0x00234584,
+0xbc01030f,0x17161760,0x5e0200a1,0x5800f002,0x67401e01,0x00a21700,
+0x008b5e68,0x6800b9ae,0x6e018bde,0x409c02d1,0xb60e0067,0x8726e000,
+0x00a12900,0x006744b0,0xe0000018,0x69006744,0x5e830391,0xb30ef002,
+0x46a66800,0x01af2e23,0x000360bc,0x83023b20,0x0e004fa6,0xe08201ed,
+0x93693205,0x0360bc01,0x033b4000,0xf002debf,0x1c01ed0e,0x17006740,
+0x5e6800a2,0xc5ce008b,0x02debf03,0x01d10ef0,0x32016081,0x80029369,
+0x0e004fa6,0xe08001bf,0x93693205,0x6744b000,0x00001800,0x006744b0,
+0xbf039109,0x0ef002de,0x266800d2,0xd20e0023,0x6544e800,0x01a13732,
+0x000360bc,0x6e003ba0,0x0e31855e,0x60bc01ed,0x3b000003,0x02debf03,
+0x01d20ef0,0x3201e080,0x81029369,0x0e004f26,0x608101cb,0x93693205,
+0x6744b000,0x00001800,0x006744b0,0xbf039209,0x0ef002de,0x266800d2,
+0xd10e0027,0x6544e800,0x01a15732,0x000360bc,0x6e003bc0,0x2e31855e,
+0x60bc01ed,0x3b000003,0x02debf03,0x01d20ef0,0x3201e088,0x81029369,
+0x0e004fa6,0x400602ec,0xd90e0037,0x37c00502,0x01d90e00,0x32056080,
+0xb0009369,0x18006744,0x44b00000,0x90090067,0x02debf03,0x02ec0ef0,
+0x004f2600,0xe800ec0e,0x17326544,0x266800a1,0xec0e001f,0x855e6e00,
+0x03deee30,0xf002debf,0x8001ec0e,0x69320160,0x42830293,0xea0e001f,
+0x23c58502,0x01e60e00,0x020360bc,0x83023b20,0x0e004fa6,0xe08201ed,
+0x93693205,0x0360bc01,0x033b4002,0xf002debf,0x8201ed0e,0x69320560,
+0x60bc0193,0xa1b70817,0x2761bc01,0x00a2970c,0xf0025e02,0xe0005d00,
+0x29003326,0x6080018c,0x93693201,0x02debf03,0x02040ff0,0x004f2602,
+0xbc01f10e,0xb7081760,0x61bc01a1,0xa2170027,0x025e0200,0x015d00f0,
+0x0906e081,0xb0004930,0x1700875e,0x5eb000a1,0xa1170087,0x875eb000,
+0x01a11700,0x0902e081,0xe0004930,0x29002b26,0x44b0008a,0x8e090067,
+0x4fa68202,0x00030f00,0x008b26e0,0xb000a229,0x09002b26,0x44b0008b,
+0x8d090067,0xef00b000,0x00510000,0x00fb00b0,0xc0013f00,0x69320160,
+0x5e020093,0x3b09f002,0x025e0100,0x010000f0,0x0906e084,0xbf034810,
+0x08f002de,0x60c0015e,0x93693201,0x02de0200,0x000000f0,0x00000000,
+0x00000000,0x0000692a,0x8de991b9,0x00000000
+};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/plt_firmware.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,6351 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+/* Binary image file name: init_plt.dat */
+
+const unsigned int plt_firmware[] = {
+0x19171513,0x00000001,0x00000140,0x034d564e,0x00000000,0xa1003030,
+0x5544332f,0x02d09600,0x00030492,0x432f14e4,0x002104b9,0x00000000,
+0x00000000,0x17cc0000,0xfebbfa3a,0xfa3a17cc,0x1737febb,0xfea3fa48,
+0x0a030d0a,0x0b0a030d,0xf65e3e03,0x0002005a,0x000000ff,0x00000800,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x098a1d1e,
+0x14501360,0x164415a4,0x04000400,0x04000400,0x50500400,0x08505050,
+0x00030707,0xfefefefe,0x00000000,0x00000000,0xfafafa00,0xfafafafa,
+0xf2f2fafa,0xf2f2f2f2,0x07f2f2f2,0xfe000307,0x00fefefe,0xfe000000,
+0xfafefefe,0xfafafafa,0xf2fafafa,0xf2f2f2f2,0x00f2f2f2,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x20202428,0x24002020,0x20202020,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000002,
+0x00025018,0x00000000,0x000001e5,0x00000095,0x00000095,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000095,
+0x00000095,0x00000095,0x00000095,0x00000095,0x00000095,0x00000095,
+0x00000095,0x00000095,0x00000095,0x00000095,0x00000095,0x00000095,
+0x00000095,0x00000095,0x00000095,0x47004803,0x00000000,0x53485244,
+0x00000000,0x000001e5,0xb5004668,0xf3ef6982,0x21038305,0xd10d428b,
+0x68194b17,0x4b176019,0xd0074219,0x68194b16,0x4b166019,0xd0014219,
+0x61823202,0x30206941,0x3820b407,0xb4024661,0xb4f0b084,0xb40ec80e,
+0xb402c802,0x69c13810,0xf3efb402,0xb4028103,0xb4026981,0x8105f3ef,
+0x4809b402,0x29006801,0x4668d0fe,0xf802f000,0xbd00b014,0x00004708,
+0xe000ed2c,0x40000000,0xe000ed28,0x00008080,0x000001b8,0x4208490a,
+0xb662d002,0x400843c9,0x42084908,0xb661d002,0x400843c9,0x40084906,
+0xd0032800,0x680a4905,0x600a4302,0x00004770,0x80000000,0x40000000,
+0x0000ffff,0xe000e100,0x4208490a,0xb672d002,0x400843c9,0x42084908,
+0xb671d002,0x400843c9,0x40084906,0xd0042800,0x680a4905,0x400243c0,
+0x4770600a,0x80000000,0x40000000,0x0000ffff,0xe000e180,0x68094902,
+0x58882290,0x00004770,0x000001c0,0x68094902,0x5088229c,0x00004770,
+0x000001c0,0xbbadbadd,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x68114a02,0x1c086010,0x00004770,0x000001b8,0x60084901,
+0x0000e7fe,0x000001b0,0x68014873,0x400f4f73,0xd132423f,0x46982300,
+0x4a71469a,0x2118400a,0x497040ca,0x4c705843,0x4d70401c,0xd10442ac,
+0x4d6f4680,0x46a91945,0x4d6ee00e,0xd10b42ac,0x4d6b4682,0x46ab1945,
+0x1c1d240f,0x4c6a4023,0x0a2d4025,0x469c432b,0x45982300,0x459ad001,
+0x4b66d104,0x3a0118c0,0xe005d1dc,0x42004650,0x4640d002,0xd1294200,
+0x21fce7fe,0x680a5841,0x4013230f,0xd0f12b0f,0xd0012b01,0xe7f63104,
+0x4b5b3108,0x4c5b4013,0xd10642a3,0xf8dcf000,0xf0004680,0x4681f8e5,
+0x4c57e7e9,0xd1e642a3,0x681b1f0b,0x40234c55,0x40e32418,0xf000469c,
+0x4682f8cb,0xf8d4f000,0xe7d84683,0x22214950,0x4a415042,0x5889494f,
+0x421923ff,0x6851d022,0x42194b4d,0x6811d01e,0x40194b4c,0x24036ad3,
+0x4c4b4023,0x240342a1,0xe013d000,0xd01142a3,0x4c474b48,0xd00042a1,
+0x4947e00c,0x42195889,0x4946d008,0x40195889,0xd1fa4299,0x69114b37,
+0xd0fc4219,0x423f4649,0x2398d104,0x241058cb,0xe00140e3,0x58cb4b3e,
+0x4023241c,0xd0012b00,0xf8a4f000,0x493b4640,0x46486008,0x6008493a,
+0x600f493a,0x46514660,0x588a2200,0x21f01c13,0x091b400b,0xd3072803,
+0x49351c16,0x2114400e,0x2e0040ce,0x3b01d000,0x400a210f,0x2401320e,
+0x1c254094,0x2803435d,0x2e00d306,0x3e01d004,0x2401360e,0x192d40b4,
+0xd0fe2d00,0x600d4929,0x46ad3d04,0x43ec9d00,0x41dd2310,0xd10942ac,
+0x00a40c24,0x602c4d24,0x1b1b466b,0x602b4d23,0x469d3b04,0x49234822,
+0xc0042200,0xd8fc4281,0xfc7ef016,0x0000e7fe,0x18000000,0xf0000000,
+0x0f000000,0x00000ffc,0x00008ff0,0x000082a0,0x00000f00,0x000080e0,
+0x00007000,0x00001000,0x000fff00,0x00082a00,0x00080e00,0xff000000,
+0x000001e0,0x00000604,0x00380000,0x0000ffff,0x00004329,0x00000400,
+0x00000618,0x0000060c,0x00000408,0x000001c0,0x000001c4,0x000001bc,
+0x00f00000,0x0001bc38,0x0001bc40,0x0001bc3c,0x0001c530,0x0001c710,
+0x220f6808,0x40023104,0xd1f92a05,0x40104a01,0x000046f7,0xfffff000,
+0x220f6808,0x40023104,0xd1f92a05,0x42102280,0x4a01d0f6,0x46f74010,
+0xfffff000,0x0000e7fe,0x47706cc0,0x6642b510,0xf8d06683,0xf8d02080,
+0x9c02308c,0x0382eb03,0x3080f8d3,0x660165c4,0xbd106583,0x66032300,
+0x46c04770,0xb9336803,0x308cf8d0,0x31c0f8d3,0x0fe8f8d3,0x2b01e009,
+0x2000d001,0xf8d0e005,0xf8d3308c,0xf8d332c0,0x47700100,0x308cf8d0,
+0x2080f8d0,0x0382eb03,0x0080f8d3,0x46c04770,0x0080f8d0,0x46c04770,
+0x4604b570,0x5080f8d0,0xffecf7ff,0x20004601,0xe0094602,0x308cf8d4,
+0x0382eb03,0x3080f8d3,0xbf08428b,0x32013001,0xd1f342aa,0x46c0bd70,
+0xf3c06980,0x477060c0,0x4694b510,0xf8d04604,0x20002084,0xe00c4686,
+0x308cf8d4,0x0380eb03,0x3080f8d3,0xd103428b,0xd00545e6,0x0e01f10e,
+0x42903001,0x2011d1f0,0x46c0bd10,0x46c04770,0x30fff04f,0x46c04770,
+0x47702000,0xf0006bc0,0x28030003,0x2000bf14,0x47702001,0x4a036bc3,
+0x0303f003,0x0023f852,0x46c04770,0x00016eb0,0x460db570,0xf7ff4604,
+0x462aff73,0x46204601,0xfc3cf001,0x46c0bd70,0x4604b510,0xff68f7ff,
+0x46204601,0xfc22f001,0x46c0bd10,0x4604b510,0xff5ef7ff,0x46204601,
+0xfc44f001,0x46c0bd10,0x4604b510,0x2200b330,0x108cf8d4,0x3022f851,
+0x2300b113,0x3022f841,0x2a103201,0xf8d4d1f4,0xf893308c,0x1e4a12c4,
+0xf8832901,0xd10922c4,0x7232f44f,0xf8d46ce0,0xf003108c,0x4b06fd6d,
+0x601a2200,0x429c4b05,0x6ce0d004,0x22904621,0xfd62f003,0x46c0bd10,
+0x0001c538,0x0001c540,0x2000b510,0xff96f000,0x46c0bd10,0x490bb510,
+0xf7ff4604,0xb280fff5,0x6f60b978,0xf0004907,0xb280ff89,0x6f60b948,
+0xf0004905,0xf64fff83,0xb28073ff,0xbf082800,0xbd104618,0x00016ec0,
+0x00016ec6,0xe92d6e01,0x460441f0,0xf8d0b171,0xf8d02080,0xeb03308c,
+0xf8d30382,0x6d832080,0xd103429a,0x47886dc0,0xe0004606,0x46202600,
+0xf0016ce1,0x6e65fc6d,0xb16d4607,0x2080f8d4,0x308cf8d4,0x0382eb03,
+0x2080f8d3,0x429a6da3,0x6de0d102,0x47a84631,0xe8bd4638,0x46c081f0,
+0x4604b510,0xfed4f7ff,0x46204601,0xfccef001,0x46c0bd10,0x4604b510,
+0xfecaf7ff,0x46204601,0xfc1ef001,0x46c0bd10,0xe92d6e01,0x460441f0,
+0xf8d0b171,0xf8d02080,0xeb03308c,0xf8d30382,0x6d832080,0xd103429a,
+0x47886dc0,0xe0004606,0x46202600,0xf0016ce1,0x6e65fbd9,0xb16d4607,
+0x2080f8d4,0x308cf8d4,0x0382eb03,0x2080f8d3,0x429a6da3,0x6de0d102,
+0x47a84631,0xe8bd4638,0x46c081f0,0xb5106803,0xf000b90b,0xbd10fa49,
+0xb5106803,0xf000b913,0xe003fb35,0xd1012b01,0xfc88f000,0x46c0bd10,
+0xb5106803,0xf000b913,0xe003fa89,0xd1012b01,0xfc66f000,0x46c0bd10,
+0x6804b537,0xb91c9d06,0xf0009500,0xe006fa3f,0xd0012c01,0xe0022000,
+0xf0009500,0xbd3efc8b,0x4604b573,0xf7ff460e,0x4632fe63,0x46204601,
+0xfd68f001,0x2b146963,0x256ddd17,0x200ae003,0xfff8f003,0x21003d0a,
+0x460b2210,0x91004620,0xffd6f7ff,0xbf142e00,0x5380f44f,0xf4002300,
+0x42985080,0x2d09d001,0xf44fd1e9,0xf003707a,0xbd7cffe1,0xb5132b02,
+0x4611460c,0xb902d00c,0x4a09b154,0x6813b113,0xe004401c,0xea446812,
+0xea230302,0x40210402,0x22649100,0x46232100,0xffaef7ff,0x46c0bd1c,
+0x0001c534,0xb5132b02,0x4611460c,0xb902d00c,0x4a09b154,0x6813b113,
+0xe004401c,0xea446812,0xea230302,0x40210402,0x22689100,0x46232100,
+0xff92f7ff,0x46c0bd1c,0x0001c534,0xb5132b02,0x4611460c,0xb902d00c,
+0x4a09b154,0x6813b113,0xe004401c,0xea446812,0xea230302,0x40210402,
+0x226c9100,0x46232100,0xff76f7ff,0x46c0bd1c,0x0001c534,0xb5106803,
+0xf000b913,0xe005f96d,0xd0012b01,0xe0012000,0xfb98f000,0x46c0bd10,
+0xb5106803,0xf000b913,0xe005f93d,0xd0012b01,0xe0012000,0xfbacf000,
+0x46c0bd10,0xb5106803,0xf000b913,0xe005f90d,0xd0012b01,0xe0012000,
+0xfb8ef000,0x46c0bd10,0xb5106803,0xf000b913,0xe005f963,0xd0012b01,
+0xe0012000,0xfb2ef000,0x46c0bd10,0x4604b510,0xfe02f7ff,0x4601280f,
+0x6823d80b,0x4620b91b,0xf94ef000,0x2b01e006,0x4620d103,0xfb1af000,
+0x2000e000,0x46c0bd10,0x41f0e92d,0x4616460c,0x6100f44f,0x46052200,
+0x8080f8d0,0xffdef7ff,0xf8c02300,0x33053658,0x465cf8c0,0xf8c04641,
+0xf8c03658,0x4628665c,0xffc2f7ff,0x81f0e8bd,0x41f0e92d,0x4616460c,
+0x6100f44f,0x46052200,0x8080f8d0,0xffc2f7ff,0xf8c02300,0xf8d03658,
+0x4641365c,0xf0436023,0xf8c00301,0x2305365c,0x3658f8c0,0x365cf8d0,
+0xf0436033,0xf8c04300,0x4628365c,0xff9cf7ff,0x81f0e8bd,0x41f0e92d,
+0x4616460d,0x6100f44f,0x46042200,0x8080f8d0,0xff9cf7ff,0xf8c02300,
+0xf8d03650,0x46413654,0x0305ea23,0xf8c04333,0x46203654,0xff80f7ff,
+0x81f0e8bd,0xf2446b02,0x429a3319,0x4605b573,0xd11b460e,0xb9cc6b44,
+0x2302b1d9,0x46219300,0x33fff04f,0x72f0f44f,0xfeb2f7ff,0xf6404622,
+0x4628011a,0xff72f7ff,0x21014628,0xfe9cf7ff,0xf44f4628,0x46226100,
+0xff68f7ff,0xbf082e01,0x46282602,0xf2402100,0xf04f6234,0x960033ff,
+0xfe96f7ff,0x46c0bd7c,0xb5104b03,0xfb03681b,0xf7fff101,0xbd10ffc7,
+0x0001c53c,0xb5106803,0xf000b913,0xe005f833,0xd0012b01,0xe0012000,
+0xfaa6f000,0x46c0bd10,0xb5106803,0xf000b913,0xe005f81b,0xd0012b01,
+0xe0012000,0xfa90f000,0x46c0bd10,0x47706808,0x4770600a,0xb5106fc1,
+0x6170f501,0xf7ff31fc,0xf648fff5,0xea0073f0,0x09180303,0x46c0bd10,
+0xb5106fc1,0x6170f501,0xf7ff3118,0xf000ffe7,0xbd10003f,0xb5106fc1,
+0x6170f501,0xf7ff31fc,0xf400ffdd,0xf00043e0,0xea40000f,0xbd102013,
+0xe92d6fc3,0x460541f0,0xf5034617,0x460e6870,0xb172b901,0x0498f108,
+0xf7ff4621,0xea6fffc7,0xea004306,0x46210203,0xea424628,0xf7ff4207,
+0x4628ffbf,0x0198f108,0xffb8f7ff,0xe8bd0c00,0x46c081f0,0xe92d6fc3,
+0x460541f0,0xf5034617,0x460e6870,0xb172b901,0x049cf108,0xf7ff4621,
+0xea6fffa5,0xea004306,0x46210203,0xea424628,0xf7ff4207,0x4628ff9d,
+0x019cf108,0xff96f7ff,0xe8bd0c00,0x46c081f0,0xb5106fc1,0x6170f501,
+0xf7ff3198,0x4b04ff8b,0x0303ea00,0x3f80f5b3,0x2000bf14,0xbd102001,
+0x00010007,0x208cf8d0,0x0381eb02,0x01c0f8d3,0x3021f852,0xf842b90b,
+0xf8520021,0x47700021,0x3084f8d0,0x4299b570,0x460d4604,0x2000d301,
+0xf7ffe004,0xf8c4ffe7,0x67e05080,0x46c0bd70,0x46c04770,0x0303f010,
+0xf020d102,0xe00c00ff,0xd1042b01,0x607ef420,0x001ff020,0x2b02e005,
+0x2000d001,0x0c00e001,0x47700400,0x41f0e92d,0xf8d04696,0x461c208c,
+0x3021f852,0x9f064606,0xeb02b92b,0xf8d30381,0xf84231c0,0xf8d63021,
+0xf853308c,0xeb0e1021,0xb9040501,0xf5beb1b7,0xea6f6f70,0xd30a0404,
+0xf7ff4629,0xea00ff2b,0x46290204,0x433a4630,0xff26f7ff,0xf85ee009,
+0x40233001,0xf84e433b,0xe0073001,0x6f70f5be,0x4630d304,0xf7ff4629,
+0xe000ff15,0xe8bd6828,0x46c081f0,0xe92d6fc3,0xf50341f3,0xf1076770,
+0x46880498,0x46054621,0xff04f7ff,0x0f01f010,0x808cf040,0x46214628,
+0xfefcf7ff,0x3f80f410,0x4621d078,0xf7ff4628,0x4621fef5,0x0202f040,
+0xf7ff4628,0x4621fef1,0xf7ff4628,0x9001feeb,0xf0032001,0x4e3afd6f,
+0x200ae003,0xfd6af003,0xf1073e0a,0x4628049c,0xf7ff4621,0xf010fedb,
+0xd0010f04,0xd1f02e09,0x46284621,0xfed2f7ff,0xf1074628,0xf7ff01f8,
+0xf010fecd,0xd0230f80,0x0490f107,0x46284621,0xfec4f7ff,0xf0404621,
+0x46287200,0xfec0f7ff,0x46284621,0xfebaf7ff,0x20019001,0xfd3ef003,
+0xe0034c21,0xf003200a,0x3c0afd39,0xf1074628,0xf7ff0190,0xf010feab,
+0xd0017fc0,0xd1f12c09,0x0498f107,0x4208ea4f,0x1203f042,0x46214628,
+0xfe9ef7ff,0x46284621,0xfe98f7ff,0x200a9001,0xfd1cf003,0xf1074628,
+0xf7ff01f8,0xf010fe8f,0xd00b0f80,0x0490f107,0x46284621,0xfe86f7ff,
+0xf0204621,0x46287200,0xfe82f7ff,0x4208ea4f,0xf1074628,0xf0420198,
+0xf7ff0203,0x2001fe79,0xfcfcf003,0x81fce8bd,0x000186a9,0x43f7e92d,
+0x807cf8d0,0x0501ea42,0x6470f508,0x46294689,0x0503f045,0xf1044606,
+0x042d0798,0xff4ef7ff,0x0201f045,0x46394630,0xfe5af7ff,0x46304639,
+0xfe54f7ff,0x9001349c,0xf0032001,0x4630fcd7,0xf7ff4621,0xf010fe4b,
+0xd0040f01,0x46214630,0xf7ff2200,0xf508fe45,0x46306479,0xf7ff4621,
+0x9001fe3d,0xf4139b01,0xd0092fc0,0x46304621,0xfe34f7ff,0xf4204621,
+0x463022c0,0xfe30f7ff,0x4630462a,0xf7ff4639,0x4639fe2b,0xf7ff4630,
+0x9001fe25,0xf0032001,0xf049fca9,0x46300201,0x04124639,0xfe1cf7ff,
+0x46394630,0xfe16f7ff,0x20019001,0xfc9af003,0x83fee8bd,0x469eb500,
+0xf853680b,0x600b0b04,0xf010b142,0xd0f70f01,0xd003280f,0x0302ea00,
+0xd1f14573,0x46c0bd00,0x47f0e92d,0x22014615,0x46074613,0xf8dd460e,
+0xf8dd8028,0xf8dd902c,0xf7ffa030,0xf000ffdf,0x2b040306,0xd1084604,
+0x2303f3c0,0xd10442ab,0xf0009b08,0x429a02c0,0x6833d004,0x3b042400,
+0xe0386033,0x637ef420,0xf0239a09,0x6013031f,0x0308f010,0x2200d008,
+0x46314638,0xf7ff4613,0xf8c8ffbd,0xe0010000,0x3000f8c8,0x0230f004,
+0x2a302500,0x5000f8ca,0x462bd117,0x46314638,0xf7ff462a,0xf420ffab,
+0xf023637e,0xf010031f,0xf8c90f08,0xd00e3000,0x46314638,0x462b462a,
+0xff9cf7ff,0x0000f8ca,0x0912e005,0x5380f44f,0xf8c94093,0x46203000,
+0x87f0e8bd,0x208cf8d0,0xea4fb530,0xeb0e0e81,0xf8d30302,0xf8d341c0,
+0xf8d05280,0x42993084,0x2400d301,0xf852e01a,0xb90b3021,0x4021f842,
+0x308cf8d0,0x4021f853,0x0203eb0e,0xf8d267c4,0xb90b3240,0x5240f8c2,
+0x308cf8d0,0x1080f8c0,0xf8d34473,0x67c43240,0x3088f8c0,0xbd304620,
+0x3088f8d0,0x0100f8d3,0x001ff000,0x46c04770,0x308cf8d0,0x2080f8d0,
+0x0382eb03,0x0103f893,0x46c04770,0x2088f8d0,0x3408f8d2,0x0303f003,
+0xd0012b01,0xe0052000,0x3800f8d2,0x0301f003,0x0001f083,0x46c04770,
+0xf8d0b500,0x468e0088,0xb132b901,0x3408f8d0,0x030eea23,0xf8c04313,
+0xf8d03408,0xbd000408,0xf8d0b500,0x468e0088,0xb132b901,0x3500f8d0,
+0x030eea23,0xf8c04313,0xf8d03500,0xbd000500,0xf8d0b513,0xf8d44088,
+0xf0133800,0xd10c0f01,0x1408f8c4,0x3408f8d4,0x9301200a,0xfba6f003,
+0xf8c42001,0xf0030800,0xbd1cfba1,0xf8d0b537,0x460c5088,0x0101ea42,
+0xffe2f7ff,0x0303f044,0x3408f8c5,0x3408f8d5,0x93012001,0xf8c52300,
+0xf0443800,0xf0030401,0xf8c5fb89,0xf8d54408,0x20013408,0xf0039301,
+0xbd3efb81,0x4604b570,0x008cf8d0,0xeb004696,0x461d0281,0x3240f8d2,
+0xb91b9e04,0x31c0f8d2,0x3021f840,0x308cf8d4,0x0021f853,0x0200eb0e,
+0xb136b905,0x3000f85e,0x0305ea23,0xf84e4333,0x68103000,0x46c0bd70,
+0xe0022000,0x68098a8b,0x290018c0,0x4770d1fa,0xe0004608,0x68034618,
+0xd1fb2b00,0x46c04770,0xe0012000,0x30016809,0xd1fb2900,0x46c04770,
+0xb510230c,0xfb014614,0x68930203,0x68d3b113,0xe000605c,0x220c6094,
+0x0202fb01,0x60d48a13,0x82133301,0x330188c3,0x884380c3,0xbfbc428b,
+0x8043b2cb,0xbd104620,0xb500230c,0x4611468e,0x0203fb0e,0xb9036893,
+0x689360d1,0x604b6091,0x33018a13,0x88c38213,0x80c33301,0x45738843,
+0xfa5fbfbc,0x8043f38e,0xbd004608,0xfb01230c,0xb5100203,0x68904604,
+0x6843b158,0xb9036093,0x8a1360d3,0x82133b01,0x3b0188e3,0x230080e3,
+0xbd106043,0xfb01230c,0xb5100303,0x68984604,0x68dbb1c0,0xe0012200,
+0x68404602,0xd1fb4298,0x2300b112,0xe0036053,0xfb01230c,0x609a4303,
+0xfb01230c,0x60da4303,0x3a018a1a,0x88e3821a,0x80e33b01,0x46c0bd10,
+0x4604b510,0xb18088c0,0xe002f8b4,0x20004622,0x6893e003,0xb913320c,
+0x45703001,0xb101d1f9,0x230c6008,0x4303fb00,0xbd1068d8,0x4604b530,
+0x460888e3,0x2b004615,0xe001d031,0x80631e53,0xb15b8863,0x230c461a,
+0x4303fb02,0x2b00689b,0xe004d0f4,0xb312390c,0xe0053a01,0x230c461a,
+0xf303fb02,0x18e13308,0x40932301,0xd0f14203,0x2b00680b,0x230cd0ee,
+0x4103fb02,0xb1786888,0x608b6843,0x60cbb903,0x3b018a0b,0xb105820b,
+0x88e3602a,0x80e33b01,0x60432300,0x2000e000,0x46c0bd30,0x460db530,
+0x3001e000,0xe000f890,0xf8134b2c,0xf013300e,0xd1f60320,0x0f2bf1be,
+0x3001d101,0xf1bee002,0xd0010f2d,0xe001461c,0x24013001,0x7803b982,
+0xd0012b30,0xe016320a,0x1c427843,0xd0042b78,0xd0022b58,0x22084610,
+0x3002e00d,0xe00a2210,0xd1082a10,0x2b307803,0x7843d105,0xd0012b78,
+0xd1002b58,0xf04f3002,0xe0080c00,0x3c0cfb02,0xd203458c,0xf04fb914,
+0xe01d3cff,0xf8903001,0x4b0ee000,0xf8134661,0xf013300e,0xd00e0f44,
+0x0f04f013,0xf1aed002,0xe0060330,0x0f02f013,0xf1aebf14,0xf1ae0357,
+0x42930337,0xb10cd3de,0x0c00f1cc,0x6028b105,0xbd304660,0x00016efe,
+0x460db537,0x24009001,0x98012210,0xf7ffa901,0x9b01ff95,0xf8135560,
+0x34012b01,0xb10a9301,0xd1f12c06,0xbf142c06,0x20012000,0x46c0bd3e,
+0x89034619,0x2b08b510,0xe8dfd817,0x050cf003,0x05050505,0x00080505,
+0xdd092a03,0x8943e00b,0xdb05429a,0xb141e007,0xf06fb12a,0xe006000e,
+0x000df06f,0x2000e003,0xf06fe001,0xbd100016,0xf810e005,0xea823c01,
+0x4a040303,0x39015cd2,0xf1b13001,0xd1f43fff,0x47704610,0x00017640,
+0x1841b500,0xe00a4696,0x3b01f810,0xea8e4a06,0xf0030303,0xf85203ff,
+0xea833023,0x42882e1e,0x4670d3f2,0x46c0bd00,0x00017240,0x4684b500,
+0x46862000,0xf81ee00a,0xe003200c,0x30011e53,0x0202ea03,0xd1f92a00,
+0x0e01f10e,0xd1f2458e,0x46c0bd00,0x60c26042,0x60816001,0x46c04770,
+0xb517b40e,0x4604ab05,0x2b04f853,0x68616800,0xf0009301,0xf1b0f907,
+0xd0033fff,0x42986863,0xb910da00,0x60632300,0x1a1be004,0x68236063,
+0x6023181b,0x401ee8bd,0x4770b003,0xb51328ff,0x460c4686,0xf000d808,
+0x4a0c030f,0x46089300,0x1303f3ce,0xe00d2108,0x5200ea4f,0xf4000d12,
+0x92004370,0x46084a06,0x5f80f5b3,0x2341bf14,0x21082350,0xfb1ef000,
+0xbd1c4620,0x0001702d,0x0001700d,0x7842b510,0x7803b086,0x78829200,
+0x9201460c,0x920278c2,0x92037902,0x46087942,0x21129204,0xf0004a02,
+0x4620fb05,0xbd10b006,0x00017220,0x4604b570,0xb1e9460e,0xf0004608,
+0x4605f9e5,0xe00fb1c0,0x46314620,0xf000462a,0xb928f9b3,0x2b3d5d63,
+0x1c63d102,0xe00c1958,0x3b01f814,0xd1fb2b00,0x7823b114,0xd1eb2b00,
+0xf0054630,0xe000f991,0xbd702000,0xf7ffb510,0xb118ffd9,0x460a2100,
+0xfea0f7ff,0x46c0bd10,0x4614b570,0xfb01220c,0x460ef202,0x21003208,
+0xf0004605,0x462bfa5d,0x802e2200,0xe00280ac,0x320188a9,0x330c80d9,
+0xdbf942b2,0x46c0bd70,0x41f0e92d,0x230c461f,0x1303fb02,0x6899460d,
+0x46164680,0x240ce011,0x5404fb06,0x4640684b,0x230060a3,0x463a604b,
+0xfd6af002,0x68a18a23,0x82233b01,0x3b0188eb,0x290080eb,0x230cd1eb,
+0x5303fb06,0xe8bd60d9,0x46c081f0,0x41f0e92d,0x460d4607,0x24004616,
+0x4622e006,0x46294638,0xf7ff4633,0x3401ffcd,0x429c882b,0xe8bddbf5,
+0x46c081f0,0xb085b5f0,0x9e0b9c0a,0x460f4605,0x4611469e,0x200046ec,
+0xf2fefbb1,0x1312fb0e,0xf10c5cf1,0xf80d0c01,0x30011000,0x2a004611,
+0xb10cd1f2,0xdc014284,0xe0154662,0x0e04ebc0,0x46724661,0x2330e003,
+0x3c01f801,0x31013a01,0xd1f82a00,0x44f44470,0x42bde7ee,0xf812bf9c,
+0x702b3c01,0x3a013501,0x429a466b,0xb005d1f5,0x46c0bdf0,0x47f3e92d,
+0x461d4401,0xf1001e4f,0x468133ff,0xbf38429f,0x37fff04f,0xf04f4604,
+0xe0d90a00,0xd0052b25,0xbf9842bc,0x34017023,0xe0d13201,0x1c567853,
+0xbf082b23,0x78333601,0x0e00f04f,0xbf082b2d,0xe00b3601,0x0330f1a2,
+0xf816449e,0x5ccb3f01,0x0f04f013,0x230ad002,0xfe03fb0e,0xb1e27832,
+0x5c8b4962,0x0304f013,0x2a2ed1ec,0x3601d115,0xe00b469a,0x0330f1a2,
+0xf816449a,0x5ccb3f01,0x0f04f013,0x230ad002,0xfa03fb0a,0xb1227832,
+0x5c8b4956,0x0f04f013,0x7833d1ec,0xbf082b6c,0x78303601,0xd0462869,
+0x2858d809,0xd801d063,0xe0082850,0xd07c2863,0xd03c2864,0x2873e081,
+0xd802d008,0xd0652870,0x2875e07b,0x2878d045,0xe076d051,0x4b46682a,
+0x0804f105,0xbf082a00,0xf1be461a,0xd1170f00,0x0f00f1ba,0xe010d005,
+0xbf9842bc,0x34017023,0x78133201,0xd1f72b00,0x42bce064,0x7023bf98,
+0x32013401,0x3efff11e,0x4621d102,0xe0094672,0x2b007813,0xe7f8d1f1,
+0xd80142bc,0x70232320,0x3a013401,0xd1f72a00,0x040eeb01,0x682ae04a,
+0xda052a00,0xd80142bc,0x7023232d,0x42523401,0xf1054b2a,0x46200804,
+0xf8cd4639,0x9301e000,0x4b26e008,0xe000f8cd,0x682a9301,0x0804f105,
+0x46394620,0xf7ff230a,0x1824ff0d,0x4b1fe02a,0xf855491f,0x28582b04,
+0x4619bf08,0x46a89101,0x46394620,0xf8cd2310,0xe7ece000,0x49184b17,
+0x2b04f855,0xbf082850,0x23084619,0x91019300,0x462046a8,0x18db4639,
+0x682be7dd,0xbf9842bc,0xf1057023,0x34010804,0x42bce004,0x7020bf98,
+0x340146a8,0x46451c72,0x2b007813,0xaf22f47f,0xbf9542bc,0x0004ebc9,
+0x0007ebc9,0x703b7023,0x87fce8bd,0x00016efe,0x00017751,0x00017758,
+0x00017740,0x460cb510,0xf06f4613,0x46224100,0xfef8f7ff,0x46c0bd10,
+0x4684b500,0x0e00f04f,0xe00e4610,0x200cf81e,0x3001f81e,0xd202429a,
+0x30fff04f,0xf10ee007,0xd9010e01,0xe0022001,0x28003801,0xbd00d1ee,
+0xeb00b500,0x46020e02,0xd00a4572,0xf802780b,0xb1233b01,0xe7f73101,
+0xf8022300,0x45723b01,0xbd00d1fa,0x20004602,0x3001e000,0x2b005c83,
+0x4770d1fb,0xe0064602,0xd3114283,0x2001d901,0x3201e010,0x78083101,
+0x7813b110,0xd1f32b00,0xb1237813,0x0001f1d0,0x2000bf38,0xb108e002,
+0x30fff04f,0x46c04770,0x4604b510,0x4283e007,0xd901d315,0xe0162001,
+0x31013401,0x78083a01,0x7823b120,0x2a00b113,0xe00bd1f1,0x7823b152,
+0xf1d0b123,0xbf380001,0xe0042000,0xf04fb110,0xe00030ff,0xbd102000,
+0xf04fb500,0x78020e00,0x429ab2cb,0x4686bf08,0x3001b10a,0x4670e7f7,
+0x46c0bd00,0xe000b510,0xf8903001,0x4b29e000,0x300ef813,0x0320f013,
+0xf1bed1f6,0xd1010f2b,0xe0023001,0x0f2df1be,0x461cd001,0x3001e001,
+0xb9822401,0x2b307803,0x320ad001,0x7843e016,0x2b781c42,0x2b58d004,
+0x4610d002,0xe00d2208,0x22103002,0x2a10e00a,0x7803d108,0xd1052b30,
+0x2b787843,0x2b58d001,0x3002d100,0x0c00f04f,0xfb02e002,0x30013c0c,
+0xe000f890,0xf8134b0d,0xf013300e,0xd00e0f44,0x0f04f013,0xf1aed002,
+0xe0060330,0x0f02f013,0xf1aebf14,0xf1ae0357,0x42930337,0xb10cd3e5,
+0x0c00f1cc,0x6008b101,0xbd104660,0x00016efe,0xb5002a07,0xf010d90f,
+0xd10c0f03,0x460bb909,0xb2cbe004,0x2303ea43,0x4303ea43,0x2a033a04,
+0x3b04f840,0x4613d8fa,0x0e00f04f,0xf80ee004,0x3b011000,0x0e01f10e,
+0xd1f82b00,0xbd001880,0xb5002a03,0xd90c4684,0x0f03f011,0xf01cd109,
+0xd1060f03,0x3b04f851,0x2a033a04,0x3b04f840,0xf04fd8f8,0xe0060e00,
+0x3001f81e,0xf80e3a01,0xf10e3000,0x2a000e01,0x4660d1f6,0x46c0bd00,
+0xb530b40f,0xab46b0c3,0x2b04f853,0x3801a801,0x1101f240,0xf7ff9341,
+0x2400fdd5,0xe0054605,0x3b01ab01,0xf0025ce0,0x3401fb5b,0xdbf742ac,
+0xb0434628,0x4030e8bd,0x4770b004,0xb503b40e,0xf852aa03,0x92011b04,
+0xfebcf7ff,0x400ce8bd,0x4770b003,0xb507b40c,0xf853ab04,0x93012b04,
+0xfdb0f7ff,0x400ee8bd,0x4770b002,0x47702001,0x98019900,0xb138b141,
+0x78134a04,0x3301b90b,0x23007013,0x6003600b,0x47702000,0x0001c5d1,
+0x4ff0e92d,0x6d82f5ad,0xf8ddb081,0x46806438,0x0f01f016,0x46924689,
+0xf8dd469b,0xd152743c,0x0501f017,0x19bcd14f,0x7f00f5b4,0xac84d84b,
+0x95019500,0x94029503,0xffd0f7ff,0x28004605,0xf8b4d141,0x48232080,
+0x1040f8b4,0xff90f7ff,0x3040f8b4,0x3272f245,0xd0054293,0x3080f8b4,
+0xd0014293,0xe010462a,0xab842200,0x74dcf44f,0x93029200,0x94019203,
+0x46494640,0x465b4652,0xffacf7ff,0x22dcb9f8,0xf2454625,0x429e53aa,
+0xea4fac04,0xd1040242,0x21ff4620,0xff28f7ff,0xa984e011,0xf7ff4620,
+0xf026ff43,0x18200001,0x1440f8dd,0xf7ff463a,0xb125ff3b,0x1e694620,
+0xf7ff22ff,0x2001fbe5,0xf50db005,0xe8bd6d80,0x46c08ff0,0x000177c6,
+0xb5706943,0xdc012b14,0xe0042541,0x6a0b4a0a,0xea036812,0x4c090502,
+0x2c04f854,0xf854b132,0xea153c08,0xd0010103,0x47906820,0x340c4b04,
+0xd1f1429c,0x46c0bd70,0x0001c610,0x0001c5dc,0x0001c618,0x47f0e92d,
+0x46804615,0x461e460f,0xfc32f7fe,0x46812100,0xf7fe4640,0x2200fe39,
+0x46114604,0x180b480f,0xb973685b,0xfb02330c,0x501df303,0x6a63181a,
+0x60966057,0xea454a0a,0x60130303,0x24016263,0x3201e004,0x2a05310c,
+0x2400d1e8,0x46494640,0xfe1af7fe,0xe8bd4620,0x46c087f0,0x0001c5d4,
+0x0001c610,0x47f0e92d,0x46894604,0xfbccf7fe,0x46202100,0xfe08f7fe,
+0x46204605,0xf8d46967,0xf0028018,0x2f0afe6b,0xd9164682,0xd0192f0f,
+0xf7fe4620,0x2f14fceb,0xd9034606,0xf02368ab,0x60ab0308,0xf04368ab,
+0x60ab0301,0x68abd903,0x0308f043,0x220160ab,0x2f02e011,0x4e1ad802,
+0xe00c2230,0xf7fe4620,0xf8d5fcdb,0x460630a4,0x03fff023,0x0302f043,
+0x30a4f8c5,0xb15f2202,0xf01368ab,0xd1070f01,0x0318f008,0xbf142b08,
+0x16e1f44f,0xf6f2fbb6,0x0803f008,0xe00f2400,0x7040f505,0xeb00b117,
+0xe0012004,0x00c4eb00,0x0f00f1b9,0x4651d003,0x23004632,0x340147c8,
+0xdbed4544,0x87f0e8bd,0x053ec600,0x47704800,0x00017804,0x460eb573,
+0xf89d2400,0x46151018,0x469e4684,0x20014622,0xf302fa10,0x0f0eea13,
+0xf8c5d004,0xf8d52620,0x431c3624,0x2a1f3201,0x4623d1f1,0xb13cb149,
+0x46319000,0x462a4660,0xffe0f7ff,0x0300ea44,0x4620461c,0x46c0bd7c,
+0x46c04770,0x4604b570,0xfb72f7fe,0x46052100,0xf7fe4620,0x4620fd79,
+0xf7fe4629,0x2001fd75,0x46c0bd70,0x4604b570,0xfb62f7fe,0x46052100,
+0xf7fe4620,0x4620fd69,0xf7fe4629,0xbd70fd65,0x2200b510,0xf7ff4604,
+0x4620ffed,0xfb50f7fe,0x46204601,0xfd58f7fe,0x46c0bd10,0x4605b570,
+0xfb46f7fe,0x46062100,0xf7fe4628,0x4631fd4d,0x460cf8d0,0xf7fe4628,
+0xf3c4fd47,0xbd702080,0x4604b570,0xfb34f7fe,0x46052100,0xf7fe4620,
+0x69e3fd3b,0xd1042b01,0x3600f8d0,0x7300f423,0xdd05e004,0x3600f8d0,
+0x7300f443,0x3600f8c0,0x2b026b63,0xf8c0d110,0xf8d03658,0xf443365c,
+0xf8c07380,0x2303365c,0x3658f8c0,0x365cf8d0,0x0304f043,0x365cf8c0,
+0x46294620,0xfd14f7fe,0x46c0bd70,0x4604b570,0xfb02f7fe,0x46062100,
+0xf7fe4620,0x6b63fd09,0x4d0bb90b,0x2301e00d,0x3660f8c0,0x3664f8d0,
+0xf0034a08,0xfbb203ff,0xf44ff2f3,0xfb02737a,0x4620f503,0xf7fe4631,
+0x4628fcf3,0x46c0bd70,0x0249f000,0x000d6d80,0xf7ffb510,0xbd10ffd7,
+0x4605b570,0xfad8f7fe,0x46062100,0xf7fe4628,0xf8d0fcdf,0x46283600,
+0x0484f3c3,0xff2af7ff,0x7883e003,0xd00442a3,0xb120300c,0x2b008803,
+0x8803d1f7,0x4805b903,0x46318804,0xf7fe4628,0xf44ffcc7,0xfb04707a,
+0xbd70f000,0x000178a0,0x4604b570,0xfab0f7fe,0x46052100,0xf7fe4620,
+0x4620fcb7,0xf7fe4629,0xf640fcb3,0xbd7030b8,0x41f0e92d,0xf7fe4606,
+0x2100fa9f,0x46304607,0xfca6f7fe,0xf8c02301,0xf8d03650,0x4c2e3654,
+0x0304f023,0x3654f8c0,0x3654f8d0,0xf0434605,0xf8c00304,0xe0033654,
+0xf002200a,0x3c0afbf3,0xf0136aeb,0xd1010f08,0xd1f52c09,0x6aea2000,
+0x0658f8c5,0x365cf8d5,0x1247f3c2,0x4360f023,0xea432101,0xf8c57342,
+0xf8c5365c,0xf8d51658,0xf002365c,0xf023040f,0xea430301,0xf8c503d4,
+0xf8c5365c,0xf8d50650,0xf0233654,0xea434340,0xf8c57382,0xf8c53654,
+0xf8d51650,0xf0233654,0xea430303,0xf8c50394,0xf8c53654,0xf8d50650,
+0x46303654,0x5300f043,0x3654f8c5,0x1650f8c5,0x3654f8d5,0xf0234639,
+0xf8c50304,0xf7fe3654,0xe8bdfc47,0x46c081f0,0x00989689,0x41f0e92d,
+0x46804f0f,0xb9c4683c,0xfa2ef7fe,0x46064621,0xf7fe4640,0xf8d0fc35,
+0x46045614,0x7010f242,0xfb90f002,0x3614f8d4,0x1b5b2264,0xf302fb03,
+0x603b4640,0xf7fe4631,0x6838fc23,0x81f0e8bd,0x0001c614,0x41f0e92d,
+0x46164607,0xfa0cf7fe,0x46802100,0xf7fe4638,0x4604fc13,0xf0002e00,
+0x463880a6,0xfe5ef7ff,0xe0024605,0xd00642b3,0x2d00350c,0x809bf000,
+0x2b00882b,0x882bd1f6,0xf0002b00,0xf8d48094,0x78aa3600,0x0384f3c3,
+0xf0004293,0xf8d4808c,0xf6433618,0xf42326a1,0xf8c41340,0xf8d43618,
+0xf423361c,0xf8c41340,0xe003361c,0xf002200a,0x3e0afb45,0x31e0f8d4,
+0x3f00f413,0x2e09d001,0x2300d1f4,0x3660f8c4,0x792b78ea,0x1664f8d4,
+0x0512061b,0x6370f003,0x0270f402,0x617ff021,0x430b4313,0x3664f8c4,
+0xb9536b7b,0xf8c43301,0xf8d43660,0xf4233664,0xf443437f,0xf8c46360,
+0x23023664,0x3660f8c4,0xf8d488ea,0x4b291664,0xea020512,0xf0210303,
+0xf42151fe,0xf4431178,0x430b3300,0x3664f8c4,0xf8c42303,0xf8d43660,
+0x68ab2664,0x427ff002,0x437ff023,0xf8c44313,0x23053664,0x3660f8c4,
+0x2664f8d4,0xf0024b1a,0xea4202ff,0xf8c40303,0x69fb3664,0xdd052b01,
+0x3600f8d4,0x6380f443,0x3600f8c4,0xf8d478aa,0x88290600,0xf64f0092,
+0xea007383,0xf0020303,0x317f027c,0x11c9431a,0x39016b7b,0x4001ea42,
+0xf8d4b93b,0xf4203630,0x041b7080,0xf8c40c1b,0xf8c43630,0x46380600,
+0xf7fe4641,0xe8bdfb65,0x46c081f0,0x1ff00000,0x88888800,0x4616b570,
+0x460d6b42,0x2312f240,0x490d2000,0xbf8c2a01,0x2412461c,0xf95ef7ff,
+0x2100b120,0xf7ff460a,0x4604f825,0x49072000,0xf954f7ff,0x4806b908,
+0x2100e003,0xf7ff460a,0x602cf819,0xbd706030,0x000178c4,0x000178c9,
+0x003ff63e,0x43f0e92d,0x4607b085,0x4690460c,0xf964f7fe,0x28004605,
+0x4638d145,0xf91cf7fe,0x46814629,0xf7fe4638,0x2301fb23,0x46214606,
+0x46329300,0x6380f44f,0xf7ff4638,0xaa02fd6f,0xa9034604,0x95034638,
+0xf7ff9502,0x9b03ffb3,0x0203ea24,0x0f00f1b8,0xf8d6d019,0xf44f3618,
+0xf443707a,0x43136380,0x3618f8c6,0xfa62f002,0x24a1f643,0x200ae003,
+0xfa5cf002,0xf8d63c0a,0xf413360c,0xd10a6f80,0xd1f42c09,0xf8d6e007,
+0xf4423618,0xea236280,0xf8c60302,0x46383618,0xf7fe4649,0xb005fae5,
+0x83f0e8bd,0x4ff0e92d,0xb0852400,0x94034607,0xf7fe9402,0x4621f8cd,
+0x46384683,0xfad4f7fe,0x4a466b7b,0x4b4642a3,0xbf144605,0x46994691,
+0x4a446a3b,0x2a04f3c3,0xbf147813,0x26012602,0x3620f8c0,0x46a08853,
+0x3628f8c0,0x2108e014,0x4a3d4668,0xf7ff4643,0x2000fbc5,0xf7ff4669,
+0xb138f8c1,0xf8c52100,0x460a8620,0xff86f7fe,0x0628f8c5,0x0801f108,
+0xd1e845d0,0x1406eb09,0x3c04f854,0xb1133e01,0x47984638,0x2100b330,
+0x2301e022,0xf854408b,0x42132c10,0xf8c5d01b,0xf9141620,0xb12b3c0c,
+0xd0062b01,0x3ffff1b3,0xe010d009,0x3c08f854,0xf8d5e00b,0xf8543624,
+0x43132c08,0xf8d5e005,0xf8543624,0xea232c08,0xf8c50302,0x31013624,
+0xd1da4551,0x2e003c10,0xe014d1ce,0x46682108,0x46334a18,0xfb7af7ff,
+0x46692000,0xf7ff466c,0xb138f875,0xf8c52100,0x460a6620,0xff3af7fe,
+0x0624f8c5,0x45463601,0x4638d1e8,0xaa02a903,0xfef8f7ff,0xb10b9b03,
+0x3618f8c5,0xb10b9b02,0x361cf8c5,0x46594638,0xfa4af7fe,0xe8bdb005,
+0x46c08ff0,0x000178e8,0x000178d8,0x000177fe,0x000178ce,0x000178d3,
+0x30b4f890,0xf8d0b1a3,0xb91330c0,0x30c4f8d0,0x461ab173,0xf443681b,
+0x60136300,0xf4136813,0xd0056f00,0x6300f423,0x23016013,0x3140f8c0,
+0x46c04770,0x477020a4,0xf890b510,0xb10b30b4,0xe0004903,0x22904903,
+0xfadaf7ff,0x46c0bd10,0x00017908,0x00017998,0x9c03b530,0x4619468c,
+0x46969b04,0x682204db,0x43130cdb,0x46056023,0x0138f8d0,0x4f80f1b0,
+0xf01ed102,0xd1094240,0xeb0e00c9,0xeb0c0300,0x60530201,0xf84c6823,
+0xe00e3001,0x3392ea43,0xf8d56023,0x00c82138,0x4340f02e,0xeb0c189b,
+0x604b0100,0xf84c6823,0xbd303000,0x469cb570,0x468e9b05,0xf8d0045d,
+0x0c6d3138,0x4f80f1b3,0x9e044614,0xf012d102,0xd1054240,0x110cea4f,
+0x0201eb0e,0xe00918e3,0x110cea4f,0x4340f024,0x3592ea45,0x4380f103,
+0x0201eb0e,0xf8d06093,0x60d3313c,0xf84e6833,0x60553001,0x3140f8d0,
+0xea4fb1db,0xeb0e120c,0x68a00402,0xf85e68e3,0x40432002,0x40536861,
+0xea83404b,0xea834313,0xea832313,0xea831313,0xea830393,0xf0130353,
+0xbf1c0f01,0x2380f445,0xbd706063,0xf443680b,0x600b3340,0x680b6808,
+0x3040f400,0x3340f423,0x3f40f5b0,0x2000bf14,0x600b2001,0x46c04770,
+0x30b4f890,0x468eb500,0x1130f8d0,0xf1b1b32b,0xd1024f80,0x4c40f012,
+0xf1bed10d,0xeb020f01,0xbf0c0301,0x20c0f8d0,0x20c4f8d0,0xf8d06093,
+0x60d33134,0xf1bee035,0xf0220f01,0xbf0c4340,0x20c0f8d0,0x20c4f8d0,
+0x4380f103,0xf8d06093,0xea4f3134,0x60d3319c,0xf1b1e01d,0xd1024f80,
+0x4c40f012,0xf1bed109,0xbf0c0f01,0x30b8f8d0,0x30bcf8d0,0x605a440a,
+0xf1bee013,0xf0220f01,0xbf0c4340,0x20b8f8d0,0x20bcf8d0,0x4380f103,
+0x319cea4f,0x68136053,0x3340f423,0x0303ea41,0xbd006013,0x30b4f890,
+0xf8d0b113,0xe00120c0,0x20b8f8d0,0xf0436813,0x60130304,0x46c04770,
+0x30b4f890,0xf8d0b153,0xf8d03140,0xf8d020c4,0xb10b012c,0xe0080043,
+0xe0040043,0x312cf8d0,0x20bcf8d0,0xf443005b,0xf0436300,0x60130301,
+0x46c04770,0xf8d0b510,0x460140d4,0xf890b1d4,0xb12b30b4,0x30c0f8d0,
+0xf3c3691b,0xe0041e08,0x30b8f8d0,0xf3c368db,0xf8d10ec8,0xe00720d8,
+0x30e0f8d1,0x0022f853,0x3201b928,0x401a1e63,0xd1f54572,0xbd102000,
+0xf8c02300,0x47703090,0x10d4f8d0,0x30dcf8d0,0x20d8f8d0,0x1a9bb510,
+0x401c1e4c,0x39011b09,0x1090f8c0,0x46c0bd10,0xf8d04603,0xf8d320d4,
+0xf8d030d8,0x3a0100dc,0xea021ac0,0x47700000,0x30b4f890,0xf8d0b12b,
+0x691b30c0,0x1208f3c3,0xf8d0e004,0x68db30b8,0x02c8f3c3,0x30dcf8d0,
+0x00d4f8d0,0x38011a9b,0x0000ea03,0x46c04770,0xf8d04603,0xf8d32100,
+0xf8d03104,0x3a010108,0xea021ac0,0x47700000,0xf8c02300,0xf8c03094,
+0xf8c03098,0x4770309c,0x30b8f8d0,0xf1b06818,0xd1013fff,0xe0013001,
+0x0001f000,0x46c04770,0x30d4f8d0,0xf8d0b12b,0x681320b8,0x0302f043,
+0x47706013,0x30d4f8d0,0xf8d0b12b,0x681320b8,0x0302f023,0x47706013,
+0x30d4f8d0,0x2001b90b,0xf8d0e004,0x681b30b8,0x0040f3c3,0x46c04770,
+0x30b8f8d0,0xf40068d8,0xf5b04070,0xbf145f40,0x20012000,0x46c04770,
+0x30bcf8d0,0xf40068d8,0xf5b04070,0xbf145f40,0x20012000,0x46c04770,
+0x3100f8d0,0x2001b90b,0xf8d0e009,0x68da30bc,0x0512689b,0x429a0d12,
+0x2000bf14,0x47702001,0x30bcf8d0,0xf1b06818,0xd1013fff,0xe0013001,
+0x0001f000,0x46c04770,0x30d4f8d0,0x2b00b530,0xf8d0d038,0xb11120d8,
+0x40dcf8d0,0xf8d0e004,0x68db30b8,0x04c8f3c3,0x4611b112,0xe0172500,
+0x30dcf8d0,0xd825429c,0xf8d0e7f7,0x4a1330cc,0x03c1eb03,0xf8d0605a,
+0x230020e0,0x5021f852,0x3021f842,0x30d4f8d0,0x3b011c4a,0x0103ea02,
+0xd00142a1,0xd0e82d00,0x30d4f8d0,0x20dcf8d0,0x10d8f8c0,0x1e591a52,
+0x1a9b400a,0xf8c03b01,0xe0003090,0x46282500,0x46c0bd30,0xdeadbeef,
+0x47f0e92d,0xf7ff4604,0xf8d4ff1f,0xf8d430b8,0x68db90d8,0x58d3ea4f,
+0x30d4f8d4,0x0208ebc9,0xea021e59,0x1a1b0701,0xd24c429f,0x30dcf8d4,
+0xea033b01,0xe0260c01,0x00ccf8d4,0x0307eb0c,0x050eea03,0x03ccea4f,
+0x58c318c6,0xf0234575,0xbf085180,0x5180f041,0x50c100eb,0x687318c2,
+0x018cea4f,0xf8d46053,0x4b1820e0,0x58536073,0x3025f842,0x50532300,
+0x30d4f8d4,0x32fff10c,0xea023b01,0xf8d40c03,0xf10910d4,0xf10133ff,
+0xea0e3eff,0x459c0303,0xf8d4d1ce,0xf8c430dc,0x18fb80d8,0x030eea03,
+0x0203ebc8,0x020eea02,0x0201ebc2,0xf8c43a01,0xf8d42090,0xf8c420b8,
+0x00db30dc,0xe8bd6093,0x46c087f0,0xdeadbeef,0x30c0f8d0,0xf1b06818,
+0xd1013fff,0xe0013001,0x0001f000,0x46c04770,0x30d4f8d0,0xf8d0b12b,
+0x681320c0,0x0302f043,0x47706013,0x30d4f8d0,0xf8d0b12b,0x681320c0,
+0x0302f023,0x47706013,0x30d4f8d0,0x2001b90b,0xf8d0e004,0x681b30c0,
+0x0040f3c3,0x46c04770,0x30c0f8d0,0xf0006918,0xf1b04070,0xbf145f40,
+0x20012000,0x46c04770,0x30c4f8d0,0xf0006918,0xf1b04070,0xbf145f40,
+0x20012000,0x46c04770,0x3100f8d0,0x2001b90b,0xf8d0e009,0x691a30c4,
+0x04d2685b,0x429a0cd2,0x2000bf14,0x47702001,0x30c4f8d0,0xf1b06818,
+0xd1013fff,0xe0013001,0x0001f000,0x46c04770,0x30d4f8d0,0x2001b90b,
+0xf8d0e00d,0x681320c0,0x0002f013,0x6913d007,0x4370f003,0x5f00f1b3,
+0x2000bf14,0x47702001,0x30d4f8d0,0x2b00b530,0xf8d0d039,0xb11120d8,
+0x40dcf8d0,0xf8d0e004,0x691b30c0,0x1408f3c3,0x4611b112,0xe0182500,
+0x30dcf8d0,0xd826429c,0xf8d0e7f7,0x4a1330d0,0x1301eb03,0x60da609a,
+0x20e0f8d0,0xf8522300,0xf8425021,0xf8d03021,0x1c4a30d4,0xea023b01,
+0x42a10103,0x2d00d001,0xf8d0d0e7,0xf8d030d4,0xf8c020dc,0x1a5210d8,
+0x400a1e59,0x3b011a9b,0x3090f8c0,0x2500e000,0xbd304628,0xdeadbeef,
+0x4604b530,0x0100f8d0,0xb908460a,0xe03e4605,0x00b4f894,0x1104f8d4,
+0x3108f8d4,0x4299b1c0,0xb932d034,0x30c4f8d4,0xf3c3691b,0x42991308,
+0xf8d4d02c,0x2300210c,0x5021f852,0x3021f842,0x30fcf8d4,0xeb034a13,
+0x609a1301,0xe01560da,0xd01b4299,0xf8d4b932,0x68db30bc,0x03c8f3c3,
+0xd0134299,0x310cf8d4,0xf8534a0a,0xf8435021,0xf8d40021,0xeb0330f8,
+0x605a03c1,0x3100f8d4,0x3b011c4a,0xf8c44013,0xe0003104,0x46282500,
+0x46c0bd30,0xdeadbeef,0xf443680b,0x600b3340,0x680b6808,0x3040f400,
+0x3340f423,0x3f40f5b0,0x2000bf14,0x600b2001,0x46c04770,0x47f0e92d,
+0xf7ff4605,0xf8d5fda1,0xf8d530c0,0x695b90d8,0x180cf3c3,0x30d4f8d5,
+0x0208ebc9,0xea021e59,0x1a1b0701,0xd251429f,0x30dcf8d5,0xea033b01,
+0xe02b0c01,0x00d0f8d5,0x0307eb0c,0x060eea03,0x130cea4f,0x58c318c4,
+0xf0234576,0xbf085180,0x5180f041,0x50c10133,0x686318c2,0x018cea4f,
+0x68a36053,0x68e36093,0xf8d560d3,0x4b1820e0,0x60e360a3,0xf8425853,
+0x23003026,0xf8d55053,0xf10c30d4,0x3b0132ff,0x0c03ea02,0x10d4f8d5,
+0x33fff109,0x3efff101,0x0303ea0e,0xd1c9459c,0x30dcf8d5,0x80d8f8c5,
+0xea0318fb,0xebc8030e,0xea020203,0xebc2020e,0x3a010201,0x2090f8c5,
+0x20c0f8d5,0x30dcf8c5,0x6053011b,0x87f0e8bd,0xdeadbeef,0x4604b510,
+0xfbcef7fd,0x46202100,0xf7fd460a,0xf410fded,0xd0055f80,0xf7fd4620,
+0xb108fc13,0xe0002040,0xbd102020,0x20d4f8d0,0x4604b510,0x1e53b1e2,
+0xf8c02100,0xf8c03090,0xf8c010dc,0x011210d8,0x00d0f8d0,0xfe90f7fe,
+0x3140f8d4,0x20c0f8d4,0x2301b10b,0xf640e001,0x60130301,0x21014620,
+0x20ecf8d4,0xfc54f7ff,0x46c0bd10,0x20d4f8d0,0x4604b510,0x2100b1ba,
+0xf8c01e53,0xf8c010dc,0xf8c010d8,0x00d23090,0x00ccf8d0,0xfe6cf7fe,
+0x20b8f8d4,0x0301f640,0x46206013,0xf8d42101,0xf7ff20ec,0xbd10fc35,
+0x2100f8d0,0x4604b510,0xf890b1d2,0x230010b4,0x3108f8c0,0x3104f8c0,
+0xf8d0b121,0x461900fc,0xe0020112,0x00f8f8d0,0xf7fe00d2,0x4620fe49,
+0xfc7af7ff,0x21024620,0x2118f8d4,0xfc14f7ff,0x46c0bd10,0x41f0e92d,
+0x30b4f890,0x46884604,0xd0442b00,0xf8d02901,0xbf0c50c8,0x30d4f8d0,
+0x3100f8d0,0x011e1e6f,0x5f80f417,0x1976bf18,0xd1182901,0xf1044630,
+0xf00101ec,0xb358fc6f,0xfbb3183b,0xfb05f3f5,0xf8d4f303,0xf8c420ec,
+0x1a1b30d0,0x464118d2,0x30f0f8c4,0x20ecf8c4,0x60f4f8c4,0x4630e019,
+0x718cf504,0xfc56f001,0x183bb190,0xf3f5fbb3,0xf303fb05,0x2118f8d4,
+0x30fcf8c4,0x18d21a1b,0xf8c42101,0xf8c4311c,0xf8c42118,0xe0006120,
+0xb2c82100,0x2901e040,0xf8d0d109,0xf10430d4,0x00dd01ec,0xf0014628,
+0xb398fc35,0xf8d0e009,0xf5043100,0x00dd718c,0xf0014628,0xb348fc2b,
+0xf500e013,0x331f637e,0x637ef423,0x031ff023,0x20ecf8d4,0x30ccf8c4,
+0x18d21a1b,0x30f0f8c4,0x20ecf8c4,0x50f4f8c4,0xf500e012,0x331f637e,
+0x637ef423,0x031ff023,0x2118f8d4,0x30f8f8c4,0x18d21a1b,0x311cf8c4,
+0x2118f8c4,0x5120f8c4,0xe0002001,0xb2c02000,0x81f0e8bd,0x4604b510,
+0xd04f2800,0x30b4f890,0xf8d0b15b,0xb12b30d0,0x00f0f8d0,0x0003ebc0,
+0xfbe8f001,0x30fcf8d4,0xf8d0e00a,0xb12b30cc,0x00f0f8d0,0x0003ebc0,
+0xfbdcf001,0x30f8f8d4,0xf8d4b12b,0xebc0011c,0xf0010003,0xf8d4fbd3,
+0xb13110e0,0x20d4f8d4,0x00acf8d4,0xf0010092,0xf8d4f8cf,0xb131110c,
+0x2100f8d4,0x00acf8d4,0xf0010092,0xf8d4f8c5,0xb13110e8,0x20d4f8d4,
+0x00acf8d4,0xf0010092,0xf8d4f8bb,0xb1311114,0x2100f8d4,0x00acf8d4,
+0xf0010092,0xf8d4f8b1,0x462100ac,0x72a2f44f,0xf8aaf001,0x46c0bd10,
+0x4ff7e92d,0x91014683,0x70a2f44f,0x46162100,0xf8dd461f,0xf8dd9034,
+0xf8dda038,0x9d12803c,0xfebaf000,0x28004604,0x8126f000,0xf44f2100,
+0xf7fe72a2,0x4b94fd3d,0x2d002100,0x461dbf08,0x50a0f8c4,0x460a4630,
+0xfc72f7fd,0xf3c02300,0xf8c43000,0xb2c33140,0x00b4f884,0xb0acf8c4,
+0x60b0f8c4,0x9b0cb1b3,0x0ffff1b9,0x30c4f8c4,0x5300f44f,0x70c0f8c4,
+0x30c8f8c4,0xf1bad806,0xbf9c0fff,0x5380f5a3,0x30c8f8c4,0xf7ff4620,
+0xe004fa2f,0xf8c49b0c,0xf8c470b8,0x220830bc,0xf1049901,0xf7fe00a4,
+0x2300fc47,0x30abf884,0x90d4f8c4,0xa100f8c4,0xfa34f7ff,0xbf864580,
+0x0308ebc0,0x3124f8c4,0x8124f8c4,0x22009b10,0x3128f8c4,0xf8c49b11,
+0xf8c42130,0xf8c4312c,0x68732138,0xd11f2b01,0xf5b368b3,0xd1056f02,
+0x30b4f894,0xf04fb113,0xe00b4300,0xf2446b32,0x429a3322,0xf04fbf0c,
+0xf04f4300,0xf8c44380,0x23003130,0x3134f8c4,0x3130f8d4,0x3138f8c4,
+0x3134f8d4,0x313cf8c4,0xf7fd4630,0xf640fa07,0x42980329,0x4630d10c,
+0xfcd4f7fd,0x4630b140,0xfcd0f7fd,0xd8032802,0xf8842300,0xe01c30b5,
+0x30b4f894,0xf8d4b15b,0xb91110c0,0x10c4f8d4,0xf8d4b181,0xf7ff00ac,
+0x2001fd6f,0xf8d4e00b,0xb91110b8,0x10bcf8d4,0xf8d4b121,0xf7ff00ac,
+0xe000fa59,0xf8842000,0xf1b900b5,0xd00d0f00,0x0589ea4f,0x21004628,
+0xfdfef000,0x00e0f8c4,0xd06b2800,0x462a2100,0xfc82f7fe,0x0f00f1ba,
+0xea4fd00d,0x4628058a,0xf0002100,0xf8c4fded,0x2800010c,0x2100d05a,
+0xf7fe462a,0xf1b9fc71,0xd0050f00,0x21014620,0xfe2cf7ff,0xd04d2800,
+0x0f00f1ba,0x4620d005,0xf7ff2102,0x2800fe23,0xf8d4d044,0xf1b33130,
+0xd1074f80,0x30ecf8d4,0x4f80f1b3,0xf894d902,0xb3bb30b5,0x3130f8d4,
+0x4f80f1b3,0xf8d4d107,0xf1b33118,0xd9024f80,0x30b5f894,0xf1b9b353,
+0xd00d0f00,0x0589ea4f,0x21004628,0xfdb0f000,0x00e8f8c4,0x2100b1f0,
+0xf7fe462a,0xe001fc35,0x90e8f8c4,0x0f00f1ba,0xea4fd00d,0x4628058a,
+0xf0002100,0xf8c4fd9d,0xb1580114,0x462a2100,0xfc22f7fe,0xf8c4e001,
+0x4620a114,0xf958f7ff,0xe0034620,0xf7ff4620,0x2000fe69,0x8ffee8bd,
+0x0001c618,0x3100f8d0,0x4604b570,0x2001b90b,0xf8d0e016,0x230020c4,
+0x7519f242,0xe0036013,0xf001200a,0x3d0afabf,0x30c4f8d4,0xf013691b,
+0xd0014070,0xd1f32d09,0x0001f1d0,0x2000bf38,0x46c0bd70,0x30d4f8d0,
+0x4604b570,0x2001b90b,0xf8d0e033,0x230220c0,0x7519f242,0xe0036013,
+0xf001200a,0x3d0afa9f,0x30c0f8d4,0xf013691b,0xd0074370,0x5f00f1b3,
+0xf1b3d004,0xd0015f40,0xd1ed2d09,0x20c0f8d4,0xf2422300,0x60137519,
+0x200ae003,0xfa86f001,0xf8d43d0a,0x691b30c0,0x4670f013,0x2d09d001,
+0xf44fd1f3,0xf0017096,0xf1d6fa79,0xbf380001,0xbd702000,0x30d4f8d0,
+0x4604b510,0x2001b90b,0xf8d0e01a,0x681320b8,0x0f02f013,0x68d3d013,
+0x4370f403,0x5f00f5b3,0x2002d10d,0xfa5ef001,0x30b8f8d4,0xf40368db,
+0xf5b34370,0xbf145f00,0x20012000,0x2000e000,0x46c0bd10,0x3100f8d0,
+0x4604b570,0x2001b90b,0xf8d0e016,0x230020bc,0x7519f242,0xe0036013,
+0xf001200a,0x3d0afa3f,0x30bcf8d4,0xf41368db,0xd0014070,0xd1f32d09,
+0x0001f1d0,0x2000bf38,0x46c0bd70,0x30d4f8d0,0x4604b570,0x2001b90b,
+0xf8d0e033,0x230220b8,0x7519f242,0xe0036013,0xf001200a,0x3d0afa1f,
+0x30b8f8d4,0xf41368db,0xd0074370,0x5f00f5b3,0xf5b3d004,0xd0015f40,
+0xd1ed2d09,0x20b8f8d4,0xf2422300,0x60137519,0x200ae003,0xfa06f001,
+0xf8d43d0a,0x68db30b8,0x4670f413,0x2d09d001,0xf44fd1f3,0xf0017096,
+0xf1d6f9f9,0xbf380001,0xbd702000,0x47ffe92d,0x93032300,0x60dcf8d0,
+0x460f4604,0x460d4692,0xf8d4e037,0xf10630d4,0xf8d40801,0xf10320d8,
+0xea083eff,0x4293030e,0xc010f8d5,0x8b298aa8,0x9000f8d5,0x180ad057,
+0x2300d022,0x930342bd,0xf103bf04,0x93034300,0x0f00f1b9,0x9b03d103,
+0x43c0f043,0x45769303,0x9b03d103,0x5380f043,0xab039303,0x92019300,
+0xf8d44633,0x462010d0,0xf7ff4662,0xf8d4f873,0x3b0130d4,0x0603ea08,
+0x2d00464d,0x9803d1c5,0x4f80f010,0xf8d4d10a,0x1e7230d4,0x401a3b01,
+0x10d0f8d4,0xf0400112,0x508b43c0,0x20d4f8d4,0x30e0f8d4,0x3a011e71,
+0xf8434011,0xf8c47021,0xf1ba60dc,0xd0030f00,0x20c0f8d4,0x60530133,
+0x00d8f8d4,0x20d4f8d4,0x10dcf8d4,0x1a091e53,0x1ad2400b,0x46283a01,
+0x2090f8c4,0xf8d4e00f,0x463900ac,0xf0002201,0x2300fdeb,0x3090f8c4,
+0x309cf8d4,0x30fff04f,0xf8c43301,0xb004309c,0x87f0e8bd,0x4604b570,
+0xe004460d,0x00acf8d4,0xf0002201,0x4629fdd5,0xf7ff4620,0x4601fadd,
+0xd1f32800,0x46c0bd70,0x47ffe92d,0x93032300,0x60dcf8d0,0x460f4604,
+0x460d4692,0xf8d4e037,0xf10630d4,0xf8d40801,0xf10320d8,0xea083eff,
+0x4293030e,0xc010f8d5,0x8b298aa8,0x9000f8d5,0x180ad057,0x2300d022,
+0x930342bd,0xf103bf04,0x93034300,0x0f00f1b9,0x9b03d103,0x43c0f043,
+0x45769303,0x9b03d103,0x5380f043,0xab039303,0x92019300,0xf8d44633,
+0x462010cc,0xf7fe4662,0xf8d4ffab,0x3b0130d4,0x0603ea08,0x2d00464d,
+0x9803d1c5,0x4f80f010,0xf8d4d10a,0x1e7230d4,0x401a3b01,0x10ccf8d4,
+0xf04000d2,0x508b43c0,0x20d4f8d4,0x30e0f8d4,0x3a011e71,0xf8434011,
+0xf8c47021,0xf1ba60dc,0xd0030f00,0x20b8f8d4,0x609300f3,0x00d8f8d4,
+0x20d4f8d4,0x10dcf8d4,0x1a091e53,0x1ad2400b,0x46283a01,0x2090f8c4,
+0xf8d4e00f,0x463900ac,0xf0002201,0x2300fd51,0x3090f8c4,0x309cf8d4,
+0x30fff04f,0xf8c43301,0xb004309c,0x87f0e8bd,0x4604b570,0xe004460d,
+0x00acf8d4,0xf0002201,0x4629fd3b,0xf7ff4620,0x4601f923,0xd1f32800,
+0x46c0bd70,0x4604b510,0xf8d4e004,0x220000ac,0xfd2af000,0x46202101,
+0xfa76f7ff,0x28004601,0xbd10d1f3,0x4604b570,0xe0252500,0xf8d42d00,
+0xdd092124,0x0305ebc2,0x00acf8d4,0xea232200,0xf00075e3,0xe017fd11,
+0xf8d4690b,0x881b012c,0x42931a12,0xb10bd90d,0x0503ebc2,0x00acf8d4,
+0xf0002200,0xf8d4fd01,0x33013094,0x3094f8c4,0x18c3e002,0xe006828b,
+0x46202100,0xfa44f7ff,0x28004601,0x4608d1d2,0x46c0bd70,0x4604b510,
+0x49044608,0xf916f7fe,0x2000b108,0xf104e001,0xbd100090,0x00017a28,
+0x43f0e92d,0x2100f8d0,0x5108f8d0,0x3104f8d0,0xebc33a01,0x401a0305,
+0x3128f8d0,0xebc2b085,0xf8d00903,0x46043124,0xbf8c2ba4,0x270027a4,
+0x46982300,0xe0519303,0x1124f8d4,0x00acf8d4,0xf0001879,0x4601fcd3,
+0xf8d4b928,0x33013098,0x3098f8c4,0xb12fe044,0x19db6903,0x8a836103,
+0x82831bdb,0x210cf8d4,0x2300690e,0xf8426033,0x93031025,0x30b4f894,
+0x2100f8d4,0x1e53b19b,0xbf08429d,0x5380f04f,0x2124f8d4,0x9303bf08,
+0x9300ab03,0xf8d49201,0x462010fc,0x462b4632,0xfed8f7fe,0x1e53e012,
+0xbf08429d,0x5380f04f,0x2124f8d4,0x9303bf08,0x9300ab03,0xf8d49201,
+0x462010f8,0x462b4632,0xfe96f7fe,0x3100f8d4,0x3b011c6a,0x0503ea02,
+0x0801f108,0xd1ab45c8,0x30b4f894,0x5108f8c4,0xf8d4b123,0x012b20c4,
+0xe0036053,0x20bcf8d4,0x609300eb,0xe8bdb005,0x46c083f0,0x4b15b537,
+0x60134615,0x4b13e001,0x32046013,0x037cf1ad,0xd3f8429a,0xf0203003,
+0x4b0f0003,0x0401ebc0,0x4b0e601c,0x60192100,0xf5054b0d,0x60195200,
+0x3c084b0c,0x4b0c6019,0x601d6041,0x601a4b0b,0x22084b0b,0x4b0b6019,
+0x4b0b601a,0x60586004,0x46c0bd3e,0x5354414b,0x0001c680,0x0001c628,
+0x0001c654,0x0001c684,0x0001c62c,0x0001c630,0x0001c63c,0x0001c61c,
+0x0001c670,0xe0074906,0xd1044282,0x600b6813,0x60932300,0x4611e003,
+0x2a00680a,0x4770d1f4,0x0001c658,0xb5106a83,0x2300b123,0x30106283,
+0xffe8f7ff,0xbd102001,0xf000b510,0xbd10fee7,0x4604b510,0xfedcf000,
+0xf0004620,0x4620fe91,0xfff2f7ff,0x46c0e7fb,0x4d03b570,0xf000682c,
+0x1900fe63,0xbd706028,0x0001c620,0xb5104b0d,0xf7ff681c,0x490cfff1,
+0x1ac2680b,0x6008d010,0x6863e00c,0xd8064293,0x23001ad2,0x33016063,
+0x68247423,0x1a9be002,0xe0016063,0xd1f02c00,0x46c0bd10,0x0001c658,
+0x0001c650,0xb5104b03,0x4b036818,0xf7fe6819,0xbd10f987,0x0001c634,
+0x0001c64c,0xb5704b09,0xf7fc6818,0x4b08fdbb,0x681c4605,0x68e3e007,
+0xd003421d,0xb10b6863,0x479868a0,0x2c006824,0xbd70d1f5,0x0001c634,
+0x0001c648,0x6fe0f5b1,0x4605b573,0x4616460c,0x6a03d106,0x21009100,
+0x681c9101,0xe00c460a,0x22004b0d,0xf7fc6818,0x4601ffcd,0x6a2bb180,
+0x94002200,0x681c9201,0x46334628,0xb13847a0,0x62a84a06,0x20006813,
+0x626e632b,0xe0016015,0x30fff04f,0x46c0bd7c,0x0001c634,0x0001c638,
+0x4b07b570,0x681c4605,0x4620e005,0xf7fd4629,0xb110ff9d,0x2c006b24,
+0x4620d1f7,0x46c0bd70,0x0001c638,0x41f0e92d,0x4616460d,0x4604461f,
+0x6883b310,0xf7ffbb03,0x4912ff71,0xe0014628,0x46111ac0,0xb122680a,
+0x42836853,0x1a1bd9f8,0x4b0c6053,0x600c6022,0x60a6681b,0x60e7429c,
+0xd10b6060,0x781b4b08,0xf000b143,0x2201fe2b,0x46104b06,0xe002701a,
+0xe0002000,0xe8bd2001,0x46c081f0,0x0001c658,0x0001bc44,0x0001c644,
+0x460db570,0xb1484604,0x62832301,0x626162c2,0x0010f100,0x46234a02,
+0xffbcf7ff,0x46c0bd70,0x00003c7d,0xb5104a11,0x4c112300,0x68237013,
+0xf7ffb17b,0xe007ff2b,0x688a680b,0x23006023,0x740b608b,0x479068c8,
+0xb1116821,0x2b017c0b,0x4b06d0f2,0xb943781b,0x681b4b05,0x6858b11b,
+0xfde8f000,0xf000e001,0xbd10fd89,0x0001c644,0x0001c658,0x41f0e92d,
+0x4a3e4b3d,0x8140f8df,0x4e3d1ad2,0xf8d84b3d,0x1af65000,0x4b3d4c3c,
+0xf505b08e,0x483c5500,0x18ad1ae4,0xf7fd920b,0x0ab3ffef,0x19ad9a0b,
+0x23089300,0x4611192d,0x0a929401,0x93030aa4,0x46334834,0x4e349402,
+0xffdef7fd,0x68304b33,0xf8d86819,0xebc04000,0x0a9a0301,0x0a809001,
+0x90029200,0x94030a8a,0x0aa4482d,0xf7fd9404,0x4b2cffcb,0x6819482c,
+0x18c96833,0x0a8a0aab,0x462b9300,0xffc0f7fd,0x48294b28,0xf7fd6819,
+0x4b28ffbb,0x4b28681f,0x429a683a,0x4827d003,0xffb2f7fd,0x970de024,
+0x6832e005,0x429a4b22,0x1d33d105,0x9e0d930d,0x429eab0c,0x4b20d3f5,
+0x0006ebc7,0xab0d681a,0x0103ebc7,0x0402ebc3,0x0502ebc6,0x91019200,
+0x90039102,0x46399004,0x46324818,0x94069405,0x95089507,0xff8cf7fd,
+0xe8bdb00e,0x46c081f0,0x00000000,0x0001bc35,0x0001c530,0x0001bc38,
+0x0001c710,0x0001c530,0x00017a31,0x00017a40,0x0001c628,0x0001c680,
+0x00017a78,0x0001c654,0x00017abc,0x0001c63c,0x00017af4,0x0001c62c,
+0x5354414b,0x00017b0e,0x0001c630,0x00017b31,0x0001c684,0xb5704b19,
+0x4a19681e,0xebc64686,0x68040000,0x4d176813,0x60131b1b,0x68134a16,
+0x60131b9b,0x4281e002,0x460dd203,0x29006869,0xeb0ed1f9,0x428b0304,
+0xf85ed107,0x19332004,0x6003189b,0x6043684b,0x6041e000,0xf102682a,
+0x194b0108,0xd1064283,0x594a1993,0x602b189b,0x606b6843,0x6068e000,
+0xbd702000,0x0001c61c,0x0001c628,0x0001c670,0x0001c654,0xb108b510,
+0xffc0f7ff,0x46c0bd10,0x4604b510,0x6a83b1b8,0x6ac3b1ab,0x6283b90b,
+0xf100e006,0x6a610010,0x46234a07,0xfe96f7ff,0xb10b68a3,0x47984620,
+0x3030f894,0xd1022b01,0xf7ff4620,0xbd10ffdf,0x00003c7d,0xb5701cc3,
+0x0503f023,0xebc0460a,0x42910105,0xebc1d81c,0xf0230302,0x4b0e0003,
+0xf1016819,0x42980308,0x4a0cd312,0x0400ebc1,0x18c36813,0x4a0a6013,
+0x6813602c,0x18e31868,0x4a086013,0x185b6813,0xf7ff6013,0xe000ff7b,
+0x46202400,0x46c0bd70,0x0001c61c,0x0001c680,0x0001c628,0x0001c654,
+0x408b2301,0x5f80f5b3,0xf44fbf28,0xe92d5380,0x2b044ff7,0x469bbf2c,
+0x0b04f04f,0xf04f4b3a,0xf8d30900,0x4b39a000,0x681f3003,0xc0f0f8df,
+0x0503f020,0x46c8464e,0x9004f8cd,0x6820e017,0xd31342a8,0xeb0119e1,
+0xf1cb0e00,0xebc50200,0x401a030e,0xd309428a,0x0300ebc5,0xd2054553,
+0x462646f1,0xc004f8cd,0x4690469a,0xf8dc46a4,0x2c004004,0x4634d1e3,
+0xd03b2e00,0x0309ebc8,0x0103ebc5,0x0008f107,0xd8014281,0xe00b186d,
+0xeb086833,0x1a5b0205,0xebc76033,0xf8480301,0x68733005,0x60726053,
+0x1b5b6833,0xf1bbd004,0xd1050f04,0xd8034283,0x9a016873,0xe00a6053,
+0xd20442bb,0x68134a12,0x60133301,0x511de012,0x1bdb199e,0x490f6023,
+0x680b6832,0x4a0e18d0,0x68136008,0x601319db,0x68134a0c,0xbf884298,
+0xb92e6010,0x20004a06,0x33016813,0xe0006013,0xe8bd19f0,0x46c08ffe,
+0x0001c680,0x0001c61c,0x0001c63c,0x0001c628,0x0001c654,0x0001c684,
+0x0001c670,0x47f0e92d,0x460f2010,0x46902100,0xf7ff4699,0x4606ff65,
+0xf06fb910,0xe01c001a,0x68204c0f,0xfb38f7fc,0x46424639,0x68204605,
+0xfd4cf7fc,0xf7fc6820,0x2301fe07,0x4a094083,0x9b0860f3,0x9004f8c6,
+0x681360b3,0x60336820,0x60164629,0xfd2cf7fc,0xe8bd2000,0x46c087f0,
+0x0001c634,0x0001c648,0x4b21b530,0xa904b085,0x3d04f841,0x5100f5a1,
+0x481e460a,0xfc8ef7ff,0xfbc4f000,0xf9b4f000,0xf0002000,0x4b1af911,
+0x60184d1a,0xfd46f018,0x60282100,0xfd08f7fc,0x24004b17,0x4b176018,
+0x6070f500,0xf44f4622,0x60186100,0x46204b14,0xf7ff9400,0x6828ffa3,
+0xfbf0f000,0xfb3cf000,0xf0006828,0x4622f9c3,0x490f480e,0xf974f000,
+0x490f480e,0xf0004622,0x4b0ef96f,0x605c6828,0x601c4b0d,0xbd30b005,
+0xdeaddead,0x00025014,0x0001c66c,0x0001c634,0x0001c64c,0x0001c624,
+0x00003901,0x00017bae,0x00003aa9,0x00017bb1,0x00003fc9,0x0001c678,
+0x0001c640,0x41f0e92d,0x46884607,0x21002034,0x461e4615,0xfed4f7ff,
+0xb1584604,0x22342100,0xfd5af7fd,0x60272300,0x60e660a5,0x8004f8c4,
+0x62e362a3,0xe8bd4620,0x46c081f0,0x461db570,0xf7ff2300,0x4604ffdf,
+0x2301b160,0x3030f880,0x22004629,0xfd40f7ff,0x2000b108,0x4620e004,
+0xfe58f7ff,0x0015f06f,0x46c0bd70,0xb5702901,0x6850d940,0x220a2100,
+0xfcd4f7fd,0x46044b20,0x4290681a,0x491fd91d,0xb10b684b,0xe7fb4619,
+0x0504ebc2,0xe011460c,0x6080f44f,0xf7ff2100,0x6060fe8f,0xf44fb330,
+0x21006280,0xfd14f7fd,0x68644a13,0x3d016813,0x60133301,0xd1eb2d00,
+0xd217e018,0xebc44b0f,0x68580502,0x6843e00a,0x3d014c0c,0xf7ff6063,
+0x4a09fde1,0x68136860,0x60133b01,0x2800b10d,0x4b05d1f1,0xb90a681a,
+0x605a4b04,0x48044b02,0xf7fd6819,0xbd70fd2d,0x0001c640,0x0001c678,
+0x00017bb4,0xe003460a,0x68126803,0x60033301,0xd1f92a00,0x47704608,
+0x460ab510,0x46084604,0x6823e003,0x3b016812,0x2a006023,0xbd10d1f9,
+0x4604b570,0xb122460d,0xb1136883,0x220068c0,0x462a4798,0x6823e003,
+0x3b016812,0x2a006023,0x4628d1f9,0xf826f000,0x46c0bd70,0x4604b510,
+0xf0004608,0xb110f82d,0x33016823,0xbd106023,0x4608b510,0xfd8ef7ff,
+0x46c0bd10,0xb108b510,0xfd88f7ff,0x46c0bd10,0x2100b570,0x20104605,
+0xfe12f7ff,0x22102100,0xf7fd4604,0x4620fc99,0xbd706065,0xe005b510,
+0x68044b04,0xf7ff6103,0x4620fd71,0xd1f72800,0x46c0bd10,0xdeadbeef,
+0xe92d1cc3,0xf02341f0,0x46070603,0x013cf106,0x4b102200,0x320458d5,
+0xd90242a9,0xd1f82a18,0xb19de014,0x21004628,0xfde6f7ff,0x2100b170,
+0x4604223c,0xfc6cf7fd,0x033cf104,0x195b60a3,0x60e33b3c,0x61231b9b,
+0xe00082a7,0x46202400,0x81f0e8bd,0x00017bc4,0x40998983,0x5cc86883,
+0x46c04770,0xb2d28983,0x68834099,0x477054ca,0xb5704b17,0x4605681c,
+0x280ab34c,0x200dd102,0xfff6f7ff,0xb1726962,0x54d56923,0x33014a11,
+0x0202ea03,0xda052a00,0xea6f3a01,0xea6f5282,0x32015292,0xf8d46122,
+0xb183309c,0x3ffff1b3,0x2105d00d,0x009cf8d4,0xffcef7ff,0x0f20f010,
+0xf8d4d0f7,0x2100009c,0xf7ff462a,0xbd70ffcb,0x0001c69c,0x800003ff,
+0xe92d4b0a,0x460541f0,0x2010460e,0x681c2100,0xf7ff4690,0xf8d4fd85,
+0x600530a0,0x604660c3,0x8008f8c0,0x00a0f8c4,0x81f0e8bd,0x0001c69c,
+0x20a4b570,0xf7ff2100,0x4d14fd73,0xb1806028,0x22a42100,0xfbf8f7fd,
+0x6080f44f,0x682c2100,0xfd66f7ff,0x68286160,0xb92c6944,0xfccef7ff,
+0xf04f602c,0xe00f30ff,0xf44f6144,0x46206280,0xf7fd2100,0x682afbe1,
+0x69532000,0xf44f6093,0x60d36380,0x601a4b02,0x46c0bd70,0x0001c698,
+0x0001c69c,0x2240b570,0x49272300,0x4d274606,0xfce0f7fd,0x23004a26,
+0x682b6093,0x4c25b933,0xb90b6823,0xffbcf7ff,0x602b6823,0x23884c1f,
+0x605a6822,0xd0362a00,0x3b0e6bb3,0xd9032b01,0x491d4630,0xfcfaf7fd,
+0x688a4919,0x6823b132,0x109cf8c3,0x25004b15,0xe01c681c,0x601a6823,
+0xf04f605a,0xf8c332ff,0xe7f3209c,0x309cf8d4,0x3ffff1b3,0x2105d00e,
+0x009cf8d4,0xff38f7ff,0x0f20f010,0x6963d0f7,0x009cf8d4,0x5d5a2100,
+0xff34f7ff,0x69233501,0xd3e7429d,0x49084807,0xf7ff4622,0xbd70ff65,
+0x000043e1,0x0001c69c,0x0001c688,0x0001c698,0x0000436d,0x00017bdc,
+0x00004351,0xf8d0b510,0xe00440a0,0x48036821,0xfbaaf7fd,0x2c0068e4,
+0xbd10d1f8,0x0001a52e,0x4d1bb570,0x2e0068ae,0x0914d131,0x81ab602c,
+0x4461f504,0x33e1f44f,0xf4f3fb94,0x606960a8,0x21034628,0xf7ff2280,
+0x4628fef9,0xb2e24631,0xfef4f7ff,0x21014628,0xf7ff1222,0x2103feef,
+0x4628460a,0xfeeaf7ff,0x460a2101,0xf7ff4628,0x4628fee5,0x22082104,
+0xfee0f7ff,0x21024628,0xf7ff2201,0xf44ffedb,0xf000707a,0xbd70f9eb,
+0x0001c688,0xe92d4b64,0x681e47f0,0x009cf8d6,0xf0002800,0xf1b080be,
+0xd0073fff,0xf7ff2102,0xf000febf,0x2801000f,0x80b3f000,0x009cf8d6,
+0x3ffff1b0,0x6834d110,0xf0002c00,0x61b480aa,0x19732500,0x35017f18,
+0xfeb6f7ff,0xd1f842a5,0xf7ff200a,0xe031feb1,0xf7ff2105,0xf010fea1,
+0xf0000f01,0x21008096,0x009cf8d6,0xfe98f7ff,0x4604280d,0x2808d011,
+0x287fd001,0x69b3d10e,0xf0002b00,0x3b018086,0x200861b3,0xfe94f7ff,
+0xf7ff2020,0x2008fe91,0x240ae074,0xf7ff4620,0x69b3fe8b,0xeb032c0a,
+0xd0050206,0x2b7f3301,0x61b37714,0xe001d96d,0x77132300,0xf8d67f33,
+0x2b0080a0,0xf04fd052,0x464d0900,0xf1062700,0x4638011c,0x3101e000,
+0x2c20780c,0xb304d0fb,0xf849b10d,0x37011027,0x2b22e00d,0xf080d10a,
+0xb13d0001,0xf812460a,0xf8023f01,0x2b003c01,0x3901d1f9,0x780b3101,
+0x2800b11b,0x2b20d1ed,0x2d00d1eb,0x2b00d0e0,0x2300d0de,0x3b01f801,
+0xb92de7da,0x00801c78,0xf7ff4621,0x4681fc09,0x2d023501,0xf849d1ca,
+0xb94f4027,0xf8d8e013,0xf8d90000,0xf7fd1000,0xb128f9e5,0x800cf8d8,
+0x0f00f1b8,0xe018d1f3,0x3004f8d8,0x0008f8d8,0x464a4639,0x46484798,
+0xfb58f7ff,0x309cf8d6,0xf1b32200,0xbf083fff,0x61b26032,0xf7ff203e,
+0x2020fe1b,0xfe18f7ff,0x4804e003,0xfaa4f7fd,0xe8bde7e9,0x46c087f0,
+0x0001c69c,0x00017bde,0xb5104b09,0x4c09681b,0x1614f8d3,0xebc36823,
+0x4b070201,0x42826818,0x2000d201,0x6021e002,0xf0f0fbb2,0x46c0bd10,
+0x0001c64c,0x0001c6ac,0x0001bc48,0x681a4b03,0xf8c22300,0xf8d23644,
+0x47703644,0x0001c64c,0x46c04770,0x6801b513,0xf1a14604,0x2b0f0310,
+0xf7ffd802,0xe02af99f,0x686268c3,0x48149300,0xf7fd68a3,0x69e3fa65,
+0x93006921,0x69a36962,0xf7fd4810,0x6ae3fa5d,0x93006a21,0x6aa36a62,
+0xf7fd480d,0x6be3fa55,0x93006b21,0x6ba36b62,0xf7fd480a,0x6ce3fa4d,
+0x93004809,0x6c626c21,0xf7fd6ca3,0xf240fa45,0xf7fb10e3,0xbd1cfdd3,
+0x00017be1,0x00017c12,0x00017c44,0x00017c76,0x00017ca8,0xf04fb510,
+0xf7fb4000,0xbd10fd81,0xf04fb510,0xf7fb4000,0xbd10fd5d,0xf000b510,
+0xbd10f8e1,0x4c12b510,0x68234a12,0xd90a4298,0x0300ebc3,0xf7ff6013,
+0x4b0ff917,0x61a0f04f,0x68206018,0x2300e003,0xf04f6013,0xb9086110,
+0xe0033002,0x681b4b09,0xf000fb03,0x681a4b08,0x0301ea40,0x3644f8c2,
+0x3644f8d2,0x46c0bd10,0x0001bc4c,0x0001c6a8,0x0001c6a4,0x0001bc48,
+0x0001c64c,0xf7ffb510,0xbd10fa95,0x460cb510,0xf7ff210c,0xb100fb21,
+0xbd106020,0x4604b510,0xf8eef000,0xf7fb4816,0x4620fd6d,0xf89cf000,
+0x4a154b14,0xfbb318c3,0x4a14f3f2,0x60134620,0xffdaf7fb,0x7078f500,
+0xf44f3007,0xfbb0737a,0x4b0ff0f3,0x60184a0f,0x490f69e3,0xbfcc2b00,
+0x437ff06f,0x33fff240,0x4a0a6013,0xfbb36813,0x6013f3f0,0x22204620,
+0xf7fd2300,0xbd10fa8f,0x000045c9,0x000f423f,0x000f4240,0x0001bc50,
+0x0001bc48,0x0001bc4c,0x00004761,0xb5104b10,0xf8d2681a,0xf0133644,
+0xd0187f00,0x4c0d2340,0x3608f8c2,0x3608f8d2,0xff18f7ff,0xb1636823,
+0xf892f7ff,0x681b4b08,0x0300ebc3,0x42986820,0x1ac0d903,0xff66f7ff,
+0xf7ffe001,0xbd10f95b,0x0001c64c,0x0001c6a8,0x0001c6a4,0x4604b570,
+0xfcecf7fb,0x46054b07,0xfb03681b,0x42840404,0xf7fbd203,0x42a8fce3,
+0xf7fbd8fb,0x42a0fcdf,0xbd70d3fb,0x0001bc50,0x41f0e92d,0x783e4f0c,
+0x4b0cb9a6,0x1b5c4d0c,0x4631d008,0x46224628,0xf91ef7fd,0x46214628,
+0xfa5cf7ff,0x46214807,0xf956f7fd,0x701e4b06,0x703b2301,0x81f0e8bd,
+0x0001c6a0,0x00025014,0x0001c710,0x00017cd9,0x0001c6b0,0x4770bf30,
+0x4604b510,0xfe1cf7fb,0x46204601,0xfb6cf7fd,0x46c0bd10,0x47f0e92d,
+0x461e4607,0x460c4615,0xfe0ef7fb,0xf7fb4638,0x4629fe3f,0x46814632,
+0xf7fc4638,0x4638f853,0xf90ef7fc,0x012af640,0x22004606,0xf7fc4638,
+0x4605f849,0x2401b18c,0xf306fa14,0xea326982,0xd1020803,0xf7fb4620,
+0x1c70fc63,0xf000fa14,0xfc40f7fb,0x8018f8c5,0x2401e00c,0xfa141c70,
+0xf7fbf000,0x4620fc55,0xf7fb40b4,0x69abfc33,0x61ac431c,0x46494638,
+0xf816f7fc,0x87f0e8bd,0x4605b570,0xfdd0f7fb,0xf6404628,0x2200010e,
+0xf818f7fc,0xb1c84604,0x46286806,0xf8c2f7fc,0xd9132804,0x49312000,
+0xfe30f7fc,0xf3c6b970,0xe0031203,0x3a014b2e,0x61636122,0xd1f92a00,
+0x31e8f8d4,0x0310f023,0x31e8f8c4,0xf6402200,0x4628012a,0xfff6f7fb,
+0x60204c26,0xf7fc4628,0x4b25f8a1,0x60186822,0x24a1f643,0xf8c22300,
+0xe00331e0,0xf7ff200a,0x3c0aff39,0x68334e1d,0x31e0f8d3,0x3f00f413,
+0x2c09d101,0x2100d1f2,0x4628460b,0x6200f44f,0xff70f7ff,0x460b2100,
+0xf6404628,0xf7ff0212,0x2100ff69,0x0229f640,0x4628460b,0xff62f7ff,
+0xf2476832,0x68135439,0x7380f043,0xe0036013,0xf7ff200a,0x3c0aff0f,
+0x681a4b08,0x31e0f8d2,0x3f00f413,0x2c09d101,0x6a13d1f2,0x0303f043,
+0xbd706213,0x00017d0b,0x21017fff,0x0001c6b4,0x0001c6b8,0x4604b570,
+0xfd52f7fb,0xf7fc4620,0x4605f85b,0xf7fb4620,0x2200fd7f,0xf6404606,
+0x4620012a,0xff92f7fb,0x40ab2301,0x42136982,0x2500d001,0x3501e000,
+0x46314620,0xff78f7fb,0xbd704628,0x8a934602,0x1a406900,0x611018c9,
+0x47708291,0x8a934602,0x1a5b6900,0x61101840,0x47708293,0x47708281,
+0x69c06942,0x40186a13,0x47706210,0x4604b510,0xfff6f7ff,0x6220b108,
+0xbd102001,0x22006943,0x6a9b629a,0x47706182,0x694369c2,0x629a6182,
+0x46c04770,0x4604b510,0xffe2f7ff,0x43036a23,0xbd106223,0x30fcf8d0,
+0xf8904319,0xf8c03177,0xb1e310fc,0x0f04f011,0xf890d005,0xea413178,
+0xf8c06303,0xf8d030fc,0x694230fc,0x0f0af013,0xf443bf1c,0xf8c02380,
+0xf8d030fc,0x64d330fc,0xf8c02300,0xf88030fc,0x33083177,0x47706453,
+0x41f3e92d,0x5020f89d,0x4607460e,0x21004698,0x5d8be002,0x3101b113,
+0xd1fa4291,0xb1135c73,0x0001f06f,0xb15de07c,0x1c4c1d4b,0xd9024293,
+0x000df06f,0xa801e074,0x22041931,0xffc0f7fc,0x46201d34,0xf7fc4937,
+0xb928fef9,0xd0542d00,0x2b0f9b01,0xe04ad85f,0x49334620,0xfeeef7fc,
+0x3001b908,0x4620e042,0xf7fc4930,0xb908fee7,0xe03b3002,0x492e4620,
+0xfee0f7fc,0xb90db990,0xe03b3003,0x2a009a01,0x68fbd02f,0xf0136bdb,
+0xd1430f04,0xd83e2a07,0x40932301,0x0f83f013,0xe038d123,0x49234620,
+0xfec8f7fc,0x3004b908,0x4620e01c,0xf7fc4920,0xb908fec1,0xe0153005,
+0x491e4620,0xfebaf7fc,0x3006b908,0x4620e00e,0xf7fc491b,0xb908feb3,
+0xe0073007,0x49194620,0xfeacf7fc,0x3008b9d0,0x2003e000,0x9b01b135,
+0x0280eb07,0x3194f8c2,0x4628e00b,0x0180eb07,0x71caf501,0x22044630,
+0xff5af7fc,0xf8c82304,0x20003000,0xf06fe004,0xe001001c,0x0016f06f,
+0x81fce8bd,0x00017d34,0x00017d41,0x00017d4d,0x00017d59,0x00017d60,
+0x00017d69,0x00017d70,0x00017d7b,0x00017d87,0x4604b570,0xe0062500,
+0x68a0b125,0x22014629,0xfa42f7ff,0x6a604635,0x6ac32100,0x46064798,
+0xd1f12800,0xf8d4b175,0xb11910f4,0x220168a0,0xfa32f7ff,0x30f8f8d4,
+0x50f4f8c4,0xbf0842ab,0x60f8f8c4,0x46c0bd70,0x41f0e92d,0x27004605,
+0xf895e055,0xb12331b9,0x31b8f895,0x4620b10b,0x68a8e00a,0xf7fc4631,
+0xf8d5fa57,0x681b30f0,0xd9064298,0x0028f105,0x46322100,0xfa70f7fc,
+0x6a68e04a,0x47986e03,0xf8956a68,0xf8d04105,0x47983084,0xf8851824,
+0x69344106,0x71a32300,0x3178f895,0x72234631,0x3106f895,0xf8852201,
+0xb2db3107,0xf8d57263,0x6a6831c4,0xf8c53301,0x6a0331c4,0xb9d04798,
+0x10f8f8d5,0x29007963,0xf013d033,0xd0300f0f,0x78237862,0x2302ea43,
+0x091b330f,0x690a0a1a,0x2300bf18,0xf8957193,0x72133178,0x2301e021,
+0x31b8f885,0xf8d5461f,0x681b30f0,0xf105b143,0x46200428,0xf7fc2100,
+0x4606fa41,0xd19c2800,0x696ab117,0x64532304,0x2b0c8deb,0x6928d903,
+0xf8e6f001,0x2b07e00d,0x6928d80b,0xf8e2f001,0xf895e007,0xf8c531b9,
+0x2b0060f8,0x2701d1d7,0xe8bde7d9,0x46c081f0,0xf8d0b570,0x461531a4,
+0x46048dc2,0x468e429a,0x2d02d30c,0x6880d10a,0xf7ff2201,0xf8d4f995,
+0x200031a8,0xf8c43301,0xe00e31a8,0xf1042100,0x46720028,0xf9d0f7fc,
+0xd1022d02,0x31a0f8d4,0x4620b913,0xff58f7ff,0xbd702001,0x4ff0e92d,
+0xb0872400,0x94049201,0xf8909403,0x4680a174,0xf8d0460e,0xf1ba9008,
+0xd0010f00,0xe0134648,0x688a690b,0x0501f003,0x0b0cf105,0x455b1a9b,
+0x8a8fd21f,0xf1074648,0x1949010c,0xf972f7ff,0xb9304604,0x46314648,
+0xf7ff2201,0x4620f955,0x4659e07b,0xfe0ef7ff,0x463a6931,0xf7fc6920,
+0x6833fe3b,0x60234631,0x46524648,0xf944f7ff,0xb1454626,0x46302101,
+0xfdf4f7ff,0x21006930,0xf7fc2201,0x210cfe09,0xf7ff4630,0x4648fdeb,
+0x69374631,0xf960f7fc,0x300cf8d8,0x0016f8ad,0xa034f8d3,0x0f02f1ba,
+0x6bdbd124,0x0f04f013,0xf898d020,0x2b0131ba,0x4631d11c,0xf7fc4648,
+0xf8bdf953,0x8a843016,0x4605330f,0x030ff023,0x4638a905,0xf8ad4652,
+0xf7fc3014,0xf8bdfdfd,0x46283014,0xf8bd18e4,0x1ae43016,0xf7ffb2a1,
+0xe005fdc9,0xf10d4638,0x22020116,0xfdecf7fc,0x3016f8bd,0x43dba906,
+0x3d02f821,0x1cb82202,0xfde2f7fc,0xa9039a01,0xf8980213,0xf4032104,
+0x43136370,0x630bea43,0x1d382208,0xf7fc9303,0x4640fdd3,0x9a014631,
+0xff3af7ff,0xf898b128,0x20013104,0xf8883301,0xb0073104,0x8ff0e8bd,
+0x2200b510,0xff52f7ff,0x46c0bd10,0x690bb510,0xf002791a,0x2a6002f0,
+0x2201bf14,0xf7ff2202,0xbd10ff45,0xb5708dc3,0xbb4b4605,0x211c6880,
+0xf8d0f7ff,0xb3184606,0xf7ff210c,0x6a68fd7b,0x47986e03,0xf8956a68,
+0xf8d04105,0x47983084,0x210c1824,0x4106f885,0xf7ff4630,0x4628fd63,
+0x22014631,0xff22f7ff,0xf8d5b928,0x330131cc,0x31ccf8c5,0xf8d5e004,
+0x330131c8,0x31c8f8c5,0x46c0bd70,0xf890b510,0xb90b3178,0xffcaf7ff,
+0x46c0bd10,0x3ffff1b2,0xd101b510,0xe00723ff,0xd0002a02,0xf082b90a,
+0x23010202,0xb2db4093,0xf8902901,0xd1012178,0xe0014313,0x0303ea22,
+0x3178f880,0xffaef7ff,0x46c0bd10,0x4604b570,0x25006a40,0x47986c83,
+0x68836a60,0x6a604798,0x47986e43,0x21016a60,0x47986a83,0x460a2100,
+0xf7fb68e0,0x68e0fbb5,0xfbacf7fb,0x10f4f8d4,0x5105f884,0x5104f884,
+0x50fcf8c4,0x68a0b129,0xf7ff2201,0xf8c4f849,0xf8c450f4,0x622550f8,
+0x5174f884,0x46c0bd70,0xe92d68c2,0x6b5341f3,0x2b024605,0x690f460e,
+0x6bd3d112,0x0f04f013,0xf890d00e,0x2b0131ba,0x883bd10a,0xb29b4630,
+0xb29b009b,0x8a89803b,0x39180089,0xfceaf7ff,0x46302108,0xfcdef7ff,
+0xb299887b,0x020ff011,0xf011d021,0xd0040f01,0x3154f8d5,0xf8c53301,
+0xf0113154,0xd0040f02,0x3158f8d5,0xf8c53301,0xf0113158,0xd0040f04,
+0x315cf8d5,0xf8c53301,0xf011315c,0xf0000f08,0xf8d580c2,0x33013160,
+0x3160f8c5,0x8ab3e0bb,0xd8072b03,0x3144f8d5,0x330168a8,0xf8c54631,
+0xe0b33144,0x69312202,0x0006f10d,0xfcd8f7fc,0x22026931,0xa8013102,
+0xfcd2f7fc,0x6b5368ea,0xd1262b02,0xf0136bd3,0xd0220f04,0x31baf895,
+0xd11e2b01,0xf8bd883b,0xb29b2006,0xd004429a,0x3148f8d5,0xf8c53301,
+0xf8bd3148,0x69303004,0xb29c43db,0xf1048801,0xf64f020f,0xea0273f0,
+0x42990303,0xb2a3d105,0x803b8004,0xf8ad883b,0x883b3006,0x1006f8bd,
+0x428bb29b,0x43cbd106,0xf8bd041b,0x0c1b2004,0xd015429a,0xb29b883b,
+0xd004428b,0x3148f8d5,0xf8c53301,0x43cb3148,0xf8bd041b,0x0c1b2004,
+0xd05c429a,0x314cf8d5,0xf8c53301,0xe056314c,0x46302104,0xfc4ef7ff,
+0x2b078ab3,0x6933d94f,0x78dc2108,0xf8934630,0x781f8001,0xf7ff3c0c,
+0x8ab3fc41,0x428bb2e1,0x4630d341,0xfc3af7ff,0x3105f895,0xd006429f,
+0x3150f8d5,0x7105f885,0xf8c53301,0xf8953150,0xf0083105,0x3301040f,
+0x3105f885,0x31b9f895,0xf018b1e3,0xd1010f40,0xd1172c01,0x31b4f8d5,
+0x2c013301,0x31b4f8c5,0xf8d5d105,0x330131bc,0x31bcf8c5,0xf8d5e004,
+0x330131c0,0x31c0f8c5,0xf8852300,0x462831b8,0xfd22f7ff,0x6928b924,
+0xf0004631,0xe00bfee1,0xd1042c02,0x46316928,0xfee0f000,0x68a8e004,
+0x22004631,0xff38f7fe,0x81fce8bd,0x4605b570,0x6c836a40,0xe0024798,
+0xf7ff4628,0x6a68feed,0x47986dc3,0x28004601,0x6a68d1f6,0x47986e43,
+0x6c436a68,0x6a684798,0x47986e03,0xf8956a68,0xf8d04105,0x47983084,
+0xf8851824,0x46284106,0xfe50f7ff,0x46c0bd70,0xf8d0b5f0,0xb0e521a4,
+0x2101460c,0x18524605,0xaf324668,0xf96cf7fc,0x21014638,0xf7fc2210,
+0x4628f967,0xfcb0f7ff,0x26006a68,0x60f8f8c5,0x47986883,0xf8d5b1ac,
+0xb19220f4,0x46314638,0xff36f7fb,0x60f4f8c5,0xf8bde00b,0xf8bd20ce,
+0x429a30cc,0x4668bf2c,0x4622a832,0xf7fb2100,0x6a68ff27,0x6ac32101,
+0x46044798,0xd1ec2800,0x4668e00e,0x888388c2,0xd204429a,0x46222100,
+0xff16f7fb,0x68a8e004,0x22014621,0xfec8f7fe,0x0628f105,0x21004630,
+0xff40f7fb,0x28004604,0x6a68d1e7,0x47986843,0x690be006,0x795a4628,
+0x020ff002,0xfd10f7ff,0xa8322100,0xff2ef7fb,0x28004601,0xe014d1f1,
+0xf8d58dea,0x429a31a4,0x68a8d90a,0x22014621,0xfea2f7fe,0x31a8f8d5,
+0xf8c53301,0xe00431a8,0x21004630,0xf7fb4622,0x4668fedf,0xf7fb2100,
+0x4604ff11,0xd1e32800,0xbdf0b065,0x4605b570,0x68436a40,0x6a684798,
+0x47986c43,0x6e036a68,0x6a684798,0x4105f895,0x3084f8d0,0x18244798,
+0xf8856a68,0x49224106,0x47986f03,0x1180f8d5,0x00f0f8c5,0xf8d5b189,
+0x23022184,0x0202ea81,0xf7fb68e8,0xf8d5fa17,0x23021180,0x460a68e8,
+0xfa2cf7fb,0xf8852300,0xf895317c,0xb10b3176,0xe0004b14,0x68ea4b14,
+0x6b5361eb,0xd8052b01,0xf0136bd3,0xd0010f04,0xe0002301,0xf8852300,
+0x696a31b9,0xf8852301,0xf8853175,0xf04f3177,0xf8c27380,0xf1033100,
+0x4628437f,0x317af885,0xfb16f7ff,0x21084628,0xfb20f7ff,0x46c0bd70,
+0x00017a28,0xc701ff0f,0x0701ff0f,0x41f0e92d,0x26006a04,0x4780f014,
+0x62064605,0xf7ffd006,0x4628fdb5,0xff92f7ff,0xe12c4634,0xda2e2c00,
+0x685b6943,0x0604f013,0xf890d017,0xb92b3174,0xf7ff4639,0x4628ff01,
+0xfed8f7ff,0xf8856928,0xf0007174,0x696afd3d,0x68134628,0xf0432102,
+0x60130304,0xfaeaf7ff,0x2301e011,0x3174f880,0xf0006900,0x4628fd2f,
+0xf7ff4631,0x4628fee5,0xfebcf7ff,0x6813696a,0x0304f023,0xf8956013,
+0xb10e6174,0xe0f62400,0x0f01f014,0x4628d007,0xf7ff2101,0x4628fed1,
+0xf7ff2101,0xf014fac7,0xd0090f02,0xf8852301,0xf8d53177,0xb11b30fc,
+0x46314628,0xfabaf7ff,0x7f80f414,0xf8d5d004,0x33013164,0x3164f8c5,
+0x7f00f414,0xf8d5d012,0xf8d53168,0x330110f4,0x3168f8c5,0x68a8b131,
+0xf7fe2201,0x2300fdb9,0x30f4f8c5,0x21004628,0xfea2f7ff,0x7f00f014,
+0xf8d5d004,0x3301316c,0x316cf8c5,0x6f80f014,0xf8d5d004,0x33013170,
+0x3170f8c5,0xea044859,0xb9080000,0xe0a24604,0x4f7cf414,0xf414d063,
+0xd1026080,0x46064607,0x6a68e00b,0x47986d03,0xbf181e07,0x6a682701,
+0x47986a43,0xbf181e06,0xf4142601,0xd00b6f00,0x6d036a68,0x28004798,
+0x2701bf18,0x6a436a68,0x28004798,0x2601bf18,0x5f80f414,0x6a68d00b,
+0x47986d03,0xbf182800,0x6a682701,0x47986a43,0xbf182800,0xf4142601,
+0xd0045f00,0x3138f8d5,0xf8c53301,0xf4143138,0xd0094f80,0x313cf8d5,
+0x33012701,0x313cf8c5,0x313cf8d5,0x3138f8d5,0x4f00f414,0xf8d5d00f,
+0xf8d53140,0x330110f4,0x3140f8c5,0x68a8b131,0xf7fe2201,0x2300fd45,
+0x30f4f8c5,0xb90f2601,0xe008b90e,0x4628b126,0xf7ff2100,0xb117fe29,
+0xf7ff4628,0xf014fdff,0xd0027f80,0xf7ff4628,0xf414fae3,0xd10c3390,
+0xe02c461e,0x36014628,0xfce6f7ff,0xd1052e04,0xf4436a2b,0x622b3380,
+0x2600e006,0x6dc36a68,0x46014798,0xd1ed2800,0x6e036a68,0x6a684798,
+0x4105f895,0x3084f8d0,0xf8954798,0x18242107,0x4293b2e3,0x4106f885,
+0xf895d009,0xebc33105,0xb2db0302,0xd8022b02,0xf7ff4628,0x2e03fc3b,
+0x2400bf94,0x8deb2401,0xf8d5b12b,0xb91331a0,0xf7ff4628,0x4620fac9,
+0x81f0e8bd,0x0101fc00,0x2400b570,0xf8804605,0x69004175,0xfccaf000,
+0xf7ff4628,0x68e8fc73,0xf7fb4621,0xf8d5f845,0xb1280190,0xf8caf7fe,
+0x0190f8d5,0xfac2f7fe,0x018cf8d5,0xf7feb128,0xf8d5f8c1,0xf7fe018c,
+0x68e8fab9,0xff5cf7fa,0x462968a8,0x72e8f44f,0xfce2f7fe,0x46c0bd70,
+0xb5102901,0xdd074604,0xf8c02300,0xf8c031b4,0xf8c031bc,0xe02831c0,
+0x21a4f8d4,0x48138de1,0xf9bef7fc,0x11a8f8d4,0xf7fc4811,0xf8d4f9b9,
+0xf8d431c0,0xf8d421bc,0x480e11b4,0xf9b0f7fc,0x113cf8d4,0xf7fc480c,
+0xf894f9ab,0xf8941106,0x480a2107,0xf9a4f7fc,0xf8d44809,0xf8d411c4,
+0xf8d421c8,0xf7fc31cc,0xbd10f99b,0x00017d8e,0x00017da4,0x00017db7,
+0x00017de2,0x00017dfe,0x00017e27,0x43f0e92d,0xf2414698,0xb08943e4,
+0x46164299,0xd1059f10,0x33f4f244,0xd101429a,0xe0002301,0x2b002300,
+0x80a6f000,0x70e8f44f,0xf7fe2100,0x4604faa9,0xf0002800,0x2100809d,
+0x72e8f44f,0xf7fc4605,0x2310f92b,0x31a4f8c4,0x0028f104,0x22312101,
+0x8008f8c4,0xf7fb6167,0x2300feb7,0x93019300,0x46309302,0x463a4641,
+0xf0179b11,0x60e8f8e7,0xd0772800,0xfe56f7fa,0x68e06020,0xf926f7fb,
+0x46066068,0x4a3d6960,0x493d6843,0x0301f083,0x0301f003,0xbf182b00,
+0x68224611,0x3176f884,0x0329f640,0xf8d4429a,0xf8d49008,0xd10ac00c,
+0xf500b926,0xf5007e00,0xe0087304,0x7e00f500,0x7308f500,0xf500e003,
+0xf5007e00,0x93007304,0x7344f240,0x23069303,0x33029304,0x93052710,
+0x46482600,0x46734662,0x97029701,0xf7fd9606,0x6260fb7b,0xd0352800,
+0x46314620,0x464368e2,0xfbecf000,0xb3686120,0xf8c42305,0x23023194,
+0x3198f8c4,0xf8c4331e,0x3344319c,0x31b0f8c4,0xf88468e3,0xf8c46179,
+0xf8c471a4,0xf8c461ac,0x6b5b61a0,0xd9092b01,0x49124630,0xfe3af7fb,
+0x4811b120,0xf8e8f7fc,0xe0032301,0xf7fc480f,0x2300f8e3,0x31baf884,
+0x490e480d,0xf7fe4622,0xe006fc7f,0x462168a0,0x72e8f44f,0xfbe4f7fe,
+0x46282500,0xe8bdb009,0x46c083f0,0x00017e5b,0x00017e63,0x00017e6d,
+0x00017e77,0x00017e90,0x00017eaa,0x00005715,0x30fff04f,0x46c04770,
+0xb5106a83,0xf0006998,0xbd10fb81,0x4604b510,0xf7ff6880,0xb130fd73,
+0xf1042100,0x460a001c,0xf86af7fe,0x68a0e002,0xf872f7ff,0x46c0bd10,
+0x6a84b510,0xf7ff68a0,0xb128f85d,0xf7ff68a0,0x4620f861,0xffe2f7ff,
+0x46c0bd10,0xb5106a83,0xf0006998,0xbd10fb61,0xb5106a8b,0x46116998,
+0xfb36f000,0x46c0bd10,0x6a84b510,0xf7ff68a0,0x68e0fe87,0xfb96f7fe,
+0xbd102000,0x6a84b570,0x69a04601,0xfadcf000,0x69a04605,0xfaa8f000,
+0x22342100,0x001cf104,0xf82ef7fc,0x68a04b03,0x62246263,0xfccaf7ff,
+0xbd704628,0x000059ed,0x6844b510,0xf7ff68a0,0x4620f831,0xffa6f7ff,
+0x46c0bd10,0x47f3e92d,0x46994f25,0x4605683b,0x46882b07,0xdc3f4692,
+0xfb6af7fe,0x46062100,0xf7fe2050,0x4604f97d,0xd0352800,0x22502100,
+0xf802f7fc,0x6065683b,0xf8a46023,0xf8c49014,0x60e68010,0xf2414620,
+0x464a41e4,0xf8cd4633,0xf8cd8000,0xf7ffa004,0x60a0fea1,0x2000b1e0,
+0x9a0b990a,0x95004b0f,0xf9ecf7fe,0x68a0b118,0xfe26f7ff,0x4b0ce010,
+0x681b490c,0x61a3683a,0xf7fc4628,0x480af837,0xf7fc4629,0x683bf815,
+0x33014620,0xe000603b,0xe8bd2000,0x46c087fc,0x0001c6bc,0x0000596d,
+0x0001c70c,0x00017eb3,0x00017ebf,0x8a934602,0x1a5b6900,0x61101840,
+0x47708293,0xf0008ac0,0x47700007,0xf0018ac3,0xf0230107,0x43190307,
+0x477082c1,0xf3c08ac0,0x47701000,0xb5708a8b,0x460c2b03,0xd9266880,
+0x782b690d,0x2b01091b,0x8acbd121,0xf64f78aa,0xea03611f,0xf0120101,
+0xbf18020f,0x1342ea41,0xbf1882e1,0x786982e3,0xf0014620,0xf7ff0107,
+0x782bffd5,0x0f08f013,0x8ae3d003,0x0308f043,0x462082e3,0xf7ff2104,
+0x2000ffbd,0x4621e004,0xf7fe2200,0x2001faa9,0x46c0bd70,0x688b690a,
+0x41f0e92d,0x0302ebc3,0x460c2b03,0xdc2c6886,0x46308a8f,0xf7fe1d39,
+0x4605faad,0x4621b930,0x22014630,0xfa90f7fe,0xe038462c,0xf7ff4620,
+0x4601ffa1,0xf7ff4628,0x4620ffa1,0xffa6f7ff,0xb1108aeb,0x0310f043,
+0xf023e001,0x69280310,0x82eb6921,0x3004463a,0xff66f7fb,0x46304621,
+0xf7fe2201,0x462cfa71,0x1f13e004,0x8a8b610b,0x828b3304,0x23106925,
+0x4620702b,0xff86f7ff,0x2314b108,0x4620702b,0xff74f7ff,0x8ae37068,
+0xf3c378aa,0x431a1343,0x8b6370aa,0x462070eb,0x81f0e8bd,0xb5104601,
+0x68802234,0xfa6cf7fe,0x46c0bd10,0x4ff0e92d,0x4688690d,0x6014f8b8,
+0xb08d68aa,0x2e0f2100,0x4682682f,0x910b9205,0x468bd803,0x91079106,
+0x686ce01b,0x041b0c23,0xb16b940b,0x04230c1a,0x42960c1b,0xd206930b,
+0xf06f468b,0x910b040d,0x91079106,0x4614e0b6,0xf5b0980b,0xd9075f00,
+0x930b2300,0x469b9306,0xf06f9307,0xe0a90417,0xbf284284,0x90074620,
+0x2100b158,0xf854f7fe,0xb1084683,0xe0089006,0x041af06f,0x9006900b,
+0xf8dde098,0xf8cdb01c,0xb14cb018,0x0210f1a6,0xf1054658,0x42940110,
+0x4622bf38,0xfee8f7fb,0x429f4b7c,0x463dd001,0x2c07e00a,0x9a05d9d5,
+0x5004f8db,0x0202f042,0x0b08f10b,0x92053c08,0x19ef4f75,0x7f99f5b7,
+0x462fbf88,0x7f83f5b7,0xd804d038,0xd0442f02,0xd0102ffd,0xf240e047,
+0x429f1307,0x3304d01f,0xd140429f,0x0000f8da,0x4a6a2100,0x737af44f,
+0xf94cf7fe,0xf89be035,0xf89b1002,0x04093001,0x2103ea41,0x3000f89b,
+0x0000f8da,0xf89b4319,0x24003003,0x6103ea41,0xf91cf000,0x4658e046,
+0x2204495d,0xfdf8f7fb,0xb9e04606,0xf8da2301,0x93000004,0x46224659,
+0xe00b4633,0x49564658,0xf7fb2204,0xb970fde9,0x9a0b9000,0x0004f8da,
+0xab0b4659,0xfea8f7fe,0xf8dae003,0xf0000000,0x4604f8cb,0x2300e022,
+0x930a9309,0xa90a9b05,0x0202f013,0xab09d00a,0xf8da9300,0x23010000,
+0x93029101,0x465a4629,0xe0084623,0x9300ab0b,0x0000f8da,0x91019b0b,
+0x46299202,0xf000465a,0x4604f895,0x9b0ab108,0x462f930b,0xf8da4641,
+0x22000008,0xf968f7fe,0x902cf8dd,0x7343f240,0xbf0c2c00,0x2600464e,
+0x022cf106,0xbf94429a,0xf44f4635,0xf8da65e3,0xf1050008,0xf7fe012c,
+0x4680f969,0xd0462800,0x031cf105,0x210c8283,0xfe58f7ff,0xf8d89a05,
+0x0c130010,0xf8c06007,0x041b9004,0xf043b10c,0x60c40301,0xf1bb6083,
+0xd0070f00,0x4659b135,0x462a3010,0xfe24f7fb,0x1b7644ab,0xe01c4647,
+0x7344f240,0xbf34429e,0x461c4634,0x0008f8da,0xf7fe4621,0x4605f93b,
+0xf8dab930,0x46410008,0xf7fe2201,0xe012f91d,0x69004659,0xf7fb4622,
+0x44a3fe07,0x1b36603d,0xf1bb462f,0xd0010f00,0xd1dd2e00,0x0004f8da,
+0xf7ff4641,0x9b06f835,0xf8dab12b,0x46190008,0xf7fe9a07,0xb00df921,
+0x8ff0e8bd,0xfffeda3e,0x001bebe0,0x00005f6d,0x00017edf,0x41f0e92d,
+0x460e4680,0x21002034,0x461d4617,0xff30f7fd,0xb1404604,0x22342100,
+0xfdb6f7fb,0x602660e5,0xf8c46067,0x46208008,0x81f0e8bd,0x9c08b57f,
+0xf89d6c00,0x6a056028,0x9c099400,0x94019602,0x47a0696c,0xbd70b004,
+0x46c04770,0x46c04770,0x46c04770,0x46c04770,0x4604b510,0x6a036c00,
+0x4798685b,0x2301b910,0x3045f884,0x46c0bd10,0xf890b570,0xb0864044,
+0xb9bc4605,0xb1936c03,0xffeaf7ff,0x23042601,0x46214628,0x9400aa05,
+0x96029401,0xffcaf7ff,0xdb042800,0x4b049a05,0xbf08429a,0x230163ae,
+0x3044f885,0xbd70b006,0x14e46c77,0x6880b510,0xfd76f7fa,0x46c0bd10,
+0xb5106803,0x21016898,0xfd3cf7fa,0x46c0bd10,0x4604b537,0x460d4811,
+0xfd0ef7fd,0x46286420,0xfd0af7fd,0x63e06c23,0xb198b1a3,0x6be26358,
+0x68606c23,0x6c236353,0xf1d34621,0xbf380301,0x93002300,0x462b6822,
+0xff78f7ff,0xb10860e0,0xe0012000,0x30fff04f,0x46c0bd3e,0x00017ee4,
+0x68c0b510,0xfe16f7ff,0x46c0bd10,0x4604b570,0x460d68c0,0xfd7ef7ff,
+0x4629b988,0xf7fe6860,0x6c21f847,0x6a0b4602,0x68db6be0,0xb1184798,
+0x33016aa3,0xe00262a3,0x33016923,0xbd706123,0x4604b570,0xf7fe6840,
+0x4601f829,0xf7ff68e0,0x4605fd95,0x6820b178,0xf7fe4629,0xb138ff67,
+0x69e28aab,0x696318d2,0x330161e2,0xe0026163,0x33016ae3,0x200062e3,
+0x46c0bd70,0x6800b510,0xff90f7fe,0x46c0bd10,0x6800b510,0xff92f7fe,
+0x46c0bd10,0xb5106c03,0x2200b11b,0x6bc3635a,0x68c0635a,0xfdbef7ff,
+0x46c0bd10,0x41f0e92d,0x461e4d0f,0x4607682b,0x46902b07,0x2048dc14,
+0xf7fd2100,0x4604fe45,0x2100b170,0xf7fb2248,0x682bfccb,0x63636027,
+0x602b3301,0x60664b05,0x8008f8c4,0xe000601c,0x46202400,0x81f0e8bd,
+0x0001c6c0,0x0001c70c,0xf5020052,0x5a886200,0x4770b280,0xb570690b,
+0x68036103,0x695b4604,0x2b15460d,0x2b18d003,0x2b1bd001,0x230cd101,
+0x2b17e004,0x2b18d001,0x2314dd01,0x6a226223,0x82a31d13,0x82e38923,
+0xf4136923,0xd0087f80,0x46294620,0xffd8f7ff,0x100ff3c0,0x82e0b283,
+0x8aa3e000,0x89238323,0x69238363,0x7f00f413,0x6a22d00a,0x46294620,
+0xf7ff3201,0xf3c0ffc5,0xb283100f,0xe0008360,0x83a38b23,0x83e38923,
+0x46c0bd70,0x00408900,0x46c04770,0xb5108983,0xfbb2460c,0xfb03f1f3,
+0x02092311,0x03fff003,0x4321f043,0x417ff401,0x2200430b,0xe00061a3,
+0x69a33201,0xda032b00,0x429a4b05,0xe004d1f8,0x429a4b04,0x2000d801,
+0xf04fe001,0xbd1030ff,0x00989680,0x0098967f,0x41f0e92d,0x460f4680,
+0x0115461e,0xfa562400,0xf013f304,0xd0060f01,0x46394640,0xf7ff1962,
+0x4603ffc9,0x3401b918,0xd1f02c10,0x46182300,0x81f0e8bd,0x30fff04f,
+0x46c04770,0xb5108983,0xfbb2460c,0xfb03f1f3,0x02092311,0x03fff003,
+0x4300f043,0x417ff401,0x2200430b,0xe00061a3,0x69a03201,0xda032800,
+0x429a4b07,0xe008d1f8,0x429a4b06,0xf010d805,0xd1025f80,0x7040f3c0,
+0xf04fe001,0xbd1030ff,0x00989680,0x0098967f,0xe92d3901,0x46044ff8,
+0x461e4693,0xd8052907,0xf001e8df,0x17040f07,0x2b040404,0x0001f06f,
+0x8ac3e051,0xebc28a82,0x69030503,0x7f80f413,0x8b43e022,0xebc28b02,
+0x69030503,0x7f00f413,0x6903e01a,0x6f80f413,0x2302d104,0xf06f6033,
+0xe038001d,0x2b016833,0x2302d802,0xe0126033,0x25026a03,0x0802f103,
+0x8bc3e011,0xebc28b82,0x69030503,0x6f00f413,0x6035d101,0x6833e7e7,
+0xd20342ab,0xf06f6035,0xe01c000d,0x68204690,0xf906f7fa,0x46822100,
+0xf7fa6820,0x2700fb0d,0xe0084681,0x0208eb07,0x46494620,0xfef0f7ff,
+0x0017f82b,0x42af3701,0x6820d1f4,0xf7fa4651,0x6035fafb,0xe8bd2000,
+0x46c08ff8,0x4ff0e92d,0xb0874607,0x46146800,0x9101461d,0xf8e0f7fa,
+0x46832100,0xf7fa6838,0x4681fae7,0xf7ff4638,0x4621ff15,0x462a4682,
+0xf7fba802,0x2600f88b,0xf016e02d,0xd1040f03,0x491ea802,0xf7fb0072,
+0x9b01f887,0x4638b933,0x46324649,0xfeb8f7ff,0xe0164604,0xea4f2400,
+0x46251806,0x46494638,0x0208eb05,0xff3af7ff,0x3ffff1b0,0xf64fd102,
+0xe00674ff,0xf305fa10,0x43233501,0xb29c2d10,0xa802d1ec,0x4622490c,
+0xf862f7fb,0xebb63601,0xd3ce0f5a,0x4909a802,0xf85af7fb,0x46596838,
+0xfaa2f7fa,0x98049b02,0x0003ebc0,0xe8bdb007,0x46c08ff0,0x00017ef0,
+0x00017ef9,0x0001a336,0x4ff8e92d,0x46041e0d,0x469a4690,0x2500da0f,
+0xf894e008,0x23012027,0x409318aa,0x420b6921,0x3501d005,0x3026f894,
+0x429d3b01,0xf894dbf1,0x23012027,0x409318aa,0xea136921,0xd0020601,
+0x30fff04f,0x6820e047,0xf862f7fa,0x46834631,0xf7fa6820,0xf894fa69,
+0xf04f3024,0xfa1131ff,0xea6ff303,0xf8940903,0x46073025,0x40911c5a,
+0xf303fa0a,0x0101ea48,0x0803ea41,0xf0436943,0x61434300,0x2301e00e,
+0xea0840b3,0x421a0209,0xeb04d007,0x8d1a0345,0x46394620,0xf7ff18b2,
+0x3601fe79,0x3024f894,0xd3ec429e,0x6820697b,0x4300f023,0x2100617b,
+0xf98ef7fa,0x21016820,0xf98af7fa,0x46394620,0xfe20f7ff,0x46596820,
+0xfa2af7fa,0xe8bd2000,0x46c08ff8,0x41f0e92d,0x46144607,0x010d461e,
+0xf014e00f,0xd0090f01,0x0301f006,0xf04f4638,0x462a31ff,0xff80f7ff,
+0xb9284603,0x08643501,0x2c000876,0x4623d1ed,0xe8bd4618,0x46c081f0,
+0x4ff0e92d,0x9200b085,0x46996a02,0x46041e4b,0x92029101,0xf2002b07,
+0xe8df810d,0x0008f013,0x010b0012,0x010b001d,0x010b010b,0x8ac3002b,
+0x1a9b8a82,0xf2004599,0x690380fa,0x2500f3c3,0x8b43e008,0x1a9b8b02,
+0xf2004599,0x690380f0,0x2540f3c3,0xe01c4690,0xf4136903,0xf0406280,
+0xf1b980e9,0xf2000f02,0x6a0380e2,0xf1034615,0xe00e0802,0xf4136903,
+0xf0406100,0x8bc280db,0xebc38b83,0x45990302,0x80d1f200,0x0802ebc9,
+0x6820460d,0xffb0f7f9,0x90032100,0xf7fa6820,0x4606f9b7,0x46abb90d,
+0xea4fe028,0x21000049,0xfbc6f7fd,0xb9104683,0x051af06f,0x2700e0b2,
+0xe019463d,0x46209a00,0x46315aaa,0x200bf825,0x0208eb07,0xfd88f7ff,
+0x52e89b00,0x300bf835,0x0203ea30,0xf06fd002,0xe0920501,0xea809a00,
+0x52ab0303,0x35023701,0xd1e3454f,0xf04f6973,0xf0430a00,0x61734300,
+0x9d00e00a,0x0208eb0a,0x301af835,0x46314620,0xfdd6f7ff,0x0a01f10a,
+0xd1f245ca,0x01159a02,0x1e539a01,0xd83e2b07,0xf003e8df,0x293d1204,
+0x2e3d3d3d,0x0309eb08,0x4631011b,0xb29b6a22,0xf7ff4620,0x4620fdbd,
+0xf1054631,0xe028023c,0x1308ea4f,0x4631b29b,0x46206a22,0xfdb0f7ff,
+0xeb086a22,0x011b030a,0x32014631,0x4620b29b,0xfda6f7ff,0x46314620,
+0x023df105,0x4620e011,0xf1054631,0xe00c023e,0xea4f6a22,0x46311308,
+0xb29b3201,0xf7ff4620,0x4620fd93,0xf1054631,0xf7ff023f,0x6973fd67,
+0xf0236820,0x61734300,0xf7fa2100,0x6820f881,0xf7fa2101,0x4620f87d,
+0xf7ff4631,0xf1bbfd13,0xd0050f00,0x46599800,0x024aea4f,0xf9dcf7fb,
+0xe0132700,0x0508eb07,0x4620462a,0xf7ff4631,0x9a00fcfb,0x3017f832,
+0xb2824058,0x4629b12a,0xf7ff4620,0x4605fedf,0x3701b918,0xd1e94557,
+0xf1bb2500,0xd0050f00,0x46596860,0x0249ea4f,0xfceaf7fd,0x99036820,
+0xf8f2f7fa,0xf06fe004,0xe001050e,0x35fff04f,0xb0054628,0x8ff0e8bd,
+0x6943b5f0,0x2b14b08d,0xf3404607,0xf7f98095,0x4605ff15,0xf0402800,
+0x4638808f,0xff36f7f9,0xf0002800,0x4c468089,0x4629223c,0xf7fb4620,
+0x6027f973,0xf7f94638,0x69bbfe8b,0xf3c36060,0x2b0143c2,0x2b05d002,
+0xe075d009,0x0320f04f,0xf04f8163,0x81a30340,0x0380f04f,0xf04fe007,
+0x81630360,0x0340f04f,0xf44f81a3,0x812373c0,0x2b15697b,0x2b18d001,
+0x4c31d119,0xae062510,0x462a4930,0xf7fb4630,0xf104f967,0x46310028,
+0xf7fb462a,0x2308f961,0x3026f884,0xf8843307,0x230b3024,0x3025f884,
+0x5027f884,0x2b1be032,0xd1164d23,0x4924ac0a,0x46202208,0xf94cf7fb,
+0x0028f105,0x22084621,0xf946f7fb,0xf8852304,0x330b3026,0x3024f885,
+0xf885230b,0x33093025,0xf10de016,0x49190406,0x46202212,0xf934f7fb,
+0x0028f105,0x22124621,0xf92ef7fb,0xf8852309,0x33083026,0x3024f885,
+0xf885230d,0x33033025,0x3027f885,0xf7f94638,0x2100fe4f,0x46384604,
+0xf856f7fa,0x48064601,0xfc44f7ff,0x46214638,0xf84ef7fa,0xe0004802,
+0xb00d2000,0x46c0bdf0,0x0001c6c4,0x00017f02,0x00017ee8,0x00017f12,
+0x41f0e92d,0x46804b13,0xe01e681e,0x68b368f4,0x18e74640,0xf82ef7fb,
+0xe0104605,0x46414620,0xf7fa462a,0xb930fffd,0x2b3d5d63,0x1c63d103,
+0xd10d1958,0xf814e008,0x2b003b01,0x42bcd1fb,0x7823d202,0xd1e92b00,
+0x2e006836,0x4630d1de,0x81f0e8bd,0x0001c700,0x2010b570,0x2100460c,
+0xf7fd4615,0xb910fa25,0x001af06f,0x4a05e008,0x60432310,0x60c46813,
+0x60856003,0x20006010,0x46c0bd70,0x0001c700,0xb5104b06,0xb93b681b,
+0x68194b05,0x4b05b121,0xb10a681a,0xffdcf7ff,0xbd102000,0x0001c700,
+0x0001bc3c,0x0001bc40,0xf001fb00,0x46c04770,0xf001fb00,0x46c04770,
+0x4604b570,0x460d1400,0xfff6f7ff,0x4606b2a1,0xf7ff4628,0xeb06ffed,
+0xbd704020,0x47702000,0x47706880,0xb51068c3,0x47986840,0x46c0bd10,
+0xb5106883,0xb1186b58,0x699b6a03,0x4798b103,0x46c0bd10,0x4608b510,
+0x4611b119,0xf7fd461a,0xbd10f85b,0x6803b510,0x7c584604,0x6860b118,
+0xf0032101,0x6823ff5d,0xb1537c5b,0x2100b130,0x0038f104,0xf7fd460a,
+0xe002f847,0xf0006860,0xbd10fdff,0x6a84b513,0x0107f10d,0xf0016860,
+0xb128fee9,0x3007f89d,0x4620b113,0xffdaf7ff,0x46c0bd1c,0x6840b510,
+0xfdeaf000,0x46c0bd10,0x6a83b507,0x92002200,0x21026858,0xf0044613,
+0xbd0efd5b,0x47ffe92d,0xf46f4699,0x440b4309,0x46174688,0x468a6a85,
+0xd80a2b0a,0xf003e8df,0x2c29130d,0x64615c57,0x00200667,0x08a2f04f,
+0x2000e074,0x3afff04f,0x2200e071,0xf8cd9700,0x92029004,0x2301e005,
+0xf8cd9700,0x93029004,0x92032200,0x49386868,0xf0044613,0xe05efcb3,
+0x97002200,0x9004f8cd,0x92039202,0x49336868,0xf240e7f2,0xe02d53dc,
+0x7c5b682b,0x6868b113,0xfe1cf000,0x2400682a,0x33e0f8d2,0x612b62ac,
+0x33a4f8d2,0x616b62ec,0x33e4f8d2,0x61ab4638,0x33a8f8d2,0x0110f105,
+0xf8d261eb,0x622b33e8,0x33b0f8d2,0xf8d2626b,0xf1b93570,0xbf340f24,
+0x2224464a,0xf7fa632b,0x4620ffdf,0x682be027,0x3022f893,0xe021603b,
+0x683b682a,0x3022f882,0xf04fe01c,0xe0190809,0x080af04f,0x682ae016,
+0x24002306,0xf3f3fb99,0xf8c24626,0xe0083114,0xfb042206,0x19f11002,
+0xf7fa3052,0x3401ffbd,0x68293606,0x3114f8d1,0xd3f1429c,0x45d02000,
+0x2300d007,0x68689300,0x463a4641,0xf004464b,0xb004fcc3,0x87f0e8bd,
+0x0001a020,0x0001a02e,0x6a8cb510,0x68234611,0xf7fd6c98,0x6862fa97,
+0x03a0f243,0x58d04601,0xfdf4f006,0x46c0bd10,0x4ff0e92d,0xb0894606,
+0x2084460d,0x46172100,0xf8dd4699,0xf7fd804c,0x4604f8db,0xd0442800,
+0x22842100,0xff60f7fa,0xf7fd4630,0xab07fab9,0x93059001,0xf04f4683,
+0x46200a00,0x41e4f241,0x4643464a,0xf8cd9502,0x9703a000,0xf0169404,
+0x4605ff4f,0xd02a2800,0x60206060,0x465060a6,0x46429912,0x96004b1a,
+0xf944f7fd,0xb9f04607,0x49194b18,0x67236363,0x67a36763,0x464267e3,
+0xf7fa4630,0x68abff8f,0x6b1a4641,0x4b144813,0xff6af7fa,0x46284b13,
+0x49139300,0x46234a13,0x97029701,0xf946f016,0x4620b908,0x9907e00c,
+0xf7fa480f,0x6860ff59,0xf968f016,0x46214658,0xf7fd2284,0x2000fa61,
+0xe8bdb009,0x46c08ff0,0x000069b1,0x0dadbeef,0x0001a03d,0x0001a042,
+0x0001a078,0x00006949,0x0001a0ec,0x0001a082,0x0001a085,0xe92d6883,
+0x460541f0,0x69106b5f,0x89824616,0xd0422f00,0x036cf648,0xd026429a,
+0xf0136afb,0xd0220f01,0xb3027b6a,0x0f01f012,0x7803d005,0x0f01f013,
+0x2301d101,0xf012e011,0xd00e0302,0x78427803,0x401a7901,0x40137883,
+0x401a78c2,0x40117943,0x2bff400b,0x2300bf14,0x461a2301,0x682bb91b,
+0x6c984631,0x682be01b,0x6c984631,0xf9e4f7fd,0xf9968b42,0xf0223027,
+0x431302ff,0x6a3b8343,0x68db4604,0x463968a8,0x47984622,0x4620b148,
+0xfa18f7fd,0x682be005,0x6c984631,0xf7fd463a,0xe8bdf9d7,0x46c081f0,
+0x4608b510,0x2001b909,0xf7fce001,0xbd10fdbf,0x4608b510,0xffb6f7fc,
+0x46c0bd10,0xb510460b,0x4a024611,0xf926f7fd,0x46c0bd10,0x00006951,
+0x4a06b507,0x92006803,0x46084a05,0x681a9201,0x4b054904,0xfb90f7fa,
+0x46c0bd0e,0x0001a0d0,0x0001a078,0x0001a0ac,0x0001a0c4,0x6803b510,
+0x7c5b4604,0x6840b12b,0xfd06f004,0x23006822,0xbd107493,0x6a80b510,
+0xfff0f7ff,0xbd102000,0x6803b510,0x7c5b6842,0x2400b10b,0xf243e007,
+0x58d003a0,0xf946f006,0xf7fd4604,0x4620fd29,0x46c0bd10,0x6840b510,
+0xfc14f000,0x46c0bd10,0x6840b510,0xf926f001,0x46c0bd10,0x6840b510,
+0xff36f001,0xbd102000,0x2100b510,0x22344604,0x0038f100,0xfe38f7fa,
+0x63e44b04,0x46206423,0xffecf7ff,0xf0056860,0xbd10f81b,0x00006ddd,
+0x6844b510,0x7c5b6823,0x6860b12b,0xfce8f001,0xf7ff4620,0xbd10fdc7,
+0x8a934602,0x1a406900,0x611018c9,0x47708291,0x8a934602,0x1a5b6900,
+0x61101840,0x47708293,0x47708281,0xf0008ac0,0x47700007,0xf0018ac3,
+0xf0230107,0x43190307,0x477082c1,0xf4004602,0x0600437f,0x2003ea40,
+0x037ff402,0x2013ea40,0x6012ea40,0x46c04770,0x78007843,0x2003ea40,
+0x46c04770,0x47706ac0,0x47702000,0x37fcf8d0,0x38007818,0x2001bf18,
+0x46c04770,0xf8d0b510,0xf8904328,0x4602e32c,0xe0092100,0xf8931853,
+0xf010032c,0xd0020f80,0x007ff000,0x3101e004,0xd1f342a1,0x007ff00e,
+0x46c0bd10,0x290e3901,0xe8dfd827,0x0b08f001,0x2626110e,0x14262626,
+0x201d1a17,0xf6420023,0xe01923d0,0x23d1f642,0xf642e016,0xe01323d2,
+0x23d3f642,0xf642e010,0xe00d23d4,0x23d5f642,0xf642e00a,0xe00723d6,
+0x23d7f642,0xf642e004,0xe00123d8,0x23d9f642,0x477054c2,0x43e4f241,
+0xd0014298,0xe0592000,0x3320f244,0xd0544299,0x42993305,0x3b22d051,
+0xd04e4299,0x4299331e,0x3303d04b,0xd0484299,0x42993b0c,0x3301d045,
+0xd0424299,0x42993301,0x3b09d03f,0xd03c4299,0x42993302,0x3b01d039,
+0xd0364299,0x433cf501,0xb29b33d8,0xd9302b02,0x43d5f64b,0xb29b18cb,
+0xd92a2b02,0x3314f244,0xd0264299,0x42993301,0x3301d023,0xd0204299,
+0x42993305,0x3301d01d,0xd01a4299,0x42993301,0x3312d017,0xd0144299,
+0x42993305,0x3301d011,0xd00e4299,0x42993301,0x3301d00b,0xd0084299,
+0x42993301,0x3301d005,0xbf144299,0x20012000,0x2001e000,0x46c04770,
+0xf1d07d80,0xbf380001,0x47702000,0x7d82b510,0xb10a4604,0x32fff04f,
+0x3308f642,0x230054e2,0x3db4f8c4,0xf7ff4620,0xf884ffeb,0xbd100d09,
+0xd9022902,0x001cf06f,0xb139e00e,0x3848f8d0,0x4299685b,0xf06fd002,
+0xe005000c,0xbf181e0b,0xf8802301,0x20003cf4,0x46c04770,0xf8d0b139,
+0x685b3848,0xd0024299,0x000cf06f,0xf8d0e007,0x7a1b3844,0xbf142b00,
+0xf06f2000,0x4770000a,0x2a07b530,0xf89d4604,0x4618500c,0x2100dc01,
+0x6849e00b,0x2903b149,0xf8d4d007,0x685b3848,0xd0024299,0x000cf06f,
+0xb135e00a,0x3844f8d4,0xb9137a1b,0x000af06f,0xb108e002,0x20006001,
+0x46c0bd30,0x0deaf8b0,0x46c04770,0xf44169d1,0x61d17100,0x180cf8d0,
+0x1180f8d1,0x6293185b,0x46c04770,0x4604b510,0x4608b10a,0xf8d0e019,
+0x7b030848,0xf642b183,0x5ce323d0,0xf001b163,0x2b02037f,0x2b04d008,
+0x2b0bd006,0x2b16d004,0xf890d002,0xe00400b2,0x037ff001,0xf89318c3,
+0xbd10009c,0x380cf8d0,0x71a0f503,0xf013680b,0xd1fb0f08,0xb12a7d82,
+0x3de0f890,0x0f08f013,0xb912d000,0x0302f04f,0x4770800b,0x469eb510,
+0xf0014b12,0x565b017f,0x2b004604,0x004ada11,0x0315f102,0x03ceeb03,
+0xf3f2fbb3,0xf8d40099,0xf1013848,0x685b0014,0xd10d2b02,0x001af101,
+0x1e4be00a,0x130eeb03,0x0f01f012,0xf0f1fbb3,0x3060d001,0x30c0e000,
+0x46c0bd10,0x0001bae4,0xf8d0b510,0xf0013848,0x185b017f,0x109cf893,
+0xf7ff230e,0xbd10ffcb,0x47f0e92d,0xf8d0461f,0x46063848,0x4688685b,
+0xbf142b01,0x2510250a,0xf7ff4691,0x1828ffe5,0xb157b280,0x46410044,
+0x464a4630,0xf7ff463b,0xb2a4ffb1,0x19001828,0xe8bdb280,0x46c087f0,
+0x41f0e92d,0xf8d04698,0x46063848,0xf89d685b,0x2b015018,0x230abf14,
+0xb9492310,0x24034611,0xfb03462a,0xf7fff404,0x1824ffbf,0xe000b2a7,
+0x4641005f,0x4630462a,0xffb6f7ff,0x46044641,0x4630462a,0xf7ff9b07,
+0x1824ff85,0xb2a019e4,0x81f0e8bd,0x468cb500,0xb1224696,0x3848f8d0,
+0x429a685b,0xf8d0d113,0xf04f0848,0x6f410e00,0xeb00e00b,0xf893030e,
+0xf00c2078,0x429a037f,0x2001d101,0xf10ee004,0x458e0e01,0x2000d1f1,
+0x46c0bd00,0x690cb510,0x304cf894,0x0107f003,0x3844f8d0,0xeb036011,
+0x68db0381,0x2b02681b,0xeb00d80c,0xf8b30341,0xf8b02dba,0xea233db8,
+0xf8a00302,0xf06f3db8,0xe00a000f,0xf3c37923,0x2b020381,0xf8d0d004,
+0x330133b4,0x33b4f8c0,0xbd102000,0x4615b530,0x522cf500,0x469c4604,
+0xf04f3248,0x68100e01,0xf10eb178,0xfa5f0301,0x320cfe83,0x0f41f1be,
+0xf8d4d1f5,0xf04f3460,0x330130ff,0x3460f8c4,0x230ce00f,0x4303fb0e,
+0x323cf642,0xf5035099,0x601d532d,0xf10c7158,0x7a0a011c,0xf881711a,
+0xbd30e008,0x47f0e92d,0x071cf101,0x7a3a4691,0xb1ca4680,0x240ce012,
+0x8404fb02,0xf5042301,0xf642552d,0x716b363c,0x59a3682a,0x46494640,
+0x23004798,0x51a3792a,0x712b716b,0xb2db1e53,0xd9e82b3f,0x723b2300,
+0x87f0e8bd,0xb5102a2f,0xd8024696,0x000df06f,0xf8b0e02d,0x600b3826,
+0x3828f8b0,0xf8d0604b,0x681c3848,0x8a227ca3,0xea43071b,0x68823302,
+0x6b53608b,0x0f3bf1be,0x684360cb,0x6a53610b,0x6a93614b,0xf8b0618b,
+0x61cb3384,0x382cf8d0,0x4b07624b,0x6853620b,0x6b13628b,0xd90562cb,
+0x630b6823,0x634b6863,0x638b68e3,0xbd102000,0x04da0000,0x468eb500,
+0xf06fb111,0xe00b0001,0x338cf8d0,0xf0132203,0xf8c00380,0xbf162814,
+0x2814f8c0,0x46084618,0x46c0bd00,0x2200b500,0x48074686,0xf8300091,
+0x45733022,0x180bd102,0xe0038858,0x2a0e3201,0x2000d1f3,0x46c0bd00,
+0x0001a860,0x3848f8d0,0x47706858,0x3848f8d0,0x47706818,0x3088f8d0,
+0x2084f8d0,0xf042b10b,0xf8d06280,0xb11b308c,0x2380f422,0x3200f443,
+0xf8c36983,0x47702120,0x37c4f8d0,0xea23b510,0x43110101,0xd0054299,
+0x17c4f8c0,0x60e8f500,0xffe0f7ff,0x46c0bd10,0xb5107c03,0x7d83b13b,
+0xf890b92b,0xb9133d48,0x7280f04f,0x2200e000,0x71a0f04f,0xffe0f7ff,
+0x46c0bd10,0x7d83b510,0xb11b4601,0x3848f8d0,0xb9237b1b,0x3d34f8d1,
+0x02fff033,0x4608d004,0x1180f44f,0xe001460a,0x1180f44f,0xffc8f7ff,
+0x46c0bd10,0x3088f8d0,0xea23b510,0xf8c00301,0xb9333088,0x3084f8d0,
+0x6f80f013,0xf7ffd101,0xbd10ffa5,0xb5707853,0x78947816,0x2603ea46,
+0xf8d078d3,0xea44580c,0x79102403,0xf0417953,0xea400120,0xb2892003,
+0x1420f8a5,0x6422f8a5,0x4422f8a5,0x0422f8a5,0x46c0bd70,0x5342f500,
+0x42993368,0x460ab510,0x2103d103,0xf7ff32d4,0xbd10ffd9,0x2103b510,
+0xf7ff4a01,0xbd10ffd3,0x0001a847,0x5342f500,0x42993368,0x460ab510,
+0x2100d103,0xf7ff32da,0x2000ffc5,0x46c0bd10,0x3848f8d0,0x280cf8d0,
+0x1130f8a3,0xf8c24b02,0xf8c23160,0x47701164,0x00020003,0x3848f8d0,
+0x280cf8d0,0x1132f8a3,0xf8c24b02,0xf8c23160,0x47701164,0x00020004,
+0x468cb500,0xf04f6981,0xe00d0e00,0x030eeb0c,0x2a02885a,0x889bd102,
+0xe003520b,0xbf042a04,0x500b685b,0x0e08f10e,0x000cf83e,0x73fff64f,
+0xd1eb4298,0x46c0bd00,0x2d00f8d0,0x380cf8d0,0x2cfcf8c0,0x212cf8c3,
+0x46c04770,0x3844f8d0,0xb12b7a1b,0x380cf8d0,0x1cfcf8c0,0x112cf8c3,
+0x46c04770,0x0381eb00,0x4604b570,0x0778f8d3,0x6983460d,0xb1484798,
+0x380cf8d4,0x2150f8d3,0x40ab2301,0xbf144213,0x20012000,0x46c0bd70,
+0x2101b510,0xffe6f7ff,0x46c0bd10,0x0381eb00,0x4604b570,0x0778f8d3,
+0xb108460d,0x47986943,0x17c1f894,0x2301b159,0xea2140ab,0xf8840303,
+0xb92337c1,0x60e8f504,0xf7ff2108,0xbd70ff2f,0x280cf8d0,0xf443088b,
+0xf8c23380,0xf0113160,0xbf140f02,0x3166f8b2,0x3164f8b2,0x4770b298,
+0x41f0e92d,0x4844f8d0,0x343431e0,0x18a74615,0xf7ff4606,0x4601ffe5,
+0x42815960,0x2000d101,0xbf98e00d,0x3380f5c0,0x628cf506,0xebc0bf8c,
+0x18580001,0x59533204,0x5153181b,0xe8bd6039,0x46c081f0,0x7c43b570,
+0x2b004604,0x8181f000,0x460a2100,0xffd4f7ff,0x22042102,0xf7ff4620,
+0x2104ffcf,0x46202208,0xffcaf7ff,0x220c2106,0xf7ff4620,0x2108ffc5,
+0x46202210,0xffc0f7ff,0x210a4620,0xf7ff2214,0x2500ffbb,0x00aa260c,
+0x32184631,0x35014620,0xffb2f7ff,0x2d063602,0x211cd1f5,0x46202238,
+0xffaaf7ff,0x223c211e,0xf7ff4620,0x2124ffa5,0x46202240,0xffa0f7ff,
+0x22442126,0xf7ff4620,0x2128ff9b,0x46202248,0xff96f7ff,0x224c212a,
+0xf7ff4620,0x212cff91,0x46202250,0xff8cf7ff,0x2254212e,0xf7ff4620,
+0x2130ff87,0x46202258,0xff82f7ff,0x225c2132,0xf7ff4620,0x2260ff7d,
+0x46202134,0xff78f7ff,0x46202136,0xf7ff2264,0x2138ff73,0x46202268,
+0xff6ef7ff,0x226c213a,0xf7ff4620,0x213cff69,0x46202270,0xff64f7ff,
+0x2274213e,0xf7ff4620,0x2140ff5f,0x46202278,0xff5af7ff,0x227c2142,
+0xf7ff4620,0x2144ff55,0x46202280,0xff50f7ff,0x22842146,0xf7ff4620,
+0x2148ff4b,0x46202288,0xff46f7ff,0x214a228c,0xf7ff4620,0x214cff41,
+0x22904620,0xff3cf7ff,0x2294214e,0xf7ff4620,0x2150ff37,0x46202298,
+0xff32f7ff,0x229c2152,0xf7ff4620,0x2154ff2d,0x462022a0,0xff28f7ff,
+0x22a42156,0xf7ff4620,0x215aff23,0x462022a8,0xff1ef7ff,0x22ac215c,
+0xf7ff4620,0x215eff19,0x462022b0,0xff14f7ff,0x22b42160,0xf7ff4620,
+0x22b8ff0f,0x46202162,0xff0af7ff,0x46202164,0xf7ff22bc,0x2166ff05,
+0x462022c0,0xff00f7ff,0x22c42168,0xf7ff4620,0x216afefb,0x462022c8,
+0xfef6f7ff,0x22cc216c,0xf7ff4620,0x216efef1,0x462022d0,0xfeecf7ff,
+0x22d42170,0xf7ff4620,0x2172fee7,0x462022d8,0xfee2f7ff,0x22dc2174,
+0xf7ff4620,0x2176fedd,0x462022e0,0xfed8f7ff,0xf44f217a,0x462072aa,
+0xfed2f7ff,0xf44f2120,0x462072e4,0xfeccf7ff,0xf44f2122,0x462072e6,
+0xfec6f7ff,0x14d0f8d4,0x343cf8d4,0x2440f8d4,0x0301ebc3,0x3560f8c4,
+0x34b0f8d4,0x1a9b4625,0x3574f8c4,0x3468f8d4,0x2444f8d4,0x1a9b1a5b,
+0x3564f8c4,0x0778f8d5,0xf8d0b1b0,0xf8d4209c,0x189b33c0,0x33c0f8c4,
+0x2098f8d0,0x33f0f8d4,0xf8c4189b,0xf8d033f0,0xf8d42094,0x189b3408,
+0x3408f8c4,0x47986f43,0xf1043504,0x429d0318,0xf8d4d1e0,0xf8d423c0,
+0x210033c4,0xf8d4189b,0x189b23d4,0x23c8f8d4,0xf8d4189b,0x189b2448,
+0x244cf8d4,0xf8d4189b,0x189b2450,0x33b0f8c4,0x2420f8d4,0x33f0f8d4,
+0xf8d4189b,0x189b2400,0x2404f8d4,0xf8d4189b,0x189b2408,0x240cf8d4,
+0xf8d4189b,0x189b2414,0x33e8f8c4,0xf8d41863,0xf8d323e8,0x31043424,
+0x291818d2,0x23e8f8c4,0xbd70d1f4,0xf0014a0a,0x56d3037f,0x2b005c51,
+0xf44fbfac,0xf44f7300,0xf00173e0,0xb510010f,0x0141eb03,0xfe34f7ff,
+0xb2800040,0x46c0bd10,0x0001bae4,0x080cf8d0,0xf443088b,0xf0113380,
+0xf8c00f02,0xbf143160,0x2166f8a0,0x2164f8a0,0x46c04770,0xf642b570,
+0x5341350e,0x71c4f44f,0xf7ff4604,0x5b63fe15,0x7270f420,0x4620431a,
+0xf44fb292,0xf7ff71c4,0x2122ffdd,0xf7ff4620,0x5b63fe07,0x7270f420,
+0x4620431a,0xb2922122,0xffd0f7ff,0x46c0bd70,0x330af642,0xb5105cc3,
+0xf642b923,0xf04f330e,0xe0070240,0xbf072b01,0x330ef642,0xf6422280,
+0x2200330e,0x7c4352c2,0xf642b123,0x5ac1330e,0xffc4f7ff,0x46c0bd10,
+0x2208b573,0x460d4606,0x49074668,0xfff0f7f9,0xf83d2400,0x5b621004,
+0x34024630,0xffa2f7ff,0xd1f62c08,0x46c0bd7c,0x0001a11c,0x41f3e92d,
+0x46049e08,0x46174688,0x22084668,0x461d4924,0xffd6f7f9,0xd82d2e03,
+0xf006e8df,0x02090502,0x1848f8d4,0xf504e006,0x311c613a,0xf504e002,
+0x31046128,0xea4fb1f1,0xeb0c0c48,0xf8b20201,0xea20006c,0xea430307,
+0xf8d40e05,0xf8a23844,0x7a1be06c,0x4586b173,0xf8d4d00c,0x42993848,
+0xaa02d108,0x0302eb0c,0xf8334620,0x46721c08,0xff60f7ff,0xd1102e03,
+0x0148eb04,0x3af0f8b1,0xb29243fa,0x0303ea02,0xf8a1432b,0xf8b13af0,
+0x401a3c28,0xf8a1432a,0xe8bd2c28,0x46c081fc,0x0001a124,0xf8d0b537,
+0x00494844,0x19084605,0x19498c83,0x84831a9b,0x2db8f8b5,0x3dbaf8b1,
+0xf8a54313,0x7dab3db8,0xc024f8b4,0xe026f8b4,0x8d618d20,0xf895b1a3,
+0xf0122de0,0xd00f0f08,0x030ceb0e,0x185b181b,0xb94bb29b,0x03f7f002,
+0x3de0f885,0x380cf8d5,0x0202f04f,0x2140f8a3,0xb1737dab,0x3de1f895,
+0xf8d5b15b,0x8d9b3844,0xf885b93b,0x46283de1,0x22402101,0xf7ff9300,
+0xbd3eff6d,0x4602b507,0xb159468e,0xf8802300,0x33013d3c,0x3d3bf880,
+0x33022280,0x21029300,0xe0064613,0xf8822303,0x93001d3b,0x22802102,
+0xf7ff4673,0xbd0eff53,0x460cb570,0xbf0c2a00,0x21b421a4,0x46062c64,
+0x46184615,0xf06fd902,0xe016001c,0x4622b90c,0xf1c4e004,0x011b0364,
+0xf2f4fb93,0x4630b118,0xf7ffb292,0xb125fed3,0x2310f243,0x52f42000,
+0xf243e003,0x52f42312,0xbd704628,0x41f0e92d,0x460c4606,0x0725f101,
+0xe00d2500,0xf893192b,0x5d7a3026,0x71b0f505,0x2203eb02,0xb2924630,
+0xfeb4f7ff,0xb29d1cab,0x2024f894,0xd3ed4295,0x21484630,0xfeaaf7ff,
+0x81f0e8bd,0x47f0e92d,0x46064b1f,0x9000f8d3,0x2700791b,0x087ff003,
+0x4b1be031,0x18fb4a1b,0xf8d67918,0xf0003848,0xf000007f,0x18e3047f,
+0x109cf893,0x29005715,0x4641bf08,0x037ff001,0x5c5156d3,0xbfac2b00,
+0x7300f44f,0x73e0f44f,0x010ff001,0xeb035c14,0x46300141,0xfca8f7ff,
+0xbfac2d00,0x7508f44f,0x75f0f44f,0x040ff004,0xeb054602,0x46300144,
+0xfe6cf7ff,0x454f3701,0xe8bdd1cb,0x46c087f0,0x0001b9bc,0x0001bae4,
+0x41f0e92d,0x22004616,0x4607460d,0x1018f99d,0x469862f2,0xf8d0b133,
+0xeb022844,0x8c930245,0x849318cb,0xd1092d04,0x21a86933,0x404cf893,
+0x204df893,0x2202ea44,0xfe44f7ff,0x0385eb07,0x0778f8d3,0x6a034631,
+0x47984642,0x81f0e8bd,0xf642b570,0x2154330e,0x5ac44605,0xfc60f7ff,
+0x7070f420,0x21544304,0xb2a24628,0xfe2af7ff,0x46c0bd70,0xf8d0b510,
+0xb131380c,0x2207f240,0x2684f8a3,0x22092110,0xf240e005,0xf8a32212,
+0x21102684,0xf7ff2214,0xbd10fe15,0x41f0e92d,0x46801e1e,0x4615460f,
+0x2400dd0b,0x464019e1,0xfc36f7ff,0x5560192b,0x0a003402,0x705842b4,
+0xe8bddbf4,0x46c081f0,0x2101b510,0x480cf8d0,0xf8d4460a,0xf7ff3120,
+0x2301fb17,0x3128f8c4,0x3120f8d4,0x3128f8d4,0x46c0bd10,0x380cf8d0,
+0x0180f8d3,0xf8d36008,0x60133184,0x46c04770,0x460cb513,0xa901466a,
+0xfff0f7ff,0x0c139a01,0x041b0412,0xea440c12,0x42940003,0xf5a0bf88,
+0xbd1c3080,0x180cf8d0,0xf44f4a19,0xf8c13080,0xb5100160,0x4164f8d1,
+0x0160f8c1,0x2164f8c1,0x0160f8c1,0x3164f8d1,0xd11e4293,0xf8c14a11,
+0xf8c10160,0xf8c12164,0xf8d10160,0x42933164,0x2300d113,0x0160f8c1,
+0x4164f8c1,0x318cf8c1,0x0120f8d1,0x42984b08,0x2001d101,0x4b07e006,
+0xbf144298,0x20012000,0x2000e000,0x46c0bd10,0xaa5555aa,0x55aaaa55,
+0x04000400,0x84000400,0xf2412200,0xb57073f0,0x460450c2,0x19634615,
+0x0778f8d3,0x6a83b110,0x47982101,0x2d183504,0xf8d4d1f5,0x6e430778,
+0xbd704798,0xf8d0b570,0x46053844,0xb1637a1b,0x380cf8d0,0x2120f8d3,
+0x4304f240,0x0303ea02,0x6180f5b3,0x2101bf18,0x6880e003,0xfb1cf7f8,
+0xbb494601,0x4d08f895,0xf8d5b144,0xb31b3710,0x3848f8d5,0xf0066818,
+0xe01dfdf1,0x3848f8d5,0x68184621,0xfdeaf006,0x3848f8d5,0x68184621,
+0xf81af006,0x73f4f241,0xb13358eb,0xf04f68a8,0x462231ff,0xf7f84623,
+0xf8d5fc7d,0x46213844,0x68a8721c,0xfbf8f7f8,0x46c0bd70,0xb5102301,
+0xf8804604,0xf8d03d08,0xf7fe073c,0x2300fedf,0x3d08f884,0xbd1074a3,
+0xf8d0b570,0x4606480c,0x3120f8d4,0x3ffff1b3,0xf8d4d01c,0xf1b33128,
+0xd0173fff,0x22002101,0xfa3af7ff,0xe0034d0c,0xf7fc200a,0x3d0afbf7,
+0x3128f8d4,0x0f01f013,0x2d09d101,0xf8d4d1f4,0xf8d43128,0xf1b33120,
+0xd1033fff,0x073cf8d6,0xfeb0f7fe,0x46c0bd70,0x00014441,0xf8d0b570,
+0x46053844,0xb9087a18,0xe0124606,0x380cf8d5,0xf8d52400,0x20016cfc,
+0x412cf8c3,0x312cf8d3,0xfbccf7fc,0x3cf8f8d5,0x4cfcf8c5,0xbf1842a3,
+0x46304626,0x46c0bd70,0xf8d0b570,0x46043844,0x460e7a1b,0xd03e2b00,
+0xf8d0b9d9,0x2021280c,0x31e0f8d2,0x25a1f643,0x0302f043,0x31e0f8c2,
+0xfbacf7fc,0x200ae003,0xfba8f7fc,0xf8d43d0a,0xf8d3380c,0xf41331e0,
+0xd1243f00,0xd1f22d09,0x6883e021,0xb9b369db,0x380cf8d0,0x31e0f8d3,
+0x0f12f013,0xf643d00f,0xe00325a1,0xf7fc200a,0x3d0afb8d,0x380cf8d4,
+0x31e0f8d3,0x3f00f413,0x2d09d101,0xf8d4d1f2,0xf8d2280c,0xf02331e0,
+0xf8c20302,0xf1d631e0,0xbf380301,0xf8842300,0xbd70381d,0x4605b570,
+0xf7fc2028,0xf8b5fb6f,0xf1033824,0xe0030409,0xf7fc200a,0x3c0afb67,
+0x46282140,0xfaacf7ff,0xd1012804,0xd8f32c09,0x46c0bd70,0xf8d0460a,
+0xb51017c8,0xb9214604,0x37c4f8d0,0x6f80f013,0xea42d004,0xf8c40301,
+0xe00837c8,0x27c8f8c0,0x60e8f500,0xf972f7ff,0xf7ff4620,0xbd10ffcf,
+0x408b2301,0xf890b570,0xb2dc27c1,0x0302ea04,0x460542a3,0xd010460e,
+0x2108b912,0xffd6f7ff,0x37c1f895,0x0303ea44,0x37c1f885,0x0386eb05,
+0x0778f8d3,0x6903b108,0xbd704798,0xf10db573,0x460d0602,0x21004604,
+0x22064630,0xfc5cf7f9,0x4620b175,0xf7ff2101,0x4620ffd3,0xf7ff2103,
+0x4620ffcf,0x46322100,0xf994f7ff,0xe0142301,0x3dc6f894,0x4620b91b,
+0xf7ff2101,0x4620fa33,0xf7ff2103,0x4620fa2f,0xf1044629,0xf7ff024c,
+0xf8d4f981,0xb16b37cc,0xf8c42300,0xf8d437cc,0xf40337c4,0xf5b323c0,
+0xd0033f00,0x60e8f504,0xf914f7ff,0x46c0bd7c,0xb5102101,0x1dc6f880,
+0xff9ef7ff,0x46c0bd10,0x7d83b570,0xb98b4605,0x380cf8d0,0x61c0f04f,
+0x4120f8d3,0x6280f04f,0x64c0f004,0xf90cf7ff,0x7f00f1b4,0x4628d102,
+0xff54f7ff,0x46c0bd70,0x3ffff1b1,0x41f0e92d,0x460e4604,0xf8d0d106,
+0x68193848,0x460eb909,0x688ee000,0x781df894,0x4620b91f,0xf7ff4639,
+0x68a0feef,0xfb22f7f8,0x2500b170,0xf8d31963,0xb1080778,0x47986883,
+0x2d183504,0xf8d4d1f6,0xb1080778,0x47986c83,0x5d08f894,0x2200b13d,
+0x2cf8f8c4,0x21034620,0xf8d2f7ff,0xf8d4e033,0x46313844,0x68a0721d,
+0xf7f8462a,0xf8d4fa59,0x23012844,0x46207213,0xf04f4a14,0xf8c431ff,
+0xf8c457c4,0xf8c457c8,0xf7ff57cc,0x4620f8b9,0xf7ff4629,0xf8d4feb5,
+0x68a13848,0xf0076818,0xf44ff821,0x460a6180,0xf7ff4620,0x4620f8a9,
+0x462a2104,0xf8a4f7ff,0x5cf8f8c4,0x4620b91f,0xf7ff2102,0xe8bdfe9d,
+0x46c081f0,0x04000400,0xf890b510,0x46023d05,0xf8d0b97b,0xf0133394,
+0xd10a0f04,0xf8802301,0xf8d23d05,0xf8d01d2c,0xf44f073c,0xf7fe7248,
+0x2001fb25,0x46c0bd10,0x7c43b510,0xb12b4604,0xffe2f7ff,0x073cf8d4,
+0xfd04f7fe,0x46c0bd10,0x738ef44f,0x0303fb01,0x2844f8d0,0x6304f503,
+0x429a330c,0x4604b570,0xd016460d,0x3844f8c0,0x381cf890,0xf890b13b,
+0xb9222d08,0xf44f6880,0xf7f85100,0x68a0faab,0x0112f640,0xf7f8462a,
+0xf8c4fac1,0xf8c4080c,0xbd700758,0x739cf44f,0xf303fb01,0x6328f503,
+0x330418c3,0xf8c0b570,0x460d3848,0x03c1eb00,0x1840f8d0,0x63ecf503,
+0xf8c04604,0x2901375c,0x4629bf8c,0xf7ff2100,0xf894ffbf,0xb15b381c,
+0x3d08f894,0xf44fb943,0x68a05100,0xbf0c2d00,0x2200460a,0xfa76f7f8,
+0x46c0bd70,0xf890b570,0x4604581d,0xb915460e,0xf7ff4629,0xf8d4fe19,
+0xb2713848,0xf0066818,0xf8d4fbff,0x68a13848,0xf0066818,0xf8d4ff7f,
+0x68183848,0xfae4f00b,0x4620b91d,0xf7ff2102,0xbd70fe03,0x6984b5f7,
+0xf8c4461d,0xf8d41130,0x46163120,0x3780f403,0xa801e00e,0x22044629,
+0xfb16f7f9,0x9801b11f,0xfcf0f7fe,0x9b019001,0xf8c43504,0x3e043134,
+0xdcee2e00,0x46c0bdfe,0x4615b570,0x460b3203,0xf44f4604,0xf500618d,
+0xf02260e8,0x69860203,0xffd4f7ff,0x211a4620,0xf7ffb2aa,0xf8d6faaf,
+0xf0433124,0xf8c60302,0xbd703124,0x4615b570,0x460b3203,0x21684604,
+0x60e8f500,0x0203f022,0xf7ff6986,0x4620ffbb,0xb2aa2118,0xfa96f7ff,
+0x3124f8d6,0x0301f043,0x3124f8c6,0x46c0bd70,0x41f0e92d,0x460e4605,
+0xf8d04617,0xb12b480c,0xffdcf7ff,0x46314628,0xe00c463a,0x3124f8d4,
+0x0f01f013,0xf7ffd102,0xe006ffd1,0x3124f8d4,0x0f02f013,0xf7ffd101,
+0xe8bdffaf,0x46c081f0,0x784cb570,0x34024605,0xf7f94622,0x1928faad,
+0x46c0bd70,0x2a00b570,0x70014604,0x70624615,0x3002dd03,0xf7f94619,
+0x1ca0fa9f,0xbd701940,0xf8d0b570,0xb19557d0,0x22006884,0x46294613,
+0xf7f84620,0x4629f987,0x2300462a,0xf7f84620,0x2200f965,0x46294620,
+0xf7f84613,0xbd70f943,0x41f0e92d,0xf8d0461d,0x46043848,0x460e6818,
+0xf00a4690,0xf8d4ff5d,0x46293848,0x46326818,0xfbb4f006,0x3848f8d4,
+0x31fff04f,0x22006818,0xff3ef008,0x46414620,0xfde0f7ff,0x81f0e8bd,
+0x7c43b530,0x4605b085,0xb11b460c,0xf06fb111,0xe0920004,0xd9022c03,
+0x0001f06f,0xd107e08d,0x3814f8d5,0xd1012b02,0xe0122400,0xe0002402,
+0xf8d5b17c,0x2b023814,0xf8d5d104,0xf0133388,0xe0050f01,0xd1042b03,
+0x3834f8d5,0x5f00f013,0xf8c5d071,0xa8024810,0x22082100,0xfa14f7f9,
+0x3008f8bd,0xd03f2c00,0x0310f043,0x3008f8ad,0x3814f8d5,0xf8d52b02,
+0xd1203830,0x5300f023,0x3830f8c5,0x3388f8d5,0x4f80f413,0x300af8bd,
+0xf443d008,0xf8ad7380,0x2330300a,0x37d0f8c5,0xe0092320,0x7380f423,
+0x300af8ad,0x73c0f44f,0x37d0f8c5,0x7380f44f,0x37d4f8c5,0xf043e009,
+0xf8c55300,0xf8bd3830,0xf423300c,0xf8ad5380,0xf8bd300c,0x2c02300a,
+0xf443bf0c,0xf4237300,0xf8ad7300,0xe009300a,0x0310f023,0x3008f8ad,
+0x3830f8d5,0x5300f023,0x3830f8c5,0xf8bd2402,0x46283008,0x22102100,
+0xf7ff9400,0xf8bdf9fb,0x4628300a,0xf44f2101,0x94007240,0xf9f2f7ff,
+0xf8bd4628,0x4621300c,0x1208f241,0xf7ff9400,0x2000f9e9,0xf06fe001,
+0xb0050002,0x46c0bd30,0x41f0e92d,0x3844f8d0,0x780cf8d0,0x46047a1b,
+0xf8d7460e,0xb1535128,0x2120f8d7,0x4304f240,0x0303ea02,0x6080f5b3,
+0x2001bf18,0x6880e005,0xff1af7f7,0xbf183800,0xb1102001,0x36fff04f,
+0xf1b5e02d,0xd1013fff,0xe0284606,0xf8d4b116,0xe0013cfc,0x3d00f8d4,
+0x0605ea13,0xf8d4d01f,0x2500380c,0x512cf8c3,0x0f80f416,0x312cf8d3,
+0x5cfcf8c4,0x2301d00a,0xf8844629,0x46203d3c,0xff1ef7ff,0x46294620,
+0xfa30f7ff,0x4f00f416,0xf44fbf18,0xf8c73380,0xbf186128,0x4630623b,
+0x81f0e8bd,0x2300b570,0x7c43700b,0x460d4604,0xf8d0b163,0xb14b3cfc,
+0xf7ff2101,0xb128ffa1,0x702b2301,0x0cf8f8c4,0xe0004618,0xbd702000,
+0x2100b510,0xf7ff4604,0xf1b0ff93,0xd1013fff,0xe0053001,0x3cf8f8d4,
+0xf8c44303,0x20013cf8,0x46c0bd10,0x4ff0e92d,0x4682b0d3,0x9848f8d0,
+0x4693460f,0x226d2100,0x00dbf10d,0xf8dd461c,0xf7f98170,0x2100f919,
+0xf10d226d,0xf7f9006e,0xa801f913,0x21003803,0xf7f9226d,0xf8daf90d,
+0x7b1b3848,0x4620b93b,0x7b04f840,0x463a4659,0xf922f7f9,0x6822e07e,
+0x21004b4b,0xbf142a00,0x46184620,0x1843e007,0xab01791a,0x027ff002,
+0x549a3b03,0x68033101,0xd3f44299,0x46352600,0xe0124630,0x100bf810,
+0xf001aa01,0x3a03037f,0xf50d5cd2,0x44737ea4,0x3501b11a,0x1c6df803,
+0xf803e002,0x36011cda,0x42b83001,0x6823d1ea,0xf8d8bb13,0xb9fb3000,
+0x1074f8d9,0xe0134628,0x3901f815,0xf003af52,0x18fa037f,0x3cdaf812,
+0xf802b133,0x3e013c6d,0xf8022300,0xe0023cda,0x29003901,0x3001daec,
+0xd8052807,0xeb01b126,0xf1030309,0xe7f40578,0x22282100,0xf7f94620,
+0x4640f8ab,0x22282100,0xf8a6f7f9,0xe01d2500,0x0305eb09,0x3078f893,
+0x7ea4f50d,0x037ff003,0x0003eb0e,0x1c6df810,0x6823b121,0x330118e2,
+0x60237111,0x1cdaf810,0xf8d8b139,0xeb083000,0x33010203,0xf8c87111,
+0x35013000,0x3074f8d9,0xd3dd429d,0x038cf243,0x0003f81a,0x6822b188,
+0xd8042a07,0x711818a3,0x60231c53,0xf8d8e009,0x2a072000,0xeb08d805,
+0x71180302,0xf8c81c53,0xb0533000,0x8ff0e8bd,0x0001bb54,0xf6422100,
+0x50c1634c,0x5038f500,0x3050b510,0x7200f44f,0xf85af7f9,0x46c0bd10,
+0x41f0e92d,0x3ffff1b2,0x4615bf14,0x46062500,0x460a461f,0x2902b111,
+0xe033d003,0x4848f8d0,0xf8d0e007,0x685b3848,0xd12b2b02,0x6428f500,
+0xb12d3404,0x46294630,0xf7fe2301,0xb308fc23,0x2b026863,0x7b23d10c,
+0xb14db953,0x037ff005,0xd0052b02,0xd0032b04,0xd0012b0b,0xd1112b16,
+0x5f60f415,0xf642d004,0x5cf3330d,0xd0092b01,0x2000b117,0xe0076425,
+0x63e54630,0xffb2f7ff,0xe0014638,0x30fff04f,0x81f0e8bd,0x3848f8d0,
+0x41f0e92d,0x049cf103,0x4607226d,0x4620460d,0xf7f92100,0x2200f805,
+0x18abe00a,0xf013791b,0xd0040f80,0x037ff003,0xbf982b6c,0x320154e3,
+0x429a682b,0xf04fd3f1,0x46750e00,0xe02646f4,0x0302eb0c,0x2078f893,
+0x5ca34814,0xf00218a6,0xb133017f,0x2b005643,0x4696bfb8,0x4615bfa8,
+0x5641e013,0x0321ea1e,0x462bbf38,0xb96354a3,0xdb012900,0xe0074613,
+0xd9012a2f,0xe0032330,0xbf942a17,0x2318230c,0xf10c7033,0xf8d70c01,
+0x6f532848,0xd3d3459c,0x81f0e8bd,0x0001bae4,0x4616b570,0xf0014a2f,
+0x461d017f,0x2b005653,0x5c54da1a,0x22064628,0xf7f82100,0x782bffb1,
+0x040ff004,0x030ff023,0x431c0532,0x78ab0d12,0xea430152,0x70ab4312,
+0xea43786b,0x706b2312,0x4313b2e3,0xe03b702b,0xd00c2904,0x2902dc02,
+0xe003d007,0xd008290b,0xd0112916,0x46022000,0x00f3e021,0x00b3e00a,
+0x0133e008,0xf2f1fbb3,0xfb00b290,0x4293f201,0x1c43d014,0xe011b298,
+0x00f2240b,0xf3f4fbb2,0xfb00b298,0x429af304,0x1c43d008,0xfb00b298,
+0x1a9bf304,0xd9012b07,0xe0002280,0x23052200,0xf303fb01,0xf042702b,
+0x706b0304,0x70eb0a03,0x70a82300,0x716b712b,0x46c0bd70,0x0001bae4,
+0x3848f8d0,0x47f3e92d,0x4606685b,0xbf142b01,0x0a0af04f,0x0a10f04f,
+0x46884b20,0x9000f8d3,0xe0372700,0x46304b1d,0x791c18fb,0xf0043701,
+0x4621047f,0xff02f7fe,0x46054621,0x46304642,0x0302f10d,0xff78f7ff,
+0x22004621,0x46304643,0xfa9cf7fe,0x3003f89d,0x2002f89d,0xeb02b284,
+0x46302203,0x010af105,0xf7feb292,0xf89dfeff,0xf89d3005,0x46302004,
+0x2203eb02,0x010cf105,0x4454b292,0xfef2f7fe,0xf1054630,0xb2a20110,
+0xfeecf7fe,0xd1c5454f,0x87fce8bd,0x0001b9bc,0x3454f8d0,0x3301b510,
+0xf8c04604,0x68803454,0xfe34f7f7,0x4620b110,0xfd38f7fe,0xf8842300,
+0xf8d43d54,0x7a1b3844,0xf8d4b16b,0xf8d3380c,0xf2402120,0xea024304,
+0xf5b30303,0xbf146f80,0x20012000,0x68a0e006,0xfc76f7f7,0x0001f1d0,
+0x2000bf38,0x4620b120,0x31fff04f,0xfad4f7ff,0xf7ff4620,0xf8d4f921,
+0x21000844,0x6348f642,0x84c18481,0x85418501,0x85c18581,0x303450e1,
+0xf7f822e8,0xbd10fec9,0xb5702300,0x3dc6f880,0x3848f8d0,0x68184605,
+0xffacf005,0x00c4f3c0,0xf2411828,0x5cc4436c,0x3848f8d5,0xf0056818,
+0xf000ffa1,0x41040007,0x0f01f014,0x4628d103,0xf7fe2101,0xbd70fc97,
+0xf890b570,0x46053024,0xf8d0b17b,0xf8b03848,0x68184324,0xff8af005,
+0xd1064284,0x5142f505,0x31684628,0xfbf6f7fe,0x4628e00b,0xfbfef7fe,
+0xf44f2300,0xf8853100,0x46283d35,0xf7fe460a,0x4628fb83,0xfba2f7fe,
+0xf7fe4628,0xbd70fb8d,0xf001b510,0x460c007f,0xf8def00d,0xb203b280,
+0x3ffff1b3,0x2000bf08,0x0200b200,0x0002f040,0x24c2f3c4,0xea40b280,
+0xbd1000c4,0x4ff0e92d,0xbf0c2b00,0x23032302,0x690db09d,0xf101460c,
+0x930d011c,0x786b9112,0x782a4693,0xea424607,0xf3c32303,0xf1ba0a81,
+0xf8dd0f02,0x6c8080ac,0xd0019305,0xe0022300,0xf3c29a05,0xb2db13c0,
+0x93104621,0xf9a4f7f8,0x30049b2a,0xb11b9007,0x300ff993,0x900718c0,
+0x3830f8d7,0xda1e2b00,0xb1e0982a,0x2b027a03,0xf642d119,0x5cfb1385,
+0xf8d7b9ab,0xf8d33dc8,0xf0133094,0xd10e0f08,0x2b357983,0x2b03d80b,
+0x2b0bd909,0x9927d807,0xd1042901,0x91139a07,0x92073208,0x2300e001,
+0x21069313,0xf7fd4620,0x2168fff3,0x46209006,0xffeef7fd,0x21002268,
+0xf7f84606,0xf8dbfe09,0x4baa2004,0x0303ea02,0x9805b1c3,0x03fcf000,
+0xd1132b88,0xf013792b,0xd10f0f01,0xf7fd4620,0x9c27ffe9,0x0140eb0b,
+0x1e639826,0xf8b14298,0xd10a2168,0xf8a11c53,0xe0063168,0x0f01f1ba,
+0x2200d012,0x0910f04f,0xf1bae004,0xd00b0f01,0x0900f04f,0xf0019926,
+0xea43030f,0xb29b1302,0x0a1b75ab,0xe00175eb,0x0900f04f,0x2a049a28,
+0xf896d118,0xf896204d,0xf507304c,0x882054bf,0x2302ea43,0x0218f248,
+0x0202ea03,0xf6470141,0xf04273e0,0xea010204,0x431a0303,0x92093001,
+0xe0188020,0x98269c27,0xf2411e63,0x429871de,0xd1015a7a,0x527b1c53,
+0x9c289926,0x030ff001,0x1302ea43,0xf647015b,0xea0372e0,0xf0040202,
+0x431a0307,0x98059209,0x03fcf000,0x4b742b80,0xf049bf08,0xea080920,
+0xb93b0303,0x3848f8d7,0x803cf8d3,0xea084b6e,0xb10b0303,0xe01d4642,
+0x3848f8d7,0x4b6a6c1a,0x0303ea02,0x792bb11b,0x0f01f013,0x792bd112,
+0x0f01f013,0xf1bad10a,0xd0070f00,0x0f01f1ba,0x9912d004,0xf013680b,
+0xd0030210,0x30f4f89b,0x027ff003,0x461168bb,0xb9636b5b,0x7a239c2a,
+0xd1082b02,0x037ff002,0xd9042b30,0x037ff022,0x0230f043,0xf4214611,
+0xf44363e0,0xf4227300,0xf44262e0,0xf0037200,0xf1ba007f,0x93170f02,
+0x90119216,0xf1bad002,0xd10c0f00,0x5327f507,0x9907881b,0xdd064299,
+0xf083792b,0xf0030301,0x930c0301,0x2200e001,0xf8d7920c,0x7b1b3848,
+0xf642b1c3,0x5cfb23d0,0x4b40b1a3,0x571b9c11,0xda0f2b00,0x99169827,
+0x28029a17,0x2116bf28,0x2216bf28,0xf04fbf2c,0xf04f0800,0x91160801,
+0xe0019217,0x0800f04f,0x9c179b16,0xf0049812,0xf003047f,0xea4b0b7f,
+0x61434304,0x46389415,0x9a079917,0xf10d9b06,0xf7ff046a,0x4638fd45,
+0x9a079916,0xf7ff4623,0x2206fd3f,0x0036f106,0xf7f84621,0xf1bbfd19,
+0xd0080f02,0x0f04f1bb,0xf1bbd005,0xd0020f0b,0x0f16f1bb,0x9907d106,
+0x2307f3c1,0x103af886,0x303bf886,0x9a154b1b,0x2b00569b,0x9c06da05,
+0xf0037823,0x930a030f,0x9806e002,0x900a7800,0x29a49905,0x792bd00f,
+0xf0131d2c,0xd1120f01,0x9a0d9917,0x46389b29,0xf86af7fe,0xf3c070a8,
+0x70e8200f,0x78abe007,0xea4378ea,0xf8862302,0x0a1b303c,0x7823e006,
+0x0f01f013,0x2300d00c,0x303cf886,0x303df886,0x46c0e012,0x00010040,
+0x0800007f,0x0001bae4,0x9a0d9916,0x46389b29,0xf846f7fe,0x003cf886,
+0x200ff3c0,0x003df886,0x68139a12,0x7f00f413,0x8993d00d,0x5900f449,
+0x3042f886,0xf8860a1b,0x89d33043,0x3044f886,0xf8860a1b,0x9b263045,
+0xf049b90b,0x1d2c0908,0x792b9414,0x0f01f013,0x9812d10b,0xf4136803,
+0xd1065f80,0xb1119910,0x3d7bf897,0xf049b90b,0xf1ba0901,0xd1070f02,
+0x3d3df897,0x9a11b123,0xbf882a04,0x5980f449,0xb10b9b13,0x4900f449,
+0x2319ea4f,0x9000f886,0x9c2a7073,0xf642b19c,0x5cfb1385,0xf8d7b97b,
+0xf8d33dc8,0xf0133094,0xd1080f08,0x2a3579a2,0x7b23d805,0x0307f003,
+0x1302ea43,0x2300e000,0x0a1b70b3,0x70f32400,0x46291d30,0xf7f82202,
+0x71b4fc63,0xf88671f4,0xf886402c,0x982a402d,0xd0392800,0x1385f642,
+0x2b005cfb,0xf8d7d134,0xf8d33dc8,0xf0133094,0xd12d0008,0x798b992a,
+0xd8292b35,0xf1059a05,0xf4020118,0xf5b37340,0x9b107f40,0xf105bf08,
+0xb103011e,0x9c2a3102,0x2b027a23,0x4632d111,0x18239c2a,0x30bcf8b3,
+0xf3c37593,0x75d32307,0x32021c83,0x46182b0a,0xf106d1f2,0x22030020,
+0x9b2ae004,0x0016f106,0x200ef993,0xfc20f7f8,0xf1062206,0x99140026,
+0xfc1af7f8,0x22009c09,0xf8860a23,0xf886404c,0xf886304d,0xf886204e,
+0x980c204f,0x4690b108,0xf1b8e003,0xf0000f00,0x99178093,0x23022200,
+0xf7fd4638,0x2200ff17,0x2302900f,0x99164638,0xff10f7fd,0x46827832,
+0xf1b87873,0xd0040f00,0x2303ea42,0x6300f443,0xea42e003,0xf0432303,
+0x70330306,0x0f00f1b8,0x2114bf0c,0x0a1b210e,0xf1067073,0x91080950,
+0x4638ac19,0x9a08990f,0xf7ff464b,0x4623fbf9,0x46514638,0xf7ff9a08,
+0x4621fbf3,0xf1062206,0xf7f8002e,0x9c07fbcd,0xf1069b0d,0x94010256,
+0x920e2400,0x9a0f9300,0x46419b17,0x46389402,0xff5ef7fd,0x0058f886,
+0x200ff3c0,0x0059f886,0x9907980d,0x90009b16,0x94029101,0x46414638,
+0xf7fd4652,0xf886ff4d,0xf3c00034,0xf886200f,0xf1060035,0xf1b8005a,
+0xd0090f00,0x033bf06f,0x010af105,0xf8862206,0xf8863056,0xe0074057,
+0x034bf06f,0x3056f886,0x8057f886,0x220c9914,0xfb8ef7f8,0x9c0a9a0f,
+0x037ff002,0x98164a92,0x2b0056d3,0xf899bfb6,0xf8963000,0xf0033050,
+0x021b030f,0x0404ea43,0x037ff00a,0xbf88459b,0x940a4650,0xe01c900b,
+0x22064641,0x0050f106,0xfb4ef7f8,0x22104641,0x0056f106,0xfb48f7f8,
+0xf1064641,0x2206002e,0xfb42f7f8,0x8034f886,0x8035f886,0xf8cd9916,
+0x910b8038,0xf8cd46c2,0x9a0a803c,0xf1bb0a13,0x74b20f02,0xd00b74f3,
+0x0f04f1bb,0xf1bbd008,0xd0050f0b,0x0b16f1bb,0xf04fbf18,0xe0010b01,
+0x0b00f04f,0xf0049c0f,0x2b02037f,0x2b04d009,0x2b0bd007,0xf1b3d005,
+0xbf180916,0x0901f04f,0xf04fe001,0xf00a0900,0x2b02037f,0x2b04d008,
+0x2b0bd006,0xf1b3d004,0xbf180416,0xe0002401,0xf8d72400,0x68183848,
+0xfbecf005,0x3848f8d7,0x681bb2c0,0xf0056819,0xea4bfbe7,0xea430389,
+0xea431304,0xb29b2300,0x7533b29b,0x75730a1b,0x28029815,0x2804d008,
+0x280bd006,0xf1b0d004,0xbf180316,0xe0002301,0x990d2300,0xf983fa1f,
+0x0f01f011,0x9a0bd05b,0x037ff002,0xd0042b02,0x3308f642,0x2b0156fb,
+0x78aad14a,0xea5278eb,0xd0092303,0x9b299917,0x22004638,0xfe64f7fd,
+0xf3c070a8,0x70e8200f,0x203cf896,0x303df896,0x2303ea52,0x9916d00b,
+0x46389b29,0xf7fd2200,0xf886fe53,0xf3c0003c,0xf886200f,0x9b0e003d,
+0xd02c2b00,0x78db789a,0x2303ea52,0x9807d027,0x9a0f2400,0x90019b17,
+0x94004641,0x46389402,0xfe5af7fd,0x7088990e,0x200ff3c0,0x9a0770c8,
+0x92019b16,0x94029400,0x46414638,0xf7fd4652,0xf886fe4b,0xf3c00034,
+0xf886200f,0xe0060035,0x33b8f8d7,0x0910f049,0xf8c73301,0xf64233b8,
+0x5afb330e,0xf4034638,0xea497370,0x72330303,0x230ff3c3,0x99177273,
+0xfbeef7ff,0xf3c072b0,0x72f0200f,0x46389916,0xfbe6f7ff,0xf3c07330,
+0x7370200f,0xb9139b0c,0x0f00f1b8,0x990fd00f,0xf7ff4638,0x73b0fbd9,
+0x200ff3c0,0x465173f0,0xf7ff4638,0x7430fbd1,0x200ff3c0,0x9c127470,
+0x68239809,0x0304f043,0xb01d6023,0x8ff0e8bd,0x0001bae4,0x2325b570,
+0x2303700b,0xf641704b,0x5cc3032c,0x708b4605,0x032ef641,0x460c5ac0,
+0xfca0f003,0x032df641,0x5ceb70e0,0x71231d60,0x46c0bd70,0x4ff7e92d,
+0x9de4f8b0,0xfb09230c,0xf5000303,0xf503675e,0x4680665e,0x360c3704,
+0x0a00f04f,0xe01f9101,0x46384659,0xfdc2f7f7,0xf7fd4604,0x9b01fc23,
+0xd0084298,0x46594638,0x2d004622,0x4625bf08,0xfd7ef7f7,0xf8d8e005,
+0x46210048,0xf7fa2201,0xf856fd2f,0x42ab3c0c,0xf10ad1e2,0x3e0c0a01,
+0x0309ebca,0xf10345ca,0xd0013bff,0xe7f02500,0x8ffee8bd,0x4ff0e92d,
+0x9107b089,0x461d9206,0x7c43680f,0xf8b74604,0xb1a39014,0x3de0f890,
+0xd1352b00,0xf7fd4638,0xf8b4fbed,0x6a823324,0x4370f403,0x5f80f5b3,
+0x2300bf14,0x429a2301,0x69464683,0xf8d4d005,0x330133c4,0x33c4f8c4,
+0x4638e081,0xfbb6f7fd,0xf8134b48,0xf8d48000,0xea4f3844,0x18cb0148,
+0x2024f9b3,0x36fcf8b4,0x8000f8c5,0xdb0e429a,0x0f03f1b8,0x190bd80b,
+0x2dbaf8b3,0x3db8f8b4,0x0302ea23,0x3db8f8a4,0x000ff06f,0xf8d4e06f,
+0x330133d0,0x33d0f8c4,0x785b693b,0xf413021b,0xd15f4380,0xe00a461d,
+0x30acf8d6,0x3ffff1b3,0xeb06d04d,0xf8d30383,0x2d0050b0,0xf8d4d047,
+0xeb033844,0x68db0388,0x2b03681b,0xeb04d802,0xe7d10348,0xb155464e,
+0x300ff995,0x1af64638,0x2b027a2b,0x3e08bf08,0xf7fd4631,0xf8dbfb65,
+0xf04f3004,0x465a0a00,0x0380f3c3,0x0901f04f,0x46394620,0xa000f8cd,
+0x9004f8cd,0x8008f8cd,0xa00cf8cd,0xf8cd9504,0xf7ffa014,0x9a07faf3,
+0x42bb6813,0x6ca0d004,0x464a4639,0xfc84f7fa,0x46509b06,0x9000f8c3,
+0x33a4f8d4,0xf8c43301,0xf8d433a4,0x199b33a8,0x33a8f8c4,0x9a06e00f,
+0x60132300,0x46396ca0,0xf7fa2201,0xf04ffc6d,0xe00430ff,0x5010f8db,
+0xd1a82d00,0xb009e79c,0x8ff0e8bd,0x0001bd7a,0x41f0e92d,0x46047c45,
+0x680e4617,0xf7ffb115,0xe010ff39,0x33c4f8d0,0x33014631,0x33c4f8c0,
+0x6c806015,0xfc7cf7f7,0x46316ca0,0xf7fa2201,0xf04ffc47,0xe8bd30ff,
+0x46c081f0,0x2207b510,0xf840f00d,0x46c0bd10,0x47f0e92d,0x46812600,
+0x46b0460d,0xeb05e016,0x687c0708,0x6e21b17c,0xf8d9b129,0xf8b40048,
+0xf7fa2064,0xf8d9fc49,0x46210048,0xf7fa2290,0x2300fc43,0x3601607b,
+0x0804f108,0x429e682b,0x2300d3e5,0xe8bd602b,0x46c087f0,0xf8d0b57f,
+0x460e3848,0x685d6818,0xf0056804,0x23fff9c1,0x2100b2c0,0x90039301,
+0x46304622,0x9100462b,0xf00c9102,0xbd7ffb9d,0x41f0e92d,0x3024f890,
+0x7d1af5ad,0xf8d04606,0xb16b7848,0x2324f8b0,0x6328f500,0x4270f402,
+0x5f00f5b2,0xf44fbf14,0x2200729c,0x189f3304,0x2c006bfc,0x4621d14c,
+0x72daf44f,0xf7f8a802,0xf506f8af,0xa86f5538,0x22844621,0xf8a8f7f8,
+0x46a43550,0x682b46a0,0xf003a802,0xea4f0e7f,0x686b018e,0xf10c5842,
+0x18d20c01,0xbf844542,0x46744690,0xf1bc3508,0x50420f40,0xbb3cd1eb,
+0x3d44f8d6,0xbf181e1a,0xf8962201,0xb1333024,0xf5064621,0xf00c704a,
+0x4604fafb,0xf107e018,0x46210574,0xf00c4628,0x687bfaf3,0x2b024604,
+0x7b3ad10e,0x33fdb962,0x46289300,0xa9902301,0xf00c9201,0x9b90faab,
+0x18d3aa9a,0x4c25f813,0xf50d4620,0xe8bd7d1a,0x46c081f0,0x9c04b513,
+0x9c059400,0xf2439401,0x590004a0,0xfac0f003,0x46c0bd1c,0x47f0e92d,
+0x46049d09,0x6c804688,0x01baf105,0x469a4691,0xfb90f7fa,0x0718f105,
+0xb9284606,0x33c0f8d4,0xf8c43301,0xe03033c0,0xf7fd21a2,0x4630fa25,
+0xf7fd4639,0x6932fa29,0xe0023517,0x54ab1c6b,0x2d003d01,0x6934d1fa,
+0x2318ea4f,0xf8847063,0x70a58000,0x1d2070e5,0x22064649,0xf844f7f8,
+0x000af104,0x22064651,0xf83ef7f8,0x0010f104,0x22069908,0xf838f7f8,
+0x75e575a5,0x34189b0a,0x4630601c,0xf7fd2107,0x4630fa05,0x87f0e8bd,
+0x41f0e92d,0x4698b088,0x460d9b0e,0x93014614,0x9200ab07,0x21089302,
+0x4623462a,0xf7ff4606,0x4607ffa5,0x3801b908,0x2401e01a,0xf8d62500,
+0x95002848,0x94029401,0x95049503,0x8014f8cd,0x23baf642,0x46395cf3,
+0x46306912,0xf97af7ff,0x46214630,0x4623463a,0xf7fe9400,0x4628f955,
+0xe8bdb008,0x46c081f0,0xf241b537,0x59034454,0x68194605,0xf00ca801,
+0x592bfe0b,0x68182400,0x7b03e008,0x0f02f013,0x1c63d001,0xa801b2dc,
+0xfe04f00c,0xd1f42800,0xbd3e4620,0x2300b513,0x3007f88d,0x3006f88d,
+0x3007f88d,0xf5007d83,0x3418542c,0xf243b153,0x58c30388,0xb12b781b,
+0x3007f89d,0x0304f043,0x3007f88d,0xffccf7ff,0x428379a3,0xf89dd10b,
+0x79e32007,0xd1064293,0x2006f89d,0x42937a23,0x2000d101,0x71a0e007,
+0x3007f89d,0x71e32001,0x3006f89d,0xbd1c7223,0x43f0e92d,0xac0db0a1,
+0x46894605,0x21004690,0x46202228,0xf7f7461e,0xa803ff7f,0x22282100,
+0xff7af7f7,0x5026f505,0x68033008,0x7dabb93b,0xf8d5b97b,0x7b1b3848,
+0xd1042b05,0x46214889,0xf9e8f00c,0x2b04e005,0x4628d103,0xf7ff4621,
+0xab03fe7d,0x46289300,0xf8d5ab0d,0xf5051328,0xf7fe724b,0x220cfe2f,
+0x21004630,0xff54f7f7,0x3320f895,0xf8957233,0x72733321,0x2326f995,
+0x2301b122,0x3b0172b3,0xe00272f3,0x72b32302,0xf8d572f2,0x685b3848,
+0xd10d2b02,0x3352f8b5,0x0f20f013,0x7ab3d008,0xea437af2,0xf0432302,
+0x72b30320,0x72f30a1b,0x3848f8d5,0xb1637b1b,0x23bbf642,0xb1435ceb,
+0x7af27ab3,0x2302ea43,0x6380f443,0x0a1b72b3,0xf1b972f3,0xf1060f80,
+0xd110070c,0x3045f898,0xf10db16b,0x2100045f,0x2024f898,0xf7f74620,
+0xf898ff0f,0x46382024,0x46232100,0xf898e005,0x46382024,0xf1082100,
+0xf7fe0325,0x2101fc77,0x9a0dab0e,0xfc72f7fe,0x3324f8b5,0xf4034604,
+0xf5b34370,0xd1095f00,0x70032303,0x70432301,0x0324f8b5,0xf95af003,
+0x340370a0,0x3326f995,0xf1b9b18b,0xd10e0f80,0x70232305,0x70633b01,
+0x720cf241,0x3b015cab,0x5cab70a3,0x230070e3,0x71637123,0xf9953406,
+0xb95b3326,0x70233306,0x70632302,0x3322f8b5,0xf8b570a3,0x0a1b3322,
+0x340470e3,0x032df641,0xb13b5ceb,0x3326f995,0x4621b123,0xf7ff4628,
+0x4604fc79,0x3848f8d5,0xb3837b1b,0xf88d2300,0xf642307f,0x5ceb23bd,
+0x2301b113,0x307ff88d,0x23bcf642,0xb12b5ceb,0x307ff89d,0x0302f043,
+0x307ff88d,0x23bef642,0xb12b56eb,0x307ff89d,0x0304f043,0x307ff88d,
+0x077ff10d,0x463b4620,0x2201212a,0xfc06f7fe,0x532bf505,0x4604781b,
+0x212fb12b,0x463b2201,0xfbfcf7fe,0xf8d54604,0x7b1b3848,0xf243b91b,
+0x5ceb038c,0x9a03b13b,0x4620b12a,0xab042132,0xfbecf7fe,0xf1b94604,
+0xbf140f80,0x22012202,0x00d0f8d8,0xf0034621,0xf642f86b,0x5ceb3319,
+0xb12b4602,0x512cf505,0xf7fe3118,0x4602fbcd,0x1b929b28,0xb021601a,
+0x83f0e8bd,0x0001ba34,0x43f0e92d,0x9d0db085,0x682c9e0c,0x3c1e4691,
+0xf842aa04,0x92004d04,0xf106461a,0x460f031e,0xf7ff4680,0x9b03feb9,
+0x331e2100,0x602b221e,0xf7f74630,0x2f80fe3d,0x9a03d10a,0x46494640,
+0x4633321c,0xfe74f7fe,0x46494640,0xffd0f7fd,0x71b3b2bb,0x2f800a1b,
+0xd10571f3,0x000af106,0x2206490a,0xfe44f7f7,0x014cf108,0xf1062206,
+0xf7f70010,0xf508fe3d,0xf10651be,0x31160016,0xf7f72206,0xb005fe35,
+0x83f0e8bd,0x0001a898,0xf44fb5f0,0xf5ad7300,0x460d7d05,0xab839383,
+0xae034617,0x21509301,0x462b2200,0x96004604,0xffa6f7ff,0x4620b117,
+0xf8aaf7fe,0x46339a83,0xf5043203,0xf44f60e8,0xf022711a,0xf7fe0203,
+0x4620fae9,0xf8bd214a,0xf7fd220c,0x4620fdc3,0xf7fd4629,0x9983fef7,
+0x39024620,0xb2899183,0xfe82f7fe,0x4620b117,0xffb6f7fd,0x7d05f50d,
+0x46c0bdf0,0x4605b570,0x2400460e,0xf8d3192b,0xb1391dc8,0xb12b798b,
+0xb11b790b,0x46324628,0xffb6f7ff,0x2c103404,0xbd70d1f0,0xf8d0b570,
+0xf5ad3d00,0xf0237d04,0xf8c00302,0x790b3d00,0x460e4605,0xd0342b00,
+0x30e4f8d1,0x0f20f013,0xf8d0d02f,0xf8d2280c,0xf0033124,0x2b030303,
+0x3b01d102,0x3128f8c2,0x3124f8d2,0x0303f003,0xd1062b03,0x3d00f8d5,
+0x0302f043,0x3d00f8c5,0xf44fe017,0x93837300,0xffb0f7fc,0x0370f243,
+0xab8350e8,0xac034602,0x46289301,0x46332180,0xf7ff9400,0x4628ff2d,
+0x9a834621,0xf7fe2300,0xf50dfacb,0xbd707d04,0x4605b570,0x192b2400,
+0x1dc8f8d3,0x798bb131,0x790bb123,0x4628b113,0xffacf7ff,0x2c103404,
+0xbd70d1f1,0xf890b510,0x46043d4b,0xf002b1b3,0xf894ff23,0x21003d48,
+0x18624318,0x13b4f642,0x31025ad2,0x1329f640,0xbf98429a,0x0001f040,
+0xd1f2290c,0x0301f1d0,0x2300bf38,0x3d4af884,0x46c0bd10,0x4ff0e92d,
+0x468b4681,0x1048f8d9,0x9100b089,0x302af892,0x8b904617,0x9301b90b,
+0xf892e002,0x92012022,0x302cf897,0xf410b9a3,0xd0116f00,0x683a9b01,
+0x0143eb0b,0x7dd27d93,0x1158f8b1,0x2302ea43,0xd1054299,0x355cf8d9,
+0xf8c93301,0xe184355c,0xf0138c3b,0xf0400204,0xf4008180,0x637b4380,
+0xf243b13b,0xf85903a0,0x63ba0003,0x22024639,0xf897e15b,0xf3c0502c,
+0x2d002a80,0x8111f040,0xeb0b9901,0x68390041,0x4158f8b0,0x7d8b7dca,
+0x2302ea43,0x3158f8a0,0x7d8a7dcb,0xea429901,0xf0122203,0xea4f000f,
+0xd14b0381,0x040beb03,0x1118f8d4,0x9800b149,0xf7fa462a,0xf8c4f819,
+0xf8c45118,0xf8c45138,0xf1ba524c,0xf0000f00,0x697b80eb,0xf8c448a5,
+0x68fb3118,0xf5c36879,0xf8c463e4,0x22083138,0xfbfef7f7,0x3004f8db,
+0xf023b110,0xe0010308,0x0308f043,0x3004f8cb,0x03a0f243,0x2003f859,
+0x4b999801,0x4b995c19,0xeb025c5b,0x6b130283,0xf243b933,0xf8390394,
+0x2b003003,0x811ef000,0x464869bb,0x7c597c1a,0x2101ea42,0xfea4f7fd,
+0xeb0b9901,0xf8c30381,0xe10f024c,0x060beb03,0x1118f8d6,0xf022b1a1,
+0xf024020f,0x429a030f,0xf004d104,0x3301030f,0xd00f4298,0x462a9800,
+0xffc2f7f9,0x5118f8c6,0x5138f8c6,0x524cf8c6,0x3400f8d9,0xf8c93301,
+0xe0ea3400,0xf8d668ba,0x429a3138,0xf243d8ea,0xf85903a0,0x98012003,
+0x5c194b75,0x5c5b4b75,0x0283eb02,0xb9248e14,0x0394f243,0x4003f839,
+0x69bbb1cc,0x7c1a4648,0xea427c59,0xf7fd2101,0xf8d6fe5f,0x1ac0324c,
+0xd30c42a0,0xf8d69800,0x462a1118,0xff8cf7f9,0x5118f8c6,0x5138f8c6,
+0x524cf8c6,0x9901e0b9,0xeb0b68bd,0xf8d60681,0x462a4118,0x8014f8b4,
+0x68796920,0xf7f74440,0x4620fc67,0x0105eb08,0xfe32f7fc,0x3138f8d6,
+0x1b5b9800,0x3138f8c6,0x22006979,0xff68f7f9,0x0f00f1ba,0x809ef040,
+0x3118f8d6,0xa138f8c6,0xf8c6617b,0x697ba118,0xa24cf8c6,0x8a99691a,
+0x0318f102,0xf1a1607b,0x60bb0318,0x3029f897,0x60f9603a,0xf102b12b,
+0x607b031e,0x031ef1a1,0xf89760bb,0xb143302a,0x9a01687b,0x607b3302,
+0xf88768bb,0x3b022022,0x683a60bb,0x78527813,0x2302ea43,0x6b7b83bb,
+0x6bb9b173,0xf991687b,0x189b200e,0xf991607b,0x68bb200e,0x60bb1a9b,
+0xf1bae002,0xd15d0f00,0xf10d6839,0x3104061a,0x46302206,0xfc0cf7f7,
+0xad056839,0x2206310a,0xf7f74628,0x6839fc05,0x040ef10d,0x31104620,
+0xf7f72206,0xf897fbfd,0xb12b3029,0xa8026839,0x22063118,0xfbf4f7f7,
+0xf4138bbb,0xf4037f80,0xd1057300,0xbf142b00,0x462b4623,0xe004677e,
+0xb90b677c,0xe001673d,0x673bab02,0x66fb683b,0xb16b6bbb,0x2b017a1b,
+0x2b03d00a,0xf243d008,0xf85903a0,0x46390003,0xf0032203,0xe019f84f,
+0x781b6f7b,0x0f01f013,0xf8d9d004,0x33013570,0x3570f8c9,0x370cf8d9,
+0xf8cb4639,0xf2433020,0xf85903a0,0x22000003,0x9800e7e7,0x22006979,
+0xfec6f7f9,0xe8bdb009,0x46c08ff0,0x0001bbec,0x0001bd7a,0x0001a110,
+0x47f0e92d,0xb0a22400,0x4026f88d,0x402ff88d,0x402cf88d,0x4064f88d,
+0x9306461f,0x46058a9b,0x468a2b21,0x94214691,0x940a940f,0xd93f9207,
+0x8010f8d7,0xa81f2206,0xf7f74641,0xf108fb8d,0x92010206,0xf8987852,
+0xea433006,0xf8ad2302,0xf3c33020,0xf8ad0381,0xf8bd3022,0xf3c33020,
+0xf4031203,0xf5b37340,0xbf147f40,0x23012300,0x302df88d,0x3022f8bd,
+0x2024f8ad,0xbf0a2b02,0x3024f8bd,0xf3c34623,0xf89d03c0,0xb2db402d,
+0x302ef88d,0xbf0c2c00,0x22282222,0x3202b103,0x302ff89d,0x3204b103,
+0x8a9b9b06,0xd2054293,0x3404f8d5,0xf8c53301,0xe1cd3404,0x7da89901,
+0xf003790b,0xf88d0201,0x28002030,0x7c2bd144,0xd0412b00,0x3024f895,
+0xb99cb1a3,0x3020f8bd,0x7f80f413,0x3104d001,0xf413e005,0xd0017f00,
+0xe000310a,0x46283110,0xf0022201,0x3800fcef,0x2001bf18,0x0034f88d,
+0xf1059801,0x3004014c,0xf7f72206,0xb340fa2d,0x3020f8bd,0x7f80f413,
+0xf89dd105,0xb1133030,0x3034f89d,0xf89db9eb,0xb113302d,0x3030f89d,
+0x7c2bb9bb,0xf0002b00,0xf89d818b,0x2b003034,0x8186f000,0x2b007dab,
+0x8182f040,0xe0092601,0x9901b93a,0x31044628,0xfcbcf002,0xf0002800,
+0x26008177,0x21069806,0xfcbaf7fc,0xf1029a01,0x93020318,0x302df89d,
+0xf102b113,0x9302031e,0xf88d2300,0xf89d3031,0xb1eb302e,0xf7fc9802,
+0xf3c0fccb,0xf88d13c0,0x2b003031,0x8158f040,0xf0004ba9,0xf88d0207,
+0x5c9a2026,0x5c9b4ba7,0xf3c0930a,0xf88d1300,0x9b02302c,0x93023302,
+0x3026f89d,0x3064f88d,0x3031f89d,0x9806b90b,0x4650e003,0xf7f69906,
+0x8a81fe03,0xf7fc3904,0x9a06fc87,0x8a939c02,0x93046912,0x1b1b1aa4,
+0x46394650,0xf7f69303,0x1b00fdeb,0xbb269005,0x03a0f243,0x990158e8,
+0xab219a07,0xfceaf002,0xf0402800,0xe121811d,0x3020f8bd,0x7f80f413,
+0xe012d00d,0x2020f8bd,0x3023f895,0x7240f402,0xbf142b00,0x7300f44f,
+0x429a2300,0xf8d5d005,0x330133f8,0x33f8f8c5,0x7dabe102,0xf89db1bb,
+0x9a21302d,0x6953b11b,0x309ef8b3,0xf8b2e036,0xf8ad30e8,0xf8bd306c,
+0xf4133020,0x68535f80,0xf443bf14,0xf4233300,0x60533300,0xf895e028,
+0xb1033023,0x9b21b1fe,0xf899b9eb,0xf8992012,0x99013013,0x2203ea42,
+0x02c7f3c2,0x310a4628,0xbfd42a0e,0x22012200,0xfb6af00c,0xb9509021,
+0x3023f895,0xf0402b00,0xf8d580cb,0x3301340c,0x340cf8c5,0x9b21e0c4,
+0x30e8f8b3,0x306cf8ad,0x3030f89d,0x2b007daa,0x2a00d03e,0x80b8f040,
+0x3023f895,0x9801b14b,0x014cf105,0x32063010,0xf93af7f7,0xf0002800,
+0x990180ab,0x78a31d0c,0x401a7862,0x7921790b,0x78e24013,0x7963401a,
+0x400b4011,0xd01f2bff,0x3022f895,0x461eb9e3,0x2206e008,0x5102fb06,
+0x31524620,0xf91cf7f7,0x3601b168,0x3114f8d5,0xd3f2429e,0x03a4f243,
+0xb13358eb,0xf2438822,0x429a3333,0x2300d101,0x2301e000,0xd17b2b00,
+0x46414648,0xfc00f00b,0xf89d6338,0x2b003030,0xf000d167,0x2816007f,
+0xd80cd03a,0xd025280b,0x2802d804,0x2804d016,0xe05ad01a,0xd023280c,
+0xd0272812,0x2830e055,0xd804d03c,0xd02d2818,0xd0312824,0x2860e04d,
+0x286cd040,0x2848d044,0xe046d036,0x35d8f8d5,0xf8c53301,0xe04035d8,
+0x35dcf8d5,0xf8c53301,0xe03a35dc,0x35e0f8d5,0xf8c53301,0xe03435e0,
+0x35e4f8d5,0xf8c53301,0xe02e35e4,0x35e8f8d5,0xf8c53301,0xe02835e8,
+0x35ecf8d5,0xf8c53301,0xe02235ec,0x35f0f8d5,0xf8c53301,0xe01c35f0,
+0x35f4f8d5,0xf8c53301,0xe01635f4,0x35f8f8d5,0xf8c53301,0xe01035f8,
+0x35fcf8d5,0xf8c53301,0xe00a35fc,0x3600f8d5,0xf8c53301,0xe0043600,
+0x3604f8d5,0xf8c53301,0x46283604,0xaa019921,0xfc1cf7ff,0x46c0e00f,
+0x0001bd7a,0x0001a110,0x99064650,0xf7f92200,0xe004fc8b,0x2b007dab,
+0xaee0f43f,0xb022e6d8,0x87f0e8bd,0x4a2db5f0,0x7813b097,0x460f4604,
+0xd1512b00,0x70133301,0x6db8f8b0,0x69cbe02f,0xf013ad13,0xd0060f04,
+0x46202301,0x9314462a,0xfd44f7fc,0x4620e005,0xaa14a903,0xf7ff462b,
+0xb978f803,0xe0094605,0x93002301,0xf852aa03,0x46202025,0xf7fd9913,
+0x3501fa9f,0x429d9b14,0xe00cdbf2,0x0f10f110,0x4638d109,0x9a039915,
+0xfcaef7f6,0x3db8f8b4,0xd00a429e,0xb146461e,0x46384631,0xf7f6aa15,
+0x4601fd09,0x28009003,0x6aa1d1c5,0xf8b4b169,0x2b0f3dea,0xf421d809,
+0x62a17180,0xf8d4b929,0xf04f073c,0xf7fc32ff,0x4b02f88f,0x701a2200,
+0xbdf0b017,0x0001c708,0x4ff0e92d,0x9105b09f,0x180cf8d0,0x3844f8d0,
+0x7a1b9107,0xb1534607,0x2120f8d1,0x4304f240,0x0303ea02,0x6080f5b3,
+0x2001bf18,0x6880e005,0xfe6af7f5,0xbf183800,0xb1282001,0x073cf8d7,
+0xfa5cf7fc,0xe3782000,0x2cf8f8d7,0x0cf8f8c7,0x0f40f012,0xd0029206,
+0xf7fc4638,0x7dbbfc1b,0x9b06b133,0x0f02f013,0x4638d002,0xfb40f7ff,
+0xf0119906,0xf0005f00,0x9a0581aa,0x2a002300,0xf04fbf0c,0x220832ff,
+0x93099208,0xf8ade17e,0x0c12206e,0x206cf8ad,0xf8d36cba,0x920c3174,
+0x206ef8bd,0x3072f8ad,0x4307f3c3,0x3074f8ad,0x0360f002,0x0100f04f,
+0xf8ad2b40,0xf8bd1070,0xd106106c,0x3568f8d7,0x3312eb03,0x3568f8c7,
+0xf001e156,0xeb070107,0xf8d30381,0x910d0778,0x21006ac3,0x091cf002,
+0x69044798,0x78224680,0xea427863,0xf1002503,0x930a031c,0x306ff894,
+0x206ef894,0x2b03ea42,0x3026f894,0x0f01f013,0x990ad013,0x3009f991,
+0x0383eb07,0x2dc8f8d3,0x3324f8b7,0x4370f403,0x5f80f5b3,0x2300bf14,
+0xeb022301,0x6d150283,0xf3c5e007,0x463812c0,0x0126f104,0xffe2f00b,
+0xb10d4605,0x502cf8c8,0xf0037823,0x930b0304,0x306ef8bd,0xf3c30b1e,
+0xd0052a03,0x33acf8d7,0x199b3b01,0x33acf8c7,0x0f00f1ba,0xf8d7d005,
+0x3b0133ac,0xf8c74453,0xf48b33ac,0x6cb86380,0xf3c34641,0xf7f62b80,
+0xf8bdfb8b,0xf013306e,0xd02e0f02,0x3548f8d7,0xf8c73301,0xf8d73548,
+0x3b013568,0x2e01199b,0x3568f8c7,0xf642dd05,0x58bb6248,0x199b3b01,
+0xf1bb50bb,0xd0150f00,0x3578f8d7,0x6248f642,0xf8c73301,0x58bb3578,
+0xf8d7b123,0x33013554,0x3554f8c7,0x2b0158bb,0xf8d7d904,0x33013558,
+0x3558f8c7,0x3501b9c5,0xf013e096,0xd1170ffe,0x68139a0a,0x5f80f413,
+0xf8d7d012,0x33013548,0x3548f8c7,0x0f00f1bb,0xf8d7d004,0x33013578,
+0x3578f8c7,0xd07c2d00,0x370cf8d7,0xe078622b,0x0f0cf1b9,0xf1b9d075,
+0xd1050f10,0x35b0f8d7,0xf8c73301,0xe06c35b0,0x0f14f1b9,0xf8d7d105,
+0x330136d8,0x36d8f8c7,0xf1b9e063,0xd1100f04,0x2b007dbb,0x2d00d05d,
+0x4638d05b,0xfb12f7fc,0xf0137b2b,0xd1560f02,0xf0137e6b,0xd1520f01,
+0xf1b9e04f,0xd04e0f08,0x0f18f1b9,0xf8bdd049,0xb12b3074,0x33d8f8d7,
+0xf8c73301,0xe04033d8,0x3026f894,0x0f01f013,0xb126d019,0x3548f8d7,
+0xf8c73301,0xf1bb3548,0xd0320f00,0xb9137dbb,0x3023f897,0xf8d7bb6b,
+0x33013578,0x3578f8c7,0xf8d7b33e,0x3301354c,0x354cf8c7,0x9b0be021,
+0xf642b913,0xe00613c2,0x13c2f642,0x459a5afb,0xf642d004,0x5afb13c4,
+0xd10d429e,0x3568f8d7,0xf8c718f3,0xf1bb3568,0xd00a0f00,0x3550f8d7,
+0xf8c73301,0xe0043550,0x33bcf8d7,0xf8c73301,0x250133bc,0x2500e000,
+0x990d4638,0xf7fc2201,0x990bffed,0x03a0f243,0x290058f8,0xf04fbf08,
+0x464b0a00,0x46412400,0x9600aa1a,0xa004f8cd,0xf0029402,0xf898fbef,
+0xb12b3024,0x46414638,0x206ef8bd,0xfb9ef7fc,0x980cb125,0x22014641,
+0xfa6af7f9,0x0f00f1bb,0xf642d002,0x50fc6348,0x9b089a09,0x429a3201,
+0xd2079209,0x380cf8d7,0x2170f8d3,0x0f01f012,0xae79f47f,0x03a0f243,
+0x210058f8,0xfa76f002,0x3deaf8b7,0xf507b12b,0x4638615e,0xf7ff3104,
+0x9909fdc5,0x42919a08,0xf8d7d305,0xf0433cf8,0xf8c75300,0x9b063cf8,
+0x0f04f013,0xf8d7d00a,0x99073458,0xf8c73301,0xf2433458,0x58f803a0,
+0xf96af002,0xf0119906,0xd00b0f20,0xf6429b07,0xf8d33138,0x587b2124,
+0x9a074313,0x3124f8c2,0x507b2300,0xf4139b06,0xd0046f00,0x33d8f8d7,
+0xf8c73301,0x990633d8,0x4f00f411,0x8094f000,0x25009a05,0xbf0c2a00,
+0x3afff04f,0x0a08f04f,0x46a8462c,0xb90ce008,0xe000461d,0xf1086063,
+0x45d00801,0x461cd207,0x0778f8d7,0x47986dc3,0x28004603,0xf8d7d1ef,
+0x6e030778,0xe0694798,0x692e2300,0xb004f8d5,0x606b211e,0xf8d74628,
+0xf7fc9048,0x7b33f89d,0x0f04f013,0x8aabd006,0xd9102b01,0x21024628,
+0xf892f7fc,0x69288aab,0xd9082b07,0x79c27983,0x2202ea43,0xf0137bb3,
+0xd0060f01,0xf8d7e040,0x33013404,0x3404f8c7,0xf3c2e03a,0x2c020481,
+0xbb2cd000,0x0110f100,0x784a788b,0x431a7c00,0xea4078cb,0x43130202,
+0x431a790a,0x4313794b,0xf010d002,0xd0050f01,0x3414f8d7,0xf8c73301,
+0xe01d3414,0x356cf8d7,0x2c023301,0x356cf8c7,0x4638d106,0x46324649,
+0xf7ff462b,0xe014fae1,0xd8082c01,0x03a0f243,0x6cb958f8,0x462b4632,
+0xfaf8f002,0xf8d7e009,0x33013410,0x3410f8c7,0x46294648,0xf7f92200,
+0x465df987,0xd1932d00,0xd30545d0,0x3cf8f8d7,0x4300f443,0x3cf8f8c7,
+0xf4139b06,0xd0083f80,0x21014638,0xfc16f7fc,0xf8d7b118,0xf00b07f8,
+0x9906f9dd,0x2f80f411,0xf8d7d004,0x68183848,0xf840f004,0xf4129a06,
+0xf0005f00,0x683980c2,0x270cf8d7,0xf7f6486c,0xf8d7fe6b,0x6839680c,
+0x270cf8d7,0xf7f64869,0xf8d6fe63,0xf8d62154,0xf8b63158,0xb2891434,
+0xf8b69111,0xf8b61436,0xb289b3e8,0x83eaf8b6,0xf8b69110,0xf8b6a50e,
+0xf8d693ee,0xf8b61180,0x910e0490,0x17c0f8b6,0x57d0f8b6,0x47d2f8b6,
+0xf8adb280,0xb2891012,0xb2ad910f,0xb2a46839,0x48559000,0xfe38f7f6,
+0x4623462a,0x4853990f,0xfe32f7f6,0xfb8bfa1f,0x4851990e,0xfe2cf7f6,
+0xf888fa1f,0x9911465b,0xfa1f9a10,0xfa1ffa8a,0x484cf989,0x8000f8cd,
+0xfe1ef7f6,0x4651464a,0xf7f64849,0xf8d7fe19,0x4848380c,0x14d0f8b3,
+0xf7f6b289,0xf8d7fe11,0x4845380c,0x14d2f8b3,0xf7f6b289,0xf8d7fe09,
+0x4842380c,0x14d4f8b3,0xf7f6b289,0x217efe01,0xf7fc4638,0x21a2fbc5,
+0x46384604,0xfbc0f7fc,0x46024621,0xf7f6483a,0xf241fdf3,0x4638311a,
+0xfbb6f7fc,0x3116f241,0x46384605,0xfbb0f7fc,0x3118f241,0x46384604,
+0xfbaaf7fc,0x46034622,0x48304629,0xfddcf7f6,0x3126f241,0xf7fc4638,
+0x4601fb9f,0xf7f6482c,0x482cfdd3,0xfdd0f7f6,0xe0342500,0x2154f8d6,
+0x50caab12,0x29203104,0x2400d1f8,0x58e1ab12,0x34044825,0xfdc0f7f6,
+0xd1f72c20,0x35014823,0xfdbaf7f6,0xd11e2d08,0x35b4f8d7,0x073cf8d7,
+0xf8c73301,0xf7fb35b4,0x9a06ff2f,0xda032a00,0x280cf8d7,0x61932300,
+0x3deaf8b7,0xf507b12b,0x4638615e,0xf7ff3104,0xf8d7fc0d,0x1e183cf8,
+0x2001bf18,0x2100e001,0xb01fe7c8,0x8ff0e8bd,0x0001a12c,0x0001a16c,
+0x0001a1a0,0x0001a1d8,0x0001a20b,0x0001a21e,0x0001a267,0x0001a286,
+0x0001a298,0x0001a2aa,0x0001a2bc,0x0001a2d9,0x0001a31c,0x0001a331,
+0x0001a338,0x0001a336,0x41f0e92d,0x46084606,0xf7fb4688,0x4604ff1f,
+0x0010f8d8,0x78437802,0x2303ea42,0x0281f3c3,0xd1052a02,0x7f40f413,
+0x2200bf14,0xe0082201,0x2200b10a,0xf3c3e005,0x2b091303,0x2200bf14,
+0x79032201,0xf0131d01,0xd00d0f01,0x3324f8b6,0x1238f243,0x4370f403,
+0x113cf243,0x5f80f5b3,0x460abf08,0xe02558b7,0xf8b6b19a,0x46302324,
+0x4270f402,0x5f80f5b2,0x2200bf14,0xf00b2201,0x4607fe2b,0xf8d6b9b0,
+0x330133c0,0x33c0f8c6,0x4630e03c,0xfc7ef00b,0xb1284607,0x5342f506,
+0x33686942,0xd005429a,0x33c4f8d6,0xf8c63301,0xe02b33c4,0xb2e44b19,
+0x4b195d1a,0xeb065c9b,0xf8d30383,0xb91b3eb0,0x0390f243,0xb12358f3,
+0x46394630,0xf7fb4642,0xf506fff1,0x781b5345,0x021cf108,0x4b0f7253,
+0x0407f004,0xf8d76117,0x463901f0,0x51ecf8d7,0x5d1b4642,0xf50647a8,
+0x4630615e,0xf7ff3104,0xe004fb5d,0x46416cb0,0xf7f82201,0x2000ffd9,
+0x81f0e8bd,0x0001bd7a,0x0001a110,0x0001a89e,0x461db5f7,0x33fff04f,
+0x330d9301,0x1303fb05,0x8a19460c,0x46068a5b,0x46174299,0x88e1d206,
+0x429988a3,0x4620d204,0xe0294629,0xe0069501,0xa9014620,0xf868f7f6,
+0x42ab9b01,0x9901dc24,0xdb1a2900,0x3d7cf896,0x42a9410b,0x0301f003,
+0xb1cbd101,0xb11be000,0xf7f64620,0xe002f81f,0xf7f64620,0x4601f82f,
+0x6cb02201,0xff98f7f8,0x33c0f8d6,0xf8c63301,0x462033c0,0x463a4629,
+0xffd6f7f5,0xe0002001,0xbdfe2000,0x615ef500,0x3104b570,0x46154604,
+0xffb2f7ff,0x6ca0b920,0x22014629,0xff7cf7f8,0xb96b6aa3,0x3deaf8b4,
+0xd9092b1f,0x7380f44f,0xf8d462a3,0x2101073c,0x32fff04f,0xfbd0f7fb,
+0x46c0bd70,0x47f0e92d,0x46894605,0x0881f100,0xbf342a20,0x27204617,
+0x26004604,0xf816e01d,0xf1bee009,0xd1060f5c,0xf8034623,0xf884eb01,
+0x1c5ce001,0x4b0de010,0x300ef813,0x0f97f013,0xf804d002,0xe007eb01,
+0xebc44620,0x4a080108,0xf7f64673,0x1824fc7b,0x42be3601,0x2300d1df,
+0x0004ebc5,0xe8bd7023,0x46c087f0,0x00016efe,0x0001a341,0xf890b510,
+0x46023d05,0x2001b90b,0x2300e008,0x3d05f880,0x1d2cf8d2,0x073cf8d0,
+0xfd4ef7fb,0x46c0bd10,0xf89db5f7,0x460e5020,0x88c94617,0xb165461a,
+0x0f80f011,0x7c43d001,0xf011b98b,0xd0010f40,0xb1637c43,0x7f80f411,
+0xf411e013,0xd0016f00,0xb9237c43,0x6f80f411,0x7c43d009,0x7c43b93b,
+0xbf0c2b00,0x0403f06f,0x0404f06f,0xf411e059,0xd0045f80,0x3844f8d0,
+0x2b007a1b,0x2300d04f,0x46309301,0x462b4639,0xf86af7f6,0x28004604,
+0x2d00d147,0x8933d045,0x2b063b01,0x4639d841,0x2204a801,0xfbccf7f6,
+0x99018933,0x2b053b02,0xe8dfd837,0x0305f003,0x22070a0c,0xe0222200,
+0xe0092300,0x4300f06f,0x2300e002,0x2300e017,0x33d3ea6f,0x33c3ea6f,
+0xf04388f0,0xf010027f,0xd0010320,0xe0032301,0x0f10f010,0x43d3bf08,
+0xdb114299,0xdc0f4291,0xf04fe013,0xea6f33ff,0xea6f4213,0x88f34202,
+0x0f20f013,0xb119d000,0x03fff042,0xd9044299,0x041cf06f,0xf06fe001,
+0x4620040a,0x46c0bdfe,0x4ff8e92d,0x646ef500,0x468b4680,0x34044691,
+0xf04f2700,0xfb070a34,0xf503f30a,0xeb08636c,0x46300603,0xf7f64659,
+0x4605fab5,0x6823b948,0xd106454b,0x46294630,0xf7f64652,0x4628fb4d,
+0x3701e005,0x2f163434,0xf06fd1e3,0xe8bd001d,0x46c08ff8,0x4ff0e92d,
+0x4690b089,0x2050f89d,0xb04cf8dd,0x46894607,0x92069307,0x646ef500,
+0x0a00f04f,0xb1956825,0x213a4648,0xfac4f7f6,0x464eb908,0x1c46e006,
+0x4631e004,0xfa82f7f6,0x350cb120,0x28006828,0xe000d1f7,0xf10ab945,
+0x34340a01,0x0f16f1ba,0xf06fd1e4,0xe0370416,0x0f00f1b8,0xf8ddd103,
+0xf8cd8048,0x892bb01c,0x4619b90b,0x2b08e003,0x4659bf0c,0x9b062104,
+0xb11388aa,0x1c5e0053,0x0056e000,0x23349a07,0x9a129201,0x7303fb0a,
+0x9a159202,0x92059104,0x8000f8cd,0xb00cf8cd,0x4eecf8d3,0x0ee4f8d3,
+0x46324629,0x47a0464b,0x0f01f016,0xd0074604,0xf7fe4638,0xf8d7fd77,
+0x33013d50,0x3d50f8c7,0xb0094620,0x8ff0e8bd,0xab06b57f,0x2d04f843,
+0x23049300,0x93012200,0x93022301,0x92034613,0xff88f7ff,0xbd00b007,
+0x41f3e92d,0xf8d0461f,0x46053844,0x460c7a1b,0xf8dd4616,0xb1638020,
+0x380cf8d0,0x2120f8d3,0x4304f240,0x0303ea02,0x6080f5b3,0x2001bf18,
+0x6880e005,0xf83cf7f5,0xbf183800,0xb1302001,0x073cf8d5,0xfc2ef7fb,
+0x30fff04f,0x2c34e038,0xdc05d014,0xdb0e2c02,0xdd0f2c03,0xe0092c1b,
+0xd00b2cd6,0x2ca3dc01,0x2cfbe004,0xf240d006,0x429c130b,0xb1ced002,
+0xdd172f00,0x46214628,0x463b4632,0x8000f8cd,0xf9fef001,0x0f17f110,
+0xf243d10a,0x58e803a0,0x46324621,0xf8cd463b,0xf0018000,0xe00bff2f,
+0xe009b910,0x0001f06f,0x0325f100,0xd9012b25,0xe0012000,0x0708f8c5,
+0x81fce8bd,0x4603b510,0xb1187c40,0x073cf8d3,0xfc12f7fb,0x46c0bd10,
+0x7c43b510,0xf8d0b11b,0xf7fb073c,0xbd10fc03,0x4604b570,0xb929460d,
+0x37c0f890,0xf890b17b,0xb9633d05,0xb11868a0,0x462a2103,0xffd0f7f4,
+0x581cf884,0xf884b91d,0xf8845970,0xbd705854,0x41f0e92d,0x681cf890,
+0xb9164604,0xf7ff2101,0xf8d4ffdf,0x7a1d3844,0x68a0b955,0x462a4629,
+0xf8b6f7f5,0x6180f44f,0x460a4620,0xff20f7fb,0x380cf8d4,0x7158f8d3,
+0x68a0b91d,0xf7f54629,0xb91ef8b3,0x46314620,0xffc2f7ff,0x3710f8d4,
+0x3f80f417,0xf043bf14,0xf0230302,0xf8c40302,0xe8bd3710,0x46c081f0,
+0x4605b570,0x4616460c,0xfcccf001,0x3024f895,0xd06c2b00,0xf0014620,
+0x4604fc69,0x0324f8b5,0xfc64f001,0xd1624284,0x2700f895,0x36fff995,
+0x1a9b4631,0x78330098,0x42984632,0x4603bfb8,0x78737033,0xbfb84298,
+0x70734603,0x428378b3,0x4603bfa8,0x78f370b3,0xbfa84283,0x70f34603,
+0x42987913,0x4603bfb8,0x7b137113,0xbfb84298,0x73134603,0xf1063201,
+0x429a0308,0x4632d1f0,0x7d132400,0x42983401,0x4603bfb8,0x7f137513,
+0xbfb84298,0x77134603,0x302cf892,0xbfb84298,0xf8824603,0xf892302c,
+0x42983034,0x4603bfb8,0x3034f882,0x2c083201,0x2200d1e3,0x3024f891,
+0x42983201,0x4603bfb8,0x3024f881,0x303cf891,0xbfb84298,0xf8814603,
+0x3101303c,0xd1ed2a08,0x3044f896,0xbfb84298,0xf8864603,0xbd703044,
+0x2201b570,0x4605b092,0xf001460e,0xb1e0fc33,0x0403f10d,0x46314628,
+0xf7ff4622,0xb2f3ff79,0x01d3eb05,0x426cf241,0xf0035c8a,0x411a0307,
+0x46234628,0xf0024631,0xf7fc0201,0xf642ff0d,0x52ee13b0,0xf7fd4628,
+0xb012fac3,0x46c0bd70,0x41f0e92d,0x3d07f890,0x2b004604,0x80c0f040,
+0x2b007c43,0x80bcf000,0xf8802301,0xf8d03d07,0x7a1b3844,0xf8d0b163,
+0xf8d3380c,0xf2402120,0xea024304,0xf5b30303,0xbf186780,0xe0032701,
+0xf7f46880,0x4607fed5,0x2300b11f,0x3cfcf8c4,0x2104e00c,0x07f8f8d4,
+0xff62f00a,0x073cf8d4,0xfaeaf7fb,0x46394620,0xfc2ef7fc,0x1354f8d4,
+0x6ca0b149,0x2358f8b4,0xfc7af7f8,0xf8c42300,0xf8a43354,0x26003358,
+0x23344635,0x4203fb05,0x3ef0f8d2,0xf8d2b11b,0x47980ee4,0x35011836,
+0xd1f22d16,0x3d64f894,0xf8d4b153,0xf8d4073c,0xf7fb1d14,0xb900fa69,
+0x23003601,0x3d64f884,0x0334f641,0x073cf8d4,0xf7fb58e1,0xb900fa5d,
+0x6aa33601,0x74652500,0x5044f884,0x62a5b13b,0x073cf8d4,0xf04f4629,
+0xf7fb32ff,0xf504f885,0x6ca0615e,0x22013104,0xfec0f7f5,0xb17b7da3,
+0x0385eb04,0x1dc8f8d3,0x798bb139,0x790bb12b,0x4620b11b,0xfaaef001,
+0x35011836,0xd1ef2d04,0x2300b157,0x381cf884,0x3970f884,0x3854f884,
+0xf7fc4620,0xe01ffb15,0x3d08f894,0x4620b913,0xfe4af7fc,0xf7f468a0,
+0xb188fff5,0x380cf8d4,0x3120f8d3,0x0f01f013,0x4620d002,0xfb68f7fc,
+0x073cf8d4,0xfa6ef7fb,0x46201836,0xfb0ef7fc,0x2848f8d4,0x73532300,
+0x3d08f894,0xb91fb923,0x46394620,0xfe50f7ff,0xf8842300,0xe0003d07,
+0x46302600,0x81f0e8bd,0x4ff0e92d,0xb08d7c84,0xb99c4607,0xf7ff2101,
+0x68b8fe3f,0xfe1af7f4,0x46384621,0xfb88f7fc,0xf7fc4638,0xf8d7fe0d,
+0x68183848,0xfb42f002,0x74bb2301,0x46382101,0xfe2af7ff,0xf7f468b8,
+0x2100fe05,0xf7fc4638,0xf8b7fb73,0xf2442828,0x429a3321,0x3b0ed010,
+0xd00d429a,0x429a3307,0x3310d00a,0xd007429a,0x429a3b14,0x3307d004,
+0xd001429a,0xe0052300,0x3840f8d7,0xbf142b02,0x23012300,0x0840f8d7,
+0xe0004619,0x28023101,0xf244d114,0x429a3321,0x3b0ed00e,0xd00b429a,
+0x429a3307,0x3310d008,0xd005429a,0x429a3b14,0x3307d002,0xd101429a,
+0xe0002302,0x42992301,0x4638d3e4,0xfdfcf7ff,0x3710f8d7,0x4638b13b,
+0xfc96f7fc,0x21004638,0xfddaf7ff,0x4638e114,0xfc28f7ff,0xf04f4638,
+0xf7fc31ff,0xf8b7fc1d,0xf2441828,0x42993321,0x3b0ed012,0xd00f4299,
+0x42993307,0x3310d00c,0xd0094299,0x42993b14,0x3307d006,0xbf144299,
+0x21012100,0xe0019109,0x93092301,0x99094638,0x0b28f10d,0xfcb2f7fc,
+0x21084658,0xf8d74a76,0xf7f63740,0xf8d7f867,0x2e006778,0xf8d7d16e,
+0xf8d71758,0xf501074c,0xf8d77100,0xf7f79748,0xf8d7f939,0xf8d73758,
+0xf503274c,0x93007308,0x93022310,0x7344f240,0x23089303,0x93044d67,
+0x93053316,0x46334659,0x96014648,0xf7f79506,0xf8d7fa7f,0xf8c73758,
+0xf8d70778,0x4604274c,0x0a20f04f,0xf5034659,0x46487310,0xf8cd9600,
+0x9602a004,0x96049603,0x95069605,0xfa68f7f7,0x3758f8d7,0x077cf8c7,
+0x274cf8d7,0xf5034680,0x46487330,0x96004659,0xa004f8cd,0x96039602,
+0x96059604,0xf7f79506,0xf1d4fa53,0xbf380401,0xf1b82400,0xbf080f00,
+0x0401f044,0xbf142800,0xf0444623,0xf8c70301,0xb10b0784,0xe0304633,
+0x461d463c,0x0778f8d4,0x6f03b120,0x47984940,0x07a8f8c4,0x34043501,
+0xd1f32d06,0x4848f8d7,0x22082100,0x006cf104,0xf7f56825,0xf8d7ff81,
+0xf0133388,0xd0050f20,0x306cf8b4,0x6380f443,0x306cf8a4,0xf2428a2a,
+0x429a0350,0x7cabd108,0xd8052b05,0x306ef8b4,0x0304f043,0x306ef8a4,
+0xf0132301,0xd04b0fff,0xf1b39b09,0xf43f3fff,0xf8d7af3a,0xf8d72844,
+0xf8d737a8,0x60d3073c,0x37acf8d7,0x61132401,0x37b0f8d7,0xf8d76153,
+0x619337b4,0x37b8f8d7,0xf8d761d3,0x621337bc,0xf906f7fb,0x23032100,
+0x7280f44f,0x46389300,0xf7fb460b,0x4638ff7b,0xf00a747c,0xf8d7ff49,
+0xf8d7073c,0xf44f1d14,0x4623727a,0xfecef7fa,0xf8874638,0xf7fe4d64,
+0x4638f9c1,0xff6af7fd,0x4638b130,0xf9a8f7fe,0x46214638,0xf94af7fe,
+0x21024638,0xfa18f7fc,0x073cf8d7,0xfee6f7fa,0xb00d2000,0x8ff0e8bd,
+0x0001a03d,0x0001c704,0x00017a28,0x5142f500,0x4f70e92d,0xf04f3168,
+0xf8c00901,0xf8801dc8,0x46049d04,0xf0012600,0xf642f943,0x54e623ba,
+0xf04f330a,0xf80435ff,0x3b059003,0x3b0454e5,0x330654e6,0x9003f804,
+0x54e63b03,0x539ff504,0x2102701d,0x4620462a,0xf91cf7fb,0x46494620,
+0xf7fb4632,0x210cf917,0x4620462a,0xf912f7fb,0x4620210b,0xf7fb4632,
+0x210ef90d,0x4620462a,0xf908f7fb,0x4620210d,0xf7fb4632,0x2104f903,
+0x46202202,0xf8fef7fb,0x532bf504,0x0a03f04f,0x9000f883,0x3309f642,
+0xa003f804,0xf804444b,0xf5a3a003,0xf64073c2,0x52e6122a,0x52e2332c,
+0x52e23302,0x52e23302,0x52e23302,0x52e23302,0x52e23302,0x52e23302,
+0x5327f504,0x122bf640,0xf642801a,0xf04f13c2,0x52e20207,0xf04f3302,
+0xf04f0204,0x52e20b02,0xf8243302,0x445ba003,0xb003f824,0xf6414b3c,
+0xf8c4023c,0xf6423d00,0x54e61385,0x53c8f504,0x50a33314,0x131af641,
+0x9016f884,0x9023f884,0x6d5bf884,0x6d55f884,0x6d56f884,0x6d57f884,
+0x6d58f884,0x6d59f884,0x6d5ef884,0x6da0f884,0x6d60f884,0x6d5af884,
+0x9d7df884,0xf50454e6,0x333053e8,0x52c2f504,0xf6416013,0xf8045336,
+0xf5049003,0x334c5304,0x0244f641,0xf24250a3,0xf8041352,0xf504b003,
+0x33685314,0x50a33204,0x3818f642,0x536ef242,0xa003f804,0x0508eb04,
+0xf8842364,0x463136fe,0xf884220b,0x61e6603e,0x903ff884,0x6d4af884,
+0x9d4bf884,0x6d50f8c4,0x6d4cf884,0x6708f8c4,0xf7f54628,0xf06ffe31,
+0xf8040322,0x332c3008,0xeb05706b,0x4909000b,0xf7f54652,0xf241fe45,
+0xf88573e4,0xf804b005,0x444b9003,0x9003f804,0x603cf884,0x8f70e8bd,
+0xb0e7a864,0x00016e89,0x4ff0e92d,0xb81df890,0x4605b0a3,0x0f00f1bb,
+0x4659d102,0xf904f7fc,0x073cf8d5,0xffb8f7fa,0x57b7f505,0x3848f8d5,
+0xf8d3883e,0xf4069008,0xf04f6340,0xf5b30800,0xf8956f40,0x9003acf4,
+0x8cf4f885,0x4630d110,0xf85cf001,0x88384604,0xf858f001,0x6430f444,
+0xbf8c280e,0x5080f44f,0x5000f44f,0xb2a64304,0x4628ac16,0xf7fc4649,
+0x4628fa89,0xf7fd4621,0xf8d5fcf1,0x237f1848,0x93004642,0x31744620,
+0xf8cd4643,0xf00a8004,0x4628f809,0xf7fc4621,0x4628fdb5,0x46424631,
+0xf86cf001,0x4628b920,0xf0012101,0x4606f88f,0x3848f8d5,0x0413f10d,
+0x46316818,0xfea0f002,0x46284622,0xf7ff4631,0xf8d5fba7,0x46213848,
+0x46326818,0xff0af002,0x3848f8d5,0x68184642,0x31fff04f,0xfa94f005,
+0x3848f8d5,0xacf4f885,0xf0026818,0x2201fde9,0x2310f243,0x46285ae9,
+0xf7fb4613,0xf243fe7d,0x5ae92312,0x23014642,0xf7fb4628,0x68a8fe75,
+0x7758f8d5,0xfc0af7f4,0x4204f240,0xf04f4628,0xf7fb31ff,0xf8d5fa79,
+0x46281810,0xfb34f7fc,0x31fff04f,0x1128f8c7,0x4a144628,0xfa6cf7fb,
+0xf5054c13,0xe00368e8,0xf7f8200a,0x3c0afc27,0x3128f8d7,0x0f01f013,
+0x2c09d101,0x4628d1f4,0x4140f44f,0xf8d72200,0xf8d53128,0xf7fb680c,
+0xf8d5fa53,0xb16c47d4,0x349ef8b6,0x0303ea44,0x47d0f8d5,0xf8a6b29b,
+0xe006349e,0x00020402,0x000f4249,0xf7fc4628,0xf8d5fac7,0x68a83388,
+0x0f02f013,0x46216a42,0x43a4f240,0xf444bf1c,0x43217400,0xd002429a,
+0x6f96f5b2,0xf8b5d11f,0x051b3384,0xf5b30d1b,0xdb187f00,0xf2446b02,
+0x429a3322,0x6b43d113,0xf8b6b98b,0xf444349e,0xb29b5480,0x5380f443,
+0x349ef8a6,0x349cf8b6,0xf4234321,0x041b5380,0xf8a60c1b,0x4622349c,
+0x68a82300,0xfc22f7f4,0x49b24640,0xfaa8f7fb,0x080cf8d5,0x26002406,
+0x3844f8d5,0x6b190232,0x4200f442,0xb2925d8b,0xb29b18e3,0xea443b01,
+0xb29b2303,0x2540f8a0,0x3520f8a0,0x2540f8a0,0x36015d8b,0x2e0618e3,
+0xd1e5b29c,0x780a784b,0xea424628,0x21982203,0xfcbcf7fb,0x3844f8d5,
+0x6b1b4628,0x78dc219a,0xea42789a,0xf7fb2204,0xf8d5fcb1,0x46283844,
+0x219c6b1b,0x791a795c,0x2204ea42,0xfca6f7fb,0x219e4628,0xf7fb2200,
+0x4633fca1,0x21984628,0x0282f10d,0xfe86f7fb,0x33012300,0xd1fc2b06,
+0x21804628,0xf7fb2208,0x4628fc91,0x220a215c,0xfc8cf7fb,0x7380f04f,
+0x3100f8c7,0xf44f4628,0x22002180,0xf9a4f7fb,0x3100f44f,0x4628460a,
+0xf99ef7fb,0x1386f642,0x46285aea,0xf7fb2174,0xf895fc75,0xf2423d40,
+0x21827210,0xbf182b00,0x62bcf44f,0xf7fb4628,0xf642fc69,0x5ce923bb,
+0x4628b111,0xfe3af7fb,0x4300f04f,0x3188f8c7,0x4302f103,0x318cf8c7,
+0x4380f44f,0xf8c72110,0xf5033128,0x460a4340,0x68a8627b,0xfbc2f7f4,
+0xf7f468a8,0xb283fa87,0x0824f8a5,0xf8a72100,0x462836a8,0xfa70f7fb,
+0x46042102,0xf7fb4628,0xea40fa6b,0xf8c54004,0x2156082c,0xf7fb4628,
+0xf241fa63,0x00404358,0xf8d550e8,0x2b003830,0x4628da07,0xf7fb21b2,
+0xf241fa57,0x0040435c,0x462850e8,0x88aa2116,0xfc20f7fb,0x21c04628,
+0x2830f8b5,0xfc1af7fb,0x21c24628,0x2832f8b5,0xfc14f7fb,0x46284b4a,
+0x3160f8c7,0x13c2f642,0x21445aeb,0x3164f8c7,0x24004b46,0x3160f8c7,
+0x13c4f642,0xf8c75aeb,0xf6423164,0x5aea13c6,0xfbfcf7fb,0x13c8f642,
+0x21464628,0xf7fb5aea,0x4628fbf5,0xfbb2f7fc,0x0384eb05,0x1dc8f8d3,
+0x4628b111,0xf986f7fb,0x2c043401,0xf505d1f4,0x46285142,0xf7fb3168,
+0x2200f969,0x73f0f241,0x461450ea,0x0384eb05,0x0778f8d3,0x6843b108,
+0x34014798,0xd1f52c06,0x0778f8d5,0x64e8f505,0x47986c43,0x0778f8d5,
+0x47986e03,0x1848f8d5,0x316c4628,0xfc10f7fb,0x46204923,0xf984f7fb,
+0x3848f8d5,0xf0076818,0xf642fbb7,0x5ae9330e,0xf7fb4628,0xf8d5fbc3,
+0x46283848,0x1130f8b3,0xf956f7fb,0x3848f8d5,0xf8b34628,0xf7fb1132,
+0xf642f95d,0x5ce923bb,0xf7fb4628,0x4628fd77,0xfcf4f7fb,0x3848f8d5,
+0x681b4628,0x881a2152,0xfb94f7fb,0x3848f8d5,0x681b4628,0x889a2150,
+0xfb8cf7fb,0xf7fc4628,0x7dabfd07,0xf895b973,0xb15b3023,0x7496f44f,
+0x46c0e00a,0x00017f28,0x00020006,0x00020007,0x00018ca8,0x74faf44f,
+0x3848f8d5,0x681b4a2e,0xf023691b,0x4293437f,0xf5b4d104,0xbf386f16,
+0x6416f44f,0x21944628,0xf7fb4622,0xf8d5fb63,0x23012848,0xf5057353,
+0xf04f605a,0x210033ff,0xf8a5220c,0x301a3db8,0xfb7af7f5,0x33fff04f,
+0x3dbcf8a5,0x3dc0f8a5,0x37c8f8d5,0xf0434628,0xf8c50304,0xf7fb37c8,
+0xf8d5fd47,0x9903073c,0xfd14f7fa,0xb13b6aab,0x62a92100,0x073cf8d5,
+0x32fff04f,0xfaf0f7fa,0x2100686b,0xf8852b09,0xd9041dc6,0x280cf8d5,
+0xf8c24b0c,0x7dab33dc,0x7c6bb11b,0xf8c5b10b,0xf1bb1ddc,0xd1030f00,
+0x21024628,0xfe40f7fb,0x3848f8d5,0xf0066818,0xb023fcaf,0x8ff0e8bd,
+0x00082050,0x00989680,0x43f0e92d,0xb0bd4606,0xf8d0460f,0xf7fa073c,
+0x4968fca3,0xf7f54638,0xf8d6f83b,0x49662454,0xf7f54638,0xf506f835,
+0x30186002,0xf7f5a934,0xf10df871,0x460408b0,0xf1064641,0xf7f5004c,
+0x4622f869,0x495d4603,0xf7f54638,0x68b3f821,0xf8b64641,0x6a5c0384,
+0xf838f7f5,0x46034958,0x46384622,0xf814f7f5,0x3384f8b6,0xd1042b01,
+0x49544638,0xf7f522ff,0x494ef80b,0xf7f54638,0x4951f807,0x2bf8f8d6,
+0x3ac0f8d6,0xf7f44638,0xf642ffff,0x5cf23309,0x46383301,0x56f3494b,
+0xfff6f7f4,0x655cf506,0xf04f3508,0x682b0900,0xd04f2b00,0x4638493f,
+0xffeaf7f4,0x21004b44,0x221f7f5b,0x0091f10d,0x3090f88d,0xfad0f7f5,
+0xf10d682b,0xf893080f,0xf1032024,0x46400125,0xfe8cf7fe,0xf8d6682b,
+0x68d9073c,0xfa4cf7fa,0x4601ac24,0x4620221f,0xf9fef7f5,0xf88d2300,
+0x493430af,0x4643464a,0xf7f44638,0x6829ffc1,0x794a4638,0x68c9790b,
+0x91009401,0xf7f4492e,0x682bffb7,0x10acf8d3,0x2094f8d3,0x3ffff1b1,
+0x4098f8d3,0xeb03d006,0xf8d30381,0xb10b30b0,0xe0007a1b,0x91002300,
+0x46389301,0x46234923,0xff9ef7f4,0x0901f109,0xf1b93504,0xd1a60f04,
+0x46384914,0xff94f7f4,0xf506a934,0xf7f4703d,0x491bffd1,0x46384602,
+0xff8af7f4,0x040ff10d,0x713ef506,0xf8963105,0x462022fc,0xfe36f7fe,
+0x49144638,0xf7f44622,0x7db3ff7b,0x4638b12b,0xf8d64911,0xf7f42ddc,
+0x2000ff73,0xe8bdb03d,0x46c083f0,0x0001a336,0x0001a42c,0x0001a437,
+0x0001a45b,0x0001a474,0x0001a487,0x0001a4a2,0x00016e70,0x0001a4ba,
+0x0001a4cf,0x0001a4ef,0x0001a51c,0x0001a532,0x0001a549,0x294bb500,
+0xe004f8dd,0xd0269a02,0x2921dc06,0x293dd01b,0x291fd015,0xe005d01c,
+0xd006298d,0xd01d29a2,0xd01d294c,0x0016f06f,0xf890e028,0xb90b3cf4,
+0xe0024618,0x3848f8d0,0x60106858,0xf642e01d,0x56c3330a,0xf642e002,
+0x5ac313c4,0xe0146013,0x13c2f642,0xf241e7f9,0xe7f663dc,0xe7f57c43,
+0x32fff10e,0x73fef64f,0xd902429a,0x001cf06f,0xf241e004,0xf82063dc,
+0x2000e003,0x46c0bd00,0x47f3e92d,0x2d40460d,0x46044616,0x990a461f,
+0x902cf8dd,0x8030f8dd,0xa038f8dd,0x280cf8d0,0x80ccf000,0x2d20dc11,
+0x8115f000,0x2d1ddc04,0x2d1ed024,0xe019d044,0xf0002d3e,0xf3008081,
+0x2d2280a1,0x80f5f000,0x2d8ee010,0xdc05d034,0xd00e2d62,0xf0002d7f,
+0xe00780c3,0xd0672da3,0xf5a5db04,0x2b017389,0x8102f240,0x0516f06f,
+0x4631e13b,0xf7fa461a,0xe01ffe45,0x3848f8d0,0xf0026818,0xb2c0faab,
+0xf8946030,0xb1133024,0x3324f894,0xf504e002,0x781b53b7,0xf8d42500,
+0x607307f8,0x788360b5,0xf0002b00,0xf00980d2,0xb2c0fcf1,0xe11860b0,
+0xfc7ef7fa,0xe1144605,0xbfcc290e,0x5280f44f,0x5200f44f,0xd90229e0,
+0x0512f06f,0xf441e109,0xea426330,0xb29d0303,0x22014629,0xfc36f000,
+0xf06fb910,0xe0fc0513,0x53b7f504,0x7c63801d,0xf0002b00,0xf89480aa,
+0x2e006024,0x80a5f040,0x3848f8d4,0xf0026818,0x42a8fa65,0x809df000,
+0xf7fb4620,0x4629fc21,0xf7fe4620,0x4620ffdd,0xfb46f7fb,0xe0dc4635,
+0xf8802301,0xf8803d0a,0xf7fb3d06,0xe088fc03,0x2b041c4b,0x80ccf200,
+0xf013e8df,0x00060005,0x00ca0006,0x21030005,0x330af642,0x7c6354e1,
+0xd0762b00,0xf7fb4620,0x4620fbfb,0xf954f7fb,0x0370f243,0x58e14620,
+0xfae2f7fb,0xf7fb4620,0xe066fb1b,0xb9287c40,0x3309f642,0xf8c95ce3,
+0xe7933000,0x3848f8d4,0x0107f10d,0xf0026818,0xb120fac3,0x3007f89d,
+0x3000f8c9,0xf642e051,0x5ce33309,0xf8c94605,0xe0963000,0x2b041c4b,
+0x808ef200,0x3ffff1b1,0x2103bf08,0xf642b2c9,0x54c13309,0x3848f8d0,
+0xf0046818,0xe038fd6b,0x0f00f1b8,0x2b0cd07f,0xf898d117,0xf1083004,
+0xf0130104,0xd1760501,0xf898f00a,0xf241b138,0x58e24354,0x71132301,
+0x5000f8c8,0xf89ae06d,0xb1400006,0x051df06f,0x2b04e067,0xf89ad163,
+0x28000006,0xf642d15f,0x58e313cc,0x3000f8c8,0x1e4be744,0xd8532bfe,
+0x10c4f642,0x3844f8d4,0x7a1b5221,0x4b2ab12b,0x3160f8c2,0xf8c2b28b,
+0x25003164,0x1e4be049,0xd8412bfe,0x10c2f642,0x3844f8d4,0x7a1b5221,
+0xd0f22b00,0xe7eb4b21,0x0f01f017,0xf8d0d137,0xf7fa073c,0x4681fa75,
+0xf7f368a0,0x4680fe77,0x68a0b918,0xf7f32101,0x68a0ff6b,0xff28f7f9,
+0xf06fb910,0xe012051d,0x1313f240,0xd107429d,0x21012302,0xfb974632,
+0xf7f9f3f3,0xe005fdf9,0x46312202,0xf2f2fb97,0xfc70f7f9,0xf1b84605,
+0xd1030f00,0x464168a0,0xff4af7f3,0x073cf8d4,0xf7fa4649,0xe004fa3f,
+0x051cf06f,0xf06fe001,0x46280501,0x87fce8bd,0x00020007,0x00020006,
+0x41f0e92d,0x4614b088,0x46059a0e,0x461e4688,0xf8d0b91a,0xf1033dc8,
+0x68130208,0xbf0c2b01,0xf8d56897,0xb13c7dc8,0xd9052e03,0x4621a807,
+0xf7f52204,0xe001f889,0x93072300,0x46289b07,0x6cab9300,0x93034641,
+0x46334622,0x94029401,0xf7ff9704,0xf110fe59,0xd1080f17,0x46289b07,
+0x46419300,0x46334622,0xf7ff9401,0xb008fe0b,0x81f0e8bd,0x4ff0e92d,
+0x6805b08f,0xf8dd9f1a,0x2300806c,0xf002930d,0x93000301,0x46284614,
+0x4643463a,0xa060f8dd,0x9064f8dd,0xfc44f7fe,0x28004606,0x81ecf040,
+0x0f03f1b9,0xa80dd904,0x22044651,0xf848f7f5,0x2c169a0d,0x81d5f200,
+0xf014e8df,0x0041003e,0x00490044,0x01d30058,0x01d30050,0x01d3005c,
+0x01d30033,0x00260023,0x01d30074,0x01d30067,0x009501d3,0x01d30110,
+0xac050017,0x46394620,0xf7f44642,0xf8d5fd0f,0x4621073c,0xf974f7fa,
+0xf895e1ba,0xe0333d09,0xbf181e14,0xb12c2401,0xf7fa4628,0x2800fab9,
+0x81a3f000,0x4d09f885,0xac05e1aa,0x46394620,0xf7f44642,0x4628fcf3,
+0xf7ff4621,0xe00ffcad,0x3bf8f8d5,0x4628e004,0xe0062101,0x3ac0f8d5,
+0x037ff003,0x4628e010,0x23002102,0xff7cf7fb,0xe18d4606,0x21404638,
+0xf8d54a92,0xf7f53708,0xe185f835,0x3708f8d5,0xe181603b,0xf7fa4628,
+0x4638fdfd,0x7168f505,0x7225f44f,0xffdcf7f4,0x68a8e176,0xfd52f7f3,
+0xd0052801,0xd0032802,0xf04fb110,0xe16b36ff,0xe1696038,0xf7f368a8,
+0x4604fd65,0x68a8b918,0xf7f32101,0x68a8fe59,0xfe16f7f9,0xf06fb910,
+0xe008061d,0x463a990d,0xf7f94643,0x2800fbff,0xf06fbfd8,0x2c00060d,
+0x814ef040,0x462168a8,0xfe42f7f3,0xa809e148,0x220c4639,0xffa8f7f4,
+0x2b009b09,0x8138f040,0xf011990a,0xf0400f01,0x980b8133,0x0f01f010,
+0x812ef040,0xf0402900,0xf1a8812b,0x4283030c,0x8129f2c0,0xf8e4f7f7,
+0x28004680,0x8126f000,0x010cf107,0xf7f49a0b,0x68a8ff87,0xfcfef7f3,
+0x46042801,0x2802d02b,0xf06fd002,0xe045061d,0x073cf8d5,0xf90cf7fa,
+0x68a84607,0xfd0ef7f3,0xb9184604,0x210168a8,0xfe02f7f3,0xf7f968a8,
+0xb910fdbf,0x061df06f,0x9b0be006,0x46422101,0xf7f940cb,0x4606fc95,
+0x68a8b91c,0xf7f34621,0xf8d5fdef,0x4639073c,0xf8e4f7fa,0x68a8e01e,
+0xfce2f7f3,0xb9184607,0x462168a8,0xfcd0f7f3,0x68a89b0a,0x9b0b9300,
+0x8008f8cd,0x68419301,0x280cf8d5,0xf7f46cab,0x2800ffa7,0xf04fbf18,
+0xb91f36ff,0x463968a8,0xfcbaf7f3,0x9a0b6ca8,0xe0bf4641,0x0f0bf1b9,
+0x80c5f240,0x0f0bf1b8,0x80c1f240,0x4651a809,0xf7f4220c,0x9b09ff25,
+0xf0402b00,0x9b0a80b5,0xf0402b00,0x9b0b80b1,0x0401f013,0x80acf040,
+0x7f00f5b3,0x80a8f200,0x7000f44f,0xf7f74621,0x4681f863,0xf0002800,
+0x462180a5,0x7200f44f,0xfee6f7f4,0xf7f368a8,0x2801fc7d,0x0a0cf1a8,
+0x2802d002,0xe074d034,0x90099b0b,0xb913940a,0x7300f503,0x3301e002,
+0x0301f023,0x930b459a,0xf06fda02,0xe06a060d,0xf7f368a8,0x4604fc79,
+0x68a8b918,0xf7f32101,0x9b0bfc67,0x220068a8,0x93019200,0x9008f8cd,
+0x68419203,0x280cf8d5,0xf7f46cab,0x2800ff2b,0xf04fbf18,0x2c0036ff,
+0x68a8d14d,0xf7f34621,0xe048fc4f,0x0001701e,0xf8d59009,0x940a073c,
+0xf856f7fa,0x68a84683,0xfc58f7f3,0xb9184680,0x210168a8,0xfd4cf7f3,
+0xf7f968a8,0x4604fd09,0xf7f9b1d8,0x0840fa1f,0x464a900c,0x4620ab0c,
+0xf7f92101,0x9b0cfa89,0x005b9a0b,0xf110930c,0xbf180f1e,0xb1124606,
+0xf0231c53,0x459a0301,0xda05930b,0x060df06f,0x900be002,0x061df06f,
+0x0f00f1b8,0x68a8d103,0xf7f34641,0xf8d5fd21,0x4659073c,0xf816f7fa,
+0x2300e005,0x930a9309,0xf06f930b,0xa909061d,0x4638220c,0xfe7cf7f4,
+0x9a0b4649,0x000cf107,0xfe76f7f4,0x46496ca8,0x7200f44f,0xf9a0f7f7,
+0xf06fe00a,0xe0070616,0x0601f06f,0xf06fe004,0xe001060d,0x061af06f,
+0xb00f4630,0x8ff0e8bd,0x18432100,0x2dc8f8d3,0xf8d2b12a,0xb93b3094,
+0x309df892,0x3104b923,0xd1f22910,0xe0002000,0x47702001,0x790bb510,
+0xb143460c,0xb1316cc9,0xf44f6c80,0xf7f77200,0x2300f973,0x200064e3,
+0x46c0bd10,0x41f0e92d,0x460f4680,0x25004616,0x0305eb08,0x4dc8f8d3,
+0xb116b154,0x01d4f104,0xf104e001,0x463801da,0xf7f42206,0xb118fd35,
+0x2d103504,0x2400d1ec,0xe8bd4620,0x46c081f0,0x4615b570,0xe0114604,
+0x421d6863,0xf413d00d,0xbf167f80,0x46084608,0x7a627a21,0x21ddbf08,
+0x030af104,0xfb62f7fb,0x68244601,0xd1eb2c00,0xbd704608,0x41f0e92d,
+0x0482eb01,0x460e6d27,0xb10f4615,0xe01a2000,0x719cf44f,0xf101fb02,
+0x6128f501,0x31041841,0xfe1cf009,0xb9106520,0x001af06f,0x2301e00b,
+0x61467603,0x49056d20,0x22063019,0xfde4f7f4,0x46386d23,0xe8bd629d,
+0x46c081f0,0x0001a9c4,0xf44fb570,0x460c7294,0x46084605,0xf7f42100,
+0x2201fdb3,0x33fff04f,0x30acf8c4,0xf8c4189b,0xf8843094,0xf8a4309d,
+0xf8d4309e,0x60a230e4,0x0303f003,0x0360f043,0x60256124,0x209cf884,
+0x30e4f8c4,0x46c0bd70,0x46c04770,0x47702001,0x46c04770,0x7340f400,
+0x7f40f5b3,0xb2c0d101,0xf5b3e00d,0xb2c07f00,0x28ddd103,0x1c83d803,
+0x2802e004,0x2000d801,0x1e83e001,0x4770b2d8,0x4370f401,0x5f80f5b3,
+0xf5b3d002,0xd10b5f00,0x6340f401,0x6f00f5b3,0xf401d106,0xf5b37340,
+0xbf187040,0xe0002001,0x47702001,0xb5102901,0xdd024602,0xf8c02300,
+0xf8d232d0,0x480212d0,0xfd9af7f4,0x46c0bd10,0x0001aa68,0x4605b570,
+0xf7ff460c,0xb138ffd5,0x6829480a,0x46234a0a,0xfd8af7f4,0xe00c2000,
+0x4370f404,0xf5b3b2e2,0xbf145f80,0x23012300,0xbf8c2a0e,0xf0834618,
+0xbd700001,0x0001abde,0x0001ae37,0x504cf500,0x6800b510,0xfde6f000,
+0x46c0bd10,0x3848f8d0,0x6818b510,0xf0016859,0xbd10fe19,0x0ffff011,
+0xd103b510,0xf7ff2101,0xe004fff1,0x3848f8d0,0xf0016818,0xbd10fe07,
+0x6800b510,0xfbacf7fe,0x46c0bd10,0x6805b570,0xf7fe4628,0xf642fc71,
+0x5aeb13b0,0xb9734606,0x46282101,0xffd6f7ff,0x46284604,0xffb0f7fa,
+0x46214628,0xfb6cf7fe,0xf7fa4628,0x2300fed5,0x7274f241,0x463050ab,
+0x7370f241,0x02fff04f,0xbd7052ea,0x6804b570,0xf8d44606,0x3301370c,
+0x370cf8c4,0x3710f8d4,0x4620b11b,0xf95cf7fb,0xf894e033,0xb1c33024,
+0x3844f8d4,0xf44f4620,0xf8d3719d,0xf7fa50dc,0x42a8fadb,0xf5c5bf36,
+0xebc53380,0x181a0200,0x32d0f8d6,0xf8c6189b,0xf8d432d0,0xf8c33844,
+0xf89600dc,0xb11b3230,0x21014630,0xfa1cf000,0x0778f8d4,0x646ef504,
+0x47986e03,0x25003408,0xb1136823,0x0c04f854,0x35014798,0x2d163434,
+0xbd70d1f6,0xf000b510,0xbd10fa07,0x47f0e92d,0x6804b0e2,0x91b0f8dd,
+0x23009e6d,0xf0029361,0x93000301,0x46154680,0x464a4620,0xf7fe4633,
+0x4682f8a3,0x4985b128,0x4885462a,0xfcccf7f4,0x9b6be100,0xd9042b03,
+0x996aa861,0xf7f42204,0x1eabfca3,0x2b0f9961,0x80edf200,0xf013e8df,
+0x00f20010,0x00eb0014,0x009d00eb,0x00a300eb,0x00ac00a8,0x00bf00eb,
+0x00c800eb,0x00e800eb,0xf8c94b74,0xe0dd3000,0x7f9cf5b6,0x7000f8d8,
+0x4871d209,0x46324971,0x739cf44f,0xfc9cf7f4,0x0a0df06f,0xae02e0ce,
+0xf44f2100,0x4630729c,0xfc52f7f4,0x21004b6a,0x23056033,0xf04f7633,
+0x83b303a0,0x76b32320,0x25022301,0xab5e76f3,0x83f17675,0xaa609300,
+0xf8d7ab5f,0xac500a84,0xf0019150,0xf507fee7,0x4620612e,0xf0083118,
+0x9b60ff2b,0x0a84f8d7,0x9b5f6233,0x02b8f106,0x9b5e6273,0xf8d762b3,
+0xf0021a88,0xf8d7f8c1,0x9a503a84,0x1d218a1b,0xa8046072,0xf7f4932e,
+0x2304fc3b,0xf886220a,0xf8863049,0x330c304a,0x2048f886,0x504bf886,
+0x304ef886,0x304ff886,0x32c4f8d8,0x204cf8a6,0xbf0c42ab,0x4b464b45,
+0x6473a91f,0x4638223c,0xf880f7fa,0xad024b43,0x4b43681a,0x681b992a,
+0xea43ac5a,0x48414302,0x2080f8d5,0xf7f49328,0x2240fc2f,0xf1054620,
+0xf7f401f8,0xf8d7f8f3,0x4621073c,0xfd58f7f9,0x46294648,0x729cf44f,
+0xf8d4e01e,0xf7f9073c,0x4682fd77,0xf8d4e04e,0xf7f9073c,0xe049fd5f,
+0xf1044648,0xe00e014c,0xb1137c63,0x0a04f06f,0x4649e040,0x004cf104,
+0xf7f42206,0xf8d4fbe5,0x46490dc8,0x220630da,0xfbdef7f4,0x0089e032,
+0x534cf504,0x68189161,0xf000b249,0xe029fd63,0x4000f8d8,0x5000f899,
+0x37f8f8d4,0xbf942d0e,0x5600f44f,0x5680f44f,0xb123789b,0x481b491a,
+0xfbe2f7f4,0x4620e016,0xfe4ef7fa,0x6130f445,0x43314620,0xfa08f7fe,
+0xf7fa4620,0xe009fd71,0x1218f8c8,0x4812e006,0x462a4904,0xfbccf7f4,
+0x0a16f06f,0xb0624650,0x87f0e8bd,0x0001ae4a,0x0001ad14,0x00012345,
+0x0001ad2d,0x0001a9df,0xdeadbeef,0x004480f1,0x004080f1,0x00018dc8,
+0x00017f24,0x0001ad5f,0x0001a9ca,0x0001ad89,0x0001adc4,0xb5106842,
+0x46196c90,0xf7f62200,0xbd10fe93,0xb5106843,0x69496c98,0xf7f62200,
+0xbd10fe8b,0x69ccb57f,0xf414460d,0xf89d4f00,0xd0096028,0x4400f424,
+0x9c0861cc,0x94009602,0x94019c09,0xf92af000,0x46c0bd7f,0x43f0e92d,
+0x9f0eb087,0x460c4681,0x46984615,0xb91f6806,0x3dc8f8d6,0x0708f103,
+0xf1b8b145,0xd9050f03,0x4629a804,0xf7f42204,0xe001fb4f,0x93042300,
+0x9a042c03,0xdc04d022,0xd0112c01,0xb164dc15,0x2c0ee051,0xdc02d00e,
+0xd01b2c0c,0xf5a4e04b,0x2b017383,0x2300d847,0x4b31e021,0xe00b602b,
+0xe058602c,0x602b6833,0x7c74e055,0xd1522c00,0x073cf8d6,0xfca4f7f9,
+0xe04d4620,0xf7ff4648,0xe048fdeb,0xf7fc4630,0xf44ffa2f,0xf00073fa,
+0xfb00007f,0xfbb0f003,0x6028f0f3,0x4543e03b,0xf06fd102,0xe02f000d,
+0x33015d5a,0xd1f62a00,0x7f83f5b4,0x0403eb05,0x0308ebc3,0x9202d108,
+0x46294630,0x95004622,0x8004f8cd,0xe0079703,0x23019301,0x94009302,
+0x46309703,0x46134629,0xff90f7fd,0x3a00e00f,0x2201bf18,0x3848f8d6,
+0xf10d9200,0x92020217,0x68189501,0x46424621,0xf006462b,0xb138f815,
+0x0325f100,0xd8022b25,0x0708f8c6,0x2000e000,0xe8bdb007,0x46c083f0,
+0x14e46c77,0x8a934602,0x1a406900,0x611018c9,0x47708291,0x8a934602,
+0x1a5b6900,0x61101840,0x47708293,0x47708281,0x41f0e92d,0xf8d04607,
+0x28000224,0xb9f1d077,0xf8d3683b,0xf9b11844,0xf9b12024,0x189b3026,
+0x2028f9b1,0xf9b1189b,0x42d3202a,0xf8d7d00f,0xf5c03218,0x2b0162e1,
+0x2318bf14,0x429a2398,0xf8d7dd05,0xf8d72228,0x429a322c,0x687bd357,
+0x7144f240,0xf7f66c98,0x4606fdb9,0x2301b940,0x3230f887,0x3231f897,
+0xf8873301,0xe0463231,0x21802500,0x5230f887,0xffb8f7ff,0xf04f6934,
+0x78230801,0xf3682204,0xb2db0303,0x1307f362,0xf8d77023,0x18a03224,
+0xb29b189b,0x0a1b70a3,0xf8d770e3,0xf8d72224,0xf7f41220,0x78a3fa69,
+0x463078e1,0x2101ea43,0xffa0f7ff,0xf8d74629,0xf8d72224,0xf7f40220,
+0xf8d7fa3b,0xf8d71228,0xf8c722c0,0xf8525224,0x44433021,0x3021f842,
+0xf8c7683b,0xf8d35228,0x4629073c,0x46324643,0xfb2cf7f9,0xf8d3683b,
+0x6e030778,0x20004798,0x81f0e8bd,0x4ff8e92d,0xf890469b,0x46063230,
+0x46174689,0x8028f8dd,0xa030f89d,0x2101b113,0xff6ef7ff,0x3224f8d6,
+0x2220f8d6,0x0418f103,0xf8d6189d,0xf8c63218,0x2b014224,0xb167d112,
+0x46391914,0x46202210,0xfa1af7f4,0x0010f104,0x1010f8d9,0xf7f4226e,
+0xf8d6fa13,0x33803224,0x3224f8c6,0xf1bab117,0xd0020f00,0x23012200,
+0x990be012,0xb9116832,0x13c2f642,0xf642e007,0x5ad313c2,0x4299990b,
+0xf642d004,0x5ad313c4,0xd1064598,0x23072200,0x716a712b,0x71ea71aa,
+0xf1bbe00a,0xd1020f14,0x23082200,0x2300e7f4,0x716b712b,0x71eb71ab,
+0x011cf109,0x702b7e0b,0x706b7e4b,0x70ab7e8b,0x70eb7ecb,0x0f00f1b8,
+0xf108d003,0x752b33ff,0xf885e001,0x23008014,0x736b732b,0x73eb73ab,
+0x746b742b,0x74eb74ab,0x3016f8b9,0xf0034a10,0x5cd30307,0x9a0b756b,
+0xb112694b,0x0f02f1b8,0xf1b8e001,0xbfcc0f03,0x0c1ab29a,0x726b0a13,
+0x72ab2300,0x722a0e13,0xf8d672eb,0x46303228,0xf8c63301,0x21003228,
+0xfee6f7ff,0x8ff8e8bd,0x0001af03,0x41f0e92d,0x8a884607,0x2803b086,
+0xf240460e,0x690c8123,0xf0037823,0x2d01050f,0x811cf040,0x78e378a2,
+0x2103ea42,0xf2004281,0x46308115,0xfec6f7ff,0x46302104,0xfebaf7ff,
+0x091b7823,0xd0472b02,0xf0002b03,0x2b0180a1,0x8104f040,0x21146934,
+0xf7ff4630,0x7862feab,0x68387823,0x2302ea43,0x498178a2,0x4302ea43,
+0xea4378e2,0x63736302,0x4b7e7c22,0x8af35c9a,0x0207f002,0x0307f023,
+0x69f3431a,0xf44382f2,0x61f34300,0x46334632,0xfd68f7f9,0xdb052800,
+0x46316838,0xf7fd2200,0xe0d5fbfb,0x46382400,0x46224631,0x94004623,
+0x94029401,0xff06f7ff,0x4631687b,0x46226c98,0xfc4ef7f6,0x46294638,
+0xfe7af7ff,0xe0c84620,0x46302104,0xf7ff6934,0x687bfe69,0x6c984631,
+0xf7f36935,0x2100fc6d,0x3101e000,0xd1014281,0xe0024601,0x2b005d4b,
+0x7862d1f7,0x31017823,0x2302ea43,0xea4378a2,0x78e24302,0x0400ebc1,
+0x6302ea43,0x7f83f5b3,0x0201eb05,0xf5a3d109,0x93027383,0x95009303,
+0x68389001,0x46234629,0x9200e008,0x22002301,0x94019302,0x68389203,
+0x46134629,0xfd9af7fd,0x46042104,0xf7ff4630,0x6932fe25,0x2307f3c4,
+0xf3c47053,0x70934307,0x70d30e23,0x21047014,0xf7ff4630,0x6934fe17,
+0x46202204,0xf7f42100,0x7823f8c3,0xf3652501,0xb2db0303,0xe04f2205,
+0x46302104,0x5017f88d,0xf7ff6934,0x687bfe0b,0x6c984631,0xf7f36935,
+0x4680fc0f,0xa804b12d,0x22044629,0xf8c8f7f4,0x9504e000,0x7821683b,
+0x0848f8d3,0x78e27863,0x2103ea41,0x950178a3,0x4103ea41,0xea419b04,
+0x3b006102,0x2301bf18,0xf10d9300,0x93020317,0x462b4642,0xf0056800,
+0x2104fddf,0x46304604,0xfdd4f7ff,0xf3c46932,0x70142307,0xf3c47053,
+0x0e244307,0x70d47093,0x46302104,0xfdc6f7ff,0x22046934,0x21004620,
+0xf872f7f4,0x25017823,0x0303f365,0x2208b2db,0x1307f362,0x687b7023,
+0x6c984631,0xfbc4f7f3,0x70a0b280,0x70e00a00,0x2100683b,0x073cf8d3,
+0x462b4632,0xf95ef7f9,0xe0062000,0x4631687b,0x22006c98,0xfb80f7f6,
+0xb0062001,0x81f0e8bd,0x0000d9a5,0x0001aefe,0xf243b530,0x58c403a0,
+0xb08569d3,0x4f00f413,0xd0194611,0x46202500,0x462b462a,0x95019500,
+0xf7ff9502,0x6863fe17,0x7144f240,0xf7f66c98,0x4601fb75,0x6863b140,
+0x6c98462a,0xfb58f7f6,0x21014620,0xfd84f7ff,0xbd30b005,0xb5102901,
+0xdd086804,0x68502100,0xf7f3460a,0x2806fc4f,0xf8a4bfd8,0xf8b406fc,
+0x480216fc,0xf850f7f4,0x46c0bd10,0x0001ae72,0xb5702901,0xdc014605,
+0xe0112400,0x02c0f8d0,0x22802100,0xf800f7f4,0xf8852300,0xe0153231,
+0xdd052c03,0x0f03f014,0x4810d102,0xf834f7f4,0x32c0f8d5,0xf8534621,
+0x480d2024,0xf7f43401,0x2c20f82b,0x4809d1ec,0xf826f7f4,0x122cf8d5,
+0x2228f8d5,0xf7f44807,0xf895f81f,0xf8951231,0x48052230,0xf818f7f4,
+0x46c0bd70,0x0001a336,0x0001ae86,0x0001ae90,0x0001aebe,0xb5102901,
+0xdd094604,0x68502100,0xf7f3460a,0x1e43fbfb,0xbf982b1e,0x022cf8c4,
+0x122cf8d4,0xf7f34801,0xbd10fffb,0x0001aee6,0x7943b510,0xb10b460c,
+0xe01eb2d8,0xb9097901,0xe01a2001,0xf8931903,0xf04fc01f,0xb9140e01,
+0x3024f890,0xf890e001,0x44633049,0xb25bb24a,0x0f43ebb2,0xfa5fdd02,
+0xe006f08e,0x0e01f10e,0xf1be3009,0xd1ea0f05,0xbd102004,0x468cb530,
+0x461d4614,0x0209f1a2,0xfb0c2309,0xf89d2303,0xb2db100c,0xb911181b,
+0x2024f893,0xf893e001,0x18432048,0xe01ff893,0x0f01f1bc,0x0302eb0e,
+0xd102b2da,0xfe82fa5f,0x1903e009,0xf893b911,0xe0013024,0x3048f893,
+0xfa5f4473,0xb939fe83,0xb9141940,0x006cf890,0xf890e005,0xe002007b,
+0xf8931943,0xf1bc008a,0xd0040f01,0x2b00b243,0x4610dc01,0x1813e008,
+0xb242b2d8,0xf38efa4f,0xbfc8429a,0xf08efa5f,0x46c0bd30,0x41f3e92d,
+0xf881fa5f,0x4170f401,0x5f00f5b1,0x2602bf14,0x79412600,0x46144607,
+0xb2cdb109,0x4631e003,0xff7ef7ff,0x46294605,0x46432200,0x46389600,
+0xff9cf7ff,0xf0000040,0x702000fe,0x70a07060,0x462970e0,0x46432201,
+0x46389600,0xff8ef7ff,0xf0000040,0x712000fe,0x46297160,0x46432202,
+0x46389600,0xff82f7ff,0xf0000040,0x71a000fe,0x462971e0,0x46432203,
+0x46389600,0xff76f7ff,0xf0000040,0x722000fe,0x96007260,0x46294638,
+0x46432204,0xff6af7ff,0xf0000040,0x72a000fe,0xe8bd72e0,0x46c081fc,
+0x460cb5f7,0xf4027941,0x46064370,0xf5b34617,0xbf145f00,0x25002502,
+0xb2cbb109,0x4629e003,0xff2af7ff,0xf0044603,0x2916017f,0xdc0cd020,
+0xd01d290b,0x2902dc04,0x2904d01a,0xe015d018,0xd017290c,0xd0152912,
+0x2930e010,0xdc04d016,0xd0112918,0xd00f2924,0x2960e008,0x296cd004,
+0x2948d002,0xe001d00a,0xe0082204,0xe00622ff,0xe0042200,0xe0022201,
+0xe0002202,0x46192203,0x46309500,0xf7ffb2fb,0xf340ff1d,0x00400006,
+0x46c0bdfe,0x4370f402,0x504cf500,0x5f80f5b3,0x468eb500,0xd11c6801,
+0xf102b2d2,0xb2db0348,0xd8012b0c,0xe0152001,0x0322f1a2,0x2b0eb2db,
+0x2002d801,0xf1a2e00e,0xb2db0334,0xd8012b0c,0xe0072003,0x0364f1a2,
+0x2b3db2db,0x2004d801,0x2000e000,0xf893180b,0x44700177,0xbd00b240,
+0x2904b570,0x6806b092,0x20ffd901,0x7141e020,0x3848f8d6,0x0503f10d,
+0xf0006818,0x462aff5b,0x46304601,0xfc60f7fd,0x3848f8d6,0x4620681c,
+0xff50f000,0x46024629,0xf0004620,0xf8d6ffbf,0xf04f3848,0x681831ff,
+0xf0032200,0x2000fb49,0xbd70b012,0x6805b570,0xf8d57101,0xb0923848,
+0xf0006818,0xf10dff37,0x46010603,0x46284632,0xfc3af7fd,0x3848f8d5,
+0x4620681c,0xff2af000,0x46024631,0xf0004620,0xf8d5ff99,0xf04f3848,
+0x681831ff,0xf0032200,0xb012fb23,0x46c0bd70,0x460eb573,0x24004615,
+0x2200e00c,0xf7f3a901,0x55a0fa59,0x1c629801,0xb90b7803,0xe0044610,
+0x46143001,0xd1f042ac,0xbd7c4628,0xf8a36c83,0xf8b313f6,0xb28003fa,
+0x46c04770,0xf8a36c83,0xf8a313f6,0x477023fa,0xf7ffb510,0xbd10fff7,
+0x2b066983,0x2901d103,0xf441bf18,0x46087100,0x46c04770,0x4604b510,
+0xfff2f7ff,0x46204601,0xffdcf7ff,0x46c0bd10,0x4604b570,0x4615460e,
+0xffe6f7ff,0x46204601,0xffd0f7ff,0xea004631,0x46200205,0xffd2f7ff,
+0x46c0bd70,0x4604b570,0x4615460e,0xffd4f7ff,0x46204601,0xffbef7ff,
+0x0205ea40,0x46204631,0xf7ffb292,0xbd70ffbf,0x41f0e92d,0x46064615,
+0x461c4688,0xffc0f7ff,0x46304601,0xffaaf7ff,0xea20402c,0x43220205,
+0x46414630,0xf7ffb292,0xe8bdffa9,0x46c081f0,0xf8a36c83,0xf8b313fc,
+0xb28003fe,0x46c04770,0xf8a36c83,0xf8a313fc,0x477023fe,0xf8a36c83,
+0xf8b313fc,0x400a13fe,0x23fef8a3,0x46c04770,0xf8a06c80,0xf8b013fc,
+0xb29b33fe,0xf8a0431a,0x477023fe,0x40136c80,0x13fcf8a0,0x13fef8b0,
+0xea21b289,0x430b0102,0x33fef8a0,0x46c04770,0x2100b500,0x32fff04f,
+0x4300f06f,0xf880468e,0xf8a01039,0xf8c02cde,0xf8a03664,0xf8a02660,
+0xf880226e,0xf8a02cdc,0xe00b2252,0xf04f3201,0x2a0933ff,0x3b01f801,
+0xf10ed1f8,0xf1be0e01,0xd0080f20,0xfb0e2309,0xf503f303,0x18c36396,
+0x22001c99,0xbd00e7ea,0x4604b510,0xf240b131,0xf64f413b,0xf7ff72f8,
+0xe00affa9,0x413cf240,0xf7ff2207,0x4620ffad,0x413bf240,0xf7ff2207,
+0xbd10ffa7,0xf8802301,0x47703037,0x47f0e92d,0x680d460c,0x6889469a,
+0x460668e3,0x2381ea43,0xb29a4611,0x8020f8bd,0xff82f7ff,0x46b92700,
+0x6923e01d,0xd10b2b20,0x2005f859,0x46514630,0xf7ff0c12,0xf839ff75,
+0x46302005,0xe0094641,0xd1042b10,0x2017f835,0x46414630,0x5d7ae002,
+0x46414630,0xff64f7ff,0xf1093701,0x68630904,0xd3de429f,0x87f0e8bd,
+0x4ff8e92d,0x680e460d,0x6889469b,0x460768eb,0x2381ea43,0xb29a4611,
+0x9028f8bd,0xff4cf7ff,0x0800f04f,0xe02546c2,0x2b20692b,0x4649d10f,
+0xf7ff4638,0x4659ff39,0xf84a4604,0x46380006,0xff32f7ff,0x4400ea44,
+0x4006f84a,0x2b10e00e,0x4638d106,0xf7ff4649,0xf826ff27,0xe0050018,
+0x46494638,0xff20f7ff,0x0006f808,0x0801f108,0x0a04f10a,0x4598686b,
+0xe8bdd3d6,0x46c08ff8,0x21feb510,0x22884604,0xfebaf7ff,0x21ff4620,
+0xf7ff2288,0x4620feb5,0x228821fc,0xfeb0f7ff,0x21fd4620,0xf7ff2288,
+0xbd10feab,0x43f0e92d,0x41dff240,0x4604b08b,0xfef6f7ff,0x2b7fb2c3,
+0x3fb8f8a4,0x2007f3c0,0xf5a3bfc4,0xf8a47380,0x287f3fb8,0xf5a0bfc8,
+0xf8a47380,0xbfc80fba,0x3fbaf8a4,0x93052311,0x080cf10d,0x2702332f,
+0x26209306,0x4357f240,0x0920f10d,0x4556f240,0x46414620,0x4255f240,
+0x900cf8cd,0x96079704,0xf7ff9500,0x9b08ff75,0xd9012b3f,0x93083b80,
+0xf8c49b08,0x9b093fbc,0xd9012b3f,0x93093b80,0xf2409b09,0xf8c44134,
+0x46203fc0,0xfeb4f7ff,0x287fb2c0,0xf5a0bfc4,0xb2987380,0x0fc4f884,
+0x4124f240,0xf7ff4620,0xf3c0fea7,0xf8a42007,0xf2400fc6,0x46204125,
+0xfe9ef7ff,0xb2c0230d,0x330f9305,0x0fc8f8a4,0x46209306,0x4357f240,
+0xf2404641,0xf8cd4255,0x9704900c,0x95009607,0xff36f7ff,0xf8c49b08,
+0x9b093fa8,0x3facf8c4,0xf8c44b04,0x4b043fb0,0x3fb4f8c4,0xe8bdb00b,
+0x46c083f0,0xf1e64d96,0xf1e60018,0x47f0e92d,0x463cf240,0x46044631,
+0xfe6ef7ff,0x483bf240,0x46414682,0xf7ff4620,0xf04afe67,0x46810201,
+0x46204631,0xf7ffb292,0xf049fe67,0x46200201,0xf64f4641,0xb29275fe,
+0xfe5ef7ff,0x46314620,0x0205ea0a,0xfe58f7ff,0x46414620,0x0205ea09,
+0xfe52f7ff,0x46314620,0xf7ff4652,0x4620fe4d,0x464a4641,0xfe48f7ff,
+0x87f0e8bd,0x4b61b570,0xe8934604,0x4b600003,0x681eb08a,0x2500aa08,
+0x0003e882,0xf240e00d,0x495c4356,0x23149300,0x1103fb02,0xf2404620,
+0xf2404255,0xf7ff4357,0xb2aafe99,0x42b23501,0x22ffd3ed,0x462023a2,
+0x4116f240,0xfe3af7ff,0x231422ff,0xf44f4620,0xf7ff6184,0x4620fe33,
+0x41fff240,0x427cf44f,0x53c0f44f,0xfe2af7ff,0x230b220f,0xf44f4620,
+0xf7ff6185,0x2207fe23,0x46132130,0xf7ff4620,0x2207fe1d,0x46202303,
+0x412ff240,0xfe16f7ff,0x22382320,0xf2404620,0xf7ff412f,0x6c63fe0f,
+0x6a5b689b,0x639ef5a3,0x2b013b0d,0x4b38d85c,0x681e2500,0xf240e00d,
+0x49364356,0x23149300,0x1103fb02,0xf2404620,0xf2404255,0xf7ff4357,
+0xb2aafe49,0x42b23501,0x2208d3ed,0x46204613,0x41def240,0xfdeaf7ff,
+0xf2404620,0x227f41e1,0x3020f8bd,0xfde2f7ff,0x46209b09,0xf240021b,
+0xf44f41e1,0xf40342fe,0xf7ff437f,0xab08fdd7,0x23029303,0x330f9304,
+0x33319305,0x23209306,0xf2409307,0x93004356,0xa9034620,0x4255f240,
+0xf7ff3301,0x4620fe17,0x6184f44f,0x427ff44f,0x5390f44f,0xfdbaf7ff,
+0xf2404620,0xf44f4124,0xf44f427f,0xf7ff5300,0x4620fdb1,0x514bf240,
+0x3233f246,0xfd90f7ff,0x22444620,0x414af240,0xfd9af7ff,0xf2404620,
+0x2280414a,0xfd84f7ff,0xbd70b00a,0x0001b4e8,0x00019858,0x0001981c,
+0x00019dcc,0x00019b64,0x2900b570,0x2380bf14,0x1e0c2300,0x2401bf18,
+0xf44f2280,0x46056196,0xfd84f7ff,0x01a403a3,0xf44f4628,0xf44f6196,
+0xf4034280,0xb2a44340,0xfd78f7ff,0xf2404628,0x2240413b,0xf7ff4623,
+0xbd70fd71,0xf240b510,0xf7ff41fb,0xf3c0fd49,0xbd102006,0x4370e92d,
+0x4605460c,0xfff2f7ff,0x88238862,0x79fff64f,0x2302ea43,0x464a4606,
+0xf2404628,0xb29b41b5,0xfd54f7ff,0x88a30236,0xf647b2b6,0x462878ff,
+0xea464642,0xf2400303,0xf7ff41fb,0x8862fd47,0x46288823,0x2302ea43,
+0x41fcf240,0xb29b464a,0xfd3cf7ff,0x464288a3,0x0303ea46,0xf2404628,
+0xf7ff41fd,0x88e6fd33,0x4439f240,0x46284621,0xfd0af7ff,0x437ff640,
+0x0303ea00,0x13c6ea43,0x46214628,0x72fff640,0xf7ffb29b,0x4628fd1f,
+0xf7ff2101,0xe8bdff89,0x46c08370,0xb089b500,0x0209ab08,0x1d02f823,
+0x23019302,0x3b019303,0x33579304,0x23109305,0xf2409306,0x93004356,
+0xf240a902,0x33014255,0xfd54f7ff,0xbd00b009,0xf8d36bc3,0xf0133830,
+0xd0085f00,0xf04f6c83,0xf8a30203,0xf04f26b4,0xf8a302ff,0x477026b8,
+0xf101fb00,0x01400252,0x2000fb03,0x4100f501,0x0040eb01,0xfb900049,
+0x4770f0f1,0xb089b500,0x031ef10d,0x23019302,0x3b019303,0x33579304,
+0x23109305,0xf2409306,0x93004356,0xf240a902,0x33014255,0xfd54f7ff,
+0x001ef8bd,0xb0090a00,0x46c0bd00,0x020cb570,0x4605b2a4,0xf2404623,
+0xf44f41fb,0xf7ff42fe,0x4628fcb9,0x41fdf240,0x42fef44f,0xf7ff4623,
+0xbd70fcb1,0x4370e92d,0x21fe460e,0x46904699,0xf7ff4605,0x21fefc3f,
+0x46284604,0xfc3af7ff,0x040ff004,0x1003f3c0,0x70341a24,0x462821ff,
+0xfc30f7ff,0x460421ff,0xf7ff4628,0xf004fc2b,0xf3c0040f,0x1a241003,
+0x4000f888,0x462821fc,0xfc20f7ff,0x460421fc,0xf7ff4628,0xf004fc1b,
+0xf3c0040f,0x1a241003,0x4000f889,0x462821fd,0xfc10f7ff,0x460421fd,
+0xf7ff4628,0xf004fc0b,0xf3c0040f,0x9b061003,0x701c1a24,0x8370e8bd,
+0x460db570,0x4139f240,0xf7ff4606,0xf3c0fc41,0x80e810c2,0x41b5f240,
+0xf7ff4630,0xf240fc39,0x460441fb,0xf7ff4630,0xf004fc33,0xb2c003ff,
+0x2407f3c4,0x806c802b,0xbd7080a8,0x2300b500,0x9307b08b,0x93093310,
+0x030ef10d,0x23019305,0x33549306,0xf2409308,0xf8ad4356,0x9300100e,
+0xf240a905,0x33014255,0xfc88f7ff,0xbd00b00b,0xbf142900,0x23002302,
+0x2a00b510,0xf043bf18,0x46040301,0xf2402203,0xf7ff414d,0x4620fc23,
+0x414cf240,0xf7ff2203,0xbd10fc13,0x2940b530,0x4605b089,0xf240d105,
+0x2200414e,0xfbf8f7ff,0x2310e02a,0xf10d9306,0x9302031e,0x93032301,
+0x4356f240,0x9105240f,0xa9029300,0xf2403301,0x94044255,0xfc88f7ff,
+0xf2404628,0x22ff414e,0xfbdef7ff,0x301ef8bd,0xf2404628,0x4622414f,
+0xf7ff4023,0xf8bdfbef,0x22f0301e,0xf2404628,0x4013414f,0xfbe6f7ff,
+0xbd30b009,0xf240b510,0xf64f414c,0xf7ff72fc,0xbd10fbc9,0x460cb570,
+0x22074605,0xf2404623,0xf7ff41ea,0x4628fbd3,0x41ebf240,0x46232207,
+0xfbccf7ff,0x46c0bd70,0xb5702280,0x46044613,0xf240460e,0xf24061d1,
+0xf7ff65d7,0x4620fbbf,0xf44f2207,0xf7ff61da,0x4620fb9f,0x22014629,
+0xf7ff2300,0x2202fbb3,0x46294620,0xf7ff4613,0x2204fbad,0x46294620,
+0xf7ff4613,0x4620fba7,0x22084629,0xf7ff2300,0x4620fba1,0x22104629,
+0xf7ff2300,0x4620fb9b,0x22204629,0xf7ff2300,0x4620fb95,0x22404629,
+0xf7ff2300,0x4620fb8f,0x22804629,0x23003506,0xfb88f7ff,0x46294620,
+0x46332201,0xfb82f7ff,0x46200073,0x22024629,0xf7ff3d01,0x2201fb7b,
+0x46294620,0xf7ff2300,0x2202fb75,0x46294620,0xf7ff4613,0x2204fb6f,
+0x46294620,0xf5a54613,0xf7ff75ec,0x3d01fb67,0x7200f44f,0x46294620,
+0xf7ff4613,0x4620fb5f,0xf44f4629,0x23007200,0xfb58f7ff,0xf7ff4620,
+0xbd70fcbd,0x2a3fb570,0x4614b088,0x9e0c461d,0x2900dc23,0x004adb21,
+0x00642318,0x3201b264,0x33089305,0xeb059307,0xb2550384,0xebc49303,
+0x33010305,0xf2409304,0x93004356,0x4255f240,0x3301a903,0xf7ff9406,
+0xb2a2fbbb,0x2301e003,0x18d354b3,0x42aab29a,0xb008ddf9,0x46c0bd70,
+0x47f0e92d,0xf2404688,0x460461b7,0xf7ff4691,0xf240fafb,0x460561b6,
+0xf7ff4620,0xf240faf5,0x460661b5,0xf7ff4620,0xf240faef,0x460761b4,
+0xf7ff4620,0xf04ffae9,0x46620c00,0xfa504664,0xf013f304,0xd0010101,
+0xe0032101,0x0301f10c,0xfc83fa5f,0xb2da1c53,0xd0122a10,0x29003401,
+0xe00ed0ed,0x0310f1a2,0xf303fa57,0x0f01f013,0x2101d001,0xf10ce003,
+0xfa5f0301,0x1c53fc83,0x2a1fb2da,0x2900d811,0xe00ed0ec,0x0320f1a2,
+0xf303fa56,0x0f01f013,0x2101d001,0xf10ce003,0xfa5f0301,0x1c53fc83,
+0x2a2fb2da,0x2900d811,0xe00ed0ec,0x0330f1a2,0xf303fa55,0x0f01f013,
+0x2101d001,0xf10ce003,0xfa5f0301,0x1c53fc83,0x2a3fb2da,0x2900d801,
+0xf04fd0ec,0x22000e3f,0xfa55240f,0xf013f304,0xd0010101,0xe0032101,
+0x33fff10e,0xfe83fa5f,0xb2da1c53,0xd0122a10,0x29003c01,0xe00ed0ed,
+0x031ff1c2,0xf303fa56,0x0f01f013,0x2101d001,0xf10ee003,0xfa5f33ff,
+0x1c53fe83,0x2a1fb2da,0x2900d811,0xe00ed0ec,0x032ff1c2,0xf303fa57,
+0x0f01f013,0x2101d001,0xf10ee003,0xfa5f33ff,0x1c53fe83,0x2a2fb2da,
+0x2900d811,0xe00ed0ec,0x033ff1c2,0xf303fa50,0x0f01f013,0x2101d001,
+0xf10ee003,0xfa5f33ff,0x1c53fe83,0x2a3fb2da,0x2900d801,0xf888d0ec,
+0xf889e000,0xe8bdc000,0x46c087f0,0x2202b510,0x23004604,0x41e7f240,
+0xfa58f7ff,0x22204620,0x6189f44f,0xf7ff2300,0x4620fa51,0x61daf240,
+0x72eff64f,0xfa36f7ff,0x46c0bd10,0x460db570,0x41a4f240,0x46164604,
+0xfa1ef7ff,0x4f60f410,0x4620d019,0x41abf240,0xfa16f7ff,0x4f00f410,
+0x7028d011,0x41a4f240,0xf7ff4620,0xf400fa0d,0xf5b04060,0xd0014f60,
+0xe0012000,0x0169f894,0x181b782b,0x2300e001,0x7033702b,0x46c0bd70,
+0x46c04770,0x13c3f640,0xd8014298,0xe00b2000,0x43c8f241,0xd8014298,
+0xe0052001,0x6344f241,0xbf8c4298,0x20022003,0x46c04770,0x47702000,
+0x313cf890,0xb112600b,0x324cf890,0x20007013,0x46c04770,0xb5106c83,
+0x3120f8d3,0x46046c43,0x3710f8d3,0x0f01f013,0xb1a1d115,0x414cf240,
+0x02fff24e,0xf9d6f7ff,0xf44f4620,0xf24f6196,0xf7ff72f7,0x4620f9cf,
+0x41f9f240,0x72f7f64f,0xf9c8f7ff,0x4620e02f,0x414df240,0x32fff248,
+0xf9c0f7ff,0xf2404620,0xf44f414c,0xf7ff52f8,0x4620f9c3,0x41b7f240,
+0x02fff248,0xf9b2f7ff,0xf2404620,0xf64d41b1,0xf7ff72ff,0x4620f9ab,
+0x6196f44f,0x0208f640,0xf9aef7ff,0xf2404620,0xf64f41fa,0xf7ff72f7,
+0x4620f99d,0x41f9f240,0xf7ff2208,0xbd10f9a1,0xfbb0b500,0xfb01fef1,
+0xf001001e,0xeb0c0c01,0xe00b0151,0xbf284288,0x0300ebc1,0x0e4eea4f,
+0xeb0cbf26,0xf10e0043,0x00400e01,0xb2da1e53,0xd1ef2aff,0xbf284288,
+0x0e01f10e,0xbd004670,0x0030f990,0x46c04770,0x1030f880,0x46c04770,
+0x47708581,0x47708d80,0x46c04770,0xf890b510,0x468c4cdd,0x0e00f04f,
+0xf85e4b11,0x290e1003,0xf44fbf8c,0xf44f5380,0xf4415300,0x43136230,
+0xb11cb298,0xd9012994,0xd90a29a5,0x0f02f1bc,0x290ed102,0xe004d90b,
+0x0f01f1bc,0x290ed101,0xf10ed805,0xf5be0e14,0xd1dd7f8c,0xbd1020ff,
+0x0001b508,0xb510468c,0x23204619,0x0f0ef1bc,0x98024604,0xd8067013,
+0xbfac2800,0x1c231823,0x3088f893,0x237fe02d,0x700b2200,0x0020ea30,
+0x2004bf28,0x4b144696,0x3003f85e,0xd004459c,0x2a0e3201,0x0e14f10e,
+0xf8d4d1f5,0xb10b3d48,0xe0165c9b,0x030ef1a2,0xd8032b15,0xf8931823,
+0x700b30e2,0x0324f1a2,0xd8032b05,0xf8931823,0x700b310f,0x032af1a2,
+0xd8032b08,0xf8931823,0x700b30b5,0x46c0bd10,0x0001b508,0xf04fb500,
+0xeb000e00,0xf81e020e,0xf10e3001,0xf1be0e01,0xf8820f04,0xd1f431c9,
+0x0e00f04f,0x020eeb01,0x030eeb00,0xf10e7912,0xf1be0e01,0xf8830f08,
+0xd1f321cd,0x0e00f04f,0x020eeb01,0xb9037d13,0xf10e7913,0xf8800e01,
+0x300131d5,0x0f08f1be,0xbd00d1f2,0x20006c43,0x0025f883,0x46c04770,
+0x47702000,0x2300b122,0x3da8f8c0,0x3dacf8a0,0x1d50f8c0,0x47702001,
+0x3258f890,0x4696b510,0x2b006bc4,0xf013d036,0xd0160f01,0x3260f8d0,
+0xd10c428b,0x6a1a6943,0xf883189b,0x6942e015,0x2b076a13,0x2300d101,
+0x3301e000,0xf8906213,0xf0233258,0xf8800301,0xf8903258,0xf0133258,
+0xd00e0f02,0x2264f8d0,0xd104428a,0xf6421912,0xf80213d0,0xf890e003,
+0xf0233258,0xf8800302,0xf8903258,0xf0133258,0xbf1c0f04,0x0304f023,
+0x3258f880,0x46c0bd10,0xb5302902,0x46146bc3,0x5258f890,0x2903d008,
+0x2901d013,0xf045d117,0xf8c00301,0xe0102260,0xf64218d1,0xf06f13d0,
+0x54ca025b,0x3258f890,0x4264f8c0,0x0302f043,0xf8c0e003,0xf0452268,
+0xf8800304,0xb9253258,0xf8d36c43,0xf8c0370c,0xbd30325c,0xb5102100,
+0x025bf06f,0xf7ff460b,0xbd10ff8f,0x3375f649,0x2300604b,0xb5f0600b,
+0x4298460c,0x2101bfac,0x31fff04f,0x0334f503,0xf103fb01,0x0334f503,
+0xfb901808,0xfb02f2f3,0x1a580313,0x13c3d403,0x105b3301,0x4243e004,
+0x330113db,0x425b105b,0xbfd42b5a,0x23012300,0xf5a0b113,0xe0140034,
+0xdb032800,0x330113c3,0xe004105b,0x13db4243,0x105b3301,0xf113425b,
+0xbfac0f5a,0x23012300,0x2601b90b,0xf500e003,0xf04f0034,0xf04f36ff,
+0x46f40e00,0x45604675,0x68226861,0xdd0b4f14,0xf30efa41,0x6023189b,
+0xf30efa42,0x0301ebc3,0x59eb6063,0xe00b449c,0xf30efa41,0x0302ebc3,
+0xfa426023,0x185bf30e,0x59eb6063,0x0c0cebc3,0x0e01f10e,0xf1be3504,
+0xd1dc0f12,0xfb066863,0x6063f303,0xfb066823,0x6023f303,0x46c0bdf0,
+0x0001b3b0,0x46c04770,0x71e0ea80,0x71e0eba1,0xb2d02200,0xf300fa51,
+0x2b003201,0x4770dcf9,0x20004601,0x4686b500,0x4380f04f,0xf30efa43,
+0x428a181a,0x0050ea4f,0x1a89d802,0x0000ea43,0x0e02f10e,0x0f20f1be,
+0x4288d1ee,0x3001bf38,0x46c0bd00,0x46c04770,0x47f0e92d,0xf240460c,
+0x4605413b,0xf8dd461f,0xf7fe9020,0x2204ff91,0xf2404613,0x4680413b,
+0xf7fe4628,0x4628ffab,0x413cf240,0x23002204,0xffa4f7fe,0x7200f44f,
+0x46284613,0x5103f240,0xff9cf7fe,0xf2404628,0xf44f5103,0x23007200,
+0xff94f7fe,0x4628b2a3,0x5105f240,0x72fff64f,0xff8cf7fe,0xf2404628,
+0xf64f5104,0x236472ff,0xff84f7fe,0x46282220,0x5103f240,0xf7fe4613,
+0x2400ff7d,0xf7f52001,0x4628fbc9,0x5103f240,0xff52f7fe,0x0f20f010,
+0x2600bf14,0x34012601,0x7f7af5b4,0x2e00d002,0xe000d0ec,0xf240b30e,
+0x46285106,0xff40f7fe,0x5107f240,0x46284604,0xff3af7fe,0x0c240424,
+0x4400eb04,0xf44f603c,0x462861a1,0xff30f7fe,0x5109f240,0x46284604,
+0xff2af7fe,0x0c240424,0x4400eb04,0x4000f8c9,0x603ee002,0x6000f8c9,
+0x46282204,0x413bf240,0x0302ea08,0xff3af7fe,0xe8bd4630,0x46c087f0,
+0x41f0e92d,0x460c4606,0xf2404615,0x222061da,0xf7fe461f,0x4630ff21,
+0x6182f44f,0x23002208,0xff24f7fe,0x46304623,0x4182f240,0x72fff64f,
+0xff1cf7fe,0xf2404630,0x22ff4181,0xf7fe462b,0x4630ff15,0x4181f240,
+0x7280f44f,0xf7fe2300,0xf44fff0d,0x46307200,0x4181f240,0xf7fe4613,
+0x2400ff05,0xf241e009,0x429c3389,0x2400d101,0x2064e036,0xfb4af7f5,
+0x46303401,0x4181f240,0xfed2f7fe,0x7f00f410,0xf240d1ed,0x46304183,
+0xfecaf7fe,0x4184f240,0x46304604,0xfec4f7fe,0x4004ea40,0xf2406038,
+0x46304185,0xfebcf7fe,0x4186f240,0x46304604,0xfeb6f7fe,0x4004ea40,
+0xf2406078,0x46304187,0xfeaef7fe,0x6191f44f,0x46304604,0xfea8f7fe,
+0x4004ea40,0x240160b8,0x46302208,0x6182f44f,0xf7fe4613,0x4620febf,
+0x81f0e8bd,0x4a0ab530,0x4604b085,0xab01460d,0xe883ca07,0x46200007,
+0x22204629,0xff78f7ff,0x9b03b120,0x189b9a02,0xf0f5fbb3,0xbd30b005,
+0x0001b35c,0x4ff0e92d,0xb0854b4f,0xad014680,0xe893460c,0xe8850007,
+0xf2400007,0x46406145,0xfe72f7fe,0x6146f240,0x46400587,0xfe6cf7fe,
+0x61d1f240,0x22040586,0x23004640,0xfe86f7fe,0x46132240,0xf2404640,
+0xf7fe614b,0x4640fe7f,0x6145f240,0x32fff240,0xf7fe2300,0x4640fe77,
+0x6146f240,0x32fff240,0xf7fe2300,0x4640fe6f,0x22204621,0xf7ff462b,
+0x0dbfff33,0x46830db6,0xd04a2800,0xf8dd9d02,0xf8dda00c,0xeb0a9004,
+0x2b010305,0xf04fd802,0xe03e0b00,0xf7ff4648,0x4604fe6f,0xf7ff4650,
+0xf1a4fe6b,0xb21a0314,0xdb062a00,0xf102fa35,0x3201d041,0xf202fa35,
+0x4253e006,0xf103fa15,0x43d2d039,0xf202fa15,0xf1c3b223,0xfa09031e,
+0xebc3f303,0xf1a00402,0xb21b030b,0x460a2b00,0xfa35db02,0xe002f103,
+0xfa15425b,0xd022f103,0xf1c3b203,0xfa0a031f,0xfb94f303,0xfb93f4f2,
+0xfb04f0f1,0xf7ff0014,0x05a7fe43,0x0dbf0586,0x46400db6,0x6145f240,
+0x32fff240,0xf7fe463b,0x4640fe11,0x6146f240,0x32fff240,0xf7fe4633,
+0x4658fe09,0x2000e000,0xe8bdb005,0x46c08ff0,0x0001b318,0x460cb570,
+0xb1484605,0x3030f890,0xd0032b14,0xd1032b28,0xe0022280,0xe0002240,
+0x21cc2200,0x020cf042,0xf7f14620,0x2002facb,0xfa38f7f5,0x2202210a,
+0xf7f14620,0x2001fac3,0xfa30f7f5,0x21024620,0xf7f12200,0x2001fabb,
+0xfa28f7f5,0x4628b11d,0xf7fe2101,0xbd70fe0d,0x4606b570,0x4610460d,
+0x21004614,0xf7f2221c,0x2000fb5b,0x58c24b0f,0x3cddf896,0x2a94b11b,
+0x2aa5d901,0x2d02d910,0x2a0ed102,0xe00bd904,0xd1092d01,0xd9072a0e,
+0xf00208d1,0x22010307,0x5c63409a,0x54634313,0xf5b03014,0xd1e17f8c,
+0x46c0bd70,0x0001b508,0x2380b530,0x7d09f5ad,0x9384ac03,0x93852318,
+0x33082100,0x7200f44f,0x46204605,0x93879483,0xf7f29186,0x4622fb25,
+0x2300f44f,0x32086053,0x7300f504,0xd1f7429a,0x4356f240,0x46289300,
+0xf240a983,0x33014255,0xfdd4f7fe,0x7d09f50d,0x46c0bd30,0x4ff0e92d,
+0x7d0bf5ad,0xf8bd461f,0x46893258,0xf89d9303,0xf240325c,0x005b61a3,
+0x46052202,0x4250f89d,0xb254f8bd,0x8260f8bd,0xa264f8bd,0xfd62f7fe,
+0x93862380,0xae052318,0x21009387,0x96853308,0x91889389,0xf44fb1bc,
+0x46307200,0xfae4f7f2,0xf44f4632,0x60532300,0xf5063208,0x429a7300,
+0xf240d1f7,0x93004356,0xa9854628,0x4255f240,0xf7fe3301,0xf1b9fd93,
+0xd12f0f00,0xf2404628,0x464261a1,0xfd1cf7fe,0xf2404628,0x465261a2,
+0xfd16f7fe,0xf2404628,0x463a617e,0xfd10f7fe,0x1c7a2314,0xf203fb02,
+0x46283a01,0x61c8f44f,0xf7feb292,0x4628fd05,0x617bf240,0xf7fe465a,
+0x4628fcff,0x617cf240,0xf7fe9a03,0x4628fcf9,0x6176f240,0x02a1f24b,
+0xfcf2f7fe,0xe0034c0d,0xf7f5200a,0x3c0af957,0xf2404628,0xf7fe6176,
+0xf010fcdf,0xd0010f01,0xd1f12c09,0x46282280,0x6176f240,0xf7fe4613,
+0xf50dfcf5,0xe8bd7d0b,0x46c08ff0,0x000f4249,0x4770e92d,0xac03b0c9,
+0x21004682,0xf44f4620,0xf7f27280,0x2307fa75,0x33199345,0xae439347,
+0xf2402318,0xf2404855,0x94434957,0x25409344,0x4456f240,0x46314650,
+0x464b4642,0x94009546,0xfd20f7fe,0x93462380,0x46314650,0x464b4642,
+0x94009544,0xfd16f7fe,0xe8bdb049,0x46c08770,0x4604b510,0xf7f76bc0,
+0xf44fff2d,0x28026182,0x2320bf14,0x22e02360,0xf7fe4620,0xbd10fcaf,
+0x4605b570,0xf240b9a1,0xf64f413b,0xf7fe72ed,0x4628fc91,0x414cf240,
+0x72f0f64e,0xfc8af7fe,0xf2404628,0xf64f41f9,0xf7fe72f8,0xe096fc83,
+0x46132202,0x413bf240,0xfc90f7fe,0x23002202,0xf2404628,0xf7fe413c,
+0x2210fc89,0x46284613,0x413bf240,0xfc82f7fe,0x23002240,0xf2404628,
+0xf7fe413c,0xf241fc7b,0x46130208,0xf2404628,0xf7fe414c,0xf244fc73,
+0x46130208,0xf2404628,0xf7fe414d,0x2101fc6b,0x46282200,0xf834f7ff,
+0x23002204,0xf2404628,0xf7fe414d,0x2204fc5f,0xf2404628,0x4613414c,
+0xfc58f7fe,0xf7f76be8,0x2802fec9,0xd1284604,0xf2404628,0x462241f9,
+0xf7fe4623,0x4628fc4b,0x41faf240,0x46234622,0xfc44f7fe,0x46132204,
+0xf2404628,0xf7fe41f9,0x2204fc3d,0x46284613,0x41faf240,0xfc36f7fe,
+0x46132201,0xf2404628,0xf7fe41f9,0x2201fc2f,0xf2404628,0x461341fa,
+0x2202e027,0x46284613,0x41f9f240,0xfc22f7fe,0xf2404628,0x220241fa,
+0xf7fe2300,0x2204fc1b,0x46284613,0x41f9f240,0xfc14f7fe,0xf2404628,
+0x220441fa,0xf7fe2300,0x2201fc0d,0x46284613,0x41f9f240,0xfc06f7fe,
+0xf2404628,0x220141fa,0xf7fe2300,0xbd70fbff,0xb5102300,0x3de8f8c0,
+0x6144f240,0xf7fe4604,0xf010fbd3,0xd0050301,0x46202202,0x613ff240,
+0xe0074613,0x0f02f010,0x4620d006,0x4153f240,0x4200f44f,0xfbe2f7fe,
+0x22084620,0xf2402300,0xf7fe61da,0x4620fbdb,0x23002280,0x61daf240,
+0xfbd4f7fe,0x23012203,0xf2404620,0xf7fe61d6,0x2100fbcd,0xf7ff4620,
+0x6be0ff1b,0xfe3af7f7,0x6182f44f,0xbf142802,0x23602320,0x462022e0,
+0xfbbcf7fe,0x46c0bd10,0x41f0e92d,0x4616460c,0x3c012280,0xf2404605,
+0x461f61da,0xf89d4613,0xf7fe8018,0xb2a3fbab,0xf2404628,0xf2406142,
+0xf64f32ff,0xf7fe74ff,0x42a6fba1,0x1e73d001,0x4628b29e,0x61c8f44f,
+0x46334622,0xfb96f7fe,0xf2404628,0x46226141,0xf7fe463b,0xf1b8fb8f,
+0xd00e0f00,0xf2404628,0xf6474153,0xf7fe72ff,0x4628fb71,0x4153f240,
+0x4200f44f,0xfb74f7fe,0x4628e009,0x613ff240,0xf7fe2201,0x4628fb5d,
+0xf7ff2101,0xe8bdfec5,0x46c081f0,0x4ff0e92d,0x460c4605,0x469b4692,
+0x1de8f8c5,0xf44fb0cb,0x22e06182,0xf7fe2380,0xb914fb61,0x0802f04f,
+0x2001e012,0x4140f649,0xf101fb00,0x72e4ea84,0x72e4eba2,0xf3f2fbb1,
+0xf883fa1f,0xf208fb02,0x428a1c43,0xd1edb298,0xfb042324,0x2228f303,
+0xf3f2fb93,0x041b2400,0xfb93323c,0x4627f9f2,0xe02d4626,0xa9484638,
+0xfadcf7ff,0xfb039b49,0x2b00f30a,0x13dbdb04,0xf3c33301,0xe0060249,
+0x13db425b,0x105b3301,0x059a425b,0x9b480d92,0xf30afb03,0xdb042b00,
+0x330113db,0x0349f3c3,0x425be006,0x330113db,0x425b105b,0x0d9b059b,
+0x2382ea43,0x50b3aa03,0x444f1c63,0x3604b29c,0xd1cf4544,0x22034628,
+0xf2402300,0xf7fe61d6,0x2208fb05,0x46134628,0x61daf240,0xfafef7fe,
+0x46282202,0xf2404613,0xf7fe61da,0xab03faf7,0x23159343,0x330b9345,
+0xf2409347,0x24004356,0x46289300,0x3301a943,0x4255f240,0x8110f8cd,
+0xf7fe9446,0x4628fb37,0xf64f4641,0x462372ff,0xb000f8cd,0xff20f7ff,
+0xe8bdb04b,0x46c08ff0,0x2900b570,0xf44fbf14,0x23007380,0x1e0e4605,
+0x2601bf18,0x7280f44f,0x6196f44f,0xfac6f7fe,0x46282201,0x414cf240,
+0xf7fe4633,0x01b4fabf,0x22100133,0x4628b29b,0x414cf240,0xf7feb2a4,
+0x2240fab5,0xf2404628,0x4623414c,0xfaaef7fe,0x22200173,0x4628b29b,
+0x6196f44f,0xfaa6f7fe,0x46282240,0x6196f44f,0xf7fe4623,0x6be8fa9f,
+0xfd10f7f7,0xd1112802,0x462802b3,0x6196f44f,0x6280f44f,0x437cf403,
+0xfa90f7fe,0xb29b00f3,0xf2404628,0x220841e5,0xfa88f7fe,0x46c0bd70,
+0x1380f481,0x2201b570,0x460e4605,0x5440f3c1,0x5300f3c3,0x414df240,
+0xfa78f7fe,0x46280263,0x41b1f240,0x7200f44f,0xfa70f7fe,0x462802a3,
+0x41b1f240,0x6280f44f,0xfa68f7fe,0xf2404628,0xf64f41b6,0xb2b372ff,
+0xfa60f7fe,0x4628220f,0x41b7f240,0x4303f3c6,0xfa58f7fe,0xf7f76be8,
+0x2802fcc9,0xf3c6d110,0x46280481,0x41b1f240,0x52c0f44f,0xf7fe02e3,
+0x4628fa49,0x41e6f240,0x00e32218,0xfa42f7fe,0x21014628,0xff68f7ff,
+0x46c0bd70,0x47f0e92d,0x46061e0f,0x4b3edb03,0x1027f853,0xf1b7e018,
+0xd1143fff,0x4b3a2500,0xf8534630,0xf7ff1025,0x4630ffa3,0x1f9ef8b6,
+0xfb68f7ff,0x2d243501,0xd0024604,0x7f2ff5b0,0x1e6fd3ed,0x2100e009,
+0xf7ff4630,0x4630ff91,0x1f9ef8b6,0xfb56f7ff,0x4b2c4604,0xf2404630,
+0xf8134125,0xf7fea007,0x0124f9e7,0x46810c22,0xb9120413,0x46184622,
+0x2010e000,0x4f7ff412,0x0a12d001,0xf0123008,0xd0010ff0,0x30040912,
+0x0f0cf012,0x0892d001,0xf0123002,0xbf180f02,0x1c433001,0xfa122201,
+0x409af100,0x0104ebc1,0x42911b12,0x4698bf2c,0x46304680,0x4134f240,
+0xf9baf7fe,0xf44f4b12,0x57da718f,0x3fcaf996,0xfb03b2c5,0x2d7ff301,
+0x531cf5a3,0xf5a5bf88,0x3b1a7580,0x3223eb02,0x0202ebca,0x234ef3c9,
+0x46301ad2,0xf5a12403,0xfb08718f,0xf7ff2404,0x1960fee7,0x87f0e8bd,
+0x0001c420,0x0001bdce,0x0001bd82,0xf8bdb570,0x460c601c,0x72fff64f,
+0x41b6f240,0x0303f006,0xf7fe4605,0x220ff9a7,0xf2404628,0xea0441b7,
+0xf7fe0302,0x6be8f99f,0xfc10f7f7,0xd1112802,0x462802f3,0x41b1f240,
+0x52c0f44f,0x4378f403,0xf990f7fe,0xb29b00f3,0xf2404628,0x221841e6,
+0xf988f7fe,0x46c0bd70,0x4604b530,0x460db085,0xf240b979,0xf24f414c,
+0xf7fe72ff,0x4620f967,0x6196f44f,0x62fff64f,0xf960f7fe,0x46294620,
+0xf44fe023,0x46136200,0x414cf240,0xf96af7fe,0x5200f44f,0x46204613,
+0x414df240,0xf962f7fe,0x7280f44f,0x46204613,0x6196f44f,0xf95af7fe,
+0x23032207,0x46209201,0x2201210f,0x93029300,0xf7ff9303,0x4620ff9b,
+0xf7ff2101,0xb005fe75,0x46c0bd30,0xf241b510,0x5cc3033d,0xb92b4604,
+0xf7f76bc0,0xf04ffbb3,0xe0060320,0xf7f76bc0,0x2801fbad,0x2340bf0c,
+0xf8a42346,0xf04f3f96,0xf8a40300,0xbd103f98,0x47f0e92d,0x4d544b53,
+0xb088681e,0x24004607,0xf240e00b,0x93004356,0x46384629,0x4255f240,
+0xf7fe3301,0x3401f96f,0x42b43514,0x6bf8d1f1,0xfb88f7f7,0xd1492802,
+0xf7f76bf8,0x2307fb83,0x33199304,0x23019306,0xab079303,0xbf142801,
+0x0a70f04f,0x0a10f04f,0xf04f9302,0xf04f0800,0x493e09c0,0xeb08ae02,
+0x78630401,0x021b78a2,0x4302ea43,0x2001f818,0x4556f240,0xea434313,
+0x9307630a,0x46314638,0x4255f240,0x4357f240,0x9014f8cd,0xf7fe9500,
+0x78e3f935,0x071b7922,0x5302ea43,0xf1099307,0x93050380,0x46314638,
+0x4255f240,0x4357f240,0x0805f108,0xf7fe9500,0xf5b8f921,0xf1097f20,
+0xd1ca0901,0x689b6c7b,0xf2406a5a,0x429a5304,0x3baed108,0x46389300,
+0xf240491f,0x33014255,0xf90cf7fe,0x93042307,0x93063319,0x93032301,
+0xab072400,0xe0119302,0x220a014b,0xf3f2fb93,0xf5019307,0x93057310,
+0x4356f240,0x46389300,0xf240a902,0x33014255,0xf8f0f7fe,0x3401b2e1,
+0xd1e92c81,0xf7f76bf8,0x2802fb09,0x4638d116,0x6189f44f,0x4200f44f,
+0xf882f7fe,0xf44f4638,0x22406182,0xf87cf7fe,0x46c0e016,0x00019b8c,
+0x000192ec,0x0001985c,0x00019b90,0xf44f4638,0xf6476189,0xf7fe72ff,
+0x4638f861,0x6182f44f,0x72bff64f,0xf85af7fe,0x7380f44f,0xf44f4638,
+0xf44f6189,0xf7fe7240,0x4638f865,0xf2402250,0xf7fe4139,0x4638f845,
+0x413af240,0x4208f44f,0xf83ef7fe,0x22004638,0x413bf240,0xf838f7fe,
+0x22004638,0x413cf240,0xf832f7fe,0x22004638,0x41e5f240,0xf82cf7fe,
+0x22004638,0x414cf240,0xf826f7fe,0x22004638,0x6196f44f,0xf820f7fe,
+0x22004638,0x41f9f240,0xf81af7fe,0x22004638,0x414ef240,0xf814f7fe,
+0x3f89f897,0x22ff4638,0x4134f240,0xf826f7fe,0x22444638,0x414af240,
+0xf816f7fe,0x22804638,0x414af240,0xf800f7fe,0xf2404638,0xf64a413d,
+0xf7fd1254,0xf897fff9,0xf8972f8a,0xf4423f8b,0xea425200,0xf8971203,
+0x46383f8c,0x2283ea42,0x413ef240,0xf7fdb292,0x4638ffe7,0x4127f240,
+0x4260f44f,0x43c0f44f,0xfff8f7fd,0x220f4638,0xf44f230a,0xf7fd6185,
+0x4638fff1,0x6184f44f,0x427ff44f,0x53f0f44f,0xffe8f7fd,0x46382201,
+0xf2404613,0xf7fd510e,0x2332ffe1,0xf2404638,0xf44f510e,0xf7fd72ff,
+0x2201ffd9,0x46134638,0x510af240,0xffd2f7fd,0x463823a4,0xf24022ff,
+0xf7fd4116,0x4638ffcb,0x514bf240,0x0233f246,0xffaaf7fd,0x22ff4638,
+0xf2402346,0xf7fd4123,0x4638ffbd,0x4123f240,0x427ff44f,0x5334f44f,
+0xffb4f7fd,0x22ff4638,0xf2402306,0xf7fd4125,0x4638ffad,0x4125f240,
+0x427ff44f,0x43bef44f,0xffa4f7fd,0x220f4638,0xf240230a,0xf7fd4126,
+0x4638ff9d,0x23002208,0x515af240,0xff96f7fd,0x22ff4638,0xf44f2312,
+0xf7fd6184,0x4638ff8f,0x4124f240,0x427ff44f,0x53e8f44f,0xff86f7fd,
+0x220f4638,0xf2402309,0xf7fd4129,0x4638ff7f,0x4112f240,0x427ff44f,
+0x5340f44f,0xff76f7fd,0x23004638,0x4127f240,0x52f8f44f,0xff6ef7fd,
+0x463822ff,0xf2404613,0xf7fd4134,0x4638ff67,0x41dff240,0x427ff44f,
+0x4374f44f,0xff5ef7fd,0x22ff4638,0xf2402300,0xf7fd5145,0x4638ff57,
+0x4392f44f,0x5145f240,0x427ff44f,0xff4ef7fd,0x22034638,0x6156f240,
+0xff2ef7fd,0xf44f4638,0xf2406340,0xf44f41ff,0xf7fd427c,0x4638ff3f,
+0xf240226c,0xf7fd411f,0x4638ff1f,0x230c227f,0x510ff240,0xff32f7fd,
+0x22ff4638,0xf240230c,0xf7fd6134,0x4638ff2b,0xf44f2217,0xf7fd61c1,
+0x4638ff0b,0x6104f240,0x32eaf240,0xff04f7fd,0xe8bdb008,0x46c087f0,
+0x41f0e92d,0x460521e0,0xf7f76bc0,0xf8b5faad,0x46074f94,0x0400ebc4,
+0x41a5f240,0xf7fd4628,0x2301fee7,0x2602f3c0,0xb2a440b3,0xdd0c429c,
+0x7f94f8a5,0xf2404628,0xf7fd41ab,0xf3c0fed9,0xf8a52006,0xf8a50f96,
+0xe8bd6f98,0x46c081f0,0x4604b530,0xf890b0a1,0xf7f7002c,0x2307f94b,
+0x3319931c,0x2000931e,0xf9931823,0xad022169,0xf8454252,0x30012020,
+0x0110f241,0x545a2804,0xf994d1f2,0xf241316d,0x425b0214,0x320154a3,
+0x930654a3,0xf9949307,0x3201316e,0x54a3425b,0x54a33201,0x93099308,
+0x316ff994,0x425b3201,0x320154a3,0x930a54a3,0xf994930b,0x32013170,
+0x54a3425b,0x54a33201,0x930d930c,0x3171f994,0x425b3201,0x320154a3,
+0x930e54a3,0xf994930f,0x32013172,0x54a3425b,0x54a33201,0x93119310,
+0x3173f994,0x5281f504,0x9312425b,0xf2417013,0x93130221,0xf99454a3,
+0x32013174,0x54a3425b,0xf9949314,0x3201317c,0x54a3425b,0x23189315,
+0x3328931b,0xf240931d,0x93004356,0x33014620,0xf240a91a,0x951a4255,
+0xfed0f7fd,0x037ff10d,0x2301931a,0x3307931b,0x3378931e,0x2300931d,
+0x307ff88d,0xf240461d,0x93004356,0x33014620,0xf240a91a,0xf7fd4255,
+0x9b1dfeb9,0x931d3301,0x307ff89d,0xb2db3301,0xf88d2b20,0xbf04307f,
+0x031ff06f,0x307ff88d,0x2d403501,0x4620d1e3,0x41a7f240,0xfe2cf7fd,
+0x31c8f894,0x4298b2c0,0x4620d006,0x41a7f240,0xf7fd22ff,0xe003fe43,
+0x033df241,0xb1135ce3,0xf7ff4620,0xb021fcf3,0x46c0bd30,0xb08bb5f0,
+0x9303ab08,0x93042302,0x9305330b,0x93073313,0x7fcaf990,0xf1174606,
+0xda2d0f0f,0xfb0733fe,0xf503f303,0x331c53a0,0x3b02131b,0x3fcbf880,
+0x231aad03,0x4456f240,0x46299306,0x4255f240,0x4357f240,0xf7fd9400,
+0x231cfe9b,0x46309306,0xf2404629,0xf2404255,0x94004357,0xfe5af7fd,
+0x46294630,0x4255f240,0x4357f240,0xf7fd9400,0xf5a4fe87,0xe095648a,
+0xdc462f12,0x738ff44f,0xf303fb07,0x6344f5a3,0x131b3b0a,0x3fcbf880,
+0x231aad03,0x4456f240,0x46299306,0x4255f240,0x4357f240,0xf7fd9400,
+0x231cfe6b,0x46309306,0xf2404629,0xf2404255,0x94004357,0xfe2af7fd,
+0x46294630,0x4255f240,0x4357f240,0xf7fd9400,0x2336fe57,0xf8d69306,
+0x46303fb0,0xf8d69308,0x46293fb4,0xf2409309,0xf2404255,0x94004357,
+0xfe10f7fd,0x46294630,0x4255f240,0x4357f240,0xf7fd9400,0x2403fe3d,
+0x2f45e04c,0xf8d0ad03,0xf8d02fa8,0xdc221fac,0x738ff44f,0xf303fb07,
+0x531cf5a3,0x131b3b1a,0x3fcbf880,0xf240231c,0x93064456,0x91099208,
+0x4255f240,0xf2404629,0x94004357,0xfde6f7fd,0x46294630,0x4255f240,
+0x4357f240,0xf7fd9400,0x2400fe13,0xf44fe022,0xfb07738f,0xf5a3f303,
+0x3b62438c,0xf880131b,0x231c3fcb,0x4456f240,0x92089306,0xf2409109,
+0x46294255,0x4357f240,0xf7fd9400,0x4630fdc3,0xf2404629,0xf2404255,
+0x94004357,0xfdf0f7fd,0x0402f06f,0x3fb8f8b6,0x18ebb2a5,0x463022ff,
+0x41dff240,0xf7fdb29b,0xf8b6fd59,0xf44f3fba,0x18eb427f,0x4013021b,
+0xf2404630,0xf7fd41df,0xab08fd4d,0xf8d69303,0x46303fbc,0x930818e3,
+0x3fc0f8d6,0x18e3a903,0x23029309,0x330f9304,0x332f9305,0x23209306,
+0xf2409307,0x93004356,0x4255f240,0xf7fd3301,0xf996fd85,0x22ff3fc4,
+0xb29b18eb,0xf2404630,0xf7fd4134,0xf107fd27,0x2b21030f,0xf896d808,
+0xf7f6002c,0xf640ff7f,0x4298137b,0xe00bd82f,0x0332f1a7,0xd8132b13,
+0x002cf896,0xff72f7f6,0x137bf640,0xd8054298,0x463022ff,0x4134f240,
+0xe01a4613,0xf2404630,0x22ff4134,0xe0142300,0xdd142f45,0x002cf896,
+0xff5cf7f6,0x137bf640,0xd8054298,0xf2404630,0x22ff4134,0xe00423fd,
+0xf2404630,0x22ff4134,0xf7fd23fe,0xf8b6fceb,0xf44f3fc6,0x18eb427f,
+0x4013021b,0xf2404630,0xf7fd4124,0xf8b6fcdf,0x46303fc8,0xb29b18eb,
+0xf24022ff,0xf7fd4125,0x4630fcd5,0xf2402244,0xf7fd414a,0x4630fcc5,
+0x414af240,0xf7fd2280,0x4630fcaf,0xfdd4f7ff,0xbdf0b00b,0x460db570,
+0x41a4f240,0xf7fd4604,0xf400fc9b,0x42a84060,0xf5b0d045,0xd1094f60,
+0xf7ff4620,0x4620fd99,0xffc2f7fe,0x4f60f5b5,0xe027d12a,0x4f60f5b5,
+0x4620d126,0xfdb4f7ff,0xf2404620,0x227f41a4,0x3f96f8b4,0xfc9ef7fd,
+0x3f98f8b4,0x62e0f44f,0xf403021b,0x4620437f,0x41a5f240,0xfc92f7fd,
+0x6be021e0,0xf828f7f7,0xf8a42100,0x46200f94,0xfef6f7fd,0x33fff04f,
+0x3f9cf884,0xe0002300,0x46202310,0x61a3f240,0xf7fd2210,0x4620fc7b,
+0x41a4f240,0x4260f44f,0xf7fd462b,0xbd70fc73,0x41f0e92d,0xb0942307,
+0xf8864606,0x930a1f9c,0x3319460f,0x0801f04f,0x41a4f240,0xf8cd930c,
+0xf7fd8024,0xf410fc3d,0xd0044f60,0xf44f4630,0xf7ff4100,0xf507ff93,
+0xad0873a0,0xab13930b,0x4456f240,0x46309308,0xf2404629,0xf2404255,
+0x94004357,0xfcd0f7fd,0x03c0f107,0xab12930b,0x46309308,0xf2404629,
+0xf2404255,0x94004357,0xfcc2f7fd,0x46309b12,0x02fff003,0x2034f8ad,
+0x2207f3c3,0x4307f3c3,0x3038f8ad,0xa90d9b13,0x7302f3c3,0x2036f8ad,
+0x303af8ad,0xfebaf7fd,0x104bf89d,0xf0014630,0xf7fd017f,0x9913ff57,
+0xf3c14630,0xf7fd5107,0x9b13fefd,0xf3c34630,0x059b2289,0xf8ad0d9b,
+0x2300303e,0x33109305,0xab0f9307,0x23029303,0x334e9304,0x203cf8ad,
+0xa9039306,0x4255f240,0x4357f240,0xf7fd9400,0xf507fc4d,0x930b73e0,
+0x9308ab11,0x46294630,0x4255f240,0x4357f240,0xf7fd9400,0x4630fc75,
+0x1044f8bd,0xff9af7fd,0x7310f507,0xab10930b,0x46309308,0xf2404629,
+0xf2404255,0x94004357,0xfc62f7fd,0x46309b10,0xb29b00db,0x61a6f240,
+0x72fff641,0xfbcef7fd,0x46414630,0xfe38f7fd,0xe8bdb014,0x46c081f0,
+0x4ff0e92d,0x4607b0b3,0x4615460c,0x22162100,0x004ef10d,0xf7f19302,
+0x4973f94b,0xf10d220c,0xf7f10092,0x4971f965,0xf10d220c,0xf7f10086,
+0xf10df95f,0x496e007a,0xf7f1220c,0x2300f959,0x3310931b,0x2d03931d,
+0xe8dfd80e,0x1402f005,0x2206091c,0x034ef10d,0x0892f10d,0xe055920d,
+0x46982300,0xe023930d,0x0800f04f,0x46c24643,0x8034f8cd,0xf507e04c,
+0x21066376,0xf10d330c,0x910d0886,0xf10de042,0x9319034e,0x931a2307,
+0x931c3349,0x4356f240,0xf2409300,0x46384255,0x3301a919,0xfbfcf7fd,
+0xf10d2206,0x920d0886,0x9300ab31,0x01c7f10d,0x02c6f10d,0x03c5f10d,
+0xf7fd4638,0xf89dfeb3,0xf89d20c7,0xf04f30c6,0xea430100,0xf8ad2302,
+0xf04f305c,0xf8ad0300,0xf89d305e,0xf89d20c5,0x2d0230c4,0x2302ea43,
+0x3060f8ad,0x1062f8ad,0x034ef10d,0x2206d006,0x0892f10d,0x0a02f04f,
+0xe001920d,0x0a00f04f,0x230b9319,0x3335931a,0xf240931c,0xf2404356,
+0x93004255,0x33014638,0xf7fda919,0xf240fb83,0x463841a4,0xfb08f7fd,
+0x90032100,0xf7ff4638,0x4638fe61,0x413bf240,0xfafef7fd,0x1080f3c0,
+0xb118900c,0xa92a4638,0xfeaef7fd,0x9b0cb95c,0x4638b923,0x1f96f8b7,
+0xfe9ef7ff,0x4638ac2c,0xf7fd4621,0x8863fea1,0x011b8822,0x2302ea43,
+0x462188a2,0xb29e4313,0x22088dbb,0x4370f403,0xf5b3a82e,0xbf145f80,
+0x25012500,0xf8a8f7f1,0xf10d220a,0x2100009e,0xf882f7f1,0x22004b11,
+0x4015f833,0xe0224610,0xf8534b0f,0x18c13025,0x3012880b,0xd11942b3,
+0xf10d884a,0xf8ad009e,0x888b20b8,0x30baf8ad,0x2f06f831,0x20bcf8ad,
+0xf7f1220a,0xe00cf885,0x0001b39a,0x0001b4f4,0x0001b628,0x0001b4f0,
+0x0001b3a8,0x42a23201,0x4638d1da,0xf7fda92e,0x2240fd59,0x46384613,
+0x61daf240,0xfabaf7fd,0x46382118,0xfe9af7fd,0x413cf240,0xf7fd4638,
+0xf240fa8f,0x9008110b,0xf7fd4638,0x214cfa43,0x46389009,0xfa3ef7fd,
+0x41f3f240,0x4638900a,0xfa7ef7fd,0x22382300,0xf240900b,0x4638413c,
+0xfa98f7fd,0x22fe214c,0xf7fd4638,0x214cfa35,0x46382202,0xfa42f7fd,
+0x5280f44f,0xf2404638,0xf7fd41f3,0xf240fa7d,0x4638413e,0xfa60f7fd,
+0xf24023af,0x900532ff,0x413ef240,0xf7fd4638,0xf240fa79,0x46381121,
+0xfa0cf7fd,0x900422f2,0x1121f240,0xf7fd4638,0x227ffa0f,0xf2404638,
+0xf7fd111f,0xf240fa09,0x46386176,0xfa40f7fd,0x22802300,0xf2409006,
+0x46386176,0xfa5af7fd,0x5103f240,0xf7fd4638,0x2208fa33,0x90074613,
+0x5103f240,0xf7fd4638,0x4638fa4d,0x5103f240,0x23002204,0xfa46f7fd,
+0xae194b3f,0x23009319,0x931c2514,0x4456f240,0x46314638,0x4255f240,
+0x4357f240,0x9400951a,0xfa88f7fd,0x46384b37,0x23209319,0x4631931c,
+0x4357f240,0x4255f240,0x9400951a,0xfa7af7fd,0xf2404638,0xf6404153,
+0xf7fd22a9,0xf8d7fa05,0xb9333de8,0xf6404638,0x225861a6,0xf7fe3301,
+0xea4ffea5,0xf10d024a,0xeb08037a,0xeb030602,0x46d00902,0xf04fe0a8,
+0xf8ad0300,0x883330c0,0xf3c3a932,0xeb012403,0xf8330344,0xf8b91c2a,
+0xb1212000,0x03fff002,0x2301ea43,0x4638b29a,0x4152f240,0xf9d8f7fd,
+0xfa1f1ee3,0xf1bafa83,0xd81d0f01,0x03c2f10d,0x23019319,0xad19931a,
+0x931c3344,0x4456f240,0x46294638,0x4255f240,0x4357f240,0xf7fd9400,
+0xab30fa63,0x46389319,0xf2404629,0xf2404255,0x94004357,0xfa22f7fd,
+0xf2404638,0x88324151,0xf9aef7fd,0xe00b2400,0x0001b1d0,0x0001b3f8,
+0xf7f32064,0x3401fe0f,0x3389f241,0xd007429c,0xf2404638,0xf7fd4151,
+0xf410f993,0xd1ef4f40,0xf2404638,0xf7fd4151,0xf410f98b,0xd17e4f40,
+0xab0e220b,0x9319ad19,0xf240921a,0x46384456,0xf2404629,0xf2404255,
+0xf04f4357,0xf8cd0b60,0x9400b070,0xfa20f7fd,0x931c2340,0x46294638,
+0x4255f240,0x4357f240,0xf7fd9400,0xf1baf9df,0xd80f0f01,0x03c2f10d,
+0x23019319,0x3344931a,0x4638931c,0xf2404629,0xf2404255,0x94004357,
+0xf9ccf7fd,0x6376f507,0x9319330c,0x931a230b,0x46294638,0x4255f240,
+0x4357f240,0xb070f8cd,0xf7fd9400,0xf108f9f1,0x36020801,0x0902f109,
+0x4588990d,0xaf53f4ff,0xae19230b,0xf507931a,0x33556476,0x4556f240,
+0x931c340c,0x46314638,0x4255f240,0x4357f240,0x95009419,0xf9d4f7fd,
+0x931a2304,0x931c334c,0x46314638,0x4255f240,0x4357f240,0x95009419,
+0xf990f7fd,0x6376f507,0x93193316,0x931a2302,0x931c3353,0x46314638,
+0x4255f240,0x4357f240,0xf7fd9500,0x9a02f97f,0x4638b912,0xfd28f7fe,
+0x46382300,0x5103f240,0xf7fd2208,0x4638f91f,0x111ff240,0xf7fd2280,
+0x4638f8cd,0x413ef240,0xf7fd9a05,0x9b04f8f9,0xb2da4638,0x1121f240,
+0xf896f7fd,0xf2404638,0x9a066176,0xf8ecf7fd,0xf2404638,0x9a075103,
+0xf8e6f7fd,0xf2404638,0x9a08413c,0xf8e0f7fd,0xf2404638,0x9a09110b,
+0xf87ef7fd,0x214c4638,0xf7fd9a0a,0x9a0bf879,0xf2404638,0xf7fd41f3,
+0x4638f8cf,0xf7fd2140,0x4638fcc9,0x413bf240,0x72fbf64f,0xf8caf7fd,
+0x61daf240,0x22404638,0xf7fd2300,0x990cf8d7,0x4638b119,0xf7fda92a,
+0x9a03fb69,0xf4024638,0xf7ff4160,0xb033fc07,0x8ff0e8bd,0x4ff0e92d,
+0x46072380,0x22e0b097,0x6182f44f,0xf8bef7fd,0x6c7b2400,0x4f83f887,
+0x370cf8d3,0x4df0f887,0x3decf8c7,0x302cf897,0x3f83f887,0xf8d36cbb,
+0xf0833120,0xf0130301,0x93030301,0x6bf8d102,0xf8e6f7f7,0x46382280,
+0x6131f240,0xf7fd4623,0xf44ff89d,0x46235280,0x61daf240,0xf7fd4638,
+0x4638f895,0xfb94f7fd,0x41a4f240,0xf7fd4638,0x4621f86b,0x46389004,
+0xfbc4f7ff,0xf7fd4638,0x4683fba5,0xf7fd4638,0x2110fb11,0x46389005,
+0xfbb8f7fd,0xf7f66bf8,0x2801faed,0xf04fd10a,0xf8ad03ff,0xf04f3040,
+0xf8ad033c,0xf04f3042,0xe00903ff,0x0307f04f,0x3040f8ad,0x033cf04f,
+0x3042f8ad,0x03f8f04f,0xf8ad2200,0xac104046,0x3044f8ad,0x46134638,
+0xf7ff4621,0xf10dfc91,0x93000352,0xf10d4638,0xf10d0355,0xf10d0157,
+0xf7fd0256,0xf99dfb9b,0x2b003055,0x425bbfb8,0xd11c2b0f,0x3052f99d,
+0xbfb82b00,0x2b0f425b,0xf04fd115,0xf8ad0307,0xf04f3040,0xf8ad032d,
+0xf04f3042,0xf8ad03ba,0x22003044,0x0300f04f,0x3046f8ad,0x46214638,
+0xf7ff4613,0xab12fc61,0x23029306,0x0818f10d,0x334e9307,0xf2402410,
+0x46414656,0x93092500,0xf2404638,0xf2404255,0x940a4357,0x95089600,
+0xf89af7fd,0x0352f10d,0x23559306,0x9309940a,0x46412401,0x4357f240,
+0xf2404638,0x96004255,0xa048f8bd,0x904af8bd,0x94079508,0xf884f7fd,
+0x930d2307,0x930f3319,0x8052f8bd,0x940cab13,0xf44f930b,0xad0b76a0,
+0x4456f240,0x46294638,0x4255f240,0x4357f240,0x9400960e,0xf86cf7fd,
+0xea4f9b13,0x0d1b5289,0x0d92051b,0xea4f431a,0x0d9b538a,0x2283ea42,
+0x46389213,0xf2404629,0xf2404255,0x94004357,0xf820f7fd,0x0380f106,
+0x4638930e,0xf2404629,0xf2404255,0x36014357,0x804cf8cd,0xf7fd9400,
+0xf5b6f811,0xd1ca7fe0,0x46594638,0xfa9ef7fd,0x99054638,0xfaeef7fd,
+0x46389b04,0x4160f403,0xfae8f7ff,0x22002101,0xf7fd4638,0x6bf8fb75,
+0xfa18f7f6,0x46042802,0x2208d164,0x46134638,0x414cf240,0xff9af7fc,
+0x46382208,0xf2404613,0xf7fc414d,0x4638ff93,0x46234622,0x41f9f240,
+0xff8cf7fc,0x46224638,0xf2402300,0xf7fc41fa,0x2201ff85,0x46134638,
+0x41f9f240,0xff7ef7fc,0x22014638,0xf2402300,0xf7fc41fa,0x4638ff77,
+0xf2402300,0xf44f41b1,0xf7fc5200,0xf44fff6f,0x46386200,0xf44f4613,
+0xf7fc6196,0x4638ff67,0x41b7f240,0x42fef44f,0x5300f44f,0xff5ef7fc,
+0x46382208,0xf44f4613,0xf7fc6196,0x4638ff57,0x23002280,0x41e6f240,
+0xff50f7fc,0x46132240,0xf2404638,0xf7fc41e5,0x4638ff49,0xf44f228c,
+0xf7fc7192,0x4638fecd,0x1125f240,0xf7fc2200,0xe00dfec7,0x46132220,
+0xf2404638,0xf7fc414c,0x2220ff35,0xf2404638,0x4613414d,0xff2ef7fc,
+0x41a4f240,0xf7fc4638,0x2100ff07,0x46384605,0xfa60f7ff,0xf2404638,
+0xf7fc413b,0xf3c0fefd,0xb11c1480,0xa9104638,0xfaaef7fd,0x4638217f,
+0xfaa2f7ff,0x497e4638,0xfc8af7fe,0x46132201,0xf2404638,0xf7fc413b,
+0x2201ff09,0x46382300,0x413cf240,0xff02f7fc,0x6200f44f,0x46384613,
+0x414cf240,0xfefaf7fc,0x5200f44f,0xf2404613,0x4638414d,0xfef2f7fc,
+0xf7fd4638,0x227ffc8f,0x46382300,0x619df44f,0xfee8f7fc,0x46382300,
+0x619df44f,0x42fef44f,0xfee0f7fc,0x2305227f,0xf2404638,0xf7fc41e9,
+0x4638fed9,0x41e9f240,0x42fef44f,0x63a0f44f,0xfed0f7fc,0x46132208,
+0xf2404638,0xf7fc41e7,0x2210fec9,0x46384613,0x41e7f240,0xfec2f7fc,
+0x23002260,0xf2404638,0xf7fc41e7,0x2204febb,0x46382300,0x41e7f240,
+0xfeb4f7fc,0x46132202,0xf2404638,0xf7fc41e7,0x4638fead,0x61daf240,
+0xf7fc2210,0x2220fe9d,0x46384613,0x6189f44f,0xfea0f7fc,0x4180f44f,
+0xf7fd4638,0x4638fff7,0xfc38f7fd,0xf7fd4638,0x4638fab1,0x414cf240,
+0x23002208,0xfe8ef7fc,0xf2404638,0x2220414c,0xf7fc2300,0x4638fe87,
+0x41f9f240,0x23002202,0xfe80f7fc,0xf2404638,0x220141f9,0xf7fc2300,
+0xb124fe79,0xa9104638,0xf90cf7fd,0x4638e003,0xf7fd4621,0x4638f8dd,
+0x4160f405,0xf9a6f7ff,0x21004638,0xfb90f7fe,0xf44f4638,0xf44f6196,
+0x23006200,0xfe5ef7fc,0xf44f4638,0x22086196,0xf7fc2300,0x4638fe57,
+0x41e5f240,0x23002240,0xfe50f7fc,0xf44f4638,0x22106196,0xf7fc2300,
+0x4638fe49,0x413bf240,0x23002201,0xfe42f7fc,0xf2404638,0xf44f414c,
+0x23006200,0xfe3af7fc,0x46132280,0xf2404638,0xf7fc6131,0xf44ffe33,
+0x46135280,0xf2404638,0xf7fc61da,0x9b03fe2b,0x6bf8b913,0xfd94f7f6,
+0xf7f66bf8,0xf44ff897,0x28026182,0x2320bf14,0x22e02360,0xf7fc4638,
+0xb017fe19,0x8ff0e8bd,0x001007f0,0x29016943,0x7519b507,0x2303d906,
+0x22019300,0x21006bc0,0xe0054613,0x93002303,0x6bc02100,0x460b2201,
+0xfbd0f7f6,0x46c0bd0e,0xf647b570,0x4604757f,0x462a2158,0xf7f66bc0,
+0x6be0fb61,0x462a215a,0xfb5cf7f6,0x21706be0,0xf7f6462a,0x6be0fb57,
+0x462a2172,0xfb52f7f6,0x46c0bd70,0x6bc5b5f7,0xf8d54604,0x7a1b3844,
+0xd05d2b00,0x3033f890,0xd0412b00,0x21284628,0xf7f6223f,0x4628fb3f,
+0x22102124,0xfb3af7f6,0x21c8f894,0x21264628,0xf7f60112,0x4628fb33,
+0xf8b42132,0xf7f62250,0x4626fb2d,0x4b212700,0x18fb4628,0x37017919,
+0x017ff001,0xfb0af7f6,0x216df996,0x1da14604,0xb2924628,0xfb1af7f6,
+0x216df996,0xfb922302,0x4252f2f3,0xf1044628,0xb292010e,0xfb0ef7f6,
+0x2f083601,0x2303d1df,0x93002280,0x21014628,0xf7f64613,0xe017fb67,
+0x20044601,0x316df991,0x33072208,0xf3f2fb93,0x300100db,0x316df881,
+0x280c3101,0xf994d1f2,0x4628216d,0x214e3207,0x02cff3c2,0xfaeaf7f6,
+0x46c0bdfe,0x0001b9e4,0x4ff0e92d,0x3ffff1b1,0x4605b093,0x92029103,
+0x8d81d119,0x7340f401,0x7f40f5b3,0xfa5fd102,0xe012f881,0x7f00f5b3,
+0xd104b2c9,0xd80429dd,0x0802f101,0x2902e009,0xf04fd802,0xe0040800,
+0x0802f1a1,0xf8dde001,0xf995800c,0xf8953fca,0x2b00affa,0xf1aabfb8,
+0x22000a03,0x46ab23ff,0x920446a9,0x46149305,0x613cf899,0x0719f10d,
+0xf89555e6,0x2b00324c,0x4641d14e,0x0246f10d,0x0347f10d,0x94004628,
+0xfbe4f7fd,0x21c9f999,0x3047f89d,0xbfa84293,0xb2d94613,0xbf3442b1,
+0x4633460b,0x55e32b27,0x3b04d801,0xf1bae00a,0xdc090f28,0xb2da3b14,
+0xf99555e2,0x2b413fca,0x1f13dd1c,0xe01955e3,0x0f33f1ba,0x2fcaf895,
+0xb252dc0a,0xdc032a27,0x2a003b04,0xe00755e3,0x302cf89d,0xe0073b05,
+0x2b27b253,0x2b41dd01,0xf89ddd04,0x3b02302c,0x302cf88d,0xf88d6c6b,
+0xf10d1047,0xf8930119,0x5c6326fe,0xf302fb03,0xfb932264,0x5463f3f2,
+0x0319f10d,0x9a045ce3,0x429a3401,0x461abf38,0x9a059204,0x0901f109,
+0xbf28429a,0x2c0c461a,0xd1959205,0xf1b39b03,0xd0033fff,0x9a029b04,
+0xe0427013,0x70b4f505,0x222d2100,0xf7f03001,0x9a04fa5f,0xf8859b05,
+0xf8852031,0x210031c8,0x0319f10d,0xf8955cca,0xf88b3033,0xb91b2196,
+0x3031f895,0xe0031a9b,0x31c8f895,0x0302ebc3,0x290c3101,0x3169f88b,
+0x0b01f10b,0x4628d1e8,0x6193f501,0xfc88f7fc,0x4f60f410,0x4628d012,
+0x41a4f240,0xfc80f7fc,0x46042100,0xf7fe4628,0x4628ffd9,0xfda8f7fe,
+0xf4044628,0xf7fe4160,0xe002ffd1,0xf7ff4628,0xb013fead,0x8ff0e8bd,
+0xb570297f,0xd9014604,0xe0192005,0x18232000,0x282d3001,0x113cf883,
+0x6c63d1f9,0x224cf884,0xb1637c5b,0xf0046be0,0x4605fd51,0x4620b938,
+0x31fff04f,0xf7ff462a,0x4628fef7,0x2000e000,0x46c0bd70,0x6c43b570,
+0x4606b088,0x6898b2cc,0x71fff640,0x7272f44f,0xf9b4f7ef,0x031ff10d,
+0x23019302,0x33139303,0x23089304,0x6c739306,0x6a5b689b,0x639ef5a3,
+0x2b013b0d,0x4630d869,0x61aaf44f,0x72a5f44f,0xfc2ef7fc,0xd8052c04,
+0xf2404630,0x22ff4134,0xe00823fd,0xb2db1f63,0xd8072b03,0xf2404630,
+0x22ff4134,0xf7fc23fe,0xe012fc35,0x0309f1a4,0x2b05b2db,0x22ffd80d,
+0xf2404630,0x46134134,0xfc28f7fc,0xf44f4630,0xf44f61aa,0xf7fc72af,
+0x2302fc07,0xf88d2c07,0xd117301f,0xad023337,0xf2409305,0x46304456,
+0xf2404629,0xf2404255,0x94004357,0xfc62f7fc,0x9305233a,0x46294630,
+0x4255f240,0x4357f240,0xe0d99400,0xd1172c0b,0xad022306,0xf2409305,
+0x46304456,0xf2404629,0xf2404255,0x94004357,0xfc48f7fc,0x93052307,
+0x46294630,0x4255f240,0x638af503,0xe0bf9400,0xf0402c0d,0x231980bf,
+0x4630e08e,0x61aaf44f,0x72aff44f,0xfbc4f7fc,0xd1222c01,0x93052317,
+0x4356f240,0x93003404,0xa9024630,0x4255f240,0xf88d3301,0xf7fc401f,
+0x4630fc21,0x412ff240,0x46232207,0xfbc6f7fc,0xf2404630,0x22ff4134,
+0xf7fc23fd,0x4630fbbf,0x4116f240,0x23a322ff,0x2c02e041,0x2505d114,
+0x4356f240,0x93001964,0xa9024630,0x4255f240,0xf88d3301,0x9405501f,
+0xfbfcf7fc,0xf2404630,0x4622412f,0xe01c462b,0xd1042c03,0x23373402,
+0x401ff88d,0x2c04e005,0x3401d13c,0x401ff88d,0x93052327,0x4356f240,
+0x46309300,0xf240a902,0x33014255,0xfbdef7fc,0xf2404630,0x2207412f,
+0xf7fc4623,0x4630fb83,0x4134f240,0x23fd22ff,0xfb7cf7fc,0xf2404630,
+0x22ff4116,0xf7fc23a2,0x4630fb75,0xf2402300,0xf44f5152,0xf7fc4278,
+0x4630fb6d,0x5153f240,0x42c0f44f,0x4380f44f,0xfb64f7fc,0xf2404630,
+0x22ff4117,0xf7fc2378,0xe033fb5d,0xd1312c0d,0xf88d2302,0x3317301f,
+0xf240ad02,0x93054456,0x46294630,0x4255f240,0x4357f240,0xf7fc9400,
+0x231afb9d,0x46309305,0xf2404629,0xf2404255,0x94004357,0xfb92f7fc,
+0x93052326,0x46294630,0x4255f240,0x4357f240,0xf7fc9400,0x2327fb87,
+0x94009305,0x46294630,0x4255f240,0x6386f503,0xfb7cf7fc,0xbd70b008,
+0x4f70e92d,0x46054b47,0x0003e893,0xb08a4b46,0x23149303,0x23089305,
+0x9307ac08,0x080cf10d,0xf2402300,0xf2404955,0xe8844a57,0xf04f0003,
+0x93060b40,0x4656f240,0x46414628,0x4653464a,0xb010f8cd,0xf7fc9600,
+0x6c6bfb55,0x71fff640,0xf44f6898,0xf7ef627e,0x4628f84d,0x23032207,
+0x412ff240,0xfaf2f7fc,0x462822ff,0xf2404613,0xf7fc4134,0x4628faeb,
+0x23a422ff,0x4116f240,0xfae4f7fc,0xf2404628,0xf44f5152,0xf44f4278,
+0xf7fc43b0,0x4628fadb,0x5153f240,0x42c0f44f,0x5300f44f,0xfad2f7fc,
+0x46282364,0xf24022ff,0xf7fc4117,0x4628facb,0x41dff240,0x42f1f24f,
+0xfaaaf7fc,0xf2404628,0xf44f4124,0xf44f427f,0xf7fc53e8,0x4628fabb,
+0x230622ff,0x4125f240,0xfab4f7fc,0x93042302,0x9305330f,0x9403330f,
+0x46289307,0x464a4641,0xf2404653,0xf8cd444a,0x9600b018,0xfaf6f7fc,
+0x46214628,0xf7fc2244,0x4628fa93,0x22804621,0xfa7ef7fc,0xe8bdb00a,
+0x46c08f70,0x0001b500,0x00019d8c,0x4ff0e92d,0xb089b2ca,0x92014607,
+0xf7fd9100,0x4638f905,0xff5ef7ff,0x461a2300,0xf8dd49b3,0x58508004,
+0x90074540,0x3301d004,0x2b0e321c,0xe21fd1f4,0xfb03241c,0x46381404,
+0x7a2221a2,0xf9f8f7fc,0x463821a4,0xf7fc7a62,0x21a6f9f3,0x7aa24638,
+0xf9eef7fc,0x463821a1,0xf7fc7ae2,0x21b4f9e9,0x7b224638,0xf9e4f7fc,
+0x463821b6,0xf7fc7b62,0x21d0f9df,0x7ba24638,0xf9daf7fc,0x463821d3,
+0xf7fc7be2,0x21d6f9d5,0x7c224638,0xf9d0f7fc,0x463821d9,0xf7fc7c62,
+0x21dff9cb,0x7ca24638,0xf9c6f7fc,0xf44f4638,0x7d227180,0xf9c0f7fc,
+0xf2404638,0x7d621103,0xf9baf7fc,0x46387da2,0x1115f240,0xf9b4f7fc,
+0x4638210f,0xf9bef7fc,0x021ef040,0x210f9004,0xb2924638,0xf9a8f7fc,
+0xf8d74b82,0x68605df4,0xbf8c429d,0x0b02f04f,0x0b01f04f,0x13b4f640,
+0xd9014298,0xe0000040,0x4e7b0080,0x46312210,0xf8d79002,0xf7fd0df4,
+0x4631f85b,0x46282210,0xf856f7fd,0xf106fb0b,0x90032210,0xf7fd4628,
+0x2403f84f,0x22104621,0x98029006,0xf848f7fd,0xf904fb05,0x217940a5,
+0x90052202,0xf7fc4638,0x4b6af973,0xfb0b217c,0xfbb5f303,0x3301f3f3,
+0x3b01085b,0xfa83fa5f,0x46382207,0x039aea4f,0xf99ef7fc,0x0801f10a,
+0x2260217d,0xea4f4638,0xf7fc134a,0xfb0bf995,0x4c5df308,0xf5f3fbb5,
+0xfbb4192c,0x3c01f4f6,0x217bb2e4,0x46384622,0xf94af7fc,0x98059a06,
+0x46290115,0xf7fd2210,0x3401f80f,0xf604fb08,0xf006fb00,0xdb0b2800,
+0x46299805,0xf7fd2210,0xfb00f803,0x13c0f006,0x10403001,0xe00e1e44,
+0x46299805,0xf7fc2210,0xea6ffff7,0xfb03030a,0xfb00f304,0x13c0f003,
+0xea6f3001,0xf3c40460,0x46382307,0x220f217d,0xf956f7fc,0xb2e24638,
+0xf7fc217e,0x9b02f915,0x4224f24f,0xf202fb03,0xf3f9fbb2,0xfb09011d,
+0x01182313,0x3501e002,0x0000ebc9,0xd2fa4548,0x22144649,0xffccf7fc,
+0x1307f3c5,0x21704604,0x221f4638,0xf934f7fc,0x4638012b,0xf44f2171,
+0xf00372f8,0xf7fc03f0,0xf3c4f92b,0x46384307,0x220f2171,0xf924f7fc,
+0x2207f3c4,0x21724638,0xf8e2f7fc,0x4638b2e2,0xf7fc2173,0x4638f8dd,
+0x22b9216c,0xf8d8f7fc,0x216d4638,0xf7fc2288,0x4638f8d3,0x2228216e,
+0xf8cef7fc,0x216f4638,0xf7fc2263,0x9805f8c9,0xf1002229,0xf5034374,
+0xfb030390,0x4813f302,0x6296f44f,0xf3f2fb93,0xf000fb05,0x6294f5a2,
+0x1103f242,0x14d8f503,0xff7ef7fc,0x1e531902,0xf3f4fb93,0xbfd42b3c,
+0x25012500,0x0063b185,0xf3f3fb92,0x46c0e010,0x0001bdf4,0x018cba80,
+0x000f4240,0x004c4b40,0x000f423f,0x000203a0,0x0364eb00,0xf3f4fb93,
+0xb2dc3b08,0x223f2168,0x46384623,0xf8c8f7fc,0x216801ab,0x46382240,
+0xf8c2f7fc,0x20649a03,0xf000fb02,0x22109905,0xff4af7fc,0xfb031c6b,
+0xf104f300,0xfb010108,0xf5b1f103,0xbfd40f16,0x24012400,0x22061c63,
+0xf302fb03,0xf0f3fb91,0x3f00f5b0,0x2300d501,0xf5a0e005,0x13db33c0,
+0xf3c33301,0x21690347,0x4638221f,0xf898f7fc,0x22202169,0x46380163,
+0xf892f7fc,0x46132204,0x46382181,0xf88cf7fc,0x2df4f8d7,0x429a4b52,
+0x4638d905,0x22022181,0xf870f7fc,0x4638e004,0x22fd2181,0xf858f7fc,
+0x22fe2181,0xf7fc4638,0x9b03f853,0x1f34f5b3,0x4638dd05,0x22022175,
+0xf85cf7fc,0x4638e004,0x22fd2175,0xf844f7fc,0x211b2203,0x46384613,
+0xf862f7fc,0xf7f22001,0x211bfce9,0x23002203,0xf7fc4638,0x2300f859,
+0x211a2240,0xf7fc4638,0x2164f853,0xf7fc4638,0xf000f821,0x216404f8,
+0x46384622,0xf80cf7fc,0xf7f22001,0x2164fccf,0x0204f044,0xf7fc4638,
+0x2001f803,0xfcc6f7f2,0xf0442164,0x46380206,0xfffaf7fb,0xf7f22001,
+0x2164fcbd,0x0207f044,0xf7fb4638,0xf44ffff1,0xf7f27096,0x2240fcb3,
+0x46384613,0xf7fc211a,0x4638f823,0x9a04210f,0xffe2f7fb,0x801cf8dd,
+0x707af44f,0xfca2f7f2,0xf7fc4638,0x9a00f9b7,0xf4029801,0xf5b34370,
+0x9b015f80,0x4c15b286,0xf446bf08,0x1e5d7680,0x2025f834,0xf24085f8,
+0x46386157,0x0485eb04,0xf81ef7fc,0xf44f4638,0x886261cb,0xf818f7fc,
+0x6bf84632,0xf7f521a0,0x6cbafd99,0xf388fa1f,0x33f0f8a2,0xf8872301,
+0x22003df0,0x033df241,0xb00954fa,0x8ff0e8bd,0x018cba80,0x0001b324,
+0xe92d6c83,0xf8d347f0,0xb0863120,0x0301f083,0x0a01f013,0xd1024607,
+0xf7f66bc0,0xf240f84d,0x463861da,0xffe4f7fb,0x46132240,0xf2404681,
+0x463861da,0xfffef7fb,0x413ef240,0xf7fb4638,0xf240ffd7,0x46065103,
+0xf7fb4638,0x2204ffd1,0x46804613,0x5103f240,0xf7fb4638,0x2300ffeb,
+0xf2404638,0xf44f413e,0xf7fb5200,0x220fffe3,0x46382300,0x413ef240,
+0xffdcf7fb,0x23b022f0,0xf2404638,0xf7fb413e,0xf44fffd5,0xf44f52e0,
+0x463853a0,0x413ef240,0xffccf7fb,0x4638210d,0xff60f7fb,0x413cf240,
+0x46384604,0xffa0f7fb,0x23282238,0xf2404605,0x4638413c,0xffbaf7fb,
+0x7200f44f,0x46384613,0x5103f240,0xffb2f7fb,0x46382300,0x5103f240,
+0x7200f44f,0xffaaf7fb,0x46132280,0xf44f4638,0xf7fb7191,0x2240ff69,
+0x46382300,0x7191f44f,0xff62f7fb,0x46382300,0x7191f44f,0xf7fb2220,
+0x220fff5b,0x0302ea04,0xf44f4638,0xf7fb7191,0x4638ff53,0x7191f44f,
+0x23002210,0xff4cf7fb,0x9300ab04,0x71c8f44f,0xab052200,0xf7fc4638,
+0xf44fffbf,0x46137200,0xf2404638,0xf7fb5103,0x4638ff75,0x5103f240,
+0x7200f44f,0xf7fb2300,0x2210ff6d,0x46384613,0x7191f44f,0xff2cf7fb,
+0x9300ab02,0x71c8f44f,0xab032200,0xf7fc4638,0x9b05ff9f,0x46389c03,
+0x413ef240,0x18e44632,0xff3af7fb,0xea082204,0x46380302,0x5103f240,
+0xff4cf7fb,0xea052238,0x46380302,0x413cf240,0xff44f7fb,0x46132240,
+0x46381064,0x7191f44f,0xff02f7fb,0xf640b220,0xf7f4213d,0x1240fc41,
+0x40c0f500,0x5155f244,0xf7f430cb,0x3080fc3d,0xf2401204,0x463861da,
+0xf7fb464a,0xf1baff0d,0xd1020f00,0xf7f56bf8,0x4620fe8f,0x4fcaf887,
+0xe8bdb006,0x46c087f0,0x4ff0e92d,0xb08b6c43,0xaa064605,0xf2406898,
+0xa9076ada,0xfc3cf7ee,0x46284651,0xfee8f7fb,0xf2402240,0x4613443e,
+0x46519005,0xf7fb4628,0x4621ff01,0xf7fb4628,0xf240fedb,0x90045903,
+0x46284649,0xfed4f7fb,0x90032204,0x46284649,0xf7fb4613,0x4628feef,
+0x23004621,0x5200f44f,0xfee8f7fb,0x46214628,0x230d220f,0xfee2f7fb,
+0x46214628,0x238022f0,0xfedcf7fb,0x483cf240,0x46214628,0x52e0f44f,
+0x5380f44f,0xfed2f7fb,0x46284641,0xfeacf7fb,0x1621f240,0x23202238,
+0x46414607,0xf7fb4628,0x4631fec5,0xf7fb4628,0x4631fe59,0x220f4683,
+0x23044628,0xfe80f7fb,0x7200f44f,0x46494628,0xf7fb4613,0x4628feb3,
+0x23004649,0x7200f44f,0xfeacf7fb,0x9300ab08,0xab092128,0x46282200,
+0xfee6f7fc,0x46214628,0xf7fb9a04,0x9c03fe85,0xea042204,0x46280302,
+0xf7fb4649,0x2238fe97,0x0302ea07,0x46414628,0xfe90f7fb,0x46314628,
+0xf7fb465a,0x9a05fe15,0x46514628,0xfe6cf7fb,0x0024f9bd,0x6166f246,
+0xfb8af7f4,0x61f4f247,0xfb8af7f4,0xf6476c6b,0xeb0464b1,0x990724a0,
+0x9a066898,0xfb84f7ee,0xb00b1260,0x8ff0e8bd,0x4ff0e92d,0x9108b0b9,
+0x1108f89d,0x46144607,0xf89d9107,0xf7fcb10c,0x2101f981,0x46389009,
+0xf9aef7fd,0x21014638,0xfcd2f7fd,0x41eaf240,0xf7fb4638,0xf240fe31,
+0x901141eb,0xf7fb4638,0x2155fe2b,0x46389012,0xfde0f7fb,0x719cf44f,
+0x46389013,0xfddaf7fb,0x90142105,0xf7fc4638,0xb15cfa61,0xb12b7a23,
+0xf9944638,0xf7fe1009,0xe003f9c3,0x46214638,0xf8c8f7fc,0x4638214c,
+0xfdc4f7fb,0x900c21f3,0xf7fb4638,0x6c7bfdbf,0x689b900d,0xf5a36a5b,
+0x3b0d639e,0xd8092b01,0x21f34638,0x23102218,0xfddef7fb,0x21f34638,
+0xe0022202,0x21f34638,0x46132218,0xfdd4f7fb,0xf7f56bf8,0x2802f87f,
+0x4638d104,0x2230214c,0xe0032320,0x214c4638,0x23102230,0xfdc4f7fb,
+0x46382100,0xfa30f7fc,0x6131f240,0xf7fb4638,0x2215fdd3,0x900a4613,
+0x6131f240,0xf7fb4638,0xf240fded,0x463861d6,0xfdc6f7fb,0x22032300,
+0xf240900b,0x463861d6,0xfde0f7fb,0x61daf240,0xf7fb4638,0x228ffdb9,
+0xf2409010,0x463861da,0xfdcaf7fb,0xf04f2607,0xab360801,0x80c4f8cd,
+0x96329330,0x3009f994,0x0920f04f,0x7310f503,0xf2409333,0xf2404a56,
+0x46384357,0xf240a930,0xf8cd4255,0xf8cd90d0,0xf7fba000,0x9a36fe41,
+0x00d24638,0xf2409236,0xb2926171,0xfd94f7fb,0x46382103,0xfd42f7fb,
+0x900e2121,0xf7fb4638,0x2103fd3d,0x900f2218,0xf7fb4638,0x2121fd29,
+0x4638221e,0xfd24f7fb,0xac1b4ba2,0xcd0f461d,0xe895c40f,0xe884000f,
+0x2221000f,0xf2404638,0xf7fb6189,0x2303fd71,0x4638221f,0x617af240,
+0xfd84f7fb,0xf2404638,0xf2416173,0xf7fb7270,0x22c8fd63,0xf2404638,
+0xf7fb6179,0x4638fd5d,0x6174f240,0x4244f240,0xfd56f7fb,0x4638223f,
+0x6175f240,0xfd50f7fb,0xf44f4638,0xf24061ce,0xf7fb6281,0x4638fd49,
+0x6182f240,0x42d8f640,0xfd42f7fb,0xf2404638,0xf24c619b,0xf7fb125c,
+0x221bfd3b,0xf2404638,0xf7fb619c,0x2249fd35,0xf2404638,0xf7fb618c,
+0x2227fd2f,0xf2404638,0xf7fb617f,0x22fffd29,0xf44f4638,0xf7fb61d0,
+0x4638fd23,0x6181f240,0x123ff240,0xfd1cf7fb,0x463822ff,0x6183f240,
+0xfd16f7fb,0x46384642,0x618df240,0xfd10f7fb,0xf2404638,0xf240619d,
+0xf7fb72ff,0x2200fd09,0xf2404638,0xf7fb618a,0x2200fd03,0xf2404638,
+0xf7fb619f,0x4638fcfd,0x61d4f44f,0xf7fb4632,0x2200fcf7,0xf2404638,
+0xf7fb61a4,0x2200fcf1,0xf2404638,0xf7fb61a5,0x2208fceb,0xf2404638,
+0xf7fb619a,0x4638fce5,0x6187f240,0xf7fb2260,0x4638fcdf,0x6142f240,
+0xf7fb4632,0x4638fcd9,0x6177f240,0xf7fb2200,0x2315fcd3,0xab1b932d,
+0x932b2400,0xf2404638,0xa92b4357,0x4255f240,0xf8cd2508,0x952c90bc,
+0xf8cd942e,0xf7fba000,0x4638fd2d,0x617df240,0xf7fb4622,0x4638fcb9,
+0x618bf240,0x7280f44f,0xfcb2f7fb,0x0904f04f,0x240046a0,0xbfa82d0f,
+0x4638250f,0x4622b2a9,0x94004623,0x94029401,0xf7fd9403,0x4626fb07,
+0x1c73e003,0x2e05b2de,0x4638d01f,0xfd98f7ff,0x63aff44f,0xf44f9301,
+0x21004382,0xf5a39302,0x22014381,0x91034604,0x91059304,0x46383316,
+0x92009908,0xff22f7fc,0xf7ff4638,0xf897fd81,0x429c3ff9,0x4298dbdd,
+0x9a08dbdb,0xf240bb1a,0x463861ba,0xfc6cf7fb,0x61bbf240,0x4638b204,
+0xfc66f7fb,0xb2a401a4,0x1489f344,0xf404fb04,0x0009f340,0x4300fb00,
+0x5f00f5b3,0xfa5fda07,0x2b04f388,0x0505ebc9,0x3d01d105,0xf5b3e003,
+0xdb084f80,0xf108444d,0xf1b80801,0xd0020f05,0x0959ea4f,0x2400e79d,
+0x71e5ea25,0x1fa0f8c7,0xb2894638,0x46234622,0x94019400,0x94039402,
+0xfaa4f7fd,0xf7fc4638,0xe003feaf,0x0001b368,0xd82c2c04,0xf7ff4638,
+0x2301fd33,0xf44f9300,0x930163af,0x4382f44f,0xf5a39302,0x22004381,
+0x93044606,0x23464638,0x92039908,0xf7fc9205,0x4638febd,0xfd1cf7ff,
+0x3ff9f897,0x429e4605,0x4298db01,0xf44fda05,0xf7f27096,0x1c63f87b,
+0xf897b2dc,0x429e3ff9,0x429ddbd2,0xf1bbdbd0,0xf0400f01,0xf2408103,
+0x463861ba,0xfbf8f7fb,0x61bbf240,0x46389015,0xfbf2f7fb,0x64aff44f,
+0x21009016,0x4382f44f,0xf303fb04,0xf64f139a,0x429a73fe,0xf64fbf8c,
+0xb29474ff,0xb2991c4b,0xd1ef296e,0xf8ada923,0x4608408c,0x4382f44f,
+0xf303fb04,0xf64f139a,0x429a73fe,0xf64fbf8c,0xb29474ff,0x4f02f821,
+0x031ef100,0xd1ed4299,0xf2404638,0xf7fb61b7,0xf04ffbc3,0x4606097d,
+0x0a01f04f,0x0b00f04f,0x905cf8cd,0xf10be0b5,0xfa5f0301,0xf1bbfb83,
+0xf0000f10,0x260081ee,0x2e04e001,0x4638d82a,0xfcb2f7ff,0x4382f44f,
+0x99162201,0x9b159302,0x92039200,0x46803a01,0x91059304,0x46384613,
+0x94019908,0xfe3ef7fc,0xf7ff4638,0xf897fc9d,0x46053ff9,0xdb014598,
+0xda054298,0x7016f44f,0xfffcf7f1,0xb2de1c73,0x3ff9f897,0xdbd44598,
+0xdbd2429d,0xf2404638,0xf7fb61b7,0xf410fb7d,0x46064f00,0xf1bad02c,
+0xf0000f00,0xf1a981b2,0xb2da0305,0x429a9b17,0x1e53d101,0xf1a2b2da,
+0xb2db036e,0xd9032b0f,0x64aff44f,0xe0142000,0xeb01a938,0xf5a30342,
+0x881c7398,0xf44fe058,0xfb044382,0x1399f303,0x73fef64f,0xbf8c4299,
+0x74fff64f,0x1c43b28c,0x4290b298,0xe047d1ef,0x5f00f5b0,0xf44fd311,
+0xfb044382,0x139af303,0x73fef64f,0xf109429a,0xbf940301,0xf64fb294,
+0xb2da74ff,0x0a00f04f,0x4638e032,0x01dff10d,0x02def10d,0xf82cf7fc,
+0x30dff99d,0x005b2202,0xb2dd3301,0x3b01b26b,0xf3f2fb93,0x033df1c3,
+0xe0def89d,0x2100b2d8,0xf44fe00d,0xfb044382,0x139af303,0x73fef64f,
+0xbf8c429a,0x74fff64f,0x1c4bb294,0x4281b299,0xea4fd1ef,0xf88d034e,
+0xeb0930de,0xf88d0300,0xb2da50df,0x905cf8cd,0xf4164691,0xf43f4f00,
+0xf1baaf46,0xf47f0f00,0xe136af42,0x02def10d,0xf10d4638,0xf7fb01df,
+0x2100ffef,0x7000f44f,0xfa16f7f1,0x46832100,0xf7f12080,0x2300fa11,
+0x24004682,0x400af803,0x2b803301,0xf99dd1f9,0x465b20de,0x10dff99d,
+0xf8cd4638,0xf7fba000,0xf240ffa5,0x463861ba,0xfad2f7fb,0x61bbf240,
+0x46389019,0xfaccf7fb,0x65aff44f,0x46219018,0x4382f44f,0xf303fb05,
+0xf64f139a,0x429a73fe,0xf64fbf8c,0xb29575ff,0xb2991c4b,0xd1ef2946,
+0xf1a29a07,0xe0710346,0x4382f44f,0xf303fb05,0xf64f139a,0x429a73fe,
+0xf64fbf8c,0xb29575ff,0xe0012600,0xd82a2e04,0xf7ff4638,0xf44ffba9,
+0x22014382,0x93029918,0x92009b19,0x3a019203,0x93044680,0x46139105,
+0x99084638,0xf7fc9501,0x4638fd35,0xfb94f7ff,0x3ff9f897,0x45984604,
+0x4298db01,0xf44fda05,0xf7f17016,0x1c73fef3,0xf897b2de,0x45983ff9,
+0x429cdbd4,0x4638dbd2,0x01dff10d,0x02def10d,0xff6ef7fb,0x20def99d,
+0xf99d465b,0x463810df,0xa000f8cd,0xff36f7fb,0x20dff99d,0x30def99d,
+0x32010052,0xf88db2d2,0xb25220df,0x2a00005b,0x30def88d,0x2320dd10,
+0x23189334,0xab369332,0xf2409330,0x92334356,0x46389300,0xf240a930,
+0x33014255,0xfaf4f7fb,0x30dff99d,0xd0062b7f,0x33fff109,0xf983fa1f,
+0x0f00f1b9,0xf44fd188,0x93352300,0x932bab35,0x932d2318,0x22013308,
+0xf240932f,0x922c4356,0x9300922e,0xa92b4638,0x4255f240,0xf7fb3301,
+0x2503fa9d,0x3005f81a,0x2b01ae2b,0xf85bd10c,0x46383025,0xf2409335,
+0x93004356,0xf2404631,0x33014255,0xe014952e,0x932e1eab,0x4456f240,
+0x46314638,0x4255f240,0x4357f240,0xf7fb9400,0x952efab3,0x46389400,
+0xf2404631,0xf2404255,0xf7fb4357,0x1cabfa73,0x2d81b2dd,0x2600d1d2,
+0xad2b1c73,0x4456f240,0x4638932e,0xf2404629,0xf2404255,0x94004357,
+0xfa96f7fb,0x932e1cf3,0x46294638,0x4255f240,0x4357f240,0xf7fb9400,
+0x2300fa8b,0x962e9335,0x46294638,0x4255f240,0x4357f240,0x94003602,
+0xfa48f7fb,0xd1d72e7e,0x46596c7b,0xf44f6c98,0xf7f17200,0x6c7bfacd,
+0x6c984651,0xf7f12280,0x4638fac7,0x9a0e2103,0xf96af7fb,0x21214638,
+0xf7fb9a0f,0x4638f965,0xf2409a11,0xf7fb41ea,0x4638f9bb,0xf2409a12,
+0xf7fb41eb,0x4638f9b5,0x9a132155,0xf954f7fb,0x9a144638,0x719cf44f,
+0xf94ef7fb,0x9a0a4638,0x6131f240,0xf9a4f7fb,0x9a0b4638,0x61d6f240,
+0xf99ef7fb,0x46389b10,0x0201f043,0xf240b292,0xf7fb61da,0x2101f995,
+0xf7fb4638,0x4638fde1,0xfdc4f7fb,0x214c4638,0xf7fb9a0c,0x4638f92d,
+0x9a0d21f3,0xf928f7fb,0xf44f2300,0x46386200,0x414cf240,0xf996f7fb,
+0x21004638,0xf80cf7fd,0x21004638,0xfce0f7fc,0x21004638,0xfeb4f7fc,
+0xf2404638,0x2201413b,0xf7fb2300,0x4638f983,0xf7fb9909,0xb039fc67,
+0x8ff0e8bd,0x41ffe92d,0x460e4605,0x461c4617,0x238022e0,0x6182f44f,
+0xf970f7fb,0xf8d36cab,0xf0833120,0xf0130301,0xd0020801,0xf7f56be8,
+0x68b2f8d3,0x3201b90a,0x6be8e00b,0xb29221dc,0xfec8f7f4,0x6be88972,
+0xf7f421de,0xf240fec3,0x68f31201,0xb1a36be8,0xf7f421d8,0x6872febb,
+0x00d26be8,0x21da3a7c,0xf7f4b292,0x68f3feb3,0x93006be8,0x0111f106,
+0x463b4622,0xfec4f7f6,0xf042e00a,0x21da0408,0xf7f488b2,0x6be8fea3,
+0x462221d8,0xfe9ef7f4,0x21dc6be8,0xfcc8f7f4,0xf8ad2400,0xe00c000e,
+0xf7f12064,0x21dcfd77,0xf7f46be8,0x1c63fcbd,0x2c64b2dc,0x000ef8ad,
+0xf8bdd003,0x2b00300e,0x6be8d1ee,0x220021d8,0xfe80f7f4,0x0f00f1b8,
+0x6be8d002,0xf950f7f5,0xf7f46be8,0xf44ffb7f,0x28026182,0x2320bf14,
+0x22e02360,0xf7fb4628,0xe8bdf901,0x46c081ff,0x4ff0e92d,0xf5ad2280,
+0x46077d01,0xf2402300,0xf7fb6131,0x2300f8f3,0x46382280,0x6176f240,
+0xf8ecf7fb,0xf8d36cbb,0xf0833120,0xf0130301,0x93040301,0x6bf8d102,
+0xf922f7f5,0x463821a5,0x2ffcf8b7,0xf864f7fb,0x4638218e,0x2ffef8b7,
+0xf85ef7fb,0x5380f507,0x881a21a2,0xf7fb4638,0xf241f857,0x21940302,
+0x46385afa,0xf850f7fb,0x0304f241,0x5afa2193,0xf7fb4638,0xf241f849,
+0x21a40306,0x46385afa,0xf842f7fb,0x0308f241,0x21a35afa,0x4638ac10,
+0xf83af7fb,0x46202100,0x7280f44f,0xfe3cf7ee,0x93732307,0x93753319,
+0x2318ae71,0x4556f240,0x93729471,0x46382440,0xf2404631,0xf2404255,
+0xf04f4357,0x94740880,0xf7fb9500,0x4638f8e7,0xf2404631,0xf2404255,
+0x94724357,0xf8cd9500,0xf7fb81d0,0x22fff8db,0x46382338,0x41a7f240,
+0xf880f7fb,0xf2402300,0x46426131,0xf7fb4638,0x4638f879,0xfad0f7fc,
+0x230122ff,0xf44f4638,0xf7fb6195,0x230af86f,0xf88d2501,0x332831f6,
+0x231e9365,0xf2429366,0x24007310,0x9300226c,0xf50d4638,0xa96473fb,
+0x94679564,0x41a0f88d,0xfedcf7ff,0x41abf240,0xf7fb4638,0xf3c0f831,
+0x90052006,0x61daf240,0xf44f4638,0x46235280,0xf848f7fb,0x464322e0,
+0x6182f44f,0xf7fb4638,0x4638f841,0xfb40f7fb,0x41a4f240,0xf7fb4638,
+0x4621f817,0x46389002,0xfb70f7fd,0xf8c79b05,0xb2db4fa4,0x93034638,
+0x31edf88d,0x51ecf88d,0xfb48f7fb,0x900c4629,0xf7fc4638,0x4638fb75,
+0xf7fc4629,0xf240fe99,0x463841ea,0xfff8f7fa,0x41ebf240,0x46389009,
+0xfff2f7fa,0x90082155,0xf7fa4638,0xf44fffa7,0x9007719c,0xf7fa4638,
+0x2105ffa1,0x46389006,0xfc28f7fb,0x31ecf89d,0x4638b12b,0x11edf99d,
+0xfb8af7fd,0x4638e003,0xf7fba979,0x214cfa8f,0xf7fa4638,0x21f3ff8b,
+0x4638900b,0xff86f7fa,0x900a6c7b,0x6a5b689b,0x639ef5a3,0x2b013b0d,
+0x4638d809,0x221821f3,0xf7fa2310,0x4638ffa5,0x220221f3,0x4638e002,
+0x221821f3,0xf7fa4613,0x6bf8ff9b,0xfa46f7f4,0xd1042802,0x214c4638,
+0x23202230,0x4638e003,0x2230214c,0xf7fa2310,0x4638ff8b,0xf7fb2100,
+0xf240fbf7,0x46386131,0xff9af7fa,0x46132215,0x6131f240,0x46384683,
+0xffb4f7fa,0x61d6f240,0xf7fa4638,0x2300ff8d,0xf2402203,0x468261d6,
+0xf7fa4638,0xf240ffa7,0x463861da,0xff80f7fa,0x61daf240,0x4681228f,
+0xf7fa4638,0xab7fff91,0x2301936c,0x3306936d,0xf99d936e,0x463831ed,
+0x7310f503,0x2320936f,0xf2409370,0x93004356,0x3301a96c,0x4255f240,
+0xf80ef7fb,0x46389a7f,0x927f00d2,0x6171f240,0xf7fab292,0x2103ff61,
+0xf7fa4638,0x2121ff0f,0x46384606,0xff0af7fa,0x22182103,0x46384680,
+0xfef6f7fa,0x21214638,0xf7fa221e,0x2500fef1,0x4638462c,0xf848f7ff,
+0x50e0ab50,0x3404182d,0x7061f44f,0xfbaaf7f1,0xd1f22c40,0x112a2000,
+0xab504601,0x310458cb,0xbfb84298,0x429a4618,0x461abfa8,0xd1f42940,
+0xf8871e83,0x21033ff9,0x2ffaf887,0x46324638,0xfecaf7fa,0x46382121,
+0xf7fa4642,0x4638fec5,0x41eaf240,0xf7fa9a09,0x4638ff1b,0x41ebf240,
+0xf7fa9a08,0x2155ff15,0x9a074638,0xfeb4f7fa,0xf44f4638,0x9a06719c,
+0xfeaef7fa,0xf2404638,0x465a6131,0xff04f7fa,0xf2404638,0x465261d6,
+0xfefef7fa,0x0201f049,0x4638b292,0x61daf240,0xfef6f7fa,0x46382101,
+0xfb42f7fb,0xf7fb4638,0x214cfb25,0x9a0b4638,0xfe8ef7fa,0x463821f3,
+0xf7fa9a0a,0x2300fe89,0x6200f44f,0xf2404638,0xf7fa414c,0x2100fef7,
+0xf7fc4638,0x2100fd6d,0xf7fc4638,0x2100fa41,0xf7fc4638,0x2201fc15,
+0x46382300,0x413bf240,0xfee4f7fa,0x4638990c,0xf9c8f7fb,0xf7fb4638,
+0xf240f9fd,0x900d41a4,0xf7fa4638,0xf240feb5,0x900f413b,0xf7fa4638,
+0xf3c0feaf,0x900e1080,0x4638b120,0x71f7f50d,0xfa5ef7fb,0xf7fc4638,
+0x4638ffab,0xf7fd2100,0x2301f9fd,0x31e2f88d,0xf04f9b03,0xf88d0800,
+0x9b0531e3,0x2660f64e,0x46a9b2dd,0x46b346c2,0x23db2100,0x93002401,
+0x460b4638,0x72edf50d,0xf7ff9401,0xab7ff839,0x2318936c,0x3308936e,
+0x335f9370,0xf240936f,0x93004356,0x191ba96c,0xf2404638,0x946d4255,
+0xff1ef7fa,0xf3439b7f,0xb911010b,0x2260f64e,0x2264e00a,0x330bf343,
+0xf302fb03,0xf3f1fb93,0x72e3ea83,0x72e3eba2,0xdc0242b2,0x0a00f04f,
+0xf10ae006,0xfa5f0301,0xf1bafa83,0xd0160f02,0x31e3f89d,0xbfdc455a,
+0x51e3f89d,0x3b044693,0xf013b2db,0xf88d0f80,0xd10831e3,0x0301f108,
+0xf883fa5f,0x0f04f1b8,0x4616d001,0x454de7ac,0xebc5d007,0x2b100309,
+0x1d2bd101,0x1cabe000,0xf04fb2dd,0xf64e0800,0xf88d2660,0x46c151e3,
+0x210046b2,0x240123db,0x46389300,0xf50d460b,0x940172ed,0xffd4f7fe,
+0x936cab7f,0x936e2318,0x93703308,0x936f335f,0x4356f240,0xa96c9300,
+0x4638191b,0x4255f240,0xf7fa946d,0x9b7ffeb9,0x010bf343,0x2264b181,
+0x330bf343,0xf302fb03,0xf3f1fb93,0x72e3ea83,0x72e3eba2,0x7ffaf5b2,
+0xf89dda04,0xe02451e3,0x2260f64e,0xdc0242b2,0x0900f04f,0xf109e006,
+0xfa5f0301,0xf1b9f983,0xd0160f02,0x31e3f89d,0xbfbc4552,0x51e3f89d,
+0x3b014692,0xf013b2db,0xf88d0f80,0xd10831e3,0x0301f108,0xf883fa5f,
+0x0f05f1b8,0x4616d001,0x2400e7a7,0x930023db,0x46234638,0xf50d4621,
+0xf88d72ed,0x940151e3,0xff7af7fe,0xb1239b0e,0xf50d4638,0xf7fb71f7,
+0x4638f879,0xf7fb990d,0x9b0ff8c5,0xf4034638,0xf7fd4160,0x4638f913,
+0xfebaf7fc,0x46389b02,0x4160f403,0xf90af7fd,0x46382301,0x6195f44f,
+0xf7fa22ff,0x9b04fdc7,0x6bf8b913,0xfd30f7f4,0xf7f46bf8,0x22e0f833,
+0xbf142802,0x23602320,0x6182f44f,0xf7fa4638,0x2280fdb5,0x46134638,
+0x6131f240,0xfdaef7fa,0x5280f44f,0x46134638,0x61daf240,0xfda6f7fa,
+0x7200f44f,0x46134638,0x6131f240,0xfd9ef7fa,0x7280f44f,0x46134638,
+0x6131f240,0xfd96f7fa,0x033df241,0x54fa2201,0x21a54638,0xf7fa3205,
+0x4638fd17,0x220f218e,0xfd12f7fa,0x21a24638,0xf7fa4622,0x4638fd0d,
+0x22ff2194,0xfd08f7fa,0x21934638,0xf7fa22ff,0x4638fd03,0x220c21a4,
+0xfcfef7fa,0x21a34638,0xf7fa2266,0xf50dfcf9,0xe8bd7d01,0x46c08ff0,
+0x4604b510,0xfad6f7fe,0x46208da1,0xf8f6f7fe,0xf7fa4620,0x4620feff,
+0xfe3cf7fa,0xf0026be0,0xb978fe31,0xf7f36be0,0xb958fcfb,0xf7fd4620,
+0x4620fc89,0xfc50f7ff,0xf7fe4620,0x4620fd31,0xff10f7fc,0x46c0bd10,
+0xb51029e0,0x4604460b,0xf06fdd02,0xe0210012,0x6330f443,0xbfd4290e,
+0x5100f44f,0x5180f44f,0xb2894319,0xffc8f7ff,0x23016c62,0x3025f882,
+0xf7fb4620,0x4620f82d,0xf7fd2100,0x2240f863,0xf2404620,0x46136176,
+0xfd20f7fa,0xf7fd4620,0x2000fc55,0x46c0bd10,0x41f0e92d,0x4605b092,
+0x8064f8dd,0x461c981a,0x461fb90b,0x681fe000,0xf00029a8,0xdc138091,
+0xf000295c,0xdc08819e,0xf000293c,0x294a80e5,0x8092f000,0xd021291b,
+0x295ee01d,0xf2c0d027,0x295f81bd,0xe016d038,0xd07129c3,0x29aadc05,
+0xdb70d047,0xd06629c2,0x29d4e00d,0x8221f000,0x29d3dc03,0x8211f000,
+0x29dce005,0x81f0f000,0xf00029dd,0xf06f81f3,0xe2410616,0x7c5c6c6b,
+0xf0402c00,0x46288230,0xfce2f7fa,0x2301e1fb,0x70032a07,0x2100dc01,
+0xf8d8e001,0x6be81004,0xfd4cf7f3,0x28004606,0x822af040,0xb2b94628,
+0xfc9ef7fa,0xe2236020,0x2a072301,0xdc017003,0xe0012100,0x1004f8d8,
+0xf7f36be8,0x4606fd37,0xf0402800,0x46288215,0x0c3ab2b9,0xfc90f7fa,
+0x6be8e20e,0xf7f32100,0x4606fd29,0xf0402800,0x60208207,0x2b0669ab,
+0x8202f040,0x0047f88d,0x0046f88d,0x0246f10d,0xf10d4628,0xf7fb0147,
+0xf99dfa49,0xf99d2047,0xb2923046,0xea43b29b,0x60232302,0x6be8e1ec,
+0xf7f32100,0xe00efd07,0x2b028823,0x6c6bd879,0x2b007c5b,0x81d9f000,
+0x6be82100,0x460b460a,0xf7f39100,0x4606fd09,0xf0402800,0xe1c981d5,
+0x21006be8,0xfceef7f3,0x28004606,0x81ccf040,0x7c536c6a,0xf0402b00,
+0xf89281ba,0xb1133025,0xf7fb4628,0xb987fb7b,0xf7fc4628,0x6be8f859,
+0xfec8f7f3,0x6182f44f,0xbf142802,0x23602320,0x462822e0,0xfc4af7fa,
+0x4628e1ae,0x22014639,0xfefef7ff,0x2601b108,0x4628e1a6,0x238022e0,
+0x6182f44f,0xfc3af7fa,0x24404ba5,0x2315930c,0x2310930e,0xf2409310,
+0x93004356,0xa90c4628,0xf2403301,0x940d4255,0xf7fa960f,0x4628fc7b,
+0xf64f4621,0x463372ff,0xf7fc9600,0xe183f865,0x7c596c6b,0xf0402900,
+0x6be88172,0xfc9af7f3,0x28004606,0x8178f040,0x3004f8d8,0xf0036cac,
+0x2902017f,0x2904d008,0x290bd006,0x2916d004,0xf06fd002,0xe1670601,
+0xf8936c6b,0xb1133025,0xf7fb4628,0xbb9ffb1b,0x210a4628,0x2d1af8b5,
+0xfbdaf7fa,0xf2404628,0x463a414b,0xfbd4f7fa,0x46394628,0xff3cf7fb,
+0x303af895,0x7d1af8a5,0x8d2ab14b,0x0350f242,0xd104429a,0x21514628,
+0xf7fa2204,0x6c6bfb8f,0x3388f8d3,0x0f02f013,0x813af000,0xf8b56cab,
+0xf44f2d1c,0xf8a3707a,0xf8b5249c,0xf8a32d20,0xf7f1249e,0xe12bf817,
+0xf8d36c6b,0xf0133388,0xd01d0f02,0xf44f6caa,0xf8b2707a,0xb29b349c,
+0x3d1cf8c5,0x349ef8b2,0xf8c5b29b,0xf8b43d20,0xf423349c,0x041b7300,
+0xf8a40c1b,0xf8b4349c,0xb29b349e,0x7300f443,0x349ef8a4,0xfff2f7f0,
+0x6be8ac02,0xf7f64621,0x6be8f849,0xf7f54621,0x4628f919,0x22014639,
+0xfe4ef7ff,0x28004606,0x80f6f040,0x303af895,0x8d2ab153,0x0350f242,
+0xd105429a,0x21514628,0x72fbf64f,0xfb24f7fa,0x3d1af8b5,0x210ab963,
+0xf7fa4628,0xf240fb59,0xf8a5414b,0xf64f0d1a,0x462872ff,0xfb58f7fa,
+0x21014628,0xfec0f7fb,0x210a4628,0x7294f44f,0x6be8e073,0xf7f32100,
+0x4606fbe9,0xf0402800,0x6c6b80c7,0x3025f893,0x4628b113,0xfa7af7fb,
+0x4628b947,0xff58f7fb,0xf44f4628,0xf7fc4160,0xe0b5fe8d,0x46284632,
+0xf7ff4639,0x4606fe05,0xf0402800,0x462880ad,0x22704631,0xf7fb4633,
+0x4628ffd1,0xf7fc2114,0xe0a1fecb,0x7c596c6b,0xf0402900,0x6be88090,
+0xfbb8f7f3,0x28004606,0x8096f040,0xf8936c6b,0xb1133025,0xf7fb4628,
+0xb997fa49,0xf2404628,0x4632414b,0xfb08f7fa,0x210a4628,0x2d0af8b5,
+0xfb08f7fa,0x46314628,0xfe6af7fb,0x6d0af8a5,0x4628e07a,0x22014639,
+0xfdcaf7ff,0x28004606,0xf8b5d172,0xb92b3d0a,0x210a4628,0xfae4f7fa,
+0x0d0af8a5,0x21014628,0xfe52f7fb,0xf2404628,0xf64f414b,0xf7fa72ff,
+0x4628fadf,0xf44f210a,0xf7fa720a,0xe057fae9,0xf8936c6b,0xe02236fe,
+0x0001c4b0,0xd84d2f64,0xf8836c6b,0x6c6b76fe,0x2b007c5b,0x6be8d044,
+0xfbb8f002,0x28004604,0x4628d13e,0x31fff04f,0xf7fd4622,0x4626fd5d,
+0x696be03a,0x6022691a,0x3db8f8d5,0x0f02f013,0xf042d02e,0x60230380,
+0x2f03e02a,0x696ad82a,0x42bb6913,0x6c6bd024,0x7c5b6117,0x6be8b303,
+0xfafef7f4,0x4628b127,0x22012100,0xf9def7fb,0x2201696b,0x69194628,
+0xf9d8f7fb,0x6be82800,0x2600bf14,0x0602f06f,0xfa16f7f4,0xf06fe00c,
+0xe0090604,0x060cf06f,0xf06fe006,0xe0030603,0xe0012600,0x061cf06f,
+0xb0124630,0x81f0e8bd,0xf890b570,0x46045038,0xd1402d00,0x26016c83,
+0x6038f880,0x3120f8d3,0xf8c04631,0xf7fa5d50,0x6be0fabf,0x462a8da1,
+0xfabcf7f9,0x4631b938,0xf7f96be0,0x4601fadf,0xf7fb4620,0x8da3f8f5,
+0x6340f403,0x6f40f5b3,0x2114bf14,0xf8942128,0x42993030,0x6be0d002,
+0xfcd4f7f4,0x46204631,0xf868f7fb,0xf0004620,0x4620fa27,0x5037f884,
+0xfc78f7fd,0x462a6963,0x46206919,0xf97ef7fb,0x46206963,0xf7fd7d19,
+0xf884fc3d,0xbd705038,0x4ff0e92d,0xb0914605,0x002cf890,0xfca6f7f3,
+0x4d54f895,0xbb244680,0xf7f36be8,0x2802fcb3,0xf04fd108,0xf8ad0304,
+0xf04f3030,0xf8ad030c,0xe0093032,0x0307f04f,0x3030f8ad,0x030ff04f,
+0x3032f8ad,0x030ef04f,0xa90c4628,0x3034f8ad,0x4036f8ad,0xfcbaf7fa,
+0x21964628,0xfd06f7fa,0xf8b5e1dc,0xb2832f9a,0xd104429a,0x46b92700,
+0x46ba46bb,0xf640e05c,0x429813c3,0xf995d838,0x2b043fca,0xf9b5dc0c,
+0xf9b57066,0xf9b5a068,0xf895906a,0xf8952f8d,0xf8953f8e,0xe01a1f8f,
+0xdc0c2b36,0x7060f9b5,0xa062f9b5,0x9064f9b5,0x2f8af895,0x3f8bf895,
+0x1f8cf895,0xf9b5e00b,0xf9b5706c,0xf9b5a06e,0xf8959070,0xf8952f90,
+0xf8953f91,0xf4421f92,0xea425200,0xea421203,0x46282281,0x413ef240,
+0xf7fab292,0xe01bf9bd,0x43c8f241,0xd8064298,0x7072f9b5,0xa074f9b5,
+0x9076f9b5,0xf241e010,0x42986344,0xf9b5d806,0xf9b57078,0xf9b5a07a,
+0xe005907c,0x707ef9b5,0xa080f9b5,0x9082f9b5,0x8f9af8a5,0x0b01f04f,
+0xf7fb4628,0x2307fcc5,0x33199309,0xab0e930b,0x23019307,0x3b019308,
+0xe00e930a,0x4356f240,0x46289300,0xa9073301,0x4255f240,0xf9f2f7fa,
+0x33019b0a,0x9b0e930a,0x930e3301,0x2b3f9b0e,0x22ffd9ec,0x46284613,
+0x41a5f240,0xf98ef7fa,0xf2404628,0xf44f41a5,0xf44f42e0,0xf7fa43a0,
+0x2300f985,0xf2404628,0xf44f41a5,0xf7fa62e0,0x223ff97d,0x4628231f,
+0x41a6f240,0xf976f7fa,0x23002201,0xf2404628,0xf7fa5103,0x2204f96f,
+0x46284613,0x5103f240,0xf968f7fa,0x46132210,0xf2404628,0xf7fa5103,
+0xf240f961,0x46281121,0xf8f4f7fa,0x02f3f000,0x1121f240,0xf0424628,
+0xf7fa0201,0x214cf8dd,0x46282202,0xf902f7fa,0xf2404628,0xf44f41f3,
+0xf7fa5280,0x2251f93d,0xf44f4628,0xf7fa718a,0x214cf8cb,0x23002201,
+0xf7fa4628,0x2238f901,0x46282300,0x413cf240,0xf934f7fa,0x4200f44f,
+0x46284613,0x41a6f240,0xf92cf7fa,0x46282300,0x6195f44f,0x427ff44f,
+0xf924f7fa,0x46282201,0x6195f44f,0xf904f7fa,0xf2404628,0x227f41a4,
+0xf7fa2300,0x4628f917,0x41a5f240,0x62e0f44f,0xf7fa2300,0xf44ff90f,
+0xf44f4260,0xf2404300,0x462841a4,0xf906f7fa,0xf7fa4628,0x4628fc05,
+0xf7fa2101,0xf44ffb6d,0x46135280,0xf2404628,0xf7fa414c,0xac02f8f7,
+0x46282300,0x414df240,0x4280f44f,0xf8eef7fa,0x49584620,0x6cae2214,
+0xfe9af7ed,0x6c284623,0x22142100,0xfb6ef7f4,0x0300f04f,0x3568f8a6,
+0x7380f44f,0x37c0f8a6,0x0341f04f,0x350cf8a6,0x2302f641,0x3514f8a6,
+0x0300f04f,0x3508f8a6,0x350af8a6,0x354cf8a6,0x0314f04f,0x356af8a6,
+0x0326f640,0x3568f8a6,0x0300f04f,0x3500f8a6,0xf04f2400,0xf8a603d0,
+0xe0023502,0xf7f0200a,0x3401fd05,0xd0092c1f,0x350ef8b6,0x0f80f013,
+0xe003d1f4,0xf7f0200a,0xe000fcf9,0x34012400,0xd0092c0b,0x350ef8b6,
+0x6f80f413,0xe003d0f2,0xf7f0200a,0xe000fceb,0x34012400,0xd0042c0b,
+0x3690f8b6,0x7f80f413,0x4628d1f2,0x41abf240,0xf86af7fa,0x4f00f410,
+0xf000d009,0x3b2003ff,0xf2404628,0x223f41a6,0xf7fab29b,0x4628f87f,
+0x414cf240,0x5280f44f,0x24002300,0xf876f7fa,0x7340f44f,0x4f9af8a5,
+0xf44f4628,0xf44f6195,0xf7fa427f,0xab0ff86b,0x23019307,0x940a9308,
+0x46494620,0x4653463a,0xfb72f7fa,0x4356f240,0x9300900f,0x33014628,
+0xf240a907,0xf7fa4255,0x9b0af8a9,0x33013401,0x930a2c40,0xf1bbd1e8,
+0xd1030f00,0x033df241,0xb1135ceb,0xf7fb4628,0x4628fefd,0x4160f44f,
+0xfb7cf7fc,0xe8bdb011,0x46c08ff0,0x0001b1a9,0x47f0e92d,0xf7fd4607,
+0x2101fd0f,0xf7fa4638,0x4638fc67,0xff00f7fb,0x41a2f240,0x46382202,
+0xa03cf8d7,0xf81cf7fa,0xf7f02001,0x4638fc73,0x41a2f240,0x72fdf64f,
+0xf808f7fa,0xf7f02001,0x4cc3fc69,0xb1706bf8,0xfa88f7f3,0xd10a2801,
+0x1c04f834,0x4f00f411,0x0489d011,0x2c02f814,0x0c894638,0xf834e009,
+0xf4111c04,0xd0064f80,0xf8140489,0x46382c01,0xf7f90c89,0xf834ff85,
+0xf64f2b04,0x429a73ff,0x2120d1dc,0x46382200,0xff7af7f9,0x22382108,
+0xf7f94638,0x2157ff9f,0x46382256,0xff70f7f9,0x21f32300,0x46382202,
+0xffa6f7f9,0x22002152,0xf7f94638,0x2220ff65,0x46382140,0xff60f7f9,
+0x33e4f241,0xf1b258fa,0xd0033fff,0x21434638,0xe002b292,0x21434638,
+0xf7f922ff,0x2105ff51,0x46382282,0xff4cf7f9,0x22502140,0xf7f94638,
+0x2143ff47,0x46382280,0xff42f7f9,0x2215214e,0xf7f94638,0x214fff3d,
+0x46382215,0xff38f7f9,0x2215214d,0xf7f94638,0x23ffff33,0x22f82104,
+0xf7f94638,0x2105ff69,0x463822ff,0xff28f7f9,0x22ff2106,0xf7f94638,
+0x2107ff23,0x22ff4638,0xff1ef7f9,0x46382108,0x23ff2207,0xff54f7f9,
+0x0900f04f,0x46384c7d,0x8004f839,0x78e1444c,0x796578a6,0xff1af7f9,
+0x40b57923,0xf303fa50,0x40b3b29b,0x4638b2ad,0x462a4641,0xf109b29b,
+0xf7f90906,0xf1b9ff73,0xd1e30fc6,0x21042300,0x463822f8,0xff30f7f9,
+0x22002105,0xf7f94638,0x2106feef,0x46382200,0xfeeaf7f9,0x22002107,
+0xf7f94638,0x2300fee5,0x22072108,0xf7f94638,0x4638ff1b,0x619ef44f,
+0x42bff44f,0xff34f7f9,0x46382200,0x41f1f240,0xff2ef7f9,0x23032207,
+0xf2404638,0xf7f941ea,0x2302ff41,0x46382207,0x41ebf240,0xff3af7f9,
+0xf44f221f,0x4638719c,0xfebef7f9,0x073cf8da,0xfe76f7f2,0x46046c7b,
+0x68986c99,0xff68f7ed,0x073cf8da,0xf7f24621,0x2181fe65,0xf7f94638,
+0x2181feb9,0x22044606,0xf7f94638,0x213afea5,0xf7f94638,0x213afeaf,
+0x46052200,0xf7f94638,0x215afe9b,0x4638227e,0xfe96f7f9,0x22f7211a,
+0xf7f94638,0x215afea9,0x4638227c,0xfe8cf7f9,0x2215215b,0xf7f94638,
+0x2270fe87,0x4638215c,0xfe82f7f9,0x2df4f8d7,0x429a4b33,0x4638d103,
+0x22a0215d,0x4b31e005,0xd104429a,0x215d4638,0xf7f92252,0x4638fe71,
+0x2201215e,0xfe6cf7f9,0x215a4638,0xf7f9227d,0x2032fe67,0xfb2af7f0,
+0xe0034c27,0xf7f0200a,0x3c0afb25,0x4638215f,0xfe68f7f9,0x0f02f010,
+0x2c09d101,0x215fd1f2,0xf7f94638,0xf010fe5f,0xd1040f02,0x213a4638,
+0xf7f9b2ea,0x2155fe49,0xf7f94638,0x2155fe53,0x46052200,0xf7f94638,
+0x215afe3f,0x4638227e,0xfe3af7f9,0x227c215a,0xf7f94638,0x215bfe35,
+0x46382255,0xfe30f7f9,0x215c2276,0xf7f94638,0xf8d7fe2b,0x4b0b2df4,
+0xd115429a,0x215d4638,0xf7f922fc,0x4638fe21,0x2200215e,0x46c0e022,
+0x0001bf80,0x0001b420,0x0249f000,0x01c9c380,0x00989689,0x016e3600,
+0x429a4bc4,0x4638d103,0x2296215d,0x4bc2e009,0xd103429a,0x215d4638,
+0xe002223d,0x215d4638,0xf7f92213,0x4638fdfd,0x2201215e,0xfdf8f7f9,
+0x215a4638,0xf7f9227d,0x2032fdf3,0xfab6f7f0,0xe0034cb6,0xf7f0200a,
+0x3c0afab1,0x4638215f,0xfdf4f7f9,0x0f02f010,0x2c09d101,0x215fd1f2,
+0xf7f94638,0xf010fdeb,0xd1040f02,0x21554638,0xf7f9b2ea,0x4638fdd5,
+0x227e215a,0xfdd0f7f9,0x21814638,0xf7f9b2f2,0x223ffdcb,0x21554638,
+0xfdc6f7f9,0x8db94638,0xfba8f7fd,0x46388db9,0xf9c8f7fd,0xf7f94638,
+0x4638ffd1,0xff0ef7f9,0xf7fd4638,0x4638fe11,0xfbdaf7ff,0x187a2100,
+0x31c9f892,0x292d3101,0x3fccf882,0x4638d1f7,0xfd54f7fc,0xf7fb4638,
+0x4638ffe1,0xfbc8f7ff,0x463822bf,0x61aef44f,0xfdf6f7f9,0x463822ff,
+0x5171f240,0xfdf0f7f9,0xf2404638,0xf64f5172,0xf7f97233,0x4638fde9,
+0x5173f240,0x7243f64f,0xfde2f7f9,0x463822cc,0x5174f240,0xfddcf7f9,
+0xf2404638,0xf44f5175,0xf7f97280,0x2200fdd5,0xf2404638,0xf7f95176,
+0x2200fdcf,0xf2404638,0xf7f95177,0x2200fdc9,0xf44f4638,0xf7f961af,
+0x2200fdc3,0xf2404638,0xf7f95179,0x2278fdbd,0xf44f4638,0xf7f961bc,
+0x4638fdb7,0x51e1f240,0x72c1f64f,0xfdb0f7f9,0xf2404638,0xf44f51e2,
+0xf7f97280,0x4638fda9,0x51e3f240,0x72c1f64f,0xfda2f7f9,0x46382278,
+0x51e4f240,0xfd9cf7f9,0xf2404638,0xf64f51e5,0xf7f9727a,0x4638fd95,
+0x51e6f240,0x72eef64f,0xfd8ef7f9,0x46382200,0x51e7f240,0xfd88f7f9,
+0xf44f4638,0x221261bd,0xfd82f7f9,0x46382286,0x51e9f240,0xfd7cf7f9,
+0x4638228f,0x51eaf240,0xfd76f7f9,0xf2404638,0xf64f51eb,0xf7f9727b,
+0x2201fd6f,0xf2404638,0xf7f951ec,0x4638fd69,0x51edf240,0x72f8f64f,
+0xfd62f7f9,0x463822fb,0x51eef240,0xfd5cf7f9,0xf2404638,0xf64f51ef,
+0xf7f972db,0x224efd55,0xf44f4638,0xf7f961be,0x4638fd4f,0x51f1f240,
+0x72ebf64f,0xfd48f7f9,0xf2404638,0xf64f51f2,0xf7f972bb,0x2231fd41,
+0xf2404638,0xf7f951f3,0x2280fd3b,0x46384613,0x6131f240,0xfd4ef7f9,
+0x5280f44f,0x46384613,0x61daf240,0xfd46f7f9,0x22402300,0xf2404638,
+0xf7f96131,0x4638fd3f,0x612cf240,0x72fff647,0xfd1ef7f9,0x72fff647,
+0xf2404638,0xf7f9612d,0xf241fd17,0xf8a73388,0x21a53f9e,0xf7f94638,
+0x218efcc1,0x0ffcf8a7,0xf7f94638,0x21a2fcbb,0x0ffef8a7,0xf7f94638,
+0xf507fcb5,0x80185380,0x46382194,0xfcaef7f9,0x0302f241,0x52f82193,
+0xf7f94638,0xf241fca7,0x52f80304,0x463821a4,0xfca0f7f9,0x0306f241,
+0x21a352f8,0xf7f94638,0xf241fc99,0x52f80308,0x87f0e8bd,0x0249f000,
+0x01c9c380,0x00989689,0x4605b570,0xff6af7f2,0x3054f890,0x2b004604,
+0x4628d053,0xfc90f7f2,0x2da4f8d4,0x6c63b13a,0x370cf8d3,0x69621a9b,
+0x42936852,0x4628d30c,0xfdb4f001,0x4620b940,0xfad0f7fa,0x6c63b120,
+0x370cf8d3,0x3da4f8c4,0x69626c63,0x170cf8d3,0x3df0f894,0xf8d4b933,
+0x68d23dec,0x0301ebc3,0xd30a4293,0xf0014628,0xb930fd99,0xf7f24628,
+0xb910fc63,0xf7f24628,0x6be0fc61,0xfd8ef001,0x6be0b968,0xfc58f7f2,
+0x6be0b948,0xfc56f7f2,0x4620b928,0xf8942101,0xf7fa202c,0xf894fc19,
+0xb1533258,0xf8d46c63,0xf8d3225c,0x1a9b370c,0xd9022b05,0xf8842300,
+0xbd703258,0xf7f2b570,0xf241ff0d,0x58c11390,0xb1394604,0xf8d36bc3,
+0xf7f2073c,0xb908fb79,0xe0002501,0xf8d42500,0xb1311c24,0xf8d36be3,
+0xf7f2073c,0xb900fb6d,0xf04f3501,0xf2410200,0x52e21388,0x33024628,
+0xbd7052e2,0x4ff0e92d,0xb0a72300,0x460c4615,0x90c8f8dd,0x46079324,
+0x80c0f8dd,0xa0d0f8dd,0xfedcf7f2,0x0301f005,0x46214606,0x464a6c40,
+0x9b339300,0xfdfcf7f6,0x28009004,0x8793f040,0x2b039b31,0xa824d904,
+0x22044641,0xfa00f7ed,0x1e119a24,0x2101bf18,0xf0002d9f,0xd85483af,
+0xf0002d71,0xd82b8102,0xf0002d10,0xd81380cb,0xf0002d0c,0xd80780d4,
+0xf0002d00,0x2d0180a2,0x80b3f000,0xbf64f000,0xf0002d0e,0x2d0f80d9,
+0x80d9f000,0xbf5cf000,0xf0002d6e,0xd8078426,0xf0002d12,0x2d1380d4,
+0x80d4f000,0xbf50f000,0xf0002d6f,0x2d708421,0x80d0f000,0xbf48f000,
+0xf0002d7e,0xd80c8624,0xf0002d78,0xf20080d3,0x2d72873f,0x842bf000,
+0xf0002d75,0xf0008253,0x2d82bf37,0x861df000,0x2d80d807,0x8612f000,
+0xf0002d81,0xf0008613,0x2d88bf2b,0x8323f000,0xf0002d89,0xf000833f,
+0x2daebf23,0x83edf000,0x2da8d82b,0x83acf000,0x2da4d813,0x837df000,
+0x2da0d807,0x8376f000,0xf0002da2,0xf0008376,0x2da6bf0f,0x8376f000,
+0xf0002da7,0xf0008382,0x2dabbf07,0x83c6f000,0x2da9d807,0x83a3f000,
+0xf0002daa,0xf00083b5,0x2dacbefb,0x84a8f000,0xf0002dad,0xf00084a2,
+0x2db7bef3,0x84d5f000,0x2db2d813,0x83ecf000,0x2dafd807,0x83bcf000,
+0xf0002db0,0xf00083d4,0x2db5bee3,0x8402f000,0xf0002db6,0xf0008490,
+0x2dbbbedb,0x856bf000,0x2db8d807,0x8516f000,0xf0002dba,0xf0008515,
+0x2dbcbecf,0x86acf000,0xf0002dbe,0xf00086ad,0x4630bec7,0xf10da923,
+0xf7fa0297,0x9004f989,0xf0402800,0xf89d86c8,0x9a233097,0xbf142b00,
+0x4300f04f,0x43132300,0xf022e03b,0x29ff4100,0x21ffbfa8,0xb2c94630,
+0xf7fc0fd2,0x9004fee9,0xbeb1f000,0x9904ac20,0x4620220c,0xf900f7ed,
+0x23019a04,0x46214648,0x92219320,0xf896e3b8,0x2b003033,0x869ff000,
+0xf1094630,0x464a0102,0xf914f7fa,0x3002f899,0x3001f889,0xbe93f000,
+0x3054f896,0xf886e00d,0xf0001054,0xf896be8c,0xe006326c,0x126cf886,
+0xbe85f000,0x33def241,0xf8c95cf3,0xf0003000,0xf241be7e,0x54f133de,
+0xbe79f000,0x463821de,0xfed2f7f2,0x460421dc,0xf7f24638,0xea40fecd,
+0x901d4004,0x312af241,0xf7f24638,0xb240fec5,0x3130f241,0xfb80fa1f,
+0xf7f24638,0xf241febd,0x46803136,0xf7f24638,0xf241feb7,0x9002313c,
+0xf7f24638,0xf241feb1,0x9003312a,0xf7f24638,0xf241feab,0xf3c03130,
+0x46382546,0xfea4f7f2,0x3136f241,0x2446f3c0,0xf7f24638,0xf241fe9d,
+0xf3c0313c,0x46382a46,0xfe96f7f2,0x2046f3c0,0xf2419005,0x4638312a,
+0xfe8ef7f2,0x7f80f410,0x2d0cd005,0xf1abbf04,0xfa1f0304,0xfa0ffb83,
+0xf113f38b,0xdd050f2e,0xbf842d12,0x0306f10b,0xfb83fa1f,0xfa4f4bb1,
+0x571bf288,0x189b4638,0x3130f241,0xf883fa1f,0xfe6ef7f2,0x7f80f410,
+0x2c0cd005,0xf1a8bf04,0xfa1f0304,0xfa0ff883,0xf113f388,0xdd050f2e,
+0xbf842c12,0x0306f108,0xf883fa1f,0x99024ba1,0x300af913,0x189bb24a,
+0xf2414638,0xb29d3136,0xfe4ef7f2,0x7f80f410,0xf1bad004,0xd1010f0c,
+0xb29d1f2b,0xf113b22b,0xdd040f2e,0x0f12f1ba,0x1dabd901,0x9a05b29d,
+0x99034b92,0xb24a569b,0x4638189b,0x313cf241,0xf7f2b29c,0xf410fe31,
+0xd0047f80,0x2a0c9a05,0x1f23d101,0xb223b29c,0x0f2ef113,0x9b05dd04,
+0xd9012b12,0xb29c1da3,0xf38bfa0f,0xf288fa0f,0xb22b18d2,0xb22318d2,
+0x109218d2,0xf996921e,0x46383fcb,0x189b3302,0x3130f241,0xf7f2931e,
+0xf410fe0b,0xd0087f80,0xf1139b1e,0xdd040f55,0x0f20f113,0x3301da01,
+0xf241931e,0x4638312c,0xfdfaf7f2,0x312ef241,0x46384605,0xfdf4f7f2,
+0x46049b1e,0x0f5cf113,0x4638db10,0x312af241,0xfdeaf7f2,0x7f80f410,
+0xb222d108,0x1a9bb22b,0xfb032203,0xf3c3f302,0xe0031b47,0x335e9b1e,
+0xfb83fa5f,0x3132f241,0xf7f24638,0xf241fdd5,0x46053134,0xf7f24638,
+0x9b1efdcf,0xf1134604,0xdb100f5c,0xf2414638,0xf7f23130,0xf410fdc5,
+0xd1087f80,0xb22bb222,0x22031a9b,0xf302fb03,0x1a47f3c3,0x9b1ee003,
+0xfa5f335e,0xf241fa83,0x46383138,0xfdb0f7f2,0x313af241,0x46384605,
+0xfdaaf7f2,0x46049b1e,0x0f5cf113,0x4638db10,0x3136f241,0xfda0f7f2,
+0x7f80f410,0xb222d108,0x1a9bb22b,0xfb032203,0xf3c3f302,0xe0031847,
+0x335e9b1e,0xf883fa5f,0x313ef241,0xf7f24638,0xf44ffd8b,0x4605519a,
+0xf7f24638,0x9b1efd85,0xf1134604,0xdb100f5c,0xf2414638,0xf7f2313c,
+0xf410fd7b,0xd1087f80,0xb22bb222,0x22031a9b,0xf302fb03,0x1047f3c3,
+0x9b1ee002,0xb2d8335e,0xf38bfa4f,0xf28afa4f,0xbfa82b1f,0x2a1f231f,
+0x189bbfd4,0xfa4f331f,0x2a1ff288,0x189bbfd4,0xb242331f,0xbfd42a1f,
+0x331f189b,0x1078f99d,0xfb932204,0x4638f3f2,0xe1fe931f,0x4649a806,
+0xf7ec2220,0x9b06ff61,0x04fff003,0x2500f3c3,0x2b071e63,0x84d8f200,
+0xf013e8df,0x00c3005a,0x000804d6,0x005a0008,0x004e04d6,0x21dc6bf0,
+0xf7f22200,0x6bf0ff03,0x220021de,0xfefef7f2,0x46a8b90d,0x4638e007,
+0xf44f2120,0xf7f272e4,0xf8d7fd33,0x2201862c,0x033ef241,0x54f22c04,
+0xd1056bf0,0x189221d8,0x46c0e005,0x0001bda8,0xf24021d8,0xf7f24202,
+0x4638fee1,0xf10d2100,0xf7f20229,0x2d00fc47,0x84a9f000,0xf44f2400,
+0xf7ef707a,0x2120fdb7,0x72e4f44f,0xf7f24638,0xf8d7fd0b,0x9a08362c,
+0x0303ebc8,0xd2034293,0x34019b07,0xd3ea429c,0xf2412400,0x6bf0033e,
+0x54f421d8,0xf7f24622,0x4638feb9,0xe1c24621,0xf2412101,0x54f1033e,
+0xf5a39807,0xf1a06346,0x429a020a,0x2802d902,0x8472f040,0xd1072c01,
+0xf44f4630,0x22e06182,0xf7f92380,0xe002f933,0xf7fa4630,0x9a08fc71,
+0x3201b90a,0x4638e00c,0xb29221dc,0xfe92f7f2,0x2022f8bd,0x21de4638,
+0xfe8cf7f2,0x1201f240,0x46389b07,0xbf082b02,0x0204f042,0xf7f221d8,
+0x9a07fe81,0x00d221da,0xb2923a7c,0xf7f24638,0xf10dfe79,0x788b012f,
+0x4638784a,0xf89d431a,0x4313302f,0x431a78ca,0x4313790b,0x431a794a,
+0xbf149b09,0xf107460a,0x9300024c,0x0129f10d,0xf7f42300,0x2d00fe79,
+0x842df000,0x707af44f,0xfd3cf7ef,0x463821d8,0xfc82f7f2,0x0001f010,
+0xf241d1f4,0x54f0033e,0x2200e007,0x033ef241,0x463854f2,0xf7f221d8,
+0x4630fe45,0xf7fa2101,0xf000fc17,0x4641bc10,0xa813220c,0xfe80f7ec,
+0x930f2301,0xac249b13,0x9b149310,0x93114630,0xa90e9b15,0xf2409312,
+0x93004356,0x4255f240,0x940e3301,0xf944f7f9,0x46214648,0xf7ec2204,
+0xe3f0fe67,0x22104649,0xf7eca813,0x9b16fe61,0x93244630,0x930eab24,
+0x930f2301,0xa90e9b13,0x9b149310,0x4255f240,0x9b159311,0xf2409312,
+0x93004356,0xf7f93301,0xe3d4f8ed,0x2de8f8c6,0xb98a6bf0,0xf8d4f7f3,
+0xf7fa4630,0x6c73fc91,0x68982110,0xf7eb460a,0x6bf0fd69,0xfff4f7f2,
+0xf8862301,0xe3be3054,0xf8869a04,0xf7f32054,0x2270f8bf,0x46309b04,
+0xf7fa9924,0x4630fd07,0xf7fb213c,0x6c73fc01,0x68982110,0xf7eb9a04,
+0xe029fd4d,0xf8869b04,0x23013f83,0x3df0f886,0xe51e3b01,0xf2404630,
+0xf7f941a4,0xf400f83d,0xf5b04060,0xbf144f60,0x20012000,0x0000f8c9,
+0x6bf0e391,0xf894f7f3,0x46309924,0xbf0c2900,0x4100f44f,0x4160f44f,
+0xfb84f7fb,0xf8862300,0x33013f83,0x3df0f886,0xf7f26bf0,0xe37affad,
+0xf2404630,0xf7f941a4,0xf400f817,0xf5b04060,0xd1054f60,0xf7fb4630,
+0xf8b6f917,0xe4e83f96,0x3f9cf996,0x6bf0e4e5,0xf86af7f3,0xf1b19924,
+0xd1033fff,0xf44f4630,0xe7d54160,0xd903297f,0x011cf06f,0xe7d79104,
+0xf7fb4630,0xe7d3fba5,0xf44f4630,0xf7f86182,0xf080ffef,0xf3c00080,
+0xe7b310c0,0xf0402a00,0x463080dc,0x6182f44f,0x238022e0,0xf802f7f9,
+0xf996e33d,0xf1d33df9,0xbf380301,0xe4b42300,0x1df9f886,0xf0002900,
+0x46308332,0xf8bcf7f9,0xf2404630,0xf7f841a4,0xf400ffcb,0xf5b04060,
+0xd1034f60,0xf7fa4630,0xe320faf7,0x21004630,0xfb94f7f9,0x6c73e31b,
+0x2b007c5b,0x8309f000,0x31fff04f,0xf7fa4630,0x8db2fd99,0x4638b241,
+0xfeb8f7f8,0xe775b240,0x7c5b6c73,0xf0002b00,0x21de82f8,0xf7f24638,
+0x21dcfb5f,0x46384604,0xfb5af7f2,0x380cf8d7,0x4004ea40,0x1414f8b3,
+0xb2c9901d,0x4638911e,0x8db2b249,0xfe9af7f8,0x901eb240,0x4648a91d,
+0xe6f4220c,0x4649a806,0xf7ec2220,0x9b06fd59,0x2b073b01,0x82d4f200,
+0xf013e8df,0x006e001f,0x000802d2,0x02d202d2,0x001202d2,0x21d86bf0,
+0xf7f22202,0x4638fcff,0xf10d2100,0xe0090229,0x21d86bf0,0xf7f22200,
+0x4638fcf5,0xf5002100,0x32425246,0xfa5af7f2,0x9b07e2bd,0x32def240,
+0x42933b0a,0x82b0f200,0x463022e0,0x6182f44f,0xf7f82380,0x9a08ff73,
+0x3201b90a,0xf642e015,0x5afb13c2,0x429a4638,0xebc3bf84,0x93080302,
+0x2020f8bd,0xf7f221dc,0xf8bdfccd,0x46382022,0xf7f221de,0xf240fcc7,
+0x46381201,0xf7f221d8,0x9a07fcc1,0x00d24638,0x21da3a7c,0xf7f2b292,
+0xf10dfcb9,0x788b012f,0x4638784a,0xf89d431a,0x4313302f,0x431a78ca,
+0x4313790b,0x431a794a,0xbf149b09,0xf107460a,0x9300024c,0x0129f10d,
+0xf7f42300,0xe26efcb9,0x21d84638,0xf7f22200,0x6bf0fc99,0xf99ef7f2,
+0x6182f44f,0xbf142802,0x23602320,0x463022e0,0xf8a6e71c,0xe25a2f9e,
+0x3f9ef8b6,0xf896e22e,0xf7f2002c,0xf7f9f977,0x2801fcf9,0x2802d00b,
+0xb9d0d012,0x3060f9b6,0xf9b6931a,0x931b3062,0x3064f9b6,0xf9b6e019,
+0x931a3072,0x3074f9b6,0xf9b6931b,0xe0103076,0x3078f9b6,0xf9b6931a,
+0x931b307a,0x307cf9b6,0xf9b6e007,0x931a307e,0x3080f9b6,0xf9b6931b,
+0x46483082,0x931ca91a,0x4641e73a,0x220ca81a,0xfc96f7ec,0x93102307,
+0x93123319,0x930eab23,0x930f2301,0xf8dd9b04,0x9f1b8068,0x93119d1c,
+0x4620461c,0x46424629,0xf7f9463b,0xf240f9e1,0x90234356,0x46309300,
+0xa90e3301,0x4255f240,0xff18f7f8,0x34019b11,0x2c403301,0xd1e89311,
+0x002cf896,0xf91af7f2,0xfc9cf7f9,0xd00a2801,0xd0152802,0x9a1b9b1a,
+0xb9f0991c,0x3060f8a6,0x2062f8a6,0xf8bde091,0xf8bd1068,0xf8bd206c,
+0xf8a63070,0xf8a61072,0xf8a62074,0xe1da3076,0x1068f8bd,0x206cf8bd,
+0x3070f8bd,0x1078f8a6,0x207af8a6,0x307cf8a6,0xf8a6e1cd,0xf8a6307e,
+0xe0992080,0xe19d2300,0x2000f8b8,0xd0042a06,0x010ff04f,0x1000f8a9,
+0xf8b8e1bd,0x2b003004,0x81b6f040,0x2000f8a9,0x2002f8b8,0x2002f8a9,
+0x3004f8b8,0x3004f8a9,0x3002f8b8,0xf2002b03,0xe8df81aa,0x0d02f003,
+0xf8b62318,0xf8a92060,0xf8b62006,0xf8a93062,0xf8b63008,0xe01f6064,
+0x1072f8b6,0x1006f8a9,0x2074f8b6,0x2008f8a9,0x6076f8b6,0xf8b6e014,
+0xf8a93078,0xf8b63006,0xf8a9107a,0xf8b61008,0xe009607c,0x207ef8b6,
+0x2006f8a9,0x3080f8b6,0x3008f8a9,0x6082f8b6,0x600af8a9,0x220ce177,
+0x4641a817,0xfbe8f7ec,0x305cf8bd,0xf0402b06,0xf8bd816e,0x2b003060,
+0x8166f040,0x305ef8bd,0xf2002b03,0xe8df8164,0x0f02f003,0xf8bd291c,
+0xf8a62062,0xf8bd2060,0xf8a63064,0xf8bd3062,0xf8a61066,0xe1521064,
+0x2062f8bd,0x2072f8a6,0x3064f8bd,0x3074f8a6,0x1066f8bd,0x1076f8a6,
+0xf8bde145,0xf8a62062,0xf8bd2078,0xf8a63064,0xf8bd307a,0xf8a61066,
+0xe138107c,0x2062f8bd,0x207ef8a6,0x3064f8bd,0x3080f8a6,0x1066f8bd,
+0x1082f8a6,0x9a04e12b,0xe0fa9224,0x3e16f996,0xe0f69324,0x2e16f886,
+0x6bf0e121,0xfe24f7f2,0x413ef240,0xf7f84630,0xf240fdbb,0x46805103,
+0xf7f84630,0x2204fdb5,0xf2404613,0x46825103,0xf7f84630,0x4630fdcf,
+0x413ef240,0x5200f44f,0xf7f89b04,0x220ffdc7,0x46302308,0x413ef240,
+0xfdc0f7f8,0x23a022f0,0xf2404630,0xf7f8413e,0xf44ffdb9,0xf44f52e0,
+0x46306340,0x413ef240,0xfdb0f7f8,0x413cf240,0xf7f84630,0x2238fd89,
+0xf2402320,0x4607413c,0xf7f84630,0x220ffda3,0x46302304,0x1121f240,
+0xfd62f7f8,0x7200f44f,0x46304613,0x5103f240,0xfd94f7f8,0x7200f44f,
+0x46309b04,0x5103f240,0xfd8cf7f8,0x413bf240,0xf7f84630,0x2204fd65,
+0xf2404613,0x4605413b,0xf7f84630,0x2204fd7f,0xf2404630,0x9b04413c,
+0xfd78f7f8,0x7200f44f,0x46304613,0x5103f240,0xfd70f7f8,0xf2404630,
+0xf44f5103,0x9b047200,0xfd68f7f8,0x46302328,0x5105f240,0x72fff64f,
+0xfd60f7f8,0xf2404630,0xf64f5104,0x9b0472ff,0xfd58f7f8,0x46302220,
+0x5103f240,0xf7f84613,0x9c04fd51,0xf7ef2001,0x4630f99d,0x5103f240,
+0xfd26f7f8,0x0f20f010,0x2000bf14,0x34012001,0xd0022c02,0xd0ed2800,
+0xb908e002,0xe0184604,0x5106f240,0xf7f84630,0xf240fd13,0x46045107,
+0xf7f84630,0x0424fd0d,0xf44f0c24,0xeb0461a1,0x46304400,0xfd04f7f8,
+0xf2404630,0xf7f85109,0x2204fcff,0x0302ea05,0xf2404630,0xf7f8413b,
+0x4630fd19,0x413ef240,0xf7f84642,0x2204fcf9,0x0302ea0a,0xf2404630,
+0xf7f85103,0x2238fd0b,0x0302ea07,0xf2404630,0xf7f8413c,0xb220fd03,
+0x6166f246,0xfa08f7f1,0x61f4f247,0xfa08f7f1,0xf5041284,0x34b144fc,
+0x12646bf0,0xfc60f7f2,0x46489424,0xe435a924,0x33fff04f,0xe0149324,
+0xf8962200,0x4611002c,0x590b4c13,0xd1044283,0xfb022314,0x68584303,
+0x3201e004,0x2a0e3114,0x2000d1f2,0xfabaf7f9,0x46489024,0x4652a924,
+0xf06fe419,0xe0090303,0x0116f06f,0xe0069104,0x021cf06f,0xe0029204,
+0x0301f06f,0x98049304,0xe8bdb027,0x46c08ff0,0x0001b508,0x2201b909,
+0x2200e000,0x3308f642,0x200054c2,0x46c04770,0x466bb5f7,0x0006e883,
+0x21006846,0x4605460b,0xf89d4630,0x46147000,0xf9def7f3,0xb9484601,
+0x46224630,0xf7f32301,0x4601f9d7,0x63ecb910,0x7033f885,0xbdfe4608,
+0x2400b57f,0xf846ae04,0x68454d04,0x3038f890,0xf8807004,0x63444044,
+0xf8854621,0xf8803d09,0x46284038,0xfcf0f7f1,0x21749400,0x23044632,
+0x07f8f8d5,0xfd5cf000,0x073cf8d5,0xfba4f7f1,0x073cf8d5,0xfb8ef7f1,
+0x46c0bd7f,0x6845b5f0,0x4606b089,0x460f224c,0x212a4628,0xf810f7f2,
+0x2250212c,0xf7f24628,0x2120f80b,0x72e4f44f,0xf7f24628,0x4628f805,
+0xf44f2122,0xf7f172e6,0xf896ffff,0xb1133030,0x3630f8d5,0xf8d5e001,
+0x61f3362c,0x34b0f8d5,0x6273ac05,0x34b4f8d5,0x62b32100,0x4620220c,
+0xf9d2f7ec,0x230c2200,0x46289301,0x490c4613,0x92029400,0xf7f59203,
+0x9b05fe85,0x9b076233,0x302cf886,0xf8869b06,0xb137302d,0x0008f106,
+0x011cf106,0xf7ec2214,0xb009f9d7,0x46c0bdf0,0x0001b75b,0x47ffe92d,
+0xf04f6844,0xf8cd0a01,0xf894a00c,0x26003d09,0x3038f880,0x46057c63,
+0x4691460f,0xbfd4290e,0x5800f44f,0x5880f44f,0x6d09f884,0xf8d4b91b,
+0xf7f1073c,0x7c63fb31,0xf06fb913,0xe0250303,0x07f8f8d4,0xf0002104,
+0x9600ffb3,0xaa032304,0xf8d42174,0xf00007f8,0x4620fcd3,0xfc30f7f2,
+0x6130f447,0x0101ea48,0x4620b289,0xffe8f7f5,0xf7f24620,0x4620fb51,
+0xf7f14649,0x4603fc4d,0xf885b920,0x63680044,0xa000f885,0xb0044618,
+0x87f0e8bd,0x41f0e92d,0x7045f890,0x68424606,0x2000b10f,0xf502e01b,
+0x681d534c,0x3848f8d2,0x68186bc4,0xfa42f7f9,0x047ff004,0x46214602,
+0xf7f84628,0xb2c2fa59,0xb250b12a,0xbfcc2860,0xf1c0463a,0x68700260,
+0xf7f54902,0xe8bdfe69,0x46c081f0,0x0001b778,0x47f0e92d,0xb0b64605,
+0x20006846,0x46142a0f,0x80f8f8dd,0x90fcf8dd,0xa100f8dd,0xd0019034,
+0xd1012a13,0xe00b4607,0x0301f002,0x46309300,0x9b414652,0xfd30f7f5,
+0x28004607,0x833ff040,0x0f03f1b9,0xa834d904,0x22044641,0xf934f7ec,
+0x2b1c1ea3,0x8331f200,0xf013e8df,0x032f001d,0x0059032f,0x032f032f,
+0x005e032f,0x00e3032f,0x0124032f,0x01a0032f,0x01d4032f,0x022b032f,
+0x02500264,0x02a0032f,0x032f02b3,0x02cb02c6,0x0311032f,0xf10d02e6,
+0x497e04c3,0x46202205,0xf90af7ec,0x223c2100,0xf7ec4650,0x4630f8e5,
+0x223ca904,0xfd62f7f1,0x28004607,0x82fff040,0xf7ec4620,0x4621f82f,
+0xbf342808,0x22084602,0xf7ec4650,0x4870f815,0xf824f7ec,0x2820496e,
+0x4602bf34,0xf10a2220,0xf7ec0008,0x9b0ff809,0x3028f8ca,0xf8ca9b07,
+0x9b0b302c,0x3030f8ca,0xf8ca9b09,0x9b0d3034,0x3038f8ca,0xf8d6e2d7,
+0xf7f1073c,0xe2d2fa3b,0x0f13f1b9,0x82c7f240,0x4641a828,0xf7ec2214,
+0x6b6bf8c7,0xf0402b00,0x462882c1,0x10a1f99d,0x20a0f99d,0xf7ff3301,
+0x4607fee9,0xf0402800,0xab2b82ba,0xe8934628,0xf7ff0006,0x4607fe4d,
+0xf0402800,0x463082b0,0x10a2f99d,0x20acf89d,0xfe38f7ff,0x28004607,
+0x82a5f040,0x30a4f89d,0x3045f885,0x534cf506,0xf89d6818,0xf7f810a5,
+0xb108f9fb,0xe2964607,0xf7ff4628,0x4607ff0b,0xf0402800,0x6beb8290,
+0xf003493e,0x2b04037f,0xf88dbf18,0xf89d00a3,0x463020a3,0xfd88f7f5,
+0x28004607,0x827ff040,0xa8132220,0xf7ec4639,0x2301f857,0x9b2a9313,
+0x6beb9314,0x037ff003,0xd0052b02,0xd0032b04,0xd0012b0b,0xd1022b16,
+0x7380f44f,0xf44fe001,0x93166380,0x2200ab13,0x23209300,0x24019301,
+0x49274630,0x94024613,0xf7f59203,0x4607fcf3,0xf0402800,0x6b6b8254,
+0x4044f885,0x636b4323,0xf1b9e24d,0xf2400f01,0xf10d8242,0x464100d5,
+0xf7ec2202,0x6b6bf841,0xf0402b00,0x4628823b,0x10d6f99d,0x20d5f99d,
+0xf7ff3301,0x4607fe63,0xf0402800,0x46308234,0xfab0f7f2,0x30d6f89d,
+0x70d7f88d,0x23019333,0x2848f8d6,0xf10d9300,0x970103d7,0x68109302,
+0x2204215c,0xf7fdab33,0x4607fd4f,0xf0402800,0x6b6b821a,0x0302f043,
+0xe214636b,0x0001b833,0x0001a078,0x0001b729,0x0001b754,0x0f1ff1b9,
+0x8201f240,0x0a6cf10d,0x46414650,0xf7eb2220,0x6b6bffff,0xf0402b00,
+0x462881f9,0x106df99d,0x206cf99d,0xf7ff3301,0x4607fe21,0xf0402800,
+0xab2181f2,0xe8934628,0xf7ff0006,0x4607fd85,0xf0402800,0x463081e8,
+0x106ef99d,0x2084f89d,0xfd70f7ff,0x28004607,0x81ddf040,0x3070f89d,
+0xf8856c29,0xb1293045,0x534cf506,0xb2496818,0xf95cf7f8,0xf7ff4628,
+0x4607fe45,0xf0402800,0xf10d81ca,0x4640084c,0x22204639,0xffa0f7eb,
+0x9314231c,0xf04f9b20,0x93150901,0x3072f8bd,0x904cf8cd,0xf89d9316,
+0xb10b306f,0x905cf88d,0x0411f108,0x0108f10a,0x46202206,0xffa8f7eb,
+0x010ef10a,0x46202206,0xffa2f7eb,0x93012320,0x463b463a,0x49a84630,
+0xf8cd9703,0xf8cd8000,0xf7f59008,0x4607fc33,0xf0402800,0xf8858194,
+0xe1909044,0xb9236b6b,0x3044f895,0xf0002b00,0xf506818a,0x6818534c,
+0xf7f82100,0x4607f8e5,0x28004680,0x817ff040,0x3044f895,0xac13b1bb,
+0x22204639,0xf7eb4620,0x2302ff53,0x331e9313,0x23019301,0x463a9302,
+0x4630463b,0x9703498e,0xf7f59400,0x4607fc03,0xf0402800,0x6b6b8164,
+0xf0002b00,0xf8c58160,0xe0778034,0x0f0bf1b9,0x8151f240,0x09b7f10d,
+0x220c4641,0xf7eb4648,0x4628ff4f,0x10b8f99d,0x20b7f99d,0xf7ff2301,
+0x4607fd75,0xf0402800,0x21018146,0xac134628,0xfd1cf7ff,0x46202220,
+0xf7eb4639,0x2304ff19,0xf89d9313,0xf10430ba,0xf0130011,0xd0090f01,
+0xf5062301,0xf8855146,0x31423030,0xf7eb2206,0xe006ff27,0x0103f109,
+0xf7eb2206,0xf885ff21,0xf89d7030,0xb11330b9,0xf88d2301,0xf885305c,
+0xab133031,0x93002200,0x93012320,0x46302401,0x46134961,0x92039402,
+0xfba8f7f5,0x28004607,0x8109f040,0x4032f885,0xf895e105,0x2b003032,
+0x8101f000,0x4620ac13,0x22202100,0xfed8f7eb,0x93132308,0x94003318,
+0x24009301,0x93022301,0x46224951,0x46304623,0xf7f59403,0x4621fb87,
+0x46284607,0xfcc2f7ff,0x4032f885,0xf7ff4628,0xe0e0fc97,0xb9647c74,
+0x0008f105,0x011cf105,0xf7eb2214,0x235ffed5,0x402df885,0x302cf885,
+0x4628e0d1,0xf7ff2101,0xe0ccfca9,0xb1337c73,0x3032f895,0x4628b11b,
+0xf7ff2100,0x69ebfc9f,0x429368aa,0x1a9bd301,0x43dbe001,0x9323189b,
+0x3031f895,0x6a2bb13b,0x429368ea,0x1a9bd301,0x43dbe001,0x9324189b,
+0x6a6b692a,0xd3014293,0xe0011a9b,0x189b43db,0x696a9325,0x42936aab,
+0x1a9bd301,0x43dbe001,0x9326189b,0x302df895,0xf88d4650,0xf895309d,
+0xa923302c,0xf88d2214,0xe06d309c,0x0f01f1b9,0x8085f240,0x22024641,
+0x00d5f10d,0xfe84f7eb,0xf99d4628,0xf99d10d6,0x230120d5,0xfcaaf7ff,
+0x2200e073,0x2404ad33,0x49164630,0x95004613,0x92029401,0xf7f59203,
+0x4607fb0d,0xd16e2800,0x46294650,0xe0474622,0xf1064650,0x2206014c,
+0xf8d6e042,0xf7f0073c,0x4641ffc9,0xf1062206,0xf7eb004c,0xf8d6fe59,
+0x46410dc8,0x220630da,0xfe52f7eb,0x073cf8d6,0xffcaf7f0,0x46c0e04f,
+0x0001b754,0x0001b749,0x08c8f10d,0x46502400,0x22044641,0xf7eb9432,
+0x7c73fe3f,0xd03e2b00,0xf8d62201,0x92003848,0x02d7f10d,0x94019202,
+0x21aa6818,0xab332204,0xfb62f7fd,0xbb704607,0x3033f895,0xd0282b01,
+0x30ccf89d,0xfb932204,0x9332f3f2,0x46414650,0xfe1ef7eb,0x7c73e01f,
+0xf8d6b91b,0xf7f0073c,0x9b34ff93,0x91340099,0x0044f895,0xb1406429,
+0x534cf506,0xb2496818,0xff98f7f7,0xf7ff4628,0x4607fc81,0xf06fe007,
+0xe004070d,0x37fff04f,0xf06fe001,0x46380716,0xe8bdb036,0x46c087f0,
+0xf0137c83,0xd0030f07,0xf0137903,0xd0050f01,0x4a05780b,0x0307f003,
+0xe0035cd0,0x2305780a,0xf0f3fbb2,0x46c04770,0x0001b620,0x9f05b5f0,
+0x46162400,0x46a4461d,0xeb00e015,0xf893030c,0xb116e004,0x0f80f01e,
+0xb12dd00b,0xf00e4a09,0x56d3037f,0xdb042b00,0xea0e190a,0x71130307,
+0xf10c3401,0x68030c01,0xd3e6459c,0x600c7d03,0xbdf0750b,0x0001bae4,
+0x2200b500,0x48074686,0xf85000d1,0x459e3032,0x180bd102,0xe0047918,
+0x2a0c3201,0xf04fd1f3,0xbd0030ff,0x0001ba84,0x18c06803,0xf00078c0,
+0x4770007f,0xb5104603,0x22284608,0xf7eb4619,0xbd10fd9b,0xb09db5f0,
+0x460e4604,0xf10d4617,0x21000003,0xf7eb226d,0x6825fd6f,0xe00f2000,
+0x79191823,0x027ff001,0xd8082a6c,0x5c9b4b17,0xf10db12b,0xeb0e0e70,
+0xf8030302,0x30011c6d,0xd1ed42a8,0x46082100,0x1833e00c,0xaa1c791b,
+0x037ff003,0xf81318d3,0xb1122c6d,0x711a1863,0x30013101,0x42986833,
+0x6021d3ef,0xb157b149,0x18a32200,0x3004f993,0xdb042b00,0x428a3201,
+0x2000d1f7,0x2001e000,0xbdf0b01d,0x0001bae4,0x4370e92d,0x4606b08c,
+0x2054f89d,0x48114b10,0x2a14ac02,0x4618bf08,0xbf142900,0x46804688,
+0xf89d4621,0xf89d9048,0xf7ff5050,0x9b13ff9b,0x93004620,0x22004631,
+0x9501464b,0xff52f7ff,0x46414630,0xf7ff2200,0xb00cff95,0x8370e8bd,
+0x0001ba0c,0x0001ba5c,0xb09db530,0x460d4604,0x0003f10d,0x226d2100,
+0xfcfef7eb,0xe0112000,0x79191823,0x027ff001,0xd80a2a6c,0x5c9b4b1c,
+0xab1cb13b,0xf812189a,0xea413c6d,0xf8020303,0x30013c6d,0x42986823,
+0x2000d3ea,0x182be011,0xf0017919,0x2a6c027f,0x4b11d80a,0xb13b5c9b,
+0x189aab1c,0x3c6df812,0x0303ea41,0x3c6df802,0x682b3001,0xd3ea4298,
+0x60232300,0xf10d4618,0x5cc10303,0x6823b131,0x330118e2,0x71112b10,
+0xd8026023,0x286d3001,0xb01dd1f1,0x46c0bd30,0x0001bae4,0x37f8f8d0,
+0x47707898,0xeb006983,0x8b800043,0x46c04770,0x29beb530,0x461cb085,
+0x69009d08,0xdc04d02d,0xd01c29bc,0xd02129bd,0xf240e008,0x42991301,
+0xf5b1d007,0xd00b7f81,0xd02529bf,0x0016f06f,0x4917e02c,0x22009200,
+0x92029401,0xe0229503,0x23014913,0x94019200,0x95039302,0x4911e01a,
+0x22009200,0x92029301,0xe0149503,0x9301490d,0x92002301,0x95039302,
+0x490be00c,0x22009200,0x92029301,0xe0069503,0x49072301,0x94019200,
+0x95039302,0x46132200,0xf928f7f5,0xbd30b005,0x0001bb7c,0x0001bb8e,
+0x0001bb9d,0x7883b510,0x69014602,0x8803b183,0x0f08f013,0xf023d00c,
+0xf0430308,0x80030380,0x073cf8d1,0x11f8f8d2,0x46132200,0xfbeaf7f0,
+0x46c0bd10,0xb5106903,0xf8d44604,0xf8d311f8,0xf7f0073c,0xb908fd9d,
+0xe0043001,0x33fff04f,0x31e2f884,0xf04f2000,0x61a333ff,0x70a33301,
+0x46c0bd10,0x41ffe92d,0x320ef890,0xf8d04604,0xb1431214,0x21e2f990,
+0x23243924,0x1503fb02,0x81e3f990,0xf8d0e002,0x460d8210,0xe0172600,
+0x320ef894,0x682f6920,0x461ab90b,0xf8d4e001,0x4b092230,0x22009201,
+0x92039202,0x463a1d29,0xf7f39300,0xf894fba7,0xb903320e,0x36013524,
+0xdbe54546,0x81ffe8bd,0x0001bbc4,0x6905b537,0x46284604,0xfea8f7f1,
+0x11e0f8b4,0x24004628,0xfa62f7f5,0xf8854628,0xf7f14d36,0x4628f90b,
+0xfdc6f7f1,0x3848f8d5,0xf7fb6818,0x4628f855,0xfd1af7f2,0x3de0f895,
+0xf0234628,0xf8850301,0x23033de0,0x21019300,0xf44f4623,0xf7f16282,
+0xf8b5fc11,0xb12b3dea,0x615ef505,0x31044628,0xfa78f7f4,0x46c0bd3e,
+0x41ffe92d,0x46046905,0x3844f8d5,0xb1637a1b,0x380cf8d5,0x2120f8d3,
+0x4304f240,0x0303ea02,0x6080f5b3,0x2001bf18,0x68a8e005,0xf940f7ea,
+0xbf183800,0xb1202001,0x073cf8d5,0xfd32f7f0,0xf994e181,0xf11331e2,
+0xd1030f02,0xf8843301,0xe17831e2,0x2b007c6b,0x8175f000,0xf0128822,
+0xd0100f40,0x73bff64f,0x0303ea02,0x46288023,0xf976f7f1,0x4628b938,
+0xff62f7f1,0xf0438823,0x80230308,0xf894e15f,0x330131e2,0x31e2f884,
+0xeb0469a3,0x8b9e0343,0x53a2f505,0x332cb2f2,0x0ed2ea4f,0x300ef813,
+0x0707f002,0xf013413b,0xbf0c0f01,0x81e4f894,0x0801f04f,0x21e2f994,
+0xf388fa4f,0xdd59429a,0x428a1c59,0x8822d105,0x73eff64f,0x0303ea02,
+0xf8d48023,0x69a231dc,0x429a3b01,0x20ffdb01,0xeb04e002,0x8bd80342,
+0xf0138823,0xbf1c0380,0x31f0f8d4,0xf8c43301,0xf99431f0,0x428b31e2,
+0xf8b4d12f,0xb36331e6,0xd03328ff,0x21f0f8d4,0x31ecf8d4,0xda11429a,
+0x51a2f505,0xf811312c,0x413b300e,0x0f01f013,0xb2c3d108,0x5c8a08da,
+0x0307f003,0xf012411a,0xd0140f01,0xf7ff4620,0x8822ff25,0x737ff64f,
+0x0303ea02,0xf8d58023,0xf8d4073c,0xf8b411f8,0x230021e6,0xfab2f7f0,
+0x28ffe0ed,0x69a3d006,0x33014606,0x230061a3,0x31e2f884,0x31e2f894,
+0xf895bb4b,0xb31b3024,0xf0138823,0xd11f0f80,0x3848f8d5,0xf7f86818,
+0xf8b4fbe9,0x429831e0,0x4628d116,0xf8dcf7f1,0x8823b968,0x0f20f013,
+0x4628d106,0xfec4f7f1,0xf0438823,0xe0010308,0x0340f043,0x88238023,
+0x0f28f013,0x80bbf040,0xf8842301,0xf99431e2,0x2a0021e2,0x808ff340,
+0xf388fa4f,0xf300429a,0xf8b4808a,0xf7f601e0,0xb2f7fd3d,0xd0084287,
+0xf44f2303,0x93006282,0x21014628,0xf7f14613,0xf8d5fb01,0x68183848,
+0xfbacf7f8,0xd0094286,0xf7f14628,0x4628fd69,0xf7f54631,0x4628f925,
+0xfc8ef7f1,0x3024f895,0xf8b4b143,0x429e31e0,0xf895d004,0xf0433de0,
+0xe0030301,0x3de0f895,0x03fef003,0x3de0f885,0x23016925,0x3d36f885,
+0xf7f04628,0x8823ffb7,0x0f04f013,0xf505d10a,0x08fa53a2,0x5c9b332c,
+0x0207f007,0xf0134113,0xd01a0f01,0x320ef894,0x69a2b13b,0x1224f8d4,
+0xfb02230c,0x689a1303,0xf8b4b90a,0xf8d521ea,0xf8d4073c,0x230011f8,
+0xfa14f7f0,0xf5044628,0xaa0371fa,0xfc5ef7f1,0xf894e01d,0xb14b320e,
+0xf8d469a2,0x230c1224,0x1303fb02,0xb10a689a,0xe0054616,0x21e8f8b4,
+0x31e4f994,0xf6f3fb92,0xf7ff4620,0xf8d5fe27,0xf8d4073c,0x463211f8,
+0xf7f02300,0xf8d5f9ef,0x21023848,0x463a6818,0xfc2af7f8,0x4620e023,
+0xfe48f7ff,0xf64f8822,0xea02737f,0x26000303,0xf04f8023,0x61a333ff,
+0x70a64628,0xfe18f7f1,0x37f8f8d5,0x21fcf8d3,0x0200f8d3,0x61fcf8c3,
+0x6200f8c3,0x4631b10a,0xf5054790,0x462851a4,0xf7f3311c,0xe8bdf919,
+0x46c081ff,0x7883b537,0x69054604,0xd0412b00,0x3848f8d5,0xf7f86818,
+0xf8b4fb05,0x428331e0,0x4628d00a,0xfcc0f7f1,0xf8b44628,0xf7f511e0,
+0x4628f87b,0xfbe4f7f1,0x3848f8d5,0xf7fa6818,0x4628fe73,0xfb38f7f2,
+0x3de0f895,0xf0232101,0xf8850301,0x23033de0,0x46289300,0xf44f2300,
+0xf7f16282,0x8823fa2f,0x0380f023,0xf06f8023,0xf8840301,0x330131e2,
+0x330161a3,0x882370a3,0x0f28f013,0xf023d006,0x80230328,0x07f8f8d5,
+0xfe12f7ff,0x46c0bd3e,0x4604b570,0x460d78a3,0xb1436900,0x51a4f500,
+0xf7f3311c,0x4620f8c1,0xf7ff4629,0xbd70ffa7,0xf8d0b108,0x47700270,
+0xb109460b,0x3270f8d1,0x47706003,0x68004602,0xf8d0b118,0x60133270,
+0x6010e000,0x46c04770,0x461db530,0x4354f241,0x58c1468e,0x6a4a4614,
+0xd9022a09,0x30fff04f,0x1c53e010,0x9b03624b,0x1202eb01,0x9b046313,
+0x63536294,0x6a0a62d5,0x44731cd3,0x0303f023,0x4610620b,0x46c0bd30,
+0x20004684,0x4686b500,0xfb002314,0xf241c303,0x589b323c,0xd0054299,
+0x0e01f10e,0xf1be3001,0xd1f10f08,0x46c0bd00,0xb530b082,0xfb012414,
+0xf2410404,0x9304313c,0x9b065063,0xf5049d07,0x600b519a,0x3344f241,
+0x50e59905,0x50e13304,0x50e23304,0x4030e8bd,0x4770b002,0x4ff0e92d,
+0xfb022414,0xb0870404,0x5498f504,0x343cad01,0x46804617,0xcc0f4689,
+0x6823c50f,0xa00cf8dd,0x4b1d602b,0xb014f8dd,0x5027f853,0x230c2400,
+0x9303fb04,0xf8d34640,0xf7ff11ec,0x4686ffb1,0x4b15b130,0x3020f853,
+0xd20142ab,0xe7ee4604,0xfb072214,0x210c8002,0x9501fb04,0x363cf241,
+0xfb0e5983,0xf2418202,0xf8c5344c,0xfb0731ec,0x59039101,0x31f0f8c5,
+0xf8c15993,0x591331ec,0x31f0f8c1,0x0f00f1ba,0x4658d002,0x47d04649,
+0xe8bdb007,0x46c08ff0,0x0001bbcc,0x43f0e92d,0xfb022414,0xb0870404,
+0x5498f504,0x343cad01,0x46174689,0xcc0f4680,0x6823c50f,0x602b9a02,
+0xfb07230c,0xf8d39303,0x980531ec,0xb10ab35b,0x47904649,0x240c2000,
+0x9604fb00,0xf8d64640,0xf7ff11ec,0x42b8ff5d,0xfb07d1f5,0x46409504,
+0x11ecf8d5,0xff54f7ff,0xfb002414,0xf2418004,0x58c3333c,0xf8c64640,
+0xf8d531ec,0xf7ff11ec,0xfb00ff47,0xf2418404,0x58e3334c,0x31f0f8c6,
+0xf8c52300,0xb00731ec,0x83f0e8bd,0xfb022314,0xb5700303,0xf2414614,
+0x589b323c,0x460d4606,0xd0312b00,0xfb04230c,0xf5031303,0x791372f8,
+0x3301bb53,0x71132c02,0xf8d1d105,0xbb1b321c,0x3210f8d1,0x2c03e01a,
+0x2202d106,0xff96f7ff,0x46294630,0xe0022204,0xd1032c06,0xf7ff2205,
+0xe00cff8d,0xd0022c04,0xd0052c05,0xf8d1e007,0xb94b3210,0xe7f22202,
+0x3234f8d1,0x4630b923,0x46224629,0xff2af7ff,0x46c0bd70,0x1274f8d0,
+0x30f0b510,0x22003174,0xfb0cf7ff,0x46c0bd10,0x4354f241,0x58c3b570,
+0xeb03460d,0x699c0382,0x4628e008,0x0119f104,0xf7ea2206,0xb118ffa1,
+0x426cf8d4,0xd1f42c00,0xbd704620,0xf7ffb510,0xbd10ffe7,0x3848f8d0,
+0x689ab510,0xffe0f7ff,0x46c0bd10,0x41f0e92d,0x4354f241,0x7e0b58c6,
+0x460c4680,0xd1642b00,0xf413684b,0xd1600280,0x0380f443,0x46174635,
+0xe006604b,0xb1136aeb,0x46216b68,0x37014798,0x6a733510,0xd3f5429f,
+0x27004625,0x1118f8d5,0xf8d8b149,0x22000048,0xfb6af7ed,0xf8c52300,
+0xf8c53118,0x1c7b3138,0x3504b2df,0xd1ed2f08,0x73232300,0xf0137e63,
+0xd1170f01,0x3274f8d4,0xeb06689b,0x698a0183,0xd10d42a2,0x326cf8d4,
+0xe00b618b,0x326cf8d2,0xd10442a3,0x326cf8d4,0x326cf8c2,0x461ae002,
+0xd1f32a00,0x42a26832,0x4620d10e,0xfe44f7ff,0xe00b6030,0x3270f8d2,
+0xd10442a3,0x3270f8d4,0x3270f8c2,0x461ae002,0xd1f32a00,0x0048f8d8,
+0x6a324621,0xfb48f7ed,0x20018ab3,0x82b33b01,0x2000e000,0x81f0e8bd,
+0xf241b537,0x59034454,0x68194605,0xf7ffa801,0x592bfe23,0xe00d681c,
+0xf7ff4620,0xf8d4ff53,0xb91b30f0,0x46214628,0xff78f7ff,0xf7ffa801,
+0x4604fe19,0xd1ef2c00,0x46c0bd3e,0xf241b573,0x460e4554,0x46045941,
+0x6809b191,0xf7ffa801,0x5963fe03,0xe0096819,0x2300b10e,0x4620760b,
+0xff5cf7ff,0xf7ffa801,0x4601fdfd,0xd1f32900,0x46c0bd7c,0x47ffe92d,
+0x4354f241,0x8003f850,0xf8b84605,0x468a3014,0xd8072b07,0xf8d82100,
+0xf7ed0020,0x4601f919,0xd1292800,0x4454f241,0x6819592b,0xf0002900,
+0xa803809a,0x770cf8d5,0xfdd2f7ff,0x2400592b,0x46266818,0x7e03e00b,
+0x6a03b933,0x0307ebc3,0xbf2442b3,0x4604461e,0xf7ffa803,0x2800fdc7,
+0x2c00d1f1,0xe081d07f,0xf8d82100,0xf7ed0020,0x4601f8ef,0xd0762800,
+0x3014f8b8,0x3301460e,0x3014f8a8,0xf8d84608,0x21002020,0xff6cf7ea,
+0x370cf8d5,0x623346b1,0x5342f505,0xf8c63368,0x6173a274,0x18b32200,
+0xf04f3202,0x2a1031ff,0x1158f8a3,0x4644d1f7,0xe0062700,0xb1136aa3,
+0x46316b60,0x37014798,0xf8d83410,0x429f3024,0x7c6bd3f4,0xf241b18b,
+0x46287370,0x22005ae9,0xf9ecf7f6,0xf895b148,0xb1133024,0x744af505,
+0xf505e005,0x343454ba,0xf10ae001,0x7dab0414,0x237fb143,0x46209300,
+0xf1062300,0x220101f0,0xe01f9301,0x2023f895,0xf89ab9a2,0xb18b300c,
+0x05f0f106,0x4620277f,0x23014629,0x97009201,0xf958f7ff,0x20f0f8d6,
+0x4620b972,0x97004629,0xe0069201,0x2200237f,0x92019300,0xf1064620,
+0x461301f0,0xf946f7ff,0x3000f8d8,0x6000f8c8,0x3270f8c6,0xf04fe009,
+0xe0060900,0x46214628,0xfe98f7ff,0xd0f62800,0x4648e776,0xe8bdb004,
+0x46c087f0,0x41f0e92d,0x460f4605,0xf7ff4616,0x4604fe67,0xf44fb9e0,
+0xfb06719c,0xf501f101,0x18696128,0x31044628,0xff28f7ff,0xb1784604,
+0xf1002206,0x46390019,0xfef6f7ea,0x4354f241,0x62a658eb,0x0386eb03,
+0x619c699a,0x226cf8c4,0xe8bd4620,0x46c081f0,0xf7ffb510,0xbd10ffd3,
+0x4ff0e92d,0xb08d4f59,0x49596838,0xfc4af7ea,0xd0452801,0xe184f8df,
+0xf8de4c56,0x48561000,0x6821910b,0x91096803,0x930a4954,0x2200680b,
+0x4b539308,0xb000f8d2,0x4d534e52,0x6003600a,0x48534952,0x8000f8d7,
+0x9000f8d6,0xa000f8d5,0xf8ce603a,0x602a2000,0x60226032,0x3a011a09,
+0xfb72f7ea,0x42984b4b,0x4b40d1fc,0xf8c32100,0x4b448000,0x9000f8c3,
+0xf8c34b43,0x680aa000,0x601a4b45,0xb000f8c1,0x990b4b44,0x60199a0a,
+0x99094b39,0x4b37601a,0x60199a08,0x601a4b37,0xf8aaf7ed,0x46072100,
+0xfe4cf7e9,0x21004638,0xfdc6f7e9,0x6a03b128,0xbfbc2b00,0x4300f04f,
+0x46386203,0x8030f8d7,0x9034f8d7,0xfcaaf7e9,0xfbb04c33,0x4638f6f4,
+0xfcaef7e9,0xf5f4fbb0,0xf7ed4638,0x4b2ffd4d,0xf0f4fbb0,0x4b2e9300,
+0x93019006,0x4a2e492d,0x4b2f482e,0x8008f8cd,0x900cf8cd,0x95059604,
+0xfe7ef7ea,0xf640482b,0xf244010d,0xf7ec32f4,0xb148fdc1,0xf6404827,
+0xf2440129,0xf7ec32f4,0xb108fdb9,0xe0002400,0x46382401,0xfc22f7e9,
+0x73fff64f,0x3218f244,0xbf184298,0xf6404602,0x481d0112,0xfda6f7ec,
+0x481ab11c,0x685b6a03,0xf7ed4798,0x4638fce9,0xfd42f7ec,0xe8bdb00d,
+0x46c08ff0,0x0001bc3c,0x0001bbf4,0x000001bc,0x000001b0,0x000001c4,
+0xbbadbadd,0x0001bc40,0x0001bc38,0x00025018,0x00000000,0xdebb20e3,
+0x000001b4,0x000001c0,0x000f4240,0x0001a337,0x0001a078,0x0001bc2a,
+0x0001bc2f,0x0001bbfa,0x0001bc33,0x0001bc78,0x0001bcb4,0x004c9000,
+0x02f25000,0x50000000,0x000102f2,0x01f25000,0xf2500000,0x18100000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000001,0x00000002,
+0x00000001,0x69766564,0x6c770064,0x00646930,0x252f6273,0x70002f75,
+0x69646f72,0x6f620064,0x74647261,0x00657079,0x72616f62,0x616c6664,
+0x78007367,0x666c6174,0x00716572,0x6464656c,0x08080063,0x08080808,
+0x28080808,0x28282828,0x08080808,0x08080808,0x08080808,0x08080808,
+0x10a00808,0x10101010,0x10101010,0x10101010,0x04041010,0x04040404,
+0x04040404,0x10101010,0x41101010,0x41414141,0x01010141,0x01010101,
+0x01010101,0x01010101,0x01010101,0x10101001,0x42101010,0x42424242,
+0x02020242,0x02020202,0x02020202,0x02020202,0x02020202,0x10101002,
+0x00000810,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x10a00000,0x10101010,0x10101010,0x10101010,
+0x10101010,0x10101010,0x10101010,0x10101010,0x01011010,0x01010101,
+0x01010101,0x01010101,0x01010101,0x01010101,0x01011001,0x01010101,
+0x02020201,0x02020202,0x02020202,0x02020202,0x02020202,0x02020202,
+0x02021002,0x02020202,0x73250202,0x6425203a,0x25000a20,0x20783230,
+0x25632500,0x00783330,0x65646e55,0x656e6966,0x72652064,0x20726f72,
+0x25006425,0x64252e64,0x2e64252e,0x67006425,0x256f6970,0x70670064,
+0x58586f69,0x4f005858,0x6e55004b,0x69666564,0x2064656e,0x6f727265,
+0x61420072,0x72412064,0x656d7567,0x4200746e,0x4f206461,0x6f697470,
+0x6f4e006e,0x70752074,0x746f4e00,0x776f6420,0x6f4e006e,0x50412074,
+0x746f4e00,0x41545320,0x64614200,0x79654b20,0x646e4920,0x52007865,
+0x6f696461,0x66664f20,0x746f4e00,0x6e616220,0x6f6c2064,0x64656b63,
+0x206f4e00,0x636f6c63,0x6142006b,0x61522064,0x76206574,0x65756c61,
+0x00746573,0x20646142,0x646e6142,0x66754200,0x20726566,0x206f6f74,
+0x726f6873,0x75420074,0x72656666,0x6f6f7420,0x6e6f6c20,0x75420067,
+0x4e007973,0x4120746f,0x636f7373,0x65746169,0x61420064,0x53532064,
+0x6c204449,0x4f006e65,0x6f207475,0x61522066,0x2065676e,0x6e616843,
+0x006c656e,0x20646142,0x6e616843,0x006c656e,0x20646142,0x72646441,
+0x00737365,0x20746f4e,0x756f6e45,0x52206867,0x756f7365,0x73656372,
+0x736e5500,0x6f707075,0x64657472,0x64614200,0x6e656c20,0x00687467,
+0x20746f4e,0x64616552,0x6f4e0079,0x65502074,0x74696d72,0x00646574,
+0x4d206f4e,0x726f6d65,0x6f4e0079,0x6e492074,0x6e615220,0x57006567,
+0x4e20454d,0x4520746f,0x6c62616e,0x54006465,0x43455053,0x746f4e20,
+0x756f4620,0x4100646e,0x4e204d43,0x5320746f,0x6f707075,0x64657472,
+0x746f4e00,0x454d5720,0x73734120,0x6169636f,0x6e6f6974,0x49445300,
+0x7542204f,0x72452073,0x00726f72,0x676e6f44,0x4e20656c,0x4120746f,
+0x73656363,0x6c626973,0x6e490065,0x72726f63,0x20746365,0x73726576,
+0x006e6f69,0x78323025,0x3230253a,0x30253a78,0x253a7832,0x3a783230,
+0x78323025,0x3230253a,0x00000078,0x00000000,0x77073096,0xee0e612c,
+0x990951ba,0x076dc419,0x706af48f,0xe963a535,0x9e6495a3,0x0edb8832,
+0x79dcb8a4,0xe0d5e91e,0x97d2d988,0x09b64c2b,0x7eb17cbd,0xe7b82d07,
+0x90bf1d91,0x1db71064,0x6ab020f2,0xf3b97148,0x84be41de,0x1adad47d,
+0x6ddde4eb,0xf4d4b551,0x83d385c7,0x136c9856,0x646ba8c0,0xfd62f97a,
+0x8a65c9ec,0x14015c4f,0x63066cd9,0xfa0f3d63,0x8d080df5,0x3b6e20c8,
+0x4c69105e,0xd56041e4,0xa2677172,0x3c03e4d1,0x4b04d447,0xd20d85fd,
+0xa50ab56b,0x35b5a8fa,0x42b2986c,0xdbbbc9d6,0xacbcf940,0x32d86ce3,
+0x45df5c75,0xdcd60dcf,0xabd13d59,0x26d930ac,0x51de003a,0xc8d75180,
+0xbfd06116,0x21b4f4b5,0x56b3c423,0xcfba9599,0xb8bda50f,0x2802b89e,
+0x5f058808,0xc60cd9b2,0xb10be924,0x2f6f7c87,0x58684c11,0xc1611dab,
+0xb6662d3d,0x76dc4190,0x01db7106,0x98d220bc,0xefd5102a,0x71b18589,
+0x06b6b51f,0x9fbfe4a5,0xe8b8d433,0x7807c9a2,0x0f00f934,0x9609a88e,
+0xe10e9818,0x7f6a0dbb,0x086d3d2d,0x91646c97,0xe6635c01,0x6b6b51f4,
+0x1c6c6162,0x856530d8,0xf262004e,0x6c0695ed,0x1b01a57b,0x8208f4c1,
+0xf50fc457,0x65b0d9c6,0x12b7e950,0x8bbeb8ea,0xfcb9887c,0x62dd1ddf,
+0x15da2d49,0x8cd37cf3,0xfbd44c65,0x4db26158,0x3ab551ce,0xa3bc0074,
+0xd4bb30e2,0x4adfa541,0x3dd895d7,0xa4d1c46d,0xd3d6f4fb,0x4369e96a,
+0x346ed9fc,0xad678846,0xda60b8d0,0x44042d73,0x33031de5,0xaa0a4c5f,
+0xdd0d7cc9,0x5005713c,0x270241aa,0xbe0b1010,0xc90c2086,0x5768b525,
+0x206f85b3,0xb966d409,0xce61e49f,0x5edef90e,0x29d9c998,0xb0d09822,
+0xc7d7a8b4,0x59b33d17,0x2eb40d81,0xb7bd5c3b,0xc0ba6cad,0xedb88320,
+0x9abfb3b6,0x03b6e20c,0x74b1d29a,0xead54739,0x9dd277af,0x04db2615,
+0x73dc1683,0xe3630b12,0x94643b84,0x0d6d6a3e,0x7a6a5aa8,0xe40ecf0b,
+0x9309ff9d,0x0a00ae27,0x7d079eb1,0xf00f9344,0x8708a3d2,0x1e01f268,
+0x6906c2fe,0xf762575d,0x806567cb,0x196c3671,0x6e6b06e7,0xfed41b76,
+0x89d32be0,0x10da7a5a,0x67dd4acc,0xf9b9df6f,0x8ebeeff9,0x17b7be43,
+0x60b08ed5,0xd6d6a3e8,0xa1d1937e,0x38d8c2c4,0x4fdff252,0xd1bb67f1,
+0xa6bc5767,0x3fb506dd,0x48b2364b,0xd80d2bda,0xaf0a1b4c,0x36034af6,
+0x41047a60,0xdf60efc3,0xa867df55,0x316e8eef,0x4669be79,0xcb61b38c,
+0xbc66831a,0x256fd2a0,0x5268e236,0xcc0c7795,0xbb0b4703,0x220216b9,
+0x5505262f,0xc5ba3bbe,0xb2bd0b28,0x2bb45a92,0x5cb36a04,0xc2d7ffa7,
+0xb5d0cf31,0x2cd99e8b,0x5bdeae1d,0x9b64c2b0,0xec63f226,0x756aa39c,
+0x026d930a,0x9c0906a9,0xeb0e363f,0x72076785,0x05005713,0x95bf4a82,
+0xe2b87a14,0x7bb12bae,0x0cb61b38,0x92d28e9b,0xe5d5be0d,0x7cdcefb7,
+0x0bdbdf21,0x86d3d2d4,0xf1d4e242,0x68ddb3f8,0x1fda836e,0x81be16cd,
+0xf6b9265b,0x6fb077e1,0x18b74777,0x88085ae6,0xff0f6a70,0x66063bca,
+0x11010b5c,0x8f659eff,0xf862ae69,0x616bffd3,0x166ccf45,0xa00ae278,
+0xd70dd2ee,0x4e048354,0x3903b3c2,0xa7672661,0xd06016f7,0x4969474d,
+0x3e6e77db,0xaed16a4a,0xd9d65adc,0x40df0b66,0x37d83bf0,0xa9bcae53,
+0xdebb9ec5,0x47b2cf7f,0x30b5ffe9,0xbdbdf21c,0xcabac28a,0x53b39330,
+0x24b4a3a6,0xbad03605,0xcdd70693,0x54de5729,0x23d967bf,0xb3667a2e,
+0xc4614ab8,0x5d681b02,0x2a6f2b94,0xb40bbe37,0xc30c8ea1,0x5a05df1b,
+0x2d02ef8d,0x4eb9f700,0x6b9cd225,0x04f3bd4a,0x21d6986f,0xda2d6394,
+0xff0846b1,0x906729de,0xb5420cfb,0x31c6887f,0x14e3ad5a,0x7b8cc235,
+0x5ea9e710,0xa5521ceb,0x807739ce,0xef1856a1,0xca3d7384,0xb04709fe,
+0x95622cdb,0xfa0d43b4,0xdf286691,0x24d39d6a,0x01f6b84f,0x6e99d720,
+0x4bbcf205,0xcf387681,0xea1d53a4,0x85723ccb,0xa05719ee,0x5bace215,
+0x7e89c730,0x11e6a85f,0x34c38d7a,0xe5125cab,0xc037798e,0xaf5816e1,
+0x8a7d33c4,0x7186c83f,0x54a3ed1a,0x3bcc8275,0x1ee9a750,0x9a6d23d4,
+0xbf4806f1,0xd027699e,0xf5024cbb,0x0ef9b740,0x2bdc9265,0x44b3fd0a,
+0x6196d82f,0x1beca255,0x3ec98770,0x51a6e81f,0x7483cd3a,0x8f7836c1,
+0xaa5d13e4,0xc5327c8b,0xe01759ae,0x6493dd2a,0x41b6f80f,0x2ed99760,
+0x0bfcb245,0xf00749be,0xd5226c9b,0xba4d03f4,0x9f6826d1,0x33323130,
+0x37363534,0x62613938,0x66656463,0x756e2800,0x00296c6c,0x33323130,
+0x37363534,0x42413938,0x46454443,0x70746f00,0x696e695f,0x61662074,
+0x64656c69,0x4f000a2e,0x6c205054,0x20746665,0x62207825,0x73657479,
+0x7562203b,0x72656666,0x20782520,0x65747962,0x42000a73,0x65666675,
+0x666f2072,0x7a697320,0x64252065,0x74796220,0x74207365,0x7277206f,
+0x3a657469,0x6761000a,0x72730030,0x775f6d6f,0x65746972,0x6c6f203a,
+0x52535b64,0x5f344d4f,0x4e474953,0x7830205d,0x202c7825,0x5b646c6f,
+0x4d4f5253,0x49535f38,0x205d4e47,0x78257830,0x000d000a,0x00001501,
+0x03012ee0,0x00090016,0x00ffffef,0x010232c8,0x000b0006,0x00483483,
+0x01033840,0x000a000a,0x001c71c7,0x01043c00,0x000b0005,0x00755555,
+0x01053f48,0x0005000a,0x006e9e06,0x010641a0,0x0005000a,0x003cf3cf,
+0x01074b00,0x000b0004,0x00755555,0x01084d58,0x0004000b,0x000a57eb,
+0x01094e20,0x0004000b,0x00000000,0x030a5dc0,0x000a000b,0x00000000,
+0x050b61a8,0x000b0010,0x00000000,0x010c6590,0x00100002,0x00ec4ec4,
+0x030d7530,0x000b0008,0x00000000,0x0c0e9600,0x01130001,0x00000000,
+0x010f9c40,0x000b0002,0x00000000,0x00000000,0x00000000,0x00000000,
+0x6e696d72,0x616d7200,0x25720078,0x72007464,0x00646425,0x00200000,
+0x00000001,0x000d8020,0x00000000,0x00000200,0x000000ff,0x0000000c,
+0x00000000,0x00200000,0x00000001,0x000d8020,0x00000000,0x00002ed9,
+0x00002cf1,0x00003251,0x000029c5,0x000029dd,0x000029f1,0x00002a05,
+0x00002a85,0x000033c9,0x00002a1d,0x000034d9,0x00002aad,0x000026d1,
+0x00002715,0x0000271d,0x0000273d,0x00002bf1,0x00002d75,0x00003211,
+0x00002a4d,0x00002a35,0x0000269d,0x00002a6d,0x00003651,0x000036d5,
+0x00003631,0x00002b35,0x00002681,0x000036b9,0x0000279d,0x00000000,
+0x00000000,0x00000000,0x00002785,0x00002755,0x00000024,0x00002ed9,
+0x00002d39,0x00003351,0x000027ad,0x000027c5,0x000027d9,0x000027ed,
+0x000032c9,0x000034fd,0x00002805,0x0000360d,0x0000286d,0x000026d1,
+0x00002715,0x0000271d,0x0000273d,0x000028f5,0x00002d75,0x00003311,
+0x00002835,0x0000281d,0x0000269d,0x00002855,0x00003651,0x000036d5,
+0x00003631,0x00002b35,0x00002681,0x000036b9,0x0000279d,0x00000000,
+0x00000000,0x00000000,0x00002785,0x00002755,0x00000024,0x61787426,
+0x6c696176,0x6d654d00,0x2079726f,0x67617375,0x000a3a65,0x74786554,
+0x6425203a,0x4b642528,0x44202c29,0x3a617461,0x28642520,0x294b6425,
+0x7342202c,0x25203a73,0x64252864,0x202c294b,0x63617453,0x25203a6b,
+0x000a4b64,0x6e657241,0x6f742061,0x3a6c6174,0x28642520,0x294b6425,
+0x7246202c,0x203a6565,0x25286425,0x2c294b64,0x206e4920,0x3a657375,
+0x28642520,0x294b6425,0x5748202c,0x25203a4d,0x64252864,0x000a294b,
+0x75206e49,0x2b206573,0x65766f20,0x61656872,0x25203a64,0x64252864,
+0x202c294b,0x2078614d,0x6f6d656d,0x69207972,0x7375206e,0x25203a65,
+0x64252864,0x000a294b,0x6c6c614d,0x6620636f,0x756c6961,0x63206572,
+0x746e756f,0x6425203a,0x7453000a,0x206b6361,0x74746f62,0x68206d6f,
+0x62207361,0x206e6565,0x7265766f,0x74697277,0x0a6e6574,0x61745300,
+0x62206b63,0x6f74746f,0x30203a6d,0x2c702578,0x6d776c20,0x7830203a,
+0x202c7025,0x72727563,0x7830203a,0x202c7025,0x3a706f74,0x25783020,
+0x72460a70,0x73206565,0x6b636174,0x7830203a,0x25287825,0x6c202964,
+0x203a6d77,0x78257830,0x29642528,0x756e490a,0x73206573,0x6b636174,
+0x7830203a,0x25287825,0x68202964,0x203a6d77,0x78257830,0x29642528,
+0x756d000a,0x00776d00,0x7420776d,0x6c61746f,0x4b642520,0x0000000a,
+0x00000078,0x000000f0,0x000001e0,0x000003c0,0x00000780,0x0000103c,
+0x0a3f003f,0x52540a00,0x203a5041,0x65707974,0x2c642520,0x63706520,
+0x25783020,0x63202c78,0x20727370,0x78257830,0x7073202c,0x30207273,
+0x2c782578,0x2020000a,0x20203072,0x30257830,0x202c7838,0x30203172,
+0x38302578,0x72202c78,0x30202032,0x38302578,0x72202c78,0x30202033,
+0x38302578,0x000a2c78,0x34722020,0x78302020,0x78383025,0x3572202c,
+0x25783020,0x2c783830,0x20367220,0x25783020,0x2c783830,0x20377220,
+0x25783020,0x2c783830,0x2020000a,0x20203872,0x30257830,0x202c7838,
+0x30203972,0x38302578,0x72202c78,0x30203031,0x38302578,0x72202c78,
+0x30203131,0x38302578,0x000a2c78,0x31722020,0x78302032,0x78383025,
+0x7073202c,0x25783020,0x2c783830,0x20726c20,0x25783020,0x2c783830,
+0x20637020,0x25783020,0x0a783830,0x63657200,0x6d69616c,0x63657320,
+0x6e6f6974,0x203a3120,0x75746552,0x64656e72,0x20642520,0x65747962,
+0x6f742073,0x65687420,0x61656820,0x72000a70,0x74736d61,0x69647962,
+0x4e280073,0x7564206f,0x6572706d,0x77207367,0x6f687469,0x42207475,
+0x42444d43,0x000a2947,0x7478616d,0x746b7078,0x6d6f6c67,0x6c787400,
+0x64797a61,0x79616c65,0x67787400,0x616d6f6c,0x6e67696c,0x67787400,
+0x006d6f6c,0x77737874,0x6e656c71,0x64787400,0x00706f72,0x666b6361,
+0x66747361,0x61006477,0x69736b63,0x6874657a,0x72006473,0x6b636178,
+0x78740073,0x656c2071,0x25203a6e,0x6d203a64,0x25287861,0x000a2964,
+0x706f7264,0x20646570,0x6d617266,0x25207365,0x48000a64,0x2074736f,
+0x736b6341,0x28642520,0x6c707865,0x74696369,0x20642520,0x6970202b,
+0x62796767,0x656b6361,0x64252064,0x7562000a,0x72652073,0x73726f72,
+0x7872203a,0x6f666966,0x776f6c66,0x6425203a,0x7562000a,0x6c662073,
+0x6f63776f,0x6f72746e,0x72203a6c,0x6d696c78,0x6425203a,0x7872202c,
+0x696c5f68,0x25203a6d,0x64000a64,0x6c676e6f,0x6c662065,0x6f63776f,
+0x6f72746e,0x66203a6c,0x25203a63,0x65202c64,0x696c7078,0x3a746963,
+0x2c642520,0x69616620,0x25203a6c,0x53000a64,0x444f4944,0x50005645,
+0x49434d43,0x56454441,0x70736700,0x6f776469,0x47006472,0x20495053,
+0x726f7744,0x6f4d2064,0x65206564,0x6c62616e,0x000a6465,0x49505347,
+0x6f774420,0x4d206472,0x2065646f,0x61736944,0x64656c62,0x7562000a,
+0x61747373,0x73007374,0x6d637064,0x63646364,0x25006425,0x42203a73,
+0x64616f72,0x206d6f63,0x43504453,0x4320444d,0x64204344,0x65766972,
+0x62000a72,0x003a7375,0x00306c77,0x008f0080,0x00ad009e,0x2578300a,
+0x3a783430,0x78302000,0x78343025,0x00400000,0x005e004f,0x0080006d,
+0x009e008f,0x008d00ad,0x00af009e,0x00de00cd,0x010d00ef,0x012f011e,
+0x00000002,0x00040160,0x03010005,0x00040164,0x00140000,0x00040124,
+0x00000004,0x00040128,0x00000000,0x0004012c,0x00000000,0x00040130,
+0x00000000,0x00040134,0x0070040a,0x00040134,0x00d4beef,0x00040134,
+0xff000005,0x00040134,0xff02ff01,0x00040130,0x00000018,0x00040134,
+0x00e0040a,0x00040134,0x0048beef,0x00040134,0xff000005,0x00040134,
+0xff02ff01,0x00040134,0x01181000,0x00040134,0x10000302,0x00040134,
+0xf3f2f118,0x00040134,0x0000ccbb,0x00040130,0x00000038,0x00040134,
+0x00000000,0x00040130,0x00000058,0x00040134,0x00000000,0x00040130,
+0x00000038,0x00040134,0x0700200f,0x00040134,0x00940000,0x00040134,
+0x90000000,0x00040134,0x77767574,0x00040134,0x00000000,0x00040134,
+0x00050000,0x00040134,0xffffffff,0x00040130,0x00000268,0x00040134,
+0x0033846e,0x00040134,0x0050badc,0x00040134,0xab0000d4,0x00040134,
+0xdabadaba,0x00040134,0xf1181000,0x00040134,0x1000f3f2,0x00040134,
+0xf3f2f118,0x00040134,0x00000010,0x00040134,0x00000000,0x00040134,
+0x000a0000,0x00040134,0x0e000001,0x00040134,0x4d435242,0x00040134,
+0x5345545f,0x00040134,0x53535f54,0x00040134,0x04014449,0x00040134,
+0x968b8482,0x00040134,0x06010103,0x00040134,0x00000002,0x00040130,
+0x00000068,0x00040134,0x0228040a,0x00040134,0x0080badc,0x00040134,
+0xffff0000,0x00040134,0xffffffff,0x00040134,0xf1181000,0x00040134,
+0x1000f3f2,0x00040134,0xf3f2f118,0x00040134,0x0000afd0,0x00040134,
+0x00000000,0x00040134,0x01000000,0x00040134,0x0e000002,0x00040134,
+0x4d435242,0x00040134,0x5345545f,0x00040134,0x53535f54,0x00040134,
+0x04014449,0x00040134,0x968b8482,0x00040134,0x06010103,0x00040134,
+0x00000102,0x00040130,0x00000468,0x00040134,0x0228040a,0x00040134,
+0x0080badc,0x00040134,0xffff0000,0x00040134,0xffffffff,0x00040134,
+0xf1181000,0x00040134,0x1000f3f2,0x00040134,0xf3f2f118,0x00040134,
+0x0000afd0,0x00040134,0x00000000,0x00040134,0x01000000,0x00040134,
+0x0e000002,0x00040134,0x4d435242,0x00040134,0x5345545f,0x00040134,
+0x53535f54,0x00040134,0x04014449,0x00040134,0x968b8482,0x00040134,
+0x06010103,0x00040134,0x00000102,0x00040100,0x01000000,0x00020490,
+0x00000000,0x000204a0,0x0000f3f1,0x000204b0,0x0000fdef,0x000204a8,
+0x0000ffff,0x000204a8,0x00000000,0x000204aa,0x00000000,0x000204a4,
+0x00001acf,0x000204ac,0x00000000,0x000204bc,0x00000000,0x000204a6,
+0x000002c7,0x000204b6,0x0000fdff,0x000204ae,0x0000ffff,0x00020406,
+0x00000001,0x00020406,0x00000000,0x0002040c,0x00000014,0x00020406,
+0x00000000,0x00020448,0x00000c00,0x00020402,0x00000630,0x00020502,
+0x00000000,0x00020500,0x00004000,0x00020502,0x00000004,0x00020500,
+0x00004000,0x00020502,0x00000008,0x00020500,0x00004000,0x00020502,
+0x0000000c,0x00020500,0x00004000,0x00020502,0x000000c0,0x00020580,
+0x0000ffff,0x00020582,0x0000ffff,0x00020584,0x0000ffff,0x00020586,
+0x0000ffff,0x00020588,0x0000ffff,0x0002059c,0x0000fff0,0x00020540,
+0x00008000,0x00020520,0x00000f06,0x00020540,0x00008000,0x00020540,
+0x00008100,0x00020520,0x00001d10,0x00020540,0x00008100,0x00020540,
+0x00008200,0x00020520,0x0000281e,0x00020540,0x00008200,0x00020540,
+0x00008300,0x00020520,0x00003129,0x00020540,0x00008300,0x00020540,
+0x00008400,0x00020520,0x00003f32,0x00020540,0x00008400,0x00020540,
+0x00008500,0x00020520,0x00004140,0x00020540,0x00008500,0x00020612,
+0x00000001,0x0002062e,0x0000a2e9,0x00020630,0x0000000b,0x00020600,
+0x00008004,0x00020696,0x00000008,0x0002069a,0x000000e4,0x00020688,
+0x00000000,0x0002069c,0x00000002,0x00020688,0x00001000,0x0002069c,
+0x00000002,0x00020688,0x00002000,0x0002069c,0x00000002,0x00020688,
+0x00003000,0x0002069c,0x00000002,0x00020688,0x00000f0b,0x0002069e,
+0x00000007,0x00020510,0x0000000b,0x00020450,0x00004e01,0x00020452,
+0x0000015b,0x000204e4,0x00000090,0x00040160,0x03010004,0x00040164,
+0x00000000,0x00040164,0x00000080,0x00040164,0x00470047,0x00040164,
+0x00640000,0x00040164,0x00400930,0x00040160,0x0301000d,0x00040164,
+0x00020002,0x00040164,0x00040001,0x00040164,0x00000005,0x00040160,
+0x03010011,0x00040164,0x00640064,0x00040164,0x0047000e,0x00040164,
+0x00002800,0x00040160,0x03010015,0x00040164,0x06b40000,0x00040164,
+0xffffffff,0x00040164,0x0000000a,0x00040160,0x0301001d,0x00040164,
+0x00002710,0x00040164,0x08d80000,0x00040160,0x03010020,0x00040164,
+0x27100006,0x00040160,0x03010024,0x00040164,0x08ee0000,0x00040164,
+0x00320000,0x00040164,0x090b0e0a,0x00040164,0x0000020e,0x00040160,
+0x03010029,0x00040164,0x013f0000,0x00040164,0x0c00ffff,0x00040164,
+0x7b420474,0x00040164,0x08640002,0x00040160,0x0301002e,0x00040164,
+0x80000000,0x00040160,0x03010058,0x00040164,0x4d435242,0x00040164,
+0x5345545f,0x00040164,0x53535f54,0x00040164,0x00004449,0x00040160,
+0x03010060,0x00040164,0x00000039,0x00040164,0x00000050,0x00040164,
+0x000000c0,0x00040160,0x03010070,0x00040164,0x03f803f8,0x00040164,
+0x03f803f8,0x00040164,0x03f803f8,0x00040164,0x03f803f8,0x00040164,
+0x04200434,0x00040164,0x03f8040c,0x00040164,0x042a043e,0x00040164,
+0x04020416,0x00040164,0x03f803f8,0x00040164,0x03f803f8,0x00040164,
+0x03f803f8,0x00040164,0x03f803f8,0x00040164,0x04200434,0x00040164,
+0x03f8040c,0x00040164,0x042a043e,0x00040164,0x04020416,0x00040164,
+0x04480448,0x00040164,0x04480448,0x00040164,0x04480453,0x00040164,
+0x045e0448,0x00040164,0x04480448,0x00040164,0x04480448,0x00040164,
+0x04480448,0x00040164,0x04480469,0x00040164,0x04480448,0x00040164,
+0x04480448,0x00040164,0x04480453,0x00040164,0x045e0448,0x00040164,
+0x04480448,0x00040164,0x04480448,0x00040164,0x04480448,0x00040164,
+0x04480469,0x00040164,0x001f0000,0x00040164,0x001f03ff,0x00040164,
+0x00000002,0x00040164,0x00000002,0x00040160,0x03010098,0x00040164,
+0x001f0000,0x00040164,0x001f03ff,0x00040164,0x00000001,0x00040164,
+0x00000001,0x00040160,0x030100a0,0x00040164,0x001f0000,0x00040164,
+0x001f03ff,0x00040164,0x00000001,0x00040164,0x00000001,0x00040160,
+0x030100a8,0x00040164,0x001f0000,0x00040164,0x001f03ff,0x00040164,
+0x00000001,0x00040164,0x00000001,0x00040160,0x030100c0,0x00040164,
+0x24372437,0x00040164,0x24372437,0x00040160,0x03010192,0x00040164,
+0x0000048c,0x00040160,0x030101a0,0x00040164,0xffffffff,0x00040164,
+0xffffffff,0x00040164,0xffffffff,0x00040164,0xffffffff,0x00040164,
+0xffffffff,0x00040164,0xffffffff,0x00040164,0xffffffff,0x00040164,
+0xffffffff,0x00040160,0x030101fc,0x00040164,0x01cb0020,0x00040164,
+0x00540000,0x00040164,0x08ab0000,0x00040164,0x04100000,0x00040164,
+0x00020084,0x00040164,0x01cf0014,0x00040164,0x00440002,0x00040164,
+0x08af0000,0x00040164,0x04100002,0x00040164,0x02020064,0x00040164,
+0x01ca0010,0x00040164,0x003c0002,0x00040164,0x08aa0000,0x00040164,
+0x04100002,0x00040164,0x08020054,0x00040164,0x01ce0008,0x00040164,
+0x00340000,0x00040164,0x08ae0000,0x00040164,0x04100000,0x00040164,
+0x0a020044,0x00040164,0x01c90008,0x00040164,0x00300002,0x00040164,
+0x08a90000,0x00040164,0x04100002,0x00040164,0x1002003c,0x00040164,
+0x01cd0004,0x00040164,0x002c0000,0x00040164,0x08ad0000,0x00040164,
+0x04100000,0x00040164,0x12020034,0x00040164,0x01c80004,0x00040164,
+0x002c0000,0x00040164,0x08a80000,0x00040164,0x04100000,0x00040164,
+0x19020030,0x00040164,0x01cc0000,0x00040164,0x002c0002,0x00040164,
+0x08ac0000,0x00040164,0x04100002,0x00040164,0x1a020030,0x00040164,
+0x040a00c0,0x00040164,0x00000070,0x00040164,0x040a013a,0x00040164,
+0xc02c0228,0x00040164,0x040a02f2,0x00040164,0x00600100,0x00040164,
+0x00380414,0x00040164,0x01020000,0x00040164,0x01140414,0x00040164,
+0x01dec02c,0x00040164,0x00800414,0x00040164,0x04370022,0x00040164,
+0x00000015,0x00040164,0x043700df,0x00040164,0xc02c0065,0x00040164,
+0x0437012e,0x00040164,0x0011002f,0x00040164,0x000b846e,0x00040164,
+0x00d40000,0x00040164,0x0033846e,0x00040164,0x00fcc02c,0x00040164,
+0x0018846e,0x00040164,0x9d8a0002,0x00040164,0x080200fb,0x00040164,
+0x00fa4ec5,0x00040164,0x34830a02,0x00040164,0x100200fe,0x00040164,
+0x00f92762,0x00040164,0x1a421202,0x00040164,0x190200fd,0x00040164,
+0x00f813b1,0x00040164,0x11811a02,0x00040164,0x1c0200fc,0x00040164,
+0x00fc0fc1,0x00040160,0x03010346,0x00040164,0x00000207,0x00040160,
+0x0301034e,0x00040164,0x00010000,0x00040160,0x03010350,0x00040164,
+0x000c0000,0x00040160,0x0301046c,0x00040164,0xeb300035,0x00040164,
+0x4444eb24,0x00040164,0x40200000,0x00040164,0x10080020,0x00040164,
+0xde5e0008,0x00040164,0xe331e832,0x00040164,0x00264d26,0x00040164,
+0x00201420,0x00040164,0x0008fe08,0x00040164,0x00180000,0x00040160,
+0x03010477,0x00040164,0x1d4c0bb8,0x00040164,0x00640ea6,0x00040164,
+0x01f40000,0x00040164,0x00000041,0x00040164,0x3a9861a8,0x00040164,
+0x001e0000,0x00040160,0x0301047f,0x00040164,0x0000c350,0x00040160,
+0x03010481,0x00040164,0x05140000,0x00040164,0x00002008,0x00040160,
+0x03010485,0x00040164,0x00004e20,0x00040164,0x000f0000,0x00040164,
+0x000601f4,0x00040160,0x0301048b,0x00040164,0x00010000,0x00040164,
+0x00060000,0x00040164,0x000f0002,0x00040164,0x0000afc8,0x00040164,
+0x00001388,0x00040164,0x000f17ec,0x00040160,0x03010492,0x00040164,
+0x012c0000,0x00040164,0x0fa00000,0x00040160,0x030104c3,0x00040164,
+0x00070000,0x00040164,0x001e0014,0x00040160,0x030104d1,0x00040164,
+0x00be0000,0x00040160,0x00020003,0x00040164,0x0000001f,0x00040160,
+0x00020004,0x00040164,0x000003ff,0x00040160,0x00020005,0x00040164,
+0x0000001f,0x00040160,0x00020006,0x00040164,0x00000007,0x00040160,
+0x00020007,0x00040164,0x00000004,0x00040160,0x00020008,0x00040164,
+0x0000ffff,0x00040160,0x00020009,0x00040164,0x00000000,0x00040160,
+0x0002000a,0x00040164,0x00000000,0x00040160,0x0002000b,0x00040164,
+0x00000000,0x00040160,0x0002000c,0x00040164,0x00000000,0x00040160,
+0x0002000d,0x00040164,0x00000000,0x00040160,0x0002000e,0x00040164,
+0x00000000,0x00040160,0x0002000f,0x00040164,0x00000000,0x00040160,
+0x00020010,0x00040164,0x0000001f,0x00040160,0x00020011,0x00040164,
+0x00000000,0x00040160,0x00020012,0x00040164,0x00000000,0x00040160,
+0x00020013,0x00040164,0x00000000,0x00040160,0x00020015,0x00040164,
+0x00000000,0x00040160,0x00020016,0x00040164,0x00000000,0x0000ffff,
+0x00000000,0x00020686,0x000009d0,0x00020680,0x00003e3e,0x00020682,
+0x0000023e,0x00020700,0x0000003c,0x00020684,0x00000212,0x00040160,
+0x00010003,0x00020164,0x000000c0,0x00040160,0x00010003,0x00020166,
+0x0000000a,0x00040160,0x00010004,0x00020164,0x00000014,0x00040160,
+0x00010007,0x00020164,0x00000183,0x00040160,0x00010025,0x00020164,
+0x000001f4,0x00040160,0x000104d2,0x00020166,0x0000042b,0x00040160,
+0x000104d3,0x00020164,0x00000100,0x00040160,0x000101fe,0x00020164,
+0x0000003c,0x00040160,0x00010203,0x00020164,0x00000034,0x00040160,
+0x00010208,0x00020164,0x00000030,0x00040160,0x0001020d,0x00020164,
+0x0000002c,0x00040160,0x00010212,0x00020164,0x0000002c,0x00040160,
+0x00010217,0x00020164,0x00000028,0x00040160,0x0001021c,0x00020164,
+0x00000028,0x00040160,0x00010221,0x00020164,0x00000028,0x0000ffff,
+0x00000000,0x00000207,0x00000000,0x00000060,0x00000000,0x00000060,
+0x10000000,0x00000065,0x20000000,0x00000065,0x10000000,0x0000006d,
+0x20000000,0x0000006d,0xc0000000,0x0000006c,0x20000001,0x00000075,
+0x20000002,0x00000070,0x30000002,0x00000070,0x20000083,0x00000078,
+0x30000104,0x00000078,0x40004185,0x00000078,0x10004185,0x0000002d,
+0x20008206,0x0000002d,0x3020c287,0x0000002d,0x40410308,0x0000002d,
+0x50614389,0x0000002d,0x6081840a,0x0000002d,0x70a1c48b,0x0000002d,
+0xb0c2050d,0x0000002a,0xc0e2458e,0x0000002a,0x31028698,0x0000002c,
+0x71230b91,0x0000003d,0xb143481a,0x0000003a,0xc185cc94,0x00000038,
+0xd1a4099c,0x0000003a,0x91e64d96,0x0000003d,0xa204ca9e,0x0000003d,
+0xb246cea1,0x0000003d,0xc2655024,0x0000003d,0xd36751a6,0x0000003d,
+0xe3e95529,0x0000003d,0xf449d42e,0x0000003d,0x24aa95ae,0x00000039,
+0x94ea162e,0x00000039,0x24ea162e,0x0000003a,0x00000000,0x00000060,
+0x00000000,0x00000060,0x10000000,0x00000065,0x20000000,0x00000065,
+0x10000000,0x0000006d,0x20000000,0x0000006d,0xc0000000,0x0000006c,
+0x20000001,0x00000075,0x20000002,0x00000070,0x30000002,0x00000070,
+0x20000083,0x00000078,0x30000104,0x00000078,0x00000104,0x00000028,
+0x10004185,0x0000002d,0x20008206,0x0000002d,0x3020c287,0x0000002d,
+0x40410308,0x0000002d,0x50614389,0x0000002d,0x6081840a,0x0000002d,
+0x70a1c48b,0x0000002d,0xb0c2050d,0x0000002a,0xc0e2458e,0x0000002a,
+0x31028698,0x0000002c,0x71230b91,0x0000003d,0xb143481a,0x0000003a,
+0xc185cc94,0x00000038,0xd1a4099c,0x0000003a,0x91e64d96,0x0000003d,
+0xa204ca9e,0x0000003d,0xb246cea1,0x0000003d,0xc2655024,0x0000003d,
+0xd36751a6,0x0000003d,0xe3e95529,0x0000003d,0xf449d42e,0x0000003d,
+0x24aa95ae,0x00000039,0x94ea162e,0x00000039,0x24ea162e,0x0000003a,
+0x00200000,0x00050001,0x00250009,0x04290029,0x04270027,0x0447042b,
+0x044b0447,0x044f0833,0x04570453,0x045b0457,0x0c5b085b,0x083308db,
+0x0457084f,0x04d708cf,0x055708d7,0x04db055b,0x095b0957,0x07570557,
+0x055b0b57,0x07570b5b,0x0f5b1cd7,0x0045075b,0x00c50049,0x00550051,
+0x00d500d1,0x00d500d1,0x015500d9,0x015d0159,0x035d0359,0x035b0357,
+0x040c035f,0x042c0410,0x000d004c,0x004d002d,0x044d042d,0x04550451,
+0x04cb00ce,0x085708cb,0x002c000c,0x04ce0855,0x18cd08ce,0x194d2051,
+0x214d24cd,0x0829254d,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00200000,0x00050001,0x00250009,0x04290029,0x04270027,0x0447042b,
+0x044b00c1,0x044f0833,0x04570453,0x045b0157,0x0c5b085b,0x083308db,
+0x015b084f,0x04d708cf,0x055708d7,0x04db055b,0x095b0957,0x0757015f,
+0x055b0b57,0x07570b5b,0x0f5b1cd7,0x0045075b,0x00c50049,0x00550051,
+0x00d500d1,0x00d500d1,0x015500d9,0x015d0159,0x035d0359,0x035b0357,
+0x040c035f,0x042c0410,0x000d004c,0x004d002d,0x044d042d,0x04550451,
+0x04cb00ce,0x085708cb,0x002c000c,0x04ce0855,0x000408ce,0x00240008,
+0x00440040,0x00410048,0x00360409,0x0056003a,0x005b005a,0x00db00d7,
+0x01280128,0x00090009,0x00280028,0x00280028,0x01280128,0x00090009,
+0x00280028,0x00280028,0x00090009,0x00090009,0x00090009,0x00090009,
+0x00180018,0x00180018,0x00180018,0x00180018,0x01280128,0x00090009,
+0x00280028,0x00280028,0x01280128,0x00090009,0x00280028,0x00280028,
+0x00090009,0x00090009,0x00090009,0x00090009,0x00180018,0x00180018,
+0x00180018,0x00180018,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x2d364c00,0x00000000,0x2d364c00,0x01100120,0x00080001,
+0x00100020,0x00100020,0x01200120,0x00080001,0x00100020,0x00100020,
+0x00010001,0x00010001,0x00010001,0x00010001,0x00200020,0x00200020,
+0x00200020,0x00200020,0x01200120,0x00080001,0x00100020,0x00100020,
+0x01200120,0x00080001,0x00100020,0x00100020,0x00010001,0x00010001,
+0x00010001,0x00010001,0x00200020,0x00200020,0x00200020,0x00200020,
+0x00019d0c,0x00000040,0x00000002,0x00000000,0x00000010,0x0001921c,
+0x00000028,0x00000001,0x00000000,0x00000010,0x00019adc,0x0000000a,
+0x0000000b,0x00000000,0x00000020,0x00019b14,0x00000014,0x0000000c,
+0x00000000,0x00000020,0x00019dd0,0x00000094,0x0000000d,0x00000000,
+0x00000020,0x00019cd8,0x0000001a,0x0000000e,0x00000000,0x00000010,
+0x0001919c,0x00000040,0x0000000f,0x00000000,0x00000010,0x00019b04,
+0x00000010,0x00000010,0x00000000,0x00000008,0x00019588,0x00000044,
+0x00000011,0x00000000,0x00000008,0x000194c8,0x00000060,0x00000012,
+0x00000000,0x00000010,0x00019d8c,0x00000040,0x00000014,0x00000000,
+0x00000008,0x00019ba4,0x0000009a,0x00000017,0x00000000,0x00000010,
+0x000193f0,0x0000006c,0x00000000,0x00000000,0x00000010,0x03000200,
+0x06000400,0x0b000800,0x10011000,0x10031002,0x10051004,0x10071006,
+0x20071707,0x40072d07,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x03000200,0x06000400,0x0b000800,
+0x10011000,0x10031002,0x10051004,0x10071006,0x20071707,0x40072d07,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x40000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00200000,
+0x00050001,0x00250009,0x04290029,0x04270027,0x0447042b,0x044b0447,
+0x044f0833,0x04570453,0x045b0457,0x0c5b085b,0x083308db,0x0457084f,
+0x04d708cf,0x055708d7,0x04db055b,0x095b0957,0x07570557,0x055b0b57,
+0x07570b5b,0x0f5b1cd7,0x1357075b,0x175b135b,0x00000000,0x00000000,
+0x08000400,0x10000a00,0x18001400,0x14011c00,0x1c011801,0x04012001,
+0x0c010801,0x14011001,0x1c011801,0x1c211821,0x24212021,0x200d2041,
+0x0c561849,0x14491849,0x184d14c5,0x18cd1c4d,0x194d2051,0x214d24cd,
+0x0829254d,0x00000409,0x00000000,0x00000000,0x00000000,0x19130d07,
+0x0d0905fc,0x0a060401,0x14120f0c,0x000c0600,0x00120000,0x00180000,
+0x00000000,0x00000000,0x00000000,0x001e0000,0x00000000,0x09060300,
+0x15120f0c,0x001e1b18,0x00000000,0x0000e803,0x10000000,0x00000040,
+0x20000000,0x00000040,0x30000000,0x00000040,0x40000000,0x00000040,
+0x50000000,0x00000040,0x40000000,0x00000048,0x50000000,0x00000048,
+0x60000001,0x00000048,0x70000002,0x00000048,0x80000002,0x00000048,
+0x50000083,0x00000058,0x60000104,0x00000058,0x70004185,0x00000058,
+0xd0004185,0x0000000b,0xe0008206,0x0000000b,0xf020c287,0x0000000b,
+0x00410308,0x0000000c,0x10614389,0x00000014,0x6081840a,0x00000010,
+0x20a1c48b,0x00000014,0xc0c2050d,0x00000012,0x30e2458e,0x00000014,
+0x41028698,0x0000001c,0x31230b91,0x0000001c,0x5143481a,0x0000001c,
+0x6185cc94,0x0000001c,0x71a4099c,0x0000001c,0x81e64d96,0x0000001c,
+0x9204ca9e,0x0000001c,0xa246cea1,0x0000001c,0xb2655024,0x0000001c,
+0x436751a6,0x00000019,0xc3e95529,0x00000019,0x6449d42e,0x00000019,
+0x04aa95ae,0x0000001a,0x14ea162e,0x0000001a,0x44ea162e,0x0000001a,
+0x10000000,0x00000040,0x20000000,0x00000040,0x30000000,0x00000040,
+0x40000000,0x00000040,0x50000000,0x00000040,0x40000000,0x00000048,
+0x50000000,0x00000048,0x60000001,0x00000048,0x70000002,0x00000048,
+0x40000002,0x00000058,0x50000083,0x00000058,0x60000104,0x00000058,
+0xc0000104,0x0000000c,0xd0004185,0x0000000b,0xd0008206,0x0000000c,
+0xf020c287,0x0000000b,0x00410308,0x0000000c,0x10614389,0x00000014,
+0x6081840a,0x00000010,0x20a1c48b,0x00000014,0xc0c2050d,0x00000012,
+0x30e2458e,0x00000014,0x51028698,0x00000014,0x31230b91,0x0000001c,
+0x5143481a,0x0000001c,0x6185cc94,0x0000001c,0x71a4099c,0x0000001c,
+0xe1e64d96,0x0000001c,0xf204ca9e,0x0000001c,0x0246cea1,0x0000001d,
+0xb2655024,0x0000001c,0x436751a6,0x00000019,0xc3e95529,0x00000019,
+0x6449d42e,0x00000019,0x04aa95ae,0x0000001a,0x14ea162e,0x0000001a,
+0x44ea162e,0x0000001a,0x000195cc,0x00000094,0x0000000d,0x00000000,
+0x00000020,0x00019cd8,0x0000001a,0x0000000e,0x00000000,0x00000010,
+0x0001901c,0x00000060,0x00000012,0x00000000,0x00000010,0x00000003,
+0x00ffff07,0xfff60755,0xea075500,0x075500ff,0x5500ffdc,0x00f1dc07,
+0xf1d10755,0xc5075500,0x075500f1,0x5500f1bf,0x00f1ba07,0xf1b40755,
+0xaf075500,0x075500f1,0x5500f1aa,0x00f1a507,0xf1a10755,0x9c075500,
+0x075500f1,0x5500f198,0x00f19307,0xf18f0755,0x8b075500,0x075500f1,
+0x5500f187,0x00f18307,0xf1800755,0x7c075500,0x075500f1,0x5500f179,
+0x00f17507,0xf1720755,0x6f075500,0x075500f1,0x5500f16b,0x00f16807,
+0xf1650755,0x63075500,0x075500f1,0x5500f160,0x00f15d07,0xf15a0755,
+0x58075500,0x075500f1,0x5500f155,0x00f15307,0xf1510755,0x4e075500,
+0x075500f1,0x5500f14c,0x00f14a07,0xf1480755,0x46075500,0x075500f1,
+0x5500f144,0x00f14207,0xf1400755,0x3e075500,0x075500f1,0x5500f13c,
+0x00f13b07,0xea3b0755,0x39075500,0x075500ea,0x5500e339,0x00e33707,
+0xdd370755,0x36075500,0x075500dd,0x5500d736,0x00d73407,0xd0340755,
+0x33075500,0x075500d0,0x5500cb33,0x00cb3107,0xc5310755,0x30075500,
+0x075500c5,0x5500bf30,0x00bf2f07,0xba2f0755,0x2d075500,0x075500ba,
+0x5500b52d,0x00b52c07,0xaf2c0755,0x2b075500,0x075500af,0x5500aa2b,
+0x00aa2a07,0xa62a0755,0x28075500,0x075500a6,0x5500a128,0x00a12707,
+0x9c270755,0x26075500,0x0755009c,0x55009826,0x00982507,0x94250755,
+0x24075500,0x07550094,0x55008f24,0x008f2307,0x8b230755,0x22075500,
+0x0755008b,0x55008722,0x00872107,0x84210755,0x20075500,0x07550084,
+0x55008020,0x00801f07,0x7c1f0755,0x1e075500,0x0755007c,0x5500791e,
+0x00791d07,0x751d0755,0x1d075500,0x07550075,0x5500721d,0x00721c07,
+0x6f1c0755,0x1b075500,0x0755006f,0x55006c1b,0x006c1a07,0x681a0755,
+0x19075500,0x07550068,0x55006619,0x00661907,0x63190755,0x18075500,
+0x07550063,0x55006018,0x00601707,0x5d170755,0x17075500,0x0755005d,
+0x55005a17,0x005a1607,0x58160755,0x15075500,0x07550058,0x55005515,
+0x00551507,0x53150755,0x14075500,0x07550053,0x55005114,0x00511407,
+0x4e140755,0x13075500,0x0755004e,0x55004c13,0x000141fc,0x000021fc,
+0x000021b7,0x0000416f,0x0001ff27,0x0000217f,0x00002137,0x000040ef,
+0x0001fea7,0x0000024f,0x1f29365f,0x1f29365f,0x1f29365f,0x1f29365f,
+0x00e38e08,0x00e08e38,0x00000000,0x00000000,0x00000000,0x00002080,
+0x00006180,0x00003002,0x00000040,0x00002042,0x00180047,0x00080043,
+0x00000041,0x000020c1,0x00046006,0x00042002,0x00040000,0x00002003,
+0x00180006,0x00080002,0x00018dcc,0x00000094,0x0000000d,0x00000000,
+0x00000020,0x000190dc,0x00000060,0x00000012,0x00000000,0x00000010,
+0x0000000d,0x0001926c,0x00000040,0x0000000f,0x00000000,0x00000010,
+0x0034001a,0x0068004e,0x00d0009c,0x010400ea,0x00680034,0x00d0009c,
+0x01a00138,0x020801d4,0x009c004e,0x013800ea,0x027001d4,0x030c02be,
+0x00d00068,0x01a00138,0x03400270,0x041003a8,0x009c0018,0x010400d0,
+0x013800ea,0x00d00186,0x01040104,0x016c0138,0x01a0016c,0x01860138,
+0x01d40186,0x02220222,0x01040270,0x016c0138,0x016c0138,0x01d401a0,
+0x01d401a0,0x02080208,0x0186023c,0x022201d4,0x022201d4,0x02be0270,
+0x02be0270,0x030c030c,0x0036035a,0x00a2006c,0x014400d8,0x01e601b0,
+0x006c021c,0x014400d8,0x028801b0,0x03cc0360,0x00a20438,0x01e60144,
+0x03cc0288,0x05b20510,0x00d80654,0x028801b0,0x05100360,0x079806c0,
+0x00180870,0x01b00144,0x01e6021c,0x032a0288,0x021c01b0,0x0288021c,
+0x02f402f4,0x02880360,0x032a032a,0x046e03cc,0x0510046e,0x0288021c,
+0x028802f4,0x036002f4,0x036003cc,0x043803cc,0x04a40438,0x03cc032a,
+0x03cc046e,0x0510046e,0x051005b2,0x065405b2,0x06f60654,0x00000000,
+0x00000000,0x00020001,0x00040003,0x00060005,0x00080007,0x00000085,
+0x00000000,0x00010000,0x00030002,0x00050004,0x00070006,0x00850084,
+0x014d014d,0x014d014d,0x014d014d,0x014d014d,0x014d014d,0x014d014d,
+0x014d014d,0x014d014d,0x014d014d,0x014d014d,0x014d014d,0x014d014d,
+0x014d014d,0x014d014d,0x014d014d,0x014d014d,0x014d014d,0x014d014d,
+0x014d014d,0x014d014d,0x014d014d,0x014d014d,0x014d014d,0x014d014d,
+0x014d014d,0x014d014d,0x014d014d,0x014d014d,0x014d014d,0x014d014d,
+0x014d014d,0x014d014d,0x01010101,0x01010101,0x01010101,0x01010101,
+0x01010101,0x01010101,0x01010101,0x03030101,0x01030301,0x01010101,
+0x01010101,0x01010101,0x01010101,0x01010101,0x01010101,0x01010101,
+0x00000002,0x10000000,0x00000040,0x20000000,0x00000040,0x30000000,
+0x00000040,0x40000000,0x00000040,0x50000000,0x00000040,0x40000000,
+0x00000048,0x50000000,0x00000048,0x60000001,0x00000048,0x70000002,
+0x00000048,0x80000002,0x00000048,0x50000083,0x00000058,0x60000104,
+0x00000058,0x70004185,0x00000058,0x50004185,0x00000000,0x60008206,
+0x00000000,0x5020c287,0x00000008,0x60410308,0x00000008,0x70614389,
+0x00000008,0x8081840a,0x00000008,0x50a1c48b,0x00000018,0x60c2050d,
+0x00000018,0x70e2458e,0x00000018,0x81028698,0x00000018,0x91230b91,
+0x00000018,0xa143481a,0x00000018,0xc185cc94,0x00000018,0xd1a4099c,
+0x00000018,0xf1e64d96,0x00000018,0x0204ca9e,0x00000019,0x2246cea1,
+0x00000019,0x32655024,0x00000019,0xb36751a6,0x00000019,0xf3e95529,
+0x00000019,0x2449d42e,0x0000001a,0x54aa95ae,0x0000001a,0x74ea162e,
+0x0000001a,0xa4ea162e,0x0000001a,0x10000000,0x00000040,0x20000000,
+0x00000040,0x30000000,0x00000040,0x40000000,0x00000040,0x50000000,
+0x00000040,0x40000000,0x00000048,0x50000000,0x00000048,0x60000001,
+0x00000048,0x70000002,0x00000048,0x40000002,0x00000058,0x50000083,
+0x00000058,0x60000104,0x00000058,0x40000104,0x00000000,0x50004185,
+0x00000000,0x40008206,0x00000008,0x5020c287,0x00000008,0x60410308,
+0x00000008,0x70614389,0x00000008,0x8081840a,0x00000008,0x50a1c48b,
+0x00000018,0x60c2050d,0x00000018,0x70e2458e,0x00000018,0x81028698,
+0x00000018,0x91230b91,0x00000018,0xa143481a,0x00000018,0xc185cc94,
+0x00000018,0xd1a4099c,0x00000018,0xf1e64d96,0x00000018,0x0204ca9e,
+0x00000019,0x2246cea1,0x00000019,0x32655024,0x00000019,0xb36751a6,
+0x00000019,0xf3e95529,0x00000019,0x2449d42e,0x0000001a,0x54aa95ae,
+0x0000001a,0x74ea162e,0x0000001a,0xa4ea162e,0x0000001a,0x5f727563,
+0x65687465,0x64646172,0x65700072,0x655f6d72,0x72656874,0x72646461,
+0x256c7700,0x6c770064,0x203a6425,0x616f7242,0x6d6f6364,0x4d434220,
+0x78343025,0x32303820,0x2031312e,0x65726957,0x7373656c,0x6e6f4320,
+0x6c6f7274,0x2072656c,0x000a7325,0x31322e34,0x2e302e38,0x6c770030,
+0x69616600,0x2064656c,0x69206f74,0x2074696e,0x65726977,0x7373656c,
+0x64697320,0x65202c65,0x203a7272,0x000a6425,0x64256c77,0x7325203a,
+0x20732520,0x73726576,0x206e6f69,0x000a7325,0x20636544,0x32203120,
+0x00383030,0x323a3931,0x39303a32,0x66776800,0x65746c69,0x65640072,
+0x6c737065,0x00706565,0x0001a0d9,0x00000000,0x00000008,0x0001a0e2,
+0x00000001,0x00000001,0x00000000,0x00000000,0x00000000,0x03020001,
+0x00020000,0x00000000,0x0060005e,0x00780062,0x0060005e,0x00780062,
+0x64256c77,0x5350203a,0x696d204d,0x636f7263,0x2065646f,0x63746177,
+0x676f6468,0x72696620,0x61206465,0x64252074,0x65732820,0x646e6f63,
+0x202e2973,0x65736552,0x6e697474,0x000a2e67,0x64256c77,0x5350203a,
+0x696d204d,0x636f7263,0x2065646f,0x63746177,0x676f6468,0x72696620,
+0x61206465,0x64252074,0x65732820,0x646e6f63,0x000a2973,0x64256c77,
+0x7370203a,0x6265646d,0x30206775,0x38302578,0x70202c78,0x65647968,
+0x20677562,0x30257830,0x202c7838,0x5f6d7370,0x20637262,0x30257830,
+0x000a7838,0x20202020,0x70657720,0x206c7463,0x30257830,0x202c7838,
+0x636d6370,0x30206c74,0x38302578,0x70202c78,0x74736d63,0x30207461,
+0x38302578,0x74000a78,0x745f6673,0x72656d69,0x20776f6c,0x78257830,
+0x7872000a,0x68705f65,0x5f737279,0x78302032,0x202c7825,0x5f657872,
+0x72796870,0x20335f73,0x78257830,0x79687020,0x74737872,0x73757461,
+0x78302030,0x202c7825,0x72796870,0x61747378,0x31737574,0x25783020,
+0x74000a78,0x735f6578,0x75746174,0x78302073,0x70207825,0x78747968,
+0x6f727265,0x64252072,0x4350000a,0x5243504d,0x20306765,0x7830203d,
+0x000a7825,0x504d4350,0x67655243,0x203d2031,0x78257830,0x4350000a,
+0x5243504d,0x20326765,0x7830203d,0x000a7825,0x5453414c,0x73657220,
+0x66207465,0x206d6f72,0x202c6425,0x65707974,0x0a642520,0x6d697400,
+0x616c2065,0x64207473,0x61637369,0x30206472,0x2c782578,0x746e6320,
+0x73616c20,0x69642074,0x72616373,0x78302064,0x202c7825,0x20727563,
+0x65736572,0x6e632074,0x78302074,0x000a7825,0x45534552,0x54532054,
+0x52205441,0x30204745,0x0a782578,0x20435000,0x000a203a,0x25783020,
+0x20202078,0x25785c00,0x00583230,0x63737362,0x003a6766,0x69646172,
+0x7363006f,0x73720061,0x655f6973,0x746e6576,0x65737700,0x656b5f63,
+0x6c630079,0x6465736f,0x0074656e,0x5f706165,0x74736572,0x74636972,
+0x65737700,0x766e0063,0x5f6d6172,0x00746567,0x5f636c77,0x61766f69,
+0x77007372,0x695f636c,0x7261766f,0x6f725f73,0x7665726d,0x65760030,
+0x6469646e,0x616f6200,0x65726472,0x72730076,0x65726d6f,0x6f620076,
+0x66647261,0x7367616c,0x61610032,0x61006735,0x00673261,0x00316161,
+0x00306161,0x00316761,0x68637874,0x006e6961,0x68637872,0x006e6961,
+0x6d306c69,0x64616361,0x74007264,0x75645f78,0x635f7974,0x656c6379,
+0x64666f5f,0x7874006d,0x7475645f,0x79635f79,0x5f656c63,0x006b6363,
+0x65736572,0x25207374,0x70000a64,0x5f6d7265,0x65687465,0x64646172,
+0x73252072,0x72756320,0x6874655f,0x64617265,0x25207264,0x62000a73,
+0x6472616f,0x25783020,0x62202c78,0x6472616f,0x76657220,0x00732520,
+0x63612820,0x6c617574,0x3020796c,0x32302578,0x72002978,0x5f657461,
+0x7265766f,0x65646972,0x2041203a,0x202c6425,0x64252042,0x6e61000a,
+0x78725f74,0x72766f5f,0x20642520,0x6e617874,0x64252074,0x5342000a,
+0x6f432053,0x6769666e,0x3a642520,0x73252220,0x65000a22,0x6c62616e,
+0x64252065,0x20707520,0x77206425,0x2066696c,0x70257830,0x73252220,
+0x77000a22,0x20636573,0x78257830,0x74756120,0x64252068,0x65737720,
+0x6e695f63,0x20786564,0x77206425,0x615f7065,0x206f676c,0x000a6425,
+0x72727563,0x5f746e65,0x2e737362,0x49535342,0x73252044,0x7563000a,
+0x6e657272,0x73625f74,0x53532e73,0x22204449,0x0a227325,0x73706100,
+0x7373615f,0x6169636f,0x20646574,0x000a6425,0x74737472,0x73657268,
+0x6c760068,0x6d5f6e61,0x0065646f,0x00656d77,0x5f656d77,0x5f737362,
+0x61736964,0x00656c62,0x5f656d77,0x63616f6e,0x6d77006b,0x70615f65,
+0x77006473,0x715f656d,0x6e69736f,0x77006f66,0x645f656d,0x6d770070,
+0x72705f65,0x715f6365,0x69756575,0x7700676e,0x635f656d,0x746e756f,
+0x00737265,0x5f656d77,0x61656c63,0x6f635f72,0x65746e75,0x77007372,
+0x6165666c,0x65727574,0x67616c66,0x656d7700,0x5f63615f,0x00617473,
+0x5f726570,0x6e616863,0x666e695f,0x7473006f,0x6e695f61,0x77006f66,
+0x6d5f6170,0x00736773,0x5f617077,0x68747561,0x61707700,0x7061635f,
+0x646e7600,0x65695f72,0x61707700,0x77006569,0x5f636573,0x74736572,
+0x74636972,0x61726600,0x72687467,0x00687365,0x726d5f61,0x00657461,
+0x6d5f6762,0x65746172,0x5f673500,0x7461726d,0x67320065,0x61726d5f,
+0x72006574,0x00646e61,0x6f737361,0x616f7263,0x7361006d,0x5f636f73,
+0x6f666e69,0x73736100,0x725f636f,0x695f7165,0x61007365,0x636f7373,
+0x7365725f,0x65695f70,0x76650073,0x5f746e65,0x7367736d,0x73657200,
+0x645f7465,0x6e633131,0x69007374,0x5f737362,0x6f6c6c61,0x00646577,
+0x6e756f63,0x5f797274,0x7473696c,0x7478655f,0x65646e65,0x636d0064,
+0x5f747361,0x7473696c,0x61686300,0x6570736e,0x696c0063,0x69746566,
+0x6300656d,0x746e756f,0x61007972,0x636f7475,0x746e756f,0x645f7972,
+0x75616665,0x6100746c,0x6e65746e,0x0073616e,0x73736269,0x616f635f,
+0x6373656c,0x6c615f65,0x65776f6c,0x736d0064,0x76656c67,0x64006c65,
+0x5f6e776f,0x7265766f,0x65646972,0x6c6c6100,0x746c756d,0x656c0069,
+0x79636167,0x6f72705f,0x70006562,0x735f326d,0x7065656c,0x7465725f,
+0x72696500,0x63630070,0x6f697067,0x6c727463,0x67636300,0x696f6970,
+0x6363006e,0x6f697067,0x0074756f,0x70676363,0x756f6f69,0x006e6574,
+0x5f637462,0x65646f6d,0x63746200,0x7269775f,0x75640065,0x79637974,
+0x5f656c63,0x006b6363,0x79747564,0x6c637963,0x666f5f65,0x62006d64,
+0x735f6374,0x6b637574,0x7261775f,0x63746200,0x7574735f,0x645f6b63,
+0x63657465,0x00646574,0x7461726e,0x766e0065,0x5f6d6172,0x706d7564,
+0x6c656400,0x735f6174,0x73746174,0x746e695f,0x61767265,0x6564006c,
+0x5f61746c,0x74617473,0x70690073,0x6d5f3676,0x74736163,0x76616e00,
+0x7365725f,0x775f7465,0x645f7261,0x62617369,0x0000656c,0x00000000,
+0x00000000,0x0000b181,0x00007081,0x00000000,0x00000000,0x096c0001,
+0x09710002,0x09760003,0x097b0004,0x09800005,0x09850006,0x098a0007,
+0x098f0008,0x09940009,0x0999000a,0x099e000b,0x09a3000c,0x09a8000d,
+0x09b4000e,0xffffffff,0x0204ffff,0x0a080600,0x00000e0c,0x0001a968,
+0x00000001,0x00000007,0x0001a970,0x00000000,0x00000007,0x0001a978,
+0x00000000,0x00000007,0x0001a97f,0x00000001,0x00000007,0x0001a987,
+0x00000003,0x00400008,0x0001a993,0x00000002,0x00000002,0x0001a5bf,
+0x00000004,0x02940008,0x0001a800,0x00000005,0x00000008,0x0001a99c,
+0x00000006,0x00000001,0x0001a9a0,0x00000007,0x20000008,0x0001a9a8,
+0x0000000a,0x000c0008,0x0001a9b0,0x00000008,0x00000006,0x0001a9bb,
+0x00000009,0x000c0008,0x0001aca6,0x0000000b,0x00000008,0x00000000,
+0x00000000,0x00000000,0x65736162,0x766f695f,0x00737261,0x725f6732,
+0x00657461,0x725f6735,0x00657461,0x61725f61,0x62006574,0x61725f67,
+0x62006574,0x72656d63,0x73726f72,0x62007274,0x72656d63,0x00726f72,
+0x0063706d,0x6470746f,0x00706d75,0x64736963,0x00706d75,0x5f736963,
+0x72756f73,0x63006563,0x72777369,0x00657469,0xffffffff,0x6c77ffff,
+0x6d6c5f63,0x735f6361,0x635f7465,0x6e6e6168,0x77006c65,0x6c5f636c,
+0x5f63616d,0x00706163,0x5f636c77,0x61747461,0x6c5f6863,0x0063616d,
+0x0001ade8,0x00000002,0x00000008,0x0001adf1,0x00000003,0x00000000,
+0x0001adf9,0x00000004,0x00000000,0x0001ae03,0x00000005,0x00000008,
+0x0001ae10,0x00000006,0x00000007,0x0001ae1d,0x00000008,0x00000007,
+0x0001a020,0x00000005,0x00000008,0x0001ae27,0x00000007,0x00000008,
+0x00000000,0x00000000,0x00000000,0x766f7872,0x776f6c66,0x73616320,
+0x61207365,0x25206572,0x6d000a64,0x635f7363,0x746e756f,0x6425203a,
+0x78300020,0x20783225,0x31314400,0x20544820,0x20504143,0x20657261,
+0x4c4c554e,0x2a2a000a,0x2054482a,0x49444441,0x75442045,0x203a706d,
+0x72617453,0x2a2a2a74,0x6461000a,0x65695f64,0x74633e2d,0x68635f6c,
+0x7830203a,0x78323025,0x6461000a,0x65695f64,0x79623e2d,0x3a316574,
+0x25783020,0x0a783230,0x64646100,0x2d65695f,0x6d706f3e,0x3a65646f,
+0x25783020,0x0a783430,0x64646100,0x2d65695f,0x73696d3e,0x69625f63,
+0x203a7374,0x30257830,0x000a7838,0x482a2a2a,0x44412054,0x20454944,
+0x706d7544,0x4e45203a,0x2a2a2a44,0x2a2a000a,0x2054482a,0x49504143,
+0x75442045,0x203a706d,0x72617453,0x2a2a2a74,0x6569000a,0x61633e2d,
+0x30203a70,0x34302578,0x69000a78,0x703e2d65,0x6d617261,0x30203a73,
+0x32302578,0x69000a78,0x653e2d65,0x685f7478,0x70616374,0x7830203a,
+0x78343025,0x6569000a,0x78743e2d,0x635f6662,0x203a7061,0x30257830,
+0x000a7838,0x3e2d6569,0x635f7361,0x203a7061,0x30257830,0x000a7832,
+0x482a2a2a,0x41432054,0x20454950,0x706d7544,0x6e45203a,0x2a2a2a64,
+0x6c77000a,0x203a6425,0x203a7325,0x666c616d,0x656d726f,0x68632064,
+0x70736e61,0x30206365,0x0a782578,0x256c7700,0x25203a64,0x77203a73,
+0x615f636c,0x63617474,0x61662068,0x64656c69,0x6c77000a,0x203a6425,
+0x203a7325,0x63616d6c,0x666e695f,0x6c61206f,0x20636f6c,0x6c696166,
+0x000a6465,0x5f636c77,0x63616d6c,0x766f695f,0x00737261,0x64256c77,
+0x7325203a,0x6c77203a,0x6f6d5f63,0x656c7564,0x6765725f,0x65747369,
+0x61662072,0x64656c69,0x6c77000a,0x203a6425,0x203a7325,0x695f6c77,
+0x5f74696e,0x656d6974,0x6f662072,0x64772072,0x656d6974,0x61662072,
+0x64656c69,0x3673000a,0x65765f30,0x6f670072,0x36732074,0x65765f30,
+0x73692072,0x0a732520,0x302e3500,0x30367300,0x7265765f,0x6e6f6973,
+0x20736920,0x20746573,0x25206f74,0x77000a64,0x3a64256c,0x3a732520,
+0x72726520,0x6920726f,0x6974696e,0x7420676e,0x4c206568,0x2043414d,
+0x746f7250,0x6f6d206f,0x656c7564,0x6c77000a,0x72647872,0x0073706f,
+0x203a7325,0x6e6b6e75,0x206e776f,0x69746361,0x64696e6f,0x0a642520,
+0x3a732500,0x66756220,0x20726566,0x676e656c,0x25206874,0x6f742064,
+0x6873206f,0x2074726f,0x20726f66,0x43414d4c,0x70616320,0x64252820,
+0x63000a29,0x69706968,0x78302064,0x203a7825,0x70696863,0x20766572,
+0x78257830,0x6375202c,0x7265646f,0x30207665,0x0a782578,0x3a732500,
+0x6e614320,0x63207427,0x676e6168,0x68742065,0x68632065,0x656e6e61,
+0x6877206c,0x74206e65,0x73206568,0x206e6163,0x69207369,0x7270206e,
+0x6572676f,0x000a7373,0x203a7325,0x75736e55,0x726f7070,0x20646574,
+0x61766f69,0x61202c72,0x6f697463,0x2064696e,0x000a6425,0x63616d6c,
+0x7061635f,0x616d6c00,0x70755f63,0x616d6c00,0x6f645f63,0x6c006e77,
+0x5f63616d,0x6163616d,0x00726464,0x63616d6c,0x7078745f,0x7265776f,
+0x616d6c00,0x6f6d5f63,0x6c006564,0x5f63616d,0x63746573,0x6e6e6168,
+0x77006c65,0x765f636c,0x64696c61,0x6168635f,0x6570736e,0x6c770063,
+0x6d6c5f63,0x645f6361,0x766f696f,0x74007261,0x74737378,0x00737461,
+0x67737874,0x006d6f6c,0x7478616d,0x75700078,0x616d2e62,0x20787478,
+0x62206f74,0x64252065,0x3225000a,0x34252864,0x00202964,0x7478616d,
+0x6f6c6778,0x7369206d,0x2c642520,0x72756320,0x746e6572,0x6e657020,
+0x676e6964,0x756f6320,0x6920746e,0x64252073,0x7874000a,0x616d2073,
+0x636f6c6c,0x69616620,0x6572756c,0x72612073,0x64252065,0x6570202c,
+0x6e69646e,0x64252067,0x616d000a,0x67787478,0x206d6f6c,0x73207369,
+0x74207465,0x6425206f,0x0100000a,0x00060605,0x02000101,0x00030302,
+0x325f4c50,0x64685f47,0x00000062,0x01030000,0x4c50001f,0x5f47355f,
+0x00626468,0x00000000,0x00200103,0x5f716672,0x00004732,0x00000000,
+0x01050000,0x66720006,0x47345f71,0x00000000,0x00000000,0x00080105,
+0x5f716672,0x6c5f4735,0x00000000,0x01050000,0x6672000a,0x47355f71,
+0x00006d5f,0x00000000,0x000c0105,0x5f716672,0x685f4735,0x00000000,
+0x01050000,0x6470000e,0x0047325f,0x00000000,0x00000000,0x00100105,
+0x345f6470,0x00000047,0x00000000,0x01050000,0x64700012,0x5f47355f,
+0x0000006c,0x00000000,0x00140105,0x355f6470,0x006d5f47,0x00000000,
+0x01050000,0x64700016,0x5f47355f,0x00000068,0x00000000,0x00180105,
+0x5f677874,0x00004732,0x00000000,0x01020000,0x7874001a,0x47345f67,
+0x00000000,0x00000000,0x001b0102,0x5f677874,0x6c5f4735,0x00000000,
+0x01020000,0x7874001c,0x47355f67,0x00006d5f,0x00000000,0x001d0102,
+0x5f677874,0x685f4735,0x00000000,0x01020000,0x4732001e,0x314c505f,
+0x6264685f,0x00000000,0x00240902,0x505f4732,0x685f324c,0x00006264,
+0x09020000,0x4732002d,0x334c505f,0x6264685f,0x00000000,0x00360902,
+0x505f4732,0x685f344c,0x00006264,0x09020000,0x4735003f,0x314c505f,
+0x6264685f,0x00000000,0x00480802,0x505f4735,0x685f324c,0x00006264,
+0x08020000,0x47350051,0x334c505f,0x6264685f,0x00000000,0x005a0802,
+0x505f4735,0x685f344c,0x00006264,0x08020000,0x67630063,0x63635f61,
+0x47325f6b,0x00000000,0x006d0e02,0x5f616763,0x6d64666f,0x0047325f,
+0x0d020000,0x6170007c,0x47325f62,0x00000000,0x00000000,0x016b0603,
+0x5f626170,0x00004735,0x00000000,0x06030000,0x73720171,0x615f6973,
+0x325f6a64,0x00000047,0x01770103,0x69737372,0x6a64615f,0x355f6a5f,
+0x01030047,0x73720178,0x615f6973,0x355f6a64,0x006c5f47,0x01790103,
+0x69737372,0x6a64615f,0x5f47355f,0x0103006d,0x7372017a,0x615f6973,
+0x355f6a64,0x00685f47,0x017b0103,0x5f616763,0x47345f6a,0x61676300,
+0x355f6a5f,0x67630047,0x47355f61,0x63006c5f,0x355f6167,0x006d5f47,
+0x5f616763,0x755f4735,0x67630031,0x47355f61,0x3131755f,0x0201cc00,
+0xd4000000,0x00000000,0x00000000,0x00000001,0x07ef0000,0x000e0007,
+0x0000000e,0x00000000,0x00000000,0x03000200,0x06000400,0x0b000800,
+0x10011000,0x10031002,0x10051004,0x10071006,0x20071707,0x40072d07,
+0x80075b07,0x0001b6eb,0x00100000,0x00000007,0x0001b6f4,0x00000008,
+0x000c0008,0x0001b701,0x30000006,0x00030008,0x0001b70b,0x00000007,
+0x00000001,0x0001b718,0x00000009,0x00000001,0x0001b729,0x00400037,
+0x00000001,0x0001b73a,0x00000038,0x00000001,0x0001b749,0x00000039,
+0x00000006,0x0001b754,0x0040003a,0x00200008,0x0001b75b,0x0400003c,
+0x000c0008,0x0001b768,0x04400044,0x00100008,0x0001b771,0x0080005d,
+0x000c0008,0x0001b778,0x04400054,0x00000002,0x0001b78c,0x0040005b,
+0x000c0008,0x0001b79e,0x0400005c,0x00000003,0x0001b7af,0x0080001c,
+0x00000003,0x0001b7bf,0x00800014,0x00000002,0x0001b7cd,0x0040003d,
+0x00070007,0x0001b7d9,0x0400003f,0x00000006,0x0001b7e9,0x00000040,
+0x00000006,0x0001b7fe,0x04000041,0x00000006,0x0001b80e,0x0000005e,
+0x00000006,0x0001b819,0x0000005f,0x00000002,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x043f03c5,0x043d03c7,
+0x043a03c9,0x043803cb,0x043603cd,0x043403cf,0x043103d1,0x042f03d3,
+0x042d03d5,0x042b03d7,0x042903d9,0x042703db,0x042403dd,0x041f03e2,
+0x00000000,0x00000000,0x00000000,0x0007fc00,0x0005a569,0x000001ff,
+0x000a5d69,0x00080400,0x000a5e97,0x00000201,0x0005a697,0x00000000,
+0x00000000,0x00000000,0x00000000,0x84340000,0x80848334,0x80568267,
+0x00008234,0x0001b388,0x0001b1be,0x002d0000,0x001a90a7,0x000e0947,
+0x00072001,0x0003938b,0x0001ca38,0x0000e52a,0x00007297,0x0000394c,
+0x00001ca6,0x00000e53,0x00000729,0x00000395,0x000001ca,0x000000e5,
+0x00000073,0x00000039,0x0000001d,0x02000100,0x06000400,0x0b000800,
+0x17001000,0x2d002000,0x40014000,0x40034002,0x40054004,0x40074006,
+0x80075b07,0x3d0604f4,0x04f30103,0x01014c0c,0x500804f3,0x04f27f00,
+0xff004408,0x4a0004f3,0x04f2ff00,0xff004d04,0x4e0404f3,0x04f2ff00,
+0x0f004f0c,0x4f0004f3,0x04f50f04,0x0f004900,0x460304f6,0x04f50704,
+0x0100460f,0x460004f6,0x04f50701,0x07044808,0x480b04f5,0x04f50f00,
+0x0f044904,0x450f04f4,0x04f70100,0x0704520d,0x520004f8,0x04f70107,
+0x07054103,0x410604f7,0x04f70f00,0x0705420a,0x420f04f6,0x04f70100,
+0x07014200,0x430b04f6,0x04f60f04,0x0f004307,0x450604f6,0x04f40101,
+0x0f044007,0x400b04f4,0x04f30f00,0x03033c0e,0x3c0004f4,0x04f40705,
+0x07003c03,0x520004f2,0x00000f00,0x00000000,0x00000009,0x00010001,
+0x83238423,0x82568073,0x82238045,0x00000003,0xffffffe8,0x00000001,
+0x0000096c,0x0000000c,0x00000000,0x00000000,0x00000002,0x00000971,
+0x00000011,0x00000000,0x00000000,0x00000003,0x00000976,0x00000016,
+0x00000000,0x00000000,0x00000004,0x0000097b,0x0000001b,0x00000000,
+0x00000000,0x00000005,0x00000980,0x00000020,0x00000000,0x00000000,
+0x00000006,0x00000985,0x00000025,0x00000000,0x00000000,0x00000007,
+0x0000098a,0x0000002a,0x00000000,0x00000000,0x00000008,0x0000098f,
+0x0000002f,0x00000000,0x00000000,0x00000009,0x00000994,0x00000034,
+0x00000000,0x00000000,0x0000000a,0x00000999,0x00000039,0x00000000,
+0x00000000,0x0000000b,0x0000099e,0x0000003e,0x00000000,0x00000000,
+0x0000000c,0x000009a3,0x00000043,0x00000000,0x00000000,0x0000000d,
+0x000009a8,0x00000048,0x00000000,0x00000000,0x0000000e,0x000009b4,
+0x00000054,0x00000000,0x00000000,0x0c183060,0x1224486c,0x7a977a97,
+0x7a877a97,0x7b977a87,0x32697274,0x78620067,0x00673261,0x6f707872,
+0x72006732,0x73697373,0x6732666d,0x73737200,0x636d7369,0x72006732,
+0x73697373,0x67327661,0x73737200,0x666d7369,0x6c5f6732,0x0030776f,
+0x69737372,0x32636d73,0x6f6c5f67,0x72003177,0x73697373,0x67327661,
+0x776f6c5f,0x73720032,0x6d736973,0x5f673266,0x00306968,0x69737372,
+0x32636d73,0x69685f67,0x73720031,0x61736973,0x5f673276,0x00326968,
+0x6d306170,0x77707861,0x61700072,0x64256230,0x6b636300,0x6f006f70,
+0x706d6466,0x706f006f,0x6870006f,0x696f6e79,0x70006573,0x71007968,
+0x6f707874,0x00726577,0x5f796870,0x69737372,0x746e615f,0x69787400,
+0x7074736e,0x70007277,0x775f7968,0x68637461,0x00676f64,0x6e796870,
+0x6573696f,0x6c6f705f,0x676e696c,0x72616300,0x72656972,0x7075735f,
+0x73657270,0x69640073,0x6c626173,0x65705f65,0x6c616372,0x6d6e7500,
+0x725f646f,0x00697373,0x65746b70,0x7000676e,0x6e65746b,0x74735f67,
+0x00737461,0x74796870,0x656c6261,0x76617000,0x00737261,0x706c7373,
+0x7968706e,0x7078745f,0x6e697277,0x00786564,0x706c7373,0x7968706e,
+0x7061705f,0x6d617261,0x73730073,0x706e706c,0x665f7968,0x636c6c75,
+0x6e006c61,0x5f796870,0x705f6735,0x61677277,0x6d006e69,0x5f6f6d69,
+0x61657270,0x656c626d,0x79687000,0x6978725f,0x74736571,0x70706c00,
+0x745f7968,0x73706d65,0x65736e65,0x70706c00,0x635f7968,0x645f6c61,
+0x61746c65,0x6d65745f,0x706c0070,0x5f796870,0x74616276,0x736e6573,
+0x756e0065,0x74735f6d,0x6d616572,0x6e616200,0x61725f64,0x0065676e,
+0x5f636c77,0x5f746c70,0x61766f69,0x4c007372,0x0043414d,0x5f746c70,
+0x69766564,0x765f6563,0x70007265,0x695f746c,0x0074696e,0x5f746c70,
+0x706f7473,0x746c7000,0x5f78745f,0x746e6f63,0x6f756e69,0x70007375,
+0x745f746c,0x77635f78,0x746c7000,0x7078745f,0x735f7265,0x74726174,
+0x746c7000,0x5f78745f,0x706f7473,0x746c7000,0x7078725f,0x735f7265,
+0x74726174,0x746c7000,0x7078725f,0x735f7265,0x00706f74,0x5f746c70,
+0x65707872,0x65725f72,0x746c7573,0x6c700073,0x78725f74,0x0077635f,
+0x5f746c70,0x725f7872,0x00697373,0x5f746c70,0x6163616d,0x00726464,
+0x5f746c70,0x6f707874,0x00726577,0x5f746c70,0x69737374,0x00000000,
+0x0001b838,0x00000001,0x00000008,0x0001b847,0x00000002,0x00000000,
+0x0001b850,0x00000003,0x00000000,0x0001b859,0x00000004,0x00140008,
+0x0001b86b,0x00000005,0x00020008,0x0001b875,0x00000006,0x00200008,
+0x0001b885,0x00000007,0x00000000,0x0001b891,0x00000008,0x00000008,
+0x0001b8a1,0x00000009,0x00000000,0x0001b8b0,0x0000000a,0x00000008,
+0x0001b8c2,0x0000000b,0x00020008,0x0001b8cc,0x0000000c,0x00000007,
+0x0001b8d8,0x0000000d,0x00000008,0x0001b8e4,0x0000000e,0x00000007,
+0x0001b8f0,0x0000000f,0x00000007,0x00000000,0x00000000,0x00000000,
+0x0000000c,0x0c8b8482,0x24189612,0x6c604830,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000008,0x2498128c,
+0x6c6048b0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x0000000c,0x0c8b8482,0x24189612,0x6c604830,
+0x00000000,0x00ffff00,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000004,0x160b8482,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x0000000c,0x0c8b8482,
+0x24189612,0x6c604830,0x00000000,0x00ffff00,0x00000100,0x00000000,
+0x00000000,0x00000000,0x00000002,0x00000000,0x00000004,0x00000008,
+0x0000000b,0x00000010,0x00000016,0x00000018,0x0000000c,0x00000000,
+0x00000012,0x00000002,0x00000018,0x00000008,0x00000024,0x0000000a,
+0x00000030,0x00000010,0x00000048,0x00000012,0x00000060,0x00000019,
+0x0000006c,0x0000001a,0x000a0000,0x00000014,0x37000000,0x0000008b,
+0x008f0000,0x006e0000,0x0000008a,0x00000000,0x00000000,0x0000008e,
+0x00000000,0x00000000,0x00000089,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x0000008d,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000088,0x00000000,0x00000000,0x0000008c,
+0x00000008,0x160b0402,0x6c483024,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x6e616373,0x7361705f,
+0x65766973,0x6d69745f,0x63730065,0x685f6e61,0x5f656d6f,0x656d6974,
+0x61637300,0x706e5f6e,0x65626f72,0x6c770073,0x63735f63,0x695f6e61,
+0x7261766f,0x63730073,0x69746e61,0x0072656d,0xffffffff,0x0000ffff,
+0x00000000,0x00000001,0x00000002,0x00000004,0x00000002,0x00000003,
+0x00000003,0x00000005,0x0003aaaa,0x8e880000,0x72636f6e,0x520a0063,
+0x28204554,0x73257325,0x73257325,0x73252029,0x206e6f20,0x254d4342,
+0x25722058,0x20402064,0x252f6425,0x64252f64,0x7a484d20,0x4453000a,
+0x43004f49,0x49004344,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000001,0x00000020,0x0000001f,0x00000050,0x00005a01,0x000059b9,
+0x000059a5,0x00005995,0x00000000,0x00005935,0x00005989,0x0000596d,
+0x0000593d,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x0001bc54,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x0001bcf0,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00006b4d,0x000069dd,0x00006d61,0x00006b2d,0x00000000,
+0x000069f1,0x00000000,0x000069b1,0x00000000,0x0e0e0e0e,0x0d09020e,
+0x010d080a,0x080a0d09,0x0d09010d,0x010d080a,0x080a0d09,0x0e0a010d,
+0x020e090b,0x090b0e0a,0x3a09020e,0x050e0e16,0x0e163a09,0x0e0a050e,
+0x050e090b,0x090b0e0a,0x0e0a020e,0x020e090b,0x0e163a09,0x3a09050e,
+0x050e0e16,0x0e163a09,0x3a09050e,0x050e0e16,0x0e163a09,0x0001050e,
+0x02020100,0x07070303,0x07070707,0x07070807,0x09070906,0x02040202,
+0x04040402,0x03020202,0x02020302,0x02020203,0xfefefe00,0x08080808,
+0x09080808,0x0708080a,0x00000007,0x01000000,0x00000101,0x00000000,
+0x00000000,0x00000000,0xf5ef0000,0x01fdfbf8,0x0c090703,0x1915130f,
+0x24211f1b,0x302d2b27,0x3c383633,0x4744423e,0x53504d4a,0x005c5956,
+0x00000001,0x0000096c,0x043c3c6f,0x0505550e,0x44770505,0xf3708080,
+0x0000000c,0x00000002,0x00000971,0x043c3c6f,0x0505550e,0x44770505,
+0xf3708080,0x0000000b,0x00000003,0x00000976,0x043c3c6f,0x0505550e,
+0x44770505,0xf3708080,0x00000009,0x00000004,0x0000097b,0x042c2c6f,
+0x0505550d,0x44770505,0xf3708080,0x00000008,0x00000005,0x00000980,
+0x042c2c6f,0x0505550d,0x44770505,0xf3708080,0x00000007,0x00000006,
+0x00000985,0x042c2c6f,0x0505550c,0x44770505,0xf3708080,0x00000006,
+0x00000007,0x0000098a,0x042c2c6f,0x0505550b,0x44770505,0xf3708080,
+0x00000005,0x00000008,0x0000098f,0x042c2c6f,0x0505550b,0x44770505,
+0xf3708080,0x00000004,0x00000009,0x00000994,0x041c1c6f,0x0505550a,
+0x44770505,0xf3708080,0x00000004,0x0000000a,0x00000999,0x041c1c6f,
+0x05055509,0x44770505,0xf3708080,0x00000003,0x0000000b,0x0000099e,
+0x041c1c6e,0x05055508,0x44770505,0xf3708080,0x00000003,0x0000000c,
+0x000009a3,0x041c1c6e,0x05055507,0x44770505,0xf3708080,0x00000002,
+0x0000000d,0x000009a8,0x041c1c6e,0x05055506,0x44770505,0xf3708080,
+0x00000002,0x0000000e,0x000009b4,0x040c0c6e,0x05055502,0x44770505,
+0xf3708080,0x00000001,0x00004000,0x00000002,0x00000003,0x00000004,
+0x00000005,0x00000006,0x00000007,0x00000008,0x00000009,0x0001800a,
+0x0000000b,0x0000000c,0x0000000d,0x0606000e,0x0f0f000f,0x00004010,
+0x00004011,0x00004012,0x00004013,0x00004014,0x00004015,0x00004016,
+0x00004017,0x00004018,0x7f7f0019,0x3f3f001a,0x0000001b,0xd4e8c01c,
+0x53a7c01d,0xffff001e,0x0ff0c01f,0x01010020,0x5e1f4021,0x7e7f4022,
+0xf0304023,0x35350024,0x3f3f0025,0x0202c026,0x7f7fc027,0x00000028,
+0x00000029,0x0c0cc02a,0x0000002b,0x3f3c802c,0xfefc802d,0xffff002e,
+0xffff002f,0x00000030,0x00000031,0x0808c032,0x0f0f0033,0x22220034,
+0xa8a80035,0x6060c036,0x11110037,0x00000038,0x00000039,0x3030c03a,
+0x0101003b,0x0303003c,0x0b0cc03d,0x0f10c03e,0x0f0f003f,0x80800040,
+0x68680041,0x68680042,0x80800043,0xffff0044,0x03030045,0x38380046,
+0xffff0047,0x38380048,0xc0c00049,0xffff004a,0xffff004b,0xfd3dc04c,
+0x0c0c004d,0x9696004e,0x5a5a004f,0x7f7f0050,0x7f7f0051,0x33330052,
+0x0202c053,0x00000054,0x30300055,0x00000056,0x5656c057,0x06060058,
+0x0e0e0059,0x7e7e005a,0x1515005b,0x0f0f005c,0x0000005d,0x0000005e,
+0x0000005f,0x00000060,0x00000061,0x00000062,0x00000063,0x04040064,
+0x00000065,0x00000066,0xcfcf0067,0x59590068,0x07070069,0x4242006a,
+0x0000006b,0xdbdb006c,0x9494006d,0x2828006e,0x6363006f,0x07070070,
+0xd3d30071,0xb1b10072,0x3b3b0073,0x06060074,0x58580075,0xf7f7c076,
+0x00000077,0x00000078,0x02020079,0x0000007a,0x0909007b,0x0505007c,
+0x1616007d,0x6b6b007e,0x0000007f,0xb3b30080,0x04040081,0x00000082,
+0x00000083,0x00000084,0x00000085,0x00000086,0x00000087,0x00000088,
+0x00000089,0x0000008a,0x0000008b,0x0202008c,0x0000008d,0x0000008e,
+0x6666008f,0x66660090,0x66660091,0x66660092,0x66660093,0x66660094,
+0x66660095,0x00000096,0x00000097,0x00000098,0x00000099,0x0000009a,
+0x0000009b,0x0000009c,0x0000009d,0x0000009e,0x0000009f,0xffff00a0,
+0x000000a1,0x606000a2,0x666600a3,0x0c0c00a4,0x666600a5,0x0c0c00a6,
+0x010100a7,0x666600a8,0x666600a9,0x666600aa,0x666600ab,0x666600ac,
+0x666600ad,0x000000ae,0x010100af,0x000000b0,0x000000b1,0xf0f0c0b2,
+0x000000b3,0x050500b4,0x303000b5,0x555500b6,0x333300b7,0x000000b8,
+0x333300b9,0x000000ba,0x353500bb,0x000000bc,0x333300bd,0x000000be,
+0x333300bf,0x000000c0,0x000000c1,0x444400c2,0x000000c3,0x7171c0c4,
+0x7171c0c5,0x030300c6,0x888800c7,0x444400c8,0x010100c9,0x000000ca,
+0x000000cb,0x000000cc,0x000000cd,0x000000ce,0x30f080cf,0x050500d0,
+0x333300d1,0x000000d2,0x050500d3,0x000000d4,0x000000d5,0x050500d6,
+0x000000d7,0x000000d8,0x050500d9,0x000000da,0x333300db,0x000000dc,
+0x333300dd,0x000000de,0x7777c0df,0x888800e0,0x000000e1,0x444400e2,
+0x0303c0e3,0x0f0fc0e4,0x0f0fc0e5,0x444400e6,0x010100e7,0x000000e8,
+0x000000e9,0x000000ea,0x000000eb,0x7777c0ec,0x585800ed,0x7777c0ee,
+0x585800ef,0x000000f0,0x000000f1,0x747400f2,0x0404c0f3,0xa2a200f4,
+0xaaaa00f5,0x242400f6,0x0909c0f7,0x282800f8,0x101000f9,0x555500fa,
+0x808000fb,0x888800fc,0x888800fd,0x888800fe,0x888800ff,0x80800100,
+0x38380101,0xb8b80102,0x80800103,0x38380104,0x78780105,0xc0c00106,
+0x03030107,0x00000108,0x00000109,0x0000010a,0x0400810b,0x0c0c010c,
+0x0000010d,0x0000010e,0x9696010f,0x77770110,0x5a5a0111,0x00000112,
+0x00000113,0x21210114,0x70700115,0x00000116,0x00000117,0x00000118,
+0xb3b30119,0x5555011a,0x0b0b011b,0x0000011c,0x0303c11d,0x0000011e,
+0xb3b3011f,0x55550120,0x30300121,0x46460122,0x00000123,0x00000124,
+0x00000125,0x21210126,0x23230127,0x02020128,0x0000ffff,0x00100000,
+0x00100800,0x00100050,0x00100150,0x00100250,0x00100950,0x00100255,
+0x00100955,0x00100a55,0x00110a55,0x001009f5,0x0010095f,0x00100a5f,
+0x00110a5f,0x00000a50,0x00000955,0x00000a55,0x00010a55,0x000009f5,
+0x0000095f,0x00000a5f,0x00010a5f,0x000009ff,0x000109ff,0x00010aff,
+0x000111ff,0x000112ff,0x000113ff,0x000114ff,0x000115ff,0x000116ff,
+0x000135ff,0x000136ff,0x000155ff,0x000156ff,0x0001d5ff,0x0d0118f9,
+0xdef400e4,0x0ffc06f1,0x1dfffa27,0x091810f0,0xe010f20a,0x11041417,
+0xf2faf114,0xe2fcf7db,0x13eee1fb,0xe91cff0d,0x0318171a,0x03e8da00,
+0xe9e417e6,0x1312fff3,0xe204e105,0xf206f725,0x11fcf1ec,0xe0f014e9,
+0x09e8f2f6,0x1d011010,0x0f04fad9,0xde0c060f,0x0dff001c,0xf61a1807,
+0x0f16e40e,0x18ec05f9,0xff1e0a1b,0xffe22600,0x18140ae5,0x0fea0507,
+0xf6e6e4f2,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,0x00000000,
+0x00000000,0x4ff7e92d,0x468a4f8a,0x21004691,0x46052290,0x9e0c4698,
+0xb038f8dd,0xf984f7e5,0xb96c683c,0x7032f44f,0xf7e74621,0x6038faf1,
+0xf0002800,0x462180fa,0x7232f44f,0xf974f7e5,0x2e01683a,0x2600bf08,
+0x208cf8c5,0x32c4f892,0xf8823301,0x231132c4,0x807cf8c5,0x9b0d612b,
+0x652b606e,0x904cf8c5,0xf0402e00,0xf04f80de,0x680a51c0,0x602b0f13,
+0x0c1b0413,0xf3c2632b,0xf3c24303,0x636b5203,0xb10a63aa,0x63ab2301,
+0x3b0e6bab,0xbf8c2b01,0x23012300,0x3040f885,0xb92b682b,0x46414628,
+0xf0004652,0xe006f9ed,0xf0402b01,0x462880ba,0xf0004652,0xf8d5f9fd,
+0x2b003084,0x80b1f000,0x46282100,0xf888f7e4,0x46284604,0xf942f7e4,
+0x6168280a,0x6ae3bfc4,0x686363eb,0x5f80f013,0xd00561ab,0x3604f8d4,
+0xf003622b,0x61eb03ff,0x63e0f44f,0x270060ab,0x33fff04f,0x463c60eb,
+0x612b3312,0x4621e011,0xf7e44628,0x4628f865,0xfe4cf7e3,0xf7e44628,
+0xf8d5f91d,0xf853308c,0x45983024,0x4627bf08,0xf8d53401,0x429c3084,
+0x4639d3e9,0xf7e44628,0x4628f84f,0xf850f7ea,0x6ceb9a0f,0x92014628,
+0x46422100,0xb000f8cd,0xf95ef7e5,0xd1642800,0x0f00f1bb,0x465ed101,
+0xf8dbe001,0xf2416000,0x62ab43e4,0x4630b12e,0xf7e4492f,0x6268fe63,
+0x2000b940,0xf7e4492d,0x6268fe5d,0xf64fb910,0x626b73ff,0x492a4630,
+0xfe54f7e4,0x80b0f8df,0xf89862e8,0x2c004000,0x696bd12b,0xdd0b2b13,
+0x6100f44f,0x46224628,0xf820f7e4,0x65844639,0x462865c4,0xf80cf7e4,
+0x6ce94628,0xfac4f7e5,0x6ce94628,0xfaa0f7e5,0x4630491a,0xf7e46cec,
+0x4621fe31,0x46284602,0xfbdcf7e5,0x6ce94628,0xfd14f7e5,0x6ce94628,
+0xfa6ef7e5,0xf8882301,0x696b3000,0xdd112b0f,0x490f4630,0xfe1af7e4,
+0x21004b0e,0xbf082800,0x90004618,0x46282288,0x33fff04f,0xff24f7e3,
+0x2500e000,0xe8bd4628,0x46c08ffe,0x0001c538,0x00016ed3,0x00016eda,
+0x00016ee4,0x00016eef,0x00016ef8,0x000a005a,0x0001c5d0,0x4f18b5f0,
+0x7839b085,0xb1094604,0xe0274816,0x4b174a16,0x4e142800,0x4602bf08,
+0x4603bf08,0x91019100,0x92039302,0xf2444630,0x46227110,0x53c0f04f,
+0xfebcf7ff,0xb9584605,0x108cf8d6,0x4608b909,0x4620e00c,0x7232f44f,
+0xfb92f7e7,0xe0054628,0x23204a07,0x23016013,0x4630703b,0xbdf0b005,
+0x0001c530,0x0001c540,0x0001c5b8,0x0001c5b4,0x0001c53c,0x47ffe92d,
+0x46884681,0x21002090,0x461d4692,0x9f0e9e0d,0xf996f7e7,0xb1e04604,
+0x46499b0c,0x46429301,0x95004653,0x97039602,0xfe84f7ff,0xb9304605,
+0x46214640,0xf7e72290,0x4628fb5f,0xb90ee00a,0xe0004633,0x67636833,
+0x463bb90f,0x683be000,0x462067a3,0xe8bdb004,0x46c087f0,0x4ff0e92d,
+0xb0872b01,0x91054605,0x93039204,0xd9019f11,0xe09d2000,0x0b00f04f,
+0x8084f8d0,0x9040f8dd,0xe08a46da,0x208cf8d5,0x0688ea4f,0xf8c318b3,
+0x9b0591c0,0x45994641,0x9c04bf08,0xbf084628,0x4028f842,0xf88ef7e4,
+0x8080f8c5,0x462867e8,0x408cf8d5,0xf80af7e4,0x308cf8d5,0x18f31934,
+0x0080f8c4,0x3080f8d3,0x6f00f5b3,0x4628d11f,0xf7e46fec,0x2804f813,
+0x2805d001,0x6823d903,0x6703f3c3,0x6b2ae053,0x3306f244,0xd101429a,
+0xe04c2706,0x7304f244,0xd101429a,0xe0462709,0x3365f245,0xbf14429a,
+0x27072701,0xf5b3e03f,0xd13c6f03,0x46286fe9,0x6670f501,0x6177f501,
+0xffd0f7e3,0x0301f108,0x3084f8c5,0x051b0d03,0x5fc0f1b3,0xf420d12b,
+0xf024647e,0x2200041f,0xf8d5e008,0xeb03308c,0xf8d30382,0x429c31c0,
+0x3201d005,0x3084f8d5,0xd3f2429a,0x2a11e001,0xf106d115,0x4628019c,
+0xffacf7e3,0x9c039400,0x4003f3c0,0x90011c63,0x46289905,0xf7ff9a04,
+0x9b10ff6d,0xf1b34483,0xbf085fc0,0xf10a1a3f,0xf1080a01,0xf5090801,
+0x45ba5980,0xf1b8d203,0xf67f0f0f,0xeb0aaf6f,0xf8c5030b,0x46183084,
+0xe8bdb007,0x46c08ff0,0x460db537,0x46046fc1,0x617bf501,0xff7ef7e3,
+0xf81cf7e4,0x53c0f04f,0x23019300,0x93014601,0x462a4620,0xf7ff3b01,
+0xf8c4ff3d,0xbd3e0084,0x4ff0e92d,0x30fcf8d1,0x930fb091,0xf5034605,
+0x93076360,0xae0fe147,0x2300220e,0x46314628,0xf94cf7e4,0x4604280f,
+0x8145f000,0x46282200,0x46134631,0xf942f7e4,0x070ef010,0x8138f040,
+0x433bf240,0x5f14ebb3,0x210bf3c4,0x1804f3c0,0xf640d104,0x429973ff,
+0x8125f000,0x2244f3c0,0x2a009209,0x811ff000,0x43c4f3c0,0x3b84f3c0,
+0x020beb13,0xd11b9308,0x3367f240,0xf0404299,0xab0e8112,0xab0d9301,
+0xab0c9302,0xab0b9303,0x46289304,0x46134631,0xf7e49200,0x2800f921,
+0x8101f000,0x208cf8d5,0xf8c29b0e,0xe0fa32c0,0xa084f8d5,0x308cf8d5,
+0x038aeb03,0x40c0f8c3,0xf8c3463c,0xf8c30100,0xe00b1080,0x46282201,
+0x46134631,0xf8f2f7e4,0x000ef000,0xf0402802,0x340180e7,0xae0f4544,
+0x2200d1f0,0xf10d4613,0xf10d0938,0xaf0c0834,0x4628ac0b,0x92004631,
+0x9004f8cd,0x8008f8cd,0x94049703,0xf8e8f7e4,0xb9e84602,0x93002340,
+0x46314628,0xf8cd4613,0xf8cd9004,0x97038008,0xf7e49404,0xb110f8d9,
+0x0801f04f,0x9b0de00e,0xf0402b00,0x9b0b80b9,0xf0402b00,0x9b0c80b5,
+0x5f80f5b3,0x80b0f040,0x0800f04f,0x308cf8d5,0xeb039a0e,0xf8c3038a,
+0x9a0c21c0,0xf8c32401,0xab0e2140,0xab0d9301,0xab0c9302,0xab0b9303,
+0x93042200,0x4628a90f,0x92004623,0xf8acf7e4,0xb1604601,0xd10a2c01,
+0xf5b39b0c,0xd1065f80,0x308cf8d5,0xeb039a0e,0xf8c3038a,0xf8d52200,
+0x9a0c308c,0x038aeb03,0x2180f8c3,0x2701b909,0x3401e019,0x2400e7d5,
+0x93002300,0x9301ab0e,0x9302ab0d,0x9303ab0c,0x9304ab0b,0xa90f4628,
+0x4623463a,0xf7e41c66,0xb108f87f,0xe7eb4634,0xd0612e00,0x9a093701,
+0xd1e44297,0xe0212400,0x930023c0,0x9301ab0e,0x9302ab0d,0x9303ab0c,
+0x9304ab0b,0xa90f4628,0x23004622,0xf864f7e4,0xd0492800,0x2b009b0b,
+0x9b0cd146,0x5f80f5b3,0xb934d142,0x308cf8d5,0xeb039a0e,0xf8c3038a,
+0x34012280,0xd1db455c,0xe0252400,0x93002380,0x9301ab0e,0x9302ab0d,
+0x9303ab0c,0x9304ab0b,0xa90f4628,0xbf0c2f01,0x1c624622,0xf7e42300,
+0xb308f83b,0xb9fb9b0b,0xf5b39b0c,0xd11b5f80,0x0f00f1bb,0xb934d107,
+0x308cf8d5,0xeb039a0e,0xf8c3038a,0x34012280,0x429c9b08,0xf1b8d1d6,
+0xd1040f00,0x3084f8d5,0xf8c53301,0x9b0f3084,0x42939a07,0xaeb3f4ff,
+0xf8c52300,0xb0113084,0x8ff0e8bd,0x41f0e92d,0x46884605,0x4611461f,
+0x636cf500,0x781e2000,0x2434b9c6,0xf404fb00,0x606cf504,0x221f1828,
+0xfd0af7e4,0x19649b06,0x3eecf8c4,0x46309b07,0x3ee8f8c4,0xf8c49b08,
+0xf8c48ee0,0xf8c47ee4,0xe0053ef0,0x33343001,0xd1e02816,0x0015f06f,
+0x81f0e8bd,0x4604b570,0x4605b908,0x6880e09e,0xf7e3b108,0x4625fad3,
+0xf8d52600,0xb1200778,0x47986803,0xf8c52300,0x36013778,0x2e063504,
+0xf8d4d1f3,0x68285848,0xf001b118,0x2300f877,0x4620602b,0xf98af7ee,
+0x1818f8d4,0x46204606,0xfaaef001,0x46202101,0xfdb0f7f9,0x1d14f8d4,
+0xf8d4b131,0xf7e9073c,0x2300fedf,0x3d14f8c4,0x1d2cf8d4,0xf8d4b131,
+0xf7e9073c,0x2300fed5,0x3d2cf8c4,0x0534f641,0xb1295961,0x073cf8d4,
+0xfecaf7e9,0x51632300,0x07fcf8d4,0xf001b120,0x2300fac5,0x37fcf8c4,
+0x554cf504,0xb1186828,0xfe6af000,0x602b2300,0x37d8f8d4,0x2300b113,
+0x37d8f8c4,0x4554f241,0xb1185960,0xfb82f001,0x51632300,0x1750f8d4,
+0x6ca0b141,0x2754f8d4,0xf88ef7e7,0x60e32300,0x3750f8c4,0x46224918,
+0xf7ee4620,0x4620f9c9,0x46224916,0xf9c4f7ee,0xb11868a0,0xfaf0f7e3,
+0x60a32300,0x0288f243,0xb10b58a3,0x50a32300,0x0800f8d4,0xf000b120,
+0x2300fced,0x3800f8c4,0x07f8f8d4,0xf001b120,0x2300fac3,0x37f8f8c4,
+0x46216ca0,0x3204f243,0x0501f1d6,0x2500bf38,0xf85af7e7,0xbd704628,
+0x0001a394,0x0001a39f,0x4ff0e92d,0x9005b091,0xf243460c,0x21003004,
+0x46994615,0xa06cf8dd,0x8078f8dd,0x6068f89d,0xfe66f7e6,0x28004607,
+0x8478f000,0xf2432100,0xf7e43204,0xf507fce9,0x33046328,0xf8c79a05,
+0xf5073848,0x330c6304,0x3844f8c7,0x273cf8c7,0x46384649,0x9000f8c7,
+0xa048f8c7,0x8808f8c7,0x603df887,0xfdc2f7ee,0xf7e94638,0x683bff97,
+0x6774f887,0x3740f8c7,0x63ecf507,0x375cf8c7,0x62eaf507,0xf8c73b0c,
+0x4628a748,0x93029201,0x9a1c4651,0xf8cd9b1d,0xf7ff8000,0xf8c7fc87,
+0xb908074c,0xe333230b,0x8750f8d7,0xf8c760b8,0x4640800c,0xf7e44991,
+0xb120fa11,0x460a2100,0xf8d8f7e4,0x4640b284,0xf7e4498d,0xb120fa07,
+0x460a2100,0xf8cef7e4,0x4620b285,0xf7e94629,0xb908fef5,0xe313230c,
+0xf6402200,0xf8a70112,0xf8a74826,0xf8d75828,0xf7e3074c,0xf8c7fbef,
+0xf8d70758,0xf7e3074c,0x68bafc99,0x0744f8c7,0x6b116078,0xb758f8d7,
+0x3306f244,0xf8c74299,0xd117b80c,0x2b026b53,0x6b91d91a,0xd1052902,
+0x2828f8b7,0x3303f244,0xd117429a,0x2828f8b7,0x3321f244,0xd002429a,
+0x429a3303,0x2901d108,0xe005d10c,0x3311f244,0xd1014299,0xb12b6b53,
+0x1380f44f,0xf0034103,0xe0000001,0xb9082000,0xe2cd230d,0x074cf8d7,
+0xf9d0f7e3,0x21004638,0xff3ef7ea,0xf04f4638,0xf7eb31ff,0x4638f835,
+0xfe44f7ea,0x230eb908,0x495ae2ba,0xf7e44640,0x68baf9c1,0xbf0828ff,
+0xb2802001,0x0384f8a7,0xb1b86a51,0xd80128ff,0xe0142401,0x3b010b03,
+0xd80f2b01,0x2303f3c0,0xd80b2b09,0xf3c0b153,0x2b091303,0xf000d806,
+0x2b09030f,0x2400bf8c,0xe0002401,0x6a922400,0x43e4f241,0xd110429a,
+0x6382f5a1,0x2b013b07,0x283fd801,0xf240e007,0x4299430c,0x3315d004,
+0xd1024299,0xd8002850,0xb90c2400,0xe27b230f,0x4640493b,0xf982f7e4,
+0xf887493a,0x46400386,0xf97cf7e4,0xf8c74938,0x46400388,0xf976f7e4,
+0x174cf8d7,0x038cf8c7,0xf2416a8a,0x429a036b,0x6a4bd10c,0xd1092b4e,
+0x3384f8b7,0xd9052b40,0x3388f8d7,0x0302f043,0x3388f8c7,0x3388f8d7,
+0x0f20f013,0x2301d102,0x37c0f887,0x3324f244,0xd014429d,0x429d3b0b,
+0x3b07d011,0xd00e429d,0x429d3316,0x3303d00b,0xd008429d,0x429d3b17,
+0x3307d005,0xd002429d,0x429d3319,0x2302d101,0x2301e000,0x3770f8c7,
+0x3770f8d7,0xf8c74638,0x230132f0,0x3840f8c7,0xf8daf001,0x0818f8c7,
+0x2310b908,0xf244e220,0x429d3321,0x3b0ed01e,0xd01b429d,0x429d3307,
+0x3310d018,0xd015429d,0x429d3b14,0x3307d012,0xbf14429d,0x26012600,
+0x46c0e00d,0x0001a3b2,0x00016ec0,0x0001a3b9,0x0001a3c2,0x00016ee4,
+0x0001a3ca,0x46312601,0xf7eb4638,0xf8d7f823,0x2e002848,0x2302bf0c,
+0x60532301,0xf8d76096,0xf8d7074c,0xf7e34844,0x6020f8bb,0x074cf8d7,
+0x4844f8d7,0xf8b0f7e3,0x380cf8d7,0xf8d36060,0x6879315c,0xf8c74ab6,
+0xf8c73830,0x23063834,0x2303fb01,0x0844f8d7,0x475cf8d7,0xf8d76303,
+0x46383848,0xf8d7685a,0x46593818,0x463b9300,0xfe84f000,0xb9086020,
+0xe1c12311,0x375cf8d7,0x684b6819,0xd0012b01,0xe1b92312,0x2848f8d7,
+0x030ff04f,0x3130f8a2,0x33fff240,0x3132f8a2,0x60116853,0xd1152b02,
+0x73133b01,0xf24468b9,0x6b0a3306,0xd106429a,0x2b026b8b,0xf8d7d103,
+0x23002848,0xf8d77313,0x46383848,0x7b1a2103,0xfd48f7e9,0x2848f8d7,
+0x2b026853,0x3b01d101,0xf8d77313,0xf2422848,0x68100356,0x42998a01,
+0x3b01d806,0xd2344299,0x42993b05,0xe030d009,0x0360f242,0xd01f4299,
+0x43f5f24e,0xd0214299,0x7c83e027,0xd1052b01,0x033bf06f,0x3120f8c2,
+0xe004334b,0x0345f06f,0x3120f8c2,0xf8c2335a,0xf8d73124,0xf4133388,
+0xd0195f80,0x3120f8d2,0xf8c23b02,0xe0133120,0x034af06f,0x3120f8c2,
+0xe00b335a,0x0395f06f,0x3120f8c2,0x7396f503,0xf06fe004,0xf8c2034a,
+0x335f3120,0x3124f8c2,0x1848f8d7,0xf8d14638,0xf8c13120,0xf8c1311c,
+0xf8d13114,0xf8c13124,0x31143118,0xf9cef7ec,0x1848f8d7,0x237f2200,
+0x0014f101,0x31749300,0x92014613,0xfce6f7f8,0x495f4b5e,0x0750f8d7,
+0xbf082e00,0xf7e44619,0xb2c0f82d,0x4b5bb940,0xf8d7495b,0x2e000750,
+0x4619bf08,0xf822f7e4,0x1e43b240,0xd9012b0e,0xe0392300,0x6b1a68bb,
+0x3325f244,0xd001429a,0xd1052801,0x3209f642,0x54bb2300,0xe0063201,
+0xd1052802,0xf6422301,0x54bb3209,0x54bb18d2,0x494b4b4a,0x0750f8d7,
+0xbf082e00,0xf8d74619,0xf7e34848,0xf884fffb,0xf8d70109,0xf8911848,
+0x2bff3109,0xf897d108,0x2a012386,0x2308d104,0x3109f881,0xe0074613,
+0x0205f343,0xeb03099b,0xf8810382,0x23013109,0x3314b90b,0xf1b6e0d4,
+0xf43f3fff,0x2100aeb0,0xf7e94638,0x2103ff03,0xf7eb4638,0x4b33f801,
+0x681c4d33,0x0758f8d7,0x7340f04f,0xf8c04629,0xe0153160,0x78ca790b,
+0xea43041b,0x798a6302,0x794a4313,0x2302ea43,0x3164f8c0,0x780a784b,
+0xea43021b,0x788a4302,0x43133107,0x3164f8c0,0x0301ebc5,0xd3e542a3,
+0x49224640,0xffaaf7e3,0x360bf642,0x492055b8,0xf7e34640,0xf507ffa3,
+0x340b542c,0xf6427823,0xf5073810,0x3510552c,0x0008f807,0x3301b90b,
+0x462055bb,0xf7e32101,0xf642fef9,0xb2c0330c,0x330154f8,0x782b54f8,
+0x3301b913,0x3008f807,0x21014628,0xfeeaf7e3,0x3311f642,0x54f8b2c0,
+0x33012400,0xe01d54f8,0x0001bcfc,0x0001a3db,0x0001a3d6,0x0001a3e4,
+0x0001a3e0,0x000177c2,0x0001a3e8,0x00025010,0x0001e6e4,0x0001a3ec,
+0x0001a3f4,0x46384621,0xfe5af7ea,0xf7ea4638,0x3401fc2d,0x3840f8d7,
+0xd3f3429c,0xf8d72300,0x4aad074c,0x970049ad,0xfee0f7e2,0x21004638,
+0xff6af7ed,0x0750f8d7,0xf7e349a9,0x4603ff23,0xf10db978,0x49a7041a,
+0x4620221f,0xf8f4f7e4,0x0750f8d7,0xf7e34621,0x4603ff15,0x2315b908,
+0xf507e02a,0xf1086802,0x46180818,0xf7e34641,0xf897fe37,0xf8971839,
+0xf897283a,0xf8976838,0xea01083b,0xf8970302,0xea06483c,0xf8970303,
+0xea00583d,0xea040303,0xea050303,0x2bff0303,0xea41d009,0xea460302,
+0xea400303,0xea440303,0x431d0303,0x2316d102,0xe140461c,0x99054638,
+0x464b4652,0xff3cf000,0x07f8f8c7,0x241fb908,0x4638e135,0xf94cf000,
+0x0800f8c7,0x243db908,0x4981e12d,0xf7e368f8,0xf243fef1,0x52f82310,
+0x68f8497e,0xfeeaf7e3,0x2312f243,0x463852f8,0xf962f7ea,0x3848f8d7,
+0xf6426818,0x5cf93309,0xfda8f7f3,0x5046f507,0x22064641,0xf7e43042,
+0x4641f967,0xf1072206,0xf7e4004c,0x4638f961,0xff82f000,0x4354f241,
+0xb90850f8,0xe0fe2429,0xf0004638,0xf8c7fead,0xb90807fc,0xe0f62435,
+0xf0004638,0xf507fa4d,0x6018534c,0xf0402800,0x243680d1,0xf8d7e0eb,
+0x68183848,0xf7f16859,0xf507fa11,0x801853b7,0x3848f8d7,0x54b6f507,
+0xf8d36818,0x68068004,0xf9f6f7f1,0x34242500,0x23ffb2c0,0x90039301,
+0x46204643,0x46324629,0x95029500,0xfbd0f7f8,0x22904649,0x50baf507,
+0xf91ef7e4,0x22904649,0x703df507,0xf918f7e4,0x0206f04f,0x26fcf8a7,
+0x0305f04f,0x7225f44f,0x33a0f8a7,0x23a2f8a7,0x0301f04f,0x02c4f04f,
+0xf8a74c43,0xf8a73634,0x46292636,0x4b424a41,0x95004638,0xf7f89701,
+0x1d23ff27,0x0007e893,0xe883466b,0x68230007,0x21074638,0xf7f8463a,
+0x2206ff4f,0x003af10d,0xf7e44938,0xf8b7f8e9,0xf2442828,0x429a3321,
+0x3b0ed011,0xd00e429a,0x429a3307,0x3310d00b,0xd008429a,0x429a3b14,
+0x3307d005,0xbf14429a,0x24012400,0x2401e000,0xf8d74638,0x46221dc8,
+0xfac4f7ef,0xb1084605,0xe06c2439,0x013af10d,0x46384622,0xf9d8f7f9,
+0x739cf44f,0xf103fb04,0xf8c219ca,0x28000a94,0x2301d05c,0xf8d27603,
+0xf5010a94,0x1879612f,0x310830f0,0xf7e42228,0xf1b4f8ab,0xd0b83fff,
+0x2398f8d7,0x605ef507,0x300432c0,0xf7e32110,0x6cbafe17,0x60d74b12,
+0x9a1f6093,0x6015b102,0xe0404638,0x9b1f241e,0x4618b90b,0x9a1fe03b,
+0x60142000,0x46c0e037,0x0000b57d,0x0000b569,0x0001a3ff,0x0001a3fc,
+0x0001a407,0x0001a41a,0x0001a850,0x00009811,0x000095e1,0x0001a116,
+0x000072f1,0x59b4f507,0x0930f109,0x22902100,0xf7e44648,0xf241f84d,
+0xf04f63dc,0x52fa0264,0x33302203,0x463854fa,0x23012200,0x512cf44f,
+0xfb18f7ef,0xf43f28ff,0xe71aaf16,0x46382437,0xfa88f7ff,0xb011e7bf,
+0x8ff0e8bd,0x4604b510,0x4906b150,0x68004622,0xfcbef7ed,0x46216823,
+0x22046c98,0xfb74f7e6,0x46c0bd10,0x0001a95c,0x2100b530,0xb0854605,
+0xf7e62004,0xb908f98d,0xe0104604,0x22042100,0xf7e44604,0x4b07f811,
+0x93006025,0x93012300,0x46289302,0x4a054904,0xf7ff4623,0x4620fa2b,
+0xbd30b005,0x0000c9a1,0x0001a8a8,0x0001a95c,0x43f0e92d,0xf89db087,
+0xf8dd4038,0x9400904c,0x46989c0f,0x9c109401,0x9014f8cd,0x9c119402,
+0x9c129403,0xf7ff9404,0x4605fae3,0xf8d9b918,0x48494000,0xf44fe00a,
+0x21007035,0xf950f7e6,0x07a0f243,0x51e84604,0x4844b928,0x4a444641,
+0xf812f7e4,0x2100e063,0x7235f44f,0xffccf7e3,0x237f59ea,0x60156055,
+0x36fff885,0x24006853,0x4700f883,0x94014b3b,0x94029300,0x493a4628,
+0x59eb4a3a,0xf9def7ff,0xb1084606,0xe7dd4838,0x073cf8d5,0x59ea4937,
+0xf7e94b37,0xf8c5f917,0xb9300d14,0x46414835,0xf7e34a2d,0x4634ffe5,
+0x59eae035,0xf8852301,0x49316d09,0x32c4f8c2,0xf7e368e8,0x4604fd03,
+0x482e4621,0xffd4f7e3,0x4620b144,0xf7e3492c,0xb918feed,0x230259ea,
+0x32c4f8c2,0x04a0f243,0x4828592b,0x12c4f8d3,0xffc2f7e3,0xf0005928,
+0x4603f851,0x4604b110,0xe7a34823,0x0f00f1b9,0xf8c9d001,0x592a0000,
+0xf8c24820,0x49203218,0xfb52f7e6,0xf8c9e002,0xb90d4000,0xe0134628,
+0x04a0f243,0xb15a592a,0x4628490e,0xfbf4f7ed,0x59296ca8,0x7235f44f,
+0xfaaaf7e6,0x512b2300,0xf7ff4628,0x2000f9a7,0xe8bdb007,0x46c083f0,
+0x0001ac01,0x0001ac1e,0x0001a9ec,0x0000d0e9,0x0001a9fc,0x0001ac40,
+0x0001ac50,0x0000d059,0x0001b70f,0x0001ac76,0x0001aca2,0x0001acaa,
+0x0001acbd,0x0001acc1,0x0001acdb,0x0001ad0a,0x0000cf69,0x2100b510,
+0xf44f4604,0xf7e660e1,0xf8c4f89b,0xb3400220,0xf44f2100,0xf7e362e1,
+0x2080ff1f,0xf7e62100,0xf8c4f88f,0xb1e002c0,0x22802100,0xff14f7e3,
+0x490e480d,0xf7e64622,0x480dfaf3,0x4622490d,0xfaeef7e6,0x4622480c,
+0xf7e6490c,0x2200fae9,0x46102308,0x2224f8c4,0x322cf8c4,0x2230f884,
+0x2001e000,0x46c0bd10,0x0001ae5b,0x0000da1d,0x0001ae64,0x0000da99,
+0x0001ae6c,0x0000d9f1,0x4601b510,0x6803b128,0x72bef44f,0xf7e66c98,
+0x2000fa33,0x46c0bd10,0x2100b5f0,0x4604b087,0x70bef44f,0xf84cf7e6,
+0x28004605,0x81a9f000,0xf44f2100,0xf7e372be,0xf640fecf,0xf44f108a,
+0x80e8539b,0x4050f241,0x8168812b,0x53a4f241,0x6044f241,0x81ab602c,
+0x462e81e8,0x2100462a,0xf44f186b,0x82186080,0x76932350,0x231d3102,
+0x320177d3,0xd1f3290a,0xf8852308,0x3b013024,0x3025f885,0x3026f885,
+0xf8852303,0xf06f3027,0xf8850301,0xf8853029,0xf885302a,0xf885302b,
+0xf06f302c,0x24000305,0x3036f885,0x3037f885,0x3038f885,0x3039f885,
+0x303af885,0x303bf885,0x303cf885,0x303df885,0x303ef885,0x030df06f,
+0x4028f885,0x402df885,0x402ef885,0x402ff885,0x4030f885,0x4031f885,
+0x4032f885,0x4033f885,0x4034f885,0x4035f885,0x303ff885,0x3040f885,
+0x3041f885,0x3042f885,0x3043f885,0x3044f885,0x0048f105,0x3045f885,
+0x0124f105,0x3046f885,0x3047f885,0xf7e32224,0x1c63fe77,0xb2dc2200,
+0x206cf886,0x207bf886,0x2c0f3601,0x18abd1f5,0x24003201,0xf8832ae1,
+0xd1f8408a,0xf8852328,0x2324316b,0x316cf885,0x70b8f505,0xf5052320,
+0xf88571b4,0xf885316d,0xf885316e,0xf885316f,0x30013170,0x22063103,
+0xfe4ef7e3,0x46274e82,0x23124881,0x0003fb07,0xfd42f7e8,0x7bf2b318,
+0x2a018a34,0xd1187bb3,0xd0102b03,0xd0022b05,0xd00c2b02,0x2100e017,
+0xf7e3460a,0xa906fa4b,0x0d02f821,0x19282202,0xfe2ef7e3,0x2100e00b,
+0xf7e3460a,0x5528fa3f,0x3b02e005,0xd8022b01,0xf7ef1929,0x3701ffd5,
+0x2f223612,0xf895d1d0,0x486a3020,0x3021f885,0x3022f885,0x3023f885,
+0xfd0ef7e8,0x2210b1b0,0x0106f10d,0xffc0f7ef,0xd10f2804,0x3006f89d,
+0x3143f885,0x3007f89d,0x3147f885,0x3008f89d,0x314bf885,0x3009f89d,
+0x314ff885,0xf7e8485a,0xb190fcf3,0xf10d2210,0xf7ef0106,0x2803ffa5,
+0xf89dd10b,0xf8853006,0xf89d3093,0xf8853007,0xf89d3097,0xf8853008,
+0x4850309b,0xfcdcf7e8,0x2210b330,0x0106f10d,0xff8ef7ef,0xd11f2808,
+0x3006f89d,0x30adf885,0x3007f89d,0x30aff885,0x3008f89d,0x30b1f885,
+0x3009f89d,0x30b3f885,0x300af89d,0x30b5f885,0x300bf89d,0x30b7f885,
+0x300cf89d,0x30b9f885,0x300df89d,0x30bbf885,0xf7e8483b,0xb1b0fcb1,
+0xf10d2210,0xf7ef0106,0x2804ff63,0xf89dd10f,0xf8853006,0xf89d30bf,
+0xf8853007,0xf89d30c3,0xf8853008,0xf89d30c7,0xf8853009,0x482f30cb,
+0xfc96f7e8,0x2210b390,0x0106f10d,0xff48f7ef,0xd12b280b,0x3006f89d,
+0x30eff885,0x3007f89d,0x30f3f885,0x3008f89d,0x30f7f885,0x3009f89d,
+0x30fbf885,0x300af89d,0x30fff885,0x300bf89d,0x3103f885,0x300cf89d,
+0x3107f885,0x300df89d,0x310bf885,0x300ef89d,0x310ff885,0x300ff89d,
+0x3113f885,0x3010f89d,0x3117f885,0xf7e84814,0xb1b0fc5f,0xf10d2210,
+0xf7ef0106,0x2804ff11,0xf89dd10f,0xf8853006,0xf89d3120,0xf8853007,
+0xf89d3124,0xf8853008,0xf89d3128,0xf8853009,0x4628312c,0xbdf0b007,
+0x0001af0c,0x0001b170,0x0001b179,0x0001b182,0x0001b18b,0x0001b194,
+0x0001b19e,0x4604b570,0xd0562800,0x1e5d6d03,0x2d006505,0xf8d0d151,
+0xb1291d38,0xf44f6c43,0x6c987280,0xf858f7e6,0x1d40f8d4,0x6c63b129,
+0x7280f44f,0xf7e66c98,0xf8d4f84f,0xb1291d3c,0xf44f6c63,0x6c987280,
+0xf846f7e6,0x1d44f8d4,0x6c63b129,0x7280f44f,0xf7e66c98,0xf8d4f83d,
+0xb1211d48,0x220e6c63,0xf7e66c98,0xf241f835,0x59a11690,0x6be3b129,
+0x073cf8d3,0xfe40f7e8,0xf8d451a5,0xb1311c24,0xf8d36be3,0xf7e8073c,
+0xf8c4fe37,0x69615c24,0x42a2680a,0x6ce3d102,0xe003600b,0x42a36cd3,
+0x64d5bf08,0x46216c63,0xf2416c98,0xf7e632ec,0xbd70f80f,0x4ff0e92d,
+0x21004688,0x4607b089,0x68804691,0x469a460a,0xb048f8dd,0xfbf0f7e2,
+0x0f08f010,0xd00a4606,0x4000f8db,0x4650b13c,0xf7ea6a21,0x6d23f89d,
+0x65233301,0xf241e18e,0x210030ec,0xfe10f7e5,0x28004605,0x818ef000,
+0xf2412100,0xf7e332ec,0xf50afc93,0x642b63e8,0xf1b92301,0xf8c50f02,
+0x646fa03c,0x8048f8c5,0xb014f8c5,0x3037f885,0xf016d105,0xbf1c0f01,
+0x5300f44f,0x6a29622b,0xf7ea4650,0x6cabf871,0x33e0f8b3,0xf3c3b29b,
+0xf0032103,0x0b1b020f,0x61a92902,0x626b61ea,0x2904d906,0x2905d004,
+0x2906d002,0x815cf040,0x46282101,0xff08f7ef,0x46282101,0xfe62f7ef,
+0x24016cab,0x43f6f8a3,0x33f8f8b3,0xea404626,0xf3c04003,0xb29a330f,
+0xf242852b,0x0f000363,0xf885429a,0xf040002a,0x2100813f,0xf7f04628,
+0x4628fcb5,0xfebcf7ef,0xf8c5233c,0x23143db4,0xf885220a,0xf2413030,
+0x54ea13f0,0x2203191b,0x54ea2100,0x0308f04f,0x1db8f8c5,0x4054f885,
+0x3dc2f8a5,0x426cf885,0x3101186a,0x292d237f,0x31c9f882,0x313cf882,
+0xf04fd1f6,0xf8a533ff,0x6c6b324e,0x3388f8d3,0x3f80f413,0x2301d104,
+0x3033f885,0x3d54f885,0x24006c6b,0xf7e26898,0xf8c5fa59,0xf8c54fa4,
+0x6be80df4,0xf7e96c6e,0x2802f8e5,0x80d4f040,0x68f04980,0xf98af7e3,
+0x0f85f885,0x68f0497e,0xf984f7e3,0x0f88f885,0x68f0497c,0xf97ef7e3,
+0x0f89f885,0x68f0497a,0xf978f7e3,0x0f8af885,0x68f04978,0xf972f7e3,
+0x0f8bf885,0x68f04976,0xf96cf7e3,0x0f8cf885,0x68f04974,0xf966f7e3,
+0x0f8df885,0x68f04972,0xf960f7e3,0x0f8ef885,0x68f04970,0xf95af7e3,
+0x0f8ff885,0x68f0496e,0xf954f7e3,0x0f90f885,0x68f0496c,0xf94ef7e3,
+0x0f91f885,0x68f0496a,0xf948f7e3,0x0f92f885,0x496868f0,0xf942f7e3,
+0xf980fa5f,0xf889fa5f,0x8084f885,0x463b4627,0x4a632120,0xf7e34668,
+0x68f0fc11,0xf7e34669,0xeb05f931,0x37010347,0xf8a32f03,0xd1ee0060,
+0x1cfb2700,0x4a5a2120,0xf7e34668,0x68f0fbff,0xf7e34669,0xeb05f91f,
+0x37010347,0xf8a32f03,0xd1ee0066,0x1dbb2700,0x4a512120,0xf7e34668,
+0x68f0fbed,0xf7e34669,0xeb05f90d,0x37010347,0xf8a32f03,0xd1ee006c,
+0x494a68f0,0xf8def7e3,0xb3184604,0x460a2100,0xffa4f7e2,0xf789fa4f,
+0x2400b280,0xf000192a,0x3401030f,0x0343eba7,0x2c040900,0x3088f882,
+0x68f0d1f4,0xb2ff493e,0xf8e8f7e3,0xf000192a,0x3401030f,0x0343eba7,
+0x2c0c0900,0x3088f882,0xe021d1f4,0x493768f0,0xf8b4f7e3,0x4621b120,
+0xf7e24622,0xb2c0ff7b,0x8088f885,0x8089f885,0x808af885,0x808bf885,
+0xebc02204,0xb2d90308,0x320118ab,0xf8832a0c,0xd1f61088,0x320118ab,
+0xf8832a14,0xd1f91088,0xf8da6d2b,0x3301073c,0x696b652b,0x681b4924,
+0x64eb462a,0x5000f8cb,0xf7e84b22,0x4604fc87,0x0c24f8c5,0x6c6bb940,
+0x6c984629,0x32ecf241,0xfe62f7e5,0xe00e4620,0xf1054628,0x22140118,
+0xfb2af7e3,0xe0064628,0x46296cb8,0x32ecf241,0xfe52f7e5,0xb0092000,
+0x8ff0e8bd,0x0001b634,0x0001b63a,0x0001b640,0x0001b647,0x0001b651,
+0x0001b65b,0x0001b665,0x0001b674,0x0001b683,0x0001b692,0x0001b6a0,
+0x0001b6ae,0x0001b6bc,0x0001b6c6,0x0001b6cd,0x0001b6d3,0x0001b6da,
+0x0000ef41,0x0001b6de,0x4602b570,0x4905460d,0xf7ec4604,0xb125ff65,
+0x46296ca0,0xf7e52224,0xbd70fe1b,0x0001b6e7,0x2100b530,0x4605b085,
+0xf7e52024,0x4604fc35,0x2100b1b8,0xf7e32224,0x230ffabb,0x332d6063,
+0x333c60a3,0x230360e3,0x4b076123,0x93004628,0x49074b06,0x4b079301,
+0x93024a07,0xf7fe462b,0x4620fccd,0xbd30b005,0x00014629,0x00014525,
+0x0001b1f8,0x000145e1,0x0001b6e7,0x4605b570,0x6844b150,0x462a4905,
+0xf7ec4620,0x6ca0ff25,0x22484629,0xfddcf7e5,0xbd702000,0x0001b824,
+0x4605b57f,0x20482100,0xfbf6f7e5,0xb1b04604,0x22482100,0xfa7cf7e3,
+0x60654b10,0x93002600,0x490f4628,0x46234a0f,0x96029601,0xfc96f7fe,
+0x4621b128,0x22486ca8,0xfdbaf7e5,0x22004634,0xf8842301,0x4620202d,
+0xf884325f,0xf8843045,0xf884202c,0xb0043031,0x46c0bd70,0x000157bd,
+0x0001b8fc,0x0001b824,0x4604b570,0xf8d0b1a0,0x690511f8,0xf8d5b131,
+0xf7e8073c,0x2300fbad,0x31f8f8c4,0x46224905,0xf7ec4628,0x6ca8fed5,
+0x69624621,0xfd8cf7e5,0x46c0bd70,0x0001bbaa,0x47ffe92d,0x56bcf240,
+0x46894680,0x21004630,0xf7e54692,0x4604fba1,0xd0562800,0x46322100,
+0xfa26f7e3,0x33fff04f,0xf04f61a3,0xf8a40314,0xf04f3208,0xf8a40328,
+0xf04f3206,0xf8a4032d,0xf04f3204,0x270003fa,0x320af8a4,0xf8842302,
+0x4920320c,0x4b204622,0xf8c46166,0x70a78010,0x720df884,0xf7e84648,
+0x2305fb6d,0x710ef504,0x723bf504,0x321cf8c4,0xbf0c42b8,0x35fff04f,
+0x3337463d,0x01f8f8c4,0x1218f8c4,0x2228f8c4,0x322cf8c4,0x1214f8c4,
+0x2224f8c4,0x4b0fb97d,0x93024640,0x4a0e4629,0x95004623,0xf7fe9501,
+0xb150fc05,0xf8d44648,0xf7e811f8,0x4621fb3d,0x46324650,0xfd24f7e5,
+0x4620463c,0xe8bdb004,0x46c087f0,0x000162a5,0x0001bbba,0x000161a1,
+0x0001bbaa,0x4601b510,0xf8d0b128,0x22cc30c8,0xf7e56c98,0xbd10fd0d,
+0x2100b570,0x20cc4605,0xfb2af7e5,0xb1404604,0x22cc2100,0xf9b0f7e3,
+0x731ef44f,0x50c8f8c4,0x46206223,0x46c0bd70,0x0360bc01,0x034e1000,
+0xf002debf,0xa803580a,0x00f0025e,0x5ea6030a,0x0a00f002,0x535e8202,
+0x020a0000,0x00af5e85,0x88020a00,0x0000b3de,0x8084020a,0x0a0000c3,
+0xff63bc01,0x0040f01f,0xf002de00,0x01000000,0x00f0025e,0x60800100,
+0x6c900d02,0x025e5903,0x030d00f0,0xf0025ed8,0xd8030e00,0x00f002de,
+0x0004020f,0x120000bf,0x23450102,0x01120000,0x000360bc,0x01021511,
+0x00002345,0x42000215,0x1900001f,0x025e0200,0x02d30bf0,0x00b3de01,
+0x6b001900,0x20d36444,0xc585021a,0x19000023,0x025e0200,0x019b0bf0,
+0xf502e089,0x0102ac97,0x000023c5,0xe088011c,0xac97f502,0x8361bc01,
+0x00291100,0x007b00b0,0xbc012b11,0x11000363,0x5e120323,0x1c09f002,
+0x025e9703,0x028509f0,0x00b38101,0x85022f00,0x000023c5,0x8187022f,
+0x280000b3,0x02dea303,0x032f00f0,0xf002dea0,0x02002f00,0x09f0025e,
+0xe0870175,0x6c800d04,0x6444e000,0x00bdb70d,0xf766446b,0xbc0129a0,
+0x97010360,0x60bc0180,0x81370003,0x6b60bc01,0x018a5000,0x060360bc,
+0xbf039237,0x01f002de,0x5ed003ee,0x3302f002,0x02ded003,0x03fb03f0,
+0xf002ded5,0x9103df08,0x04f0025e,0xde96036c,0xda08f002,0x025e0200,
+0x02c10bf0,0x0073c188,0xc4035400,0x05f0025e,0x5ec703bf,0xd905f002,
+0x02dedc03,0x03670df0,0xf0025eaa,0x83032006,0x07f0025e,0xde910328,
+0xe104f002,0x02dec203,0x014e09f0,0x020360bc,0x02003e00,0x0ef0025e,
+0xde0603a5,0x4100f002,0x025e2303,0x021509f0,0x0037c087,0xd4031509,
+0x05f002de,0xde230352,0x4600f002,0x025edb03,0x034500f0,0xf002debf,
+0x02000200,0x0cf0025e,0x5e02008c,0xa00cf002,0x025ea203,0x035100f0,
+0xf0025e56,0x86014f00,0x10090660,0x5e1f0348,0x4f00f002,0x235e6a00,
+0x004e0000,0x002700b0,0xe8008817,0x3700235e,0x5ea60388,0xa400f002,
+0x0e602800,0x03c5e008,0xf002dec4,0x2000ab09,0x200003c2,0xdebf03d5,
+0x1801f002,0x025e8103,0x035600f0,0xf002de00,0x88013600,0x900b02e0,
+0xdebf035c,0x2102f002,0x63408702,0x01580000,0xf4066086,0x86021830,
+0x00006340,0x5eb0005a,0xa1170087,0x02de0200,0x020000f0,0x00634087,
+0xb0005d00,0x10008b5e,0xe0860119,0x1830f406,0xafde8102,0x02620000,
+0x0063c086,0xb0006100,0x1700875e,0xde0200a1,0x0000f002,0x0360bc01,
+0x02068002,0x0007de80,0xda016e00,0x17f00260,0x5e080280,0x7e000007,
+0x0360bc01,0x00a1171e,0xf4025ee0,0xbc016530,0x171c0360,0x5ee000a1,
+0x6430f402,0x0360bc01,0x038d2600,0xf002debf,0x10018400,0x1700035e,
+0x5e8800a1,0xa2370087,0x865ee000,0x00a157f4,0xf45a01e0,0x86026330,
+0x0000c300,0x56b00077,0x6210000b,0x0354b000,0x01621000,0x000360bc,
+0xbf038d26,0x00f002de,0x41b00086,0x6210008f,0x03de0901,0x00a11700,
+0x00875e88,0xe000a157,0x37d4845e,0x5ee000a1,0x06c00387,0x0360bc01,
+0x038d4600,0xf002debf,0xbc018600,0x17020760,0x5ee000a1,0x6530f402,
+0x0760bc01,0x00a11700,0xf4025ee0,0xbc016430,0x00180360,0x60bc0106,
+0x8d060003,0x035ab000,0x00621000,0x000358b0,0x05016310,0x17004301,
+0x008800a1,0x0620f41a,0x02de0200,0x000000f0,0x003340e8,0xb000a197,
+0x17000b40,0x5e6d00a3,0x8e60f486,0x8f5e9000,0x03a33700,0xf002debf,
+0x90008f00,0x3700875e,0x5ee000a3,0xa337008e,0x9741f001,0x00a11700,
+0xf486de6d,0x8702a260,0x000097c1,0x5a380196,0xa1170003,0x035a3c01,
+0x03a21700,0xf002debf,0x3c019800,0x1700035a,0x5a3801a1,0xa2170007,
+0x865e6800,0x009d80f4,0x008b5ed8,0xe100a237,0x50f49641,0xc1e10065,
+0x65300097,0x02debf03,0x009000f0,0x008b5ed8,0xe100a237,0x57f49641,
+0xdee100a1,0xa1370087,0x875ef001,0x00a11700,0xf486de6e,0xbc01a360,
+0xf71fff63,0xde0200a4,0x0000f002,0x8ee32000,0x02020009,0x00b35e81,
+0xa8030200,0x00f002de,0xde1e030a,0xab00f002,0x025e9f03,0x00ab00f0,
+0xf0025e02,0xbf03cc00,0x00f002de,0x41080202,0xa900001f,0x025e0200,
+0x007509f0,0x00ab00b0,0xb0008610,0x10006301,0x5e02008a,0x500bf002,
+0x0360bc01,0x00921704,0x003b00b0,0x90011d11,0x10090660,0xdea10348,
+0xc000f002,0x06e08101,0x01481009,0x000360bc,0xbc014290,0x11000360,
+0xde9e032d,0xc300f002,0x02608401,0x009497f2,0x001745b0,0xb0008f17,
+0x1700175e,0x44000290,0xbe00001f,0x02608501,0x01481009,0x00076081,
+0xf0014710,0x37000fde,0x44a000a1,0x4531f4b6,0x02de9e03,0x01c300f0,
+0x123761bc,0xbf0380b0,0x00f002de,0x61bc0102,0x80701027,0x02debf03,
+0x000200f0,0x0982e020,0x0c010200,0x170053de,0x5e8801a1,0x47100087,
+0x0360bc01,0x01425000,0x001f4108,0x8c01a117,0x97f286de,0xdebf0394,
+0x0200f002,0x0360bc01,0x00429000,0x00235ee8,0x69008837,0x000023de,
+0x00e800d0,0x88370027,0x02608601,0x00481009,0x009b0088,0x90002671,
+0xb1019b00,0x63bc0128,0x24110003,0x02de0200,0x030000f0,0xf0025edb,
+0x2000d500,0x00097ee0,0xc5310102,0xa117001b,0x875e6d00,0x020a8000,
+0x001fc283,0x04020200,0x0000bf00,0x5e9403e0,0x0200f002,0x8f42a000,
+0x0080f701,0x2d005e68,0x020002c0,0x09f0025e,0xdebf0375,0x0a00f002,
+0x8fc20102,0x01020000,0x00630014,0x6800a117,0x6000875e,0x5e020002,
+0x7509f002,0x0f609401,0x00180000,0xf0025e02,0xbf03e700,0x00f002de,
+0x0014010a,0xa1170063,0x875eb000,0x01a51000,0x191360bc,0x68006010,
+0x0000875e,0x41e000ee,0x60500683,0x875ee800,0x03a13700,0xf002debf,
+0x8002ea00,0x0000b350,0x608701f8,0xa0100304,0x6300b000,0x00b41000,
+0x00d342b0,0x88000018,0x30008341,0x60bc01b6,0xb5100a03,0x6300b000,
+0x03b4b000,0xf002de17,0x9703f500,0x00f002de,0x608001f6,0x2c948506,
+0x02de0200,0x000000f0,0x8012e020,0x87011741,0x10030460,0x000302a0,
+0xff0000c7,0x975eb000,0x00b51000,0x086300b0,0x8302b470,0x0000d342,
+0x00b000fe,0xb4100063,0x0360bc01,0x00b5100d,0x006300b0,0xbc01b4f0,
+0x10114760,0x00b000b6,0xb4100063,0x0360bc01,0x02b5d002,0x000b5007,
+0xbc011301,0xd0030360,0x608e01b5,0x9497f202,0x0b500402,0x020c0100,
+0x000bd004,0x86010c01,0x97f20660,0x42e00094,0xb5d000d7,0x0b50a000,
+0x00a11711,0x1187de68,0x86011201,0x97f206e0,0x42e00094,0xb55000d7,
+0x0bd00702,0x00120100,0x00d742e0,0xb000b590,0x1100d742,0x00b000e1,
+0xb4b00063,0x025ea903,0x031701f0,0xf002de17,0x97031501,0x01f002de,
+0xde020016,0x0000f002,0xab1a6800,0x001b0100,0xd564c46c,0xbc010a40,
+0x06000360,0x1a6800aa,0x1e0100a7,0x64c46c00,0x010a20d5,0x000360bc,
+0xa803a906,0x00f002de,0x5edb030a,0x2001f002,0xbee02000,0x03020009,
+0xf0025e90,0x00020a00,0x01001f42,0x6083012c,0x6c900d02,0xbf000402,
+0x03280100,0xf0025e14,0x6e002801,0x61805644,0x60bc0129,0x15110003,
+0x025e2203,0x012e01f0,0x00630014,0x8800a117,0x37f40660,0xc22000a1,
+0x6021f48e,0x02608201,0x03481009,0xf002debf,0xb0000200,0x17007f01,
+0xde9e03a6,0x3401f002,0x02de3803,0x003501f0,0x048f4220,0x94010200,
+0x00001760,0xdebf0318,0x6001f002,0x025e1f03,0x024101f0,0x00c30003,
+0x20003701,0x01028fc2,0x5e25033b,0x4101f002,0x8fc22000,0x003b0102,
+0xff538168,0xbf030ae0,0x01f002de,0x6094013d,0x18000013,0x02debf03,
+0x036001f0,0xf002de9e,0x68004001,0xc10b98de,0x41010240,0xaf0a001f,
+0x02608501,0x00481009,0x0b985e68,0x690045c1,0x61009f5e,0x42980265,
+0x4501008f,0x02debf03,0x026501f0,0x001f4101,0x0402af0a,0x0100bf00,
+0x5e020050,0xe00cf002,0x025e0200,0x00020df0,0x00bb8568,0x84014c01,
+0x77f50660,0xdebf03ab,0xaf0af002,0x87059401,0x02180000,0x00af5e87,
+0x84016001,0x77f50260,0xdebf03ab,0x6001f002,0x9b140002,0x02590100,
+0x002b1600,0xb0005c01,0x17003714,0xde6800a1,0x5921ae84,0x3b14b000,
+0x00a11700,0xae84de68,0xb0005941,0x17003f14,0xde6800a1,0x5961ae84,
+0x87149e02,0x025c0100,0x008fc201,0x94015e01,0x00000f60,0xdebf0318,
+0x6001f002,0x8fc20102,0x015e0100,0x0d066080,0x00026c90,0x0a008fc2,
+0x609401af,0x18000007,0x025e0200,0x02e700f0,0x00bf0004,0x85029401,
+0x01006300,0x60830194,0x6c900d06,0x02debf03,0x019401f0,0x180360bc,
+0xb0006010,0x10007b01,0x00680065,0x6d0100eb,0x135a8800,0x00a11701,
+0xf46644e8,0x6e00a137,0x410784de,0x02e0006d,0xa620009b,0x02debf03,
+0x014b05f0,0x09126090,0x94014810,0x00001f60,0x5a080118,0x8117000f,
+0x065e8801,0x010a5481,0x000f5a34,0x02008017,0x00f0025e,0x01b00064,
+0x6510007b,0x2356b000,0x00a11700,0xa0865ee0,0xe800a197,0xf400845e,
+0x5ee80003,0x16f40084,0x035ab000,0x00131400,0x00075ab0,0xb0001414,
+0x14000b5a,0xde680015,0x85410007,0x9700e800,0x01a15700,0xf0865ebc,
+0x7c011b14,0xf400875e,0x1ab0001c,0x81170037,0x025e0200,0x00780bf0,
+0x007b01b0,0x08016510,0x17000f5a,0x5eb00081,0x1e140087,0x02debf03,
+0x008801f0,0x001756b0,0xb0001b14,0x14001b56,0x54b0001c,0x1e140013,
+0x1350b000,0x00861000,0x00a7006d,0x90018e81,0x10006301,0x41b0008a,
+0x6210008f,0x025e0200,0x004e0df0,0x002b42b0,0xbc010614,0x17180360,
+0xc16d00a1,0x9101208c,0x0360bc01,0x00a19702,0x03845ee0,0xe000a177,
+0x11b0865e,0xdebf031d,0xe701f002,0xc7000302,0x02a40100,0x0003d00c,
+0x1401a401,0x17006300,0x008502a1,0xa4010063,0x87de8000,0x01a2d701,
+0x1e1760bc,0xe000a297,0xb00d8a5e,0xde800065,0xa2b70087,0x0f60bc01,
+0x00a2971c,0x0d8a5ee0,0xb00064b0,0x14009741,0x41b0002e,0x2f140093,
+0x13d86800,0x02b40100,0x00135a00,0x8001a601,0xf4840660,0xdebf0327,
+0x7c04f002,0x03d00102,0x00a60100,0x009b50b0,0x81022b14,0x0200b7d0,
+0xd0060208,0xad010003,0x8650e900,0x00a13723,0x238ad0e8,0x6900a257,
+0x01008bde,0x609101ad,0x27f48416,0x02debf03,0x010b02f0,0x0003d00b,
+0x3c01a117,0x17002b50,0x5e8c01a2,0xa157f486,0x43014801,0x00a21700,
+0xf4865e68,0x9101b441,0xf4841260,0xdebf0327,0x0b02f002,0x0360bc01,
+0x00a51700,0xf0025e02,0xb000f900,0x10001350,0x50b00086,0x8a100017,
+0x03d00c02,0x02c10100,0x00c70003,0xb000be01,0x14009b50,0x5e02002b,
+0xfa0df002,0x46426d00,0x030a80c0,0xf002debf,0x6d00bf01,0x80844a42,
+0x5006010a,0xa1170007,0x86de8201,0x032db485,0xf0025ea2,0x2000d201,
+0x010403d0,0x50b000c7,0xf211004f,0x5350b000,0x00f31100,0x005750b0,
+0xbc01f411,0x91000360,0x010102f0,0xc90100b3,0x06e08701,0x02ab77f5,
+0x00035006,0x0702ce01,0x0100afde,0xde0002ce,0xd20100b3,0x331ae800,
+0x03425100,0xf002debf,0x8102d201,0x03000350,0xd00202e5,0xd10100b7,
+0x2b500802,0x02d20100,0x0003d085,0x9001f703,0xb4851260,0x5ea2032d,
+0xdf01f002,0x0f50b000,0x02161100,0x00b7d002,0xb000d701,0x11005b50,
+0xd0820216,0xdf010003,0xc3478102,0x02d80100,0x004f5080,0x2000dd01,
+0x813fc747,0xc72000df,0x0ac200db,0x02debf03,0x03df01f0,0xf0025ea5,
+0x8002df01,0x0200dfc7,0x5088020a,0xee0100b7,0xb7d08202,0x01e70100,
+0x00275038,0x08018017,0x17001350,0x50020181,0xa1170013,0x865e8201,
+0x008137f0,0x007f50b0,0xbf038910,0x01f002de,0x503801ed,0x8017006f,
+0x2b500801,0x01811700,0x0007d006,0x8201a117,0x37f0865e,0x50b00081,
+0x8a10001b,0x8350b000,0x01891000,0x000b5029,0x02009217,0x00f0025e,
+0x5e020064,0x4b0bf002,0x1b420201,0x01811700,0xd1045e82,0x020081b7,
+0x0bf0025e,0x5ee00078,0xa1170184,0x87ded901,0x02831000,0x00b30100,
+0xe001f701,0x1000b701,0x00040283,0xfa0100bf,0x03508702,0x03fa0100,
+0xf0025e94,0x2203fb01,0x01f0025e,0x61bc01fd,0x80300003,0x02debf03,
+0x010200f0,0x033361bc,0x2b0391b7,0x02f0025e,0x00900003,0xa1970063,
+0x8264e000,0x006530f4,0x00135a6e,0x88010322,0x37f206e0,0xde680091,
+0x0582024b,0x3761bc01,0x0091b703,0x044bde68,0xbc010782,0xb703bb61,
+0xdebf0391,0x0e02f002,0x0e609101,0x0327f484,0xf002debf,0x91010b02,
+0xf4840660,0x60bc0127,0xb4100003,0x06e08101,0x032db485,0xf002debf,
+0x68007c04,0x82044b5e,0xdec40329,0xab09f002,0x03500602,0x02190200,
+0x00afde07,0xbc011902,0x37000361,0x50070291,0x15020003,0x0362bc01,
+0x0291f700,0x00b3de00,0xbc011702,0x77000361,0x01e00091,0x4220000b,
+0x02debf03,0x011a02f0,0x000360bc,0xb0004220,0x1000475e,0x01000280,
+0x200200b3,0x06608201,0x02813010,0x00b38101,0xbc012002,0xb7050360,
+0xdebf0393,0x7a05f002,0x17c56800,0x03020000,0xf002de80,0x81032602,
+0x02f0025e,0xe0880125,0x5c900b0e,0x02debf03,0x030200f0,0xf0025ed0,
+0xbc013302,0x11000360,0x5e02002d,0x830bf002,0x02debf03,0x000200f0,
+0x0017c568,0x1e013102,0x17009f50,0x5e8800a1,0xa237f40e,0x06608800,
+0x00a137f4,0x00875ee8,0xb000a137,0x57f4865e,0x5ea000a1,0xa197f086,
+0xb644a000,0x004531f4,0x00475eb0,0xbf038010,0x00f002de,0x80070202,
+0x360200bf,0x331ab000,0x03421100,0xf0025ec4,0xbc013602,0x90000360,
+0x41a80004,0x48103023,0x0f62bc01,0x01e01100,0xf5026081,0x8701aed7,
+0x77f502e0,0x816800ab,0x3d22000b,0x6744b000,0x01430000,0x0906e082,
+0x81014810,0x900d0260,0x6082016c,0x44912806,0x02e08801,0x015c900b,
+0x000360bc,0xbc018510,0x10000360,0x5e2903b8,0x4602f002,0x02e0d201,
+0x03849010,0xf002debf,0xbc01e802,0x10000360,0x01e00084,0x702000c3,
+0xb3818102,0x035d0200,0xf002de20,0x81017202,0xb7f50660,0xde6800ad,
+0x5da2044b,0xbbde0302,0x004f0200,0x000b26e0,0xbf036510,0x02f002de,
+0x60bc0150,0x6590101b,0x7f5ea000,0x00ec10fe,0x00035ab0,0xb000ed10,
+0x1000075a,0x5ab000ee,0xef10000b,0x0f5ab000,0x01f01000,0x1ee363bc,
+0xbc0184f0,0x30000360,0x60bc0185,0xb4100003,0x0360bc01,0x01a6d001,
+0x040360bc,0xbc01b550,0xd0042360,0x02e000b4,0xab2000af,0x02debf03,
+0x01b602f0,0x1f0360bc,0x030184f0,0x170053de,0x5e8601a2,0xe3701c8a,
+0x93c36a00,0x00690200,0x009043e8,0x0202e4d0,0x02001b42,0x00900067,
+0xa137001b,0x1b422000,0x00664200,0x00871ab0,0xe000a117,0x30f49243,
+0xc36900e4,0x69020093,0x0360bc01,0x01e41000,0x000360bc,0xbc01b410,
+0x10000360,0x60bc01a6,0xb5100203,0x2360bc01,0x00b4d004,0x064b5e68,
+0xe00070a2,0x2000cb01,0xdebf0372,0xb602f002,0xcf01e000,0x03732000,
+0xf002debf,0x2003b602,0x02f0025e,0xe08101bd,0x48100902,0xd701e000,
+0x03752000,0xf002de1e,0xbc019e02,0x17000360,0x5e6a00a2,0x7a020023,
+0x8f420201,0x01a21700,0x098a5e85,0x80014810,0x301006e0,0xde840281,
+0x7e020053,0x1360bc01,0x03a1570d,0xf002debf,0xbc017f02,0x570d0360,
+0x006800a1,0x9e020027,0x845ee000,0x01a1f701,0x101b60bc,0x88006510,
+0x30009741,0x60bc01b6,0xb4100003,0x875e9000,0x01a65000,0x010360bc,
+0xbc01b510,0xb0002360,0xde1703b4,0x8702f002,0x02de9703,0x008802f0,
+0x0087de20,0x20009142,0x220087de,0x5eb8018e,0x8016d022,0x8a5e8001,
+0x038136d0,0xf002debf,0xbc019702,0x16d0225e,0x5e840180,0x8136d08a,
+0x02debf03,0x009702f0,0x0087de20,0xb8019522,0x36d0225e,0x5e800181,
+0x8256d08a,0x02debf03,0x019702f0,0xd0225ebc,0x84018136,0x56d08a5e,
+0x60880182,0xa830f402,0x035ab000,0x00b01000,0x00075ab0,0x8002b110,
+0x0200a342,0x42e0009a,0xa89000a3,0x0b5ab000,0x00b01000,0x000f5ab0,
+0x8701b110,0x90100660,0x5ee00084,0x89370027,0x275eda01,0x01ee1000,
+0x000360bc,0xbc01b410,0x50030360,0x00b000a6,0xb5100033,0x53de8402,
+0x01a70200,0x030760bc,0xb000a650,0x10003700,0x60bc01b5,0xb4d00423,
+0x06608401,0x019497f2,0x09026086,0x9e034810,0x02f002de,0x448002b1,
+0xb402001f,0x3f5eb000,0x01451100,0x000360bc,0xb0008f17,0x1700435e,
+0x5eb00085,0x9017000f,0x02debf03,0x00b402f0,0x000f5eb0,0x80028517,
+0x02001f44,0x44a000b4,0x45b1f0b6,0x0360bc01,0x01421001,0xf2066083,
+0x84019497,0x11000760,0x5ea003e0,0xb203f002,0xaf5e0602,0x01b40300,
+0xf506e086,0xbc01ab77,0x10000360,0x5e020080,0x7b09f002,0x02debf03,
+0x03e104f0,0xf0025ea1,0x81011303,0xd7f50660,0x602000ae,0xd6a2850e,
+0x04608701,0x00a01003,0x006300b0,0xbc01b410,0x100a0360,0x00b000b5,
+0xb4f00063,0xb7d00202,0x00ca0200,0x005f50b0,0xb000e010,0x10006350,
+0x50b000e1,0xe2100067,0x6b50b000,0x00e41000,0x021342b0,0x000284f0,
+0x0200b750,0x00b000d1,0xb4100063,0x0360bc01,0x00b51002,0x046300b0,
+0x8401b4d0,0x11000760,0x60bc01e0,0x8e170003,0x02debf03,0x00b803f0,
+0x00c701e0,0xb0007120,0x10006300,0x60bc01b4,0xb5d00203,0x6300b000,
+0x03b4d004,0xf002debf,0x03014303,0x17000350,0x5eb800a1,0xa1370087,
+0x865e8701,0x02801010,0x0003d00c,0x03021203,0x0200c700,0x60bc01dd,
+0xb2170003,0x27503801,0x02a31700,0x00b7d002,0xb000e802,0x17001323,
+0x50b801a1,0xe030f46e,0x7350b000,0x01a11700,0xf41623b8,0x8501e130,
+0x301c06e0,0x42b000e1,0x84700013,0x6f503801,0x02a31700,0x00134282,
+0xb000e802,0x10007b50,0x42b000e4,0x84100213,0x04608701,0x01a01003,
+0x00735038,0x7c01a117,0x37f46e50,0x5e8800a1,0xb9900087,0xc7000302,
+0x00fb0200,0x00cbde68,0xb000f702,0x1000bb50,0x5abc0165,0xe070f406,
+0x075a3c01,0x01a21700,0xf43e60bc,0xb000e150,0x70001342,0x5ab00084,
+0x8309000b,0x2360bc01,0x00b85001,0x000f2668,0xbf030323,0x03f002de,
+0x60bc0107,0xb8700103,0x0f266800,0x01032300,0x010360bc,0xbf03b870,
+0x03f002de,0xd00c0107,0xa1170003,0x025ea903,0x010003f0,0x012360bc,
+0x6800b850,0x6300875e,0xdebf0303,0x0703f002,0x0360bc01,0x00b87001,
+0x00875e68,0xbc010743,0x70010360,0x000302b8,0x050300c7,0x6750bc02,
+0x01060300,0x1702e081,0xbc01b810,0xf0000360,0x000302a5,0x0b0300c7,
+0xcb5eb000,0x00b51000,0x086300b0,0x8302b470,0x0300d342,0x60bc010a,
+0xb5100d03,0x6300b000,0x00b41000,0x006300b0,0xb000b4f0,0x1800d342,
+0x60880100,0xb4100308,0x06608101,0x036c900d,0xf002debf,0x02024303,
+0x0300b7d0,0x50b00019,0xe010006f,0x7350b000,0x00e11000,0x007750b0,
+0x8202e210,0x03001342,0x50b00018,0xe410007b,0x1342b000,0x0084f002,
+0x009f5ee0,0xa103a737,0x03f0025e,0x60bc0122,0xa7170003,0x04608701,
+0x00a01003,0x006300b0,0xbc01b410,0x100d0360,0x00b000b5,0xb4f00063,
+0x08608801,0x03b41003,0xf002debf,0xb0003803,0x10007b01,0x5ab00065,
+0xe5100003,0xff63bc01,0x00c5f01f,0x00075ab0,0xbc01e610,0xf01fff63,
+0x5ab000c6,0xe710000b,0xff63bc01,0x00c7f01f,0x003b9a68,0xe0002b03,
+0x3700275e,0x1a680089,0x2f03003b,0x07e08501,0x01e31000,0x0007e085,
+0xb000c310,0x10011342,0x5eda0184,0xee100027,0x06608701,0x00849010,
+0x1c1342b0,0xbc018410,0x10000360,0x60bc01b4,0xa6501303,0x9700b000,
+0x01b51000,0x042360bc,0x8401b4d0,0x11000760,0xdebf03e0,0xa303f002,
+0x4b5e0801,0x00a11700,0x00875e68,0x02024323,0x03000350,0x509e0242,
+0x3f03009f,0x03d00102,0x003f0300,0x00275ee0,0x58018937,0x1400275e,
+0x50da0129,0xee1000a7,0x06608701,0x03849010,0xf002debf,0xbc014303,
+0x14000360,0xc1040129,0xa1170007,0x025e2203,0x014603f0,0x0053de03,
+0xb000a117,0x1700875e,0x5e8802a2,0x4a03004b,0x4b5e6800,0x014a8306,
+0x000360bc,0x8301a217,0x97f286de,0xde830194,0x27f48486,0x13c28102,
+0x01510300,0x008b5e86,0x8601e310,0x10000760,0xe08101c3,0x84901006,
+0x02debf03,0x015303f0,0x1c8a5e86,0x8601e370,0x70180660,0x47b802c3,
+0x8c0300a7,0xb3de0002,0x01570300,0x1c06e087,0x8701e370,0x701806e0,
+0x5e0801c3,0xa117004b,0x875e6800,0x029a2300,0x009f501e,0x85015c03,
+0x701c06e0,0xe08501e3,0xc3701806,0x63001401,0x00a11700,0x0087de68,
+0xb0006583,0x17005301,0xde6800a2,0x61e3ff8b,0x47426800,0x00622300,
+0x848ade68,0x850165c3,0x10090260,0xe0860148,0xe3701c02,0x06e08601,
+0x01c37018,0x00075010,0x6800a617,0x03009b5e,0x60bc019a,0xe4110003,
+0x07503a01,0x00801700,0x00035e88,0xe0008077,0x10f0ae00,0xde680064,
+0x7643009b,0x03d00702,0x01700300,0x182360bc,0xe000a2f7,0x370b005e,
+0x5e0200a3,0x050cf002,0x1b60bc01,0x0081d715,0x018341e0,0xe0006370,
+0xb0008f41,0x5e020065,0xda0bf002,0x1b60bc01,0x01649015,0x004760bc,
+0x0200a217,0x0cf0025e,0x5e68002d,0xa143009b,0x4660a401,0x00e071f4,
+0x009b5e68,0x68007e63,0xa3009b5e,0x50b0007e,0xe211002f,0x3350b000,
+0x03e21100,0xf002debf,0x0201a103,0x1700c780,0xde8701a1,0xe8113d86,
+0x02608701,0x00e8113d,0x009bde68,0x870183a3,0x113d0660,0x422000e8,
+0x8a43001b,0x0360bc01,0x02ea1100,0x002b5088,0xb0008803,0x11007750,
+0xdebf03eb,0x8a03f002,0x6f503c01,0x01a21700,0xf47250bc,0x9201eb51,
+0xb7001bc2,0x5eb801a2,0xe8113d8a,0xc7800202,0x01a10300,0x090360bc,
+0xb000ea11,0x11002f50,0x50b000eb,0xeb110033,0x3750b000,0x00eb1100,
+0x003b50b0,0xb000eb11,0x11003f50,0x50b000eb,0xeb110043,0x4750b000,
+0x00eb1100,0x004b50b0,0x8601eb11,0x113d0660,0x60bc01e8,0x65901823,
+0x025e0200,0x03470ef0,0xf002debf,0x8401a103,0x11000760,0xde9e03e0,
+0xa103f002,0x02de3803,0x00a103f0,0x044bde68,0x8401a183,0x97f20660,
+0x50000294,0xa103004f,0x06608501,0x01481009,0x000360bc,0xb0002d11,
+0x14008344,0x60bc0128,0x8e170003,0x4b5e6800,0x02a6a305,0x00035000,
+0x8301af03,0x100906e0,0x41b00048,0x00180023,0x0360bc01,0x038eb704,
+0xf0025ea9,0x6800b403,0x23044b5e,0x60bc01b4,0x8e370603,0x4b5e6800,
+0x01b4a305,0x060360bc,0xbf038eb7,0x03f002de,0x608101b4,0xab77f506,
+0x0f5eb000,0x00851700,0xf0025e02,0xbc01830b,0x17000360,0x60bc018c,
+0x8d170003,0x02de2303,0x01b803f0,0x1006e087,0x00028370,0x0300b3de,
+0x62bc01b8,0x83300003,0xa7006d00,0x03ca8300,0xf0025e29,0x0302e203,
+0x0300c700,0xd08202c6,0xbe0300b7,0xb318e000,0x032c2600,0xf002debf,
+0xe000bf03,0x2600b718,0x2668002d,0xc623000f,0xcb5ee000,0x01b23700,
+0x00cb5e0a,0xe000a117,0x30f4ba50,0x60d00065,0xa257f606,0x125a2000,
+0x03c643f4,0xf002debf,0xd503c003,0x08f002de,0xded603df,0xf408f002,
+0x02de5003,0x03c603f0,0xf002debf,0x6800fb03,0x0300a700,0x428802ce,
+0xce03001b,0x6744e000,0x03a11705,0xf002debf,0xe000cf03,0x17026744,
+0x5e9103a1,0x0200f002,0x66c46800,0x00cf23f4,0x00a70068,0x8002d803,
+0x03001b42,0x60bc01d6,0xa1370503,0x0360bc01,0x03659005,0xf002debf,
+0xbc01dc03,0x770f1360,0xdebf03a1,0xdb03f002,0x0360bc01,0x01a1770f,
+0x060360bc,0xbf036590,0x03f002de,0x60bc01dc,0x65100703,0x025e0200,
+0x005800f0,0x01075ad8,0x3c018116,0x1700035a,0x5eb801a1,0x8136d086,
+0x035ad800,0x01801601,0xd06640b8,0x05028016,0x0300af5e,0xe08701e4,
+0x33712606,0x02debf03,0x010200f0,0x850a6090,0x82022db4,0x0300b7d0,
+0x503c01ee,0x80170027,0x2b500901,0x01811700,0x00075007,0x8201a117,
+0x37f0865e,0x50b00081,0x8a10001f,0x0f50b000,0x03161100,0xf002debf,
+0x3801f403,0x17005f50,0x500a0180,0x8117002b,0x07d00701,0x01a11700,
+0xf0865e82,0xb0008137,0x10002350,0x50b0008a,0x1611005b,0xb7508002,
+0x01f90300,0x050360bc,0xbf0392b7,0x01f002de,0x609001d7,0x2db48506,
+0x02debf03,0x01e603f0,0x060360bc,0xbf039237,0x01f002de,0x608e01d7,
+0xe8113d02,0x025e2b03,0x020904f0,0x00f30000,0xe8000004,0x51002300,
+0x60bc0142,0x4251280a,0x025e9403,0x000504f0,0x008b05b0,0x68006410,
+0x04000358,0x44b00005,0x12110067,0x0358b000,0x00151100,0x001f4568,
+0xa2030904,0x04f0025e,0xe0850109,0xab77f506,0x025e0200,0x02b30cf0,
+0x00e3c201,0x03023604,0x0400c700,0x2668000e,0x1724000f,0x46426e00,
+0x031744f6,0xf002debf,0x6e001004,0x24004742,0x00030217,0x140400c7,
+0x02de1503,0x011004f0,0x85026080,0xbc012c94,0x17000360,0xded503a3,
+0xdf08f002,0x06e08101,0x012db485,0x840e6091,0xbf0327f4,0x04f002de,
+0x503c0136,0xa1170067,0x865ebc01,0x01ba5017,0x010360bc,0x0302b890,
+0x0400c700,0xa6680027,0x2124000f,0x02e08101,0x03b81017,0xf002ded5,
+0xd603df08,0x08f002de,0xde5003f4,0x1d04f002,0x02debf03,0x003604f0,
+0x000f26e8,0xb0008329,0x1000cb5e,0x00b000b5,0xb4700863,0xd3428302,
+0x00240400,0x00cb5eb0,0xbf03a517,0x04f002de,0xe0860128,0xa0100304,
+0x025e0200,0x00f000f0,0xf0025e02,0xd503f900,0x08f002de,0xded603df,
+0xf408f002,0x02de5003,0x022a04f0,0x00a34700,0xbc014102,0x11000360,
+0x508802ea,0x3204002b,0x7750b000,0x03eb1100,0xf002debf,0x3c013404,
+0x17006f50,0x50bc01a2,0xeb51f472,0xa347b000,0x03e8d100,0xf002debf,
+0xbc014102,0xf0000360,0xe08201a5,0x48100902,0x1f62bc01,0x01e01100,
+0x000f60bc,0x8502e811,0x04000b50,0x6082013c,0x48100902,0xb3818102,
+0x03430400,0xf002dea0,0xd5034104,0x08f002de,0xded603df,0xf408f002,
+0x025e2003,0x014304f0,0x09026088,0xbf034810,0x00f002de,0x60bc010a,
+0xa1370003,0xb3010002,0x02510400,0x00b30104,0xe9005004,0x2000bb01,
+0x81e8006e,0x6f0000bf,0xbb816800,0x00500400,0x00bf8168,0x81025004,
+0x0400b381,0x60bc014d,0x6c000003,0x02debf03,0x017c04f0,0x000360bc,
+0x02006c00,0x09f0025e,0xdebf033b,0x0a00f002,0x0360bc01,0x00a11700,
+0xf0025e02,0x0102900a,0x0400b301,0xdebf0354,0x0a00f002,0x1360bc01,
+0x00a17715,0xf0025e02,0x34015800,0x17006740,0x016d00a1,0x5924f49a,
+0x875eb000,0x00660000,0xf49e016e,0xb0005b24,0x0000875e,0xdea30367,
+0x0a00f002,0xb7500002,0x01640400,0x000360bc,0x82018010,0x10090660,
+0x60800148,0x2db48502,0x07c10401,0x01a11700,0xf286de83,0xe0009497,
+0x2000cb01,0xdebf0372,0x1801f002,0xb3010102,0x01660400,0xf506e087,
+0xb000ab77,0x17000b01,0xde6d00a1,0x7c040884,0x6444e800,0x00a17708,
+0x08845e6e,0x87017c24,0x77f506e0,0xdebf03ab,0x7c04f002,0xaf5e8202,
+0x01780400,0xf5066082,0xb000ab77,0x06006744,0x01b00098,0xa217006b,
+0x1b428002,0x00720400,0x004b01b0,0x6800a217,0x04008b5e,0x45900077,
+0xa197002b,0x86de8000,0x00a157f4,0x00b741b0,0xe000a117,0x2623865e,
+0x61bc01a9,0x33110003,0x6444e800,0x00a517d3,0x01975e6d,0x82013300,
+0x77f50260,0x5ed103ab,0x0200f002,0xb3500002,0x03d80400,0xf002de25,
+0x83018004,0xf4840660,0xdebf0327,0xb504f002,0x03d00c02,0x02b30400,
+0x00c70003,0x1401a204,0x17006300,0xde6d00a1,0xb3840087,0xbb50b000,
+0x00651000,0x00bf50b0,0x91026410,0x04009f50,0xd081028a,0x8a0400b7,
+0x025e2903,0x038b04f0,0xf002debf,0xbc019004,0x16000360,0x60bc0104,
+0x80370003,0x025e0200,0x03310ef0,0xf0025e29,0xb000b304,0x1400af50,
+0xdebf0326,0xb304f002,0x06608201,0x002db485,0x00135ab0,0xb0008d14,
+0x1400175a,0x18b0008e,0xa11700b3,0x0360bc01,0x012c0600,0xf4ba18bc,
+0xbc01a137,0x06000360,0x5eb0002e,0x8f140087,0xb718b000,0x01a11700,
+0x000360bc,0xbc012d06,0x37f4be18,0x60bc01a1,0x2f060003,0x875eb000,
+0x00901400,0x00f701b0,0xbc019014,0x00000360,0x5e02007d,0x310ef002,
+0x0f58b000,0x038c1400,0xf002debf,0x6800ae04,0x040047c2,0xe08101a7,
+0x2db48506,0x0e609101,0x0127f484,0x000360bc,0xbf032c14,0x00f002de,
+0x50b00002,0xa117009f,0x025e0200,0x00ef00f0,0x00875eb0,0x86012714,
+0x100304e0,0x42b000a0,0x00180083,0x03d00c01,0x00a11700,0x0087de68,
+0x0201a264,0x1700b750,0x5e8001a1,0x27f48486,0x0ee08a01,0x0027f484,
+0x00af50b0,0xbf032614,0x04f002de,0xe08601b5,0xa0100304,0x9f500002,
+0x01b50400,0x100360bc,0x86024210,0x040007c1,0x5e2903d5,0xbb04f002,
+0x3352b000,0x00291400,0x003752b0,0x9e01a117,0xf484865e,0x50b00027,
+0xa117009f,0x86de8001,0x00a137f4,0xf0025e02,0x0702d30b,0x0400bf80,
+0x608001c8,0x8f26f402,0x9b50b000,0x00900600,0x00a750b0,0xb0009106,
+0x0600ab50,0x50b00092,0x9306009b,0x6300b000,0x00950600,0x008341b0,
+0x80019406,0x97f50660,0xdebf03ac,0xd504f002,0xab50b000,0x008f1000,
+0x00a750b0,0xb0008e10,0x10009b50,0x6080018d,0x8c30f406,0xb7500202,
+0x00d40400,0x004352b0,0xb0008f10,0x10003f52,0x52b0008e,0x8d10003b,
+0x37521a01,0x01a11700,0x0487de98,0xb801a137,0xb091865e,0x6082018c,
+0x2db48502,0x02608101,0x036c900d,0xf002de25,0x9c01d804,0xf4840260,
+0xdebf0327,0xdc04f002,0x0360bc01,0x012c1400,0xf5026081,0x8502aed7,
+0x04000b50,0x50a800dc,0x2d1405b7,0x02608301,0x0127f484,0x0902e085,
+0xbc014810,0x14000360,0x5ea2032a,0x1801f002,0x02debf03,0x030a00f0,
+0xf002de23,0xa3032f05,0x05f0025e,0xdea2032f,0x2f05f002,0x06608101,
+0x03ab77f5,0xf0025eaa,0x83012f05,0x100902e0,0xde510348,0xec04f002,
+0xb3de8002,0x00320500,0x006b02e0,0x80019a20,0x77f506e0,0xdebf03ab,
+0xf104f002,0x02de0103,0x00ef04f0,0x064f5e68,0xbc01ef24,0x17000360,
+0x5ea403a8,0xf104f002,0x02dec103,0x013205f0,0x09026084,0x04024810,
+0x0400bf00,0x60bc01f6,0x15110003,0x63001401,0x00a11700,0xf40266e0,
+0x02006530,0x0bf0025e,0x6082018b,0x48100902,0x025ea903,0x001105f0,
+0x043b5e68,0xf00101a5,0x370017de,0x5ea00085,0x8597f016,0x3b5e6800,
+0x02012506,0x00035001,0x87020005,0x0500bf80,0xe0850100,0x48100906,
+0x03d08002,0x00110500,0x001b5eb0,0xb000a317,0x17008b00,0x000402a4,
+0x070500bf,0x97416e00,0x01076530,0x00035a18,0x1a01a317,0x1700035a,
+0xc16800a4,0x0a051883,0x9302e000,0x03a42000,0xf002debf,0x6d000c05,
+0x85f42e5e,0xe082010c,0x2db48506,0x335ee000,0x008c3700,0xf432de68,
+0xb0000f65,0x17000f5e,0xde6d0085,0x1d65f42e,0x02debf03,0x002a05f0,
+0x001f5eb0,0xb000a317,0x17008f00,0x000402a4,0x170500bf,0x97416e00,
+0x01176530,0x00035a1c,0x1e01a317,0x1700035a,0x5e6d00a4,0x1985f42e,
+0x06e08201,0x002db485,0x00375ee0,0x68008d37,0x65f436de,0x5eb0001c,
+0x8517000f,0x2e5e6d00,0x012a65f4,0x0902e085,0xd1034810,0x05f002de,
+0x5e68001f,0x2485044b,0x025e0200,0x00830bf0,0x18834168,0x81014b05,
+0xb48506e0,0xdebf032d,0x7c04f002,0x4f50b000,0x00f21100,0x005350b0,
+0xb000f311,0x11005750,0x60bc01f4,0xf5110103,0x0360bc01,0x03f05100,
+0xf002debf,0x02007c04,0x0bf0025e,0x60810183,0x48100902,0x025e2903,
+0x022f05f0,0x00c70083,0xbf03ad0d,0x04f002de,0xded1037c,0x3005f002,
+0x02dea503,0x037c04f0,0xf002debf,0x80020a00,0x0000b301,0x5006020a,
+0x39050003,0x0b01b000,0x00a11700,0x0884de6d,0xe8003905,0x77086444,
+0x5e6e00a1,0x39250884,0x06e08701,0x01ab77f5,0x004b5e08,0x6800a117,
+0x2500875e,0x5eb0003c,0x8517000f,0x025e0200,0x00830bf0,0x063b5e68,
+0xbc014225,0x17000360,0xd000028c,0x44050003,0x0360bc01,0x038d1700,
+0xf002debf,0xbc014405,0x17000360,0xdebf038c,0x1801f002,0x83416800,
+0x014a0518,0x84066080,0x290327f4,0x04f0025e,0x6082017c,0x2db48506,
+0xc7008302,0x03ad0d00,0xf002debf,0xe0007c04,0x20009702,0x608101a5,
+0x48100902,0x0360bc01,0x008e0600,0x007b01e0,0xbc015ea0,0x17191360,
+0x016d00a1,0x0a20f47a,0x1360bc01,0x035e8011,0xf002debf,0x02000a00,
+0x09f0025e,0xde380375,0x0a00f002,0x02de9e03,0x000a00f0,0x004c44e8,
+0xe800a1f7,0x1701845e,0xde6a00a1,0x5b050184,0x845ee800,0x01871101,
+0x000360bc,0xa5018811,0x113022e0,0x60bc0180,0x13110003,0x0360bc01,
+0x00141100,0x006744b0,0xb000a117,0x17006b44,0x5eb000a2,0x04110087,
+0x8b5eb000,0x03051100,0xf002deb8,0xbf035d05,0x00f002de,0x5e87020a,
+0x8f070053,0x0360bc01,0x0192b704,0x040360bc,0xbc01a117,0xf01fff63,
+0x63bc01cb,0xccf01fff,0xff63bc01,0x01cdf01f,0x1fff63bc,0xbc01cef0,
+0xf01fff63,0x63bc01cf,0xd0f01fff,0x0360bc01,0x02e41000,0x00c30086,
+0xb0007d05,0x17000f54,0xde6900a2,0x7185908a,0x1252e800,0x00e450f4,
+0x00379a68,0xbc017d05,0x10000360,0x54b000e4,0xe0100027,0x2b54b000,
+0x03e11000,0xf002debf,0xa4038605,0x07f002de,0xdea90328,0x2807f002,
+0xbf800702,0x027a0500,0x000fd287,0xbc01bc05,0xd7010360,0x26e000a1,
+0x8c290033,0x05e08101,0x02936932,0x00c30006,0x80027f05,0x05005fde,
+0x54b00084,0xe0100007,0x371a6800,0x01820500,0xa086ded2,0xb000e030,
+0x10000b54,0xdebf03e1,0x8605f002,0x865ebc01,0x01e01090,0x001f60bc,
+0xbc01e110,0x10000360,0x52b000e2,0xe5100023,0xff63bc01,0x00c5f01f,
+0x002752b0,0xbc01e610,0xf01fff63,0x52b000c6,0xe710002b,0xff63bc01,
+0x00c7f01f,0x004700b0,0x08018610,0x1700371a,0x52380181,0x80170003,
+0x27c00201,0x00a61700,0xf0025e02,0xb000420d,0x17000754,0x81810280,
+0x950500b3,0x025e0200,0x004b0bf0,0x00371a68,0x68009e25,0x0500379a,
+0x541a0298,0x9e050007,0xa7006800,0x009c8500,0x00a70068,0x03019cc5,
+0x170027c0,0xdebf03a1,0x9d05f002,0x3bc00601,0x01a11700,0x10865e82,
+0xa90386d0,0x07f002de,0x5e680076,0xb725044f,0xff63bc01,0x00c3f01f,
+0x054f5e68,0xbc01a6a5,0x901a0360,0x60bc01e3,0x92b70603,0x4f5e6800,
+0x03b72505,0xf002debf,0xbc01b105,0x37060360,0x44980292,0x7c080007,
+0x07468002,0x017c0800,0x180360bc,0x0702e390,0x0500bf80,0xd20702b1,
+0xb105000f,0x06608101,0x01ac97f5,0x1c06e087,0xb000e370,0x10008f41,
+0x5e9f0362,0xb105f002,0x0360bc01,0x00453100,0x00371ab0,0x02008117,
+0x0bf0025e,0x5ee80078,0xa1d70084,0x865e6a00,0x00b78590,0xf41252e8,
+0xbf03e430,0x05f002de,0x60bc01ba,0xe4100003,0x02de3803,0x01ba05f0,
+0x1c06e087,0x9001e490,0x10090a60,0x61bc0148,0x91370403,0x4f5e6800,
+0x037ca805,0xf0025e83,0xbf032807,0x00f002de,0x41040202,0xc8050063,
+0x02e08901,0x01ac97f5,0x0b026084,0x05025810,0x0500af5e,0xe08701c4,
+0x33712606,0xbf000402,0x01c70500,0xf502e085,0x0200ab77,0x0cf0025e,
+0xdebf03b3,0x0200f002,0x23c58502,0x01ca0500,0x0b066084,0xbc015810,
+0x11000361,0x80050233,0xd10500bf,0x1360bc01,0x00a15711,0xf0025e02,
+0x96015800,0x30030e60,0x40b00019,0xa2170067,0x025e0200,0x005d00f0,
+0x006744e0,0x02029946,0x0500b35e,0xe08901d4,0xac97f506,0x37c08302,
+0x000a0000,0x001f02e0,0x02008720,0x0bf0025e,0xe08901af,0xac97f506,
+0x02debf03,0x010a00f0,0x3201e081,0x83019369,0x693201e0,0x5e020093,
+0xaf0bf002,0x13408102,0x01020000,0x000360bc,0xa3038010,0x05f002de,
+0x609001e0,0x48100902,0x6744b000,0x009e1700,0x006b44b0,0xb0009d17,
+0x17006f44,0x44b0009c,0x9b170073,0x7ade6800,0x00e02523,0x002302e0,
+0x15018820,0x17003b40,0x00680097,0xec8500a7,0xa7006800,0x00ecc500,
+0x005f5ea0,0x68009737,0x0500a780,0x60bc01ec,0x97370003,0x4301b000,
+0x01a11700,0x0584dec9,0x81017926,0x900d02e0,0x4086026c,0xf2050037,
+0xbb02e000,0x03ae2000,0xf002debf,0xbc011709,0x14000360,0x60bc0180,
+0x81140003,0x0a60b801,0x01249004,0x040360bc,0xbc01a006,0x46000360,
+0x60bc019f,0x2ad00003,0x0760b301,0x01041000,0x000360bc,0xbc018406,
+0x06000360,0x60bc0185,0x86060003,0x0360bc01,0x01870600,0xf502e083,
+0x8702aed7,0x090037c0,0x60bc0114,0x3e200003,0x025e0200,0x00a50ef0,
+0x005fde68,0x3c010546,0x17000352,0x52bc01a1,0xa137f406,0x845e6e00,
+0x035ba90b,0xf0025e43,0x6800fe05,0x46005f5e,0x5e680017,0x1426005f,
+0xa7806800,0x000aa600,0x906644e0,0xbc01aa26,0x1700c362,0x528002a1,
+0x0d060003,0x03529601,0x00a11700,0x9086de80,0x03029a37,0x06000352,
+0x5ee00012,0x9a37906a,0x03d20702,0x00120600,0x006b5ee8,0x9e029a37,
+0x09006b5e,0xdebf035b,0x1a06f002,0x03d25201,0x01a11700,0xf406d285,
+0xbf039a37,0x06f002de,0x523c011a,0xa1170003,0x0652bc01,0x009a37f4,
+0x0b685e6e,0x04025ba9,0x06003bc0,0x40870220,0x3b070037,0x0360bc01,
+0x003e4000,0xf0025e02,0x8702a50e,0x0600afc0,0x4058011b,0x9a1700af,
+0x025e2a03,0x022206f0,0x00afc087,0xb0001409,0x10282341,0x60800148,
+0x9497f202,0x02e08401,0x01481009,0x00af4058,0x01012a10,0x1700b3c1,
+0x5e8301a1,0xa1771087,0x865ebb01,0x00049000,0x001340b0,0x68000018,
+0x2900ab40,0xde290314,0x3206f002,0xab405801,0x029a1700,0x00a34700,
+0xbc013206,0x113c1e62,0x60bc01e0,0xea110003,0x6b5eb000,0x01eb1100,
+0x3d1e6098,0x8303e811,0x06f0025e,0x60bc0136,0x3e600003,0x025e0200,
+0x00a50ef0,0x0433406d,0xbc0132c6,0x06000360,0xe0880176,0x7706000f,
+0x33406d00,0x01230702,0x000f5229,0x09019317,0x17000f52,0x609601aa,
+0x9497f202,0x8741e000,0x0165f001,0x000f60bc,0x2800a117,0x669086de,
+0x60860142,0x9497f206,0x9741e000,0x00657000,0x00831ae0,0x0601a0c6,
+0x1700535e,0x5ea000a2,0xa177044f,0x87de6800,0x01504604,0xf206e086,
+0xb8009497,0x37008b5e,0x5ab000a2,0xa0170003,0x03da0a02,0x014a0600,
+0xf2066087,0x84029497,0x06003bc0,0xda030250,0x50060003,0x025eb003,
+0x024e06f0,0x00074104,0x80015006,0xe6ce0460,0x5e060177,0xa2170053,
+0x8ade8201,0x03049000,0xf002dea9,0xb0035b06,0x06f0025e,0xd2870257,
+0x57060013,0x1352b000,0x01861100,0x300ae0a5,0xbf038011,0x06f002de,
+0x52080257,0x5b06000f,0x1302e000,0x01842000,0xf2066080,0xbf039497,
+0x07f002de,0x52070224,0xc106000f,0xa3478002,0x00be0600,0x00831ae0,
+0xe800a086,0x86007f1a,0x60bc019f,0xe4110003,0xff63bc01,0x01a5f71f,
+0x030360bc,0x0602e1d1,0x0600535e,0x60bc0164,0xe1910403,0x53de0602,
+0x00680600,0x008747e0,0x0702e151,0x06000fd2,0x47e00068,0xe1910087,
+0x33406d00,0x0023c702,0x054f5e68,0x68006b86,0x4600abde,0x5eb003c1,
+0x6e06f002,0x17520002,0x03c10600,0xf002de9e,0x02007506,0x0af0025e,
+0xc00002a9,0x72060077,0x77402901,0x00a51700,0x00975ee0,0x6800a597,
+0xe6ff97de,0x52800275,0xc1060017,0xbf000702,0x01c10600,0x061b60bc,
+0x9000a217,0x30008747,0x41e00065,0x6550f496,0x8747e000,0x03960601,
+0xf0025e83,0xbc017d06,0x80000360,0x5e02003e,0xa50ef002,0x30406d00,
+0x0079c6d2,0xd230406d,0x680023c7,0xe6ff97de,0x5a0f0180,0xa5170007,
+0x0b60bc01,0x00a1571d,0xf4965ee0,0x2a016430,0x17000358,0xde9e0399,
+0x9006f002,0x02e08201,0x029937f3,0x00175200,0x16019006,0x170003d8,
+0x5a0f01a6,0xa4170007,0x03d80c01,0x00a11700,0xf492de68,0xe0008c26,
+0x1702675e,0xdebf0399,0x9106f002,0x03d80d01,0x00a11700,0xf492de68,
+0xe000c126,0x1704675e,0xdebf0399,0x9106f002,0x03581001,0x00a61700,
+0x00675e88,0xe000a277,0x50f4ae00,0xdeaa0164,0x76c6ce64,0x9bde6800,
+0x02ac4600,0x00878107,0x6d009f06,0x060c8bde,0x5285029f,0x9f06000f,
+0x3b521801,0x00a11700,0x0087de68,0x81019f06,0xe6ce04e0,0x5ee00077,
+0xa3370b88,0x8f5ee000,0x00a39700,0x008741e0,0x0200a277,0x0cf0025e,
+0x1ae80005,0x9f06017f,0x1b60bc01,0x0081d715,0x00975e88,0xe800a177,
+0xb0f4865e,0x60bc0163,0xa1170e07,0x8e41e000,0x006330f4,0x001756b0,
+0xb000a117,0x17001b56,0xde6800a2,0xc146d086,0x8ade6800,0x00c166d0,
+0xf0025e02,0xbc01da0b,0x90151b60,0x62bc0164,0xa217004f,0x025e0200,
+0x002d0cf0,0x009b5e68,0xbc01be46,0x71f41e62,0x5e6800e0,0xb166009b,
+0x9bde6800,0x01bea600,0x00c78002,0x8701a117,0x113d86de,0x609801e8,
+0xe8113d06,0x831ae000,0x00a08600,0x007f1ae8,0xbc019f86,0x11000360,
+0xde6800ea,0xb946005f,0x6b5eb000,0x01eb1100,0x3d5ede92,0x8701e811,
+0x113d0260,0xde6800e8,0xbda6009b,0x06608701,0x01e8113d,0x3d166098,
+0x8101e811,0xc6ce04e0,0xdeaa0176,0x76c6ce64,0x02debf03,0x01c506f0,
+0x000f62bc,0xbc01e011,0x11000360,0xe08101e4,0x77e6ce00,0x0f60bc01,
+0x02e81100,0x00df1900,0xe000cc06,0x46f37e1a,0x1ab0009f,0x25100083,
+0x7e1ae800,0x009fa604,0x017f9a6a,0xb801ccc6,0x90040660,0xe0820124,
+0x9497f206,0xa3c70702,0x01e60600,0x090360bc,0xe000ea11,0x17018747,
+0x5e8303a1,0xd106f002,0x32406d00,0x00cf26f4,0xf432406d,0xbc01e626,
+0x370b0360,0xde0602a1,0xd5060053,0x825e9c01,0x00a137f4,0x00875eb0,
+0xb000eb11,0x11002352,0x52b000eb,0xeb110027,0x2b52b000,0x00eb1100,
+0x00874790,0xbc016530,0x17061b60,0x41e000a1,0x6530f496,0x0f5ad800,
+0x00eb1101,0x010b5ad8,0xd800eb11,0x1101035a,0x5ee800eb,0xa1373c6a,
+0x875ee800,0x00a1d701,0x01875ed8,0x8601eb11,0x113d0660,0x60bc01e8,
+0x6510061b,0x025e0200,0x01470ef0,0x3d06e086,0x8801e811,0x90000a60,
+0xc0040104,0xa117003b,0x86de8101,0x036c900d,0xf002dea0,0x6800ee06,
+0xa6064f5e,0x523801f3,0x80170003,0x5f5eb000,0x00811700,0xf0025e02,
+0x68006400,0x4600abde,0x5ea000f3,0xa177044f,0x875e6800,0x00c94800,
+0x04875e68,0xbf03c948,0x0af002de,0xde86033d,0x1509f002,0x37c08702,
+0x00140900,0xf0025e02,0xbc01c10b,0xa0000360,0x5e02003e,0xa50ef002,
+0x025e0303,0x03f306f0,0xf002dea9,0xbc01fe06,0xc0000360,0x5e02003e,
+0xa50ef002,0x37400702,0x00fa0600,0xf0025e02,0x6e009d0a,0x07023040,
+0xde010328,0x2807f002,0xabde6800,0x03100700,0xf0025e30,0xe0000407,
+0x20002b02,0xdebf038a,0x0807f002,0x17528002,0x00070700,0x004302e0,
+0xbf039020,0x07f002de,0x02e00008,0x95200057,0x4f5e6800,0x00b60904,
+0x024f5e68,0x6800b689,0x08024f5e,0x5e680083,0xc288044f,0x4f5e6800,
+0x002f0a05,0x064f5e68,0x68002f0a,0x8a064f5e,0xdebf0338,0x3d0af002,
+0xabde6800,0x03212700,0xf0025e30,0xe0001407,0x20002f02,0xdebf038b,
+0x1807f002,0x17528002,0x00170700,0x004702e0,0xbf039120,0x07f002de,
+0x02e00018,0x9620005b,0x4f5e6800,0x0061a806,0x044f5e68,0x68004f2a,
+0xaa044f5e,0x5e68004f,0xcea8054f,0x4f5e6800,0x00612806,0x054f5e68,
+0xa0002d2a,0x77ff4f5e,0x5e6800a1,0x452a0787,0x02debf03,0x007c08f0,
+0x001302e0,0xbf038420,0x08f002de,0x02e00080,0x8320000f,0x0f60bc01,
+0x02e81100,0x003bc084,0x8401c106,0x100906e0,0xdebf0348,0xc106f002,
+0x93c00002,0x03020000,0xf0025ea3,0xc3032c07,0x07f0025e,0xdebf032b,
+0x5709f002,0x0360bc01,0x003e0001,0xf0025e02,0x0702a50e,0x0700afc0,
+0x40070230,0x2c070037,0xafc00701,0x00a11700,0x00875eb8,0x8201a137,
+0x900d865e,0x44b0006c,0x7806007f,0x02608301,0x00481009,0xf0025e02,
+0x8702c10b,0x090037c0,0xde860314,0x1509f002,0x0360bc01,0x003e2001,
+0xf0025e02,0x4303a50e,0x07f0025e,0xc0870235,0x14090037,0xb3810002,
+0x01600700,0xf2066080,0x01039497,0x07f002de,0x5eb00360,0x4207f002,
+0x0702e000,0x03812000,0xf002debf,0xe0004307,0x20000302,0x60bc0180,
+0x65b01227,0x9541e000,0x01659032,0x006b402d,0x8800a217,0x37018b5e,
+0x403801a2,0x8016002b,0x27408802,0x014a0700,0xd0066084,0xb0008016,
+0x56f4025a,0x60bc0180,0xa1d70d1b,0x025e0200,0x005800f0,0x006740b0,
+0xbc018116,0xf70d1b60,0x5e0200a1,0x5800f002,0x6740b000,0x00821600,
+0x005326e0,0x69009469,0x87015326,0x60bc0154,0x94090003,0xb3818402,
+0x01590700,0x0d04e084,0xbc016c80,0x00000360,0x60bc016e,0x6f000003,
+0x02debf03,0x005e07f0,0xf73a52e8,0xe800a1b7,0x1702875e,0x5e9000a1,
+0xa1970087,0xba01e100,0x006e20f4,0x00bf81e0,0xb0006f00,0x17003b52,
+0x010502bd,0x5b0900b3,0xdf198002,0x00620700,0x0230406e,0x81035d08,
+0x07f002de,0x02e0006c,0x85200017,0x02dea903,0x016707f0,0x0906e084,
+0x80014810,0x100902e0,0x5e020048,0x9b0bf002,0x02de8603,0x011509f0,
+0xce046080,0x800176c6,0x97f20660,0xdebf0394,0xe107f002,0x02de8603,
+0x031509f0,0xf0025e30,0xa9038f07,0x07f002de,0xde680074,0x8f4700ab,
+0x3b52b000,0x009f1700,0x003b52b0,0xbc01be17,0x26000360,0xdebf0384,
+0x8f07f002,0x02dea003,0x037e07f0,0xf002debf,0x90016305,0x10090a60,
+0x52b00048,0x9f17003b,0x3b52b000,0x01be1700,0x00835e9e,0x0601ebb0,
+0x17000f52,0x5eb800a1,0xa1370087,0x86de8201,0x01ab77f5,0x000361bc,
+0xe8008030,0xf7f33a52,0xd26b00a2,0x81e7f33a,0x7e5ee800,0x00a2d791,
+0x008b5e90,0xbc01a197,0x90101b60,0x526b0064,0x8ce7f33a,0x875e1801,
+0x01a21700,0x00875e0a,0x8800a317,0x57f40660,0x41e000a2,0x6470f492,
+0x0258b000,0x000056f4,0x91fade6b,0xb0008fc7,0x17003b52,0xdebf03be,
+0x8f07f002,0x025e0200,0x00820df0,0x00131ab0,0xb0008426,0x17003b52,
+0xde20039f,0x9c07f002,0x535e0702,0x01930700,0x0902e080,0xbf034810,
+0x07f002de,0xde68009c,0x9907005f,0x07541a02,0x01970700,0x0027c003,
+0x8201a117,0xd010865e,0xc0020186,0xa1170027,0x2a42e000,0x018a30f4,
+0xce04e080,0xa90376c6,0x07f002de,0x5eb0009c,0x80100047,0x4f5e0801,
+0x00a11700,0x00875e68,0xb003b927,0x07f0025e,0x520002bd,0xac070017,
+0xabde6800,0x00a24700,0x005302e0,0x86029420,0x0700535e,0x528402e1,
+0x5b09000f,0x0fd28402,0x03a70700,0xf0025eb3,0xbf03aa07,0x07f002de,
+0x5e3103b2,0xb207f002,0x4f5e6800,0x01aa0704,0xf2066084,0x68009497,
+0x07024f5e,0xdebf03e1,0xd107f002,0x02de1e03,0x03af07f0,0xf0025e31,
+0x8401af07,0x97f20260,0xde680094,0xb44700ab,0x3f02e000,0x038f2000,
+0xf002debf,0x6800b707,0x4700ab5e,0x528002b7,0xe107002f,0x07410202,
+0x00b70700,0x044f5e68,0x6800e107,0x87024f5e,0x410402e1,0x5b090007,
+0x02debf03,0x03e107f0,0xf0025e30,0x6800e107,0xa7054f5e,0x5e6800d1,
+0xd127054f,0x02debf03,0x02e107f0,0x00535e06,0xe000c007,0x20006302,
+0xdebf0398,0xe107f002,0x02de2303,0x01c807f0,0x000b5029,0x6800a317,
+0x27058fde,0xe08701c8,0x83701002,0x02608401,0x00481009,0x00875eb0,
+0x6e00a117,0x270003e0,0xded103c7,0xc807f002,0xabde6800,0x00ce4700,
+0x002702e0,0x07028920,0x0700bf80,0xd20701ce,0xa117000f,0x865e8101,
+0x01ac97f5,0x000360bc,0x6800a817,0x07004f5e,0x5e6800e1,0xe107014f,
+0x4f5e6800,0x02e18705,0x00c74780,0x29035b08,0x07f002de,0xde0201d7,
+0xa11700af,0x0f520601,0x00a21700,0xf4865e38,0x8201e147,0x77f58ade,
+0x52b000ab,0xf2110023,0x2752b000,0x00f31100,0x002b52b0,0x0601f411,
+0x17000f52,0x5ee000a1,0xf5310087,0x5b00b000,0x00f01100,0x00c347b0,
+0x34010018,0x1700c7c7,0xde6e00a1,0xe1a70284,0x0360bc01,0x02421008,
+0x0007c183,0x8002e307,0x0900535e,0x40b0005b,0xa1170033,0xdf990801,
+0x00a21700,0x008b5e68,0xe800eb67,0x17d43040,0x198102a1,0xeb0700df,
+0x831ab000,0x02a11700,0x00df9980,0xb000eb07,0x1700635e,0x5e6e00a1,
+0x5d080284,0x875eb000,0x01700600,0xce006081,0x020276c6,0x070013c0,
+0x5ee000f1,0x70460384,0x04608101,0x0276c6ce,0x00df1901,0x03010908,
+0x1700535e,0xde8701a1,0x76c6ce84,0x02de8603,0x011509f0,0x010360bc,
+0x02003e40,0x0ef0025e,0x5e8503a5,0xf407f002,0x02608e01,0x01e8113d,
+0x0083c707,0x8201a117,0xc6ce845e,0x99010276,0xfe0700df,0x97c70301,
+0x01a11700,0xce845e82,0x070277e6,0x0a00afc0,0x60bc0182,0xe811000f,
+0x04608401,0x0077e6ce,0x002740b0,0xb0007206,0x06002b40,0x40b00073,
+0x7406006b,0x6f40b000,0x01750600,0xce046084,0x020077e6,0x0af0025e,
+0x63bc019d,0xa8d71fff,0x025e0200,0x008b0bf0,0xf0025e02,0xa801820a,
+0x90000a60,0x19010204,0x6d0d00df,0x23016800,0x03590800,0xf002de20,
+0x06025908,0x080053de,0x5e680059,0x1228044f,0x4f5ea000,0x00a17704,
+0x0487de68,0xbc015948,0x10100360,0x52b00073,0x74100023,0x2752b000,
+0x00741000,0x002b52b0,0x1e017410,0x1000835e,0x60bc0174,0x71101203,
+0x0360bc01,0x0172f017,0x083360ac,0xb0007030,0x1800c341,0x41800200,
+0x1b0800c3,0xc3c18702,0x01590800,0xf506e083,0x8301aed7,0x700e0660,
+0x41280173,0xa11700cf,0x87de8000,0x01a1b700,0x062760bc,0xe0008249,
+0xa90d0a26,0x5e680082,0x4a28044f,0x0b26b000,0x00651000,0x00fb5e90,
+0xe800be97,0x97d0fa5e,0xde8502a1,0x49080087,0x7f5e9000,0x009f9700,
+0x07875ee8,0x0502a1f7,0x080087de,0x5ee80031,0xa197d07e,0x87de0502,
+0x00380800,0xf40260e8,0xbc01a137,0x90101b60,0x5e020064,0x970df002,
+0x02debf03,0x004008f0,0x07fb5ee8,0x9e0184f6,0x96d00260,0x609e0184,
+0xa137f402,0x875e6e00,0x003be807,0x009741e0,0x02006410,0x0df0025e,
+0x5ee80097,0xa197d07e,0x1b60bc01,0x00649010,0xf0025e02,0xbf03820d,
+0x08f002de,0x1ab00040,0x80160013,0x171ab000,0x00811600,0x001b1ab0,
+0xb0008216,0x16001f1a,0xdebf0383,0x4808f002,0x035ab000,0x00a11700,
+0xd0845eb0,0xb0008096,0x1700075a,0x5eb000a1,0x81b6d084,0x0b5ab000,
+0x00a11700,0xd0845eb0,0xb00082d6,0x17000f5a,0x5eb000a1,0x83f6d084,
+0x135a8800,0x039f9700,0xf002debf,0xb0005908,0x10000b26,0x5e900065,
+0xa297007f,0x8a5ee800,0x02a197d0,0x0087de85,0xb0005808,0x16008b5e,
+0x60e80084,0xa237f4fe,0x8bde8502,0x00540800,0x009741e0,0x02006410,
+0x0df0025e,0xdebf0397,0x5808f002,0x0360bc01,0x01801600,0x000360bc,
+0xbc018116,0x16000360,0x60bc0182,0x83160003,0x135ab000,0x009f1700,
+0x001340a8,0xbf030450,0x04f002de,0x02e000e1,0xa1200087,0x02debf03,
+0x005e08f0,0x000b02e0,0x84018220,0x10090660,0xe0840148,0x48100906,
+0x02debf03,0x035b09f0,0xf0025e30,0x68007408,0xa8064fde,0x02e00065,
+0x8e20003b,0x02debf03,0x006608f0,0x003702e0,0x23038d20,0x08f002de,
+0xde68007c,0x7cc8f14e,0x02e08701,0x01837010,0x09026084,0xb0004810,
+0x1700875e,0xe06e00a1,0x6c280003,0x02ded103,0x006d08f0,0x064f5e68,
+0x05026f28,0x08000b50,0x6082017c,0x48100906,0xbf800702,0x02730800,
+0x000fd207,0x80017308,0x97f506e0,0xdebf03ac,0x7c08f002,0xc3008702,
+0x00790800,0x064fde68,0x680079a8,0x080013d2,0x60bc0179,0x83110003,
+0x0360bc01,0x00821100,0x064fde68,0xe0007c28,0x20004f02,0xdebf0393,
+0x7c08f002,0x025eb003,0x027e08f0,0x00074104,0x83028108,0x07000741,
+0xdebf0328,0x8108f002,0x07418402,0x01280700,0xf2066080,0xbf039497,
+0x07f002de,0x5e9f0328,0x8608f002,0x02de9e03,0x023d0af0,0x00535e03,
+0x04023d0a,0x08004381,0x0100018a,0xa1170063,0x27c00201,0x00a21700,
+0xf486de38,0xb0038048,0x08f0025e,0x5200028c,0x80080017,0x2f528002,
+0x038e0800,0xf0025e33,0x3c023d0a,0x08003f52,0x523c019f,0xa117003f,
+0x84de6800,0x01be8804,0x160360bc,0xbc016410,0x10081b60,0x5e680065,
+0x9b280087,0x035ab000,0x00a21700,0xc08ade68,0xe000be08,0x30009741,
+0x41e00065,0x64300093,0x875ee800,0x00a15700,0x00875e6a,0x68009428,
+0x0800875e,0x5a3801a0,0xa1170003,0x03583801,0x00a21700,0xf486de68,
+0xbf03be48,0x08f002de,0xc18502a0,0x3d0a0007,0x1b60bc01,0x0165f007,
+0x050360bc,0x0200a4b7,0x00f0025e,0x00800289,0xbe0800c3,0x1360bc01,
+0x00a61719,0x007f01e0,0x6d00a5b7,0xc8f4965e,0x60bc01a8,0xa5971113,
+0x945e6800,0x00c0c80b,0x007b01b0,0xb0006510,0x17002752,0x52b000a2,
+0xa317002b,0x94416800,0x00b3e80b,0xd08ede68,0x6800af48,0x28d08a5e,
+0x41e000be,0x65b00097,0x96416d00,0x01acc8f4,0x111360bc,0xbf036590,
+0x08f002de,0x02e000ac,0xa220008b,0x7f01b000,0x00651000,0x002352b0,
+0xb0008016,0x16002752,0x52b00081,0x8216002b,0x0252bc01,0x01a1f7f2,
+0xf4025ea9,0x90008336,0x16016744,0xde680084,0xbda80593,0x06608401,
+0x008496d0,0x00975eb0,0xb0035f00,0x05f0025e,0xdebf0376,0x2807f002,
+0x8f02e000,0x03a32000,0xf002debf,0x9e038008,0x0af002de,0x5eb0033d,
+0xc508f002,0x17520002,0x03800800,0xf0025e33,0x84013d0a,0x97f20660,
+0x5eb00394,0x7605f002,0x02debf03,0x032807f0,0xf0025e83,0x6d00cb08,
+0x88033340,0x406d00c9,0x80880333,0x025e3003,0x033e0af0,0xf002debf,
+0x30037605,0x08f0025e,0x02e000d1,0x8c200033,0x02debf03,0x007a05f0,
+0x004b02e0,0x03019220,0x170027c0,0x5e820181,0x81b7d104,0x025e0200,
+0x00780bf0,0x00230088,0xe000a237,0xf700885e,0x5ee000a2,0x8951f486,
+0x06e08601,0x03801130,0xf002debf,0xa2037c08,0x00f002de,0xdea30334,
+0xf408f002,0xff01e000,0x017f2000,0x000360bc,0xbf03a317,0x08f002de,
+0x608701f6,0xa0100304,0x0360bc01,0x00e45100,0x009347b0,0xbc010018,
+0x90020360,0x62bc0104,0xe011000f,0x0f60bc01,0x00e83101,0x00a347b0,
+0xbc010018,0x11000f60,0x608401e8,0x48100906,0x1e602000,0x00eb0809,
+0x00fb01e0,0xbf037e20,0x08f002de,0x60bc01fc,0xa1d70e03,0x63001401,
+0x00a21700,0xf4865ee0,0xe0006550,0x3600035a,0x00030280,0xf10800c7,
+0x025ea903,0x02f608f0,0x009f5091,0x9101f508,0xf4841a60,0xdebf0327,
+0xf508f002,0xff01e000,0x017f2000,0x000360bc,0x2303a337,0x08f002de,
+0xe08301fc,0x48100902,0x0360bc01,0x018e1700,0x1002e087,0x82018370,
+0x10090260,0x5e020048,0x830bf002,0x02ded003,0x03fd08f0,0xf0025ed0,
+0x8201fe08,0x100902e0,0xded50348,0x0009f002,0x0360bc01,0x01b41000,
+0x000360bc,0x6800a1f7,0x0900a700,0x42850104,0xa137f41a,0x025e0200,
+0x005800f0,0x006740b0,0xbc01a517,0xf71fff63,0x5e0200a2,0x5d00f002,
+0x07608800,0x00a45701,0xf4865eb8,0x0200a197,0x00f0025e,0x5e68005d,
+0x0200008f,0xb3016800,0x010f0900,0x000360bc,0xbf032605,0x09f002de,
+0xe0200012,0x1209091e,0x975eb000,0x032a1400,0xf002debf,0xa8000b02,
+0xf0002341,0xdebf0348,0x0200f002,0x02608301,0x00481009,0x0230406e,
+0xe0001709,0x20007702,0x5e02009d,0x420ef002,0x025ea303,0x032807f0,
+0xf002dec6,0x84011a09,0x100906e0,0xdebf0348,0x5b09f002,0x8ae32000,
+0x02210009,0x00234584,0x91032100,0x00f0025e,0xde960321,0x2100f002,
+0x025e9603,0x002100f0,0xf0025e02,0xbc017509,0x30000360,0xe0870142,
+0x23712402,0x0360bc01,0x03206000,0xf0025e12,0xbc012509,0x40000360,
+0x61bc0120,0x25110083,0x7b00b000,0x01271100,0x111360bc,0xbc015e80,
+0x80111360,0xe080015f,0xaed7f506,0x07c10701,0x01ab1700,0x000f60bc,
+0xbc01e811,0x11000f62,0x5e0200e0,0x3b09f002,0xcf61bc01,0x015c100c,
+0x000360bc,0xbc015d10,0xf001cf61,0x60bc015e,0x5ff0083b,0xc7000302,
+0x010a0000,0x000360bc,0xbc01e803,0x03000360,0x60bc01ed,0xf2030003,
+0x0360bc01,0x01f70300,0x000360bc,0xbf03a906,0x00f002de,0x60bc010a,
+0x48100003,0xb35ea800,0x01ac5703,0x1fff63bc,0xbc0154f0,0xf01fff63,
+0x63bc0155,0x56f01fbf,0xff63bc01,0x0057f01f,0xf0025e02,0x8701420e,
+0x712406e0,0x60bc0123,0x54100003,0x0360bc01,0x01551000,0x000360bc,
+0xbc015610,0x10000360,0x60bc0157,0x1720000f,0x07c10601,0x01a11700,
+0x02845e82,0x070117e0,0x17000741,0x5eb800a1,0xa1370087,0x87de8001,
+0x00160000,0xf002de02,0x85020000,0x000037c0,0x60bc0102,0x3e600103,
+0x025e0200,0x02a50ef0,0x00374086,0x02004e09,0x0bf0025e,0x608201af,
+0xac97f506,0x1b02e000,0x03862000,0xf002de86,0x87021509,0x090037c0,
+0x60580115,0x2a100003,0x0360bc01,0x00049000,0x001340b0,0xbf03a117,
+0x00f002de,0x60b8010a,0x2490040a,0x025eaa03,0x015e09f0,0x00036058,
+0xbc012a10,0x90020360,0x40b00004,0x00180013,0x0360bc01,0x00e45100,
+0x009347b0,0xbc010018,0x11000f62,0x608001e0,0x77e6ce00,0x025e8503,
+0x016409f0,0x000f62bc,0xbc01e011,0x31010f60,0x47b000e8,0x001800a3,
+0x0f60bc01,0x01e81100,0x010360bc,0xe800a157,0x3700875e,0xde6800a1,
+0x6a090087,0x0360bc01,0x00049002,0x001340b0,0x24030018,0x04f002de,
+0x608601e1,0xab77f506,0x025e0200,0x017509f0,0x10066080,0xb0008130,
+0x1700875e,0x608001a1,0x81301002,0x02debf03,0x01e104f0,0x000361bc,
+0xb0008010,0x18000342,0xe06e0000,0x78290003,0x025e5003,0x007b09f0,
+0xf0025e01,0xbf030000,0x02f002de,0x41a80033,0x48f00423,0x02608201,
+0x02481009,0x00afde06,0xd5038009,0x09f002de,0xde500380,0x7e09f002,
+0x0360bc01,0x02b41000,0x0083c784,0xbc018309,0x11000b60,0x608e01e0,
+0xab77f502,0x02de0200,0x030000f0,0xf002dea2,0xbc022100,0x09008742,
+0x60bc018c,0xa4370003,0x0360bc01,0x01a3f71f,0x00630014,0x8800a217,
+0x57f40660,0xdebf03a2,0x9109f002,0x07608800,0x01a41701,0x00ff63bc,
+0x1401a317,0x17006300,0x5ee000a2,0xa217018b,0x06608800,0x01a257f4,
+0x191360bc,0x20006510,0x89f486c2,0x41e00097,0x65500697,0x935e8800,
+0x00a43700,0xf4925e20,0xbf032160,0x09f002de,0xde680092,0x9b49f492,
+0x02dea003,0x009b09f0,0x1623c120,0x02009309,0x09f0025e,0xde6d0075,
+0xa8092093,0xb35a0002,0x02a70900,0x00b35a3c,0x8503a709,0x00f002de,
+0x5e850321,0x2100f002,0x02dea203,0x032100f0,0xf002dea3,0x97032100,
+0x00f002de,0x41b00021,0x60100097,0x06608800,0x01a497f4,0x840a6091,
+0xbf0327f4,0x02f002de,0x6080010b,0xac96d502,0x935eb000,0x01a11000,
+0x000360bc,0xbf034330,0x09f002de,0xc2830293,0x0200001f,0x875eb000,
+0x03a11700,0xf002ded0,0xbc01fb03,0x10040360,0xde9e0342,0x0a00f002,
+0x3f5eb000,0x01451100,0x000360bc,0xb0008f17,0x1700435e,0x5eb00085,
+0x9017000f,0x025e0200,0x037509f0,0xf002debf,0x6d000a00,0x88053340,
+0x5eb30381,0xbb09f002,0x4f5e6800,0x00ed8902,0x006702e0,0xbf039920,
+0x09f002de,0x5e6800ed,0xec89024f,0x5f02e000,0x03972000,0xf0025e9f,
+0x9e032b0a,0x09f002de,0xde2103cd,0xcd09f002,0x6f02e000,0x009b2000,
+0xf0025e02,0x86017509,0x10090260,0x60800148,0x48100902,0x02e08101,
+0x01481009,0x020360bc,0x80024210,0x09001f44,0x5eb000cc,0x4511003f,
+0x0360bc01,0x008f1700,0x00435eb0,0xb0008517,0x17000f5e,0xdebf0390,
+0xcd09f002,0xb644a000,0x034571f0,0xf0025e9f,0x82022b0a,0x0900c300,
+0x00b000ec,0xa1170073,0x865ee000,0x00a117b0,0xf47a5ee1,0xe1009e37,
+0x170077de,0xdee1009d,0x9c170073,0x6fdee000,0x039b1700,0xf002de9e,
+0x6e00dd09,0x4a926e5e,0x5e6d002b,0xdd49926e,0x725e6e00,0x002b2a92,
+0x92725e6d,0x6e00dd29,0x0a92765e,0x5e6d002b,0xdd099276,0x7ade6d00,
+0x002bea91,0x006744b0,0xb000a806,0x06006b44,0x44b000a7,0xa606006f,
+0x7344b000,0x00a50600,0x23a29a68,0xe900dd29,0xd7f3a21a,0x9ae9009e,
+0x9db7f39e,0x9a9ae900,0x009c97f3,0xf3969ae8,0xe1009b77,0xf7917a5e,
+0x5eb000a1,0x19110087,0x76dee100,0x001a1192,0x9272dee1,0xe0001b31,
+0x51926ede,0xde68001c,0xe6292386,0x02de1e03,0x002b0af0,0x024f5e68,
+0xbc012b8a,0xb0081b60,0x60bc0165,0xa4970003,0x025e0200,0x008900f0,
+0x0093de68,0x85021b8a,0x0a00c300,0xc107021b,0xf7090097,0x0f5a3c01,
+0x01a21700,0xf4125abc,0xbf03a257,0x09f002de,0x5ab000f8,0xa217000f,
+0x0360bc01,0x03321100,0xf0025e33,0x8002fe09,0x0a001f44,0x5eb0001b,
+0x8611008b,0x0ee0a501,0x03801130,0xf002debf,0x9b021b0a,0x0a002f40,
+0x44000214,0x0e0a0007,0x07c40002,0x02080a00,0x00074481,0x82011b0a,
+0x900107e0,0x52b00010,0x1110002f,0x3352b000,0x00111000,0x003752b0,
+0xb0001110,0x11008b5e,0xdebf030f,0x1b0af002,0x07e08201,0x00103001,
+0x002f52b0,0xb0001110,0x10003352,0x52b00011,0x11100037,0x8b5eb000,
+0x030d1100,0xf002debf,0x82011b0a,0xd00007e0,0x52b00010,0x1110002f,
+0x3352b000,0x00111000,0x003752b0,0xb0001110,0x11008b5e,0xdebf030b,
+0x1b0af002,0x02de3303,0x00170af0,0x008b5eb0,0xbf030b11,0x0af002de,
+0x5e34031b,0x1a0af002,0x8b5eb000,0x030d1100,0xf002debf,0xb0001b0a,
+0x11008b5e,0xde1e030f,0x2b0af002,0x025e9f03,0x002b0af0,0x024f5e68,
+0x33032b8a,0x0af0025e,0x60bc012b,0x65b0081b,0x0360bc01,0x00a4b700,
+0xf0025e02,0x68008900,0xaa0093de,0xc107022b,0x270a0097,0x075a3c01,
+0x01881700,0x000b5a3c,0xbf03a117,0x0af002de,0x5a380129,0x88170007,
+0x0b5a3801,0x01a11700,0xf2865e84,0x87019497,0x912486de,0x5eb00324,
+0x7605f002,0x02debf03,0x032807f0,0xf0025e30,0xbf038008,0x05f002de,
+0x5eb00376,0x320af002,0x025e3303,0x038008f0,0xf002debf,0xb0003e0a,
+0x11002352,0x52b000f2,0xf3110027,0x2b52b000,0x01f41100,0x000360bc,
+0xb000f591,0x11005b00,0xdebf03f0,0x7605f002,0x3f523801,0x02a11700,
+0x00535e06,0x38013b0a,0x17004b52,0xde6800a1,0x3d8a0087,0x02debf03,
+0x032807f0,0xf0025eb0,0x00027605,0x0a00f300,0xde060243,0x430a0053,
+0x835e1801,0x00a11700,0x0087de68,0xbc0143aa,0x51020b60,0x52000242,
+0x80080017,0x02debf03,0x012807f0,0x000360bc,0xbc018311,0x11000360,
+0x40190182,0xa117002f,0x875e6800,0x017c0800,0x2086de99,0x31030011,
+0x08f0025e,0x5ea0007c,0xa297003b,0x4e5e2000,0x017c48f4,0x09026084,
+0xbf034810,0x08f002de,0x5e30037c,0x7c08f002,0x4fde6800,0x00542a04,
+0x003352b0,0xb0009f17,0x10002f52,0x528102eb,0x6305002f,0xab02e000,
+0x02aa2000,0x002f5281,0x08026608,0x05002f52,0xdebf0376,0x2807f002,
+0x0360bc01,0x01671000,0x000360bc,0x80014610,0x300906e0,0xc1820249,
+0x600a001f,0x2f60bc01,0x0165f01f,0x000360bc,0xe8008016,0x30009741,
+0xc1690065,0x5d0a0097,0x0b60bc01,0x01941700,0x000360bc,0xbc01ab17,
+0x17000360,0x60bc01ac,0xad170003,0x0360bc01,0x01ae1700,0x000360bc,
+0xbc01bf17,0x20000360,0x60bc0120,0xa1170003,0x025e0200,0x015800f0,
+0x00674038,0x1c012800,0x00006740,0x60bc0129,0x49500003,0x0360bc01,
+0x01a71700,0x000360bc,0xbc01a817,0x17000360,0x60bc01a9,0xac170003,
+0x0360bc01,0x01ad1700,0x0f06e082,0x06027810,0x0a00e3c1,0x80680072,
+0x750a00a7,0x02debf03,0x00760af0,0x00a78068,0xbc01768a,0xe0000b60,
+0x60bc0100,0x01400003,0x2f62bc01,0x01022003,0x1b5b60bc,0xbc010340,
+0x00000360,0x60bc0104,0x05000003,0x1b60bc01,0x01611006,0x1f1360bc,
+0xbc016050,0x06000360,0x5eb0009e,0x8517000f,0xb644a000,0x034571f0,
+0xf002debf,0x88012209,0x46ce5c5e,0x60bc0172,0x07100e1b,0x0360bc01,
+0x01085001,0x00066088,0x07020490,0x0600afc0,0xde860320,0x1509f002,
+0x02de0503,0x03870af0,0xf002de86,0x85031509,0x0af002de,0x5eb00089,
+0xa1170087,0x03e06e00,0x038d2a00,0xf002de86,0xbc011509,0x10000760,
+0xde020042,0x0000f002,0x025e2103,0x00940af0,0xf43a1ae0,0xb0008e26,
+0x17003b1a,0xdebf038b,0x9c0af002,0xb7508102,0x01990a00,0x009f501c,
+0xe0008b17,0x37f42e5e,0x5e9c018b,0x27f4842e,0x02debf03,0x019c0af0,
+0x009f501e,0xe0008b17,0x37f42e5e,0x5e9e018b,0x27f4842e,0x02de0200,
+0x000000f0,0x00a70068,0x0201a28a,0x060027c0,0x8068009d,0xa8aa00a7,
+0x771ae000,0x009d2600,0xf002de02,0xbc010000,0x26000360,0x40bc019d,
+0xa117002b,0x875e9800,0x00a11701,0x012b4098,0x6a00a217,0x2af48ade,
+0x60bc01a8,0x9d860003,0x02de0200,0x000000f0,0x002352b0,0xb0001f10,
+0x10002752,0x52b00020,0x2110002b,0x07608001,0x021d1000,0x00774080,
+0x0200ad0a,0x00f002de,0xe0870100,0xab77f502,0x025e9103,0x000200f0,
+0x09fee320,0x81020200,0x0a00535e,0x418302bb,0xb50a001f,0x53de8102,
+0x01c10a00,0x000360bc,0xbc015111,0x11000360,0x62bc0152,0x53110003,
+0x0360bc01,0x01505100,0xf2066089,0xbf039497,0x00f002de,0xc5800202,
+0x02000043,0x47c5f001,0x01561100,0x0047c507,0xf001a117,0x31f44ac5,
+0x60890155,0x9497f20a,0x0360bc01,0x02471008,0x0007c104,0x92030200,
+0x00f002de,0xde9e0302,0xc80af002,0x02deb803,0x000200f0,0x007f01b0,
+0x6800a117,0xc00b84de,0xdebf0302,0xca0af002,0x53de0302,0x00020000,
+0x0023de68,0x8402cb0a,0x0000535e,0xc4870202,0x02000093,0x0361bc01,
+0x00231100,0x002b01b0,0xb000a317,0x17000b44,0x44b000a1,0xa217000f,
+0x865ee900,0x00a13723,0x238adee8,0xe900a257,0x66f4865e,0xdee8008a,
+0x8b06008b,0x6f816800,0x00d70a00,0x00235e68,0x6800eb2a,0x2a002700,
+0x5ee800eb,0xa1370023,0x87de6900,0x00da0a00,0x01845ee0,0xb000a137,
+0x18001f44,0x44880000,0xa3570123,0x23449000,0x01a4d700,0x006f013c,
+0x6800a517,0x0a0097de,0x013801e4,0xa517006f,0x975e6800,0x00e70a00,
+0x00975ee8,0x6800a137,0x0a00875e,0xdebf03eb,0xe70af002,0x975ee800,
+0x00a53700,0x0194de80,0xe000a537,0xb70d865e,0x1ae100a1,0x8a66f42a,
+0x2e9ae000,0x008b86f4,0x00875ee8,0x6a00a137,0x0a00875e,0x1a6900e7,
+0xf00a002f,0x2f9a6800,0x00ee0a00,0x2a2a9a6e,0x8001f08a,0x97f206e0,
+0xdebf0394,0xf20af002,0x02e08001,0x039497f2,0xf002debf,0x68000200,
+0x0a002741,0x458402fd,0xf30a0023,0xa7006800,0x00f6aa00,0x00a78068,
+0xb000f9ca,0x17006744,0x44e800a1,0xa237f466,0x8b5e6d00,0x03f74a00,
+0xf002de92,0x02002e09,0x0cf0025e,0x5e02005f,0x5a0cf002,0x025e0200,
+0x016a0cf0,0x000f60bc,0x1e03e811,0x0bf002de,0x60bc0104,0x5c100003,
+0x0360bc01,0x015d1000,0x045360bc,0xbc015e10,0x10000360,0xdebf035f,
+0x080bf002,0x0b60bc01,0x015c1000,0x000360bc,0xbc015d10,0x10044360,
+0x60bc015e,0x5f100003,0x0360bc01,0x02208000,0x00bf0085,0xb0003d0b,
+0x11002b1a,0x1ab00051,0x5211002f,0x0360bc01,0x01503100,0x0c0360bc,
+0x00004090,0x00f002de,0xc1680000,0x110b0003,0x43458002,0x010d0b00,
+0x000360bc,0x84025011,0x0b004345,0x44b00012,0xa1170067,0x865e6800,
+0x01142b23,0x000360bc,0x86012040,0x11200660,0x1ae90000,0xa1372a2a,
+0x2e9ae800,0x00a2572a,0xf46644e1,0xe1001931,0x51f46ac4,0xc4e1001a,
+0x1b11006f,0x73c4e000,0x001c1100,0x001f44b0,0x88000018,0x57012344,
+0x449000a3,0xa4d70023,0x0b44b000,0x00a11700,0x000f44b0,0xe900a217,
+0x3723865e,0xdee800a1,0xa257238a,0x8bde6900,0x002b0b00,0xf40a44e1,
+0xe0000271,0x91f40ec4,0x5ee80003,0x88370023,0x23de6900,0x00200b00,
+0x002700e8,0xbf038837,0x0bf002de,0x60860120,0x00112002,0x53de0002,
+0x013f0b00,0xf202e080,0x02009497,0x0cf0025e,0x60bc015d,0x40100003,
+0x02debf03,0x02320bf0,0x00c38000,0xe000360b,0x57096444,0x5ee800a1,
+0xa1372186,0x66c46c00,0x03342bf4,0xf002debf,0xe8003f0b,0x26212a01,
+0x60bc018a,0x8b060003,0x2b1ab000,0x01511100,0x000360bc,0xbc015211,
+0x31000360,0x45800250,0x3b0b0043,0x02debf03,0x01160bf0,0x000360bc,
+0xb0004010,0x11002b01,0xde000009,0x0000f002,0x025e5603,0x00420bf0,
+0xf0025e02,0xb000cc00,0x11002f01,0x61bc0109,0x5c100ccf,0x0360bc01,
+0x015d1000,0x01cf61bc,0xbc015ef0,0xf0083b60,0x5e02005f,0x660cf002,
+0x025e0200,0x006f0cf0,0xf0025e02,0xbf03630c,0x09f002de,0x5e88012e,
+0x86d01006,0x075e0201,0x01a11700,0x10865e82,0x680086d0,0x8b00a780,
+0x5e9d0150,0x86d01002,0x1b420802,0x01670b00,0x061b60bc,0x0200a137,
+0x00f0025e,0x608d0158,0xa2370306,0x025e0200,0x015d00f0,0x006f5018,
+0x8002a317,0x0b001bc2,0x60bc015b,0x81d71d03,0x8fde0002,0x02640b00,
+0x008f5e00,0xbf035e0b,0x0bf002de,0x60bc0161,0x81f70303,0x8f5e6e00,
+0x00644b00,0x008f5e68,0x8301610b,0x37030660,0x5e0200a2,0x5d00f002,
+0x02debf03,0x016c0bf0,0x03066083,0x0200a237,0x00f0025e,0xdebf035d,
+0x6c0bf002,0x02608301,0x00a23703,0xf0025e02,0xbf035d00,0x0bf002de,
+0x60bc016c,0xa137061b,0x025e0200,0x015800f0,0x0302608d,0x0200a237,
+0x00f0025e,0x60bc015d,0x81d71d03,0x07c18102,0x026c0b00,0x00634087,
+0xbc016d0b,0x10070760,0x60bc0119,0x18700183,0x63408702,0x00700b00,
+0x00075eb0,0xbc011910,0xb0018360,0x40870218,0x730b0063,0xa7006800,
+0x02778b00,0x001b420b,0xbf03770b,0x0bf002de,0xde020077,0x0000f002,
+0x1354b000,0x02a11700,0x0007de00,0xb000820b,0x10008b41,0x60bc0165,
+0xa1d70103,0x025e0200,0x00570df0,0x00845ee0,0xe000a1d7,0xf700845e,
+0x5e0202a1,0x820b0007,0x845ee800,0x03a137d4,0xf002debf,0x0200820b,
+0x00f002de,0x00040200,0x860b00bf,0x025e0200,0x03340df0,0xf002debf,
+0xa0008a0b,0xb1f0b644,0x80070245,0x8a0b00bf,0x17c56800,0x018a0b00,
+0x000360bc,0x02004531,0x00f002de,0x00000200,0x9a0b00bf,0xa35ee000,
+0x00a83700,0x05a05e6d,0xb0009acb,0x17009726,0x5e0200a1,0x5800f002,
+0x6740b000,0x00a21700,0xffa3de68,0xb00097eb,0xd734895e,0x006d00a2,
+0x968b00a7,0x779a6d00,0x03984b00,0xf002debf,0x6800970b,0x0b00779a,
+0x5eb80098,0xa2d73489,0x025e0200,0x015d00f0,0x000360bc,0x0200a817,
+0x00f002de,0x5e010200,0xae0b00b3,0x02608101,0x01ac97f5,0x1f0f60bc,
+0x90016210,0x30020460,0x54b00086,0x8a100027,0x0361bc01,0x0080f000,
+0x00a702e0,0xbc01a920,0x10000360,0x60bc0184,0x85100003,0x0754b000,
+0x00e01000,0x000b54b0,0xbc01e110,0x901a0360,0x60bc01e3,0xe4100003,
+0x0360bc01,0x0192b706,0x1fff63bc,0xbc01c3f0,0xf01fff63,0x60bc01c4,
+0x84f01f03,0x0a609001,0x01481009,0x0902e084,0x02004810,0x00f002de,
+0xde000200,0xc00b00b3,0xb35e0002,0x02c00b00,0x001f4200,0xbc01c00b,
+0x10000361,0x42b00080,0x00180003,0x03e06e00,0x03b52b00,0xf0025e50,
+0x0100b80b,0x00f0025e,0xdebf0300,0x3302f002,0x2341a800,0x0148f001,
+0xf502e087,0xb000ab77,0x1100331a,0x02e00042,0xa720009f,0x7060a001,
+0x008fe6d1,0xf0025e02,0x8001d30b,0x900d06e0,0x5e02006c,0x8b0bf002,
+0x02de0200,0x030000f0,0xf002de28,0x2000c00b,0x0b098ae0,0x1ab000c0,
+0x60100053,0x571ab000,0x00180000,0x006300b0,0xb000a010,0x18008342,
+0x42680000,0xc00b0047,0x02608001,0x002c9485,0xf0025e02,0xb000e700,
+0x17004f1a,0xde6800a5,0xcfcb8496,0x02e08001,0x016c900d,0x8506e082,
+0xbf032db4,0x0bf002de,0xe08601c0,0xa0100304,0x8342b000,0x00001800,
+0x00a302e0,0xbf03a820,0x0bf002de,0x5e0002c0,0xd90b00b3,0x4b1ab000,
+0x008f1000,0x00471ab0,0xb0008e10,0x1000431a,0x1ab0008d,0x8c30003f,
+0x02608001,0x00ac97f5,0xf002de02,0xd8000000,0x1701035a,0x5ab801a2,
+0xa257f406,0x0356b000,0x00ae0600,0x000756b0,0xb000af06,0x06000b56,
+0x56b000b0,0xb106000f,0x1356b000,0x00b20600,0xf41256e0,0xb000b346,
+0x0600035a,0x5e3801ac,0xad06008b,0xcf1ab000,0x01a41700,0x000360bc,
+0xb000a217,0x10009341,0x5eb80065,0xa417d092,0x065ee000,0x006350f4,
+0x00935ef0,0xf000a317,0x7700935e,0x5ee000a4,0xa237008b,0x925eb800,
+0x00a477f4,0xf49241e0,0xe0006550,0x95f40256,0x56b00080,0xa4170003,
+0x8bde6e00,0x00e7ab00,0xc0925eb8,0xd800a2d7,0x37008b5e,0x1ae000a2,
+0xae46f4ba,0xbb1ab000,0x00a41700,0xc0925eb8,0xd800a2f7,0x37008b5e,
+0x1ae000a2,0xaf46f4be,0xbf1ad800,0x00a23700,0xf4c21ae0,0xd800b046,
+0x3700c31a,0x1ae000a2,0xb146f4c6,0xc71ad800,0x00a23700,0xf4ca1ae0,
+0xd800b246,0x3700cb1a,0x1ae000a2,0xb346f4ce,0xcf1ab000,0x00a21700,
+0xc08a5eb8,0x9000a217,0x37008b5e,0x5ebc01a2,0xada6d588,0x02de0200,
+0x010000f0,0x3c066080,0x8701e491,0xd13c0660,0x60a801e6,0xe6d13c02,
+0x02608b01,0x00e6d13c,0x008f5eb0,0xb0006310,0x11000356,0x56b000e7,
+0xe7110007,0x0b56b000,0x00e71100,0x000f56b0,0xa901e711,0x913c4260,
+0x60a801e4,0xe6d13c02,0x06608b01,0x00e6d13c,0x008b5eb0,0xbc016310,
+0x57000360,0x560402a1,0x150c0003,0x0360bc01,0x00a11701,0xf48e41e0,
+0xb0006330,0x11000356,0x56b000e7,0xe7110007,0x0b56b000,0x00e71100,
+0x008b5eb0,0xbc016310,0xb7000360,0xd60402a1,0x1f0c0003,0x0360bc01,
+0x02a11701,0x00535e06,0xbc011f0c,0x97010360,0x41e000a1,0x6330f48e,
+0x0356b000,0x00e71100,0x000756b0,0xb000e711,0x11000b56,0x60bc01e7,
+0xa1170003,0x53de0602,0x002a0c00,0x008b5eb0,0x06026310,0x0c00535e,
+0x56a00029,0xa1f7013f,0x02debf03,0x002a0cf0,0x013356a0,0xb000a1f7,
+0x1100875e,0x60bc01e7,0xe7110003,0x02de0200,0x010000f0,0x020760bc,
+0x6800e311,0x4c009bde,0x47e80039,0xe1110187,0x0360bc01,0x01e21100,
+0x000360bc,0xbc01e211,0x11000360,0x60bc01e2,0xe2110003,0x0360bc01,
+0x01e21100,0x000360bc,0xbc01e211,0x11000360,0x60bc01e2,0xe2110003,
+0x4261b000,0x00e051f4,0x000358b0,0xb000e211,0x11000758,0x58b000e2,
+0xe211000b,0x0f58b000,0x00e21100,0x001358b0,0xb000e211,0x11001758,
+0x58b000e2,0xe211001b,0x1f58b000,0x00e21100,0x009b5eb0,0x6800a417,
+0xac009bde,0x60bc0144,0xa4770003,0x93de9201,0x00a31702,0xf002de02,
+0x81020000,0x0c0007c1,0x60bc014d,0xa1770103,0x035ea000,0x00a2f71f,
+0xf0025e02,0xbc015d00,0xb7010360,0x5e0200a1,0x5800f002,0x6740a000,
+0x0081f71f,0xf002de02,0x81020000,0x0c0007c1,0x60bc0157,0xa1770103,
+0x06e08101,0x00ab77f5,0x1f035ea0,0x0200a2f7,0x00f0025e,0x60bc015d,
+0xa1b70103,0x075eb000,0x00a21700,0xf0025e02,0x81015d00,0x77f502e0,
+0xde0200ab,0x0000f002,0xa7006800,0x0396ce00,0xf002debf,0x02006e0c,
+0x0cf0025e,0x5e02005d,0x6f0cf002,0x02de0200,0x000000f0,0x00a70068,
+0x020069ce,0x00f002de,0x60810100,0x49300906,0xa7006800,0x00628c00,
+0xf0025e02,0x02007f0c,0x00f002de,0x5e020000,0x7f0cf002,0x02608101,
+0x00493009,0xf002de02,0x88010000,0x30090ee0,0x41b00049,0x00180027,
+0x2b00b000,0x00021000,0xf002de02,0xbc010000,0x10000360,0xe0820102,
+0x78100f02,0x0360bc01,0x00491000,0x002741b0,0x02000018,0x00f002de,
+0x00680000,0x70cc00a7,0x53de8002,0x01760c00,0x071360bc,0x0200a177,
+0x00f0025e,0x60900158,0xa2370302,0x025e0200,0x005d00f0,0xf002de02,
+0xbc010000,0x97071360,0x5e0200a1,0x5800f002,0x1e609001,0x00a23703,
+0xf0025e02,0xbc015d00,0x77071360,0x5e0200a1,0x5800f002,0x1e609001,
+0x00a23703,0xf0025e02,0x02005d00,0x00f002de,0xde000100,0xa6170053,
+0xa7806800,0x0184cc00,0x099ade81,0xb0004930,0x18002741,0xde020000,
+0x0000f002,0x0360bc01,0x03a13700,0xf002debf,0x0200860c,0x00f0025e,
+0x60870158,0xa2370306,0x9bde6800,0x018a0c00,0x03026087,0x0200a237,
+0x00f0025e,0xde02005d,0x0000f002,0x1f410202,0x029f0c00,0x00535e82,
+0x8201910c,0x97f20660,0x44b00094,0x00180067,0x6b44b000,0x00970600,
+0x006744b0,0xe8000018,0xf7d26844,0x006800a4,0x948c00a7,0x93de6d00,
+0x00994c00,0x036744e0,0x9003a317,0x0cf0025e,0xc585029c,0x9c0c0023,
+0x8ede6800,0x01962c23,0x020360bc,0xbc014710,0x90000360,0x60820143,
+0x9497f202,0x02608201,0x00adb7f5,0x00a70068,0x68009f8c,0xac00a700,
+0xde02009f,0x0000f002,0x1fc10102,0x02b20c00,0x00af5e85,0x8501a50c,
+0x77f50660,0x44b000ab,0x9a060067,0x6b44b000,0x009b0600,0xd36444e9,
+0xe800a157,0x77d368c4,0x5ed000a2,0xa1770087,0x8adee101,0x00a237f4,
+0x26865ee9,0xe800a197,0xb7268ade,0x5e6900a2,0xb20c008b,0x0361bc01,
+0x00331100,0xf4da44e1,0xe1003631,0x51f4de44,0x60850137,0xab77f502,
+0x0360bc01,0x01471001,0x000360bc,0x02004350,0x00f002de,0x45b00000,
+0x8117001f,0xb705b000,0x01a61700,0x040760bc,0xbc016410,0x10191360,
+0x60bc0165,0xa1170003,0xafde0502,0x00cb0c00,0x000f58b0,0x68008017,
+0x2c2c845e,0x5e0002d8,0xcb0c009b,0x03da8002,0x01c10c00,0x001f5818,
+0xe0008217,0x37000b5e,0x5e980182,0x07f6c00a,0x02debf03,0x01c40cf0,
+0x001fd819,0xe0008217,0x3700035e,0xde990182,0x07f6c00a,0x03def001,
+0x00803700,0xc0025ea0,0xb0008057,0x1600035e,0x44a00003,0x8217f0b6,
+0x0b5eb000,0x00051600,0xc00a5ee0,0xbf030696,0x0cf002de,0x58b000d8,
+0x82170013,0x065ee800,0x02a557f0,0x00afde00,0xe800d20c,0x97d4085e,
+0x5eb000a3,0xa5170007,0x8fde6a00,0x00d20c00,0xf4965ee8,0x6a00a577,
+0x0c0097de,0x58e800d6,0x05b6f416,0x17d86900,0x01d60c00,0x000360bc,
+0xb0000516,0x17001758,0x58e000a5,0x06b6f412,0x9341e000,0x00641002,
+0x069741e0,0xe0006550,0x3700875e,0x5e9000a1,0xa637009b,0x87de6800,
+0x01b88c00,0xf502e080,0xbc01ab77,0x11000360,0xde020047,0x0000f002,
+0x0360bc01,0x016c0100,0x000360bc,0xbc016d01,0x100a0760,0x60bc0164,
+0xa4d70b17,0x0360bc01,0x00a17700,0x008f42b0,0xa0008017,0xf701035e,
+0x5eb00080,0x6e010003,0xff63bc01,0x00a2f71f,0x0003de68,0xbc01eb0c,
+0x17000360,0x608800a2,0x8137f406,0xba052000,0x00f02cf0,0xc08ade68,
+0xe000f0cc,0x2100b305,0x05b0006c,0x6d21f0b6,0x035e6800,0x00f40c00,
+0xf0065e20,0x6e00fb0c,0xccc08ade,0xdebf03fb,0xf50cf002,0x8ade6d00,
+0x00fbccc0,0x00875eb0,0xb000a317,0x01009341,0x5eb00066,0x67010093,
+0x1b58b000,0x01a21700,0x000360bc,0xbc016c01,0x01000360,0x41e8006d,
+0x64100293,0x935ee800,0x00a45706,0x00875ee8,0x6900a137,0x0c0087de,
+0x5eb000eb,0x6501008f,0x8b5eb000,0x00640100,0xf002de02,0xb0000000,
+0x10009b05,0x58b00064,0x4511001b,0x9305b000,0x00600100,0x009b05b0,
+0xb0006201,0x01009f05,0x05b00063,0x61010097,0x0f58b000,0x00851700,
+0x000758b0,0xb0008317,0x17000b58,0x58980184,0x8c97f11e,0x1ed89901,
+0x008db7f1,0xf002de02,0x87010000,0x77f50260,0x05b000ab,0x80170097,
+0x005e6800,0x01322d2c,0x000360bc,0xbc011211,0x11000360,0x05b00015,
+0x6410009b,0x23450002,0x001c0d00,0x001f45b0,0xe8008117,0x37f09205,
+0xde6a0080,0x1a0d0003,0x035eb000,0x03451100,0xf002debf,0xbc011d0d,
+0x31000360,0xdebf0345,0x1d0df002,0x9305b000,0x00451100,0x008305b0,
+0xb0006901,0x01008b05,0x05b0006a,0x6b01008f,0x8705b000,0x00680100,
+0x00ab05b0,0x84026510,0x0d001f5a,0x5eb00026,0x83160017,0x325e9801,
+0x0187f6d0,0xd036de99,0x840187f6,0xf6d00260,0x05b00087,0x60010093,
+0x9b05b000,0x00620100,0x009f05b0,0xb0006301,0x01009705,0x05b00061,
+0x6410008b,0x0f58b000,0x00851700,0x000758b0,0xb0008317,0x17000b58,
+0x58980184,0x8c97f11e,0x1ed89901,0x038db7f1,0xf002debf,0x8701330d,
+0x77f50660,0xde0200ab,0x0000f002,0x8b05b000,0x00641000,0x2a93416e,
+0xa000400d,0xb7f0b644,0x5eb000a1,0x05160087,0x1258e000,0x020636f4,
+0x00f30000,0x6d003d0d,0x0d289341,0xde00023d,0x3d0d00af,0x0b60bc01,
+0x00425102,0x00875eb0,0x01026f01,0x0d00af5e,0x5eb00040,0x03160017,
+0x02608101,0x00ab77f5,0xf002de02,0x0c010000,0x17004381,0x60bc01a1,
+0x8a100003,0x875e6800,0x014e4d00,0x000360bc,0x68008a50,0x0d00075e,
+0x5e680056,0x4e0d0087,0x0360bc01,0x008ab000,0x00075e68,0x82024e2d,
+0x0d0003de,0x60bc014e,0x8a900003,0x03de8302,0x004e0d00,0xf40a60e0,
+0x68008ad0,0x0d00075e,0x42900156,0x8a30a12a,0x075e6800,0x01562d00,
+0xa02a4290,0x09018a10,0x170003de,0x5e8f01a2,0x8a50118a,0x8b5e6800,
+0x01560d00,0x110ee091,0x02008a50,0x00f002de,0xde090100,0xa4170003,
+0x065ae000,0x00a597f4,0xf4965e90,0x0302a597,0x0d0003de,0xde82025d,
+0x5d0d0003,0x94de8000,0x00a5f70a,0x00875e88,0xe000a177,0xd702875e,
+0xde8000a1,0xa137f496,0xb741e100,0x00a5f7ff,0x0187dee0,0x9000a1f7,
+0x9700875e,0x5e8800a1,0xa1570087,0x43010501,0x00a21700,0xf4865e88,
+0x0200a157,0x00f002de,0x19000200,0x0a0000df,0x53de8202,0x016d0d00,
+0x04026088,0xe0002490,0x06f3821a,0x1ae800a0,0x9f06f37e,0x02debf03,
+0x01e107f0,0x041660b8,0xbc012490,0xd0010360,0x5e050325,0x7f0df002,
+0x37c08702,0x03140900,0xf002de86,0xbc011509,0xe0000360,0x5e02003e,
+0xa50ef002,0x02de5c03,0x006f0df0,0x019b40d8,0xe000a117,0x3702875e,
+0x5ea80098,0x98770063,0x53de0201,0x01a11700,0xf202e082,0x88019497,
+0xe6ce84de,0x9a6e0077,0x7f0df37e,0x635ee800,0x0125d001,0x040660b8,
+0xbf032490,0x00f002de,0x60810102,0x77e6ce04,0x0a60b801,0x03249004,
+0xf002debf,0x28020200,0x0d00875e,0x41b00095,0xa4170093,0x9341e000,
+0x01647000,0x00875e0a,0xe800a217,0x50f49241,0x5e180163,0xa1170087,
+0x4260e800,0x00a237f4,0xf4025688,0x68000036,0x8df48e41,0x41e80091,
+0x6330008f,0x9341e800,0x00643000,0x028b5e68,0x9000890d,0x57f40256,
+0x58b000a3,0x0176f406,0x02debf03,0x00890df0,0xf4924168,0xe800958d,
+0x30009341,0x60bc0164,0x00160003,0x02debf03,0x00910df0,0x00875eb0,
+0x0200a117,0x00f002de,0x5e280200,0xab0d0087,0x875e0a01,0x00a21700,
+0xf49241e0,0x18016350,0x1700875e,0x60e800a1,0xa237f442,0x0360bc01,
+0x00a31700,0x009341e8,0xe0006430,0x97009341,0x58b000a4,0x0076f402,
+0x9341e000,0x00643000,0xf4025690,0x68000036,0x8df48e41,0x41e000a7,
+0x6330008f,0x8b5e6800,0x009f0d02,0xf4025688,0xbf03a357,0x0df002de,
+0x4168009f,0xab8df492,0x0360bc01,0x00011600,0x009341e0,0xbf036430,
+0x0df002de,0x5eb000a7,0xa1170087,0x02de0200,0x000000f0,0x00bb50b0,
+0xb0006510,0x17000b5a,0x01e000a1,0x7d2000f7,0xd201e000,0x007420f4,
+0x00bf50b0,0xb0006410,0x17001358,0x60bc0182,0x04160003,0x1b60bc01,
+0x0265d005,0x00b7d002,0xbc01b70d,0xf0051b60,0x50e00065,0x649000bb,
+0x0360bc01,0x01b41700,0x000360bc,0xbc018017,0x37000360,0x60bc0181,
+0xa5170003,0x0360bc01,0x00a61700,0x00335290,0xe000a497,0xb7018741,
+0x608701b5,0xa0100304,0x8342b000,0x00001800,0xf0d25e68,0xb000f64d,
+0x1000035e,0x00b000b5,0xb4700863,0xd3428302,0x01c40d00,0x090360bc,
+0xb000b510,0xf0006300,0x60bc01b4,0xb6101147,0x0360bc01,0x00b5d000,
+0x006300b0,0xb000b4b0,0x1800d342,0xde170300,0xcb0df002,0x02de9703,
+0x00cc0df0,0xf002d820,0x9000e32d,0x5700975e,0x50e000a1,0x6330f4ba,
+0x975e8901,0x00a21700,0xf41a5690,0x8800a357,0x57f43e60,0x5ea000a1,
+0xa3f7018f,0x8f5ee000,0x00a33700,0xf41a56a8,0xe0008635,0x3700975e,
+0x500202a5,0xe70d00b7,0x17239000,0x00a19700,0xf4865ee8,0x6900a197,
+0x0d00875e,0xde6900e7,0xe70d0487,0x875e0a01,0x00a21700,0xf4d65ee0,
+0xda016350,0x37f40260,0x608800a1,0xa137f406,0x02562000,0x00e72df4,
+0xf00258b0,0xe0000036,0x3600035a,0xde680080,0xf00d009b,0x1b23b000,
+0x012b1400,0x030ce08e,0xbf03a010,0x0df002de,0xde6d00f1,0xe4cdf08e,
+0x9b5e9000,0x01a25700,0x009b5e89,0xe000a117,0x50f4ba50,0x60880063,
+0xa237f43e,0x8e5e8800,0x00a337f4,0xf41a56a8,0xb0008655,0x75f41a56,
+0x5ee00086,0xa637009b,0x035ee000,0x00803700,0x00d35ee0,0xd000b437,
+0x3700075e,0x5e980281,0xc10d00d3,0x9341e000,0x03643000,0xf002debf,
+0x8001c10d,0x94850260,0x5ee8002c,0x8017f0d2,0x035e6800,0x030a0000,
+0xf002debf,0xd0008004,0x97c00660,0x41e00080,0xb5970097,0x13580a01,
+0x00a11700,0xf4d65ee0,0xb000b537,0x10000f58,0x56160163,0x81170003,
+0x13d86800,0x010d0e00,0x00630014,0xbc01a117,0x90090360,0x5e900062,
+0xa2370087,0x8a41e000,0x006250f4,0x01035488,0x00028016,0x0e00875e,
+0x54a00008,0x8016e003,0x035ae800,0x01801630,0x000360bc,0xbc018116,
+0x16000360,0x60bc0182,0x83160003,0x02debf03,0x00120ef0,0xc08e41e0,
+0x6e006390,0x2ec08ec1,0x41e80012,0x6330c08e,0x0358e800,0x00a13700,
+0xf48e41e0,0xbc016330,0x17000360,0x586800a5,0x2fee0313,0x8e416800,
+0x002f4ec0,0x040bda6d,0x16012f0e,0x17000356,0xde6800a1,0x2f2ef086,
+0x03565801,0x00a11700,0x0c875ee0,0xb000a257,0x1000d75e,0xde200062,
+0x260ea002,0x865ee000,0x00a337d0,0xd08e5ee0,0x6d00a377,0x4ef4025a,
+0x63bc012f,0xa4f71fff,0x8e5e6e00,0x002f8ef4,0xf40260e8,0xb0008336,
+0x16008f5e,0x5aa00081,0x8376000f,0x0360bc01,0x00a53700,0x000b5ae0,
+0xe8008236,0x56f4025a,0x5ed00080,0x80370003,0x1358e000,0x00043600,
+0x008f41e0,0x98026330,0x0e001358,0x5ee0002c,0xb53700d7,0x8ec16e00,
+0x00122ec0,0x000358b0,0xbf036310,0x0ef002de,0x5e680012,0x300e0097,
+0x02de0200,0x000000f0,0x000758b0,0xe000a117,0x16f00e58,0xd86e0003,
+0x372ef40e,0x865ee800,0x00a117c0,0xf40e58e8,0xe8000336,0x36000f58,
+0x5e180103,0xa1170003,0x03de6d00,0x003f0e02,0xf44260e8,0x9000a237,
+0x36f4125a,0x5a880084,0xa257f416,0x165a9000,0x008536f4,0xf4125ab0,
+0xbf038456,0x0ef002de,0x5a900041,0x8436f416,0x0360bc01,0x00851600,
+0xf002de02,0x58010000,0x10000360,0x60bc012a,0x04900203,0x0a60b801,
+0x01249004,0x0d02e089,0x02006c90,0x00f002de,0x47e80000,0xa1170187,
+0x875ed800,0x01eb1101,0x111f63bc,0xa000a1f7,0x31f40e5a,0x5ab000eb,
+0xeb110017,0x1b5ab000,0x00eb1100,0x001f5ab0,0xb000eb11,0x1100235a,
+0x5ab000eb,0xeb110027,0x2b5ab000,0x00eb1100,0x002f5ab0,0xb000eb11,
+0x1100335a,0x5ab000eb,0xeb110037,0x3b5aa000,0x00ebf101,0x009741b0,
+0x06026410,0x0e00535e,0x58b0005b,0xeb11003f,0x4358b000,0x00eb1100,
+0x004758b0,0xe000eb11,0x70009341,0xde060264,0x5e0e0053,0x3f58a000,
+0x00ebf101,0x009341e0,0x07026430,0x0e000fda,0x58b00061,0xeb11003f,
+0x4358b000,0x02eb1100,0x00ab4710,0xbc01640e,0x11000360,0xdebf03eb,
+0x610ef002,0xabc71101,0x01a11700,0x060360bc,0xe800ea11,0x5100875e,
+0xe08601eb,0xe8113d06,0x02de0200,0x020000f0,0x0053de00,0xbc01880e,
+0xb7091360,0x5e0200a1,0x5800f002,0x0260a501,0x00a23703,0xf0025e02,
+0xbc015d00,0x97091360,0x5e0200a1,0x5800f002,0x7e60a401,0x00a23703,
+0xf0025e02,0xbc015d00,0xf7161360,0x5e0200a1,0x5800f002,0x0260b401,
+0x00a23703,0xf0025e02,0xbc015d00,0x37161360,0x5e0200a1,0x5800f002,
+0x02e08601,0x00a23703,0xf0025e02,0xbc015d00,0x17161360,0x5e0200a1,
+0x5800f002,0x06e08101,0x01a23703,0x0306e085,0x0200a237,0x00f0025e,
+0x60bc015d,0xa1571f13,0x025e0200,0x015800f0,0x0302e081,0x0200a237,
+0x00f0025e,0x60bc015d,0xa1371f13,0x025e0200,0x015800f0,0x0306e081,
+0x0200a237,0x00f0025e,0xde02005d,0x0000f002,0x1360bc01,0x00a19709,
+0xf0025e02,0xa4015800,0x37030260,0x5e0200a2,0x5d00f002,0x1360bc01,
+0x00a11716,0xf0025e02,0x81015800,0x370302e0,0xe08501a2,0xa2370302,
+0x025e0200,0x015d00f0,0x1f1360bc,0x0200a137,0x00f0025e,0xe0810158,
+0xa2370302,0x025e0200,0x005d00f0,0xf002de02,0x00020000,0x0e0053de,
+0x60bc01a0,0xa1b70913,0x025e0200,0x015800f0,0x03026087,0x0200a237,
+0x00f0025e,0x60bc015d,0xa1970913,0x025e0200,0x015800f0,0x03066086,
+0x0200a237,0x00f0025e,0xde02005d,0x0000f002,0x1360bc01,0x00a19709,
+0xf0025e02,0x86015800,0x37030260,0x5e0200a2,0x5d00f002,0x02de0200,
+0x020000f0,0x00234584,0xbc01030f,0x17161760,0x5e0200a1,0x5800f002,
+0x67401e01,0x00a21700,0x008b5e68,0x6800b9ae,0x6e018bde,0x409c02d1,
+0xb60e0067,0x8726e000,0x00a12900,0x006744b0,0xe0000018,0x69006744,
+0x5e830391,0xb30ef002,0x46a66800,0x01af2e23,0x000360bc,0x83023b20,
+0x0e004fa6,0xe08201ed,0x93693205,0x0360bc01,0x033b4000,0xf002debf,
+0x1c01ed0e,0x17006740,0x5e6800a2,0xc5ce008b,0x02debf03,0x01d10ef0,
+0x32016081,0x80029369,0x0e004fa6,0xe08001bf,0x93693205,0x6744b000,
+0x00001800,0x006744b0,0xbf039109,0x0ef002de,0x266800d2,0xd20e0023,
+0x6544e800,0x01a13732,0x000360bc,0x6e003ba0,0x0e31855e,0x60bc01ed,
+0x3b000003,0x02debf03,0x01d20ef0,0x3201e080,0x81029369,0x0e004f26,
+0x608101cb,0x93693205,0x6744b000,0x00001800,0x006744b0,0xbf039209,
+0x0ef002de,0x266800d2,0xd10e0027,0x6544e800,0x01a15732,0x000360bc,
+0x6e003bc0,0x2e31855e,0x60bc01ed,0x3b000003,0x02debf03,0x01d20ef0,
+0x3201e088,0x81029369,0x0e004fa6,0x400602ec,0xd90e0037,0x37c00502,
+0x01d90e00,0x32056080,0xb0009369,0x18006744,0x44b00000,0x90090067,
+0x02debf03,0x02ec0ef0,0x004f2600,0xe800ec0e,0x17326544,0x266800a1,
+0xec0e001f,0x855e6e00,0x03deee30,0xf002debf,0x8001ec0e,0x69320160,
+0x42830293,0xea0e001f,0x23c58502,0x01e60e00,0x020360bc,0x83023b20,
+0x0e004fa6,0xe08201ed,0x93693205,0x0360bc01,0x033b4002,0xf002debf,
+0x8201ed0e,0x69320560,0x60bc0193,0xa1b70817,0x2761bc01,0x00a2970c,
+0xf0025e02,0xe0005d00,0x29003326,0x6080018c,0x93693201,0x02debf03,
+0x02040ff0,0x004f2602,0xbc01f10e,0xb7081760,0x61bc01a1,0xa2170027,
+0x025e0200,0x015d00f0,0x0906e081,0xb0004930,0x1700875e,0x5eb000a1,
+0xa1170087,0x875eb000,0x01a11700,0x0902e081,0xe0004930,0x29002b26,
+0x44b0008a,0x8e090067,0x4fa68202,0x00030f00,0x008b26e0,0xb000a229,
+0x09002b26,0x44b0008b,0x8d090067,0xef00b000,0x00510000,0x00fb00b0,
+0xc0013f00,0x69320160,0x5e020093,0x3b09f002,0x025e0100,0x010000f0,
+0x0906e084,0xbf034810,0x08f002de,0x60c0015e,0x93693201,0x02de0200,
+0x000000f0,0x00000000,0x00000000,0x0000692a,0x0193477e,0x00000000
+};
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/wlanhwinit.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,130 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Defines the class implementing MWlanHwInitInterface interface
+*
+*/
+
+
+#ifndef WLANHWINIT_H
+#define WLANHWINIT_H
+
+#include "wlanhwinitinterface.h"
+
+class CWlanHwInitMain;
+
+// CLASS DECLARATION
+/**
+* This class implements the MWlanHwInitInterface interface.
+*
+* @since Series 60 3.1
+*/
+NONSHARABLE_CLASS( CWlanHwInit ) : public CBase, public MWlanHwInitInterface
+    {
+    public:  // Constructors and destructor
+        
+        /**
+         * Two-phased constructor.
+         */
+        IMPORT_C static CWlanHwInit* NewL();
+        
+        /**
+         * Destructor.
+         */
+        IMPORT_C virtual ~CWlanHwInit();
+        
+        // Functions from base classes
+
+        /**
+         * From MWlanHwInitInterface Get pointer to hardware specific initialization data.
+         * @since Series 60 3.1
+         * @param aInitData Pointer to initialization data, NULL if none.
+         * @param aInitLength Length of initialization data.
+         * @param aFwData Pointer to firmware data, NULL if none.
+         * @param aFwLength Length of firmware data.
+         */
+        IMPORT_C void GetHwInitData(
+            const TUint8** aInitData,
+            TUint& aInitLength,
+            const TUint8** aFwData,
+            TUint& aFwLength );
+
+        /**
+         * From MWlanHwInitInterface Get device MAC address.
+         * @since Series 60 3.1
+         * @param aMacAddress MAC address of the device.
+         * @return A Symbian error code.
+         */
+        IMPORT_C TInt GetMacAddress(
+            TMacAddr& aMacAddress );
+
+        /**
+         * Methods for production testing.
+         */
+
+        /**
+         * From MWlanHwInitInterface Get pointer to hardware specific initialization data
+         * for production testing.
+         * @since Series 60 3.1
+         * @param aInitData Pointer to initialization data, NULL if none.
+         * @param aInitLength Length of initialization data.
+         * @param aFwData Pointer to firmware data, NULL if none.
+         * @param aFwLength Length of firmware data.
+         */
+        IMPORT_C void GetHwTestInitData(
+            const TUint8** aInitData,
+            TUint& aInitLength,
+            const TUint8** aFwData,
+            TUint& aFwLength );
+
+        /**
+         * From MWlanHwInitInterface Get hardware specific production testing data.
+         * @since Series 60 3.1
+         * @param aId Id of the parameter to read.
+         * @param aData Buffer for read data.
+         * @return A Symbian error code.
+         */
+        IMPORT_C TInt GetHwTestData(
+            TUint aId,
+            TDes8& aData );
+
+        /**
+         * From MWlanHwInitInterface Set hardware specific production testing data.
+         * @since Series 60 3.1
+         * @param aId Id of the parameter to store.
+         * @param aData Data to be stored.
+         * @return A Symbian error code.
+         */
+        IMPORT_C TInt SetHwTestData(
+            TUint aId,
+            TDesC8& aData );
+
+    private:
+
+        /**
+         * C++ default constructor.
+         */
+        CWlanHwInit();
+
+        /**
+         * By default Symbian 2nd phase constructor is private.
+         */
+        void ConstructL();
+
+    private:    // Data
+
+        /** The main implemenation of HW specific functionality. */
+        CWlanHwInitMain* iMain;
+    };
+
+#endif // WLANHWINIT_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/wlanhwinitinterface.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,103 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Defines the abstract interface for HW specific initialization
+*
+*/
+
+
+#ifndef WLANHWINITINTERFACE_H
+#define WLANHWINITINTERFACE_H
+
+#include <e32base.h>
+#include "wlanhwinittypes.h"
+
+/**
+ * This is the abstract base class used for HW specific initialization.
+ *
+ * @since Series 60 3.1
+ */
+class MWlanHwInitInterface
+    {
+    public:  // Constructors and destructor
+
+        // New functions
+
+        /**
+         * Get pointer to hardware specific initialization data.
+         * @since Series 60 3.1
+         * @param aInitData Pointer to initialization data, NULL if none.
+         * @param aInitLength Length of initialization data.
+         * @param aFwData Pointer to firmware data, NULL if none.
+         * @param aFwLength Length of firmware data.
+         */
+        virtual void GetHwInitData(
+            const TUint8** aInitData,
+            TUint& aInitLength,
+            const TUint8** aFwData,
+            TUint& aFwLength ) = 0;
+
+        /**
+         * Get device MAC address.
+         * @since Series 60 3.1
+         * @param aMacAddress MAC address of the device.
+         * @return A Symbian error code.
+         * @note If a special MAC address 00:00:00:00:00:00 is returned,
+         * the WLAN engine assumes the device to be a variant without
+         * WLAN support and will not start the up.
+         */
+        virtual TInt GetMacAddress(
+            TMacAddr& aMacAddress ) = 0;
+
+        /**
+         * Methods for production testing.
+         */
+
+        /**
+         * Get pointer to hardware specific initialization data for production testing.
+         * @since Series 60 3.1
+         * @param aInitData Pointer to initialization data, NULL if none.
+         * @param aInitLength Length of initialization data.
+         * @param aFwData Pointer to firmware data, NULL if none.
+         * @param aFwLength Length of firmware data.
+         */
+        virtual void GetHwTestInitData(
+            const TUint8** aInitData,
+            TUint& aInitLength,
+            const TUint8** aFwData,
+            TUint& aFwLength ) = 0;
+
+        /**
+         * Get hardware specific production testing data.
+         * @since Series 60 3.1
+         * @param aId Id of the parameter to read.
+         * @param aData Buffer for read data.
+         * @return A Symbian error code.
+         */
+        virtual TInt GetHwTestData(
+            TUint aId,
+            TDes8& aData ) = 0;
+
+        /**
+         * Set hardware specific production testing data.
+         * @since Series 60 3.1
+         * @param aId Id of the parameter to store.
+         * @param aData Data to be stored.
+         * @return A Symbian error code.
+         */
+        virtual TInt SetHwTestData(
+            TUint aId,
+            TDesC8& aData ) = 0;
+    };
+
+#endif // WLANHWINITINTERFACE_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/wlanhwinitmain.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,172 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Defines the class implementing HW specific initialization
+*
+*/
+
+
+#ifndef WLANHWINITMAIN_H
+#define WLANHWINITMAIN_H
+
+#include <e32base.h>
+#include "wlanhwinittypes.h"
+#include "wlanhwinitinterface.h"
+
+// FORWARD DECLARATIONS
+class CIsiMsg;
+class CWlanHwInitPermParser;
+
+// CLASS DECLARATION
+/**
+* This class implements the actual HW specific initialization functionality.
+*
+* @lib wlanhwinit.lib
+* @since Series 60 3.1
+*/
+NONSHARABLE_CLASS( CWlanHwInitMain ) : public CBase, public MWlanHwInitInterface
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CWlanHwInitMain* NewL();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CWlanHwInitMain();
+
+        // Functions from base classes
+
+        /**
+        * From MWlanHwInitInterface Get pointer to hardware specific initialization data.
+        * @since Series 60 3.1
+        * @param aInitData Pointer to initialization data, NULL if none.
+        * @param aInitLength Length of initialization data.
+        * @param aFwData Pointer to firmware data, NULL if none.
+        * @param aFwLength Length of firmware data.
+        */
+        void GetHwInitData(const TUint8** aInitData, TUint& aInitLength, const TUint8** aFwData, TUint& aFwLength);
+
+        /**
+        * From MWlanHwInitInterface Get device MAC address.
+        * @since Series 60 3.1
+        * @param aMacAddress MAC address of the device.
+        * @return A Symbian error code.
+        */
+        TInt GetMacAddress(TMacAddr& aMacAddress);
+
+        /**
+        * Methods for production testing.
+        */
+
+        /**
+        * From MWlanHwInitInterface Get pointer to hardware specific initialization data
+        * for production testing.
+        * @since Series 60 3.1
+        * @param aInitData Pointer to initialization data, NULL if none.
+        * @param aInitLength Length of initialization data.
+        * @param aFwData Pointer to firmware data, NULL if none.
+        * @param aFwLength Length of firmware data.
+        */
+        void GetHwTestInitData(const TUint8** aInitData, TUint& aInitLength, const TUint8** aFwData, TUint& aFwLength);
+
+        /**
+        * From MWlanHwInitInterface Get hardware specific production testing data.
+        * @since Series 60 3.1
+        * @param aId Id of the parameter to read.
+        * @param aData Buffer for read data.
+        * @return A Symbian error code.
+        */
+        TInt GetHwTestData(TUint aId, TDes8& aData);
+
+        /**
+        * From MWlanHwInitInterface Set hardware specific production testing data.
+        * @since Series 60 3.1
+        * @param aId Id of the parameter to store.
+        * @param aData Data to be stored.
+        * @return A Symbian error code.
+        */
+        TInt SetHwTestData(TUint aId, TDesC8& aData);
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CWlanHwInitMain();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+        /**
+        * Read the MAC address of the device from permanent storage.
+        * @param aMacAddress Mac address.        
+        */
+        void GetMacAddressL(TMacAddr& aMacAddress);
+
+        /**
+        * Read the tuning data from permanent storage.
+        * @param aTuningData Tuning data.
+        */
+        void GetTuningDataL(TDes8& aTuningData);
+
+        /**
+        * Set the tuning data to permanent storage.
+        * @param aTuningData Tuning data.
+        */
+        void SetTuningDataL(TDesC8& aTuningData);
+
+        /**
+        * Send an ISI message and wait for the reply.
+        * @param aRequest Request to be sent.
+        * @param aReply Received reply.
+        */        
+        void SendIsiMessageL(TDes8& aRequest, TDes8& aReply);
+        
+        /**
+        * Checks if a firmware file can be found from
+        * the memory card.
+        * return False if not found or error occured, True if 
+        * the firmware was successfully read.
+        * The firmware is loaded only once.
+        */
+        TBool IsMMCFirmwareFound();
+
+    private:    // Data
+
+        /** Permanent MAC address. */
+        TMacAddr iMacAddressPerm;
+
+        /** Temporary MAC address. */
+        TMacAddr iMacAddressTemp;
+
+        /** Parser for tuning data. */
+        CWlanHwInitPermParser* iPermParser;
+
+        /** Transaction Id used for ISI messages. */
+        TUint8 iTransactionId;
+        
+        /** Pointer for NVS data */
+        TUint8* ipNvsData;
+        
+        /** Buffer for possible firmware loaded from MC. */
+        HBufC8* iFirmwareMC;
+        
+    };
+
+#endif // WLANHWINITMAIN_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/wlanhwinitpermparser.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,110 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  The class for parsing the tuning data stored in PERM server
+*
+*/
+
+
+#ifndef WLANHWINITPERMPARSER_H
+#define WLANHWINITPERMPARSER_H
+
+#include <e32base.h>
+#include "wlanhwinitinterface.h"
+
+// Initialization Data Block constants
+const TUint32 KInitMagic = 0x19171513;
+const TUint32 KInitTypeEnd = 0;
+const TUint32 KInitTypeNvMem = 1;
+const TUint32 KInitTypeCode = 2;
+
+//These offsets are defined in Initialization Data Block document.
+const TUint32 KNvMemTypeOffset = 4;
+const TUint32 KNvMemLengthOffset = 8;
+const TUint32 KNvMemValueOffset = 12;
+
+const TUint32 KNvMemTypeOffset32 = 1;
+const TUint32 KNvMemLengthOffset32 = 2;
+const TUint32 KNvMemValueOffset32 = 3;
+
+typedef TUint nvsUpdateList;
+#define UPDATE_MAC_ADDR 		0x0080
+#define UPDATE_ALL 				  0xFFFF
+
+/**
+* The class for parsing the tuning data stored in PERM server.
+*
+* @lib wlanhwinit.lib
+* @since Series 60 3.1
+*/
+NONSHARABLE_CLASS( CWlanHwInitPermParser ) : public CBase
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Two-phased constructor.
+        */
+        static CWlanHwInitPermParser* NewL();
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CWlanHwInitPermParser();
+
+        // New functions
+
+        TPtr8 GetNvsBuffer();
+        void CompareNvsBuffer();
+        TPtr8 GetTuningBuffer();
+        void UpdateNvsData(nvsUpdateList updateList);
+        void GenerateDefaultTuningData();
+        void SetMacAddress(const TMacAddr& pMacAddress);
+        
+        /**
+        * Return the parsed tuning values from perm data.
+        * @since Series 60 3.1
+        * @param aData Parsed tuning values.
+        * @return Status code.
+        */
+        TInt GetTuningValues(
+            TDes8& aData );
+
+        /**
+        * Set tuning values to perm data.
+        * @since Series 60 3.1
+        * @param aData Tuning values to be stored.
+        * @return Status code.
+        */
+        TInt SetTuningValues(TDesC8& aData, nvsUpdateList updateList);
+
+    private:
+
+        /**
+        * C++ default constructor.
+        */
+        CWlanHwInitPermParser();
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+
+    private:    // Data
+
+        TMacAddr iMacAddress;
+        /** The current tuning data. */
+        HBufC8* iTuningData;
+        HBufC8* iNvsData;
+    };
+
+#endif // WLANHWINITPERMPARSER_H
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/inc/wlanhwinittypes.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,59 @@
+/*
+* Copyright (c) 2005-2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  
+*   Header file mainly for TMacAddr definition
+*
+*/
+
+
+#ifndef WLANHWINITTYPES_H
+#define WLANHWINITTYPES_H
+
+
+//  INCLUDES
+#ifdef __PACKED
+#undef __PACKED
+#endif
+
+#define __PACKED
+
+/**
+* Length of the MAC address
+*/
+const TUint8 KMacAddrLength = 6;
+
+/**
+* The one and only MAC address struct
+*/
+#pragma pack( 1 )
+struct TMacAddr
+    {
+    /** the MAC address */
+    TUint8 iMacAddress[KMacAddrLength];
+    } __PACKED; // 6 bytes
+
+/**
+* Broadcast MAC Address.
+*/
+const TMacAddr KBroadcastMacAddr = {{ 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF }};
+
+/**
+* MAC address that all zeros
+*/
+const TMacAddr KZeroMacAddr = {{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }};
+
+
+#endif      // WLANHWINITTYPES_H   
+            
+// End of File
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/src/wlanhwinit.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2002-2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  The implementation of CWlanHwInit class
+*
+*/
+
+
+#include "gendebug.h"
+#include "wlanhwinit.h"
+#include "wlanhwinitmain.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "wlanhwinitTraces.h"
+#endif
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+CWlanHwInit::CWlanHwInit() :
+    iMain( NULL )
+    {
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInit::CWlanHwInit()" ) ) );
+    OstTrace0( TRACE_NORMAL, CWLANHWINIT_CWLANHWINIT, "CWlanHwInit::CWlanHwInit()" ); 
+    }
+
+void CWlanHwInit::ConstructL()
+    {
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInit::ConstructL()" ) ) );
+    OstTrace0( TRACE_NORMAL, CWLANHWINIT_CONSTRUCTL, "CWlanHwInit::ConstructL()" );   
+    iMain = CWlanHwInitMain::NewL();
+    }
+
+EXPORT_C CWlanHwInit* CWlanHwInit::NewL()
+    {
+    OstTrace0( TRACE_BORDER, CWLANHWINIT_NEWL, "CWlanHwInit::NewL()" );
+    OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINIT_NEWL, "CWlanHwInit::NewL()" );  
+    CWlanHwInit* self = new( ELeave ) CWlanHwInit;
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+    
+EXPORT_C CWlanHwInit::~CWlanHwInit()
+    {
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInit::~CWlanHwInit()" ) ) );
+    OstTrace0( TRACE_BORDER, DUP1_CWLANHWINIT_CWLANHWINIT, "CWlanHwInit::~CWlanHwInit()" );
+    OstTrace0( TRACE_NORMAL, DUP2_CWLANHWINIT_CWLANHWINIT, "CWlanHwInit::~CWlanHwInit()" );  
+    delete iMain;
+    iMain = NULL;
+    }
+
+// -----------------------------------------------------------------------------
+// CWlanHwInit::GetHwInitData
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CWlanHwInit::GetHwInitData(
+    const TUint8** aInitData,
+    TUint& aInitLength,
+    const TUint8** aFwData,
+    TUint& aFwLength )
+    {
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInit::GetHwInitData()" ) ) );
+    OstTrace0( TRACE_BORDER, DUP1_CWLANHWINIT_GETHWINITDATA, "CWlanHwInit::GetHwInitData()" );
+    OstTrace0( TRACE_NORMAL, CWLANHWINIT_GETHWINITDATA, "CWlanHwInit::GetHwInitData()" );
+    
+    //BOB10d initialization data block is in one piece (NVS + FW)
+    //InitData is not needed
+    *aInitData = NULL;
+    aInitLength = 0;
+
+    iMain->GetHwInitData( aInitData, aInitLength, aFwData, aFwLength );
+    
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInit::GetHwInitData() aInitData: 0x%x, aInitLength: %d, aFwData: 0x%x, aFwLength: %d " ),aInitData,  aInitLength, aFwData, aFwLength  ) );
+    OstTrace1( TRACE_NORMAL, DUP2_CWLANHWINIT_GETHWINITDATA, "CWlanHwInit::GetHwInitData() aInitData: 0x%x", aInitData );
+    OstTrace1( TRACE_NORMAL, DUP3_CWLANHWINIT_GETHWINITDATA, "CWlanHwInit::GetHwInitData() aInitLength: %d", aInitLength );
+    OstTrace1( TRACE_NORMAL, DUP4_CWLANHWINIT_GETHWINITDATA, "CWlanHwInit::GetHwInitData() aFwData 0x%x", aFwData );
+    OstTrace1( TRACE_NORMAL, DUP5_CWLANHWINIT_GETHWINITDATA, "CWlanHwInit::GetHwInitData() aFwLength: %d", aFwLength ); 
+    }
+
+// -----------------------------------------------------------------------------
+// CWlanHwInit::GetMacAddress
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CWlanHwInit::GetMacAddress(
+    TMacAddr& aMacAddress )
+    {
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInit::GetMacAddress()" ) ) );
+    OstTrace0( TRACE_BORDER, CWLANHWINIT_GETMACADDRESS, "CWlanHwInit::GetMacAddress()" );
+    OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINIT_GETMACADDRESS, "CWlanHwInit::GetMacAddress()" ); 
+    return iMain->GetMacAddress( aMacAddress );
+    }
+
+// -----------------------------------------------------------------------------
+// CWlanHwInit::GetHwTestInitData
+// -----------------------------------------------------------------------------
+//
+EXPORT_C void CWlanHwInit::GetHwTestInitData(
+    const TUint8** aInitData,
+    TUint& aInitLength,
+    const TUint8** aFwData,
+    TUint& aFwLength )
+    {
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInit::GetHwTestInitData()" ) ) );
+    OstTrace0( TRACE_BORDER, CWLANHWINIT_GETHWTESTINITDATA, "CWlanHwInit::GetHwTestInitData()" );
+    OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINIT_GETHWTESTINITDATA, "CWlanHwInit::GetHwTestInitData()" );
+    
+    //BOB10d initialization data block is in one piece (NVS + FW)
+    //InitData is not needed
+    *aInitData = NULL;
+    aInitLength = 0;
+    
+    iMain->GetHwTestInitData( aInitData, aInitLength, aFwData, aFwLength );
+
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInit::GetHwTestInitData() aInitData: 0x%x, aInitLength: %d, aFwData: 0x%x, aFwLength: %d " ),aInitData,  aInitLength, aFwData, aFwLength  ) );
+    OstTrace1( TRACE_NORMAL, DUP2_CWLANHWINIT_GETHWTESTINITDATA, "CWlanHwInit::GetHwTestInitData() aInitData: 0x%x", aInitData );
+    OstTrace1( TRACE_NORMAL, DUP3_CWLANHWINIT_GETHWTESTINITDATA, "CWlanHwInit::GetHwTestInitData() aInitLength: %d", aInitLength );
+    OstTrace1( TRACE_NORMAL, DUP4_CWLANHWINIT_GETHWTESTINITDATA, "CWlanHwInit::GetHwTestInitData() aFwData: 0x%x", aFwData );
+    OstTrace1( TRACE_NORMAL, DUP5_CWLANHWINIT_GETHWTESTINITDATA, "CWlanHwInit::GetHwTestInitData() aFwLength: %d", aFwLength ); 
+    }
+
+// -----------------------------------------------------------------------------
+// CWlanHwInit::GetHwTestData
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CWlanHwInit::GetHwTestData(
+    TUint aId,
+    TDes8& aData )
+    {
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInit::GetHwTestData()" ) ) );
+    OstTrace0( TRACE_BORDER, DUP1_CWLANHWINIT_GETHWTESTDATA, "CWlanHwInit::GetHwTestData()" );   
+    OstTrace0( TRACE_NORMAL, CWLANHWINIT_GETHWTESTDATA, "CWlanHwInit::GetHwTestData()" );  
+    return iMain->GetHwTestData( aId, aData );
+    }
+
+// -----------------------------------------------------------------------------
+// CWlanHwInit::SetHwTestData
+// -----------------------------------------------------------------------------
+//
+EXPORT_C TInt CWlanHwInit::SetHwTestData(
+    TUint aId,
+    TDesC8& aData )
+    {
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInit::SetHwTestData()" ) ) );
+    OstTrace0( TRACE_BORDER, DUP1_CWLANHWINIT_SETHWTESTDATA, "CWlanHwInit::SetHwTestData()" ); 
+    OstTrace0( TRACE_NORMAL, CWLANHWINIT_SETHWTESTDATA, "CWlanHwInit::SetHwTestData()" );
+    return iMain->SetHwTestData( aId, aData );
+    }
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/src/wlanhwinitmain.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,749 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  The class implementing HW specific initialization
+*
+*/
+
+
+#include <iscapi.h>
+#include "gendebug.h"
+#include <IscNokiaDefinitions.h>
+#include <pn_const.h>
+#include <tisi.h>
+#include <infoisi.h>
+#include <permisi.h>
+#include <f32file.h>
+#include <stddef.h>
+
+#include "bcmnvmem.h"
+#include "lmac_firmware.h"
+#include "plt_firmware.h"
+
+#include "wlanhwinitmain.h"
+#include "wlanhwinitpermparser.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "wlanhwinitmainTraces.h"
+#endif
+
+/** The default MAC address. */
+const TMacAddr KWlanHwInitDefaultMacAddr = { { 0x00, 0xE0, 0xDE, 0xAD, 0xBE, 0xEF } };
+// ISI constants
+const TUint KWlanHwInitIsiBufferSize         = 1024;
+const TUint16 KWlanHwInitIsiPermGroupId      = 313;
+const TUint16 KWlanHwInitIsiPermIndex        = 0;
+const TUint16 KWlanHwInitIsiPermOffset       = 0;
+const TUint32 KWlanHwInitIsiPermDataSize     = (sizeof(WlanHalApi::SNvMem) - offsetof(WlanHalApi::SNvMem, PL_2G_hdb));
+
+/**
+* HW specific settings
+*/
+/* should be using TWlanTestPlatformSetting in wlanTestServer.h */
+enum TWlanHwInitTestSetting
+    {
+    EWlanHwInitTestSettingMacAddressPerm,
+    EWlanHwInitTestSettingMacAddressTemp,
+    EWlanHwInitTestSettingTuningData,
+    EWlanHwInitTestSettingTempTuningData
+    };
+
+const TUint KIsiRespMessagePadding = 128;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+CWlanHwInitMain::CWlanHwInitMain() :
+	iMacAddressPerm( KWlanHwInitDefaultMacAddr ),
+	iMacAddressTemp( KWlanHwInitDefaultMacAddr ),
+	iPermParser( NULL ),
+	iTransactionId( 0 ),
+	ipNvsData ( 0 ),
+	iFirmwareMC ( 0 )
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:CWlanHwInitMain()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_CWLANHWINITMAIN, "CWlanHwInitMain:CWlanHwInitMain()" );
+}
+
+void CWlanHwInitMain::ConstructL()
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:ConstructL()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_CONSTRUCTL, "CWlanHwInitMain:ConstructL()" );
+	
+	iPermParser = CWlanHwInitPermParser::NewL();
+/**
+* Initialize default NVS data.
+*/
+	TPtr8 nvsPtr( iPermParser->GetNvsBuffer() );
+	
+	//take only the nvmem part of the IDB. IDB = nvmem + firmware.
+  TUint32* dataPtr = (TUint32*)normal_firmware;
+  //first there is the magic number
+  if (*dataPtr != KInitMagic) 
+    {
+	  TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser: Invalid magic number at start of init block (0x%x)"), *dataPtr ) );
+	  OstTrace1( TRACE_IMPORTANT, DUP1_CWLANHWINITMAIN_CONSTRUCTL, "CWlanHwInitPermParser: Invalid magic number at start of init block (0x%x)", *dataPtr );  
+	  User::Leave( KErrGeneral );
+    }
+  //then there is type  
+  dataPtr++;
+  const TUint32 type = *dataPtr;
+
+  //and after type, there is the lenght of the data  
+  dataPtr++;
+  const TUint32 len = *dataPtr;
+
+  if (type != KInitTypeNvMem)
+    {
+    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser: Invalid type at start of init block (0x%x)"), type ) );  
+    OstTrace1( TRACE_IMPORTANT, DUP2_CWLANHWINITMAIN_CONSTRUCTL, "CWlanHwInitPermParser: Invalid type at start of init block (0x%x)", type ); 
+    User::Leave( KErrGeneral );
+    }
+
+    //after the length there is data
+    dataPtr++;	
+	nvsPtr.Append( reinterpret_cast<const TUint8*>(dataPtr), len );
+	
+/**
+* Update device data from the CMT permanent storage.
+*/
+	
+//	Discard the return value, we'll use the default value
+//	if this fails.
+	TRAPD( ret, GetMacAddressL( iMacAddressPerm ) );
+	iMacAddressTemp = iMacAddressPerm;    
+	iPermParser->SetMacAddress(iMacAddressTemp);
+
+	TPtr8 tuningPtr( iPermParser->GetTuningBuffer() );
+	TRAP( ret, GetTuningDataL( tuningPtr ) );
+	if(ret != KErrNone)
+	{
+		iPermParser->GenerateDefaultTuningData();
+	}
+	
+	iPermParser->UpdateNvsData(UPDATE_ALL);
+}
+
+CWlanHwInitMain* CWlanHwInitMain::NewL()
+{
+    OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_NEWL, "CWlanHwInitMain::NewL()" );
+	CWlanHwInitMain* self = new( ELeave ) CWlanHwInitMain;
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+	return self;
+}
+    
+CWlanHwInitMain::~CWlanHwInitMain()
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:~CWlanHwInitMain()" ) ) );
+	OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINITMAIN_CWLANHWINITMAIN, "CWlanHwInitMain:~CWlanHwInitMain()" );
+	
+	delete iPermParser;
+	iPermParser = NULL;
+	delete ipNvsData;
+	ipNvsData = NULL; 
+	delete iFirmwareMC;
+	iFirmwareMC = NULL; 
+}
+
+// -----------------------------------------------------------------------------
+// CWlanHwInitMain::GetMacAddressL
+// -----------------------------------------------------------------------------
+//
+void CWlanHwInitMain::GetMacAddressL(TMacAddr& aMacAddress)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:GetMacAddressL()" ) ) );   
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_GETMACADDRESSL, "CWlanHwInitMain:GetMacAddressL()" );
+	
+	TUint8 readReq[ISI_HEADER_SIZE + SIZE_INFO_WLAN_INFO_READ_REQ];
+	memset( readReq, 0, sizeof( readReq));
+	TPtr8 readPtr( readReq, ISI_HEADER_SIZE + SIZE_INFO_WLAN_INFO_READ_REQ);
+	
+	TIsiSend readMac( readPtr);
+	
+	readMac.Set8bit( ISI_HEADER_OFFSET_RESOURCEID, PN_PHONE_INFO);
+	readMac.Set8bit( ISI_HEADER_OFFSET_TRANSID, ++iTransactionId);
+	readMac.Set8bit( ISI_HEADER_OFFSET_MESSAGEID, INFO_WLAN_INFO_READ_REQ);
+	readMac.Set16bit( ISI_HEADER_SIZE + INFO_WLAN_INFO_READ_REQ_OFFSET_FILLERBYTE1, 0);
+	readMac.Complete();
+	
+	TUint8 readResp[ISI_HEADER_SIZE + SIZE_INFO_WLAN_INFO_READ_RESP];
+	memset( readResp, 0, sizeof( readResp));
+	TPtr8 respPtr( readResp, ISI_HEADER_SIZE + SIZE_INFO_WLAN_INFO_READ_RESP );
+	
+	SendIsiMessageL( readPtr, respPtr );
+	
+	TIsiReceiveC macResp( respPtr);
+	
+	if ( ( macResp.Get8bit( ISI_HEADER_OFFSET_RESOURCEID) != PN_PHONE_INFO ) || (macResp.Get8bit(ISI_HEADER_OFFSET_MESSAGEID) != INFO_WLAN_INFO_READ_RESP) )
+	{
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetMacAddressL() - invalid message received" ) ) );
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetMacAddressL() - resource = %02X, message id = %02X" ),
+		macResp.Get8bit( ISI_HEADER_OFFSET_RESOURCEID), macResp.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) ) );
+		OstTrace0( TRACE_IMPORTANT, DUP1_CWLANHWINITMAIN_GETMACADDRESSL, "CWlanHwInitMain:GetMacAddressL() - invalid message received" );
+		OstTrace1( TRACE_IMPORTANT, DUP2_CWLANHWINITMAIN_GETMACADDRESSL, "CWlanHwInitMain::GetMacAddressL - resource = 0x%x", macResp.Get8bit( ISI_HEADER_OFFSET_RESOURCEID) );
+		OstTrace1( TRACE_IMPORTANT, DUP3_CWLANHWINITMAIN_GETMACADDRESSL, "CWlanHwInitMain::GetMacAddressL - message id = 0x%x", macResp.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) );
+		
+		User::Leave( KErrGeneral );
+	}
+
+	if ( macResp.Get8bit( ISI_HEADER_SIZE + INFO_WLAN_INFO_READ_RESP_OFFSET_STATUS) != INFO_OK )
+	{
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetMacAddressL() - request failed, status = %02X" ),
+		macResp.Get8bit( ISI_HEADER_SIZE + INFO_WLAN_INFO_READ_RESP_OFFSET_STATUS) ) );
+		OstTrace1( TRACE_IMPORTANT, DUP4_CWLANHWINITMAIN_GETMACADDRESSL, "CWlanHwInitMain:GetMacAddressL() - request failed, status = 0x%x", macResp.Get8bit( ISI_HEADER_SIZE + INFO_WLAN_INFO_READ_RESP_OFFSET_STATUS) );	
+		User::Leave( KErrGeneral );
+	}    
+	
+	TMacAddr tempMac;
+	
+	memcpy( &tempMac.iMacAddress, macResp.GetData( ISI_HEADER_SIZE + INFO_WLAN_INFO_READ_RESP_OFFSET_ADDRESS, INFO_WLAN_MAC_ADDR_LEN).Ptr(), INFO_WLAN_MAC_ADDR_LEN);
+	for( TInt i=0; i<INFO_WLAN_MAC_ADDR_LEN; i++)
+		{
+		aMacAddress.iMacAddress[INFO_WLAN_MAC_ADDR_LEN - i - 1] = tempMac.iMacAddress[i];
+		}
+	
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::GetTuningDataL
+// ---------------------------------------------------------
+//
+void CWlanHwInitMain::GetTuningDataL(TDes8& aTuningData)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:GetTuningDataL()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL()" );
+	
+	TUint8 readBuf[ ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_REQ];
+	memset( &readBuf, 0, sizeof( readBuf));
+	TPtr8 readReq( readBuf, ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_REQ);
+	
+	TIsiSend sendReq( readReq);
+	
+	sendReq.Set8bit( ISI_HEADER_OFFSET_RESOURCEID, PN_PERMANENT_DATA);
+	sendReq.Set8bit( ISI_HEADER_OFFSET_TRANSID, ++iTransactionId);
+	sendReq.Set8bit( ISI_HEADER_OFFSET_MESSAGEID, PERM_PM_RECORD_READ_REQ);
+	
+	sendReq.Set16bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_REQ_OFFSET_GROUPID, KWlanHwInitIsiPermGroupId);
+	sendReq.Set16bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_REQ_OFFSET_INDEX, KWlanHwInitIsiPermIndex);
+	sendReq.Set32bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_REQ_OFFSET_OFFSET, KWlanHwInitIsiPermOffset);
+	sendReq.Set32bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_REQ_OFFSET_SIZE, KWlanHwInitIsiPermDataSize);
+	sendReq.Complete();
+	
+	HBufC8* respBuf = HBufC8::NewL( KWlanHwInitIsiBufferSize);
+	CleanupStack::PushL( respBuf );
+	respBuf->Des().FillZ();
+	
+	TPtr8 readResp( respBuf->Des());
+	
+	SendIsiMessageL( readReq, readResp);
+	
+	TIsiReceiveC recv( respBuf->Des());
+	
+	if ( ( recv.Get8bit( ISI_HEADER_OFFSET_RESOURCEID) != PN_PERMANENT_DATA ) || ( recv.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) != PERM_PM_RECORD_READ_RESP ) )
+	{
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetTuningDataL() - invalid message received" ) ) );
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetTuningDataL() - resource = %02X, message id = %02X" ),
+		recv.Get8bit( ISI_HEADER_OFFSET_RESOURCEID), recv.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) ) );
+		OstTrace0( TRACE_IMPORTANT, DUP1_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL() - invalid message received" );
+		OstTrace1( TRACE_IMPORTANT, DUP8_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL() - resource = %x", recv.Get8bit( ISI_HEADER_OFFSET_RESOURCEID) );
+		OstTrace1( TRACE_IMPORTANT, DUP9_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL() - message id = %x", recv.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) );
+	}
+
+	if ( recv.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_RESP_OFFSET_PMMSTATUS) != PMM_OK )
+	{
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetTuningDataL() - request failed, status = %02X" ),
+		recv.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_RESP_OFFSET_PMMSTATUS) ) );
+		OstTrace1( TRACE_IMPORTANT, DUP2_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL() - request failed, status = 0x%x", recv.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_RESP_OFFSET_PMMSTATUS) );	
+		User::Leave( KErrGeneral );
+	}       
+	
+	if( recv.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_RESP_OFFSET_NUMBEROFSUBBLOCKS) != 1)
+	{
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetTuningDataL() - request failed, subblocks %d" ),
+		recv.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_RESP_OFFSET_NUMBEROFSUBBLOCKS) ) );
+		OstTrace1( TRACE_IMPORTANT, DUP3_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL() - request failed, subblocks %d", recv.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_READ_RESP_OFFSET_NUMBEROFSUBBLOCKS) );		
+		User::Leave( KErrNotFound );
+	}
+	
+	if( recv.Get8bit( ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_RESP + PERM_SB_PM_DATA_OFFSET_SUBBLOCKID) != PERM_SB_PM_DATA)
+	{
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetTuningDataL() - request failed, subblock id %d" ),
+		recv.Get8bit( ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_RESP + PERM_SB_PM_DATA_OFFSET_SUBBLOCKID) ) );
+		OstTrace1( TRACE_IMPORTANT, DUP4_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitMain:GetTuningDataL() - request failed, subblock id %d", recv.Get8bit( ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_RESP + PERM_SB_PM_DATA_OFFSET_SUBBLOCKID) );		
+		User::Leave( KErrNotFound );
+	}
+	
+	TUint32 size = recv.Get32bit( ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_RESP + PERM_SB_PM_DATA_OFFSET_SIZE);
+	
+	if( size != KWlanHwInitIsiPermDataSize)
+	{
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitIsaWlanPermReadIsiMsg::GetTuningData() - payload too big" ) ) );
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitIsaWlanPermReadIsiMsg::GetTuningData() - actual size = %u" ), size ) );
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitIsaWlanPermReadIsiMsg::GetTuningData() - expected size = %u" ), KWlanHwInitIsiPermDataSize ) );
+		OstTrace0( TRACE_IMPORTANT, DUP5_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitIsaWlanPermReadIsiMsg::GetTuningData() - payload too big" );	
+		OstTrace1( TRACE_IMPORTANT, DUP6_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitIsaWlanPermReadIsiMsg::GetTuningData() - actual size = %u", size );
+		OstTrace1( TRACE_IMPORTANT, DUP7_CWLANHWINITMAIN_GETTUNINGDATAL, "CWlanHwInitIsaWlanPermReadIsiMsg::GetTuningData() - expected size = %u", KWlanHwInitIsiPermDataSize );		
+		User::Leave( KErrTooBig ); 
+	}
+	
+	aTuningData.Append( recv.GetData( ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_READ_RESP + PERM_SB_PM_DATA_OFFSET_DATA, size));
+	
+	CleanupStack::PopAndDestroy( respBuf);
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::SetTuningDataL
+// ---------------------------------------------------------
+//
+void CWlanHwInitMain::SetTuningDataL(TDesC8& aTuningData)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SetTuningDataL()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_SETTUNINGDATAL, "CWlanHwInitMain:SetTuningDataL()" );
+	
+	HBufC8* writeBuf = HBufC8::NewL( KWlanHwInitIsiBufferSize);
+	CleanupStack::PushL( writeBuf );
+	writeBuf->Des().FillZ();
+
+	TPtr8 writeReq( writeBuf->Des());
+
+	TIsiSend writeSend( writeReq);
+
+	writeSend.Set8bit( ISI_HEADER_OFFSET_RESOURCEID, PN_PERMANENT_DATA);
+	writeSend.Set8bit( ISI_HEADER_OFFSET_TRANSID, ++iTransactionId);
+	writeSend.Set8bit( ISI_HEADER_OFFSET_MESSAGEID, PERM_PM_RECORD_WRITE_REQ);
+
+	writeSend.Set16bit( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_REQ_OFFSET_GROUPID, KWlanHwInitIsiPermGroupId);
+	writeSend.Set16bit( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_REQ_OFFSET_INDEX, KWlanHwInitIsiPermIndex);
+	writeSend.Set32bit( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_REQ_OFFSET_SIZE, KWlanHwInitIsiPermDataSize);
+	writeSend.CopyData( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_REQ_OFFSET_DATA, aTuningData);
+	writeSend.Complete();
+
+	TUint8 respBuf[ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_WRITE_RESP + KIsiRespMessagePadding];
+	memset( &respBuf, 0, sizeof( respBuf));
+	TPtr8 writeResp( respBuf, ISI_HEADER_SIZE + SIZE_PERM_PM_RECORD_WRITE_RESP + KIsiRespMessagePadding);
+
+	SendIsiMessageL( writeReq, writeResp );
+
+	TIsiReceiveC resp( writeResp);
+
+	if ( ( resp.Get8bit( ISI_HEADER_OFFSET_RESOURCEID) != PN_PERMANENT_DATA ) || ( resp.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) != PERM_PM_RECORD_WRITE_RESP ) )
+	{
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:SetTuningDataL() - invalid message received" ) ) );
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:SetTuningDataL() - resource = %02X, message id = %02X" ), 
+					resp.Get8bit( ISI_HEADER_OFFSET_RESOURCEID),
+					resp.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) ) );
+		OstTrace0( TRACE_IMPORTANT, DUP1_CWLANHWINITMAIN_SETTUNINGDATAL, "CWlanHwInitMain:SetTuningDataL() - invalid message received" );
+		OstTrace1( TRACE_IMPORTANT, DUP2_CWLANHWINITMAIN_SETTUNINGDATAL, "CWlanHwInitMain:SetTuningDataL() - resource = %x", resp.Get8bit( ISI_HEADER_OFFSET_RESOURCEID) );
+		OstTrace1( TRACE_IMPORTANT, DUP3_CWLANHWINITMAIN_SETTUNINGDATAL, "CWlanHwInitMain:SetTuningDataL() - message id = 0x%x", resp.Get8bit( ISI_HEADER_OFFSET_MESSAGEID) );		
+	}
+
+	if ( resp.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_RESP_OFFSET_PMMSTATUS) != PMM_OK )
+	{
+		TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:SetTuningDataL() - request failed, status = %02X" ),
+					resp.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_RESP_OFFSET_PMMSTATUS) ) );
+		OstTrace1( TRACE_IMPORTANT, DUP4_CWLANHWINITMAIN_SETTUNINGDATAL, "CWlanHwInitMain:SetTuningDataL() - request failed, status = 0x%x", resp.Get8bit( ISI_HEADER_SIZE + PERM_PM_RECORD_WRITE_RESP_OFFSET_PMMSTATUS) );
+		
+		User::Leave( KErrGeneral );
+	}
+
+	CleanupStack::PopAndDestroy( writeBuf );
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::GetHwTestData
+// ---------------------------------------------------------
+//
+TInt CWlanHwInitMain::GetHwTestData(TUint aId, TDes8& aData)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:GetHwTestData()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_GETHWTESTDATA, "CWlanHwInitMain:GetHwTestData()" );	
+	
+	switch ( aId )
+	{
+		case EWlanHwInitTestSettingMacAddressPerm:
+			aData.Copy( &iMacAddressPerm.iMacAddress[0], KMacAddrLength );
+		break;
+
+		case EWlanHwInitTestSettingMacAddressTemp:
+			aData.Copy( &iMacAddressTemp.iMacAddress[0], KMacAddrLength );
+		break;
+
+		case EWlanHwInitTestSettingTuningData:            
+			iPermParser->GetTuningValues( aData );
+		break;
+
+		case EWlanHwInitTestSettingTempTuningData:
+		default:
+			TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:GetHwTestData() - not supported (%d)" ), aId ) );
+			OstTrace1( TRACE_IMPORTANT, DUP1_CWLANHWINITMAIN_GETHWTESTDATA, "CWlanHwInitMain:GetHwTestData() - not supported (%d)", aId );			
+			return KErrNotSupported;
+	}
+	
+	return KErrNone;
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::SetHwTestData
+// ---------------------------------------------------------
+//
+TInt CWlanHwInitMain::SetHwTestData(TUint aId, TDesC8& aData)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SetHwTestData()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_SETHWTESTDATA, "CWlanHwInitMain:SetHwTestData()" );	
+	TInt ret( KErrNone );
+	
+	switch ( aId )
+	{
+		case EWlanHwInitTestSettingMacAddressTemp:
+		    OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINITMAIN_SETHWTESTDATA, "CWlanHwInitMain:SetHwTestData() EWlanHwInitTestSettingMacAddressTemp" );		    
+			Mem::Copy( &iMacAddressTemp.iMacAddress[0], aData.Ptr(), KMacAddrLength );
+			iPermParser->SetMacAddress(iMacAddressTemp);
+			iPermParser->UpdateNvsData(UPDATE_MAC_ADDR);
+		break;
+
+		case EWlanHwInitTestSettingTuningData:
+		{
+			OstTrace0( TRACE_NORMAL, DUP2_CWLANHWINITMAIN_SETHWTESTDATA, "CWlanHwInitMain::SetHwTestData() EWlanHwInitTestSettingTuningData" );
+			iPermParser->SetTuningValues(aData, UPDATE_ALL);
+			TPtrC8 cmtDataPtr( iPermParser->GetTuningBuffer() );
+			TRAP( ret, SetTuningDataL(cmtDataPtr) );
+			iPermParser->UpdateNvsData(UPDATE_ALL);
+		}
+      break;
+
+		case EWlanHwInitTestSettingTempTuningData:
+		{
+		    TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SetHwTestData() EWlanHwInitTestSettingTempTuningData" ) ) );
+		    OstTrace0( TRACE_NORMAL, DUP3_CWLANHWINITMAIN_SETHWTESTDATA, "CWlanHwInitMain::SetHwTestData() EWlanHwInitTestSettingTempTuningData" );
+		    iPermParser->SetTuningValues(aData, UPDATE_ALL);
+		    iPermParser->UpdateNvsData(UPDATE_ALL);
+		}
+		break;
+		
+		case EWlanHwInitTestSettingMacAddressPerm:
+		default:
+			TraceDump( ERROR_LEVEL, ( _L( "CWlanHwInitMain:SetHwTestData() - no such id (%d)!" ), aId ) );
+			OstTrace1( TRACE_IMPORTANT, DUP4_CWLANHWINITMAIN_SETHWTESTDATA, "CWlanHwInitMain:SetHwTestData() - no such id (%d)", aId );
+			ret = KErrNotSupported;
+	    break;
+	}
+	
+	return ret;
+}
+
+
+TBool CWlanHwInitMain::IsMMCFirmwareFound()
+    {
+#ifdef LOAD_FW_FROM_MMC
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain::IsMMCFirmwareFound()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_ISMMCFIRMWAREFOUND, "CWlanHwInitMain::IsMMCFirmwareFound()" );
+	
+	_LIT(KSearchPath,"E:\\firmware\\*.*");
+	_LIT(KFilePath,"E:\\firmware\\");
+	  
+	// Check if the firmware is already loaded,
+	// free the memory and continue
+	  
+	  if (iFirmwareMC)
+	  {
+	  	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain: Memory for MMC Firmware already reserved" ) ) );
+	  	OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINITMAIN_ISMMCFIRMWAREFOUND, "CWlanHwInitMain: Memory for MMC Firmware already reserved" );
+	  	return ETrue;
+	  }
+	  
+	  // Init store	  
+	  RFs fs;
+	  RFile file;
+	  CDir* dirList;
+	  TInt fileSize = -1;
+	  TBuf<60> fileName;
+	  fileName = KFilePath;
+	  
+    
+	  // Connect to the file system	
+	  if ( fs.Connect() != KErrNone)
+	  {
+	  	return EFalse;
+	  }
+	  
+	  // If returns an error, the folder is not found
+	  // -> return false;	  
+	  if (fs.GetDir(KSearchPath,
+          		     KEntryAttMaskSupported,
+          		     ESortByName,
+                	 dirList) != KErrNone )
+	  {
+	  	fs.Close();
+	  	delete dirList;
+	  	return EFalse;
+	  }
+                
+ 	  // If no file is not found, return false.    
+	  if (dirList->Count() == 0)
+	  {
+	  	fs.Close();	  	
+	  	delete dirList;
+	  	return EFalse;
+	  }         
+      
+    // Take the first file in the list, further files
+    // are not handled           
+	  fileName.Append ((*dirList)[0].iName);  // Assume there is enough space, otherwise panics...
+	  
+	  // Try to open the firmware file
+	  if ( file.Open(fs, fileName, EFileStream != KErrNone))
+	  {
+	  	delete dirList;
+	  	fs.Close();
+	  	return EFalse;
+	  }
+	   
+	  // Get the size of the file 
+	  if (file.Size(fileSize) != KErrNone)
+	  {
+	  	delete dirList;
+	  	file.Close();
+	  	fs.Close();
+	  	return EFalse;
+	  	
+	  }
+    
+    // Reserve memory from heap for it
+    TRAPD(err, iFirmwareMC = HBufC8::NewL(fileSize));
+    
+    if (err != KErrNone)
+    {
+    	delete dirList;
+    	file.Close();
+      fs.Close();
+    	return EFalse;
+    }
+
+    // Get a pointer and read the contents
+    // of the file.
+	  TPtr8 pBuf = iFirmwareMC->Des();
+	  if (file.Read(pBuf) != KErrNone)
+	  {
+	  	delete dirList;
+    	file.Close();
+      fs.Close();
+    	return EFalse;
+	  }
+	  
+	  // Successful	  
+	  file.Close();
+    fs.Close();
+    delete dirList;
+
+	  return ETrue;	
+
+#else
+	return EFalse;
+#endif // LOAD_FW_FROM_MMC	
+		}
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::GetHwInitData
+// ---------------------------------------------------------
+//
+void CWlanHwInitMain::GetHwInitData(const TUint8** ppConfigData, TUint& configLength, const TUint8** ppNvsData, TUint& nvsLength )
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:GetHwInitData()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_GETHWINITDATA, "CWlanHwInitMain:GetHwInitData()" );
+	
+	// Temporary pointer for firmware
+	const TUint8* fwPtr;
+	TUint fwSize = 0;	
+		
+	// Parse NVS
+	iPermParser->CompareNvsBuffer();
+	TPtr8 nvsPtr( iPermParser->GetNvsBuffer() );
+	
+	// Check if firmware can be found from the MMC	
+#ifdef LOAD_FW_FROM_MMC  // Enable MMC loading here
+  if (IsMMCFirmwareFound())
+      {
+      TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain::GetHwInitData():MMC Firmware loaded" ) ) );	
+  	  OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINITMAIN_GETHWINITDATA, "CWlanHwInitMain::GetHwInitData():MMC Firmware loaded" );
+  	  fwPtr = reinterpret_cast<const TUint8*>( iFirmwareMC->Ptr() );
+  	  fwSize = iFirmwareMC->Length();  	  	
+      }
+  else
+	  {
+	  TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain::GetHwInitData():Hardcoded Firmware loaded" ) ) );		
+      OstTrace0( TRACE_NORMAL, DUP2_CWLANHWINITMAIN_GETHWINITDATA, "CWlanHwInitMain::GetHwInitData():Hardcoded Firmware loaded" );
+      fwPtr = reinterpret_cast<const TUint8*>( normal_firmware );
+      fwSize = (sizeof( normal_firmware ));
+	  }	
+#else
+  fwPtr = reinterpret_cast<const TUint8*>( normal_firmware );
+  fwSize = (sizeof( normal_firmware ));
+#endif	
+	
+	nvsLength = fwSize; 
+	
+	// Reserve memory if it has not yet already been reserved
+	if (ipNvsData == NULL)
+	{
+		ipNvsData = (TUint8*)User::Alloc(nvsLength);    
+		if (!ipNvsData)
+		{
+			// Out of memory
+			ASSERT(0);
+		}	
+	}	
+	
+	// Copy NVS data to correct position
+	//first copy the whole firmware
+	Mem::Copy(ipNvsData, fwPtr, nvsLength);
+		
+	// Length of NVS
+	*reinterpret_cast<TUint32*>(&ipNvsData[KNvMemLengthOffset]) = nvsPtr.Length();
+	
+	// Copy NVS data to the NVS offset
+	Mem::Copy( (ipNvsData + KNvMemValueOffset), nvsPtr.Ptr(), nvsPtr.Length());
+			
+	*ppNvsData = ipNvsData;
+}
+
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::GetMacAddress
+// Status : Draft
+// ---------------------------------------------------------
+//
+TInt CWlanHwInitMain::GetMacAddress(TMacAddr& aMacAddress)
+{
+	aMacAddress = iMacAddressPerm;
+	return KErrNone;
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::GetHwTestInitData
+// Status : Draft
+// ---------------------------------------------------------
+//    
+void CWlanHwInitMain::GetHwTestInitData(const TUint8** aInitData, TUint& aInitLength, const TUint8** aFwData, TUint& aFwLength)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:GetHwTestInitData()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_GETHWTESTINITDATA, "CWlanHwInitMain:GetHwTestInitData()" );
+
+	// Temporary pointer for firmware
+	const TUint8* fwPtr;
+	TUint fwSize = 0;	
+		
+	// Parse NVS
+	iPermParser->CompareNvsBuffer();
+	TPtr8 nvsPtr( iPermParser->GetNvsBuffer() );
+
+	// Check if firmware can be found from the MMC	
+#ifdef LOAD_FW_FROM_MMC  // Enable MMC loading here
+  if (IsMMCFirmwareFound())
+      {
+      TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain::GetHwTestInitData():MMC Firmware loaded" ) ) );	
+  	  OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINITMAIN_GETHWTESTINITDATA, "CWlanHwInitMain::GetHwTestInitData():MMC Firmware loaded" );
+  	  fwPtr = reinterpret_cast<const TUint8*>( iFirmwareMC->Ptr() );
+  	  fwSize = iFirmwareMC->Length();  	  	
+      }
+  else
+      {
+      TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain::GetHwTestInitData():Hardcoded Firmware loaded" ) ) );		
+      OstTrace0( TRACE_NORMAL, DUP2_CWLANHWINITMAIN_GETHWTESTINITDATA, "CWlanHwInitMain::GetHwTestInitData():Hardcoded Firmware loaded" );
+      fwPtr = reinterpret_cast<const TUint8*>( plt_firmware );
+      fwSize = (sizeof( plt_firmware ));
+      }	
+#else
+  fwPtr = reinterpret_cast<const TUint8*>( plt_firmware );
+  fwSize = (sizeof( plt_firmware ));
+#endif	
+		
+	aFwLength = fwSize; 
+	
+	// Reserve memory if it has not yet already been reserved
+	if (ipNvsData == NULL)
+	{
+		ipNvsData = (TUint8*)User::Alloc(aFwLength);     
+		if (!ipNvsData)
+		{
+			// Out of memory
+			ASSERT(0);
+		}	
+	}	
+	
+	// Copy NVS data to correct position
+	//first copy the whole firmware
+	Mem::Copy(ipNvsData, fwPtr, aFwLength);
+		
+	// Length of NVS
+	*reinterpret_cast<TUint32*>(&ipNvsData[KNvMemLengthOffset]) = nvsPtr.Length();
+	
+	// Copy NVS data to the NVS offset
+	Mem::Copy( (ipNvsData + KNvMemValueOffset), nvsPtr.Ptr(), nvsPtr.Length());
+			
+	*aFwData = ipNvsData;
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitMain::SendIsiMessageL
+// ---------------------------------------------------------
+//
+void CWlanHwInitMain::SendIsiMessageL(TDes8& aRequest, TDes8& aReply)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SendIsiMessageL()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:SendIsiMessageL()" );
+	
+	RIscApi iscapi;
+	TRequestStatus status;
+	const TUint16 channelId = EIscNokiaStartup;
+
+	iscapi.Open( channelId, status );// codescanner::open IscApi::Open doesn't have return value. Error codes are passed in status parameter.
+	User::WaitForRequest( status );
+	if ( status.Int() != KErrNone )
+	{
+		TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SendIsiMessageL() - RIscApi.Open() failed with %d" ), status.Int() ) );
+		OstTrace1( TRACE_IMPORTANT, DUP1_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:SendIsiMessageL() - RIscApi.Open() failed with %d", status.Int() );
+		User::Leave( status.Int() );
+	}
+	CleanupClosePushL( iscapi );
+
+	TInt ret = iscapi.Send( aRequest );
+	if ( ret != KErrNone )
+	{
+		TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SendIsiMessageL() - RIscApi.Send() failed with %d" ), ret ) );
+		OstTrace1( TRACE_IMPORTANT, DUP2_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:SendIsiMessageL() - RIscApi.Send() failed with %d", ret );
+		User::Leave( ret );
+	}
+
+	TUint16 neededLength = 0;
+
+	TraceDump( INFO_LEVEL,( _L( "CWlanHwInitMain:aReply Size() %d" ),aReply.Size() ) );
+	TraceDump( INFO_LEVEL,( _L( "CWlanHwInitMain:aReply MaxLength() %d" ),aReply.MaxLength() ) );
+	TraceDump( INFO_LEVEL,( _L( "CWlanHwInitMain:aReply MaxSize() %d" ),aReply.MaxSize() ) );
+	OstTrace1( TRACE_NORMAL, DUP3_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:aReply Size() %d", aReply.Size() );
+	OstTrace1( TRACE_NORMAL, DUP4_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:aReply MaxLength() %d", aReply.MaxLength() );
+	OstTrace1( TRACE_NORMAL, DUP5_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:aReply MaxSize() %d", aReply.MaxSize() );
+	
+	iscapi.Receive( status, aReply, neededLength );
+	User::WaitForRequest( status );
+	if ( status.Int() != KErrNone )
+	{
+		TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitMain:SendIsiMessageL() - RIscApi.Receive() failed with %d" ), status.Int() ) );
+		TraceDump( INFO_LEVEL,( _L( "CWlanHwInitMain:neededLength %d" ),neededLength ) );
+		OstTrace1( TRACE_IMPORTANT, DUP6_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:SendIsiMessageL() - RIscApi.Receive() failed with %d", status.Int() );
+		OstTrace1( TRACE_IMPORTANT, DUP7_CWLANHWINITMAIN_SENDISIMESSAGEL, "CWlanHwInitMain:neededLength %d", neededLength );		
+		User::Leave( status.Int() );
+	}
+
+	CleanupStack::PopAndDestroy( &iscapi );
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/src/wlanhwinitpermparser.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,249 @@
+/*
+* Copyright (c) 2002-2006 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  The class for parsing the tuning data stored in PERM server
+*
+*/
+
+
+#include <stddef.h>
+#include <es_sock.h>
+#include "gendebug.h"
+#include "wlanhwinitpermparser.h"
+#include "bcmnvmem.h"
+#include "lmac_firmware.h"
+#include "plt_firmware.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "wlanhwinitpermparserTraces.h"
+#endif
+
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+CWlanHwInitPermParser::CWlanHwInitPermParser() :
+    iTuningData(NULL),
+    iNvsData(NULL)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:CWlanHwInitPermParser()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_CWLANHWINITPERMPARSER, "CWlanHwInitPermParser:CWlanHwInitPermParser()" );	
+}
+
+
+void CWlanHwInitPermParser::ConstructL()
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:ConstructL()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_CONSTRUCTL, "CWlanHwInitPermParser:ConstructL()" );	
+	iTuningData = HBufC8::NewL( (sizeof(WlanHalApi::SNvMem) - offsetof(WlanHalApi::SNvMem, PL_2G_hdb)) );   
+	iNvsData = HBufC8::NewL( sizeof(WlanHalApi::SNvMem) );   
+}
+
+
+CWlanHwInitPermParser* CWlanHwInitPermParser::NewL()
+{
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_NEWL, "CWlanHwInitPermParser::NewL()" );
+	CWlanHwInitPermParser* self = new( ELeave ) CWlanHwInitPermParser;
+
+	CleanupStack::PushL( self );
+	self->ConstructL();
+	CleanupStack::Pop( self );
+
+	return self;
+}
+
+
+CWlanHwInitPermParser::~CWlanHwInitPermParser()
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:~CWlanHwInitPermParser()" ) ) );
+	OstTrace0( TRACE_NORMAL, DUP1_CWLANHWINITPERMPARSER_CWLANHWINITPERMPARSER, "CWlanHwInitPermParser:~CWlanHwInitPermParser()" );
+	delete iTuningData;
+	iTuningData = NULL;
+	delete iNvsData;
+	iNvsData = NULL;
+}
+
+void CWlanHwInitPermParser::CompareNvsBuffer()
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:CompareNvsBuffer()") ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_COMPARENVSBUFFER, "CWlanHwInitPermParser:CompareNvsBuffer()" );
+	TUint8* pNvsBuffer = (TUint8*)iNvsData->Ptr();
+	TUint8* normalFirmwareNvsBuffer = (TUint8*) (normal_firmware + KNvMemValueOffset32);
+	TUint8* pltFirmwareNvsBuffer = (TUint8*) (plt_firmware + KNvMemValueOffset32);
+	
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:CompareNvsBuffer() sizeof(WlanHalApi::SNvMem): %d"), sizeof(WlanHalApi::SNvMem) ) );
+	OstTrace1( TRACE_NORMAL, DUP1_CWLANHWINITPERMPARSER_COMPARENVSBUFFER, "CWlanHwInitPermParser:CompareNvsBuffer() sizeof(WlanHalApi::SNvMem): %d", sizeof(WlanHalApi::SNvMem));
+	
+	/* checking the changes that have been made */
+	for( TUint32 i = 0 ; i < sizeof(WlanHalApi::SNvMem) ; i++)
+	{
+		if(normalFirmwareNvsBuffer[i] != pNvsBuffer[i])
+		{
+			TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:Normal NVS changed[0x%04X]:orig 0x%02X, new 0x%02X"), i, normalFirmwareNvsBuffer[i], pNvsBuffer[i]) );
+			OstTraceExt3( TRACE_NORMAL, DUP2_CWLANHWINITPERMPARSER_COMPARENVSBUFFER, "CWlanHwInitPermParser:Normal NVS changed[0x%x]:orig 0x%x, new 0x%x", i, normalFirmwareNvsBuffer[i], pNvsBuffer[i] );
+		}
+	}
+
+	/* also for plt firmware */
+	for( TUint32 i = 0 ; i < sizeof(WlanHalApi::SNvMem) ; i++)
+	{
+		if(pltFirmwareNvsBuffer[i] != pNvsBuffer[i])
+		{
+			TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:PLT NVS changed[0x%04X]:orig 0x%02X, new 0x%02X"), i, pltFirmwareNvsBuffer[i], pNvsBuffer[i]) );
+			OstTraceExt3( TRACE_NORMAL, DUP3_CWLANHWINITPERMPARSER_COMPARENVSBUFFER, "CWlanHwInitPermParser:PLT NVS changed[0x%x]:orig 0x%x, new 0x%x", i, pltFirmwareNvsBuffer[i], pNvsBuffer[i] );		
+		}
+	}	
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitPermParser::GetNvsBuffer
+// ---------------------------------------------------------
+//
+TPtr8 CWlanHwInitPermParser::GetNvsBuffer()
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:GetNvsBuffer()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_GETNVSBUFFER, "CWlanHwInitPermParser:GetNvsBuffer()" );
+	return iNvsData->Des();
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitPermParser::GetTuningBuffer
+// ---------------------------------------------------------
+//
+TPtr8 CWlanHwInitPermParser::GetTuningBuffer()
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:GetTuningBuffer()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_GETTUNINGBUFFER, "CWlanHwInitPermParser:GetTuningBuffer()" );
+	return iTuningData->Des();
+}
+
+
+// ---------------------------------------------------------
+// CWlanHwInitPermParser::UpdateNvsData
+// ---------------------------------------------------------
+//
+void CWlanHwInitPermParser::UpdateNvsData(nvsUpdateList updateList)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:UpdateNvsData()" ) ) );
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:updateList 0x%X"), updateList ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_UPDATENVSDATA, "CWlanHwInitPermParser:UpdateNvsData()" );
+	OstTrace1( TRACE_NORMAL, DUP1_CWLANHWINITPERMPARSER_UPDATENVSDATA, "CWlanHwInitPermParser:updateList 0x%x", updateList );
+	
+	WlanHalApi::SNvMem* pNvsStruct = (WlanHalApi::SNvMem*)iNvsData->Ptr();
+
+	if( (sizeof(WlanHalApi::SNvMem) - offsetof(WlanHalApi::SNvMem, PL_2G_hdb)) == iTuningData->Length() ) //only use if the tuning data is the same size as the structure...
+	{
+		if(updateList == UPDATE_ALL)
+		{
+			TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:UpdateNvsData:UPDATE_ALL" ) ) );
+			OstTrace0( TRACE_NORMAL, DUP2_CWLANHWINITPERMPARSER_UPDATENVSDATA, "CWlanHwInitPermParser:UpdateNvsData:UPDATE_ALL" );
+			//void * memcpy ( void * destination, const void * source, size_t num );
+			memcpy( (&pNvsStruct->PL_2G_hdb), iTuningData->Ptr(), iTuningData->Length() );		
+		}
+	}
+	else
+	{
+			TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:size mismatch data-%d, structure-%d"), iTuningData->Length(), sizeof(WlanHalApi::SNvMem)) );
+			OstTraceExt2( TRACE_NORMAL, DUP3_CWLANHWINITPERMPARSER_UPDATENVSDATA, "CWlanHwInitPermParser:size mismatch data-%d, structure-%d", iTuningData->Length(), sizeof(WlanHalApi::SNvMem) );			
+	}
+
+	if(updateList & UPDATE_MAC_ADDR)
+	{
+		//Update Mac address
+		TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:UPDATE_MAC_ADDR" ) ) );
+		TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:Current Mac Addr - %02X:%02X:%02X:%02X:%02X:%02X"),  pNvsStruct->whamac[0], pNvsStruct->whamac[1], pNvsStruct->whamac[2], pNvsStruct->whamac[3], pNvsStruct->whamac[4], pNvsStruct->whamac[5] ) );
+		TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:Mac Addr to use - %02X:%02X:%02X:%02X:%02X:%02X"), iMacAddress.iMacAddress[0], iMacAddress.iMacAddress[1], iMacAddress.iMacAddress[2], iMacAddress.iMacAddress[3], iMacAddress.iMacAddress[4], iMacAddress.iMacAddress[5]) );
+		OstTrace0( TRACE_NORMAL, DUP4_CWLANHWINITPERMPARSER_UPDATENVSDATA, "CWlanHwInitPermParser:UPDATE_MAC_ADDR" );
+		TBuf<80> buf;
+		buf.AppendFormat(_L("CWlanHwInitPermParser:Current Mac Addr - %02X:%02X:%02X:%02X:%02X:%02X"),  pNvsStruct->whamac[0], pNvsStruct->whamac[1], pNvsStruct->whamac[2], pNvsStruct->whamac[3], pNvsStruct->whamac[4], pNvsStruct->whamac[5] );
+		TPtrC16 currentMacPtr((TUint16*)buf.Ptr(), buf.Size());
+		OstTraceExt1( TRACE_NORMAL, DUP5_CWLANHWINITPERMPARSER_UPDATENVSDATA, "%S", currentMacPtr );		
+		buf.Zero();
+		buf.AppendFormat(_L("CWlanHwInitPermParser:Mac Addr to use - %02X:%02X:%02X:%02X:%02X:%02X"), iMacAddress.iMacAddress[0], iMacAddress.iMacAddress[1], iMacAddress.iMacAddress[2], iMacAddress.iMacAddress[3], iMacAddress.iMacAddress[4], iMacAddress.iMacAddress[5] );
+		TPtrC16 newMacPtr((TUint16*)buf.Ptr(), buf.Size());
+		OstTraceExt1( TRACE_NORMAL, DUP6_CWLANHWINITPERMPARSER_UPDATENVSDATA, "%S", newMacPtr );
+		
+		/* Copy the MAC address */
+		for( TUint32 i = 0 ; i < KMacAddrLength ; i++)
+		{
+			pNvsStruct->whamac[i] = iMacAddress.iMacAddress[i];
+		}
+		TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:Final Mac Addr - %02X:%02X:%02X:%02X:%02X:%02X"),  pNvsStruct->whamac[0], pNvsStruct->whamac[1], pNvsStruct->whamac[2], pNvsStruct->whamac[3], pNvsStruct->whamac[4], pNvsStruct->whamac[5] ) );
+		buf.Zero();
+		buf.AppendFormat(_L("CWlanHwInitPermParser:Final Mac Addr - %02X:%02X:%02X:%02X:%02X:%02X"), pNvsStruct->whamac[0], pNvsStruct->whamac[1], pNvsStruct->whamac[2], pNvsStruct->whamac[3], pNvsStruct->whamac[4], pNvsStruct->whamac[5] );
+		TPtrC16 finalMacPtr((TUint16*)buf.Ptr(), buf.Size());
+		OstTraceExt1( TRACE_NORMAL, DUP7_CWLANHWINITPERMPARSER_UPDATENVSDATA, "%S", finalMacPtr );
+	}
+
+	CompareNvsBuffer();
+}
+
+
+void CWlanHwInitPermParser::GenerateDefaultTuningData(void)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:GenerateDefaultTuningData()" ) ) );    
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_GENERATEDEFAULTTUNINGDATA, "CWlanHwInitPermParser:GenerateDefaultTuningData()" );
+	
+	//use nvs file to create default tuning data
+	TPtr8 tuningPtr( GetTuningBuffer() );
+	WlanHalApi::SNvMem* pNvsStruct = (WlanHalApi::SNvMem*)iNvsData->Ptr();
+	
+	tuningPtr.Copy(&pNvsStruct->PL_2G_hdb, (sizeof(WlanHalApi::SNvMem) - offsetof(WlanHalApi::SNvMem, PL_2G_hdb)));	
+}
+
+void CWlanHwInitPermParser::SetMacAddress(const TMacAddr& pMacAddress)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:SetMacAddress()" ) ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_SETMACADDRESS, "CWlanHwInitPermParser:SetMacAddress()" );
+	
+	memcpy(iMacAddress.iMacAddress, pMacAddress.iMacAddress, KMacAddrLength);
+}
+
+// ---------------------------------------------------------
+// CWlanHwInitPermParser::GetTuningValues
+// ---------------------------------------------------------
+//
+TInt CWlanHwInitPermParser::GetTuningValues(TDes8& aData)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:GetTuningValues()" ) ) );    
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_GETTUNINGVALUES, "CWlanHwInitPermParser:GetTuningValues()" );
+	
+	aData.Copy(GetTuningBuffer());
+
+	return KErrNone;
+}
+
+
+// ---------------------------------------------------------
+// CWlanHwInitPermParser::SetTuningValues
+// ---------------------------------------------------------
+//
+TInt CWlanHwInitPermParser::SetTuningValues(TDesC8& aData, nvsUpdateList updateList)
+{
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:SetTuningValues()" ) ) );
+	TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:updateList 0x%X"), updateList ) );
+	OstTrace0( TRACE_NORMAL, CWLANHWINITPERMPARSER_SETTUNINGVALUES, "CWlanHwInitPermParser:SetTuningValues()" );
+	OstTrace1( TRACE_NORMAL, DUP1_CWLANHWINITPERMPARSER_SETTUNINGVALUES, "CWlanHwInitPermParser:updateList 0x%x", updateList );
+	
+	TPtr8 tuningPtr( GetTuningBuffer() );
+	TUint8* pStoredTuningData = (TUint8*)tuningPtr.Ptr();
+		
+	if(updateList & UPDATE_ALL)
+	{
+		TraceDump( INFO_LEVEL, ( _L( "CWlanHwInitPermParser:UPDATE_ALL" ) ) );
+		OstTrace0( TRACE_NORMAL, DUP2_CWLANHWINITPERMPARSER_SETTUNINGVALUES, "CWlanHwInitPermParser:UPDATE_ALL" );		
+		//void * memcpy ( void * destination, const void * source, size_t num );						
+		memcpy( pStoredTuningData, aData.Ptr(), (sizeof(WlanHalApi::SNvMem) - offsetof(WlanHalApi::SNvMem, PL_2G_hdb) ) );		
+	}
+
+	return KErrNone;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/testTC/traces/OstTraceDefinitions.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/group/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,6 @@
+PRJ_PLATFORMS
+ARMV5 WINSCW 
+
+PRJ_MMPFILES
+invariant_source.mmp
+variant_source.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/group/invariant_source.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,12 @@
+TARGET			invariant_source
+TARGETTYPE		EXE
+
+UID			0x100039ce 0x10000002
+LIBRARY			euser.lib
+SYSTEMINCLUDE		/epoc32/include
+SYSTEMINCLUDE		/epoc32/include/platform
+SOURCEPATH		../src
+SOURCE			inv_source.cpp
+
+USERINCLUDE		../traces
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/group/variant_source.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,21 @@
+#include <var.hrh>
+
+TARGET			variant_source
+TARGETTYPE		EXE
+
+UID			0x100039ce 0x10000003
+LIBRARY			euser.lib
+SYSTEMINCLUDE		/epoc32/include
+SYSTEMINCLUDE		/epoc32/include/platform
+
+SOURCEPATH		../src
+SOURCE			var_source1.cpp
+#if defined(MACRO_X)
+SOURCE			var_source2.cpp
+#endif
+#if defined(MACRO_Y)
+SOURCE			var_source3.cpp
+#endif
+
+USERINCLUDE		../traces
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/src/inv_source.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,15 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "inv_sourceTraces.h"
+#endif
+
+#include "e32def.h"
+
+char test[] = "invariant source";
+
+TInt E32Main()
+{
+	OstTrace0( TRACE_NORMAL, PLACE0, "Invariant Source" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/src/var_source1.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,15 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "var_source1Traces.h"
+#endif
+
+#include "e32def.h"
+
+char test[] = "variant source 1";
+
+TInt E32Main()
+{
+	OstTrace0( TRACE_NORMAL, PLACE1, "Variant Source 1" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/src/var_source2.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,13 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "var_source2Traces.h"
+#endif
+
+#include "e32def.h"
+
+TInt var_source2()
+{
+	OstTrace0( TRACE_NORMAL, PLACE2, "Variant Source 2" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/src/var_source3.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,14 @@
+// Trace compile macro and header
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "var_source3Traces.h"
+#endif
+
+#include "e32def.h"
+
+
+TInt var_source3()
+{
+	OstTrace0( TRACE_NORMAL, PLACE3, "Variant Source 3" );
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/OstTraceDefinitions.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/use_tc.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+	<!-- test trace compiler -->
+	<var name="tc_var_base">
+		<set name='USE_TRACE_COMPILER' value='1' />
+		<env name='JAVA_HOME' default='' type='path'/>
+		<env name='SBS_JAVATC' default='$(JAVA_HOME)/bin/java' type='tool' versionCommand='$(SBS_JAVATC) -version' versionResult='version \"1\.[5-9]' />
+	</var>
+	<var name="tc_var1" extends="tc_var_base">
+		<prepend name='SYSTEMINCLUDE' value='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/var1' />
+	</var>
+	<var name="tc_var2" extends="tc_var_base">
+		<prepend name='SYSTEMINCLUDE' value='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/var2' />
+	</var>
+
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/var1/var.hrh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,3 @@
+
+#define MACRO_X
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/tracecompiler/variant_source/var2/var.hrh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,3 @@
+
+#define MACRO_Y
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/CommonFramework.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+
+#ifndef __CommonFramework_H
+#define __CommonFramework_H
+
+#include <e32base.h>
+#include <e32cons.h>
+
+_LIT(KTxtEPOC32EX,"EXAMPLES");
+_LIT(KTxtExampleCode,"Symbian OS Example Code");
+_LIT(KFormatFailed,"failed: leave code=%d");
+_LIT(KTxtOK,"ok");
+_LIT(KTxtPressAnyKey," [press any key]");
+
+// public
+LOCAL_D CConsoleBase* console; // write all your messages to this
+LOCAL_C void doExampleL(); // code this function for the real example
+
+// private
+LOCAL_C void callExampleL(); // initialize with cleanup stack, then do example
+
+GLDEF_C TInt E32Main() // main function called by E32
+    {
+	__UHEAP_MARK;
+	CTrapCleanup* cleanup=CTrapCleanup::New(); // get clean-up stack
+	TRAPD(error,callExampleL()); // more initialization, then do example
+	__ASSERT_ALWAYS(!error,User::Panic(KTxtEPOC32EX,error));
+	delete cleanup; // destroy clean-up stack
+	__UHEAP_MARKEND;
+	return 0; // and return
+    }
+
+LOCAL_C void callExampleL() // initialize and call example code under cleanup stack
+    {
+	console=Console::NewL(KTxtExampleCode,TSize(KConsFullScreen,KConsFullScreen));
+	CleanupStack::PushL(console);
+	TRAPD(error,doExampleL()); // perform example function
+	if (error)
+		console->Printf(KFormatFailed, error);
+	else
+		console->Printf(KTxtOK);
+	console->Printf(KTxtPressAnyKey);
+	console->Getch(); // get and ignore character
+	CleanupStack::PopAndDestroy(); // close console
+    }
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_MMPFILES
+
+unfrozensymbols.mmp
+exeusingunfrozen.mmp
+unfrozensymbols_with_deffile.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/exeusingunfrozen.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET			test_unfrozen
+TARGETTYPE		EXE
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib unfrozensymbols.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp 
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/freeze.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* Component description file
+*
+*/
+
+
+PRJ_MMPFILES
+unfrozensymbols_for_freeze.mmp
+frozen_with_removed_export.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/frozen_with_removed_export.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.mmp copy
+*
+*/
+
+
+TARGET			frozen_with_removed_export.dll
+TARGETTYPE		dll
+UID				0xE800004C
+CAPABILITY		All -TCB
+VENDORID		0x70000001
+SOURCE			missing_symbols.cpp
+SYSTEMINCLUDE	/epoc32/include
+LIBRARY			euser.lib
+DEFFILE			frozen/~/frozen.def
+
+#include "../inc/macrotests.mmh"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/missing_symbols.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,74 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* This program creates a dll.
+*
+*/
+
+
+#include "unfrozensymbols.h"
+#include <e32uid.h>
+
+#include "../inc/macrotests.h"
+
+extern "C" {
+EXPORT_C TInt test_dll(void)
+{
+	return 0;
+}
+}
+
+// construct/destruct
+
+EXPORT_C CMessenger* CMessenger::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+	{
+	CMessenger* self=new (ELeave) CMessenger(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL(aString);
+	return self;
+	}
+
+CMessenger::~CMessenger() // destruct - virtual, so no export
+	{
+	delete iString;
+	}
+
+//*This is commented out to provide a source file with a missing export for    *
+//*test: dll_armv5_winscw_freeze.py (parts b & c)                              *
+//
+//EXPORT_C void CMessenger::ShowMessage()
+//	{
+//	_LIT(KFormat1,"%S\n");
+//	iConsole.Printf(KFormat1, iString); // notify completion
+//	}
+
+EXPORT_C void CMessenger::ShowMessage2()
+	{
+	_LIT(KFormat1,"%S\n");
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+// constructor support
+// don't export these, because used only by functions in this DLL, eg our NewLC()
+
+CMessenger::CMessenger(CConsoleBase& aConsole) // first-phase C++ constructor
+	: iConsole(aConsole)
+	{
+	}
+
+void CMessenger::ConstructL(const TDesC& aString) // second-phase constructor
+	{
+	iString=aString.AllocL(); // copy given string into own descriptor
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/partfrozenarm.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+EXPORTS
+	_ZN10CMessenger11ShowMessageEv @ 1 NONAME
+	_ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 @ 2 NONAME
+	_ZTI10CMessenger @ 3 NONAME
+	_ZTV10CMessenger @ 4 NONAME
+	test_dll @ 5 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/partfrozenwins.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,5 @@
+EXPORTS
+	test_dll @ 1 NONAME
+	?ShowMessage@CMessenger@@QAEXXZ @ 2 NONAME ; void CMessenger::ShowMessage(void)
+	?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @ 3 NONAME ; class CMessenger * CMessenger::NewLC(class CConsoleBase &, class TDesC16 const &)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/test.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="unfrozen test";
+
+extern "C" {
+
+IMPORT_C TInt test_dll();
+
+}
+
+TInt E32Main()
+{
+	test_dll();
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/unfrozensymbols.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This program creates a dll.
+*
+*/
+
+
+#include "unfrozensymbols.h"
+#include <e32uid.h>
+
+#include "../inc/macrotests.h"
+
+extern "C" {
+EXPORT_C TInt test_dll(void)
+{
+	return 0;
+}
+}
+
+// construct/destruct
+
+EXPORT_C CMessenger* CMessenger::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+	{
+	CMessenger* self=new (ELeave) CMessenger(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL(aString);
+	return self;
+	}
+
+CMessenger::~CMessenger() // destruct - virtual, so no export
+	{
+	delete iString;
+	}
+
+EXPORT_C void CMessenger::ShowMessage()
+	{
+	_LIT(KFormat1,"%S\n");
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+EXPORT_C void CMessenger::ShowMessage2()
+	{
+	_LIT(KFormat1,"%S\n");
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+// constructor support
+// don't export these, because used only by functions in this DLL, eg our NewLC()
+
+CMessenger::CMessenger(CConsoleBase& aConsole) // first-phase C++ constructor
+	: iConsole(aConsole)
+	{
+	}
+
+void CMessenger::ConstructL(const TDesC& aString) // second-phase constructor
+	{
+	iString=aString.AllocL(); // copy given string into own descriptor
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/unfrozensymbols.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.h
+*
+*/
+
+
+
+#include <e32cons.h>
+
+
+class CMessenger : public CBase
+  	{
+public:
+		// Construction
+	IMPORT_C static CMessenger* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+		// Destructor - virtual and class not intended
+		// for derivation, so not exported
+	~CMessenger();
+		// general functions - exported
+	IMPORT_C void ShowMessage();
+	IMPORT_C void ShowMessage2();
+private:
+		// C++ constructor - not exported;
+		// implicitly called from NewLC()
+	CMessenger(CConsoleBase& aConsole);
+		// 2nd phase construction, called by NewLC()
+	void ConstructL(const TDesC& aString); // second-phase constructor
+private:
+	CConsoleBase& iConsole; // Use the console (but not owned)
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/unfrozensymbols.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.mmp
+*
+*/
+
+
+TARGET        unfrozensymbols.dll
+TARGETTYPE    dll
+
+UID             0xE800004C
+CAPABILITY   All -TCB
+
+
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        unfrozensymbols.cpp
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+
+LIBRARY       euser.lib
+
+
+#if 0
+#if defined(WINS)
+    deffile ./missingwins.def
+#elif defined(MARM)
+    deffile ./missingarm.def
+#endif
+#endif 
+
+exportunfrozen
+nostrictdef
+
+#include "../inc/macrotests.mmh"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/unfrozensymbols_for_freeze.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.mmp copy
+*
+*/
+
+
+TARGET			unfrozensymbols_for_freeze.dll
+TARGETTYPE		dll
+UID				0xE800004C
+CAPABILITY		All -TCB
+VENDORID		0x70000001
+SOURCE			unfrozensymbols.cpp
+SYSTEMINCLUDE	/epoc32/include
+LIBRARY			euser.lib
+DEFFILE			frozen/~/frozen.def
+
+#include "../inc/macrotests.mmh"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/unfrozen/unfrozensymbols_with_deffile.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,50 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* CreateStaticDLL.mmp
+* using relative paths for sourcepath and user includes
+* exports are unfrozen
+*
+*/
+
+
+TARGET        unfrozensymbols2.dll
+TARGETTYPE    dll
+
+UID             0xE800004C
+CAPABILITY   All -TCB
+
+
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        unfrozensymbols.cpp
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+
+LIBRARY       euser.lib
+
+
+#if defined(WINS)
+    deffile ./partfrozenwins.def
+#elif defined(MARM)
+    deffile ./partfrozenarm.def
+#endif
+
+exportunfrozen
+nostrictdef
+
+#include "../inc/macrotests.mmh"
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/variantplatforms/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+armv5 armv6 armv7
+
+PRJ_EXPORTS
+variantplatforms.flm /epoc32/tools/makefile_templates/tools/variantplatforms.flm
+variantplatforms.xml /epoc32/tools/makefile_templates/tools/variantplatforms.xml
+
+/* 
+   set the FLM parameter based on the pre-processing macros, so that we can
+   test that this bld.inf is actually processed for each of the platforms
+   that we expect - including ones that are extensions of ARMV5 (eg. ARM9E)
+*/ 
+#if defined(ARM9E)
+#define PARAMETER arm9e
+#elif defined(ARMV7)
+#define PARAMETER armv7
+#elif defined(ARMV6)
+#define PARAMETER armv6
+#else
+#define PARAMETER armv5
+#endif
+
+PRJ_EXTENSIONS
+start extension tools/variantplatforms
+option VP PARAMETER
+end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/variantplatforms/variantplatforms.flm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2 @@
+
+$(call raptor_phony_recipe,name,ALL,,echo "building variant platform $(VP)")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/variantplatforms/variantplatforms.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?> 
+<build xmlns="http://symbian.com/xml/build" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd"> 
+
+ <interface name="tools.variantplatforms" flm="variantplatforms.flm">
+  <param name="VP" /> 
+ </interface>
+
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_MMPFILES
+versioned_lib01.mmp
+versioned_lib02.mmp
+versioned_lib03.mmp
+versioned_lib04.mmp
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/dllversioning.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+PRJ_PLATFORMS
+ARMV5
+
+PRJ_MMPFILES
+// DLL version selection and explicit dll versions
+testver.mmp
+testver_20.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/test.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+#include "testver.h"
+
+char test[]="Simple test";
+
+
+TInt E32Main()
+{
+	int i = CMessenger::somebldymethod();
+	return i;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,65 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This program creates a dll.
+*
+*/
+
+
+#include "testver.h"
+#include <e32uid.h>
+
+// construct/destruct
+
+EXPORT_C CMessenger* CMessenger::NewLC(CConsoleBase& aConsole, const TDesC& aString)
+	{
+	CMessenger* self=new (ELeave) CMessenger(aConsole);
+	CleanupStack::PushL(self);
+	self->ConstructL(aString);
+	return self;
+	}
+
+CMessenger::~CMessenger() // destruct - virtual, so no export
+	{
+	delete iString;
+	}
+
+EXPORT_C void CMessenger::ShowMessage()
+	{
+	_LIT(KFormat1,"%S\n");
+	iConsole.Printf(KFormat1, iString); // notify completion
+	}
+
+#if ! defined(VERSION30)
+EXPORT_C int CMessenger::somebldymethod()
+   {
+   return 1;
+   }
+#endif
+
+
+
+// constructor support
+// don't export these, because used only by functions in this DLL, eg our NewLC()
+
+CMessenger::CMessenger(CConsoleBase& aConsole) // first-phase C++ constructor
+	: iConsole(aConsole)
+	{
+	}
+
+void CMessenger::ConstructL(const TDesC& aString) // second-phase constructor
+	{
+	iString=aString.AllocL(); // copy given string into own descriptor
+    }
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+ 
+
+#include <e32cons.h>
+
+
+class CMessenger : public CBase
+  	{
+public:
+		// Construction
+	IMPORT_C static CMessenger* NewLC(CConsoleBase& aConsole, const TDesC& aString);
+		// Destructor - virtual and class not intended
+		// for derivation, so not exported
+	~CMessenger();
+		// general functions - exported
+	IMPORT_C void ShowMessage();
+private:
+		// C++ constructor - not exported;
+		// implicitly called from NewLC()
+	CMessenger(CConsoleBase& aConsole);
+		// 2nd phase construction, called by NewLC()
+	void ConstructL(const TDesC& aString); // second-phase constructor
+private:
+	CConsoleBase& iConsole; // Use the console (but not owned)
+	HBufC*        iString;  // Allocated container for string data (destructor destroys)
+public:
+#if !defined(VERSION30) || defined(WINS)
+	IMPORT_C static int somebldymethod();
+#endif
+	};
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        testver.dll
+version       3.0
+TARGETTYPE    dll
+
+UID             0xE800004D
+CAPABILITY   All -TCB
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        testver.cpp
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+LIBRARY       euser.lib
+MACRO VERSION30
+
+#if defined(WINS)
+    deffile ./testver_wins.def
+#elif defined(MARM)
+    deffile ./testver_eabi.def
+#endif
+
+nostrictdef
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver_20.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,41 @@
+/*
+* Copyright (c) 2000-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        testver.dll
+VERSION       2.0 explicit
+TARGETTYPE    dll
+
+UID             0xE800004D
+CAPABILITY   All -TCB
+VENDORID 0x70000001
+
+SOURCEPATH    .
+SOURCE        testver.cpp
+
+USERINCLUDE   .
+SYSTEMINCLUDE /epoc32/include
+LIBRARY       euser.lib
+MACRO VERSION20
+
+#if defined(WINS)
+    deffile ./testver_wins.def
+#elif defined(MARM)
+    deffile ./testver_eabi.def
+#endif
+
+nostrictdef
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver_eabi.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,6 @@
+EXPORTS
+	_ZN10CMessenger11ShowMessageEv @ 1 NONAME
+	_ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 @ 2 NONAME
+	_ZTI10CMessenger @ 3 NONAME
+	_ZTV10CMessenger @ 4 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver_eabi{00020000}.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,7 @@
+EXPORTS
+	_ZN10CMessenger11ShowMessageEv @ 1 NONAME
+	_ZN10CMessenger14somebldymethodEv @ 2 NONAME
+	_ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 @ 3 NONAME
+	_ZTI10CMessenger @ 4 NONAME
+	_ZTV10CMessenger @ 5 NONAME
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver_wins.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,4 @@
+EXPORTS
+	?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @ 1 NONAME ; class CMessenger * CMessenger::NewLC(class CConsoleBase &, class TDesC16 const &)
+	?ShowMessage@CMessenger@@QAEXXZ @ 2 NONAME ; void CMessenger::ShowMessage(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/testver_wins{00020000}.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,4 @@
+EXPORTS
+	?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @ 1 NONAME ; class CMessenger * CMessenger::NewLC(class CConsoleBase &, class TDesC16 const &)
+	?ShowMessage@CMessenger@@QAEXXZ @ 2 NONAME ; void CMessenger::ShowMessage(void)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/versioned_lib.def	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,6 @@
+EXPORTS
+	_ZN10CMessenger11ShowMessageEv @ 1 NONAME
+	_ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 @ 2 NONAME
+	_ZTI10CMessenger @ 3 NONAME ; #<TI>#
+	_ZTV10CMessenger @ 4 NONAME ; #<VT>#
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/versioned_lib01.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        versionedlib01.lib
+TARGETTYPE    implib
+
+DEFFILE ./versioned_lib.def
+    
+NOSTRICTDEF
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/versioned_lib02.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        versionedlib.02.lib
+TARGETTYPE    implib
+
+DEFFILE ./versioned_lib.def
+    
+NOSTRICTDEF
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/versioned_lib03.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,26 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* versoned_lib03.mmp
+*
+*/
+
+
+TARGET        versioned.lib.03.lib
+TARGETTYPE    implib
+
+DEFFILE ./versioned_lib.def
+    
+NOSTRICTDEF
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/versioned_lib04.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+
+TARGET        version.ed.lib.04.lib
+TARGETTYPE    implib
+
+DEFFILE ./versioned_lib.def
+
+NOSTRICTDEF
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/versioned_lib/xver_20.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+TARGET xver_20
+TARGETTYPE exe
+
+UID			0x100039ce 0x00000001
+LIBRARY			euser.lib testver{2.0}.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/xml_invalid_chars/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+PRJ_PLATFORMS
+ARMV5 ARMV7 WINSCW ARMV5SMP
+
+PRJ_MMPFILES
+simple.mmp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/xml_invalid_chars/simple.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+TARGET			test
+TARGETTYPE		EXE
+
+// Test backslash to / here:
+TARGETPATH		\sys\bin
+
+UID			0x100039ce 0x00000001
+#warning Some nasty un-escaped characters that break XML <a> & & >sdfsdf 
+LIBRARY			euser.lib
+SECUREID		0x10003a5c
+SYSTEMINCLUDE	/epoc32/include
+SOURCE			test.cpp 
+MACRO			TEST_MACRO_THAT_DOES_NOTHING
+PAGED
+DEBUGGABLE
+EPOCCALLDLLENTRYPOINTS
+EPOCSTACKSIZE 8192
+EPOCHEAPSIZE 0x5000 65535
+EPOCPROCESSPRIORITY low
+capability TCB ProtServ DiskAdmin AllFiles PowerMgmt CommDD
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/test_resources/xml_invalid_chars/test.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+#include "e32def.h" // intentional  include
+
+char test[]="Simple test";
+
+TInt E32Main()
+{
+	TInt t = 1;
+	t = 3;
+	TInt s = 5;
+	s = t + t*3;
+	t = s + s*3;
+	return 0;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/timeout.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,55 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+import os
+
+def run():
+	t = SmokeTest()
+	t.description = "test that long commands time out and get retried"
+	
+	exitCode = "128"
+
+	t.id = "60a"
+	t.name = "timeout"
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/timeout/bld.inf -f -"
+
+	t.mustmatch_singleline = [
+		"status exit='failed' code='" + exitCode + "' attempt='1' reason='timeout'",
+	]
+	t.errors = -1
+	t.returncode = 1
+	t.run()
+	
+	t.id = "60b"
+	t.name = "timeout with retries"
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/timeout/bld.inf -t 3 -f -"
+
+	t.mustmatch_singleline = [
+		"status exit='retry' code='" + exitCode + "' attempt='1' reason='timeout'",
+		"status exit='retry' code='" + exitCode + "' attempt='2' reason='timeout'",
+		"status exit='failed' code='" + exitCode + "' attempt='3' reason='timeout'",
+	]
+	t.errors = -1
+	t.returncode = 1
+	t.run()
+	
+	t.id = "60"
+	t.name = "timeout"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/timing.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.usebash = True
+	
+	t.description = "Test that a timing log is created and contains total parse and build durations"
+
+	t.id = "0103b"
+	t.name = "timing_on"
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf" + \
+			" --filters=FilterLogfile,FilterTiming -f ${SBSLOGFILE} && " + \
+			"grep progress:duration ${SBSLOGFILE}.timings"
+	t.mustmatch = [
+			"^<progress:duration object_type='layer' task='parse' key='.*' duration='\d+.\d+' />$",
+			"^<progress:duration object_type='layer' task='build' key='.*' duration='\d+.\d+' />$",
+			"^<progress:duration object_type='all' task='all' key='all' duration='\d+.\d+' />$"
+			]
+	t.mustnotmatch = []
+	t.run()
+
+
+	t.id = "103"
+	t.name = "timing"
+	t.print_result()
+	
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/toolchain_macros.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,60 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+import string
+
+def run():
+	t = SmokeTest()
+	t.description = "Check that ARM toolchain specific macros are used in both metadata and source processing."
+	t.warnings = -1
+	
+	toolchains = {
+				'rvct2_2':   ['ARMCC', 'ARMCC_2', 'ARMCC_2_2', '__ARMCC__', '__ARMCC_2__',  '__ARMCC_2_2__'],
+				'rvct3_1':   ['ARMCC', 'ARMCC_3', 'ARMCC_3_1', '__ARMCC__', '__ARMCC_3__' , '__ARMCC_3_1__'],
+				'rvct4_0':   ['ARMCC', 'ARMCC_4', 'ARMCC_4_0', '__ARMCC__', '__ARMCC_4__' , '__ARMCC_4_0__'],
+				'gcce4_3_2': ['GCCE',  'GCCE_4',  'GCCE_4_3',  '__GCCE__',  '__GCCE_4__' ,  '__GCCE_4_3__'],
+				'gcce4_3_3': ['GCCE', 'GCCE_4', 'GCCE_4_3', '__GCCE__', '__GCCE_4__' , '__GCCE_4_3__'],
+				'gcce4_4_1': ['GCCE', 'GCCE_4', 'GCCE_4_4', '__GCCE__', '__GCCE_4__' , '__GCCE_4_4__']
+				}
+	
+	rootname = "toolchain_macros_armv5_%s_%s"
+	rootcommand = "sbs -b smoke_suite/test_resources/toolchain_macros/bld.inf -c arm.v5.urel."
+	macromatch = ": #warning( directive:)? %s(</warning>)?$"
+	
+	count = 0	
+	for toolchain in sorted(toolchains.keys()):
+		t.id = "0095" + string.ascii_lowercase[count]
+		t.name = rootname % (toolchain, "clean")
+		t.command = rootcommand + toolchain + " clean"
+		t.mustmatch_singleline = []
+		t.run()
+		count += 1
+		
+		t.id = "0095" + string.ascii_lowercase[count]
+		t.name = rootname % (toolchain, "build")
+		t.command = rootcommand + toolchain
+		mustmatch = []	
+		for macro in toolchains[toolchain]:
+			mustmatch.append(macromatch % macro)
+		t.mustmatch_singleline = mustmatch
+		t.run()
+		count += 1
+
+	t.id = "95"
+	t.name = "toolchain_macros"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/toolcheck.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,94 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+import os
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "0092a"
+	t.name = "toolcheck"
+	t.description = """Test toolcheck works properly, with 3 options: on, off and forced. 
+				TOOL1 3 4 and 5 are expected to fail and 2 to pass"""
+	result = SmokeTest.PASS
+	toolcheckDir = os.environ["SBS_HOME"].replace("\\","/") + "/test/smoke_suite/test_resources/toolcheck"
+
+	# toolcheck ON
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -n --configpath=" + toolcheckDir + \
+			" -c default.toolcheck --toolcheck=on"
+	
+	t.mustmatch = [
+		".*tool 'TOOLCHECK1' from config 'none' did not return version.*",
+		".*tool 'TOOLCHECK3' from config 'none' did not return version.*",
+		".*tool 'TOOLCHECK4' from config 'none' did not return version.*",
+		".*tool 'TOOLCHECK5' from config 'none' did not return version.*"
+		]
+	t.mustnotmatch = [
+		".*TOOLCHECK2.*",
+		".*TOOLCHECK6.*"
+		]
+	t.errors = 4
+	t.returncode = 1
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	# toolcheck OFF
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -n --configpath=" + toolcheckDir + \
+			" -c default.toolcheck --toolcheck=off"
+
+	t.id = "0092b"
+	t.mustmatch = []
+	t.mustnotmatch = [
+		".*TOOLCHECK1.*",
+		".*TOOLCHECK3.*",
+		".*TOOLCHECK4.*",
+		".*TOOLCHECK5.*",
+		".*TOOLCHECK6.*"
+		]
+	t.errors = 0
+	t.returncode = 0
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+	# force toolcheck
+	t.command = "sbs -b smoke_suite/test_resources/simple/bld.inf -n --configpath=" + toolcheckDir + \
+			" -c default.toolcheck --toolcheck=forced"
+
+	t.id = "0092c"
+	t.mustmatch = [
+		".*tool 'TOOLCHECK1' from config 'none' did not return version.*",
+		".*tool 'TOOLCHECK3' from config 'none' did not return version.*",
+		".*tool 'TOOLCHECK4' from config 'none' did not return version.*",
+		".*tool 'TOOLCHECK5' from config 'none' did not return version.*"
+		]
+	t.mustnotmatch = [
+		".*TOOLCHECK2.*",
+		".*TOOLCHECK6.*"
+	]
+	t.errors = 4
+	t.returncode = 1
+	t.run()
+	if t.result == SmokeTest.FAIL:
+		result = SmokeTest.FAIL
+
+
+	t.id = "0092"
+	t.result = result
+	t.print_result()
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/tools.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,66 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():	
+	t = SmokeTest()
+	t.id = "52"
+	t.name = "tools"
+	t.command = "sbs -b smoke_suite/test_resources/tools/bld.inf -c tools"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/tools/deb/tool_exe.bsc",
+		"$(EPOCROOT)/epoc32/release/tools/deb/tool_exe.exe",
+		"$(EPOCROOT)/epoc32/release/tools/deb/tool_exe.ilk",
+		"$(EPOCROOT)/epoc32/release/tools/deb/tool_lib1.bsc",
+		"$(EPOCROOT)/epoc32/release/tools/deb/tool_lib1.lib",
+		"$(EPOCROOT)/epoc32/release/tools/deb/tool_lib2.bsc",
+		"$(EPOCROOT)/epoc32/release/tools/deb/tool_lib2.lib",
+		"$(EPOCROOT)/epoc32/release/tools/rel/tool_exe.exe",
+		"$(EPOCROOT)/epoc32/release/tools/rel/tool_lib1.lib",
+		"$(EPOCROOT)/epoc32/release/tools/rel/tool_lib2.lib",
+		"$(EPOCROOT)/epoc32/tools/tool_exe.exe",
+		"$(EPOCROOT)/epoc32/tools/tool_lib1.lib",
+		"$(EPOCROOT)/epoc32/tools/tool_lib2.lib"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tools/bld.inf', [
+		"tool_exe_exe/tools/deb/tool_exe_a.obj",
+		"tool_exe_exe/tools/deb/tool_exe_a.sbr",
+		"tool_exe_exe/tools/deb/tool_exe_b.obj",
+		"tool_exe_exe/tools/deb/tool_exe_b.sbr",
+		"tool_exe_exe/tools/rel/tool_exe_a.obj",
+		"tool_exe_exe/tools/rel/tool_exe_a.sbr",
+		"tool_exe_exe/tools/rel/tool_exe_b.obj",
+		"tool_exe_exe/tools/rel/tool_exe_b.sbr",
+		"tool_lib1_lib/tools/deb/tool_lib1_a.obj",
+		"tool_lib1_lib/tools/deb/tool_lib1_a.sbr",
+		"tool_lib1_lib/tools/deb/tool_lib1_b.obj",
+		"tool_lib1_lib/tools/deb/tool_lib1_b.sbr",
+		"tool_lib1_lib/tools/rel/tool_lib1_a.obj",
+		"tool_lib1_lib/tools/rel/tool_lib1_a.sbr",
+		"tool_lib1_lib/tools/rel/tool_lib1_b.obj",
+		"tool_lib1_lib/tools/rel/tool_lib1_b.sbr",
+		"tool_lib2_lib/tools/deb/tool_lib2_a.obj",
+		"tool_lib2_lib/tools/deb/tool_lib2_a.sbr",
+		"tool_lib2_lib/tools/deb/tool_lib2_b.obj",
+		"tool_lib2_lib/tools/deb/tool_lib2_b.sbr",
+		"tool_lib2_lib/tools/rel/tool_lib2_a.obj",
+		"tool_lib2_lib/tools/rel/tool_lib2_a.sbr",
+		"tool_lib2_lib/tools/rel/tool_lib2_b.obj",
+		"tool_lib2_lib/tools/rel/tool_lib2_b.sbr",
+	])
+	t.run("windows") # no MSVC compiler on Linux
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/tools2.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,78 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "51"
+	t.name = "tools2"
+	t.command = "sbs -b smoke_suite/test_resources/tools2/bld.inf -c tools2"
+
+
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/tools2/deb/libtool_lib1.a",
+		"$(EPOCROOT)/epoc32/release/tools2/deb/libtool_lib2.a",
+		"$(EPOCROOT)/epoc32/release/tools2/deb/tool_exe.exe",
+		"$(EPOCROOT)/epoc32/release/tools2/rel/libtool_lib1.a",
+		"$(EPOCROOT)/epoc32/release/tools2/rel/libtool_lib2.a",
+		"$(EPOCROOT)/epoc32/release/tools2/rel/tool_exe.exe",
+		"$(EPOCROOT)/epoc32/tools/tool_exe.exe",
+	]
+	t.addbuildtargets("smoke_suite/test_resources/tools2/bld.inf", [
+		"libtool_lib1_a/libtool_lib1_lib/tools2/rel/tool_lib1_b.o",
+		"libtool_lib1_a/libtool_lib1_lib/tools2/rel/tool_lib1_a.o",
+		"libtool_lib2_a/libtool_lib2_lib/tools2/rel/tool_lib2_b.o",
+		"libtool_lib2_a/libtool_lib2_lib/tools2/rel/tool_lib2_a.o",
+		"libtool_lib1_a/libtool_lib1_lib/tools2/deb/tool_lib1_b.o",
+		"libtool_lib1_a/libtool_lib1_lib/tools2/deb/tool_lib1_a.o",
+		"libtool_lib2_a/libtool_lib2_lib/tools2/deb/tool_lib2_a.o",
+		"libtool_lib2_a/libtool_lib2_lib/tools2/deb/tool_lib2_b.o",
+		"tool_exe_exe/tool_exe_exe/tools2/rel/tool_exe_a.o",
+		"tool_exe_exe/tool_exe_exe/tools2/rel/tool_exe_b.o",
+		"tool_exe_exe/tool_exe_exe/tools2/deb/tool_exe_b.o",
+		"tool_exe_exe/tool_exe_exe/tools2/deb/tool_exe_a.o"
+		])
+			
+	t.run("windows") # tools2 output is platform dependent
+
+	if t.result == SmokeTest.SKIP:
+		t.targets = [
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/deb/tool_exe",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/deb/libtool_lib1.a",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/deb/libtool_lib2.a",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/rel/tool_exe",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/rel/libtool_lib1.a",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/rel/libtool_lib2.a",
+			"$(EPOCROOT)/epoc32/tools/tool_exe"
+		]
+		t.addbuildtargets("smoke_suite/test_resources/tools2/bld.inf", [
+			"libtool_lib1_a/libtool_lib1_lib/tools2/rel/$(HOSTPLATFORM_DIR)/tool_lib1_b.o",
+			"libtool_lib1_a/libtool_lib1_lib/tools2/rel/$(HOSTPLATFORM_DIR)/tool_lib1_a.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/rel/$(HOSTPLATFORM_DIR)/tool_lib2_b.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/rel/$(HOSTPLATFORM_DIR)/tool_lib2_a.o",
+			"libtool_lib1_a/libtool_lib1_lib/tools2/deb/$(HOSTPLATFORM_DIR)/tool_lib1_b.o",
+			"libtool_lib1_a/libtool_lib1_lib/tools2/deb/$(HOSTPLATFORM_DIR)/tool_lib1_a.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/deb/$(HOSTPLATFORM_DIR)/tool_lib2_a.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/deb/$(HOSTPLATFORM_DIR)/tool_lib2_b.o",
+			"tool_exe_exe/tool_exe_exe/tools2/rel/$(HOSTPLATFORM_DIR)/tool_exe_a.o",
+			"tool_exe_exe/tool_exe_exe/tools2/rel/$(HOSTPLATFORM_DIR)/tool_exe_b.o",
+			"tool_exe_exe/tool_exe_exe/tools2/deb/$(HOSTPLATFORM_DIR)/tool_exe_b.o",
+			"tool_exe_exe/tool_exe_exe/tools2/deb/$(HOSTPLATFORM_DIR)/tool_exe_a.o"
+			])
+		t.run("linux") # tools2 output is platform dependent
+		
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/tools2_cross_compilation.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,175 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()	
+	t.description = "Tests Raptor can build win32 tools on linux"
+
+	t.id = "111a"
+	t.name = "tools2_cross_compilation_pdrtran" 
+	t.command = "sbs -b smoke_suite/test_resources/tools2/cross/BLD.INF -p PDRTRAN.MMP -c tools2 -c tools2.win32"
+
+	t.targets = [
+			"$(EPOCROOT)/epoc32/release/tools2/deb/pdrtran.exe",
+			"$(EPOCROOT)/epoc32/release/tools2/rel/pdrtran.exe",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/deb/pdrtran",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/rel/pdrtran",
+			"$(EPOCROOT)/epoc32/tools/pdrtran.exe",
+			"$(EPOCROOT)/epoc32/tools/pdrtran"
+			]
+	t.addbuildtargets("smoke_suite/test_resources/tools2/cross/BLD.INF", [
+			"pdrtran_/pdrtran_exe/tools2/deb/PDRTRAN.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/LEXICAL.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/PDRREADR.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/PDRRECRD.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/READER.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/RECORD.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/STRNG.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/PDRTRAN.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/LEXICAL.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/PDRREADR.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/PDRRECRD.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/READER.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/RECORD.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/STRNG.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/$(HOSTPLATFORM_DIR)/PDRTRAN.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/$(HOSTPLATFORM_DIR)/LEXICAL.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/$(HOSTPLATFORM_DIR)/PDRREADR.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/$(HOSTPLATFORM_DIR)/PDRRECRD.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/$(HOSTPLATFORM_DIR)/READER.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/$(HOSTPLATFORM_DIR)/RECORD.o",
+			"pdrtran_/pdrtran_exe/tools2/deb/$(HOSTPLATFORM_DIR)/STRNG.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/$(HOSTPLATFORM_DIR)/PDRTRAN.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/$(HOSTPLATFORM_DIR)/LEXICAL.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/$(HOSTPLATFORM_DIR)/PDRREADR.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/$(HOSTPLATFORM_DIR)/PDRRECRD.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/$(HOSTPLATFORM_DIR)/READER.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/$(HOSTPLATFORM_DIR)/RECORD.o",
+			"pdrtran_/pdrtran_exe/tools2/rel/$(HOSTPLATFORM_DIR)/STRNG.o"
+			])
+	t.run("linux")
+
+	
+	t.id = "111b"
+	t.name = "tools2_cross_compilation_libs"
+	t.command = "sbs -b smoke_suite/test_resources/tools2/bld.inf -c tools2.win32 -c tools2"
+
+	t.targets = [
+			"$(EPOCROOT)/epoc32/release/tools2/deb/tool_exe.exe",
+			"$(EPOCROOT)/epoc32/release/tools2/deb/libtool_lib1.a",
+			"$(EPOCROOT)/epoc32/release/tools2/deb/libtool_lib2.a",
+			"$(EPOCROOT)/epoc32/release/tools2/rel/tool_exe.exe",
+			"$(EPOCROOT)/epoc32/release/tools2/rel/libtool_lib1.a",
+			"$(EPOCROOT)/epoc32/release/tools2/rel/libtool_lib2.a",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/deb/tool_exe",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/deb/libtool_lib1.a",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/deb/libtool_lib2.a",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/rel/tool_exe",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/rel/libtool_lib1.a",
+			"$(EPOCROOT)/epoc32/release/tools2/$(HOSTPLATFORM_DIR)/rel/libtool_lib2.a",
+			"$(EPOCROOT)/epoc32/tools/tool_exe.exe",
+			"$(EPOCROOT)/epoc32/tools/tool_exe"
+			]
+	t.addbuildtargets("smoke_suite/test_resources/tools2/bld.inf", [
+			"libtool_lib1_a/libtool_lib1_lib/tools2/rel/tool_lib1_b.o",
+			"libtool_lib1_a/libtool_lib1_lib/tools2/rel/tool_lib1_a.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/rel/tool_lib2_b.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/rel/tool_lib2_a.o",
+			"libtool_lib1_a/libtool_lib1_lib/tools2/deb/tool_lib1_b.o",
+			"libtool_lib1_a/libtool_lib1_lib/tools2/deb/tool_lib1_a.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/deb/tool_lib2_a.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/deb/tool_lib2_b.o",
+			"tool_exe_exe/tool_exe_exe/tools2/rel/tool_exe_a.o",
+			"tool_exe_exe/tool_exe_exe/tools2/rel/tool_exe_b.o",
+			"tool_exe_exe/tool_exe_exe/tools2/deb/tool_exe_b.o",
+			"tool_exe_exe/tool_exe_exe/tools2/deb/tool_exe_a.o",
+			"libtool_lib1_a/libtool_lib1_lib/tools2/rel/$(HOSTPLATFORM_DIR)/tool_lib1_b.o",
+			"libtool_lib1_a/libtool_lib1_lib/tools2/rel/$(HOSTPLATFORM_DIR)/tool_lib1_a.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/rel/$(HOSTPLATFORM_DIR)/tool_lib2_b.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/rel/$(HOSTPLATFORM_DIR)/tool_lib2_a.o",
+			"libtool_lib1_a/libtool_lib1_lib/tools2/deb/$(HOSTPLATFORM_DIR)/tool_lib1_b.o",
+			"libtool_lib1_a/libtool_lib1_lib/tools2/deb/$(HOSTPLATFORM_DIR)/tool_lib1_a.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/deb/$(HOSTPLATFORM_DIR)/tool_lib2_a.o",
+			"libtool_lib2_a/libtool_lib2_lib/tools2/deb/$(HOSTPLATFORM_DIR)/tool_lib2_b.o",
+			"tool_exe_exe/tool_exe_exe/tools2/rel/$(HOSTPLATFORM_DIR)/tool_exe_a.o",
+			"tool_exe_exe/tool_exe_exe/tools2/rel/$(HOSTPLATFORM_DIR)/tool_exe_b.o",
+			"tool_exe_exe/tool_exe_exe/tools2/deb/$(HOSTPLATFORM_DIR)/tool_exe_b.o",
+			"tool_exe_exe/tool_exe_exe/tools2/deb/$(HOSTPLATFORM_DIR)/tool_exe_a.o"
+			])
+	t.run("linux")
+
+
+	t.usebash = True
+	t.id = "111c"
+	t.name = "tools2_cross_compilation_toolcheck_linux"
+	t.command = "$(EPOCROOT)/epoc32/tools/pdrtran smoke_suite/test_resources/tools2/cross/TEST.PD $(EPOCROOT)/epoc32/build/TEST_PDRTRAN.PDR"
+	t.targets = [
+		 	"$(EPOCROOT)/epoc32/build/TEST_PDRTRAN.PDR"
+			]
+	t.mustmatch = [
+			"PDRTRAN V41"
+			]		
+	t.run("linux")
+
+	
+	t.id = "111d"
+	t.name = "tools2_cross_compilation_toolcheck_windows"
+	t.command = "file $(EPOCROOT)/epoc32/tools/pdrtran.exe"
+	t.targets = []
+	t.mustmatch = [
+			"MS Windows"
+			]		
+	t.run("linux")
+
+
+	t.id = "111e"
+	t.name = "tools2_cross_compilation_platmacro_linux"
+	t.command = "sbs -b smoke_suite/test_resources/tools2/cross/BLD.INF -p platmacros.mmp -c tools2"
+	t.targets = [
+			"$(EPOCROOT)/epoc32/tools/test_platmacros"
+			]
+	t.mustmatch = [
+			"TOOLS2_LINUX"
+			]
+	t.mustnotmatch = [
+			"TOOLS2_WINDOWS"
+			]
+	t.warnings = 1
+	t.run("linux")
+
+
+	t.id = "111f"
+	t.name = "tools2_cross_compilation_platmacro_windows"
+	t.command = "sbs -b smoke_suite/test_resources/tools2/cross/BLD.INF -p platmacros.mmp -c tools2.win32"
+	t.targets = [
+			"$(EPOCROOT)/epoc32/tools/test_platmacros.exe"
+			]
+	t.mustmatch = [
+			"TOOLS2_WINDOWS"
+			]
+	t.mustnotmatch = [
+			"TOOLS2_LINUX"
+			]
+	t.warnings = 1
+	t.run("linux")
+
+
+	t.id = "111"
+	t.name = "tools2_cross_compilation"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/tracecompiler_general.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,195 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+	t = SmokeTest()
+	t.description = "Testcases (ID 0101a - 0101d) test trace compiler"
+	# General test for trace compiler, which generates
+	# 1. trace headers like <source>Traces.h
+	# 2. fixed_id.definitions
+	# 3. dictionary files like <project name>_<UID>_Dictionary.xml
+	# 4. trace definitions like <project name>_<UID>_TraceDefinitions.h
+	t.id = "101a"
+	t.name = "TC_general"
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/testTC/group/bld.inf -c armv5.tracecompiler"	
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testTC.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testTC{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/testTC.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/testTC.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/testTC.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/testTC.dll.map",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitmainTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitpermparserTraces.h",	
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/fixed_id.definitions",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/testTC_0x1000008d_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/include/platform/symbiantraces/autogen/testTC_0x1000008d_TraceDefinitions.h"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/testTC/group/bld.inf', [
+		"testtc_dll/armv5/udeb/wlanhwinit.o",
+		"testtc_dll/armv5/udeb/wlanhwinit.o.d",
+		"testtc_dll/armv5/udeb/wlanhwinitmain.o",
+		"testtc_dll/armv5/udeb/wlanhwinitmain.o.d",
+		"testtc_dll/armv5/udeb/wlanhwinitpermparser.o",
+		"testtc_dll/armv5/udeb/wlanhwinitpermparser.o.d",
+		"testtc_dll/armv5/udeb/testTC_udeb_objects.via",
+		"testtc_dll/armv5/udeb/testTC{000a0000}.def",
+		"testtc_dll/armv5/urel/wlanhwinit.o",
+		"testtc_dll/armv5/urel/wlanhwinit.o.d",
+		"testtc_dll/armv5/urel/wlanhwinitmain.o",
+		"testtc_dll/armv5/urel/wlanhwinitmain.o.d",
+		"testtc_dll/armv5/urel/wlanhwinitpermparser.o",
+		"testtc_dll/armv5/urel/wlanhwinitpermparser.o.d",	
+		"testtc_dll/armv5/urel/testTC_urel_objects.via",
+		"testtc_dll/armv5/urel/testTC{000a0000}.def",
+		"testtc_dll/tracecompile_testTC_dll_1000008d.done"
+	])
+	t.run()
+	
+	# General CLEAN test for trace compiler outputs
+	t = AntiTargetSmokeTest()
+	t.id = "101b"
+	t.name = "TC_general_CLEAN"
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/testTC/group/bld.inf -c armv5.tracecompiler CLEAN" 	
+	t.antitargets = [
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitmainTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitpermparserTraces.h"
+		]
+	t.addbuildantitargets('smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf', [
+		"testtc_dll/tracecompile_testTC_dll_1000008d.done"
+	])
+	t.run()
+			
+	t = SmokeTest()
+	t.id = "101c"
+	t.name = "TC_bv_path"
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/TC_featurevariant/group/bld.inf -c armv5.tracecompiler" 
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/HelloWorld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/HelloWorld.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/HelloWorld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/HelloWorld.exe.map",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/traces/HelloWorldTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/TC_featurevariant/traces/fixed_id.definitions",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/HelloWorld_0xe78a5aa3_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/include/platform/symbiantraces/autogen/HelloWorld_0xe78a5aa3_TraceDefinitions.h"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/TC_featurevariant/group/bld.inf', [
+		"helloworld_exe/armv5/udeb/HelloWorld.o",
+		"helloworld_exe/armv5/udeb/HelloWorld.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_udeb_objects.via",
+		"helloworld_exe/armv5/urel/HelloWorld.o",
+		"helloworld_exe/armv5/urel/HelloWorld.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_urel_objects.via",
+		"helloworld_exe/tracecompile_HelloWorld_exe_e78a5aa3.done"
+	])
+	t.run()
+
+	# 101d-101f test trace compiler auto mechanism, which is used to avoid wasting time on source 
+	# containing no osttraces.
+	# Trace compiler only runs when there are osttraces code in source. Raptor decides this by
+	# checking whether there is a "traces" or "traces_<prj_name>" folder in USERINCLUDE in a mmp file. 
+	t = SmokeTest()
+	t.id = "101d"
+	t.name = "TC_autorun1"
+	# Run - USERINCLUDE ../traces_autorun1
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf -c armv5.tracecompiler" + \
+			" -p autorun1.mmp"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o",
+		"test_/tracecompile_test_exe_00000001.done"
+	])
+	t.run()
+	
+	t = AntiTargetSmokeTest()
+	t.id = "101e"
+	t.name = "TC_autorun2"
+	# No run - USERINCLUDE ./tracesnotmatch
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf -c armv5.tracecompiler" + \
+			" -p autorun2.mmp CLEAN " + \
+			"&& sbs -b smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf -c armv5.tracecompiler" + \
+			" -p autorun2.mmp"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o",
+	])
+	t.addbuildantitargets('smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf', [
+		"test_/tracecompile_test_exe_00000001.done"
+	])
+	t.run()
+
+	t = AntiTargetSmokeTest()
+	t.id = "101f"
+	t.name = "TC_autorun3"
+	# No run - no UID
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf -c armv5.tracecompiler" + \
+			" -p autorun3.mmp CLEAN " + \
+			"&& sbs -b smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf -c armv5.tracecompiler" + \
+			" -p autorun3.mmp"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o",
+	])
+	t.addbuildantitargets('smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf', [
+		"test_/tracecompile_test_exe_00000001.done"
+	])
+	t.run()
+
+	# Test trace compiler doesn't run when it is switched off
+	# Trace compiler switch is off by default. To turn it on use variant ".tracecompiler". 
+	t = AntiTargetSmokeTest()
+	t.id = "101g"
+	t.name = "TC_switch_off"
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf -c armv5.tracecompiler" + \
+			" -p autorun1.mmp CLEAN " + \
+			"&& sbs -b smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf -c armv5 -p autorun1.mmp"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf', [
+		"test_/armv5/udeb/test.o",
+		"test_/armv5/urel/test.o"
+	])
+	t.addbuildantitargets('smoke_suite/test_resources/tracecompiler/TC_autorun/bld.inf', [
+		"test_/tracecompile_test_exe_00000001.done"
+	])
+	t.run()
+
+
+	t.id = "101"
+	t.name = "tracecompiler_general"
+	t.print_result()
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/tracecompiler_incremental.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,56 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.description = "Test incremental rebuilding with TC on"
+	t.id = "114a"
+	t.name = "tracecompiler_incremental_clean"
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/testTC/group/bld.inf -c armv5_urel.tracecompiler CLEAN"
+	t.run()
+
+	t.id = "114b"
+	t.name = "tracecompiler_incremental_prebuild"
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/testTC/group/bld.inf -c armv5_urel.tracecompiler -f - -m ${SBSMAKEFILE}"
+	t.countmatch = [ ["name='compile'",3] ]
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testTC.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testTC{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/testTC.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/testTC.dll.map",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitmainTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitpermparserTraces.h",	
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/fixed_id.definitions",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/testTC_0x1000008d_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/include/internal/symbiantraces/autogen/testTC_0x1000008d_TraceDefinitions.h"
+		]
+	t.run()
+
+	t.id = "114c"
+	t.name = "tracecompiler_incremental_rebuild"
+	t.command = "touch smoke_suite/test_resources/tracecompiler/testTC/src/wlanhwinit.cpp && sbs -b smoke_suite/test_resources/tracecompiler/testTC/group/bld.inf -c armv5_urel.tracecompiler -f - -m ${SBSMAKEFILE}"
+	t.countmatch = [ ["name='compile'",1] ]
+	t.targets = []
+	t.run()
+
+	t.id = "114"
+	t.name = "tracecompiler_incremental"
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/tracecompiler_variants.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,280 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+	# 102a - 102b Test running trace compiler on one mmp with different source files controlled macros. 
+	t = AntiTargetSmokeTest()
+	t.description = "Testcases (ID 102a - 102c) test trace compiler running with variants and macros"
+	
+	# 1st time build includes var_source1 and var_source2 for variant_source.mmp
+	t.id = "102a"
+	t.name = "TC_variant_source_var1"
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/variant_source/group/bld.inf -c default.tc_var1" + \
+			" --configpath=test/smoke_suite/test_resources/tracecompiler/variant_source"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/invariant_source.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/variant_source.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/invariant_source.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/variant_source.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/invariant_source.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/variant_source.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/invariant_source.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/variant_source.exe",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/inv_sourceTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/var_source1Traces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/var_source2Traces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/fixed_id.definitions",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/invariant_source_0x10000002_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/variant_source_0x10000003_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/include/platform/symbiantraces/autogen/invariant_source_0x10000002_TraceDefinitions.h",
+		"$(EPOCROOT)/epoc32/include/platform/symbiantraces/autogen/variant_source_0x10000003_TraceDefinitions.h"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/variant_source/group/bld.inf', [
+		"invariant_source_/armv5/udeb/inv_source.o",
+		"invariant_source_/armv5/udeb/inv_source.o.d",
+		"invariant_source_/armv5/urel/inv_source.o",
+		"invariant_source_/armv5/urel/inv_source.o.d",
+		"invariant_source_/winscw/udeb/inv_source.o",
+		"invariant_source_/winscw/udeb/inv_source.o.d",
+		"invariant_source_/winscw/urel/inv_source.o",
+		"invariant_source_/winscw/urel/inv_source.o.d",
+		"invariant_source_/tracecompile_invariant_source_exe_10000002.done",
+		"variant_source_/armv5/udeb/var_source1.o",
+		"variant_source_/armv5/udeb/var_source1.o.d",
+		"variant_source_/armv5/udeb/var_source2.o",
+		"variant_source_/armv5/udeb/var_source2.o.d",
+		"variant_source_/armv5/urel/var_source1.o",
+		"variant_source_/armv5/urel/var_source1.o.d",
+		"variant_source_/armv5/urel/var_source2.o",
+		"variant_source_/armv5/urel/var_source2.o.d",
+		"variant_source_/winscw/udeb/var_source1.o",
+		"variant_source_/winscw/udeb/var_source1.o.d",
+		"variant_source_/winscw/udeb/var_source2.o",
+		"variant_source_/winscw/udeb/var_source2.o.d",
+		"variant_source_/winscw/urel/var_source1.o",
+		"variant_source_/winscw/urel/var_source1.o.d",
+		"variant_source_/winscw/urel/var_source2.o",
+		"variant_source_/winscw/urel/var_source2.o.d",
+		"variant_source_/tracecompile_variant_source_exe_10000003.done"
+	])
+	t.antitargets = [
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/var_source3Traces.h"
+		]
+	t.addbuildantitargets('smoke_suite/test_resources/tracecompiler/variant_source/group/bld.inf', [
+		"variant_source_/armv5/udeb/var_source3.o",
+		"variant_source_/armv5/urel/var_source3.o",
+		"variant_source_/winscw/udeb/var_source3.o",
+		"variant_source_/winscw/urel/var_source3.o"
+	])
+	t.run()
+
+	# 2nd time build includes var_source1 and var_source3 for variant_source.mmp
+	t = SmokeTest()
+	t.id = "102b"
+	t.name = "TC_variant_source_var2"
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/variant_source/group/bld.inf -c default.tc_var2" + \
+			" --configpath=test/smoke_suite/test_resources/tracecompiler/variant_source"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/invariant_source.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/variant_source.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/invariant_source.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/variant_source.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/invariant_source.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/variant_source.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/invariant_source.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/variant_source.exe",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/inv_sourceTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/var_source1Traces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/var_source2Traces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/variant_source/traces/var_source3Traces.h",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/invariant_source_0x10000002_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/variant_source_0x10000003_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/include/platform/symbiantraces/autogen/invariant_source_0x10000002_TraceDefinitions.h",
+		"$(EPOCROOT)/epoc32/include/platform/symbiantraces/autogen/variant_source_0x10000003_TraceDefinitions.h"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/variant_source/group/bld.inf', [
+		"invariant_source_/armv5/udeb/inv_source.o",
+		"invariant_source_/armv5/udeb/inv_source.o.d",
+		"invariant_source_/armv5/urel/inv_source.o",
+		"invariant_source_/armv5/urel/inv_source.o.d",
+		"invariant_source_/winscw/udeb/inv_source.o",
+		"invariant_source_/winscw/udeb/inv_source.o.d",
+		"invariant_source_/winscw/urel/inv_source.o",
+		"invariant_source_/winscw/urel/inv_source.o.d",
+		"invariant_source_/tracecompile_invariant_source_exe_10000002.done",
+		"variant_source_/armv5/udeb/var_source1.o",
+		"variant_source_/armv5/udeb/var_source1.o.d",
+		"variant_source_/armv5/udeb/var_source3.o",
+		"variant_source_/armv5/udeb/var_source3.o.d",
+		"variant_source_/armv5/urel/var_source1.o",
+		"variant_source_/armv5/urel/var_source1.o.d",
+		"variant_source_/armv5/urel/var_source3.o",
+		"variant_source_/armv5/urel/var_source3.o.d",
+		"variant_source_/winscw/udeb/var_source1.o",
+		"variant_source_/winscw/udeb/var_source1.o.d",
+		"variant_source_/winscw/udeb/var_source3.o",
+		"variant_source_/winscw/udeb/var_source3.o.d",
+		"variant_source_/winscw/urel/var_source1.o",
+		"variant_source_/winscw/urel/var_source1.o.d",
+		"variant_source_/winscw/urel/var_source3.o",
+		"variant_source_/winscw/urel/var_source3.o.d",
+		"variant_source_/tracecompile_variant_source_exe_10000003.done"
+	])
+	t.run()
+
+	# Build multiple variants together, which involves different source files in one mmp
+	# Raptor only call trace compiler once no matter how many variants
+	# In this example, ".phone" 1 2 3 involve tc_a b c respectively, and all involve tc_main
+	t = SmokeTest()
+	t.id = "102c"
+	t.name = "TC_multiple_variants"
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/multiple_variants/group/bld.inf" + \
+			" -c armv5.phone1 -c armv5.phone2 -c armv5.phone3" + \
+			" --configpath=test/smoke_suite/test_resources/tracecompiler/multiple_variants"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5.phone1/udeb/tc_variants.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.phone1/urel/tc_variants.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.phone2/udeb/tc_variants.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.phone2/urel/tc_variants.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.phone3/udeb/tc_variants.exe",
+		"$(EPOCROOT)/epoc32/release/armv5.phone3/urel/tc_variants.exe",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/multiple_variants/traces/tc_mainTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/multiple_variants/traces/tc_aTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/multiple_variants/traces/tc_bTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/multiple_variants/traces/tc_cTraces.h",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/tc_variants_0x10000004_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/include/platform/symbiantraces/autogen/tc_variants_0x10000004_TraceDefinitions.h"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/multiple_variants/group/bld.inf', [
+		"tc_variants_/armv5.phone1/udeb/tc_main.o",
+		"tc_variants_/armv5.phone1/udeb/tc_a.o",
+		"tc_variants_/armv5.phone1/urel/tc_main.o",
+		"tc_variants_/armv5.phone1/urel/tc_a.o",
+		"tc_variants_/armv5.phone2/udeb/tc_main.o",
+		"tc_variants_/armv5.phone2/udeb/tc_b.o",
+		"tc_variants_/armv5.phone2/urel/tc_main.o",
+		"tc_variants_/armv5.phone2/urel/tc_b.o",
+		"tc_variants_/armv5.phone3/udeb/tc_main.o",
+		"tc_variants_/armv5.phone3/udeb/tc_c.o",
+		"tc_variants_/armv5.phone3/urel/tc_main.o",
+		"tc_variants_/armv5.phone3/urel/tc_c.o",
+		"tc_variants_/tracecompile_tc_variants_exe_10000004.done"
+	])	
+	t.run()
+
+	# 102d and 102e is to test a very rare situation, where one mmpfile includes 3 children mmpfiles, 
+	# which are guarded by macros. They share some source file, and two share the same UID3. 
+	# When build them together, Raptor should be able to distinguish them and run trace compiler 
+	# on each of them. 
+	t = SmokeTest()
+	t.id = "102d"
+	t.name = "TC_mum_children_mmps_build"
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/bld.inf" + \
+			" -c armv5.tc_var1 -c armv5.tc_var2 -c armv5.tc_var3" + \
+			" --configpath=test/smoke_suite/test_resources/tracecompiler/mum_children_mmps"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/child1.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/child1.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/child2.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/child2.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/child3.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/child3.exe",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces/traces_child1_exe/child1Traces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces/traces_child1_exe/commonTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces/traces_child2_exe/child2Traces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces/traces_child2_exe/commonTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces/traces_child3_exe/child3Traces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces/traces_child3_exe/commonTraces.h",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/child1_exe_0x11100001_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/child2_exe_0x11100002_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/child3_exe_0x11100002_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/include/platform/symbiantraces/autogen/child1_exe_0x11100001_TraceDefinitions.h",
+		"$(EPOCROOT)/epoc32/include/platform/symbiantraces/autogen/child2_exe_0x11100002_TraceDefinitions.h",
+		"$(EPOCROOT)/epoc32/include/platform/symbiantraces/autogen/child3_exe_0x11100002_TraceDefinitions.h"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/bld.inf', [
+		"child1_/armv5/udeb/child1.o",
+		"child1_/armv5/udeb/common.o",
+		"child1_/armv5/urel/child1.o",
+		"child1_/armv5/urel/common.o",
+		"child1_/tracecompile_child1_exe_11100001.done",
+		"child2_/armv5/udeb/child2.o",
+		"child2_/armv5/udeb/common.o",
+		"child2_/armv5/urel/child2.o",
+		"child2_/armv5/urel/common.o",
+		"child2_/tracecompile_child2_exe_11100002.done",
+		"child3_/armv5/udeb/child3.o",
+		"child3_/armv5/udeb/common.o",
+		"child3_/armv5/urel/child3.o",
+		"child3_/armv5/urel/common.o",
+		"child3_/tracecompile_child3_exe_11100002.done"
+	])
+	t.warnings = 3
+	t.run()
+
+	# Clean mmp A then build mmp B and C. As common.cpp is shared by A B and C, commonTraces.h would be 
+	# cleaned when cleaning mmp A. But as B and C aren't cleaned, Raptor wouldn't run trace compiler on
+	# B and C, thus commonTraces.h wouldn't be generated again, so be missing for mmp B and C.
+	# The solution is to use new trace path "traces/traces_<TARGET>_<TARGETTYPE>" instead of "traces" so shared 
+	# source has different copy of trace headers for different projects.
+	t = SmokeTest()
+	t.id = "102e"
+	t.name = "TC_mum_children_mmps_clean"
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/bld.inf" + \
+			" --configpath=test/smoke_suite/test_resources/tracecompiler/mum_children_mmps" + \
+			" -c armv5.tc_var1 CLEAN && " + \
+			"sbs -b smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/bld.inf" + \
+			" --configpath=test/smoke_suite/test_resources/tracecompiler/mum_children_mmps" + \
+			" -c armv5.tc_var2 -c armv5.tc_var3"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/child2.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/child2.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/child3.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/child3.exe",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces/traces_child2_exe/child2Traces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces/traces_child2_exe/commonTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces/traces_child3_exe/child3Traces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/mum_children_mmps/traces/traces_child3_exe/commonTraces.h",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/child2_exe_0x11100002_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/child3_exe_0x11100002_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/include/platform/symbiantraces/autogen/child2_exe_0x11100002_TraceDefinitions.h",
+		"$(EPOCROOT)/epoc32/include/platform/symbiantraces/autogen/child3_exe_0x11100002_TraceDefinitions.h"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/tracecompiler/mum_children_mmps/group/bld.inf', [
+		"child2_/armv5/udeb/child2.o",
+		"child2_/armv5/udeb/common.o",
+		"child2_/armv5/urel/child2.o",
+		"child2_/armv5/urel/common.o",
+		"child2_/tracecompile_child2_exe_11100002.done",
+		"child3_/armv5/udeb/child3.o",
+		"child3_/armv5/udeb/common.o",
+		"child3_/armv5/urel/child3.o",
+		"child3_/armv5/urel/common.o",
+		"child3_/tracecompile_child3_exe_11100002.done"
+	])
+	t.warnings = 3
+	t.run()
+
+
+	t.id = "102"
+	t.name = "tracecompiler_variants"
+	t.print_result()
+	
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/tracecompiler_whatlog.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,70 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest,SmokeTest
+import re
+
+def run():
+	t = SmokeTest()
+	t.description = "Trace Compiler Whatlog Clean"
+	t.id = "112a"
+	t.name = "tracecompiler_whatlog_clean"
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/testTC/group/bld2.inf -c armv5.tracecompiler CLEAN"
+	t.run()
+
+	t = CheckWhatSmokeTest()
+	t.description = "Trace Compiler Whatlog test"
+	t.id = "112b"
+	t.name = "tracecompiler_whatlog"
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/tracecompiler/testTC/group/bld2.inf -c armv5.tracecompiler -m ${SBSMAKEFILE} -f ${SBSLOGFILE} && cat ${SBSLOGFILE}"
+	t.hostossensitive = False
+	t.regexlinefilter = re.compile("^<(whatlog|export|build>|resource>|bitmap>)")
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testTC.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/testTC{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/testTC.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/testTC.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/testTC.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/testTC.dll.map",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitmainTraces.h",
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/wlanhwinitpermparserTraces.h",	
+		"$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/traces/fixed_id.definitions",
+		"$(EPOCROOT)/epoc32/ost_dictionaries/test_TC_0x1000008d_Dictionary.xml",
+		"$(EPOCROOT)/epoc32/include/platform/symbiantraces/autogen/test_TC_0x1000008d_TraceDefinitions.h"
+		]
+	t.stdout = [
+		"<whatlog bldinf='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/group/bld2.inf' mmp='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/group/test.TC.mmp' config='armv5_urel.tracecompiler'>",
+		"<whatlog bldinf='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/group/bld2.inf' mmp='$(SBS_HOME)/test/smoke_suite/test_resources/tracecompiler/testTC/group/test.TC.mmp' config='armv5_udeb.tracecompiler'>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/lib/testTC.dso</build>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/lib/testTC{000a0000}.dso</build>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/udeb/testTC.dll</build>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/udeb/testTC.dll.map</build>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/urel/testTC.dll</build>",
+		"<build>$(EPOCROOT)/epoc32/release/armv5/urel/testTC.dll.map</build>",
+		"<build>$(EPOCROOT)/epoc32/ost_dictionaries/test_TC_0x1000008d_Dictionary.xml</build>",
+		"<build>$(EPOCROOT)/epoc32/include/platform/symbiantraces/autogen/test_TC_0x1000008d_TraceDefinitions.h</build>"
+		]		
+	t.run("linux")
+	if t.result == CheckWhatSmokeTest.SKIP:
+		t.run("windows")
+
+	t.id = "112"
+
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/unfrozen.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,162 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "49"
+	t.name = "unfrozen"
+	t.description = "Test EXPORTUNFROZEN forced import library generation with both completely unfrozen and part-frozen examples"
+	t.command = "sbs -b smoke_suite/test_resources/unfrozen/bld.inf -k -c winscw -c armv5 CLEAN" \
+				" && sbs -b smoke_suite/test_resources/unfrozen/bld.inf -k -c winscw -c armv5"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/unfrozensymbols.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/unfrozensymbols{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols.dll.map",		
+		"$(EPOCROOT)/epoc32/release/armv5/lib/unfrozensymbols2.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/unfrozensymbols2{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols2.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols2.dll.map",				
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_unfrozen.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_unfrozen.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_unfrozen.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/unfrozensymbols.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/unfrozensymbols.dll.map",		
+		"$(EPOCROOT)/epoc32/release/winscw/urel/unfrozensymbols2.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/unfrozensymbols2.dll.map",				
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test_unfrozen.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test_unfrozen.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols.dll.map",		
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols2.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols2.dll.map",				
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test_unfrozen.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test_unfrozen.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test_unfrozen.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/unfrozensymbols.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/unfrozensymbols.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/unfrozensymbols2.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/unfrozensymbols2.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test_unfrozen.exe"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/unfrozen/bld.inf', [
+		"unfrozensymbols_dll/armv5/urel/unfrozensymbols{000a0000}.def",
+		"unfrozensymbols_dll/armv5/urel/unfrozensymbols{000a0000}.dso",
+		"unfrozensymbols_dll/armv5/urel/unfrozensymbols_urel_objects.via",
+		"unfrozensymbols_dll/armv5/urel/unfrozensymbols.o.d",
+		"unfrozensymbols_dll/armv5/urel/unfrozensymbols.o",
+		"unfrozensymbols2_dll/armv5/urel/unfrozensymbols2{000a0000}.def",
+		"unfrozensymbols2_dll/armv5/urel/unfrozensymbols2{000a0000}.dso",
+		"unfrozensymbols2_dll/armv5/urel/unfrozensymbols2_urel_objects.via",
+		"unfrozensymbols2_dll/armv5/urel/unfrozensymbols.o.d",
+		"unfrozensymbols2_dll/armv5/urel/unfrozensymbols.o",
+		"test_unfrozen_/armv5/urel/test_unfrozen_urel_objects.via",
+		"test_unfrozen_/armv5/urel/test.o.d",
+		"test_unfrozen_/armv5/urel/test.o",		
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols.UID.CPP",
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols.o",
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols_UID_.o",
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols.dep",
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols_UID_.dep",
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols.o.d",
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols_UID_.o.d",
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols.lib",
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols.inf",
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols.dll",
+		"unfrozensymbols_dll/winscw/urel/unfrozensymbols.def",	
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols2.UID.CPP",
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols.o",
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols2_UID_.o",
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols.dep",
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols2_UID_.dep",
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols.o.d",
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols2_UID_.o.d",
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols2.lib",
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols2.inf",
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols2.dll",
+		"unfrozensymbols2_dll/winscw/urel/unfrozensymbols2.def",				
+		"test_unfrozen_/winscw/urel/test_unfrozen.UID.CPP",
+		"test_unfrozen_/winscw/urel/test.o",
+		"test_unfrozen_/winscw/urel/test_unfrozen_UID_.o",
+		"test_unfrozen_/winscw/urel/test.dep",
+		"test_unfrozen_/winscw/urel/test_unfrozen_UID_.dep",
+		"test_unfrozen_/winscw/urel/test.o.d",
+		"test_unfrozen_/winscw/urel/test_unfrozen_UID_.o.d",		
+		"unfrozensymbols_dll/armv5/udeb/unfrozensymbols{000a0000}.def",
+		"unfrozensymbols_dll/armv5/udeb/unfrozensymbols{000a0000}.dso",
+		"unfrozensymbols_dll/armv5/udeb/unfrozensymbols_udeb_objects.via",
+		"unfrozensymbols_dll/armv5/udeb/unfrozensymbols.o.d",
+		"unfrozensymbols_dll/armv5/udeb/unfrozensymbols.o",
+		"unfrozensymbols_dll/armv5/udeb/unfrozensymbols.o",		
+		"unfrozensymbols2_dll/armv5/udeb/unfrozensymbols2{000a0000}.def",
+		"unfrozensymbols2_dll/armv5/udeb/unfrozensymbols2{000a0000}.dso",
+		"unfrozensymbols2_dll/armv5/udeb/unfrozensymbols2_udeb_objects.via",
+		"unfrozensymbols2_dll/armv5/udeb/unfrozensymbols.o.d",
+		"unfrozensymbols2_dll/armv5/udeb/unfrozensymbols.o",
+		"unfrozensymbols2_dll/armv5/udeb/unfrozensymbols.o",				
+		"test_unfrozen_/armv5/udeb/test_unfrozen_udeb_objects.via",
+		"test_unfrozen_/armv5/udeb/test.o.d",
+		"test_unfrozen_/armv5/udeb/test.o",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols.UID.CPP",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols.o",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols_UID_.o",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols.dep",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols_UID_.dep",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols.o.d",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols_UID_.o.d",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols.lib",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols.inf",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols.dll",
+		"unfrozensymbols_dll/winscw/udeb/unfrozensymbols.def",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols2.UID.CPP",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols.o",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols2_UID_.o",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols.dep",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols2_UID_.dep",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols.o.d",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols2_UID_.o.d",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols2.lib",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols2.inf",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols2.dll",
+		"unfrozensymbols2_dll/winscw/udeb/unfrozensymbols2.def",			
+		"test_unfrozen_/winscw/udeb/test_unfrozen.UID.CPP",
+		"test_unfrozen_/winscw/udeb/test.o",
+		"test_unfrozen_/winscw/udeb/test_unfrozen_UID_.o",
+		"test_unfrozen_/winscw/udeb/test.dep",
+		"test_unfrozen_/winscw/udeb/test_unfrozen_UID_.dep",
+		"test_unfrozen_/winscw/udeb/test.o.d",
+		"test_unfrozen_/winscw/udeb/test_unfrozen_UID_.o.d"
+	])
+	# Match both ARMV5 (elf2e32) and WINSCW (makedef) unfrozen export warnings and confirm the number found.  Format:
+	# Elf2e32: Warning: New Symbol _ZN10CMessenger5NewLCER12CConsoleBaseRK7TDesC16 found, export(s) not yet Frozen
+	# F:/path/epocroot/epoc32/build/unfrozen/c_939fe933110ed5aa/unfrozensymbols_dll/winscw/udeb/unfrozensymbols.def(3) : ?NewLC@CMessenger@@SAPAV1@AAVCConsoleBase@@ABVTDesC16@@@Z @1
+	# More matches are expected with elf2e32 due to extra build impedimenta in EABI builds.
+	t.countmatch = [
+				[".*Elf2e32: Warning: New Symbol .* found, export\(s\) not yet Frozen.*", 14],
+				[".*\.def\(\d\) : .*@\d.*", 10]
+				]
+	t.warnings = 8
+	# ABIv1 .lib files are not generated on Linux
+	t.run()
+	
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/unfrozen_savespace.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,93 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import AntiTargetSmokeTest
+
+def run():
+
+	t = AntiTargetSmokeTest()
+	t.id = "99"
+	t.name = "unfrozen_savespace"
+
+	t.command = "sbs -b smoke_suite/test_resources/unfrozen/bld.inf -k -c winscw -c armv5 CLEAN" \
+				" && sbs -b smoke_suite/test_resources/unfrozen/bld.inf -c winscw.savespace -c armv5.savespace"
+
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/lib/unfrozensymbols.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/unfrozensymbols{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/unfrozensymbols2.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/lib/unfrozensymbols2{000a0000}.dso",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols2.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/unfrozensymbols2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_unfrozen.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_unfrozen.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test_unfrozen.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/unfrozensymbols.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/unfrozensymbols.dll.map",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/unfrozensymbols2.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/unfrozensymbols2.dll.map",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test_unfrozen.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/test_unfrozen.exe.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols2.dll",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols2.dll.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/unfrozensymbols2.dll.map",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test_unfrozen.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test_unfrozen.exe.sym",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test_unfrozen.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/unfrozensymbols.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/unfrozensymbols.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/unfrozensymbols2.dll",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/unfrozensymbols2.lib",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/test_unfrozen.exe"
+		]
+
+	t.antitargets = []
+
+	t.addbuildantitargets('smoke_suite/test_resources/unfrozen/bld.inf', [
+		"test_unfrozen_/armv5/udeb",
+		"test_unfrozen_/armv5/urel",
+		"test_unfrozen_/winscw/udeb",
+		"test_unfrozen_/winscw/urel"
+		# TODO: Add these anti targets once we figure out how to actually delete
+		# them.
+		# "unfrozensymbols2_dll/armv5/udeb",
+		# "unfrozensymbols2_dll/armv5/urel",
+		# "unfrozensymbols2_dll/winscw/udeb",
+		# "unfrozensymbols2_dll/winscw/urel",
+		# "unfrozensymbols_dll/armv5/udeb",
+		# "unfrozensymbols_dll/armv5/urel",
+		# "unfrozensymbols_dll/winscw/udeb",
+		# "unfrozensymbols_dll/winscw/urel"
+		] )
+
+	t.countmatch = [
+			[".*Elf2e32: Warning: New Symbol .* found, export\(s\) not yet Frozen.*", 14],
+			[".*\.def\(\d\) : .*@\d.*", 10]
+		]
+
+	t.warnings = 8
+
+	t.run()
+
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/variantplatforms.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,38 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "300"
+	t.name = "variantplatforms"
+	t.description = "Can all the variant platforms be built at the same time."
+	
+	variantplatforms = ["armv5", "armv6", "armv7", "arm9e"]
+	
+	t.usebash = True
+	t.command = "sbs -b smoke_suite/test_resources/variantplatforms/bld.inf -f-"
+	t.mustmatch_singleline = []
+	
+	for vp in variantplatforms:
+		t.command += " -c " + vp
+		t.mustmatch_singleline.append("building variant platform " + vp)
+
+	t.run()
+	
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/whatcomp.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,94 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+import generic_path
+import os
+
+def run():
+	t = SmokeTest()
+	t.usebash = True
+	result = SmokeTest.PASS
+
+	abs_epocroot = os.path.abspath(os.environ["EPOCROOT"])
+	cwd = os.getcwd().replace("\\","/")
+
+	relative_epocroot = os.path.relpath(abs_epocroot.replace("\\","/"),cwd)
+
+	
+	description = """This tests the whatcomp filter.  As a byproduct it uses (and thus smoke-tests) sbs_filter.py"""
+	command = "sbs -b smoke_suite/test_resources/simple/bld.inf -c %s -m ${SBSMAKEFILE} -f ${SBSLOGFILE} what  && " + \
+		  "EPOCROOT='%s' sbs_filter --filters FilterWhatComp < ${SBSLOGFILE} &&" % relative_epocroot + \
+		  "EPOCROOT='%s' sbs_filter --filters FilterWhatComp < ${SBSLOGFILE}"  % abs_epocroot
+	targets = [
+		]	
+	buildtargets = [
+		]
+
+	mustmatch_pre = [
+		"-- abld -w",
+		".*Chdir .*/smoke_suite/test_resources/simple.*",
+		relative_epocroot + "/epoc32/release/armv5/urel/test.exe",
+		relative_epocroot + "/epoc32/release/armv5/urel/test.exe.map",
+		abs_epocroot + "/epoc32/release/armv5/urel/test.exe",
+		abs_epocroot + "/epoc32/release/armv5/urel/test.exe.map",
+	] 
+	
+	if os.sep == '\\':
+		mustmatch = [ i.replace("\\", "\\\\" ).replace("/","\\\\") for i in mustmatch_pre ]
+	else:
+		mustmatch = mustmatch_pre
+
+	mustnotmatch = [
+	"error: no (CHECK|WHAT) information found"
+	]
+	warnings = 0
+	
+	t.id = "0106a"
+	t.name = "whatcomp_basic"
+	t.description = description
+	t.command = command % "arm.v5.urel.gcce4_4_1"
+	t.targets = targets
+	t.mustmatch = mustmatch
+	t.mustnotmatch = mustnotmatch
+	t.warnings = warnings
+	t.run()
+
+	t.id = "0106b"
+	t.name = "whatcomp_component_repeated"
+	t.description = """
+			It is possible for what information about a component to not be grouped
+			(i.e. for multiple whatlogs tags relating to a single component to be 
+			interspersed with whatlog tags relating to other components).  
+			Raptor must cope with that and must *not* report missing files under 
+			the wrong component name."""
+	t.command = "sbs_filter --filters=FilterWhatComp < smoke_suite/test_resources/logexamples/what_component_repeated.log"
+	t.targets = []
+	t.mustmatch = [] 
+	t.mustmatch_multiline = [ 
+		"Chdir y:.ext.app.emailwizard.*epoc32.data.something.*"+
+		"Chdir y:.sf.mw.gsprofilesrv.ftuwizardmodel.*epoc32.release.armv5.something.*"+
+		"Chdir y:.ext.app.emailwizard.*epoc32.data.something_else"
+		]
+
+	t.mustnotmatch = []
+	t.warnings = 0
+	t.run()
+
+	t.id = "0106"
+	t.name = "whatcomp"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/whatlog_cache.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,144 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+import os
+
+def run():
+	t = SmokeTest()
+	t.id = "77"
+	t.name = "whatlog_cache"
+	t.description = """Test sbsv2cache.py cache file generation using Raptor .whatlog variant output.
+		This is currently a Windows only activity due to CBR tools restrictions."""
+	t.usebash = True
+
+	if 'SBS_PYTHON' in os.environ:
+		pythonRun = "$(SBS_PYTHON)"
+	else:
+		pythonRun = "$(SBS_HOME)/win32/python264/python.exe"
+
+	# Build something using the .whatlog variant.  Take the build log and give it to sbsv2cache.py, deducing
+	# the location of the generated cache file from the verbose output.  If generated, dump the cache file to
+	# STDOUT so we can validate the content in this test script.  Clean up when finished.
+	t.command = """sbs -b smoke_suite/test_resources/simple_gui/Bld.inf -f ${SBSLOGFILE} -m ${SBSMAKEFILE} -c armv5.whatlog -c winscw.whatlog
+		CACHEFILE=`%s $SBS_HOME/bin/sbsv2cache.py -v -s -o $EPOCROOT/epoc32/build/abldcache -l $SBSLOGFILE | sed -n \'s#Creating: ##p\'`
+		if [ -n \"${CACHEFILE:+x}\" ]; then
+			cat $CACHEFILE
+		fi
+		rm -r $EPOCROOT/epoc32/build/abldcache""" % pythonRun
+		
+	t.targets = [
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/helloworld.mbm",
+		"$(EPOCROOT)/epoc32/include/helloworld.rsg",
+		"$(EPOCROOT)/epoc32/data/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/data/z/private/10003a3f/apps/helloworld_reg.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/apps/helloworld.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/private/10003a3f/apps/helloworld_reg.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/private/10003a3f/apps/helloworld_reg.rsc",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/helloworld.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/urel/helloworld.exe.map",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/helloworld.exe",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/helloworld.exe.map"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/simple_gui/Bld.inf', [
+		"helloworld_exe/helloworld.mbm_bmconvcommands",
+		"helloworld_exe/helloworld_HelloWorld_sc.rpp",
+		"helloworld_exe/helloworld_HelloWorld_sc.rpp.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_Application.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Application.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppUi.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppUi.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppView.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_AppView.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_Document.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Document.o.d",
+		"helloworld_exe/armv5/udeb/HelloWorld_Main.o",
+		"helloworld_exe/armv5/udeb/HelloWorld_Main.o.d",
+		"helloworld_exe/armv5/udeb/helloworld_udeb_objects.via",
+		"helloworld_exe/armv5/urel/HelloWorld_Application.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Application.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_AppUi.o",
+		"helloworld_exe/armv5/urel/HelloWorld_AppUi.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_AppView.o",
+		"helloworld_exe/armv5/urel/HelloWorld_AppView.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_Document.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Document.o.d",
+		"helloworld_exe/armv5/urel/HelloWorld_Main.o",
+		"helloworld_exe/armv5/urel/HelloWorld_Main.o.d",
+		"helloworld_exe/armv5/urel/helloworld_urel_objects.via",
+		"helloworld_exe/winscw/udeb/helloworld.UID.CPP",
+		"helloworld_exe/winscw/udeb/HelloWorld_Application.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_Application.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Application.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppUi.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppUi.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppUi.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppView.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppView.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_AppView.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_Document.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_Document.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Document.o.d",
+		"helloworld_exe/winscw/udeb/HelloWorld_Main.dep",
+		"helloworld_exe/winscw/udeb/HelloWorld_Main.o",
+		"helloworld_exe/winscw/udeb/HelloWorld_Main.o.d",
+		"helloworld_exe/winscw/udeb/helloworld_UID_.dep",
+		"helloworld_exe/winscw/udeb/helloworld_UID_.o",
+		"helloworld_exe/winscw/udeb/helloworld_UID_.o.d",
+		"helloworld_exe/winscw/urel/helloworld.UID.CPP",
+		"helloworld_exe/winscw/urel/HelloWorld_Application.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_Application.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Application.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_AppUi.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_AppUi.o",
+		"helloworld_exe/winscw/urel/HelloWorld_AppUi.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_AppView.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_AppView.o",
+		"helloworld_exe/winscw/urel/HelloWorld_AppView.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_Document.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_Document.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Document.o.d",
+		"helloworld_exe/winscw/urel/HelloWorld_Main.dep",
+		"helloworld_exe/winscw/urel/HelloWorld_Main.o",
+		"helloworld_exe/winscw/urel/HelloWorld_Main.o.d",
+		"helloworld_exe/winscw/urel/helloworld_UID_.dep",
+		"helloworld_exe/winscw/urel/helloworld_UID_.o",
+		"helloworld_exe/winscw/urel/helloworld_UID_.o.d",
+		"helloworld_reg_exe/helloworld_reg_HelloWorld_reg_sc.rpp.d"
+	])
+	t.countmatch = [
+		["\$self->{abldcache}->{.*\\\\test\\\\smoke_suite\\\\test_resources\\\\simple_gui target (armv5|winscw) (udeb|urel) -what\'} =", 4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\data\\\\\\\\z\\\\\\\\private\\\\\\\\10003a3f\\\\\\\\apps\\\\\\\\helloworld_reg.rsc\'", 4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\data\\\\\\\\z\\\\\\\\resource\\\\\\\\apps\\\\\\\\helloworld.mbm\'", 4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\data\\\\\\\\z\\\\\\\\resource\\\\\\\\apps\\\\\\\\helloworld.rsc\'", 4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\include\\\\\\\\helloworld.rsg\'", 4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\release\\\\\\\\(armv5|winscw)\\\\\\\\(udeb|urel)\\\\\\\\helloworld.exe\'",4],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\release\\\\\\\\(armv5|winscw)\\\\\\\\(udeb|urel)\\\\\\\\helloworld.exe.map\'", 3],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\release\\\\\\\\winscw\\\\\\\\(udeb|urel)\\\\\\\\z\\\\\\\\private\\\\\\\\10003a3f\\\\\\\\apps\\\\\\\\helloworld_reg.rsc\'", 2],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\release\\\\\\\\winscw\\\\\\\\(udeb|urel)\\\\\\\\z\\\\\\\\resource\\\\\\\\apps\\\\\\\\helloworld.mbm\'", 2],
+		[".*\'.*\\\\\\\\epoc32\\\\\\\\release\\\\\\\\winscw\\\\\\\\(udeb|urel)\\\\\\\\z\\\\\\\\resource\\\\\\\\apps\\\\\\\\helloworld.rsc\'", 2],
+		["\$self->{abldcache}->{\'plats\'} =", 1],
+		[".*\'ARMV5\'", 1],
+		[".*\'WINSCW\'", 1]
+	]
+	t.run("windows")
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/winscw_resource.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,36 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "38"
+	t.name = "winscw_resource"
+	t.command = "sbs -b smoke_suite/test_resources/resource/group/bld.inf -c " \
+			+ "winscw RESOURCE"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/include/testresource.rsg",
+		"$(EPOCROOT)/epoc32/include/testresource.hrh",
+		"$(EPOCROOT)/epoc32/data/z/resource/testresource/testresource.r01",
+		"$(EPOCROOT)/epoc32/data/z/resource/testresource/testresource.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/testresource/testresource.r01",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/testresource/testresource.r01",
+		"$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/testresource/testresource.rsc",
+		"$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/testresource/testresource.rsc"
+		]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/wrong_projectname.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,29 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "46"
+	t.name = "wrong_projectname"
+	t.description = "Test -p with wrong project name"
+	t.command = "sbs -b smoke_suite/test_resources/basics/helloworld/Bld.inf " \
+			+ "-p wrongname1.mmp -p wrongname2.mmp"
+	t.targets = []
+	t.warnings = 2 # One for armv5, one for winscw.
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/xml_invalid_chars.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,59 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest, ReplaceEnvs
+from xml.etree.ElementTree import parse
+
+def run():
+	t = SmokeTest()
+	t.id = "84"
+	t.name = "xml_invalid_chars"
+	t.description = """Tests the validity of XML when output with characters
+			not-allowed in XML are sent to the filters
+			"""
+	t.command = "sbs -b smoke_suite/test_resources/xml_invalid_chars/bld.inf " \
+			+ "-c armv5"
+	# The warning that causes the invalid characters to appear in the XML log
+	t.warnings = 1
+	t.targets = [
+		"$(EPOCROOT)/epoc32/release/armv5/urel/test.exe",
+		"$(EPOCROOT)/epoc32/release/armv5/udeb/test.exe"
+		]
+	t.addbuildtargets('smoke_suite/test_resources/xml_invalid_chars/bld.inf', [
+		"test_/armv5/urel/test_urel_objects.via",
+		"test_/armv5/urel/test.o.d",
+		"test_/armv5/urel/test.o",
+		"test_/armv5/udeb/test_udeb_objects.via",
+		"test_/armv5/udeb/test.o.d",
+		"test_/armv5/udeb/test.o"
+	])
+		
+	t.run()
+	
+	if t.result == SmokeTest.PASS:
+		
+		print "Testing validity of XML..."
+		
+		log = "$(EPOCROOT)/epoc32/build/smoketestlogs/xml_invalid_chars.log"
+		logfile = open(ReplaceEnvs(log), "r")
+		
+		try:
+			tree = parse(logfile)
+		except:
+			t.result = SmokeTest.FAIL
+	
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/zip_export_plus_clean.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,64 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import SmokeTest, AntiTargetSmokeTest, ReplaceEnvs
+import re
+
+def run():
+	markerfile = re.sub("(\\\\|\/|:|;| )", "_",
+			ReplaceEnvs("$(SBS_HOME)_test_smoke_suite_test_resources_simple_zip_export_archive.zip$(EPOCROOT)_epoc32_testunzip.unzipped"))
+	
+	t = SmokeTest()
+	
+	t.id = "0024a"
+	t.name = "zip_export"
+	t.command = "sbs -b smoke_suite/test_resources/simple_zip_export/bld.inf"
+	t.targets = [
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile1.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile2.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile3.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile4.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefilelinuxbin",
+		"$(EPOCROOT)/epoc32/build/" + markerfile
+	]
+	t.run()
+	
+	t.id = "0024aa"
+	t.name = "zip_export_execute_permissions"
+	t.usebash = True
+	t.targets = []
+	t.command = "ls -l $(EPOCROOT)/epoc32/testunzip/archive/archivefilelinuxbin"
+	t.mustmatch = ["-[rw-]{2}x[rw-]{2}x[rw-]{2}x"]
+	t.run("linux")
+	
+	t = AntiTargetSmokeTest()
+	t.id = "0024b"
+	t.name = "zip_export_reallyclean"
+	t.command = "sbs -b smoke_suite/test_resources/simple_zip_export/bld.inf REALLYCLEAN"
+	t.antitargets = [
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile1.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile2.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile3.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefile4.txt",
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefilelinuxbin",
+		"$(EPOCROOT)/epoc32/build/" + markerfile
+	]
+	t.run()
+	
+	t.id = "24"
+	t.name = "zip_export_plus_clean"
+	t.print_result()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/smoke_suite/zip_export_what.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,46 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+from raptor_tests import CheckWhatSmokeTest, ReplaceEnvs
+import re
+
+def run():
+	markerfile = re.sub("(\\\\|\/|:|;| )", "_",
+			ReplaceEnvs("$(SBS_HOME)_test_smoke_suite_test_resources_simple_zip_export_archive.zip$(EPOCROOT)_epoc32_testunzip.unzipped"))
+	
+	t = CheckWhatSmokeTest()
+	t.id = "25"
+	t.name = "zip_export_what"
+	t.command = "sbs --what " + \
+			"-b smoke_suite/test_resources/simple_zip_export/bld.inf"
+	t.stdout = [
+		'$(EPOCROOT)/epoc32/testunzip/archive/archivefile1.txt',
+		'$(EPOCROOT)/epoc32/testunzip/archive/archivefile2.txt',
+		'$(EPOCROOT)/epoc32/testunzip/archive/archivefile3.txt',
+		'$(EPOCROOT)/epoc32/testunzip/archive/archivefile4.txt',
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefilelinuxbin"
+	]
+	
+	t.targets = [
+		'$(EPOCROOT)/epoc32/testunzip/archive/archivefile1.txt',
+		'$(EPOCROOT)/epoc32/testunzip/archive/archivefile2.txt',
+		'$(EPOCROOT)/epoc32/testunzip/archive/archivefile3.txt',
+		'$(EPOCROOT)/epoc32/testunzip/archive/archivefile4.txt',
+		"$(EPOCROOT)/epoc32/testunzip/archive/archivefilelinuxbin",
+		"$(EPOCROOT)/epoc32/build/" + markerfile
+	]
+	t.run()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/spec/spec.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build http://symbian.com/xml/build/1_0.xsd">
+
+    <!-- test build specification -->
+
+    <spec name="world">
+        <interfaceRef ref="Symbian.EXE"/>
+	<var>
+	    <set name="SRC" value="$(ROOT)/src"/>
+	</var>
+    </spec>
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/timing_tests/parse_time_exports_mmps.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,77 @@
+
+from raptor_tests import SmokeTest, ReplaceEnvs
+import os
+
+def generate_files():
+	try:
+		os.makedirs(ReplaceEnvs("$(SBS_HOME)/test/timing_tests/test_resources/parse_time"))
+	except:
+		pass
+	bldinf_path = ReplaceEnvs("$(SBS_HOME)/test/timing_tests/test_resources/parse_time/bld.inf")
+	bldinf = open(bldinf_path, "w")
+	bldinf_content = """prj_mmpfiles
+"""
+	test_dir = ReplaceEnvs("$(SBS_HOME)/test/timing_tests/test_resources/parse_time")
+	for number in range(0, 250):
+		mmp_path = ("parse_timing_" + str(number).zfill(3) + ".mmp")
+		mmp_file = open((test_dir + "/" + mmp_path), "w")
+		mmp_file.write("""targettype	none
+""")
+		mmp_file.close()
+		bldinf_content += (mmp_path + "\n")
+		
+	bldinf_content += "\nprj_exports\n"
+
+	for number1 in range(0, 10):
+		source_dir = ("export_source_" + str(number1))
+		try:
+			os.mkdir(test_dir + "/" + source_dir)
+		except:
+			pass
+		
+		for number2 in range (0, 10):
+			source_file = ("/file_" + str(number2) + ".txt ")
+			export_file = open((test_dir + "/" + source_dir + source_file), "w")
+			export_file.write(str(number2))
+			export_file.close()
+			
+			for number3 in range (0, 10):
+				dest_dir = ("epoc32/include/export_destination_" + \
+						str(number1) + str(number2) + str(number3))
+				
+				for number4 in range(0, 10):
+					bldinf_content += source_dir + source_file + dest_dir + \
+							"/export_destination_" + str(number4) + "\n"
+	bldinf.write(bldinf_content)
+	bldinf.close()
+	
+	
+def delete_files():
+	import shutil
+	
+	test_dir = ReplaceEnvs("$(SBS_HOME)/test/timing_tests/test_resources/parse_time")
+	objects = os.listdir(test_dir)
+	for object in objects:
+		object_path = (test_dir + "/" + object)
+		if os.path.isfile(object_path):
+			os.remove(object_path)
+		else:
+			shutil.rmtree(object_path)
+	
+
+def run():
+	
+	generate_files()
+	
+	t = SmokeTest()
+	
+	t.id = "1"
+	t.name = "parse_time_exports_mmps"
+	t.description = """Test to measure time taken to parse a large number of
+			exports and mmps"""
+	t.command = "sbs -b timing_tests/test_resources/parse_time/bld.inf -n " + \
+			"-c armv5_urel --toolcheck=off --timing"
+	t.run()
+	
+	delete_files()
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/data/ignore.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/666.xsd">
+
+	<!-- the 666 schema indicates that the file should be ignored -->
+
+	<var name="should_be_ignored"/>
+    
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/data/old_bad.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/1_0.xsd">
+
+	<!-- old 1.0 schema config files should generate errors in
+	     the new 2.0 schema parser, but should not crash it. -->
+
+	<config name="foo"/>
+	<combine name="foo"/>
+    
+	<var name="var1_0"/>
+	<alias name="alias1_0" meaning="nothing"/>
+    
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/data/old_ok.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/1_0.xsd">
+
+	<!-- old 1.0 schema interface files should still be readable by
+	     the new 2.0 schema parser -->
+	
+    <!-- a base interface -->
+
+	<interface name="base.1_0" abstract="true">
+		<param name='A'/>
+		<param name='B' default=''/>
+		<param name='C'/>
+    </interface>
+    
+    <!-- extends the base interface -->
+
+	<interface name="interface.1_0" extends="base.1_0" flm="flm.flm">
+		<param name='D'/>
+		<param name='C'/>
+    </interface>
+    
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/data/sbs_init.xml	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+
+<build xmlns="http://symbian.com/xml/build"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://symbian.com/xml/build build/2_0.xsd">
+
+  <!-- defaults for Raptor -->
+
+  <var name="defaults.init">
+    <!-- environment variables used in this configuration -->
+    <env name="EPOCROOT" default="/" type="path"/>
+
+    <!-- default parameter settings -->
+
+    <!-- Make command parameter file -->
+    <set name="makeEngine" value="make"/>
+
+    <!-- Location of the highest level makefile -->
+    <set name="topMakefile" value="$(EPOCROOT)/epoc32/build/Makefile"/>
+
+    <!-- Name of the build logging file -->
+    <set name="logFileName" value="$(EPOCROOT)/epoc32/build/Makefile.%TIME.log"/>
+
+    <!-- Default build configuration name -->
+    <set name="defaultConfig" value="default"/>
+
+    <!-- Names of standard build files -->
+    <set name="buildInformation" value="bld.inf"/>
+    <set name="systemDefinition" value="System_Definition.xml"/>
+
+    <!-- Standard directories -->
+    <set name="systemConfig" value="lib/config"/>
+    <set name="systemFLM" value="lib/flm"/>
+    <set name="systemPlugins" value="python/plugins"/>
+    <set name="systemDefinitionBase" value="."/>
+
+    <!-- Do not print any information messages? -->
+    <set name="quiet" value="false"/>
+
+    <!-- How many jobs to run in parallel? (for make -j) -->
+    <set name="jobs" value="4"/>
+
+    <!-- How many attempts to run a job before recording an error?
+    This is useful for builds that can have transient failures. -->
+    <set name="tries" value="1"/>
+
+    <!-- Carry on trying to build even if some commands fail? -->
+    <set name="keepGoing" value="false"/>
+
+    <!-- Can command line options override values in this file? -->
+    <set name="allowCommandLineOverrides" value="true"/>
+
+    <!-- Do we use a bld.inf or System_Definition.xml if both are in the CWD -->
+    <set name="preferBuildInfoToSystemDefinition" value="false"/>
+
+    <!-- Always use ignore OS detection? -->
+    <set name="ignoreOsDetection" value="false"/>
+
+    <!-- Always use a specific list of filters -->
+    <set name="filterList" value="FilterTerminal,FilterLogfile"/>
+
+  </var>
+
+</build>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/filter_utils_unit.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,175 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# Test generic classes available for use in plugin log filters
+#
+
+
+import unittest
+import filter_utils
+
+
+testRecipeTemplate = \
+"""<recipe name='%s' target='recipe_target' host="recipe_host" layer='recipe_layer' component='recipe_component' bldinf='recipe_bldinf' mmp='recipe_mmp' config='recipe_config' platform='recipe_platform' phase='recipe_phase' source='recipe_source'>"
+<![CDATA[
+%s
+]]><time start='0123456789.123456789' elapsed='99.999' />
+<status exit='%s' %s attempt='%d' />
+</recipe>"""
+
+testRecipeCalls = \
+"""+ call_to_some_tool -a arg1 -a arg2 -a arg3
++ call_to_some_other_tool -a arg1 -a arg2 -a arg3"""
+testRecipeOutput = \
+"""output from some tool or other
+some more output from some tool or other"""
+
+# Fall-back warning and error examples
+genericWarnings = \
+"""Warning: generic warning from some tool or other
+Warning: another generic warning from some tool or other"""
+genericErrors = \
+"""Error: generic error from some tool or other
+Error: another generic error from some tool or other"""
+
+# Real world examples of mwccsym2, mwldsym2 and mwwinrc errors and warnings
+mwWarnings = \
+"""mwldsym2.exe: warning: Multiply defined symbol: ___get_MSL_init_count in
+..\sf\os\cellularsrv\telephonyserver\etelserverandcore\SETEL\ET_PHONE.CPP:36: warning: cannot find matching deallocation function for 'CReqEntry'"""
+mwErrors = \
+"""HelloWorld.cpp:21: undefined identifier 'stuff'
+mwldsym2.exe: Specified file 'HelloWorld.o' not found"""
+mwBenign = \
+"""..\sf\os\lbs\locationrequestmgmt\locationserver\src\locserver.cpp:223: note: NOTE: CLocServer::DoNewSessionL. aMessage and aVersion not used. TBD"""
+
+
+class TestFilterUtils(unittest.TestCase):
+	
+	def setUp(self):
+		self.__recipeFactory = filter_utils.RecipeFactory()
+	
+	def __createRecipeLines(self, aName, aExit, aAttempt, aCode=None, aExtras=""):
+		"""Customise the recipe test template for differing recipe tests
+		The 'code' attribute of 'status' is optional, and different errors/warnings
+		etc. can be added via aExtras"""
+		code = ""
+		if aCode:
+			code = "code='%d'" % aCode
+		midSection = testRecipeCalls + "\n" + testRecipeOutput
+		if aExtras:
+			midSection += "\n" + aExtras
+		recipe = testRecipeTemplate % (aName, midSection, aExit, code, aAttempt)
+		return recipe.split("\n")
+	
+	def __checkListContent(self, aExpected, aActual, aPrefixIgnore=""):
+		"""Compare the content of two lists of strings.
+		Optionally trim a prefix from the expected results."""
+		for expected in aExpected:
+			self.assertTrue(expected.lstrip(aPrefixIgnore) in aActual)
+		self.assertEqual(len(aActual), len(aExpected))
+	
+	def testRecipeFactory(self):
+		recipeLines = self.__createRecipeLines("generic", "ok", 1)
+		recipe = self.__recipeFactory.newRecipe(recipeLines[0])
+		self.assertTrue(isinstance(recipe, filter_utils.Recipe))
+		
+		recipeLines = self.__createRecipeLines("win32something", "ok", 1)
+		recipe = self.__recipeFactory.newRecipe(recipeLines[0])
+		self.assertTrue(isinstance(recipe, filter_utils.Win32Recipe))
+		
+	def testGenericRecipe(self):
+		
+		# 1. Basic successful recipe
+		recipeLines = self.__createRecipeLines("recipe_name", "ok", 1)
+		recipe = self.__recipeFactory.newRecipe(recipeLines[0])
+				
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.name), 'recipe_name')
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.target), 'recipe_target')
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.layer), 'recipe_layer')
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.component), 'recipe_component')
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.bldinf), 'recipe_bldinf')
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.mmp), 'recipe_mmp')
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.config), 'recipe_config')
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.platform), 'recipe_platform')
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.phase), 'recipe_phase')
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.source), 'recipe_source')
+		
+		self.assertFalse(recipe.isComplete())
+				
+		for x in range(1, len(recipeLines)):
+			recipe.addLine(recipeLines[x])
+		
+		self.assertTrue(recipe.isComplete())
+		self.assertTrue(recipe.isSuccess())
+		
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.start), "0123456789.123456789")
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.elapsed), 99.999)
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.exit), 'ok')
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.attempts), 1)
+		
+		# Ignore "+ " tool call prefixes that are trimmed in getCalls output
+		self.__checkListContent(testRecipeCalls.split("\n"), recipe.getCalls(), "+ ")
+		self.__checkListContent(testRecipeOutput.split("\n"), recipe.getOutput())
+		
+		# 2. Recipe failure with errors
+		recipeLines = self.__createRecipeLines("recipe_name", "failed", 3, 10, genericErrors)
+		recipe = self.__recipeFactory.newRecipe()
+		for line in recipeLines:
+			recipe.addLine(line)
+		self.assertFalse(recipe.isSuccess())
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.attempts), 3)
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.code), 10)	
+		self.__checkListContent(genericErrors.split("\n"), recipe.getErrors())
+		
+		# 3. Recipe retry with warnings
+		recipeLines = self.__createRecipeLines("recipe_name", "retry", 2, 5, genericWarnings)
+		recipe = self.__recipeFactory.newRecipe()
+		for line in recipeLines:
+			recipe.addLine(line)
+		self.assertFalse(recipe.isSuccess())
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.attempts), 2)
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.code), 5)		
+		self.__checkListContent(genericWarnings.split("\n"), recipe.getWarnings())
+	
+	def testWin32Recipe(self):
+		# Recipe failure with errors and warnings
+		recipeLines = self.__createRecipeLines("win32something", "failed", 3, 10, mwWarnings + "\n" + mwErrors + "\n" + mwBenign)
+		recipe = self.__recipeFactory.newRecipe(recipeLines[0])
+		for line in recipeLines:
+			recipe.addLine(line)
+		self.assertFalse(recipe.isSuccess())
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.attempts), 3)
+		self.assertEqual(recipe.getDetail(filter_utils.Recipe.code), 10)
+		
+		self.__checkListContent(mwWarnings.split("\n"), recipe.getWarnings())
+		self.__checkListContent(mwErrors.split("\n"), recipe.getErrors())
+	
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "filter_utils_unit"
+
+	tests = unittest.makeSuite(TestFilterUtils)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/generic_path_unit.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,218 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+import generic_path
+import unittest
+import os
+import sys
+import re
+
+class TestGenericPaths(unittest.TestCase):
+	
+	def setUp(self):
+		self.cwd = os.getcwd().replace("\\", "/")
+	
+	def isWin32(self):
+		return sys.platform.lower().startswith("win")
+	
+	
+	def testClassCommon(self):
+		
+		p1 = generic_path.Path("a", "b")
+		
+		p2 = p1.Append("c")
+		self.assertEqual(str(p2), "a/b/c")
+		
+		p3 = p1.Append("c", "d")
+		self.assertEqual(str(p3), "a/b/c/d")
+		
+		p4 = p1.Prepend("z")
+		self.assertEqual(str(p4), "z/a/b")
+		
+		p5 = p1.Prepend("y", "z")
+		self.assertEqual(str(p5), "y/z/a/b")
+		
+		self.assertEqual(str(p5.Dir()), "y/z/a")
+		self.assertEqual(p5.File(), "b")
+		
+		p6 = generic_path.Join("test")
+		self.assertEqual(str(p6.Dir()), "")
+		self.assertEqual(p6.File(), "test")
+	
+	
+	def testClassWin32(self):
+		if not self.isWin32():
+			return
+		
+		local1 = generic_path.Path('some\\folder\\another\\')
+		local2 = generic_path.Join(local1, "test", "tmp")
+		
+		self.assertEqual(str(local2),"some/folder/another/test/tmp")
+		
+		# Absolute
+		
+		local1 = generic_path.Path('some\\folder')
+		self.failIf(local1.isAbsolute())
+		
+		abs1 = local1.Absolute()
+		self.assertEqual(str(abs1).lower(), (self.cwd + "/some/folder").lower())
+		
+		local2 = generic_path.Path('C:\\some\\folder')
+		self.failUnless(local2.isAbsolute())
+		
+		abs2 = local2.Absolute()
+		self.assertEqual(str(abs2), "C:/some/folder")
+
+		local3 = generic_path.Path('\\somerandomfolder')
+		self.failUnless(re.match('^[A-Za-z]:/somerandomfolder$',str(local3)))
+
+		local4 = generic_path.Path('\\my\\folder\\')
+		self.failUnless(re.match('^[A-Za-z]:/my/folder$',str(local4)))
+
+		local5 = generic_path.Path('\\')
+		self.failUnless(re.match('^[A-Za-z]:$',str(local5)))
+		
+		local6 = generic_path.Path("C:")
+		self.failUnless(local6.isAbsolute())
+		self.failUnless(local6.isDir())
+		self.failUnless(local6.Exists())
+		
+		local7 = local6.Absolute()
+		self.assertEqual(str(local7), "C:")
+		
+		local8 = generic_path.Path("C:/")
+		self.failUnless(local8.isAbsolute())
+		self.failUnless(local8.isDir())
+		self.failUnless(local8.Exists())
+		
+		local9 = local8.Absolute()
+		self.assertEqual(str(local9), "C:")
+		                              	
+		# Drives
+		
+		driveD = generic_path.Path("D:\\", "folder")
+		self.assertEqual(str(driveD), "D:/folder")
+		
+		driveA = generic_path.Path("a:\\")
+		self.assertEqual(str(driveA), "a:")
+		self.assertEqual(str(driveA.Dir()), "a:")
+		
+		driveZ = generic_path.Path("Z:\\test")
+		self.assertEqual(str(driveZ), "Z:/test")
+		
+		joinC = generic_path.Join("C:\\", "something")
+		self.assertEqual(str(joinC), "C:/something")
+		
+		joinM = generic_path.Join("M:", "something")
+		self.assertEqual(str(joinM), "M:/something")
+		
+		# Path
+		
+		path2 = generic_path.Path("m:/sys/thing/")
+		self.assertEqual(str(path2), "m:/sys/thing")
+		
+		path3 = generic_path.Path("m:\\sys\\thing\\")
+		self.assertEqual(str(path3), "m:/sys/thing")
+		
+		path4 = generic_path.Path("m:\\")
+		self.assertEqual(str(path4), "m:")
+		
+		path5 = generic_path.Path("\\sys\\thing\\")
+		self.failUnless(re.match('^[A-Za-z]:/sys/thing$', str(path5)))
+		
+		path6 = generic_path.Path("m:/")
+		self.assertEqual(str(path6), "m:")
+		
+		# SpaceSafePath
+		
+		epocroot = os.path.abspath(os.environ.get('EPOCROOT')).replace('\\','/').rstrip('/')
+		pathwithspaces = epocroot+"/epoc32/build/Program Files/Some tool installed with spaces/no_spaces/s p c/no_more_spaces"
+		path7 = generic_path.Path(pathwithspaces)
+
+		# SpaceSafe paths on Windows are 8.3 format, and these can only be deduced if they actually exist.	
+		os.makedirs(pathwithspaces)
+		spacesafe = path7.GetSpaceSafePath()
+		self.assertTrue(spacesafe.endswith("PROGRA~1/SOMETO~1/NO_SPA~1/SPC~1/NO_MOR~1"))
+		
+		os.removedirs(pathwithspaces)
+		spacesafe = path7.GetSpaceSafePath()		
+		self.assertEqual(spacesafe, None)
+
+		
+	def testClassLinux(self):
+		if self.isWin32():
+			return
+		
+		local1 = generic_path.Path('some/folder/another/')
+		local2 = generic_path.Join(local1, "test", "tmp")
+		
+		self.assertEqual(str(local2),"some/folder/another/test/tmp")
+		
+		msys1 = generic_path.Path('some/folder/another/')
+		msys2 = generic_path.Join(msys1, "test", "tmp")
+		
+		self.assertEqual(str(msys2),"some/folder/another/test/tmp")
+		
+		# Absolute
+		
+		local1 = generic_path.Path('some/folder')
+		self.failIf(local1.isAbsolute())
+		
+		abs1 = local1.Absolute()
+		self.assertEqual(str(abs1), self.cwd + "/some/folder")
+		
+		local2 = generic_path.Path('/some/folder')
+		self.failUnless(local2.isAbsolute())
+		
+		abs2 = local2.Absolute()
+		self.assertEqual(str(abs2), "/some/folder")
+		
+		root = generic_path.Path("/")
+		self.assertEqual(str(root), "/")
+		
+		# Path
+		
+		path = generic_path.Path("some/thing/")
+		self.assertEqual(str(path), "some/thing")
+		
+		# SpaceSafePath
+		
+		# This doesn't mean much on non-Windows platforms, but we confirm nothing breaks if it is used
+		pathwithspaces = "/Program Files/Some tool installed with spaces/no_spaces/s p c/no_more_spaces"
+		path2 = generic_path.Path(pathwithspaces)
+	
+		spacesafe = path2.GetSpaceSafePath()		
+		self.assertEqual(spacesafe, None)
+		
+ 
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "generic_path_unit"
+
+	tests = unittest.makeSuite(TestGenericPaths)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/mmpparser_unit.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,355 @@
+#
+# Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# This module tests the MMPParser Class()
+# It runs on data from the standard input
+#
+
+
+from mmpparser import *
+import unittest
+import os
+import re
+
+class MMPTester(MMPBackend):
+	"""A parser testing "backend" for the MMP language
+	This is used to test MMP parsing independently of the build system. """
+	def __init__(self):
+		super(MMPTester,self).__init__()
+		self.sourcepath="."
+		self.platformblock = None
+		self.output=""
+
+	def log(self,text):
+		self.output += text + "\n"
+
+	def doStartResource(self,s,loc,toks):
+		self.log("Create resource "+toks[0]+" of " + str(toks))
+		return "OK"
+
+	def doResourceAssignment(self,s,loc,toks):
+		self.log("Set "+toks[0]+" to " + toks[1])
+		return "OK"
+
+	def doEndResource(self,s,loc,toks):
+		self.log("Finalise resource "+toks[0]+" of " + str(toks))
+		return "OK"
+
+	def doStartPlatform(self,s,loc,toks):
+		self.log("Start Platform block "+toks[0])
+		self.platformblock = toks[0]
+		return "OK"
+
+	def doEndPlatform(self,s,loc,toks):
+		self.log("Finalise platform " + self.platformblock)
+		return "OK"
+
+	def doSetSwitch(self,s,loc,toks):
+		self.log("Set switch "+toks[0]+" ON")
+		return "OK"
+
+	def doAssignment(self,s,loc,toks):
+		self.log("Set "+toks[0]+" to " + str(toks[1]))
+		return "OK"
+
+	def doAppend(self,s,loc,toks):
+		self.log("Append to "+toks[0]+" the values: " + str(toks[1]))
+		return "OK"
+
+	def doUIDAssignment(self,s,loc,toks):
+		self.log("Set UID2 to " + toks[1][0])
+		if len(toks[1]) > 1:
+			self.log("Set UID3 to " + toks[1][1])
+		return "OK"
+
+	def doSourcePathAssignment(self,s,loc,toks):
+		self.log("Remembering self.sourcepath state:  "+str(toks[0])+" is now " + str(toks[1]))
+		self.sourcepath=toks[1]
+		return "OK"
+
+	def doSourceAssignment(self,s,loc,toks):
+		self.log("Setting "+toks[0]+" to " + str(toks[1]))
+		for i in toks[1]:
+			self.log(self.sourcepath + "\\" + i)
+		return "OK"
+
+	def doStartBitmap(self,s,loc,toks):
+		self.log("BITMAP Create "+toks[0]+" to " + str(toks[1]))
+		return "OK" 
+		
+	def doBitmapAssignment(self,s,loc,toks):
+		self.log("BITMAP Setting "+toks[0]+" to " + str(toks[1]))
+		self.log("		must set a value within a bitmap FLM call")
+		return "OK"
+
+	def doEndBitmap(self,s,loc,toks):
+		self.log("Finish bitmap "+toks[0]+" to " + str(toks[1]))
+		return "OK" 
+
+	def doStartStringTable(self,s,loc,toks):
+		self.log("Start STRINGTABLE "+toks[1])
+		return "OK" 
+
+	def doStringTableAssignment(self,s,loc,toks):
+		self.log("Set"+toks[0]+" to " + toks[1])
+		return "OK"
+
+	def doEndStringTable(self,s,loc,toks):
+		self.log("End STRINGTABLE "+toks[1])
+		return "OK" 
+
+	def doUnknownStatement(self,s,loc,toks):
+		self.log("Ignoring unknown statement at " + str(loc))
+		return "OK"
+
+	def doUnknownBlock(self,s,loc,toks):
+		self.output += "Ignoring unknown block at " + str(loc)
+		return "OK"
+
+	def doMMP(self,s,loc,toks):
+		return "MMP"
+
+
+
+class TestMMPParser(unittest.TestCase):
+	def setUp(self):
+		pass
+
+	def testAll(self):
+		tests = [{'name' : "TestFeatures", 'text' :  
+"""ASSPLIBRARY 123 456 789
+LIBRARY  eexe euser
+ALWAYS_BUILD_AS_ARM
+NOEXPORTLIBRARY
+TARGET FRED
+TARGETTYPE EXE
+SOURCEPATH \usr
+SOURCE alice.cia fred.cpp bob.cpp
+SOURCEPATH \someotherplace\ 
+SOURCE custard.cpp the.cpp dragon.cpp
+
+START ARMCC
+ARMLIBS somelib
+ARMRT
+END
+
+START WINC
+END
+
+START RESOURCE fred.rss
+TARGET fred
+TARGETPATH /usr/local
+END
+UID 0x12354 123455
+""", 'mustmatch': r"Set UID3 to 123455"}, \
+				{'name':"TestUnknownStatements", 'text': \
+"""
+
+TARGET FRED12345
+SOURCEPATH \usr
+
+
+""", 'mustmatch': r"Remembering self.sourcepath state:"}, \
+				{'name':"PreceedingBlankLines", 'text': \
+"""
+
+ASSPLIBRARY 123 456 789
+LIBRARY  eexe euser
+ALWAYS_BUILD_AS_ARM
+NOEXPORTLIBRARY
+TARGET FRED
+SOURCEPATH \usr
+START ARMCC
+ARMLIBS somepath
+ARMRT
+END
+START RESOURCE fred.rss
+TARGET fred
+TARGETPATH /usr/local
+END
+
+
+""", 'mustmatch': r"Set TARGETPATH to /usr/local"}, \
+				{ 'name': "Testvfprvct", 'text': \
+"""
+targettype dll
+sourcepath .
+source dfprvct2_2.cpp
+library euser.lib
+library scppnwdl.lib drtrvct2_2.lib
+option armcc --no_exceptions --no_exceptions_unwind
+start armcc
+armrt
+armlibs c_t__un.l
+end
+capability all
+vendorid 0x70000001
+target dfprvct2_2.dll
+start armcc
+armlibs f_t_p.l g_t_p.l
+end
+unpaged
+
+""", 'mustmatch': r"Set switch UNPAGED ON"}, \
+				{ 'name': "TestUSRT", 'text': \
+"""
+TARGET fred
+START ARMCC
+ARMINC 
+ARMRT
+END
+VENDORID 0x70000001
+""", 'mustmatch': r"Set VENDORID to 0x70000001"}, \
+				{ 'name': "TestRESOURCE", 'text': \
+"""
+TARGET reccaf.dll
+CAPABILITY TrustedUI ProtServ DRM
+TARGETTYPE PLUGIN
+UID 0x10009D8D 0x101ff761
+VENDORID 0x70000001
+SOURCEPATH ../source/reccaf
+SOURCE CafApaRecognizer.cpp mimetypemapping.cpp
+START RESOURCE 101ff761.rss
+TARGET reccaf.rsc
+END
+USERINCLUDE ../source/caf
+USERINCLUDE ../source/reccaf
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/caf
+SYSTEMINCLUDE /epoc32/include/ecom
+LIBRARY euser.lib apmime.lib estor.lib
+LIBRARY caf.lib efsrv.lib
+""", 'mustmatch': r"Create resource .* of"}, \
+				{ 'name': "TestRESOURCE", 'text': \
+"""
+TARGET cafutils.dll
+CAPABILITY All -Tcb
+TARGETTYPE DLL
+UID 0x101FD9B8
+VENDORID 0x70000001
+UNPAGED
+SOURCEPATH ../source/cafutils
+SOURCE Cafutils.cpp
+SOURCE attributeset.cpp
+SOURCE stringattribute.cpp
+SOURCE stringattributeset.cpp
+SOURCE virtualpath.cpp
+SOURCE Metadata.cpp
+SOURCE Metadataarray.cpp
+SOURCE embeddedobject.cpp
+SOURCE rightsinfo.cpp
+SOURCE Virtualpathptr.cpp
+SOURCE dirstreamable.cpp
+SOURCE bitset.cpp
+SOURCE cafmimeheader.cpp
+SOURCE mimefieldanddata.cpp
+USERINCLUDE ../inc
+USERINCLUDE ../source/cafutils
+SYSTEMINCLUDE /epoc32/include
+SYSTEMINCLUDE /epoc32/include/caf
+SYSTEMINCLUDE /epoc32/include/libc
+LIBRARY euser.lib
+LIBRARY estor.lib
+LIBRARY charconv.lib
+LIBRARY efsrv.lib
+LIBRARY apgrfx.lib
+LIBRARY ecom.lib
+LIBRARY apmime.lib
+""", 'mustmatch': r"LIBRARY"},
+				{ 'name': "TestEmptyStringTable", 'text': \
+"""
+OPTION CW   -w off
+TARGET          testwebbrowser.exe
+TARGETTYPE      EXE
+CAPABILITY ALL -TCB
+
+SYSTEMINCLUDE   /epoc32/include /epoc32/include/ecom
+USERINCLUDE     ../inc
+USERINCLUDE     ../../httpexampleclient
+
+START STRINGTABLE ../data/htmltagstable.st
+
+END
+
+SOURCEPATH      ../../httpexampleclient
+SOURCE httpexampleutils.cpp
+""", 'mustmatch': r"End STRINGTABLE OK"},
+				{ 'name': "TestARMINC", 'text': \
+"""
+# 1 "<built-in>"
+# 1 "<command line>"
+# 10 "<command line>"
+# 1 "/var/local/net/smb/tmurphy/cluster_epocroot_1/epoc32/include/variant/Symbian_OS_vFuture.hrh" 1
+# 11 "<command line>" 2
+# 1 "/localhome/tmurphy/pf/mcloverlay/cedar/generic/base/e32/compsupp/rvct2_2/drtrvct2_2_vfpv2.mmp"
+# 1 "/localhome/tmurphy/pf/mcloverlay/cedar/generic/base/e32/compsupp/rvct2_2/drtrvct2_2_common.mmh" 1
+TARGETTYPE dll
+OPTION ARMCC--no_exceptions --no_exceptions_unwind
+SOURCEPATH .
+SOURCE rtabort.cpp
+SOURCE rtdiv0.cpp
+SOURCE rtexit.cpp
+SOURCE rtlib.cpp
+SOURCE rtraise.cpp
+SOURCE drtrvct2_2.cpp
+SOURCE rtopnew.cpp rtopdel.cpp
+SOURCE sftfpini.cpp
+LIBRARY scppnwdl.lib euser.lib
+SYSTEMINCLUDE ../../include
+START ARMCC
+ARMRT
+ARMINC
+ARMLIBS c_t__un.l
+ARMLIBS h_t__un.l
+# 46 "/localhome/tmurphy/pf/mcloverlay/cedar/generic/base/e32/compsupp/rvct2_2/drtrvct2_2_common.mmh"
+END
+capability all
+VENDORID 0x70000001
+# 7 "/localhome/tmurphy/pf/mcloverlay/cedar/generic/base/e32/compsupp/rvct2_2/drtrvct2_2_vfpv2.mmp" 2
+TARGET drtrvct2_2_vfpv2.dll
+LINKAS drtrvct2_2.dll
+NOEXPORTLIBRARY
+START ARMCC
+ARMLIBS f_tvp.l
+END
+unpaged
+""", 'mustmatch': r"Set.*ARMINC"}]
+		for i in tests:
+			tester = MMPTester()
+			mp = MMPParser(tester)
+			try:
+				result = mp.mmp.parseString(i['text'])
+			except ParseException,e:
+				pass
+			self.assertEquals(result[0],'MMP')
+			self.assertNotEquals(re.search(i['mustmatch'],tester.output,re.M),None)
+
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "mmpparser_unit"
+
+	tests = unittest.makeSuite(TestMMPParser)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/raptor_api_unit.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,104 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# raptor_api_unit module
+
+import generic_path
+import raptor
+import raptor_api
+import unittest
+
+class TestRaptorApi(unittest.TestCase):
+			
+	def testContext(self):
+		api = raptor_api.Context()
+		
+	def testContextInitialiser(self):
+		r = raptor.Raptor()
+		api = raptor_api.Context(r)
+		
+	def testAliases(self):
+		r = raptor.Raptor()
+		r.cache.Load( generic_path.Join(r.home, "test", "config", "api.xml") )
+
+		api = raptor_api.Context(r)
+	
+		aliases = api.getaliases() # type == ""
+		self.failUnlessEqual(len(aliases), 4)
+		self.failUnlessEqual(set(["alias_A","alias_B","s1","s2"]),
+							 set(a.name for a in aliases))
+		
+		aliases = api.getaliases(raptor_api.ALL) # ignore type
+		self.failUnlessEqual(len(aliases), 6)
+		
+		aliases = api.getaliases("X") # type == "X"
+		self.failUnlessEqual(len(aliases), 1)
+		self.failUnlessEqual(aliases[0].name, "alias_D")
+		self.failUnlessEqual(aliases[0].meaning, "a.b.c.d")
+	
+	def testConfig(self):
+		r = raptor.Raptor()
+		r.cache.Load( generic_path.Join(r.home, "test", "config", "api.xml") )
+
+		api = raptor_api.Context(r)
+		
+		if r.filesystem == "unix":
+			path = "/home/raptor/foo/bar"
+		else:
+			path = "C:/home/raptor/foo/bar"
+			
+		config = api.getconfig("buildme")
+		self.failUnlessEqual(config.fullname, "buildme")
+		self.failUnlessEqual(config.outputpath, path)
+		
+		config = api.getconfig("buildme.foo")
+		self.failUnlessEqual(config.fullname, "buildme.foo")
+		self.failUnlessEqual(config.outputpath, path)
+		
+		config = api.getconfig("s1")
+		self.failUnlessEqual(config.fullname, "buildme.foo")
+		self.failUnlessEqual(config.outputpath, path)
+		
+		config = api.getconfig("s2.product_A")
+		self.failUnlessEqual(config.fullname, "buildme.foo.bar.product_A")
+		self.failUnlessEqual(config.outputpath, path)
+		
+	def testProducts(self):
+		r = raptor.Raptor()
+		r.cache.Load( generic_path.Join(r.home, "test", "config", "api.xml") )
+
+		api = raptor_api.Context(r)
+		
+		products = api.getproducts() # type == "product"
+		self.failUnlessEqual(len(products), 2)
+		self.failUnlessEqual(set(["product_A","product_C"]),
+							 set(p.name for p in products))
+		
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.name = "raptor_api_unit"
+
+	tests = unittest.makeSuite(TestRaptorApi)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/raptor_cache_unit.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,143 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+# Unit test for raptor_cache module
+
+import generic_path
+import os.path
+import raptor
+import raptor_cache
+import unittest
+
+class TestRaptorCache(unittest.TestCase):
+
+	def setUp(self):
+		self.raptor = raptor.Raptor()
+		self.cache = self.raptor.cache
+
+		dir = self.raptor.home.Append("test", "config")
+		self.cache.Load(dir)
+		
+	def testLoadSingle(self):
+		# load a single XML file
+		file = self.raptor.home.Append("test/unit_suite/data", raptor.xml)
+		self.cache.Load(file)
+		self.failUnless(len(self.cache.variants) > 0)
+		self.failUnless(len(self.cache.aliases) > 0)
+		self.failUnless(len(self.cache.groups) > 0)
+		
+	def testVariant(self):
+		def _testSingleVariant(name):
+			try:
+				var = self.cache.FindNamedVariant(name)
+			except KeyError:
+				self.fail()
+			else:
+				self.failUnless(var)
+				self.assertEqual(var.name, name)
+
+		_testSingleVariant("ARMV5_BASE")
+		_testSingleVariant("ARMV5_UREL")
+		_testSingleVariant("ARMV5_UDEB")
+		_testSingleVariant("MOD1")
+		_testSingleVariant("MOD2")
+		_testSingleVariant("var_redef")
+
+		self.failUnlessRaises( KeyError, self.cache.FindNamedVariant, "XY_123" )
+		self.failUnlessRaises( KeyError, self.cache.FindNamedVariant, "ARMV5" )
+
+	def testAlias(self):
+		def _testSingleAlias(name):
+			try:
+				alias = self.cache.FindNamedAlias(name)
+			except KeyError:
+				self.fail()
+			else:
+				self.failUnless(alias)
+				self.assertEqual(alias.name, name)
+
+		_testSingleAlias("ALIAS_1")
+		_testSingleAlias("ALIAS_2")
+		_testSingleAlias("alias_redef")
+
+		self.failUnlessRaises( KeyError, self.cache.FindNamedAlias, "XY_123" )
+		self.failUnlessRaises( KeyError, self.cache.FindNamedAlias, "ARMV5" )
+		self.failUnlessRaises( KeyError, self.cache.FindNamedAlias, "ARMV5_UREL" )
+
+	def testGroup(self):
+		def _testSingleGroup(name):
+			try:
+				group = self.cache.FindNamedGroup(name)
+			except KeyError:
+				self.fail()
+			else:
+				self.failUnless(group)
+				self.assertEqual(group.name, name)
+				
+		_testSingleGroup("ARMV5")
+		_testSingleGroup("group_redef")
+
+		self.failUnlessRaises( KeyError, self.cache.FindNamedGroup, "XY_123" )
+		self.failUnlessRaises( KeyError, self.cache.FindNamedGroup, "ARMV5_UDEB" )
+		self.failUnlessRaises( KeyError, self.cache.FindNamedGroup, "ARMV5_UREL" )
+
+	def testInterface(self):
+		def _testSingleInterface(name):
+			try:
+				interface = self.cache.FindNamedInterface(name)
+			except KeyError:
+				self.fail()
+			else:
+				self.failUnless(interface)
+				self.assertEqual(interface.name, name)
+				
+		_testSingleInterface("interface_redef")
+
+		self.failUnlessRaises( KeyError, self.cache.FindNamedInterface, "foo" )
+		self.failUnlessRaises( KeyError, self.cache.FindNamedInterface, "bar" )
+		self.failUnlessRaises( KeyError, self.cache.FindNamedInterface, "123" )
+
+	def testLoadLegacy(self):
+		# load some schema 1.0 XML files
+		dir = self.raptor.home.Append("test/unit_suite/data")
+		self.cache.Load(dir)
+		try:
+			self.cache.FindNamedInterface("base.1_0")
+			self.cache.FindNamedInterface("interface.1_0")
+			self.cache.FindNamedVariant("var1_0")
+			self.cache.FindNamedAlias("alias1_0")
+		except KeyError:
+			self.fail()
+
+		self.failUnlessRaises( KeyError, self.cache.FindNamedVariant, "should_be_ignored" )
+		
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "raptor_cache_unit"
+
+	tests = unittest.makeSuite(TestRaptorCache)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/raptor_cli_unit.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,241 @@
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+# Unit Test for the Raptor_cli (command line interface) module
+
+import raptor_cli
+import sys
+import unittest
+import os,subprocess
+import re
+
+class TestRaptorCli(unittest.TestCase):
+
+	def setUp(self):
+		sbsHome = os.environ["SBS_HOME"]
+		self.windows = sys.platform.lower().startswith("win")
+		
+		self.doExportsOnly = False
+		self.whatDir = sbsHome + "/test/simple"
+		self.listconfig=[]
+		self.bldinfvalue=[]
+		self.makeoptions=[]
+		self.sysdeflayers=[]
+		self.sysdeforderlayers = True
+		self.whatlist = []
+		self.targets = []
+		self.regexpwin = re.compile(r"^[A-Za-z]:\\",re.I)
+		self.RunningQuiet = False
+		self.allowCommandLineOverrides = True
+		self.ignoreOsDetection = False
+		self.filterList = "filter_terminal,filter_logfile"
+		self.noDependInclude = False
+		self.noDependGenerate = False
+		
+	def AddConfigName(self,configname):
+		self.listconfig.append(configname)
+		return True
+
+	def AddConfigList(self,configlist):
+		return True
+
+	def AddSpecFile(self,specfilename):
+		self.listspec.append(specfilename)
+		return True
+
+	def SetRoot(self,root):
+		self.rootvalue = root
+		return True
+	
+	def SetCheck(self,check):
+		self.doCheck = check
+		return True
+	
+	def SetWhat(self,what):
+		self.doWhat = what
+		return True
+	
+	def SetTries(self,tries):
+		self.tries = tries
+		return True
+		
+	def SetSysDefFile(self,sysdef):
+		self.sysdefvalue = sysdef
+		return True
+			
+	def SetSysDefBase(self,sysdefbase):
+		self.sysdefbasevalue = sysdefbase
+		return True
+
+	def AddSysDefLayer(self,sysdeflayer):
+		self.sysdeflayers.append(sysdeflayer)
+		return True
+
+	def SetSysDefOrderLayers(self,sysdeforderlayers):
+		self.sysdeflayers = sysdeforderlayers
+		return True
+
+	def AddBuildInfoFile(self,bldinf):
+		self.bldinfvalue.append(bldinf)
+		return True
+
+	def RunQuietly(self,QuietMode):
+		self.RunningQuiet = QuietMode
+		return True
+
+	def SetTopMakefile(self,topmake):
+		self.topmake = topmake
+		return True
+	
+	def SetLogFileName(self, logfile):
+		self.logFileName = logfile
+		return True
+		
+	def SetMakeEngine(self, engine):
+		self.makeEngine = engine
+		return True
+		
+	def AddMakeOption(self, makeOption):
+		self.makeOptions.append(makeOption)
+		return True
+			
+	def SetDebugOutput(self, filename):
+		return True
+		
+	def SetExportOnly(self, yesOrNo):
+		self.doExportOnly = yesOrNo
+		return True
+
+	def SetNoExport(self, yesOrNo):
+		self.doExport = not yesOrNo
+		return True
+	
+	def SetKeepGoing(self, yesOrNo):
+		return True
+	
+	def SetNoBuild(self, yesOrNo):
+		return True
+	
+	def SetNoDependInclude(self, yesOrNo):
+		self.noDependInclude = yesOrNo
+		return True
+
+	def SetNoDependGenerate(self, yesOrNo):
+		self.noDependGenerate = yesOrNo
+		return True
+		
+	def SetJobs(self, N):
+		return True
+
+	def SetToolCheck(self, toolcheck):
+		return True
+	
+	def SetTiming(self, yesOrNo):
+		return True
+
+	def SetParallelParsing(self, onoroff):
+		self.pp=onoroff
+		return True
+
+	def AddProject(self, project):
+		return True
+
+	def AddQuery(self, query):
+		return True
+	
+	def PrintVersion(self):
+		return True
+			 			 
+	def Info(self, format, *extras):
+		"Send an information message to the configured channel"
+		if self.RunningQuiet==False:
+			sys.stdout.write(("INFO: " + format + "\n") % extras)
+
+	def Warn(self, format, *extras):
+		"Send a warning message to the configured channel"
+		sys.stdout.write(("WARNING: " + format + "\n") % extras)
+		
+	def IgnoreOsDetection(self, value):
+		self.ignoreOsDetection = value
+		return True
+	
+	def FilterList(self, value):
+		self.filterList = value
+		return True
+	
+	def AddSourceTarget(self, filename):
+		self.targets.append(filename)
+	
+	def testDoRaptor(self):
+		args = ['-c','config1',
+				'-c','config name with spaces',
+				'-s', 'wrong_file.xml',
+				'--sysdef', 'system_definition.xml',
+				'-a', 'wrong_base_dir',
+				'--sysdefbase', 'C:\definitions',
+				'-l', 'a_layer',
+				'--layer', 'b_layer',
+				'-b', 'bld1.inf',
+				'--bldinf', 'bld2.inf',
+				'-f', 'a_log_file.log',
+				'-m', 'top.mk',
+				'--makefile', '/home/Makefile',
+				'--filters', 'filter_01,filter_02',
+				'--export-only',
+				'--source-target', 'some_source_file.cpp',
+				'--source-target', 'some_resource_file.rss',
+				'--pp', 'on',
+				'--no-depend-include',
+				'--no-depend-generate']
+		
+		raptor_cli.GetArgs(self,args)
+		self.assertEqual(self.RunningQuiet,False)
+		self.assertEqual(self.listconfig[0],'config1')
+		self.assertEqual(self.listconfig[1],'config name with spaces')
+		self.assertEqual(self.sysdefvalue,'system_definition.xml')
+		self.assertEqual(self.sysdefbasevalue,'C:\\definitions')
+		self.assertEqual(self.sysdeflayers[0],'a_layer')
+		self.assertEqual(self.sysdeflayers[1],'b_layer')
+		self.assertEqual(self.bldinfvalue[0],'bld1.inf')
+		self.assertEqual(self.bldinfvalue[1],'bld2.inf')
+		self.assertEqual(self.topmake,'/home/Makefile')
+		self.assertEqual(self.logFileName,'a_log_file.log')
+		self.assertEqual(self.filterList,'filter_01,filter_02')
+		self.assertEqual(self.doExportOnly,True)
+		self.assertEqual(self.targets[0], 'some_source_file.cpp')
+		self.assertEqual(self.targets[1], 'some_resource_file.rss')
+		self.assertEqual(self.pp, 'on')
+		self.assertEqual(self.noDependInclude, True)
+		self.assertEqual(self.noDependGenerate, True)
+
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "raptor_cli_unit"
+
+	tests = unittest.makeSuite(TestRaptorCli)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/raptor_data_unit.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,622 @@
+#
+# Copyright (c) 2006-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# raptor_data_unit module
+# This module tests the classes that make up the Raptor Data Model.
+#
+
+import generic_path
+import os
+import raptor
+import raptor_cache
+import raptor_data
+import sys
+import unittest
+
+class TestRaptorData(unittest.TestCase):
+
+	def setUp(self):
+		self.envStack = {}
+		
+		
+	def SetEnv(self, name, value):
+		# set environment variable and remember the old value (if there is one)		
+		if os.environ.has_key(name):
+			self.envStack[name] = os.environ[name]
+		os.environ[name] = value
+		
+	def isWin(self):
+		return 'win' in raptor.hostplatform
+			
+	def RestoreEnv(self, name):
+		# put environment back to its state before SetEnv
+		if self.envStack.has_key(name):
+			os.environ[name] = self.envStack[name]
+		else:
+			del os.environ[name]    # was not defined
+			
+			
+	def testSimpleSpecification(self):
+		spec = raptor_data.Specification("myProject")
+
+		spec.SetInterface("Symbian.EXE")
+		
+		var = raptor_data.Variant("X")
+
+		var.AddOperation(raptor_data.Set("SOURCES", "a.cpp"))
+		var.AddOperation(raptor_data.Append("LIBS", "all.dll"))
+		var.AddOperation(raptor_data.Append("INC", "/C/include"))
+		var.AddOperation(raptor_data.Prepend("INC", "/B/include"))
+
+		spec.AddVariant(var)
+		spec.AddVariant("AlwaysBuildAsArm")
+
+		self.failUnless(spec)
+		self.failUnless(spec.Valid())
+		self.failUnless(var.Valid())
+		self.assertEqual(spec.name, "myProject")
+
+
+	def testSimpleFilter(self):
+		filter = raptor_data.Filter("filtered")
+		filter.SetConfigCondition("ARMV5")
+		
+		filter.SetInterface(raptor_data.Interface("True.EXE"))
+		filter.Else.SetInterface(raptor_data.Interface("False.EXE"))
+		
+		filter.AddVariant(raptor_data.Variant("True_var"))
+		filter.Else.AddVariant(raptor_data.Variant("False_var"))
+		
+		filter.AddChildSpecification(raptor_data.Specification("TrueSpec"))
+		filter.Else.AddChildSpecification(raptor_data.Specification("FalseSpec"))
+		
+		filter.Configure( raptor_data.BuildUnit("ARMV5",[]), cache=None )
+		# check a positive test
+		iface = filter.GetInterface(cache=None)
+		self.assertEqual(iface.name, "True.EXE")
+		vars = filter.GetVariants(cache = None)
+		self.assertEqual(vars[0].name, "True_var")
+		kids = filter.GetChildSpecs()
+		self.assertEqual(kids[0].name, "TrueSpec")
+		
+		filter.Configure( raptor_data.BuildUnit("NOT_ARMV5",[]) , cache = None)
+		# check a negative test
+		iface = filter.GetInterface(cache = None)
+		self.assertEqual(iface.name, "False.EXE")
+		vars = filter.GetVariants(cache = None)
+		self.assertEqual(vars[0].name, "False_var")
+		kids = filter.GetChildSpecs()
+		self.assertEqual(kids[0].name, "FalseSpec")
+		
+
+	def testSimpleVariant(self):
+		var = raptor_data.Variant()
+		self.failUnless(var)
+		self.failIf( var.Valid() )
+
+		var.SetProperty("name", "ABC")
+		var.SetProperty("extends", "DEF")
+		var.SetProperty("host", "GHI")
+
+		self.assertEqual(var.name, "ABC")
+		self.assertEqual(var.extends, "DEF")
+		self.assertEqual(var.host, None)
+
+		var.SetProperty("host", "win32")
+		self.assertEqual(var.host, "win32")
+
+		self.failUnless( var.Valid() )
+
+		var.AddOperation( raptor_data.Set("CC", "armcc") )
+		var.AddOperation( raptor_data.Set("LN", "armlink") )
+
+		self.failUnless( var.Valid() )
+
+		var.SetProperty("extends", "")
+		ops = var.GetAllOperationsRecursively(None)
+
+		self.assertEqual( len(ops), 1 )
+		self.assertEqual( len(ops[0]), 2 )
+
+	def testExtendedVariant(self):
+		r = raptor.Raptor()
+
+		varA = raptor_data.Variant("A")
+		varA.SetProperty("extends", None)
+		varA.AddOperation( raptor_data.Set("V1", "1A") )
+		varA.AddOperation( raptor_data.Set("V2", "2A") )
+
+		varB = raptor_data.Variant("B")
+		varB.SetProperty("extends", "A")
+		varB.AddOperation( raptor_data.Set("V2", "2B") )
+		varB.AddOperation( raptor_data.Set("V3", "3B") )
+
+		varC = raptor_data.Variant("C")
+		varC.SetProperty("extends", "B")
+		varC.AddOperation( raptor_data.Set("V3", "3C") )
+		varC.AddOperation( raptor_data.Set("V4", "4C") )
+
+		self.failUnless( varA.Valid() )
+		self.failUnless( varB.Valid() )
+		self.failUnless( varC.Valid() )
+
+		r.cache.AddVariant(varA)
+		r.cache.AddVariant(varB)
+		r.cache.AddVariant(varC)
+
+		e = r.GetEvaluator(None, varA.GenerateBuildUnits(r.cache)[0] )
+		self.assertEqual( e.Get("V1"), "1A" )
+		self.assertEqual( e.Get("V2"), "2A" )
+
+		e = r.GetEvaluator(None, varB.GenerateBuildUnits(r.cache)[0] )
+		self.assertEqual( e.Get("V1"), "1A" )
+		self.assertEqual( e.Get("V2"), "2B" )
+		self.assertEqual( e.Get("V3"), "3B" )
+
+		e = r.GetEvaluator(None, varC.GenerateBuildUnits(r.cache)[0] )
+		self.assertEqual( e.Get("V1"), "1A" )
+		self.assertEqual( e.Get("V2"), "2B" )
+		self.assertEqual( e.Get("V3"), "3C" )
+		self.assertEqual( e.Get("V4"), "4C" )
+
+	def testReferencedVariant(self):
+		r = raptor.Raptor()
+
+		varA = raptor_data.Variant("A")
+		varA.SetProperty("extends", None)
+		varA.AddOperation( raptor_data.Set("V1", "1A") )
+		varA.AddOperation( raptor_data.Set("V2", "2A") )
+
+		# B extends A, and has a reference to C.
+		varB = raptor_data.Variant("B")
+		varB.SetProperty("extends", "A")
+		varB.AddOperation( raptor_data.Set("V2", "2B") )
+		varB.AddOperation( raptor_data.Set("V3", "3B") )
+		varB.AddChild( raptor_data.VariantRef("C") )
+
+		varC = raptor_data.Variant("C")
+		varC.SetProperty("extends", None)
+		varC.AddOperation( raptor_data.Set("V3", "3C") )
+		varC.AddOperation( raptor_data.Set("V4", "4C") )
+
+		self.failUnless( varA.Valid() )
+		self.failUnless( varB.Valid() )
+		self.failUnless( varC.Valid() )
+
+		r.cache.AddVariant(varA)
+		r.cache.AddVariant(varB)
+		r.cache.AddVariant(varC)
+
+		e = r.GetEvaluator(None, varA.GenerateBuildUnits(r.cache)[0] )
+		self.assertEqual( e.Get("V1"), "1A" )
+		self.assertEqual( e.Get("V2"), "2A" )
+
+		e = r.GetEvaluator(None, varC.GenerateBuildUnits(r.cache)[0] )
+		self.assertEqual( e.Get("V3"), "3C" )
+		self.assertEqual( e.Get("V4"), "4C" )
+
+		e = r.GetEvaluator(None, varB.GenerateBuildUnits(r.cache)[0] )
+		self.assertEqual( e.Get("V1"), "1A" )
+		self.assertEqual( e.Get("V2"), "2B" )
+		self.assertEqual( e.Get("V3"), "3B" )
+		self.assertEqual( e.Get("V4"), "4C" )
+
+	def testAlias(self):
+		r = raptor.Raptor()
+
+		varA = raptor_data.Variant("A")
+		varA.AddOperation( raptor_data.Set("V1", "1A") )
+		varA.AddOperation( raptor_data.Set("V2", "2A") )
+		r.cache.AddVariant(varA)
+
+		varB = raptor_data.Variant("B")
+		varB.AddOperation( raptor_data.Set("V2", "2B") )
+		varB.AddOperation( raptor_data.Set("V3", "3B") )
+		r.cache.AddVariant(varB)
+
+		varC = raptor_data.Variant("C")
+		varC.AddOperation( raptor_data.Set("V3", "3C") )
+		varC.AddOperation( raptor_data.Set("V4", "4C") )
+		r.cache.AddVariant(varC)
+
+		# <alias name="an_alias" meaning="A.B.C"/>
+		alias = raptor_data.Alias("an_alias")
+		alias.SetProperty("meaning", "A.B.C")
+		r.cache.AddAlias(alias)
+
+		self.failUnless( alias.Valid() )
+
+		e = r.GetEvaluator(None, alias.GenerateBuildUnits(r.cache)[0] )
+		self.assertEqual( e.Get("V1"), "1A" )
+		self.assertEqual( e.Get("V2"), "2B" )
+		self.assertEqual( e.Get("V3"), "3C" )
+		self.assertEqual( e.Get("V4"), "4C" )
+
+	def testGroup1(self):
+		r = raptor.Raptor()
+
+		varA = raptor_data.Variant("A")
+		varA.AddOperation( raptor_data.Set("V1", "1A") )
+		varA.AddOperation( raptor_data.Set("V2", "2A") )
+		r.cache.AddVariant(varA)
+
+		varB = raptor_data.Variant("B")
+		varB.AddOperation( raptor_data.Set("V2", "2B") )
+		varB.AddOperation( raptor_data.Set("V3", "3B") )
+		r.cache.AddVariant(varB)
+
+		varC = raptor_data.Variant("C")
+		varC.AddOperation( raptor_data.Set("V3", "3C") )
+		varC.AddOperation( raptor_data.Set("V4", "4C") )
+		r.cache.AddVariant(varC)
+
+		alias = raptor_data.Alias("alias")
+		alias.SetProperty("meaning", "B.C")
+		r.cache.AddAlias(alias)
+
+		# This group has two buildable units: "A" and "alias" = "B.C".
+		# <group name="group1">
+		#	<varRef ref="A"/>
+		#   <aliasRef ref="alias">
+		# <group>
+		group1 = raptor_data.Group("group1")
+		group1.AddChild( raptor_data.VariantRef("A") )
+		group1.AddChild( raptor_data.AliasRef("alias") )
+		r.cache.AddGroup(group1)
+
+		vRef = raptor_data.VariantRef("C")
+		vRef.SetProperty("mod", "B")
+
+		# This group has three buildable units: "C.B", "A" and "alias" = "B.C".
+		# <group name="group2">
+		#	<varRef ref="C" mod="B"/>
+		#   <groupRef ref="group1"/>
+		# <group>
+		group2 = raptor_data.Group("group2")
+		group2.AddChild(vRef)
+		group2.AddChild( raptor_data.GroupRef("group1") )
+		r.cache.AddGroup(group2)
+
+		self.failUnless( group1.Valid() )
+		self.failUnless( group2.Valid() )
+
+		buildUnits = group1.GenerateBuildUnits(r.cache)
+		self.assertEqual( len(buildUnits), 2 )
+		self.assertEqual( buildUnits[0].name, "A" )
+		self.assertEqual( buildUnits[1].name, "alias" )
+		self.assertEqual( buildUnits[1].variants[0].name, "B" )
+		self.assertEqual( buildUnits[1].variants[1].name, "C" )
+
+		buildUnits = group2.GenerateBuildUnits(r.cache)
+		self.assertEqual( len(buildUnits), 3 )
+		self.assertEqual( buildUnits[0].name, "C.B" )
+		self.assertEqual( buildUnits[1].name, "A" )
+		self.assertEqual( buildUnits[2].name, "alias" )
+
+		self.assertEqual( len(buildUnits[0].variants), 2 )
+		self.assertEqual( len(buildUnits[1].variants), 1 )
+		self.assertEqual( len(buildUnits[2].variants), 2 )
+
+	def testGroup2(self):
+		r = raptor.Raptor()
+
+		r.cache.Load( generic_path.Join(r.home, "test", "config", "arm.xml") )
+
+		buildUnits = r.cache.FindNamedGroup("G2").GenerateBuildUnits(r.cache)
+
+		self.assertEqual( len(buildUnits), 8 )
+
+		self.assertEqual(buildUnits[0].name, "ARMV5_UREL.MOD1")
+		self.assertEqual(buildUnits[1].name, "ARMV5_UDEB.MOD1.MOD2")
+		self.assertEqual(buildUnits[2].name, "ALIAS_1")
+		self.assertEqual(buildUnits[3].name, "ALIAS_2.MOD1.MOD2.MOD1")
+		self.assertEqual(buildUnits[4].name, "ARMV5_UREL.MOD2")
+		self.assertEqual(buildUnits[5].name, "ARMV5_UDEB.MOD2")
+		self.assertEqual(buildUnits[6].name, "MOD1")
+		self.assertEqual(buildUnits[7].name, "MOD2")
+
+	def testRefs(self):
+		i1 = raptor_data.InterfaceRef()
+		self.failIf(i1.Valid())
+
+		i2 = raptor_data.InterfaceRef("")
+		self.failIf(i2.Valid())
+
+		i3 = raptor_data.InterfaceRef("ABC_abc.123")
+		self.failUnless(i3.Valid())
+		self.assertEqual(i3.ref, "ABC_abc.123")
+
+
+	def testEvaluator(self):
+		self.SetEnv("EPOCROOT", "/C")
+		aRaptor = raptor.Raptor()
+		cache = aRaptor.cache
+		aRaptor.debugOutput = True
+		cache.Load(generic_path.Join(aRaptor.home, "test", "config", "arm.xml"))
+		
+		var = cache.FindNamedVariant("ARMV5_UREL")
+		eval = aRaptor.GetEvaluator( None, var.GenerateBuildUnits(aRaptor.cache)[0])
+		self.RestoreEnv("EPOCROOT")
+		
+		# test the Get method
+		varcfg = eval.Get("VARIANT_CFG")
+		self.assertEqual(varcfg, "/C/variant/variant.cfg")
+		
+		# test the Resolve wrt EPOCROOT
+		varcfg = eval.Resolve("VARIANT_CFG")
+		self.assertEqual(varcfg, "/C/variant/variant.cfg")
+		
+	def testProblematicEnvironment(self):
+		aRaptor = raptor.Raptor()		
+		
+		# 1: ask for environment variable values that will break makefile parsing due to
+		# backslashes forming line continuation characters
+		self.SetEnv("ENVVAR_BSLASH_END1", "C:\\test1a\\;C:\\test1b\\")
+		self.SetEnv("ENVVAR_BSLASH_END2", "C:\\test2a\\;C:\\test2b\\\\")
+		self.SetEnv("ENVVAR_BSLASH_END3", "C:\\test3a\\;C:\\test3b\\\\\\")
+		var = raptor_data.Variant("my.var")
+		var.AddOperation(raptor_data.Env("ENVVAR_BSLASH_END1"))
+		var.AddOperation(raptor_data.Env("ENVVAR_BSLASH_END2"))
+		var.AddOperation(raptor_data.Env("ENVVAR_BSLASH_END3"))
+
+		eval = aRaptor.GetEvaluator(None, var.GenerateBuildUnits(aRaptor.cache)[0])
+		self.RestoreEnv("ENVVAR_BSLASH_END1")
+		self.RestoreEnv("ENVVAR_BSLASH_END2")
+		self.RestoreEnv("ENVVAR_BSLASH_END3")
+		
+		value = eval.Get("ENVVAR_BSLASH_END1")
+		self.assertEqual(value, "C:\\test1a\\;C:\\test1b\\\\")
+		
+		value = eval.Get("ENVVAR_BSLASH_END2")
+		self.assertEqual(value, "C:\\test2a\\;C:\\test2b\\\\")
+		
+		value = eval.Get("ENVVAR_BSLASH_END3")
+		self.assertEqual(value, "C:\\test3a\\;C:\\test3b\\\\\\\\")
+		
+		# 2: check 'tool' and 'toolchain' type environment variable values for correct behaviour when paths contain spaces
+		# this is different depending on host OS platform and whether or not the paths/tools actually exist
+		epocroot = os.path.abspath(os.environ.get('EPOCROOT')).replace('\\','/').rstrip('/')
+		pathwithspaces = epocroot+"/epoc32/build/Program Files/Some tool installed with spaces/no_spaces/s p c/no_more_spaces"
+		toolwithspaces = pathwithspaces+"/testtool.exe"	
+		self.SetEnv("ENVVAR_TOOL_WITH_SPACES", toolwithspaces)
+		self.SetEnv("ENVVAR_TOOLCHAINPATH_WITH_SPACES", pathwithspaces)
+		toolVar = raptor_data.Variant("tool.var")
+		toolchainpathVar = raptor_data.Variant("toolchainpath.var")
+		toolVar.AddOperation(raptor_data.Env("ENVVAR_TOOL_WITH_SPACES", "", "tool"))
+		toolchainpathVar.AddOperation(raptor_data.Env("ENVVAR_TOOLCHAINPATH_WITH_SPACES", "", "toolchainpath"))
+		invalidValueException = "the environment variable %s is incorrect - it is a '%s' type but contains spaces that cannot be neutralised:"
+		
+		# 2a: paths/tools exist - on Windows we expect 8.3 paths post-evaluation, on all other platforms error exceptions
+		os.makedirs(pathwithspaces)
+		testtool = open(toolwithspaces,'wb')
+		testtool.close()
+		
+		exceptionText = ""
+		value = ""
+		try:
+			eval = aRaptor.GetEvaluator(None, toolVar.GenerateBuildUnits(aRaptor.cache)[0])
+			value = eval.Get("ENVVAR_TOOL_WITH_SPACES")
+		except Exception, e:
+			exceptionText = str(e)
+			
+		if self.isWin():
+			self.assertTrue(value)
+			self.assertFalse(' ' in value)
+		else:
+			self.assertTrue(exceptionText.startswith(invalidValueException % ("ENVVAR_TOOL_WITH_SPACES", "tool")))
+
+		exceptionText = ""
+		value = ""
+		try:
+			eval = aRaptor.GetEvaluator(None, toolchainpathVar.GenerateBuildUnits(aRaptor.cache)[0])
+			value = eval.Get("ENVVAR_TOOLCHAINPATH_WITH_SPACES")
+		except Exception, e:
+			exceptionText = str(e)
+			
+		if self.isWin():
+			self.assertTrue(value)
+			self.assertFalse(' ' in value)
+		else:
+			self.assertTrue(exceptionText.startswith(invalidValueException % ("ENVVAR_TOOLCHAINPATH_WITH_SPACES", "toolchainpath")))
+		
+		# 2b: paths/tools don't exist - should throw error exceptions on all platforms as 8.3 paths are only available
+		# for use if a path/tool exists
+		os.remove(toolwithspaces)
+		os.removedirs(pathwithspaces)
+
+		exceptionText = ""
+		try:
+			eval = aRaptor.GetEvaluator(None, toolVar.GenerateBuildUnits(aRaptor.cache)[0])
+		except Exception, e:
+			exceptionText = str(e)
+		self.assertTrue(exceptionText.startswith(invalidValueException % ("ENVVAR_TOOL_WITH_SPACES", "tool")))
+
+		exceptionText = ""
+		try:
+			eval = aRaptor.GetEvaluator(None, toolchainpathVar.GenerateBuildUnits(aRaptor.cache)[0])
+		except Exception, e:
+			exceptionText = str(e)			
+		self.assertTrue(exceptionText.startswith(invalidValueException % ("ENVVAR_TOOLCHAINPATH_WITH_SPACES", "toolchainpath")))
+
+		# clean-up
+		self.RestoreEnv("ENVVAR_TOOL_WITH_SPACES")
+		self.RestoreEnv("ENVVAR_TOOLCHAINPATH_WITH_SPACES")
+	
+	def testMissingEnvironment(self):
+		# ask for an environment variable that is not set
+		# and has no default value.
+		var = raptor_data.Variant("my.var")
+		var.AddOperation(raptor_data.Env("RAPTOR_SAYS_NO"))
+
+		aRaptor = raptor.Raptor()
+	
+		try:	
+			eval = aRaptor.GetEvaluator(None, var.GenerateBuildUnits(aRaptor.cache)[0] )
+			badval = eval.Get("RAPTOR_SAYS_NO")
+		except raptor_data.UninitialisedVariableException, e:
+			return
+
+		self.assertTrue(False)
+
+	def checkForParam(self, params, name, default):
+		for p in params:
+			if p.name == name and (default == None or p.default == default):
+				return True
+		return False
+	
+	def testInterface(self):
+		aRaptor = raptor.Raptor()
+		cache = aRaptor.cache
+		cache.Load(generic_path.Join(aRaptor.home, "test", "config", "interface.xml"))
+		
+		base = cache.FindNamedInterface("Base.XYZ")
+		p = base.GetParams(cache)
+		self.failUnless(self.checkForParam(p, "A", None))
+		self.failUnless(self.checkForParam(p, "B", "baseB"))
+		self.failUnless(self.checkForParam(p, "C", "baseC"))
+		
+		extended = cache.FindNamedInterface("Extended.XYZ")
+		p = extended.GetParams(cache)
+		self.failUnless(self.checkForParam(p, "A", None))
+		self.failUnless(self.checkForParam(p, "B", "baseB"))
+		self.failUnless(self.checkForParam(p, "C", "extC"))
+		self.failUnless(self.checkForParam(p, "D", None))
+		f = extended.GetFLMIncludePath(cache=cache)
+		self.assertEqual(f.File(), "ext.flm")
+		
+		extended = cache.FindNamedInterface("Extended2.XYZ")
+		p = extended.GetParams(cache)
+		self.failUnless(self.checkForParam(p, "A", None))
+		self.failUnless(self.checkForParam(p, "B", "baseB"))
+		self.failUnless(self.checkForParam(p, "C", "extC"))
+		self.failUnless(self.checkForParam(p, "D", None))
+		f = extended.GetFLMIncludePath(cache)
+		self.assertEqual(f.File(), "base.flm")
+
+	def testGetBuildUnits(self):
+		r = raptor.Raptor()
+
+		# <group name="g1">
+		g1 = raptor_data.Group("g1")
+		r.cache.AddGroup(g1)
+		
+		# <groupRef ref="g2" mod="A.B"/>
+		g2a = raptor_data.GroupRef()
+		g2a.SetProperty("ref", "g2")
+		g2a.SetProperty("mod", "A.B")
+		g1.AddChild(g2a)
+		
+		# <groupRef ref="g2" mod="C.D"/>
+		g2b = raptor_data.GroupRef()
+		g2b.SetProperty("ref", "g2")
+		g2b.SetProperty("mod", "C.D")
+		g1.AddChild(g2b)
+		
+		# <group name="g2">
+		g2 = raptor_data.Group("g2")
+		r.cache.AddGroup(g2)
+		
+		# <varRef ref="V" mod="E.F"/>
+		v2 = raptor_data.VariantRef()
+		v2.SetProperty("ref", "V")
+		v2.SetProperty("mod", "E.F")
+		g2.AddChild(v2)
+		
+		# <varRef ref="V" mod="G.H"/>
+		v3 = raptor_data.VariantRef()
+		v3.SetProperty("ref", "V")
+		v3.SetProperty("mod", "G.H")
+		g2.AddChild(v3)
+		
+		# <aliasRef ref="X" mod="I.J"/>
+		v4 = raptor_data.AliasRef()
+		v4.SetProperty("ref", "X")
+		v4.SetProperty("mod", "I.J")
+		g2.AddChild(v4)
+		
+		# <aliasRef ref="X" mod="K.L"/>
+		v5 = raptor_data.AliasRef()
+		v5.SetProperty("ref", "X")
+		v5.SetProperty("mod", "K.L")
+		g2.AddChild(v5)
+		
+		r.cache.AddVariant(raptor_data.Variant("A"))
+		r.cache.AddVariant(raptor_data.Variant("B"))
+		r.cache.AddVariant(raptor_data.Variant("C"))
+		r.cache.AddVariant(raptor_data.Variant("D"))
+		r.cache.AddVariant(raptor_data.Variant("E"))
+		r.cache.AddVariant(raptor_data.Variant("F"))
+		r.cache.AddVariant(raptor_data.Variant("G"))
+		r.cache.AddVariant(raptor_data.Variant("H"))
+		r.cache.AddVariant(raptor_data.Variant("I"))
+		r.cache.AddVariant(raptor_data.Variant("J"))
+		r.cache.AddVariant(raptor_data.Variant("K"))
+		r.cache.AddVariant(raptor_data.Variant("L"))
+		
+		r.cache.AddVariant(raptor_data.Variant("V"))
+		
+		# <alias name="X" meaning="A.B.C.D.E.F.G.H/>
+		alias = raptor_data.Alias("X")
+		alias.SetProperty("meaning", "A.B.C.D.E.F.G.H")
+		r.cache.AddAlias(alias)
+
+		r.cache.AddVariant(raptor_data.Variant("Y"))
+		r.cache.AddVariant(raptor_data.Variant("Z"))
+	
+		units = raptor_data.GetBuildUnits(["g1.Y", "g1.Z"], r.cache, r)
+		
+		# <group name="g1">
+		#   <groupRef ref="g2" mod="A.B"/>    g2.A.B
+		#   <groupRef ref="g2" mod="C.D"/>    g2.C.D
+		# </group>
+		# <group name="g2">
+		#   <varRef ref="V" mod="E.F"/>       V.E.F
+		#   <varRef ref="V" mod="G.H"/>       V.G.H
+		#   <aliasRef ref="X" mod="I.J"/>     X.I.J
+		#   <aliasRef ref="X" mod="K.L"/>     X.K.L
+		# </group>
+		# <alias name="X" meaning="A.B.C.D.E.F.G.H/>
+		#
+		expected = [ "VEFABY", "VGHABY", "ABCDEFGHIJABY", "ABCDEFGHKLABY",
+				     "VEFCDY", "VGHCDY", "ABCDEFGHIJCDY", "ABCDEFGHKLCDY",
+		             "VEFABZ", "VGHABZ", "ABCDEFGHIJABZ", "ABCDEFGHKLABZ",
+				     "VEFCDZ", "VGHCDZ", "ABCDEFGHIJCDZ", "ABCDEFGHKLCDZ" ]
+		
+		self.failUnlessEqual(len(units), len(expected))
+		
+		for u in units:
+			vars = "".join([v.name for v in u.variants])
+			self.failUnless(vars in expected, vars + " was not expected")
+			expected.remove(vars)
+		
+		self.failUnless(len(expected) == 0, str(expected) + " not found")
+		
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "raptor_data_unit"
+
+	tests = unittest.makeSuite(TestRaptorData)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/raptor_make_unit.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,409 @@
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# raptor_make_unit module
+# This module tests the classes that write Makefile wrappers.
+#
+
+import os
+import raptor
+import raptor_data
+import raptor_make
+import unittest
+
+class TestRaptorMake(unittest.TestCase):
+
+	def cleanMakefiles(self, fileList):
+		for file in fileList:
+			name = file.GetLocalString()
+			if os.path.exists(name):
+				os.remove(name)
+			
+	def checkMakefiles(self, fileList):
+		for file in fileList:
+			name = file.GetLocalString()
+			if not os.path.exists(name):
+				print "did not find", name
+				return False
+		return True
+	
+	def checkNotMakefiles(self, fileList):
+		for file in fileList:
+			name = file.GetLocalString()
+			if os.path.exists(name):
+				print "found unwanted", name
+				return False
+		return True
+	
+	def testSimpleMake(self):
+		# use a bare Raptor object
+		aRaptor = raptor.Raptor()
+		aRaptor.ProcessConfig()
+		aRaptor.LoadCache()
+		aRaptor.pruneDuplicateMakefiles = False
+		aRaptor.writeSingleMakefile = False
+		
+		# find the test directory
+		testDir = aRaptor.home.Append("test", "tmp")
+		
+		# set up a build with a single Specification node
+		spec = raptor_data.Specification("myProject")
+		
+		interface = raptor_data.Interface("EXE")
+		interface.SetProperty("flm", "/lib/flm/exe.flm")
+		interface.AddParameter(raptor_data.Parameter("EXEPARAM1"))
+		interface.AddParameter(raptor_data.Parameter("EXEPARAM2"))
+		interface.AddParameter(raptor_data.Parameter("EXEPARAM3"))
+		spec.SetInterface(interface)
+		
+		svar = raptor_data.Variant("SVAR")
+		svar.AddOperation(raptor_data.Set("EXEPARAM1", "parameter 1"))
+		svar.AddOperation(raptor_data.Set("EXEPARAM2", "parameter 2"))
+		spec.AddVariant(svar)
+		
+		# use a minimal Configuration
+		conf = raptor_data.Variant("myConfig")
+		cvar = raptor_data.Variant("CVAR")
+		cvar.AddOperation(raptor_data.Set("EXEPARAM3", "parameter 3"))
+		bldunit = raptor_data.BuildUnit("myConfig.CVAR",[conf,cvar])
+		
+		# delete any old Makefiles
+		m1 = testDir.Append("Makefile")
+		m2 = testDir.Append("myConfig.CVAR", "myProject", "Makefile")
+		makefiles = [m1, m2]
+		self.cleanMakefiles(makefiles)
+		
+		# create new Makefiles
+		maker = raptor_make.MakeEngine(aRaptor)
+		maker.Write(m1, [spec], [bldunit])
+		
+		# test and clean
+		self.failUnless(self.checkMakefiles(makefiles))
+		self.cleanMakefiles(makefiles)
+
+
+	def testMultiSpecMultiConfigMake(self):
+		# use a bare Raptor object
+		aRaptor = raptor.Raptor()
+		aRaptor.ProcessConfig()
+		aRaptor.LoadCache()
+		aRaptor.pruneDuplicateMakefiles = False
+		aRaptor.writeSingleMakefile = False
+		
+		# find the test directory
+		testDir = aRaptor.home.Append("test", "tmp")
+		
+		interface = raptor_data.Interface("EXE")
+		interface.SetProperty("flm", "/lib/flm/exe.flm")
+		interface.AddParameter(raptor_data.Parameter("EXEPARAM1"))
+		interface.AddParameter(raptor_data.Parameter("EXEPARAM2"))
+		
+		# set up a build with 2 top-level Specification nodes
+		
+		# top 1 has 2 sub-nodes
+		top1 = raptor_data.Specification("top1")
+		top1.SetInterface(interface)
+		top1v = raptor_data.Variant()
+		top1v.AddOperation(raptor_data.Set("EXEPARAM1", "top1 p1"))
+		top1.AddVariant(top1v)
+		# top 1 child 1 has 1 sub-node
+		top1c1 = raptor_data.Specification("top1c1")
+		top1c1.SetInterface(interface)
+		top1c1v = raptor_data.Variant()
+		top1c1v.AddOperation(raptor_data.Set("EXEPARAM1", "top1c1 p1"))
+		top1c1.AddVariant(top1c1v)
+		# top 1 child 1 child
+		top1c1c = raptor_data.Specification("top1c1c")
+		top1c1c.SetInterface(interface)
+		top1c1cv = raptor_data.Variant()
+		top1c1cv.AddOperation(raptor_data.Set("EXEPARAM1", "top1c1c p1"))
+		top1c1c.AddVariant(top1c1cv)
+		top1c1.AddChildSpecification(top1c1c)
+		# top 1 child 2 has 1 sub-node
+		top1c2 = raptor_data.Specification("top1c2")
+		top1c2.SetInterface(interface)
+		top1c2v = raptor_data.Variant()
+		top1c2v.AddOperation(raptor_data.Set("EXEPARAM1", "top1c2 p1"))
+		top1c2.AddVariant(top1c2v)
+		# top 1 child 2 child
+		top1c2c = raptor_data.Specification("top1c2c")
+		top1c2c.SetInterface(interface)
+		top1c2cv = raptor_data.Variant()
+		top1c2cv.AddOperation(raptor_data.Set("EXEPARAM1", "top1c2c p1"))
+		top1c2c.AddVariant(top1c2cv)
+		top1c2.AddChildSpecification(top1c2c)
+		#
+		top1.AddChildSpecification(top1c1)
+		top1.AddChildSpecification(top1c2)
+		
+		# top 2 has no sub-nodes
+		top2 = raptor_data.Specification("top2")
+		top2.SetInterface(interface)
+		top2v = raptor_data.Variant()
+		top2v.AddOperation(raptor_data.Set("EXEPARAM1", "top2 p1"))
+		top2.AddVariant(top2v)
+		#
+		
+		# use a pair of minimal Configurations
+		
+		conf1 = raptor_data.Variant("conf1")
+		c1var = raptor_data.Variant()
+		c1var.AddOperation(raptor_data.Set("EXEPARAM2", "conf1 p2"))
+		buildunit1 = raptor_data.BuildUnit("conf1.c1var",[conf1,c1var])
+		
+		conf2 = raptor_data.Variant("conf2")
+		c2var = raptor_data.Variant()
+		c2var.AddOperation(raptor_data.Set("EXEPARAM2", "conf2 p2"))
+		buildunit2 = raptor_data.BuildUnit("conf2.c2var",[conf2,c2var])
+		
+		# delete any old Makefiles
+		makefiles = [testDir.Append("Makefile")]
+		makefiles.append(testDir.Append("conf1.c1var", "top1", "Makefile"))
+		makefiles.append(testDir.Append("conf1.c1var", "top1", "top1c1", "Makefile"))
+		makefiles.append(testDir.Append("conf1.c1var", "top1", "top1c1", "top1c1c", "Makefile"))
+		makefiles.append(testDir.Append("conf1.c1var", "top1", "top1c2", "Makefile"))
+		makefiles.append(testDir.Append("conf1.c1var", "top1", "top1c2", "top1c2c", "Makefile"))
+		makefiles.append(testDir.Append("conf1.c1var", "top2", "Makefile"))
+		makefiles.append(testDir.Append("conf2.c2var", "top1", "Makefile"))
+		makefiles.append(testDir.Append("conf2.c2var", "top1", "top1c1", "Makefile"))
+		makefiles.append(testDir.Append("conf2.c2var", "top1", "top1c1", "top1c1c", "Makefile"))
+		makefiles.append(testDir.Append("conf2.c2var", "top1", "top1c2", "Makefile"))
+		makefiles.append(testDir.Append("conf2.c2var", "top1", "top1c2", "top1c2c", "Makefile"))
+		makefiles.append(testDir.Append("conf2.c2var", "top2", "Makefile"))
+		self.cleanMakefiles(makefiles)
+		
+		# create new Makefiles
+		maker = raptor_make.MakeEngine(aRaptor)
+		maker.Write(makefiles[0], [top1, top2], [buildunit1, buildunit2])
+		
+		# test and clean
+		self.failUnless(self.checkMakefiles(makefiles))
+		self.cleanMakefiles(makefiles)
+		
+		
+	def testFilteredMake(self):
+		# use a bare Raptor object
+		aRaptor = raptor.Raptor()
+		aRaptor.ProcessConfig()
+		aRaptor.LoadCache()
+		aRaptor.pruneDuplicateMakefiles = False
+		aRaptor.writeSingleMakefile = False
+		aRaptor.debugOutput = True
+		
+		# find the test directory
+		testDir = aRaptor.home.Append("test", "tmp")
+		
+		# the root Specification is a Filter
+		top = raptor_data.Filter("top")
+		
+		# the test condition
+		top.SetVariableCondition("SWITCH", "ARM")
+		top.AddVariableCondition("TOGGLE", ["A", "B", "C"])
+		top.SetConfigCondition("confA.confAv")
+		top.AddConfigCondition("confB.confBv")
+		
+		# True part
+		ifaceT = raptor_data.Interface("T.EXE")
+		ifaceT.SetProperty("flm", "/lib/flm/exeT.flm")
+		ifaceT.AddParameter(raptor_data.Parameter("TEXEPARAM"))
+		ifaceT.AddParameter(raptor_data.Parameter("SWITCH"))
+		ifaceT.AddParameter(raptor_data.Parameter("TOGGLE"))
+		top.SetInterface(ifaceT)
+		#
+		varT = raptor_data.Variant()
+		varT.AddOperation(raptor_data.Set("TEXEPARAM", "top True"))
+		top.AddVariant(varT)
+		#
+		childT = raptor_data.Specification("Tchild")
+		childT.SetInterface(ifaceT)
+		childTv = raptor_data.Variant()
+		childTv.AddOperation(raptor_data.Set("TEXEPARAM", "child True"))
+		childT.AddVariant(childTv)
+		#
+		top.AddChildSpecification(childT)
+		
+		# False part
+		ifaceF = raptor_data.Interface("F.EXE")
+		ifaceF.SetProperty("flm", "/lib/flm/exeF.flm")
+		ifaceF.AddParameter(raptor_data.Parameter("FEXEPARAM"))
+		ifaceF.AddParameter(raptor_data.Parameter("SWITCH"))
+		ifaceF.AddParameter(raptor_data.Parameter("TOGGLE"))
+		top.Else.SetInterface(ifaceF)
+		#
+		varF = raptor_data.Variant()
+		varF.AddOperation(raptor_data.Set("FEXEPARAM", "top False"))
+		top.Else.AddVariant(varF)
+		#
+		childF = raptor_data.Specification("Fchild")
+		childF.SetInterface(ifaceF)
+		childFv = raptor_data.Variant()
+		childFv.AddOperation(raptor_data.Set("FEXEPARAM", "child False"))
+		childF.AddVariant(childFv)
+		#
+		top.Else.AddChildSpecification(childF)
+		
+		
+		# Configurations
+		
+		confA = raptor_data.Variant("confA")	# hit
+		confAv = raptor_data.Variant()
+		confAv.AddOperation(raptor_data.Set("SWITCH", "confA switch"))
+		confAv.AddOperation(raptor_data.Set("TOGGLE", "confA toggle"))
+		b1 = raptor_data.BuildUnit("confA.confAv",[confA,confAv])
+		
+		confB = raptor_data.Variant("confB")	# hit
+		confBv = raptor_data.Variant()
+		confBv.AddOperation(raptor_data.Set("SWITCH", "confB switch"))
+		confBv.AddOperation(raptor_data.Set("TOGGLE", "confB toggle"))
+		b2 = raptor_data.BuildUnit("confB.confBv",[confB,confBv])
+		
+		confC = raptor_data.Variant("confC")
+		confCv = raptor_data.Variant()
+		confCv.AddOperation(raptor_data.Set("SWITCH", "confC switch"))
+		confCv.AddOperation(raptor_data.Set("TOGGLE", "confC toggle"))
+		b3 = raptor_data.BuildUnit("confC.confCv",[confC,confCv])
+		
+		confD = raptor_data.Variant("confD")
+		confDv = raptor_data.Variant()
+		confDv.AddOperation(raptor_data.Set("SWITCH", "ARM"))	# hit
+		confDv.AddOperation(raptor_data.Set("TOGGLE", "confD toggle"))
+		b4 = raptor_data.BuildUnit("confD.confDv",[confD,confDv])
+		
+		confE = raptor_data.Variant("confE")
+		confEv = raptor_data.Variant()
+		confEv.AddOperation(raptor_data.Set("SWITCH", "confE switch"))
+		confEv.AddOperation(raptor_data.Set("TOGGLE", "B"))		# hit
+		b5 = raptor_data.BuildUnit("confE.confEv",[confE,confEv])
+		
+		confF = raptor_data.Variant("confF")
+		confFv = raptor_data.Variant()
+		confFv.AddOperation(raptor_data.Set("SWITCH", "confF switch"))
+		confFv.AddOperation(raptor_data.Set("TOGGLE", "confF toggle"))
+		b6 = raptor_data.BuildUnit("confF.confFv",[confF,confFv])
+		
+		# delete any old Makefiles
+		makefiles = [testDir.Append("Makefile")]
+		makefiles.append(testDir.Append("confA.confAv", "top", "Makefile"))
+		makefiles.append(testDir.Append("confB.confBv", "top", "Makefile"))
+		makefiles.append(testDir.Append("confC.confCv", "top", "Makefile"))
+		makefiles.append(testDir.Append("confD.confDv", "top", "Makefile"))
+		makefiles.append(testDir.Append("confE.confEv", "top", "Makefile"))
+		makefiles.append(testDir.Append("confF.confFv", "top", "Makefile"))
+		makefiles.append(testDir.Append("confA.confAv", "top", "Tchild", "Makefile"))
+		makefiles.append(testDir.Append("confB.confBv", "top", "Tchild", "Makefile"))
+		makefiles.append(testDir.Append("confC.confCv", "top", "Fchild", "Makefile"))
+		makefiles.append(testDir.Append("confD.confDv", "top", "Tchild", "Makefile"))
+		makefiles.append(testDir.Append("confE.confEv", "top", "Tchild", "Makefile"))
+		makefiles.append(testDir.Append("confF.confFv", "top", "Fchild", "Makefile"))
+		self.cleanMakefiles(makefiles)
+		
+		# create new Makefiles
+		maker = raptor_make.MakeEngine(aRaptor)
+		maker.Write(makefiles[0], specs=[top], configs=[b1,b2,b3,b4,b5,b6])
+		
+		# test and clean
+		self.failUnless(self.checkMakefiles(makefiles))
+		self.cleanMakefiles(makefiles)
+		
+
+	def testPruneDuplicates(self):
+		# use a bare Raptor object
+		aRaptor = raptor.Raptor()
+		aRaptor.ProcessConfig()
+		aRaptor.LoadCache()
+		aRaptor.pruneDuplicateMakefiles = True
+		aRaptor.writeSingleMakefile = False
+		
+		# find the test directory
+		testDir = aRaptor.home.Append("test", "tmp")
+		
+		# an interface with defaults
+		iface = raptor_data.Interface("I.EXE")
+		iface.SetProperty("flm", "/lib/flm/iexe.flm")
+		iface.AddParameter(raptor_data.Parameter("A", "1"))
+		iface.AddParameter(raptor_data.Parameter("B", "2"))
+		iface.AddParameter(raptor_data.Parameter("C", "3"))
+		
+		# each Specification is a Filter
+		# f1 is empty, f2 and f3 are equal
+		# so f2 should be the only Makefile generated
+		
+		f1 = raptor_data.Filter("f1")
+		f1.SetConfigCondition("c1")
+		
+		f2 = raptor_data.Filter("f2")
+		f2.SetConfigCondition("c2")
+		f2.SetInterface(iface)
+		
+		f3 = raptor_data.Filter("f3")
+		f3.SetConfigCondition("c3")
+		f3.SetInterface(iface)
+		
+		# Configurations
+		c1 = raptor_data.Variant("c1")
+		c2 = raptor_data.Variant("c2")
+		c3 = raptor_data.Variant("c3")
+
+		# Build Units
+		b1 = raptor_data.BuildUnit("c1",[c1])
+		b2 = raptor_data.BuildUnit("c2",[c2])
+		b3 = raptor_data.BuildUnit("c3",[c3])
+		
+		# Makefiles we expect
+		makefiles = [testDir.Append("Makefile")]
+		makefiles.append(testDir.Append("c2", "f2", "Makefile"))
+		self.cleanMakefiles(makefiles)
+		
+		# Makefiles we do not expect
+		prunes = []
+		prunes.append(testDir.Append("c1", "f1", "Makefile"))
+		prunes.append(testDir.Append("c1", "f2", "Makefile"))
+		prunes.append(testDir.Append("c1", "f3", "Makefile"))
+		prunes.append(testDir.Append("c2", "f1", "Makefile"))
+		prunes.append(testDir.Append("c2", "f3", "Makefile"))
+		prunes.append(testDir.Append("c3", "f1", "Makefile"))
+		prunes.append(testDir.Append("c3", "f2", "Makefile"))
+		prunes.append(testDir.Append("c3", "f3", "Makefile"))
+		self.cleanMakefiles(prunes)
+		
+		# create new Makefiles
+		maker = raptor_make.MakeEngine(aRaptor)
+		maker.Write(makefiles[0], [f1, f2, f3], [b1, b2, b3])
+		
+		# test and clean
+		self.failUnless(self.checkMakefiles(makefiles))
+		self.cleanMakefiles(makefiles)
+		self.failUnless(self.checkNotMakefiles(prunes))
+		self.cleanMakefiles(prunes)
+		
+		
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "raptor_make_unit"
+
+	tests = unittest.makeSuite(TestRaptorMake)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/raptor_makefile_unit.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,183 @@
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# test flm makefile call generator module
+# tests flm call generation.
+#
+
+from raptor_makefile import *
+import re
+import unittest
+import os
+import sys
+
+epocroot = os.path.abspath(os.environ.get('EPOCROOT')).replace("\\","\/")
+topdir = epocroot+"/epoc32/build/raptor_make_unit/"
+
+def unlinkall(files):
+	for f in files:
+		try:
+			os.unlink(f)
+			#print "testsetup: Erased %s" % f	
+			continue
+		except OSError,e:
+			#print "testsetup: No need to erase %s" % f
+			continue
+
+
+def checkall(files):
+	status = True
+	for f in files:
+		if not os.path.isfile(f):
+			print "Missing: %s" % f
+			status = False
+	return status 
+
+class TestMakefile(unittest.TestCase):
+	"Very basic testing of makefile creation class"
+	def setUp(self):
+		print "Setup"
+		self.assertTrue(os.path.isdir(epocroot))
+		unlinkall( [ topdir + "Makefile1",
+			topdir + "Makefile2.testinterface1",
+			topdir + "Makefile3.testinterface1",
+			topdir + "child1/Makefile3.testinterface1" ])
+			
+	def testMakefileCreateEmpty(self):
+		# No makefile is created because nothing is put into the makefile
+		selector = MakefileSelector("testinterface1","testif1$")
+		mf = Makefile(topdir,selector,None,"Makefile1","#prologue","#epilog")
+		mf.close()
+		self.assertFalse(os.path.isfile(topdir+"/Makefile1"))
+
+	def testMakefileCreate(self):
+		selector = MakefileSelector("testinterface1","testif1$")
+		mf = Makefile(topdir,selector,None,"Makefile2","#prologue\n\n","#epilog\n\n")
+		#(self, specname, configname, ifname, flmpath, parameters, guard = None):
+		mf.addCall("testspec", "testconfig","testif1",False,"/flmhome/flm.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		mf.close()
+		self.assertFalse(os.path.isfile(topdir+"/Makefile2"))
+
+	def testMakefileCreateChild(self):
+		selector = MakefileSelector("testinterface1","testif1$")
+		mf = Makefile(topdir,selector,None,"Makefile3","#prologue\n\n","#epilog\n\n")
+		#(self, specname, configname, ifname, flmpath, parameters, guard = None):
+		mf.addCall("testspec2", "testconfig","testif1",False,"/flmhome/flm.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		childmf = mf.createChild("child1")
+		childmf.addCall("test child spec", "testconfig","testif1",False,"/flmhome/flm.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		childmf.addCall("test child spec", "testconfig","testif1",False,"/flmhome/flm.flm",[("TESTPARAM1","call2value1"),("TESTPARAM2","call2value2"),("TESTPARAM3","call2value3")])
+		childmf.close()
+		mf.close()
+		self.assertTrue(os.path.isfile(topdir+"/Makefile3.testinterface1"))
+		self.assertTrue(os.path.isfile(topdir+"/child1/Makefile3.testinterface1"))
+
+
+
+class TestMakefileSet(unittest.TestCase):
+	def setUp(self):
+		print "Setup TestMakefileSet"
+		unlinkall( [ topdir + "Makefile4",
+		  topdir + "Makefile4.bitmap",
+		  topdir + "Makefile4.default",
+		  topdir + "Makefile4.export",
+		  topdir + "Makefile4.resource",
+		  topdir + "Makefile5",
+		  topdir + "Makefile5.bitmap",
+		  topdir + "Makefile5.default",
+		  topdir + "Makefile5.export",
+		  topdir + "Makefile5.resource",
+		  topdir + "makefilechildren/Makefile6.bitmap",
+		  topdir + "makefilechildren/Makefile6.resource",
+		  topdir + "makefilechildren/Makefile6.default",
+		  topdir + "makefilechildren/Makefile6.export",
+		  topdir + "makefilechildren/child1/Makefile6.bitmap",
+		  topdir + "makefilechildren/child1/Makefile6.resource",
+		  topdir + "makefilechildren/child1/Makefile6.default",
+		  topdir + "makefilechildren/child1/Makefile6.export",
+		  topdir + "makefilechildren/child1/Makefile6",
+		  topdir + "makefilechildren/Makefile6" ] )
+		
+
+	def testMakefileSetCreateNull(self):
+		mfset = MakefileSet(directory=topdir, filenamebase="Makefile4", 
+					prologue="# prologue\n\n", epilogue="# epilogue\n\n")
+		mfset.close()
+		self.assertTrue(checkall( [ topdir + "Makefile4",
+			topdir + "Makefile4.bitmap",
+			topdir + "Makefile4.default",
+			topdir + "Makefile4.export",
+			topdir + "Makefile4.resource" ]))
+
+	def testMakefileSetCreate(self):
+		mfset = MakefileSet(directory=topdir, filenamebase="Makefile5", 
+					prologue="# prologue\n\n", epilogue="# epilogue\n\n")
+
+		
+
+		mfset.addCall("testspec3", "testconfig","export",False,"/flmhome/export.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		mfset.addCall("testspec4", "testconfig","resource",False,"/flmhome/resource.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		mfset.addCall("testspec5", "testconfig","bitmap",False,"/flmhome/bitmap.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		mfset.addCall("testspec6", "testconfig","e32abiv2",False,"/flmhome/e32abiv2exe.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		mfset.close()
+		self.assertTrue(checkall( [ 
+		  topdir + "Makefile5",
+		  topdir + "Makefile5.bitmap",
+		  topdir + "Makefile5.default",
+		  topdir + "Makefile5.export",
+		  topdir + "Makefile5.resource" ] ))
+
+	def testMakefileSetChildren(self):
+		mfset = MakefileSet(directory=topdir+"/makefilechildren", filenamebase="Makefile6", prologue="# prologue\n\n", epilogue="# epilogue\n\n")
+		mfset.addCall("testspec3", "testconfig","export",False,"/flmhome/export.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		mfset.addCall("testspec4", "testconfig","resource",False,"/flmhome/resource.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		mfset.addCall("testspec5", "testconfig","bitmap",False,"/flmhome/bitmap.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		mfset.addCall("testspec6", "testconfig","e32abiv2",False,"/flmhome/e32abiv2exe.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		mfset.addCall("testspec7", "testconfig","e32abiv2",False,"/flmhome/e32abiv2exe.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		childmfset = mfset.createChild("child1")
+		childmfset.addCall("testspec7", "testconfig","e32abiv2",False,"/flmhome/e32abiv2exe.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		childmfset.addCall("testspec8", "testconfig","resource",False,"/flmhome/resource.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		childmfset.addCall("testspec9", "testconfig","bitmap",False,"/flmhome/bitmap.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		childmfset.addCall("testspec10", "testconfig","resource",False,"/flmhome/resource.flm",[("TESTPARAM1","testvalue1"),("TESTPARAM2","value2"),("TESTPARAM3","value3")])
+		childmfset.close()
+		mfset.close()
+
+		self.assertTrue(checkall( [ topdir + "makefilechildren/Makefile6.bitmap",
+		  topdir + "makefilechildren/Makefile6.resource",
+		  topdir + "makefilechildren/Makefile6.default",
+		  topdir + "makefilechildren/Makefile6.export",
+		  topdir + "makefilechildren/child1/Makefile6.bitmap",
+		  topdir + "makefilechildren/child1/Makefile6.resource",
+		  topdir + "makefilechildren/child1/Makefile6.default",
+		  topdir + "makefilechildren/child1/Makefile6.export",
+		  topdir + "makefilechildren/child1/Makefile6",
+		  topdir + "makefilechildren/Makefile6" ] ))
+
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "raptor_makefile_unit"
+
+	tests = unittest.makeSuite(TestMakefile)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/raptor_meta_unit.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,918 @@
+#
+# Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# raptor_meta_unit module
+# This module tests the classes forming the Raptor bld.inf and .mmp parsing support
+#
+
+import raptor
+import raptor_meta
+import raptor_utilities
+import raptor_data
+import mmpparser
+import unittest
+import generic_path
+import os
+import sys
+import re
+
+class TestRaptorMeta(unittest.TestCase):
+
+	def setUp(self):
+		self.raptor = raptor.Raptor()
+		self.__testRoot = generic_path.Path(os.environ[raptor.env], "test").Absolute()
+		self.__makefilePathTestRoot = self.__testRoot
+		self.__epocroot = self.__testRoot
+		self.__variant_cfg_root = self.__testRoot.Append('metadata/config')
+		self.__variant_cfg = self.__variant_cfg_root.Append('test_cfg.cfg')
+		self.__platmacros_armv5 = "ARMCC EPOC32 MARM EABI ARMCC_2 ARMCC_2_2 GENERIC_MARM MARM_ARMV5"
+		self.__platmacros_armv6 = "ARMCC EPOC32 MARM EABI ARMCC_2 ARMCC_2_2 GENERIC_MARM MARM_ARMV5 ARMV6"
+		self.__platmacros_armv7 = "ARMCC EPOC32 MARM EABI ARMCC_2 ARMCC_2_2 GENERIC_MARM MARM_ARMV5 ARMV7"
+		self.__platmacros_winscw = "CW32 WINS WINSCW"
+
+		self.variant_hrh = self.__testRoot.Append('metadata/include/test_hrh.hrh')
+		
+		self.__OSRoot = ""
+		if raptor_utilities.getOSFileSystem() == "cygwin":
+			self.__OSRoot = str(self.__makefilePathTestRoot)[:2]
+
+		# we need some sort of generic platform for preprocessing
+		self.defaultPlatform = { 'PLATFORM': 'generic',
+							     'EPOCROOT': self.__epocroot,
+							     'VARIANT_HRH': self.variant_hrh,
+							     'SYSTEMINCLUDE' : '',
+							     'id': 0,
+							     'key': '0000000000000000',
+							     'key_md5': '0000000000000000',
+							     'ISFEATUREVARIANT' : False,
+							     'PLATMACROS' : self.__platmacros_armv5,
+								 'SBS_BUILD_DIR' : str(self.__epocroot) + "/epoc32/build",
+								 'METADEPS' : [] 
+							   }
+		# For testing purposes, the ARMV5 platform is flagged here as feature variant.
+		# In metadata processing terms, this means that the location of the HRH file
+		# is not automatically added to the SYSTEMINCLUDE path, and so is specified
+		# directly.
+		self.ARMV5           = { 'PLATFORM': 'ARMV5',
+							     'EPOCROOT': self.__epocroot,
+							     'VARIANT_HRH': self.variant_hrh,
+							     'SYSTEMINCLUDE' : str(self.variant_hrh.Dir()),
+							     'id': 1,
+							     'key': '1111111111111111',
+							     'key_md5': '1111111111111111',
+							     'ISFEATUREVARIANT' : True,
+							     'PLATMACROS' : self.__platmacros_armv5,
+								 'SBS_BUILD_DIR' : str(self.__epocroot) + "/epoc32/build",
+								 'METADEPS' : [] 
+							   }
+		self.ARMV5SMP        = { 'PLATFORM': 'ARMV5SMP',
+							     'EPOCROOT': self.__epocroot,
+							     'VARIANT_HRH': self.variant_hrh,
+							     'SYSTEMINCLUDE' : str(self.variant_hrh.Dir()),
+							     'id': 1,
+							     'key': '1111111111111111',
+							     'key_md5': '1111111111111111',
+							     'ISFEATUREVARIANT' : False,
+							     'PLATMACROS' : self.__platmacros_armv5,
+								 'SBS_BUILD_DIR' : str(self.__epocroot) + "/epoc32/build",
+								 'METADEPS' : [] 
+							   }
+		self.ARMV6           = { 'PLATFORM': 'ARMV6',
+							     'EPOCROOT': self.__epocroot,
+							     'VARIANT_HRH': self.variant_hrh,
+							     'SYSTEMINCLUDE' : str(self.variant_hrh.Dir()),
+							     'id': 1,
+							     'key': '1111111111111111',
+							     'key_md5': '1111111111111111',
+							     'ISFEATUREVARIANT' : False,
+							     'PLATMACROS' : self.__platmacros_armv6,
+								 'SBS_BUILD_DIR' : str(self.__epocroot) + "/epoc32/build",
+								 'METADEPS' : [] 
+							   }
+		self.ARMV7           = { 'PLATFORM': 'ARMV7',
+							     'EPOCROOT': self.__epocroot,
+							     'VARIANT_HRH': self.variant_hrh,
+							     'SYSTEMINCLUDE' : str(self.variant_hrh.Dir()),
+							     'id': 1,
+							     'key': '1111111111111111',
+							     'key_md5': '1111111111111111',
+							     'ISFEATUREVARIANT' : False,
+							     'PLATMACROS' : self.__platmacros_armv7,
+								 'SBS_BUILD_DIR' : str(self.__epocroot) + "/epoc32/build",
+								 'METADEPS' : [] 
+							   }
+		self.ARMV7SMP         = { 'PLATFORM': 'ARMV7SMP',
+							     'EPOCROOT': self.__epocroot,
+							     'VARIANT_HRH': self.variant_hrh,
+							     'SYSTEMINCLUDE' : str(self.variant_hrh.Dir()),
+							     'id': 1,
+							     'key': '1111111111111111',
+							     'key_md5': '1111111111111111',
+							     'ISFEATUREVARIANT' : False,
+							     'PLATMACROS' : self.__platmacros_armv7,
+								 'SBS_BUILD_DIR' : str(self.__epocroot) + "/epoc32/build",
+								 'METADEPS' : [] 
+							   }
+		self.WINSCW          = { 'PLATFORM': 'WINSCW',
+							     'EPOCROOT': self.__epocroot,
+							     'VARIANT_HRH': self.variant_hrh,
+							     'SYSTEMINCLUDE' : '',
+							     'id': 2,
+							     'key': '2222222222222222',
+							     'key_md5': '2222222222222222',
+							     'ISFEATUREVARIANT' : False,
+							     'PLATMACROS' : self.__platmacros_winscw,
+								 'SBS_BUILD_DIR' : str(self.__epocroot) + "/epoc32/build",
+								 'METADEPS' : [] 
+							   }
+				
+		self.testPlats = [self.ARMV5, self.ARMV5SMP, self.ARMV6, self.ARMV7, self.ARMV7SMP, self.WINSCW]
+		
+		# Get the version of CPP that we are using and hope it's correct
+		# since there is no tool check.
+		if os.environ.has_key('SBS_GNUCPP'):
+			self.__gnucpp = os.environ['SBS_GNUCPP']
+		else: 
+			self.__gnucpp = "cpp" 
+	
+	def testPreProcessor(self):
+		# Just test for correct behaviour on failure, other tests excercise correct behaviour on success
+		preProcessor = raptor_meta.PreProcessor('cpp_that_does_not_exist', 
+											    '-undef -nostdinc', 
+											    '-I', '-D', '-include',
+											    self.raptor)
+
+		try:
+			 preProcessor.preprocess()
+		except Exception, e:
+			self.assertTrue(isinstance(e, raptor_meta.MetaDataError))
+			self.assertTrue(re.match('^Preprocessor exception', e.Text))
+
+	def testConfigParsing(self):
+		# .cfg file specified, but does not exist		
+		try:
+			configDetails = raptor_meta.getVariantCfgDetail(self.__epocroot, 
+														    self.__variant_cfg_root.Append("missing"))
+		except Exception, e:
+			self.assertTrue(isinstance(e, raptor_meta.MetaDataError))
+			self.assertTrue(re.match('^Could not read variant configuration file.*$', e.Text))
+			
+		# No .hrh file specified
+		try:
+			configDetails = raptor_meta.getVariantCfgDetail(self.__epocroot,
+														    self.__variant_cfg_root.Append("empty_cfg.cfg"))
+		except Exception, e:
+			self.assertTrue(isinstance(e, raptor_meta.MetaDataError))
+			self.assertTrue(re.match('No variant file specified in .*', e.Text))
+					
+		# .hrh file does not exist
+		try:
+			configDetails = raptor_meta.getVariantCfgDetail(self.__epocroot,
+														    self.__variant_cfg_root.Append("invalid_cfg.cfg"))
+		except Exception, e:
+			self.assertTrue(isinstance(e, raptor_meta.MetaDataError))
+			self.assertTrue(re.match('Variant file .* does not exist', e.Text))
+				
+		# Valid .cfg file
+		configDetails = raptor_meta.getVariantCfgDetail(self.__epocroot, 
+													    self.__variant_cfg)
+		self.failUnless(configDetails)
+		
+		found_variant_hrh = str(configDetails.get('VARIANT_HRH'))	
+		expected_variant_hrh = str(self.variant_hrh)
+		
+		self.assertEqual(found_variant_hrh, expected_variant_hrh)
+	
+
+	def __testBuildPlatforms(self, aRootBldInfLocation, aBldInfFile, 
+							 aExpectedBldInfPlatforms, aExpectedBuildablePlatforms):
+		bldInfFile = aRootBldInfLocation.Append(aBldInfFile)
+		self.failUnless(bldInfFile)
+		
+		depfiles=[]
+		bldInfObject = raptor_meta.BldInfFile(bldInfFile, self.__gnucpp, depfiles=depfiles, log=self.raptor)
+		
+		bp = bldInfObject.getBuildPlatforms(self.defaultPlatform)
+		self.assertEquals(bp, aExpectedBldInfPlatforms)
+
+		buildableBldInfBuildPlatforms = raptor_meta.getBuildableBldInfBuildPlatforms(bp,
+				'ARMV5 ARMV7 WINSCW',
+				'ARMV5 ARMV5SMP ARMV7 WINSCW',
+				'ARMV5 ARMV7 WINSCW')
+		
+		for expectedBuildablePlatform in aExpectedBuildablePlatforms:
+			self.assertTrue(expectedBuildablePlatform in buildableBldInfBuildPlatforms)
+			
+		self.assertEqual(len(aExpectedBuildablePlatforms),
+						 len(buildableBldInfBuildPlatforms))
+		return
+	
+	def testBldInfPlatformDeduction(self):
+		bldInfTestRoot = self.__testRoot.Append('metadata/project/bld.infs')
+				
+		self.__testBuildPlatforms(bldInfTestRoot, 'no_prj_platforms.inf', 
+								  [], ['ARMV7', 'ARMV5', 'WINSCW', 'GCCXML'])
+		self.__testBuildPlatforms(bldInfTestRoot, 'no_plats.inf', 
+								  [], ['ARMV7', 'ARMV5', 'WINSCW', 'GCCXML'])
+		self.__testBuildPlatforms(bldInfTestRoot, 'default_plats.inf', 
+								  ['DEFAULT'], ['ARMV7', 'ARMV5', 'WINSCW', 'GCCXML'])
+		self.__testBuildPlatforms(bldInfTestRoot, 'default_plats_minus_plat.inf', 
+								  ['DEFAULT', '-WINSCW'], ['ARMV7', 'ARMV5', 'GCCXML'])
+		self.__testBuildPlatforms(bldInfTestRoot, 'single_plat.inf', 
+								  ['ARMV5'], ['ARMV5', 'GCCXML'])
+		self.__testBuildPlatforms(bldInfTestRoot, 'multiple_plats.inf', 
+								  ['ARMV5', 'WINSCW', 'TOOLS'], ['ARMV5', 'WINSCW', 'TOOLS', 'GCCXML'])
+		return
+	
+	def __testBldInfTestCode(self, aTestRoot, aBldInf, aActual, aExpected):
+		loop_number = 0
+		for actual in aActual:
+			self.assertEquals(actual, aExpected[loop_number])
+			loop_number += 1
+		
+	def testBldInfTestType(self):
+		bldInfTestRoot = self.__testRoot.Append('metadata/project/mmps/test_mmps')
+		
+		bldInfFile = bldInfTestRoot.Append('test_mmps.inf')
+		depfiles = []
+		bldInfObject = raptor_meta.BldInfFile(bldInfFile, self.__gnucpp, depfiles=depfiles, log=self.raptor)
+		testArmv5Platform = self.ARMV5
+		testArmv5Platform["TESTCODE"] = True
+		bldInfObject.getRomTestType(testArmv5Platform)
+		
+		self.__testBldInfTestCode(bldInfTestRoot, 'test_mmps.inf',
+				[bldInfObject.testManual, bldInfObject.testAuto], [1, 1])
+	
+	def __testExport(self, aExportObject, aSource, aDestination, aAction):			
+		self.assertEquals(aExportObject.getSource(), aSource)
+		self.assertEqualsOrContainsPath(aExportObject.getDestination(), aDestination)
+		self.assertEquals(aExportObject.getAction(), aAction)
+	
+	def assertEqualsOrContainsPath(self, aRequirement, aCandidate):
+		# If aRequirement is a list, which it might well be, we should
+		# assert that aPathString is contained in it
+		# If aRequirement not a list, it will be a string, and 
+		# we should assert equality of the strings
+		# On windows we shouldn't care about the case of the drive letter.
+
+		if isinstance(aRequirement, list):
+			pathsequal = False
+			for r in aRequirement:
+				pathsequal = path_compare_notdrivelettercase(r,aCandidate) or pathsequal
+			self.assertTrue(pathsequal)
+		else:
+			self.assertTrue(path_compare_notdrivelettercase(aRequirement,aCandidate))
+		
+	def testBldInfExports(self):
+		bldInfTestRoot = self.__testRoot.Append('metadata/project/bld.infs')
+		bldInfMakefilePathTestRoot = str(self.__makefilePathTestRoot) + '/metadata/project/'
+		
+		depfiles = []
+		bldInfObject = raptor_meta.BldInfFile(bldInfTestRoot.Append('exports.inf'), 
+											  self.__gnucpp, depfiles=depfiles, log=self.raptor)
+					
+		exports = bldInfObject.getExports(self.defaultPlatform)
+		
+		# export1.h
+		self.__testExport(exports[0], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export1.h', 
+						  '$(EPOCROOT)/epoc32/include/export1.h', 
+						  'copy')
+
+		# export2.h				export_test\export2.h
+		self.__testExport(exports[1], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export2.h', 
+						  '$(EPOCROOT)/epoc32/include/export_test/export2.h', 
+						  'copy')
+		
+		# export3.h				..\export_test\export3.h
+		self.__testExport(exports[2], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export3.h', 
+						  '$(EPOCROOT)/epoc32/export_test/export3.h', 
+						  'copy')
+		
+		# export4.h				\export_test_abs\export4.h
+		self.__testExport(exports[3], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export4.h', 
+						  self.__OSRoot+'/export_test_abs/export4.h', 
+						  'copy')
+
+		# export5.h				\epoc32\export_test_abs\export5.h
+		self.__testExport(exports[4], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export5.h', 
+						  '$(EPOCROOT)/epoc32/export_test_abs/export5.h', 
+						  'copy')
+		
+		# export6.h				|..\export_test_rel\export6.h
+		self.__testExport(exports[5], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export6.h', 
+						  bldInfMakefilePathTestRoot+'export_test_rel/export6.h', 
+						  'copy')
+		
+		# export6.h				|\export_test_rel\export7.h
+		self.__testExport(exports[6], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export7.h', 
+						  bldInfMakefilePathTestRoot+'bld.infs/export_test_rel/export7.h',
+						  'copy')
+		
+		# export7.h				|export_test_rel\export8.h
+		self.__testExport(exports[7], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export8.h', 
+						  bldInfMakefilePathTestRoot+'bld.infs/export_test_rel/export8.h', 
+						  'copy')
+
+		# :zip export9.zip
+		self.__testExport(exports[8], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export9.zip', 
+						  '$(EPOCROOT)', 
+						  'unzip')
+
+		# :zip export10.zip		export_test
+		self.__testExport(exports[9], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export10.zip', 
+						  '$(EPOCROOT)/export_test', 
+						  'unzip')
+
+		# :zip export11.zip		/export_test
+		self.__testExport(exports[10], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export11.zip', 
+						  self.__OSRoot+'/export_test', 
+						  'unzip')
+
+		# :zip export12.zip		/epoc32/export_test
+		self.__testExport(exports[11], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export12.zip', 
+						  '$(EPOCROOT)/epoc32/export_test', 
+						  'unzip')
+ 
+		# export13.rsc			z:/resource/app/export13.rsc
+		# Once for each of the three locations for emulated drives
+		# epoc32/data/z/resource/app/export13.rsc *and* in
+		# epoc32/release/winscw/udeb/z/resource/app/export13.rsc *and* in
+		# epoc32/release/winscw/urel/z/resource/app/export13.rsc
+		self.__testExport(exports[12], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export13.rsc', 
+						  '$(EPOCROOT)/epoc32/data/z/resource/app/export13.rsc', 
+						  'copy')
+		
+		self.__testExport(exports[12], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export13.rsc', 
+						  '$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/app/export13.rsc', 
+						  'copy')
+		
+		self.__testExport(exports[12], 
+						  bldInfMakefilePathTestRoot+'bld.infs/export13.rsc', 
+						  '$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/app/export13.rsc', 
+						  'copy')
+		
+
+		testExports = bldInfObject.getTestExports(self.defaultPlatform)
+		
+		# testexport1.h
+		self.__testExport(testExports[0], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport1.h', 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport1.h', 
+						  'copy')
+		
+		# testexport2.h				export_test_rel\testexport2.h
+		self.__testExport(testExports[1], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport2.h', 
+						  bldInfMakefilePathTestRoot+'bld.infs/export_test_rel/testexport2.h', 
+						  'copy')
+
+		# testexport3.h				..\export_test_rel\testexport3.h
+		self.__testExport(testExports[2], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport3.h', 
+						  bldInfMakefilePathTestRoot+'export_test_rel/testexport3.h', 
+						  'copy')
+
+		# testexport4.h				\export_test_abs\testexport4.h
+		self.__testExport(testExports[3], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport4.h', 
+						  self.__OSRoot+'/export_test_abs/testexport4.h', 
+						  'copy')
+
+		# testexport5.h				\epoc32\export_test_abs\testexport5.h
+		self.__testExport(testExports[4], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport5.h', 
+						  '$(EPOCROOT)/epoc32/export_test_abs/testexport5.h', 
+						  'copy')
+
+		# testexport6.h				|..\export_test_rel\testexport6.h
+		self.__testExport(testExports[5], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport6.h', 
+						  bldInfMakefilePathTestRoot+'export_test_rel/testexport6.h', 
+						  'copy')
+
+		# testexport7.h				|\export_test_rel\testexport7.h
+		self.__testExport(testExports[6], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport7.h', 
+						  bldInfMakefilePathTestRoot+'bld.infs/export_test_rel/testexport7.h', 
+						  'copy')
+
+		# testexport8.h				|export_test_rel\testexport8.h
+		self.__testExport(testExports[7], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport8.h', 
+						  bldInfMakefilePathTestRoot+'bld.infs/export_test_rel/testexport8.h', 
+						  'copy')
+
+		# :zip testexport9.zip
+		self.__testExport(testExports[8], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport9.zip', 
+						  '$(EPOCROOT)', 
+						  'unzip')
+
+		# :zip testexport10.zip		export_test
+		self.__testExport(testExports[9], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport10.zip', 
+						  '$(EPOCROOT)/export_test', 
+						  'unzip')
+
+		# :zip testexport11.zip		/export_test
+		self.__testExport(testExports[10], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport11.zip', 
+						  self.__OSRoot+'/export_test', 
+						  'unzip')
+
+		# :zip testexport12.zip		/epoc32/export_test
+		self.__testExport(testExports[11], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport12.zip', 
+						  '$(EPOCROOT)/epoc32/export_test', 
+						  'unzip')
+
+		# testexport13.rsc		z:/resource/app/testexport13.rsc
+		# Once for each of the three locations for emulated drives
+		# epoc32/data/z/resource/app/testexport13.rsc *and* in
+		# epoc32/release/winscw/udeb/z/resource/app/testexport13.rsc *and* in
+		# epoc32/release/winscw/urel/z/resource/app/testexport13.rsc
+		self.__testExport(testExports[12], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport13.rsc', 
+						  '$(EPOCROOT)/epoc32/data/z/resource/app/testexport13.rsc', 
+						  'copy')
+		
+		self.__testExport(testExports[12], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport13.rsc', 
+						  '$(EPOCROOT)/epoc32/release/winscw/udeb/z/resource/app/testexport13.rsc', 
+						  'copy')
+		
+		self.__testExport(testExports[12], 
+						  bldInfMakefilePathTestRoot+'bld.infs/testexport13.rsc', 
+						  '$(EPOCROOT)/epoc32/release/winscw/urel/z/resource/app/testexport13.rsc', 
+						  'copy')
+
+
+	def __testExtension(self, aExtensionObject, aMakefile, aTestParameters):
+		
+		templateExtensionRoot = ""
+		
+		if not aMakefile.startswith("$("):
+			templateExtensionRoot = '$(MAKEFILE_TEMPLATES)/'
+			
+		self.assertEquals(aExtensionObject.getMakefile(), templateExtensionRoot+aMakefile)
+		
+		testOptions = aExtensionObject.getOptions()
+		testVariables = aExtensionObject.getStandardVariables()
+		
+		for testParameter in aTestParameters.keys():
+			if (testParameter.startswith("STDVAR_")):
+				stdvar = testParameter.replace("STDVAR_", "")
+				stdvalue = aTestParameters.get(testParameter)
+				self.assertTrue(testVariables.has_key(stdvar))
+				self.assertEquals(testVariables.get(stdvar), aTestParameters.get(testParameter))
+			else:
+				self.assertTrue(testOptions.has_key(testParameter))
+				self.assertEquals(testOptions.get(testParameter), aTestParameters.get(testParameter))
+
+	def testBldInfExtensions(self):
+		bldInfTestRoot = self.__testRoot.Append('metadata/project/bld.infs')
+		bldInfMakefilePathTestRoot = str(self.__makefilePathTestRoot)+'/metadata/project/bld.infs'			
+		depfiles = []
+		bldInfObject = raptor_meta.BldInfFile(bldInfTestRoot.Append('extensions.inf'),
+											  self.__gnucpp, depfiles=depfiles, log=self.raptor)
+		
+		extensions = bldInfObject.getExtensions(self.ARMV5)
+		
+		self.__testExtension(extensions[0],
+							'test/dummyextension1.mk',
+							{'TARGET':'dummyoutput1.exe',
+							'SOURCES':'dummysource11.cpp dummysource12.cpp dummysource13.cpp',
+							'DEPENDENCIES':'dummylib11.lib dummylib12.lib',
+							'TOOL':'dummytool1.exe',
+							'OPTION11':'option11value',
+							'OPTION12':'$(MAKE_VAR)',
+							'STDVAR_TO_ROOT':"",
+							'STDVAR_TO_BLDINF':bldInfMakefilePathTestRoot,
+							'STDVAR_EXTENSION_ROOT':bldInfMakefilePathTestRoot}		
+							)
+		
+		self.__testExtension(extensions[1],
+							'test/dummyextension2.mk',
+							{'TARGET':'dummyoutput2.exe',
+							'SOURCES':'dummysource21.cpp dummysource22.cpp dummysource23.cpp',
+							'DEPENDENCIES':'dummylib21.lib dummylib22.lib',
+							'TOOL':'dummytool2.exe',
+							'OPTION21':'option21value',
+							'OPTION22':'$(MAKE_VAR)',
+							'STDVAR_TO_ROOT':"",
+							'STDVAR_TO_BLDINF':bldInfMakefilePathTestRoot,
+							'STDVAR_EXTENSION_ROOT':bldInfMakefilePathTestRoot}
+							)
+		
+		self.__testExtension(extensions[2],
+							'$(' + raptor.env + ')/test/dummyextension3.mk',
+							{'TARGET':'dummyoutput3.exe',
+							'SOURCES':'dummysource31.cpp dummysource32.cpp dummysource33.cpp',
+							'DEPENDENCIES':'dummylib31.lib dummylib32.lib',
+							'TOOL':'dummytool3.exe',
+							'OPTION31':'option31value',
+							'OPTION32':'$(MAKE_VAR)',
+							'STDVAR_TO_ROOT':"",
+							'STDVAR_TO_BLDINF':bldInfMakefilePathTestRoot,
+							'STDVAR_EXTENSION_ROOT':bldInfMakefilePathTestRoot}
+							)
+		
+		testExtensions = bldInfObject.getTestExtensions(self.ARMV5)
+
+		self.__testExtension(testExtensions[0],
+							'test/dummytestextension1.mk',
+							{'TARGET':'dummytestoutput1.exe',
+							'SOURCES':'dummytestsource11.cpp dummytestsource12.cpp dummytestsource13.cpp',
+							'DEPENDENCIES':'dummytestlib11.lib dummytestlib12.lib',
+							'TOOL':'dummytesttool1.exe',
+							'OPTIONTEST11':'optiontest11value',
+							'OPTIONTEST12':'$(MAKE_VAR)',
+							'STDVAR_TO_ROOT':"",
+							'STDVAR_TO_BLDINF':bldInfMakefilePathTestRoot,
+							'STDVAR_EXTENSION_ROOT':bldInfMakefilePathTestRoot}		
+							)
+
+		self.__testExtension(testExtensions[1],
+							'test/dummytestextension2.mk',
+							{'TARGET':'dummytestoutput2.exe',
+							'SOURCES':'dummytestsource21.cpp dummytestsource22.cpp dummytestsource23.cpp',
+							'DEPENDENCIES':'dummytestlib21.lib dummytestlib22.lib',
+							'TOOL':'dummytesttool2.exe',
+							'OPTIONTEST21':'optiontest21value',
+							'OPTIONTEST22':'$(MAKE_VAR)',
+							'STDVAR_TO_ROOT':"",
+							'STDVAR_TO_BLDINF':bldInfMakefilePathTestRoot,
+							'STDVAR_EXTENSION_ROOT':bldInfMakefilePathTestRoot}		
+							)
+	
+	def testBadBldInfs(self):
+		bldInfTestRoot = self.__testRoot.Append('metadata/project/bld.infs')
+		depfiles=[]
+		
+		class BadBldInfLogger(object):
+			"mock logger to capture Error messages from the parser."
+			
+			def __init__(self):
+				self.errors = []
+				self.debugOutput = False
+				
+			def Error(self, format, *extras, **attributes):
+				self.errors.append( ((format % extras), attributes) )
+		
+			def Debug(self, format, *extras, **attributes):
+				pass
+				
+		logger = BadBldInfLogger()
+		
+		# this bld.inf has END lines with no matching START
+		bldInfObject = raptor_meta.BldInfFile(bldInfTestRoot.Append('bad_lone_end.inf'),
+											  self.__gnucpp, depfiles=depfiles, 
+											  log=logger)
+		
+		# the PRJ_EXTENSIONS section is bad for ARMV5
+		extensions = bldInfObject.getExtensions(self.ARMV5)
+		#
+		self.assertEquals(len(logger.errors), 1)
+		err = logger.errors[0]
+		self.assertEquals(err[0], "unmatched END statement in PRJ_EXTENSIONS section")
+		self.assertTrue("bldinf" in err[1])
+		self.assertTrue(err[1]["bldinf"].endswith("bad_lone_end.inf"))
+		
+		# the PRJ_TESTEXTENSIONS section is bad for WINSCW
+		testextensions = bldInfObject.getTestExtensions(self.WINSCW)
+		#
+		self.assertEquals(len(logger.errors), 2)
+		err = logger.errors[1]
+		self.assertEquals(err[0], "unmatched END statement in PRJ_TESTEXTENSIONS section")
+		self.assertTrue("bldinf" in err[1])
+		self.assertTrue(err[1]["bldinf"].endswith("bad_lone_end.inf"))
+			
+	def testBldInfIncludes(self):
+		bldInfTestRoot = self.__testRoot.Append('metadata/project/bld.infs/includes')
+		depfiles=[]
+		bldInfObject = raptor_meta.BldInfFile(bldInfTestRoot.Append('top_level.inf'),
+											  self.__gnucpp, depfiles=depfiles, log=self.raptor)
+		Root = str(bldInfTestRoot)
+		
+		mmpFiles = bldInfObject.getMMPList(self.ARMV5)
+		self.assertEquals(len(mmpFiles['mmpFileList']), 3)	
+		self.assertEquals(str(mmpFiles['mmpFileList'][0].filename), Root + "/dir3/down_dir.mmp")
+		self.assertEquals(str(mmpFiles['mmpFileList'][1].filename), Root + "/dir1/dir2/up_dir.mmp")
+		self.assertEquals(str(mmpFiles['mmpFileList'][2].filename), Root + "/top_level.mmp")
+
+		exports = bldInfObject.getExports(self.ARMV5)
+		self.assertEquals(exports[0].getSource(), Root + "/dir3/down_dir_export_source.h")
+		self.assertEquals(exports[1].getSource(), Root + "/dir1/dir2/up_dir_export_source.h")
+		self.assertEquals(exports[2].getSource(), Root + "/top_level_export_source.h")
+
+	def testMmpIncludes(self):
+		mmpTestRoot = self.__testRoot.Append('metadata/project/mmps/includes')
+		mmpMakefilePathTestRoot = str(self.__makefilePathTestRoot)+'/metadata/project/mmps/includes'
+
+		depfiles=[]
+		bldInfObject = raptor_meta.BldInfFile(mmpTestRoot.Append('top_level.inf'),
+										 self.__gnucpp, depfiles=depfiles, log=self.raptor)
+		
+		mmpFiles = bldInfObject.getMMPList(self.ARMV5)
+		mmpdeps = []
+		mmpFile = raptor_meta.MMPFile(mmpFiles['mmpFileList'][0].filename, 
+										   self.__gnucpp,
+										   bldInfObject,
+									           depfiles=mmpdeps,
+										   log=self.raptor)
+		
+		self.assertEquals(str(mmpFile.filename), 
+						  str(mmpTestRoot.Append("top_level.mmp")))
+	
+	
+		mmpContent = mmpFile.getContent(self.ARMV5)
+		mmpBackend = raptor_meta.MMPRaptorBackend(None, str(mmpFile.filename), str(bldInfObject.filename))
+		mmpParser = mmpparser.MMPParser(mmpBackend)
+		parseresult = None
+		try:
+			parseresult = mmpParser.mmp.parseString(mmpContent)
+		except Exception,e:
+			pass
+			
+		self.assertTrue(parseresult)
+		self.assertEquals(parseresult[0],'MMP')
+
+		mmpBackend.finalise(self.ARMV5)
+		
+		var = mmpBackend.BuildVariant
+
+		sources = []
+		for i in var.ops:
+			if i.name == "SOURCE":
+				sources.extend(i.value.split(" "))
+
+		self.assertTrue((mmpMakefilePathTestRoot+'/top_level.cpp') in sources)
+		self.assertTrue((mmpMakefilePathTestRoot+'/dir1/dir2/up_dir.cpp') in sources)
+		self.assertTrue((mmpMakefilePathTestRoot+'/dir3/down_dir.cpp') in sources)
+	
+	
+	def testDefFileResolution(self):
+		
+		class DefFileTest(object):
+			""" Test resolveDefFile for a particular set of mmp options """
+			def __init__(self, resolveddeffile, mmpfilename, deffilekeyword, target, nostrictdef, platform):
+				self.resolveddeffile = resolveddeffile
+				self.mmpfilename=mmpfilename
+				self.deffilekeyword=deffilekeyword
+				self.target=target
+				self.nostrictdef = nostrictdef
+				self.platform = platform
+		
+			def test(self, raptor):
+				m = raptor_meta.MMPRaptorBackend(raptor, self.mmpfilename, "")
+				m.deffile = self.deffilekeyword
+				m.nostrictdef = self.nostrictdef
+				f = m.resolveDefFile(self.target, self.platform)
+				
+				return path_compare_notdrivelettercase(self.resolveddeffile,f)
+		
+		defFileTests = []
+		
+		for testPlat in self.testPlats:			
+			epocroot = str(testPlat['EPOCROOT'])
+			releaseDir = testPlat['PLATFORM'].lower()
+			defFileDir = "eabi"
+			if testPlat['PLATFORM'] == "WINSCW":
+				defFileDir = "bwins"
+							
+			defFileTests.extend([
+				DefFileTest(
+					self.__OSRoot+'/test/'+defFileDir+'/targetu.def',
+					'/test/component/mmpfile.mmp',
+					'',
+					'target.exe',
+					False,
+					testPlat),
+				DefFileTest(
+					self.__OSRoot+'/test/'+defFileDir+'/target.def',
+					'/test/component/mmpfile.mmp',
+					'',
+					'target.exe',
+					True,
+					testPlat),
+				DefFileTest(
+					self.__OSRoot+'/test/'+defFileDir+'/targetu.DEF',
+					'/test/component/mmpfile.mmp',
+					'target.DEF',
+					'target.exe',
+					False,
+					testPlat),
+				DefFileTest(
+					self.__OSRoot+'/test/'+defFileDir+'/target2.DEF',
+					'/test/component/mmpfile.mmp',
+					'target2.DEF',
+					'target.exe',
+					True,
+					testPlat),
+				DefFileTest(
+					self.__OSRoot+'/test/component/target2u.DEF',
+					'/test/component/mmpfile.mmp',
+					'./target2.DEF',
+					'target.exe',
+					False,
+					testPlat),
+				DefFileTest(
+					self.__OSRoot+'/test/component/target2.DEF',
+					'/test/component/mmpfile.mmp',
+					'./target2.DEF',
+					'target.exe',
+					True,
+					testPlat),
+				DefFileTest(
+					self.__OSRoot+'/test/component/'+defFileDir+'/target3u.DEF',
+					'/test/component/mmpfile.mmp',
+					'./~/target3.DEF',
+					'target.exe',
+					False,
+					testPlat),
+				DefFileTest(
+					epocroot+'/epoc32/include/def/'+defFileDir+'/targetu.def',
+					'/test/component/mmpfile.mmp',
+					'/epoc32/include/def/~/target.def',
+					'target.exe',
+					False,
+					testPlat),
+				DefFileTest(
+					epocroot+'/epoc32/release/'+releaseDir+'/target.def',
+					'/test/component/mmpfile.mmp',
+					'/epoc32/release/'+releaseDir+'/target.def',
+					'target.exe',
+					True,
+					testPlat),
+				DefFileTest(
+					self.__OSRoot+'/deffiles/targetu.def',
+					'/test/component/mmpfile.mmp',
+					'/deffiles/target.def',
+					'target.exe',
+					False,
+					testPlat)
+				])
+		
+		for t in defFileTests:
+			result = t.test(self.raptor)
+			self.assertEquals(result, True)
+	
+	def dummyMetaReader(self):
+		"make raptor_meta.MetaReader.__init__ into a none operation"
+		self.savedInit = raptor_meta.MetaReader.__init__
+
+		def DummyMetaReaderInit(self, aRaptor):
+			self._MetaReader__Raptor = aRaptor
+
+		raptor_meta.MetaReader.__init__ = DummyMetaReaderInit
+
+	def restoreMetaReader(self):
+		"make raptor_meta.MetaReader.__init__ operational again"
+		raptor_meta.MetaReader.__init__ = self.savedInit
+
+	def testApplyOsVariant(self):
+		self.dummyMetaReader()
+
+		# Mock output class
+		class OutputMock(object):
+			def write(self, text):
+				pass
+				
+		bu = raptor_data.BuildUnit("os_variant", [])
+					
+		self.raptor.keepGoing = False
+		
+		metaReader = raptor_meta.MetaReader(self.raptor)
+		metaReader.ApplyOSVariant(bu, ".")
+
+		self.raptor.keepGoing = True
+		self.raptor.out = OutputMock()
+		metaReader = raptor_meta.MetaReader(self.raptor)	
+		metaReader.ApplyOSVariant(bu, ".")
+
+		self.restoreMetaReader()
+
+	def __assertEqualStringList(self, aListOne, aListTwo):
+		self.assertEquals(len(aListOne), len(aListTwo))
+		
+		i = 0
+		while i < len(aListOne) :
+			self.assertEquals(aListOne[i], aListTwo[i])
+			i = i + 1
+		
+	def testOptionReplace(self):
+		# Test how we resolve known permutations of values given to the .mmp file OPTION_REPLACE keyword
+		mockBackend = raptor_meta.MMPRaptorBackend(self.raptor, "somefile.mmp", "")
+		
+		results = mockBackend.resolveOptionReplace('--argA')
+		self.__assertEqualStringList(results, ['--argA<->'])
+
+		results = mockBackend.resolveOptionReplace('--argB value')
+		self.__assertEqualStringList(results, ['--argB%20<->@@', '@@%<->--argB%20value'])
+		
+		results = mockBackend.resolveOptionReplace('--argD value1 --argE')
+		self.__assertEqualStringList(results, ['--argD%20<->@@', '@@%<->--argD%20value1', '--argE<->'])
+		
+		results = mockBackend.resolveOptionReplace('--argF --argG')
+		self.__assertEqualStringList(results, ['--argF<->--argG'])
+		
+		results = mockBackend.resolveOptionReplace('--argH --argI value')
+		self.__assertEqualStringList(results, ['--argH<->--argI%20value'])
+		
+		results = mockBackend.resolveOptionReplace('--argJ value1 --argK value2')
+		self.__assertEqualStringList(results, ['--argJ%20<->@@', '@@%<->--argJ%20value1', '--argK%20<->@@', '@@%<->--argK%20value2'])		
+		
+		results = mockBackend.resolveOptionReplace('--argL value1 --argM value2 --argN --argO')
+		self.__assertEqualStringList(results, ['--argL%20<->@@', '@@%<->--argL%20value1', '--argM%20<->@@', '@@%<->--argM%20value2', '--argN<->--argO'])		
+		
+		results = mockBackend.resolveOptionReplace('--argP value1 value2 --argQ value3 value4')
+		self.__assertEqualStringList(results, ['--argP%20<->@@', '@@%<->--argP%20value1', '--argQ%20<->@@', '@@%<->--argQ%20value3'])		
+		
+		results = mockBackend.resolveOptionReplace('value1 value2')
+		self.__assertEqualStringList(results, [])
+
+		results = mockBackend.resolveOptionReplace('value1 --argR')
+		self.__assertEqualStringList(results, ['--argR<->'])
+		
+		results = mockBackend.resolveOptionReplace('-singleHyphenargS value1 -singleHyphenargT value2')
+		self.__assertEqualStringList(results, ['-singleHyphenargS%20<->@@', '@@%<->-singleHyphenargS%20value1', '-singleHyphenargT%20<->@@', '@@%<->-singleHyphenargT%20value2'])
+
+		results = mockBackend.resolveOptionReplace('--assignmentArgU=value1 --assignmentArgV=value2')
+		self.__assertEqualStringList(results, ['--assignmentArgU=value1<->--assignmentArgV=value2'])
+	
+	def testModuleName(self):
+		self.dummyMetaReader()
+
+		# Test how we resolve known permutations of values given to the .mmp file OPTION_REPLACE keyword
+		mockBackend = raptor_meta.MetaReader(self.raptor)
+		
+		resultsDictList = [ {"bldinf":"Z:/src/romfile/group/tb92/GROUP/bld.inf", "result":"romfile"},
+				    {"bldinf":"/src/romfile/group/tb92/GROUP/bld.inf", "result":"romfile"},
+				    {"bldinf":"Z:/src/romFile/group/tb92/GROUP/another.inf", "result":"romFile"},
+				    {"bldinf":"X:/src/RoMfile/group/bld.inf", "result":"RoMfile"},
+				    {"bldinf":"w:/contacts/group/ONgoing/group/bld.inf", "result":"contacts"},
+				    {"bldinf":"p:/group/bld.inf", "result":"module"},
+				    {"bldinf":"/group/bld.inf", "result":"module"},
+				    {"bldinf":"p:/ONGOING/bld.inf", "result":"module"},
+				    {"bldinf":"/ONGOING/bld.inf", "result":"module"}
+				    ]
+
+		for result in resultsDictList:
+			moduleName = mockBackend.ModuleName(result["bldinf"])
+			self.assertEquals(moduleName, result["result"])
+
+		self.restoreMetaReader()
+
+
+def path_compare_notdrivelettercase(aRequirement, aCandidate):
+	if sys.platform.startswith("win"):
+		if aRequirement[1] == ":":
+			aRequirement = aRequirement[0].lower() + aRequirement[1:]
+			aCandidate = aCandidate[0].lower() + aCandidate[1:]
+
+	return aRequirement == aCandidate
+
+		
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "raptor_meta_unit"
+
+	tests = unittest.makeSuite(TestRaptorMeta)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/raptor_unit.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,245 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+# Unit tests for the raptor module
+
+import raptor
+import raptor_version
+import raptor_meta
+import raptor_utilities
+import re
+import unittest
+import generic_path
+import tempfile
+import os
+
+class TestRaptor(unittest.TestCase):
+
+	def testConstructor(self):
+		r = raptor.Raptor()
+		self.failUnless(r)
+
+
+	def testHome(self):
+		r = raptor.Raptor()
+		self.failUnless(r.home)
+		r = raptor.Raptor("dirname")
+		self.failUnless(r.errorCode == 1) # picked up that dirname doesn't exist
+		
+
+	def testVersion(self):
+		self.failUnless(re.match("^\d+\.\d+\.", raptor_version.fullversion()))
+
+
+	def testCLISupport(self):
+		r = raptor.Raptor()
+		r.RunQuietly(True)
+		r.AddConfigName("tom")
+		r.AddConfigName("dick")
+		r.AddConfigName("harry")
+		r.SetEnv("ROOT", "/a/b/c")
+		r.SetEnv("TREE", "beech")
+		r.SetJobs(4)
+		r.AddProject("foo.mmp")
+		r.AddProject("bar.mmp")
+		r.SetSysDefFile("SysDef.xml")
+		r.SetSysDefBase("C:\\mysysdef")
+		r.AddBuildInfoFile("build.info")
+		r.SetTopMakefile("E:\\epoc32\\build\\Makefile")
+		
+		
+	def testComponentListParsing(self):
+		expected_spec_output = [
+				'test/smoke_suite/test_resources/simple/bld.inf',
+				'test/smoke_suite/test_resources/simple_export/bld.inf',
+				'test/smoke_suite/test_resources/simple_dll/bld.inf',
+				'test/smoke_suite/test_resources/simple_extension/bld.inf',
+				'test/smoke_suite/test_resources/simple_gui/Bld.inf',
+				'TOOLS2 SHOULD NOT APPEAR IN THE OUTPUT']
+		
+		r = raptor.Raptor()
+		null_log_instance = raptor_utilities.NullLog()
+		r.Info = null_log_instance.Info 
+		r.Debug = null_log_instance.Debug
+		r.Warn = null_log_instance.Warn
+		r.ConfigFile()
+		r.ProcessConfig()
+		# Note that tools2/bld.inf specifies tools2 as the only supported
+		# platform, so it should not appear in the component list at the end
+		r.CommandLine([
+				'-b', 'smoke_suite/test_resources/simple/bld.inf',
+				'-b', 'smoke_suite/test_resources/simple_dll/bld.inf',
+				'-b', 'smoke_suite/test_resources/simple_export/bld.inf',
+				'-b', 'smoke_suite/test_resources/simple_extension/bld.inf',
+				'-b', 'smoke_suite/test_resources/simple_gui/Bld.inf',
+				'-b', 'smoke_suite/test_resources/tools2/bld.inf',
+				'-c', 'armv5'])
+		# establish an object cache
+		r.LoadCache()
+		buildUnitsToBuild = r.GetBuildUnitsToBuild(r.configNames)
+		# find out what components to build, and in what way
+		layers = []
+		layers = r.GetLayersFromCLI()
+		
+		generic_specs = r.GenerateGenericSpecs(buildUnitsToBuild)
+		
+		specs = []
+		specs.extend(generic_specs)
+		metaReader = raptor_meta.MetaReader(r, buildUnitsToBuild)
+		specs.extend(metaReader.ReadBldInfFiles(layers[0].children,
+				False))
+
+		# See what components are actually built for the given configs
+		# should be only 5 since 1 is a tools component and we're building armv5
+		hits = 0
+		for c in layers[0].children:
+			if len(c.specs) > 0: 
+				# something will be built from this component because
+				# it has at least one spec
+				shortname = str(c.bldinf_filename)[len(os.environ['SBS_HOME'])+1:]
+				self.assertTrue(shortname in expected_spec_output)
+				hits += 1
+
+		# Ensure there actually are 5 build specs
+		self.assertEqual(hits, len(expected_spec_output) - 1)
+
+
+	def setUp(self):
+		self.r = raptor.Raptor()
+		
+		self.cwd = generic_path.CurrentDir()
+		self.isFileReturningFalse = lambda: False
+		self.isFileReturningTrue = lambda: True
+		
+		self.sysDef = self.cwd.Append(self.r.systemDefinition)
+		self.bldInf = self.cwd.Append(self.r.buildInformation)
+
+	def testWarningIfSystemDefinitionFileDoesNotExist(self): 
+		"""Test if sbs creates warning if executed without specified 
+		component to build i.e. default bld.inf (bld.inf in current 
+		directory) or system definition file.
+
+		Uses an empty temporary directory for this."""
+		self.r.out = OutputMock()
+
+		d = tempfile.mkdtemp(prefix='raptor_test') 
+		cdir = os.getcwd()
+		os.chdir(d) 
+		layers = self.r.GetLayersFromCLI()
+		os.chdir(cdir) # go back
+		os.rmdir(d)
+		
+		self.assertTrue(self.r.out.warningWritten())
+
+		d = tempfile.mkdtemp(prefix='raptor_test') 
+		cdir = os.getcwd()
+		os.chdir(d)
+		f = open("bld.inf","w")
+		f.close()
+		layers = self.r.GetLayersFromCLI()
+		os.unlink("bld.inf")
+		os.chdir(cdir) # go back
+		os.rmdir(d)
+
+		self.assertTrue(self.r.out.warningWritten())
+
+	def testNoWarningIfSystemDefinitionFileExists(self): 
+		self.r.out = OutputMock()
+
+		d = tempfile.mkdtemp(prefix='raptor_test') 
+		cdir = os.getcwd()
+		os.chdir(d)
+		f = open("System_Definition.xml","w")
+		f.close()
+		layers = self.r.GetLayersFromCLI()
+		os.unlink("System_Definition.xml")
+		os.chdir(cdir) # go back
+		os.rmdir(d)
+
+		self.assertFalse(self.r.out.warningWritten())
+	
+	# Test Info, Warn & Error functions can handle attributes
+	def testInfoAttributes(self):
+		self.r.out = OutputMock()
+		self.r.Info("hello %s", "world", planet="earth")
+		expected = "<info planet='earth'>hello world</info>\n"
+		self.assertEquals(self.r.out.actual, expected)
+		
+	def testWarnAttributes(self):
+		self.r.out = OutputMock()
+		self.r.Warn("look out", where="behind you")
+		expected = "<warning where='behind you'>look out</warning>\n"
+		self.assertEquals(self.r.out.actual, expected)
+		
+	def testErrorAttributes(self):
+		self.r.out = OutputMock()
+		self.r.Error("messed up %s and %s", "all", "sundry", bldinf="bld.inf")
+		expected = "<error bldinf='bld.inf'>messed up all and sundry</error>\n"
+		self.assertEquals(self.r.out.actual, expected)	
+		
+	# Test Info, Warn & Error functions to ensure XML control chars are escaped
+	def testInfoXMLEscaped(self):
+		self.r.out = OutputMock()
+		self.r.Info("h&l>o<&amp;")
+		expected = "<info>h&amp;l&gt;o&lt;&amp;amp;</info>\n"
+		self.assertEquals(self.r.out.actual, expected)
+		
+	def testWarnXMLEscaped(self):
+		self.r.out = OutputMock()
+		self.r.Warn("h&l>o<&amp;")
+		expected = "<warning>h&amp;l&gt;o&lt;&amp;amp;</warning>\n"
+		self.assertEquals(self.r.out.actual, expected)
+		
+	def testErrorXMLEscaped(self):
+		self.r.out = OutputMock()
+		self.r.Error("h&l>o<&amp;")
+		expected = "<error>h&amp;l&gt;o&lt;&amp;amp;</error>\n"
+		self.assertEquals(self.r.out.actual, expected)
+	
+		
+# Mock output class preserving output for checking
+# Can also check if any warning has been written
+class OutputMock(object):
+	warningRegExp = re.compile(".*warning.*")
+
+	def __init__(self):
+		self.actual = ""
+	
+	def write(self, text):
+		self.actual += text
+		
+	def warningWritten(self):
+		if OutputMock.warningRegExp.match(self.actual):
+			return True
+		return False
+			
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "raptor_unit"
+
+	tests = unittest.makeSuite(TestRaptor)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/raptor_utilities_unit.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# raptor_utilities_unit module
+# This module tests the classed forming the Raptor bld.inf and .mmp parsing support
+#
+
+import os
+import raptor_utilities
+import sys
+import unittest
+
+class TestRaptorUtilities(unittest.TestCase):
+	pass
+				
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "raptor_utilities_unit"
+
+	tests = unittest.makeSuite(TestRaptorUtilities)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/test/unit_suite/raptor_xml_unit.py	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,158 @@
+#
+# Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+# raptor_xml_unit module
+# This module tests the identification and parsing of XML metadata files
+#
+
+import os
+import generic_path
+import raptor
+import raptor_xml
+import unittest
+
+class TestRaptorXML(unittest.TestCase):
+		
+	class Logger(object):
+		# Basic custom logger class to store errors (and only errors) for test checks
+
+		def __init__(self):	
+			self.errors = []
+					
+		def Error(self, format, *extras, **attributes):
+			self.errors.append(format % extras)
+
+		def Info(self, format, *extras, **attributes):
+			return
+			
+		def InfoDiscovery(self, object_type, count):
+			return
+		
+		def Clear(self):
+			del self.errors[:]
+			
+	
+	def setUp(self):
+		self.__logger = TestRaptorXML.Logger()
+		self.__nullSysDefRoot = generic_path.Path("smoke_suite/test_resources")
+		self.__sysDefRoot = generic_path.Join(os.environ[raptor.env],"test/smoke_suite/test_resources")
+		self.__sysDefFileRoot = generic_path.Join(os.environ[raptor.env], "test/metadata/system")
+		
+	def testSystemDefinitionProcessing(self):
+		# Make formatting neater
+		print
+		expectedBldInfs = [generic_path.Join(self.__sysDefRoot, "simple/bld.inf"),\
+						generic_path.Join(self.__sysDefRoot, "basics/helloworld/Bld.inf")]
+		
+		sysdefs = ["1.4.1", "1.3.1", "1.5.1"]
+		for sysdef in sysdefs:
+			systemModel = raptor_xml.SystemModel(self.__logger,
+					generic_path.Join(self.__sysDefFileRoot,
+					"system_definition_" + sysdef + ".xml"), self.__sysDefRoot)
+			self.__compareFileLists(expectedBldInfs, systemModel.GetAllComponents())
+		
+	
+		sourceroot = ""
+		if os.environ.has_key('SOURCEROOT'):
+			sourceroot = os.environ['SOURCEROOT']
+		os.environ['SOURCEROOT'] = self.__sysDefRoot.GetLocalString()
+		systemModel = raptor_xml.SystemModel(self.__logger, generic_path.Join(self.__sysDefFileRoot, "system_definition_2.0.0.xml"), self.__nullSysDefRoot)
+		self.__compareFileLists(expectedBldInfs, systemModel.GetAllComponents())
+
+		del os.environ["SOURCEROOT"]
+		systemModel = raptor_xml.SystemModel(self.__logger, generic_path.Join(self.__sysDefFileRoot, "system_definition_2.0.0.xml"), self.__sysDefRoot)
+		self.__compareFileLists(expectedBldInfs, systemModel.GetAllComponents())
+		
+		os.environ["SOURCEROOT"] = 'i_am_not_a_valid_path_at_all'
+		systemModel = raptor_xml.SystemModel(self.__logger, generic_path.Join(self.__sysDefFileRoot, "system_definition_2.0.0.xml"), self.__sysDefRoot)
+		self.__compareFileLists(expectedBldInfs, systemModel.GetAllComponents())
+
+				
+		del os.environ["SOURCEROOT"]
+		systemModel = raptor_xml.SystemModel(self.__logger, generic_path.Join(self.__sysDefFileRoot, "system_definition_3.0.0.xml"), self.__sysDefRoot)
+		self.__compareFileLists([], systemModel.GetAllComponents())
+				
+		self.__logger.Clear()
+		systemModel = raptor_xml.SystemModel(self.__logger, generic_path.Join(self.__sysDefFileRoot, "system_definition_multi_layers.xml"), self.__sysDefRoot)
+		self.assertTrue(len(self.__logger.errors) == 0)
+
+		# Confirm components returned from layers are correct
+
+		expectedBldInfs = [ generic_path.Join(self.__sysDefRoot, "simple/bld.inf"),\
+							generic_path.Join(self.__sysDefRoot, "simple_dll/bld.inf"),\
+						    generic_path.Join(self.__sysDefRoot, "simple_export/bld.inf"),\
+						    generic_path.Join(self.__sysDefRoot, "simple_gui/Bld.inf"),\
+						    generic_path.Join(self.__sysDefRoot, "simple_implib/bld.inf"),\
+						    generic_path.Join(self.__sysDefRoot, "simple_lib/bld.inf"),\
+						    generic_path.Join(self.__sysDefRoot, "simple_stringtable/bld.inf"),\
+						    generic_path.Join(self.__sysDefRoot, "simple_test/bld.inf"),\
+						    generic_path.Join(self.__sysDefRoot, "simple_plugin/bld.inf")]
+		self.__compareFileLists(expectedBldInfs, systemModel.GetAllComponents())
+	
+		expectedBldInfs = [ generic_path.Join(self.__sysDefRoot, "simple_export/bld.inf"),\
+						    generic_path.Join(self.__sysDefRoot, "simple_gui/Bld.inf")]
+		self.__compareFileLists(expectedBldInfs, systemModel.GetLayerComponents("Second Layer"))
+
+		self.__compareFileLists([], systemModel.GetLayerComponents("Fifth Layer"))
+				
+		self.__compareFileLists([], systemModel.GetLayerComponents("Sixth Layer"))
+		
+		# Check that the overall "buildability" of layers is returned correctly
+		# Note that a layer is still buildable if some bld.infs in it are missing as long as at least 1 exists
+		# However, errors should always be generated for missing bld.infs when a layer is checked
+		
+		self.assertTrue(systemModel.IsLayerBuildable("First Layer"))		
+		self.assertFalse(systemModel.IsLayerBuildable("Sixth Layer"))
+		
+		self.__logger.Clear()
+		self.assertTrue(systemModel.IsLayerBuildable("Seventh Layer"))
+		self.assertTrue(len(self.__logger.errors) == 1)
+		sbsHome = os.environ["SBS_HOME"]
+		sysDefPath = sbsHome + "/test/metadata/system/system_definition_multi_layers.xml"
+		sysDefPath = sysDefPath.replace("\\","/")
+		bldInfPath = sbsHome + "/test/smoke_suite/test_resources/does_not_existbld.inf"
+		bldInfPath = bldInfPath.replace("\\","/")
+		self.assertEquals(self.__logger.errors[0],
+		  ("System Definition layer \"Seventh Layer\" from system definition file \"%s\" refers to non existent bld.inf file %s" % (sysDefPath, bldInfPath)))
+				
+		# Probably redundant, but return local environment (at least its dictionary) to pre-test state
+		os.environ["SOURCEROOT"] = sourceroot
+		
+	def __compareFileLists (self, aListOne, aListTwo):
+		
+		self.assertEquals(len(aListOne), len(aListTwo))
+		
+		i = 0
+		while i < len(aListOne) :
+			self.assertEquals(aListOne[i].GetLocalString().lower(), aListTwo[i].GetLocalString().lower())
+			i = i + 1
+		
+# run all the tests
+
+from raptor_tests import SmokeTest
+
+def run():
+	t = SmokeTest()
+	t.id = "999"
+	t.name = "raptor_xml_unit"
+
+	tests = unittest.makeSuite(TestRaptorXML)
+	result = unittest.TextTestRunner(verbosity=2).run(tests)
+
+	if result.wasSuccessful():
+		t.result = SmokeTest.PASS
+	else:
+		t.result = SmokeTest.FAIL
+
+	return t
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/util/talon/chomp.c	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,177 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+/*
+   Get rid of the path to talon from a commandline string on windows find the 
+   -c (if it's there) and step past it to after the quote on the first command:
+
+   "g:\program files\talon\talon.exe" -c "gcc -c . . ."
+                                          ^------ Returns a pointer to here
+
+   Take care of the possibilty that there might be spaces in the command
+   if it is quoted.
+
+   A state-machine is flexible but not all that easy to write.  Should investigate
+   the possiblity of using the Ragel state machine generator perhaps.
+
+*/
+#define CH_START 0 	/* start state */
+#define CH_PRE 1	/* spaces before executable name */
+#define CH_EXQUOTE 2    /* part of the executable name, outside quotes */
+#define CH_INQUOTE 3	/* part of the executable name, in a quoted region */
+#define CH_POST 4	/* spaces after executable name */
+#define CH_MINUS 5	/* start of -c option */
+#define CH_C 6		/* end of -c option */
+#define CH_PRECOMMAND 7 /* spaces before shell commands */
+#define CH_COMMAND 8	/* first character of shell command */
+#define CH_ERR 9	/* Error! */
+
+#include "log.h"
+#include "chomp.h"
+
+char * chompCommand(char command[])
+{
+	char *result = command;
+	int state = CH_START;
+
+	while (state != CH_COMMAND && state != CH_ERR)
+	{
+		DEBUG(("startstate: %d, char %c ",state, *result));
+		switch (*result)
+		{
+			case ' ':
+				switch (state)
+				{
+					case CH_START:
+					case CH_PRE:
+						state = CH_PRE;
+						break;
+					case CH_EXQUOTE:
+						state = CH_POST;
+						break;
+					case CH_INQUOTE:
+						break;
+					case CH_POST:
+						break;
+					case CH_MINUS:
+						state = CH_C;
+						break;
+					case CH_C:
+						state = CH_PRECOMMAND;
+						break;
+					case CH_PRECOMMAND:
+						break;
+					default:
+						state = CH_ERR;
+						break;
+				}
+			break;
+			case 'c':
+				switch (state)
+				{
+					case CH_START:
+					case CH_PRE:
+						state = CH_EXQUOTE;
+						break;
+					case CH_EXQUOTE:
+					case CH_INQUOTE:
+						break;
+					case CH_POST:
+						state = CH_ERR;
+						break;
+					case CH_MINUS:
+						state = CH_C;
+						break;
+					case CH_C:
+					case CH_PRECOMMAND:
+					default:
+						state = CH_ERR;
+						break;
+				}
+			break;
+			case '-':
+				switch (state)
+				{
+					case CH_START:
+					case CH_PRE:
+						state = CH_EXQUOTE;
+						break;
+					case CH_EXQUOTE:
+					case CH_INQUOTE:
+						break;
+					case CH_POST:
+						state = CH_MINUS;
+						break;
+					case CH_MINUS:
+					case CH_C:
+					case CH_PRECOMMAND:
+					default:
+						state = CH_ERR;
+						break;
+				}
+			break;
+			case '"':
+				switch (state)
+				{
+					case CH_START:
+					case CH_PRE:
+					case CH_EXQUOTE:
+						state = CH_INQUOTE;
+						break;
+					case CH_INQUOTE:
+						state = CH_EXQUOTE;
+						break;
+					case CH_POST:
+					case CH_MINUS:
+					case CH_C:
+						state = CH_ERR;
+						break;
+					case CH_PRECOMMAND:
+						state = CH_COMMAND;
+						break;
+					default:
+						state = CH_ERR;
+						break;
+				}
+
+			break;
+			default:
+				switch (state)
+				{
+					case CH_START:
+					case CH_PRE:
+						state = CH_EXQUOTE;
+						break;
+					case CH_INQUOTE:
+					case CH_EXQUOTE:
+						break;
+					default:
+						state = CH_ERR;
+						break;
+				}
+			break;
+		}
+		DEBUG(("endstate: %d\n",state));
+		result ++;
+		
+	}
+
+	if (state == CH_ERR)
+		return (char *)0;
+
+	return result;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/util/talon/chomp.h	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#ifndef _CHOMP_H_
+#define _CHOMP_H_
+char * chompCommand(char command[]);
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/util/talon/testchomp.c	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+* This programs tests the chompCommand function used by talon.
+*/
+
+
+
+
+#include <stdlib.h>
+#include <unistd.h>
+#include <stdio.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+
+
+#include "chomp.h"
+#include "log.h"
+
+char *positives[] =  { 
+"c:\\apps\\talon.exe -c \"armcc -o barney.o\"", 
+"c:\\apps\\sbs2112-capabilites\\bin\\talon.exe -c \"armcc -o barney.o\"", 
+"\"c:\\apps and stuff\\talon.exe\" -c \"armcc -o barney.o\"", 
+"\"c:\\apps-can-cause-crxxx\\talon.exe\" -c \"armcc -o barney.o\"", 
+"c:\\bigspaces-\"   \"\\talon.exe -c \"armcc -o barney.o\"", 
+"c:\\bigspaces2\"   \"\\talon.exe -c \"armcc -o barney.o\"", 
+"c:\\apps\\talon.exe   -c   \"armcc -o barney.o\"", 
+"c:\\\"apps\"\\talon.exe   -c   \"armcc -o barney.o\"", 
+"c:\\\"ap ps\"\\talon.exe -c \"armcc -o barney.o\"", 
+(char *)0
+};
+
+char *negatives[] =  { 
+"c:\\apps\\talon.exe -c\"armcc -o barney.o\"", 
+"c:\\apps and stuff\\talon.exe -c \"armcc -o barney.o\"", 
+"c:\\apps\\talon.exe -c armcc -o barney.o", 
+"c:\\apps\\talon.exe commandlist.tmp", 
+(char *)0
+};
+
+char commandstr[]="armcc -o barney.o\"";
+
+int main(int argc, char *argv[])
+{
+	int i;
+	int errors = 0;
+	/* loglevel = LOGDEBUG; /* useful to leave this here */
+
+	for (i=0; positives[i] != (char *)0 ; i++)
+	{
+		char * c = chompCommand(positives[i]);
+		if (!c)
+		{
+			fprintf(stdout,"error: test failed with NULL on: %s\n", positives[i]);
+			errors++;
+			continue;
+		}
+
+		if (strcmp(commandstr, c) != 0)
+		{
+			fprintf(stdout,"error: test failed with %s on: %s\n", c,positives[i]);
+			errors++;
+			continue;
+		}
+		fprintf(stdout,"ok: %s\n", positives[i]);
+	}
+
+	for (i=0; negatives[i] != (char *)0 ; i++)
+	{
+		char * c = chompCommand(negatives[i]);
+		if (c)
+		{
+			fprintf(stdout,"error: negatice test failed with %s on: %s\n", c, negatives[i]);
+			errors++;
+			continue;
+		}
+		fprintf(stdout,"ok: negative: %s\n", negatives[i]);
+	}
+
+		
+	fprintf(stdout,"TOTAL errors: %d\n", errors);
+	return errors;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/util/talon/tests/config.sh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,35 @@
+#!/bin/bash
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+# set up the environment for some talon tests.
+
+eval `$SBS_HOME/bin/gethost.sh -e`
+
+if [[ "$HOSTPLATFORM" =~ "win" ]]; then
+TEST_SHELL=$(cygpath -w $SBS_HOME/win32/bin/talon.exe)
+TEST_TALON_SHELL=$(cygpath -w $SBS_CYGWIN/bin/bash.exe)
+else
+TEST_SHELL=$SBS_HOME/$HOSTPLATFORM_DIR/bin/talon
+TEST_TALON_SHELL=/bin/bash
+fi
+
+cat >settings.mk <<-endofsettings
+	SHELL:=$TEST_SHELL
+	TALON_SHELL:=$TEST_TALON_SHELL
+	TALON_BUILDID:=100
+	TALON_DEBUG:=""
+	export TALON_SHELL TALON_BUILDID TALON_DEBUG
+endofsettings
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/util/talon/tests/run.sh	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,22 @@
+#!/bin/sh
+#
+# Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+
+bash ./config.sh
+
+make -f t3.mk
+make -f t4.mk
+make -f t5.mk
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sbsv2/raptor/util/talon/tests/t6.mk	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,33 @@
+#
+# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+include settings.mk
+
+# Making sure that forcesuccess works.
+
+TALON_RECIPEATTRIBUTES:=flags='$$TALON_FLAGS'
+TALON_RETRIES:=1
+
+export TALON_RECIPEATTRIBUTES TALON_RETRIES
+
+.PHONY: all fred
+
+all: fred
+	@echo "t6-PASSED"
+	
+fred:
+	|TALON_FLAGS=FORCESUCCESS;|echo "Forcesuccess'd command"; exit 1
+
+
Binary file sbsv2/raptor/win32/bin/unhide_ci_refs.exe has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/DISTRIBUTION.POLICY	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2 @@
+Category T
+OSD:	Reference/Test	Tools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/distillsrc.pl	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,99 @@
+#!/bin/perl -w
+# Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# distillsrc.pl - compiles a list of source used in .mrp files, and deletes
+# any unused source
+# 
+#
+
+use strict;
+use FindBin;
+use Getopt::Long;
+use File::Spec;
+
+use lib $FindBin::Bin;
+use distillsrc;
+
+my $errorLevel = 0;
+
+# Distillsrc is to continue on error rather than die.  A warning handler is used
+# so that we can still exit with an error level.
+$SIG{__WARN__} = sub {warn @_;
+                      $errorLevel = 1};
+
+sub dieHelp()
+	{
+	print <<HELP_EOF;
+
+  Usage: perl distillsrc.pl [-f file] [-m file] [-c file] -r src_root
+    -s source_path [-p src_prefix] -l platform [-n] [-d] [-h help];
+	
+  Options in detail:
+    -file|f file : components.txt file to read (may be more than one)
+    -mrp|m file : additional .mrp file to read (may be more than one)
+    -config|c file : a configuration file to use containing .mrp files to use
+    -r src_root : The root from which all src statements are based
+    -s source_path : The path under src_root to the source tree to be processed
+    -p src_prefix : An optional prefix which can be stripped from all src
+      statements
+    -l platform : The platform (beech etc), needed in order to locate the
+      correct product directory
+    -n : don't check the case of files in the config file and in .mrps against
+      the file system
+    -d : dummy mode
+      
+  Note that the src_prefix in combination with the src_root can be used to
+  displace the source tree, if it isn't in it's final location.
+HELP_EOF
+	exit 1;
+	}
+
+# Read command line options to find out if we're doing a dummy run, and where the options are
+my @files = ();
+my @mrps = ();
+my $srcroot;
+my $srcprefix;
+my $dummy = 0;
+my $srcpath;
+my $config;
+my $platform;
+my $help;
+my $nocheckcase;
+GetOptions("config=s" => \$config, "file=s" => \@files, "mrp=s" => \@mrps, "srcroot|r=s" => \$srcroot, "srcpath|s=s" => \$srcpath, "srcprefix|p=s" => \$srcprefix, "platform|l=s" => \$platform, "dummy" => \$dummy, "help" => \$help, "nocheck|n" => \$nocheckcase);
+
+if ($help)
+	{
+	dieHelp();
+	}
+
+
+my $distiller=New CDistillSrc($srcroot, $srcpath, $srcprefix, $platform, !$nocheckcase);
+
+if (!defined($distiller))
+	{
+	dieHelp();
+	}
+
+if (!($distiller->LoadMrps($config, \@files, \@mrps)))
+	{
+	exit 1; # Couldn't read all the mrps - don't start deleting source based on incomplete data
+	}
+
+$distiller->Print(0);
+
+# Run through the source tree, matching every file against the source items. Anything that doesn't, delete it (or warn, if we're doing a dummy run).
+	
+$distiller->DistillSrc($dummy);
+
+exit $errorLevel;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/distillsrc.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,898 @@
+#!/bin/perl -w
+
+# Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# distillsrc.pm - compiles a list of source used in .mrp files, and deletes
+# any unused source
+# 
+#
+
+package CDistillSrc;
+
+use strict;
+use File::Spec;
+use File::Path;
+use File::Basename;
+use FindBin;
+use lib $FindBin::Bin;
+use ReadMrp;
+
+use lib File::Spec->catdir($FindBin::Bin, '..', 'makecbr');
+use CConfig;
+
+
+
+# Constructor
+#
+# Parameters:
+#
+# $aSrcRoot : The root from which all src statements are based
+# $aSrcPath : The path under aSrcRoot to the source tree to be processed
+# $aSrcPrefix : An optional prefix which can be stripped from all src statements
+# $aPlatform : e.g 'beech' - used to locate the platform specific product directory
+#
+# Returns: The object (or undef if there was a problem)
+#
+sub New($$$$)
+	{
+	my $proto = shift;
+	my ($aSrcRoot, $aSrcPath, $aSrcPrefix, $aPlatform, $aCheckCase) = @_;
+
+	my $class = ref($proto) || $proto;
+
+	my $self = {};
+	bless($self, $class);
+
+	my $error = 0;
+
+	if (!defined($aSrcRoot))
+		{
+		print "ERROR: RealTimeBuild: A srcroot must be given, to specify where all 'source' declarations originate from\n";
+		$error = 1;
+		}
+		
+	if (!defined($aSrcPath))
+		{
+		print "ERROR: RealTimeBuild: A srcpath must be given, to specify which source under the srcroot is to be filtered. Use '\\' to filter the entire srcroot\n";
+		$error = 1;
+		}
+
+	if (!defined($aPlatform))
+		{
+		print "ERROR: RealTimeBuild: A platform must be given, to locate the product directory\n";
+		$error = 1;
+		}
+		
+	if ($error)
+		{
+		print "\n";
+		}
+	else
+		{
+		if ($aSrcPath =~ /\.\./)
+			{
+			print "ERROR: RealTimeBuild: The source path must be relative to the srcroot, and must not contain '..'\n";
+			$error = 1;
+			}
+	
+		$self->iSrcRoot($aSrcRoot);
+		$self->iSrcPath($aSrcPath);
+		$self->iSrcPrefix($aSrcPrefix);
+		$self->iPlatform($aPlatform);
+		$self->iSrcItems({});
+		$self->iCheckCase(!!$aCheckCase);
+
+		$self->AddSrcItem("os/buildtools/toolsandutils/productionbldtools/unref/orphan/cedprd/SuppKit", "non-shipped");
+		$self->AddSrcItem("os/buildtools/toolsandutils/productionbldtools/unref/orphan/cedprd/tools", "non-shipped");
+		$self->AddSrcItem("os/buildtools/toolsandutils/productionbldtools/unref/orphan/cedprd/DevKit", "non-shipped");
+		$self->AddSrcItem("os/buildtools/toolsandutils/productionbldtools", "non-shipped");
+		}
+
+	if ($error)
+		{
+		$self = undef;
+		}
+
+	return $self;
+	}
+
+# Object data
+#
+sub iSrcRoot()
+	{
+	my $self = shift;
+	if (@_) { $self->{iSRCROOT} = shift; }
+	return $self->{iSRCROOT};
+	}
+
+sub iSrcPath()
+	{
+	my $self = shift;
+	if (@_) { $self->{iSRCPATH} = shift; }
+	return $self->{iSRCPATH};
+	}
+
+sub iSrcPrefix()
+	{
+	my $self = shift;
+	if (@_) { $self->{iSRCPREFIX} = shift; }
+	return $self->{iSRCPREFIX};
+	}
+
+sub iPlatform()
+	{
+	my $self = shift;
+	if (@_) { $self->{iPLATFORM} = shift; }
+	return $self->{iPLATFORM};
+	}
+	
+sub iSrcItems()
+	{
+	my $self = shift;
+	if (@_) { $self->{iSRCITEMS} = shift; }
+	return $self->{iSRCITEMS};
+	}
+
+sub iCheckCase()
+	{
+	my $self = shift;
+	if (@_) { $self->{iCHECKCASE} = shift; }
+	return $self->{iCHECKCASE};
+	}
+
+sub iCorrectedCase()
+	{
+	my $self = shift;
+	if (@_) { $self->{iCORRECTEDCASE} = shift; }
+	return $self->{iCORRECTEDCASE};
+	}
+
+# LoadMrps - Records the source lines out of all .mrp files
+#
+# Parameters:
+# $aConfig - optional configuration file, as used by makecbr
+# $aLists - optional component lists, as used by makecbr
+# $aMrps - optional .mrp files
+#
+# Returns: True, if the load was successful. False otherwise
+#
+sub LoadMrps($$$)
+	{
+	my $self = shift;
+	my ($aConfig, $aLists, $aMrps) = @_;
+	# Load in config file
+
+	my @lists = @$aLists;
+	my @mrps;
+	foreach my $mrp (@$aMrps){
+		{
+		push @mrps, [$mrp, ''];
+		}
+	}
+	my @configMrps = ();
+    if (defined($aConfig))
+		{
+		my @configs = $self->_LoadConfig($aConfig);
+
+		# Add mrps and lists (after planting them in srcroot)
+		push @lists, map($self->_PlantFile($_), @{$configs[0]});
+		@configMrps = map($self->_PlantFile($_), @{$configs[1]});
+		foreach my $mrp (@configMrps)
+			{
+			push @mrps, [$mrp, ''];
+			}
+		}
+	
+	# Load in mrp lists
+	foreach my $file (@lists)
+		{
+		if (open (MRPLIST, $file))
+			{
+			foreach my $line (<MRPLIST>)
+				{
+				chomp $line;
+				$line =~ s/#.*$//; # Remove comments
+				$line =~ s/^\s*//; # Remove extraneous spaces
+				$line =~ s/\s*$//;
+	
+				if ($line ne "")
+					{
+					my @parms = split(/\s+/, $line);
+	
+					if (scalar(@parms) != 2)
+						{
+						warn "ERROR: RealTimeBuild: Entries in component list '$file' should be of the form 'name mrp_location'. Problem in line: $line\n";
+						next;
+						}
+					else
+						{
+						# Ignore *nosource* entries
+						next if ($parms[1] eq '*nosource*');
+						
+						push @mrps, [$self->_PlantFile($parms[1]), $parms[0]];
+						}
+					}
+				}
+			close MRPLIST or warn "ERROR: RealTimeBuild: Couldn't close '$file' : $!\n";
+			}
+		else
+			{
+			warn "Couldn't open '$file' : $!\n";	
+			}
+		}
+
+	# Load all .mrp files
+	if (scalar(@mrps) == 0)
+		{
+		die "ERROR: RealTimeBuild: No .mrp files were specified\n";
+		}
+
+	my $loaded = 1;
+	
+	foreach my $mrp (@mrps)
+		{
+		# Get path of mrp file (from here)
+		my ($name, $path) = fileparse($mrp->[0]);
+		# Convert to path from source root
+		if (!($self->_RemoveBaseFromPath($self->iSrcRoot(), \$path)))
+			{
+			warn "ERROR: Mrp file $mrp->[0] isn't under the source root (".$self->iSrcRoot().")\n";
+			next;
+			}
+		
+		my $mrpobj;
+        
+        # To indicate the correct case and where the .mrp file comes from if failed to check letter case
+        if (!($self->_CheckCase($mrp->[0]))) {
+            my $mrp_error_source = "optional component list(by -f) or optional .mrp list(by -m)";
+            foreach my $myName (@configMrps) {
+                if ($myName eq $mrp->[0]) {
+                    $mrp_error_source = "config file '".$aConfig."'";
+                    last;
+                }
+            } 
+            print "WARNING: Case of '".$mrp->[0]."' supplied in ".$mrp_error_source." does not match the file system. Should be ".$self->iCorrectedCase()."\n";
+        }
+        
+		if (!eval { $mrpobj = New ReadMrp($mrp->[0]) })
+			{
+			$loaded = 0;
+			my $message = $@;
+			$message =~ s/^(ERROR:\s*)?/ERROR: RealTimeBuild: /i;
+			print $message;
+			}
+		else
+			{
+			my $selfowned = 0;
+			my $mrpComponentName = $mrpobj->GetComponent();
+			if( ($mrp->[1] ne '') && (lc($mrp->[1]) ne lc($mrpComponentName)))
+				{
+				print "ERROR: RealTimeBuild: Component name \'$mrp->[1]\' does not match \'$mrpComponentName\' in $mrp->[0]\n";
+				}
+			foreach my $srcitem (@{$mrpobj->GetSrcItems()})
+				{
+				if ($srcitem =~ /^[\/\\]/)
+					{
+					# Remove source prefix
+					$srcitem = $self->_StripFile($srcitem);
+					}
+				else
+					{
+					# Relative source item
+					$srcitem = File::Spec->catdir($path, $srcitem);
+					}
+
+				my $rootedmrp = $path.$name;
+				if ($self->_RemoveBaseFromPath($srcitem, \$rootedmrp))
+					{
+					$selfowned = 1;
+					}
+
+				$self->AddSrcItem($srcitem, $mrpComponentName);
+				}
+			if ($self->iCheckCase())
+				{
+				foreach my $binexpitem (@{$mrpobj->GetBinExpItems()})
+					{
+					# Check lower case
+					if ($binexpitem =~ /[A-Z]/)
+						{
+						print "REMARK: [$mrpComponentName] Binary/export file $binexpitem should be lower case\n";
+						}
+					}
+				}
+
+			if (!$selfowned)
+				{
+				print "REMARK: .mrp file '$mrp->[0]' does not include itself as source\n"; 
+				}
+			}
+		}
+	return $loaded;
+	}
+	
+# AddSrcItem - Records a source file, usually taken from an .mrp file
+#
+# Parameters:
+# $aItem - the source file name
+# $aComponent - the name of the component which claimed the file
+#
+# Returns: None
+# Dies: Not normally; only if the source hash data structure gets corrupted
+sub AddSrcItem($$)
+	{
+	my $self = shift;
+	my ($aItem, $aComponent) = @_;
+
+	my $item = $aItem;
+
+	# Worth checking that the file exists
+	my $truePath = File::Spec->catdir($self->iSrcRoot(), $item);
+	if (($item !~ /^\\component_defs/i) && (!-e $truePath))
+		{
+		print "ERROR: RealTimeBuild: '$aComponent' owns $item, but that path doesn't exist\n";
+		$item = ""; # No point adding this path to the tree	
+		}
+	else
+		{
+		# Check case consistency
+		$self->_CheckCase($truePath) or print "WARNING: [$aComponent] Case of '".$truePath."' does not match the file system. Should be ".$self->iCorrectedCase()."\n";
+		}
+	
+	$item =~ s/^[\/\\]*//; # Remove preceding slashes
+
+	my @path = split(/[\/\\]+/,$item);
+
+	my $dir = $self->iSrcItems();
+	while ((scalar @path) > 0)
+		{
+		my $subdir = lc(shift @path);
+	
+		if (scalar(@path) == 0)
+			{
+			# Just enter the final path segment
+			if (exists($dir->{$subdir}))
+				{
+				# Someone already owns at least part of this path
+				if (!ref($dir->{$subdir}))
+					{
+					# Someone owns the whole of this path
+					my $conflict = $dir->{$subdir};
+
+					print "REMARK: $aComponent and $conflict both own $item\n";
+					}
+				else
+					{
+					if (ref($dir->{$subdir}) ne "HASH")
+						{
+						die "ERROR: Source hash is corrupted\n";
+						}
+					else
+						{
+						# Someone owns a child of this path
+						my $childtree = $dir->{$subdir};
+
+						my @conflicts = $self->_GetTreeComps($childtree);
+						print "REMARK: $aComponent owns $item, which is already owned by the following component(s): ".join(", ",@conflicts)."\n";
+						}
+					}
+				}
+			$dir->{$subdir} = $aComponent;
+			}
+		else
+			{
+			# Need to enter another subdirectory
+			
+			if (exists($dir->{$subdir}))
+				{
+				if (ref($dir->{$subdir}))
+					{
+					# Someone already has - just do a quick integrity check
+					
+					if (ref($dir->{$subdir}) ne "HASH")
+						{
+						die "ERROR: Source hash is corrupted\n";
+						}
+					}
+				else
+					{
+					# The path from this point on is already owned by a component
+					my $conflict = $dir->{$subdir};
+					
+					print "REMARK: $aComponent and $conflict both own $item\n";
+					last;
+					}
+				}
+			else
+				{
+				$dir->{$subdir} = {};
+				}
+			}
+
+		$dir = $dir->{$subdir};
+		}
+	}
+
+# DistillSrc - Compare the recorded source lines against the source path. Delete anything which doesn't match.
+#
+# Parameters:
+# $aDummy - A flag - non-zero means don't actually delete
+#
+# Returns: None
+sub DistillSrc($$)
+	{
+	my $self = shift;
+	my ($aDummy) = @_;
+
+	my $tree = $self->iSrcItems();
+	my $path = File::Spec->catdir($self->iSrcRoot(), $self->iSrcPath());
+
+	$path=~s/[\/\\]+/\\/; # Remove multiple slashes
+
+	# Pop the srcpath off the front of the tree
+	my @path = split(/[\/\\]/,$self->iSrcPath());
+
+	foreach my $dir (@path)
+		{
+		if ($dir eq ".")
+			{
+			next;
+			}
+		elsif (exists($tree->{lc($dir)}))
+			{
+			$tree = $tree->{lc($dir)};
+		
+			if (!ref($tree))
+				{
+				# Some component owns all of the srcpath
+				last;
+				}
+			}
+		else
+			{
+			# No mrp files claimed any of the source
+			$tree = undef;
+			last;
+			}
+		}
+
+	# Now recurse into the tree and delete files
+	if (defined($tree))
+		{
+		if (ref($tree))
+			{
+			$self->_DistillTree($tree, $path, $aDummy);
+			}
+		else
+			{
+			print "REMARK: All source owned by component '$tree'; no action\n";
+			}
+		}
+	else
+		{
+		print "WARNING: No .mrp files claim any source; removing $path\n";
+		$self->_DeletePath($path, $aDummy);
+		}
+	}
+
+# Print - Display the source tree
+#
+# Parameters:
+# $aDepth - The number of levels of the tree to show. 0 = all levels
+#
+# Returns: None
+sub Print($$)
+	{
+	my $self = shift;
+
+	my ($aDepth) = @_;
+
+	$self->_PrintTree("", $self->iSrcItems(), $aDepth);
+	}
+	
+# *** Private methods ***
+# *** 
+
+# _LoadConfig - (private) Reads a configuration file, as used by makecbr
+#
+# Parameters:
+# $aConfig - filename of the configuration file
+#
+# Returns:
+# (files, mrps) - where files and mrps are listrefs containing component lists and
+# mrp files respectively
+#
+sub _LoadConfig($)
+	{
+	my $self = shift;
+	my ($aConfig) = @_;
+	
+	my @files = ();
+	my @mrps = ();
+	
+	my $config = New CConfig($aConfig);
+
+	if (!defined $config)
+		{
+		die "Couldn't load config file '$aConfig'\n";
+		}
+		
+	# Extract the interesting items into our lists
+	push @mrps, $config->Get("gt+techview baseline mrp location");
+	push @mrps, $config->Get("gt only baseline mrp location");
+	push @files, $config->Get("techview component list");
+	push @files, $config->Get("gt component list");
+	
+	# Remove any items we couldn't find
+	@mrps = grep(defined($_), @mrps);
+	@files = grep(defined($_), @files);
+	
+	return (\@files, \@mrps);
+	}
+
+# _StripFile - (private) Remover of src prefix. Also maps product directories
+#
+# Parameters:
+# $aFile - Filename to process
+#
+# Returns: The processed filename
+#
+sub _StripFile($)
+	{
+	my $self = shift;
+	my ($aFile) = @_;
+
+	my $file = $aFile;
+
+	# Map the product dirs
+	my $platform = $self->iPlatform();
+	$file =~ s#^[\/\\]?product[\/\\]#/sf/os/unref/orphan/cedprd/#i;
+
+	# Remove the prefix
+	my $prefix = $self->iSrcPrefix();
+	
+	if (defined $prefix)
+		{
+		my $mapped = $file; # Keep a copy in case we can't remove the prefix
+		
+		if (!$self->_RemoveBaseFromPath($prefix, \$file))
+			{
+			$file = $mapped;
+			}
+		}
+	
+	return $file;
+	}
+	
+# _PlantFile - (private) Add src root to file. Also take off src prefix
+#
+# Parameters:
+# $aFile - Filename to process
+#
+# Returns: The processed filename
+#
+sub _PlantFile($)
+	{
+	my $self = shift;
+	my ($aFile) = @_;
+
+	my $file = $aFile;
+
+	# Remove the prefix
+	$file = $self->_StripFile($file);
+
+	# Plant the file in the src root
+	$file = File::Spec->catdir($self->iSrcRoot(), $file);
+	
+	# Ensure all slashes are normalised to a single backslash
+	$file =~ s/[\/\\]+/\\/; 
+	
+	return $file;
+	}
+
+# _RemoveBaseFromPath - (private) Remove a base path from the root of a filename.
+#
+# Parameters:
+# $aBase - The base path to remove
+# $$aFile - Filename to process (scalar reference)
+#
+# Returns: True if the file was under the base path, false otherwise
+#   $$aFile may be corrupted if the return is false
+sub _RemoveBaseFromPath($)
+	{
+	my $self = shift;
+	my ($aBase, $aFile) = @_;
+
+	my $base = $aBase;
+	$base =~ s/^[\/\\]*//; # Remove extra slashes
+	$base =~ s/[\/\\]*$//;
+
+	my @base = split(/[\/\\]+/, $base);
+
+	$$aFile =~ s/^[\/\\]*//; # Remove preceding slashes
+	
+	my $matched = 1;
+	my $filedir;
+	
+	foreach my $dir (@base)
+		{
+		if ($$aFile =~ /[\/\\]/)
+			{
+			# Split off the bottom dir
+			$$aFile =~ /([^\/\\]*)[\/\\]+(.*)$/;
+			($filedir, $$aFile) = ($1, $2, $3);
+			}
+		else
+			{
+			# Special case - no more dirs
+			$filedir = $$aFile;
+			$$aFile = "";
+			}
+		if (lc($filedir) ne lc($dir))
+			{
+			# Base doesn't match
+			$matched = 0;
+			last;
+			}
+		}
+	
+	return $matched;
+	}
+
+# _CheckCase - (private) Given a literal filename, compares the case of the
+#                        file on the filesystem against the filename i.e. it
+#                        can be used to enforce case sensitivity
+#
+# Parameters:
+# $aFilename - The literal filename
+#
+# Returns: True if the file matches the supplied case.
+#          True if the file doesn't exist at all (user is expected to check that separately)
+#          True if case checking has been disabled.
+#          False otherwise (if the file exists but under a differing case).
+#
+# If false, the correctly cased name is present through $self->iCorrectedCase()
+sub _CheckCase($)
+{
+	my $self = shift;
+	my ($aFile) = @_;
+
+	return 1 if !($self->iCheckCase()); # checking disabled
+	return 1 if ($^O !~ /win32/i); # only works on Windows anyway
+	
+	return 1 if (!-e $aFile); # file not found (under case-insensitive checking)
+	
+	$self->iCorrectedCase(Win32::GetLongPathName($aFile));
+	return ($aFile eq $self->iCorrectedCase());
+}
+
+# _DistillTree - (private) Given a src tree and a dir, clean out any unowned files
+#
+# Parameters:
+# %$aTree - The source tree (hash ref containing nested hash refs and string leaves)
+# $aDir - The directory to compare against
+# $aDummy - A flag - non-zero means don't do the actual deletion
+#
+# Returns: A flag - non-zero if there were any owned files present
+sub _DistillTree($$$)
+	{
+	my $self = shift;
+	my ($aTree, $aDir, $aDummy) = @_;
+
+
+	my $keptsome = 0;
+
+	if (opendir(DIR, $aDir))
+	{	
+		my $dir = $aDir;
+		$dir =~ s/[\/\\]*$//; # Remove trailing / from dir
+	
+		foreach my $entry (readdir(DIR))
+			{
+			my $path = $dir."\\".$entry;
+	
+			if ($entry =~ /^\.\.?$/)
+				{
+				next;
+				}
+			elsif (exists $aTree->{lc($entry)})
+				{
+				my $treeentry = $aTree->{lc($entry)};
+				if (ref($treeentry) eq "HASH")
+					{
+					# Part of this path is owned
+					if (-d $path)
+						{
+						# Recurse into path
+						my $keep = $self->_DistillTree($treeentry, $path, $aDummy);
+						if ($keep)
+							{
+							$keptsome = 1;
+							}
+						else
+							{
+							# Correction; none of this path was owned
+							$self->_DeletePath($path, $aDummy);
+							}
+						}
+					elsif (-f $path)
+						{
+						my @comps = $self->_GetTreeComps($treeentry);
+						print "ERROR: RealTimeBuild: $path is a file, yet is used as a directory in components: ".join(", ",@comps)."\n";
+						}
+					else
+						{
+						print "ERROR: $path has disappeared while it was being examined\n";
+						}
+					}
+				elsif (!ref($treeentry))
+					{
+					# This path is completely owned
+					$keptsome = 1;
+					next;
+					}
+				else
+					{
+					die "ERROR: Source hash is corrupted\n";
+					}
+				}
+			else
+				{
+				$self->_DeletePath($path, $aDummy);
+				}
+			}
+		
+		closedir(DIR);
+		}
+	else
+		{
+			warn "ERROR: RealTimeBuild: Couldn't open directory '$aDir' for reading\n";
+		}
+
+	return $keptsome;
+	}
+
+# _GetTreeComps - (private) Get all the leaves out of a tree (or component
+#                           names out of a source tree)
+# Parameters:
+# %$aTree - The source tree (hash ref containing nested hash refs and string leaves)
+# 
+# Returns: A list of strings found at the leaves (or component names)
+sub _GetTreeComps($)
+	{
+	my $self = shift;
+	my ($aTree) = @_;
+
+	my @comps = ();
+
+	foreach my $entry (keys(%$aTree))
+		{
+		if (ref($aTree->{$entry}) eq "HASH")
+			{
+			push @comps, $self->_GetTreeComps($aTree->{$entry});
+			}
+		elsif (!ref($aTree->{$entry}))
+			{
+			push @comps, $aTree->{$entry};
+			}
+		else
+			{
+			die "ERROR: Source hash is corrupted\n";
+			}
+		}
+		
+	return @comps;
+	}
+
+# _DeletePath - (private) Safe path deletion (file or dir)
+#
+# $aPath - The path to delet
+# $aDummy  - A flag - non-zero means don't actually delete
+#
+# Returns: None. Prints warnings if deletion fails. Dies only in exceptional circumstances
+sub _DeletePath($$)
+	{
+	my $self = shift;
+
+	my ($aPath, $aDummy) = @_;
+
+	if (-d $aPath)
+		{
+		if ($aDummy)
+			{
+			print "DUMMY: Directory $aPath is not specified in any .mrp file\n";
+			}
+		else
+			{
+			print "REMARK: Deleting directory $aPath; ";
+			my $files = rmtree($aPath);
+			if ($files)
+				{
+				print "$files items removed\n";
+				}
+			else
+				{
+				print "\nWARNING: Problem removing directory $aPath\n";
+				}
+			}
+		}
+	elsif (-f $aPath)
+		{
+		if ($aDummy)
+			{
+			print "DUMMY: File $aPath is not specified in any .mrp file\n";
+			}
+		else
+			{
+				unless($aPath =~ /distribution.policy.s60/i)
+				{
+					print "REMARK: Deleting file $aPath\n";
+					unlink $aPath or print "WARNING: Problem deleting file $aPath\n";
+				}
+			}
+		}
+	else
+		{
+		warn "ERROR: Can't delete path $aPath; not a file or directory\n";
+		}
+	}
+
+# _PrintTree - Display a subset of the source tree
+#
+# Parameters:
+# $aPrefix - The string to prefix all paths
+# $aDepth - The number of levels of the tree to show. 0 = all levels
+#
+# Returns: None
+sub _PrintTree($$$)
+        {
+	my $self = shift;
+	
+        my ($aPrefix, $aTree, $aDepth) = @_;
+
+	my $prefix = "";
+	
+	if ($aPrefix ne "")
+		{
+		$prefix = $aPrefix."\\";
+		}
+
+        foreach my $key (sort(keys(%$aTree)))
+                {
+                if (ref($aTree->{$key}))
+                        {
+			if ($aDepth!=1)
+				{
+				my $newprefix = $prefix.$key;
+				
+				if ($key eq "")
+					{
+					$newprefix.="{empty}";
+					}
+
+                        	$self->_PrintTree($newprefix, $aTree->{$key}, $aDepth-1);
+				}
+			else
+				{
+				print $prefix.$key."\\...\n";
+				}
+                        }
+                else
+                        {
+                        print $prefix.$key." = ".$aTree->{$key}."\n";
+                        }
+                }
+        }
+
+1;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/group/distillsrc.mrp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,24 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description: 
+#
+# Tools for generating Symbian production builds
+
+component dev_build_srctools_distillsrc
+
+source	\src\tools\build\srctools\distillsrc
+
+notes_source  \src\tools\build\srctools\distillsrc\release.src
+
+ipr T 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/readmrp.pm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,267 @@
+#! /bin/perl
+# Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# readmrp - API to parse mrp files (but do no further processing)
+# 
+#
+
+package ReadMrp;
+
+sub New($)
+	{
+	my $proto = shift;
+	my $class = ref($proto) || $proto;
+	my $self = {};
+	bless $self, $class;
+
+	my ($fileName) = @_;
+	$self->{filename} = $fileName;
+	$self->Read();
+
+	return $self;
+	}
+
+sub Read()
+	{
+	my $self = shift;
+	my $fileName = $self->{filename};
+
+	die "ERROR: MRP file '$fileName' does not exist\n" unless (-e $fileName);
+
+	my $srcitems = [];
+	my $binexpitems = [];
+	my $component;
+	my $notes;
+
+	open MRP, "$fileName" or die "ERROR: Couldn't open '$fileName' for reading: $!\n";
+	
+	while (my $line = <MRP>)
+		{
+		chomp $line;
+
+		$line =~ s/(?<!\\)#.*$//;  # remove comments
+		$line =~ s/^\s+//;
+		next if (!$line); # blank lines
+
+		my @operands;
+
+		my $string = $line;
+		while ($string)
+		{
+			if ($string =~ s/^\"(.*?)\"// # Match and remove next quoted string
+			or $string =~ s/^(.*?)\s+//   # or, match and remove next (but not last) unquoted string
+		 	or $string =~ s/^(.*)\s*$//)  # or, match and remove last unquoted string.
+			{
+				push (@operands, $1);
+				$string =~ s/^\s+//; # Remove delimiter if present.
+			}
+		}
+
+		my $keyword = shift @operands;
+
+		my $minus = ($keyword =~ s/^-//);
+
+		if ($keyword eq "component")
+			{
+			die "-component is not a valid command in file '$fileName'\n" if $minus;
+			$component = shift @operands;
+			}
+		elsif ($keyword eq "notes_source")
+			{
+			die "-notes_source is not a valid command in file '$fileName'\n" if $minus;
+			$notes = shift @operands
+			# N.B. This may require source mapping, so we don't check for existence here
+			}
+		elsif ($keyword eq "source")
+			{
+			die "-source is not supported by this parser yet in file '$fileName'\n" if $minus;
+			my $srcItem = join ' ', @operands;
+			push @$srcitems, $srcItem;
+			}
+		elsif ($keyword eq "binary")
+			{
+			if (scalar @operands == 1)
+				{
+				push @$binexpitems, shift @operands;
+				}
+			else
+				{
+				# This release doesn't handle bld.inf binary lines; no parsing here
+				}
+			}
+		elsif ($keyword eq "testbinary")
+			{
+			if (scalar @operands == 1)
+				{
+				push @$binexpitems, shift @operands;
+				}
+			else
+				{
+				# This release doesn't handle bld.inf binary lines; no parsing here
+				}
+			}
+		elsif ($keyword eq "exports")
+			{
+			# This release doesn't handle bld.inf exports lines; no parsing here
+			}
+		elsif ($keyword eq "testexports")
+			{
+			# This release doesn't handle bld.inf exports lines; no parsing here
+			}
+		elsif ($keyword eq "export_file")
+			{
+			push @$binexpitems, $operands[1];
+			}
+		elsif ($keyword eq "ipr")
+			{
+			# This release doesn't handle ipr lines; no parsing here
+			}
+		else
+			{
+			die "ERROR: In file '$fileName', command not understood in line: $line\n";
+			}
+		}
+	die "ERROR: Component not specified in file '$fileName'\n" unless defined($component);
+	die "ERROR: Notes_source not specified in file '$fileName'\n" unless defined($notes);
+	$self->{srcitems} = $srcitems;
+	$self->{component} = $component;
+	$self->{binexpitems} = $binexpitems;
+	$self->{notes} = $notes;
+	}
+
+sub GetComponent()
+	{
+	my $self = shift;
+	return $self->{component};
+	}
+
+sub GetSrcItems()
+	{
+	my $self = shift;
+	return $self->{srcitems};
+	}
+
+sub GetBinExpItems()
+	{
+	my $self = shift;
+	return $self->{binexpitems};
+	}
+
+sub GetNotes()
+	{
+	my $self = shift;
+	return $self->{notes};
+	}
+
+sub _SplitOnSpaces($)
+	{
+	my $self = shift;
+	my ($operands) = (@_);
+	
+	# Break down operands
+	my @operands = ();
+	my $operand = "";
+	my $first;
+	while ($operands =~ /\S/)
+		{
+		$operands =~ /^(\s*\S+)(\s+.*)?$/ or die "Semantic error (broken regexp)";
+
+		($first, $operands) = ($1, $2);
+		$operand .= $first;
+
+		$operand =~ s/^\s*//; # Remove preceding whitespace
+
+		if (substr($operand,0,1) ne '"')
+			{
+			# Not quoted
+			push @operands, $operand;
+			$operand = "";
+			}
+		else
+			{
+			# Quoted
+			if (substr($operand,scalar($operand-1),1) eq '"')
+				{
+				# Complete quoted operand
+				$operand = substr ($operand, 1, scalar($operand-1));
+				push @operands, $operand;
+				$operand = "";
+				}
+			# Else leave the operand to have the next word added
+			}
+		}
+
+	if ($operand ne "")
+		{
+		die "ERROR: Missing end quote from '$operand'\n";
+		}
+	
+	return @operands;	
+	}
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+readmrp - Simple parser for MRP fils
+
+=head1 SYNOPSIS
+
+ use readmrp;
+
+ my $mrpFile = '\someFolder\anMrpFile.mrp';
+
+ # Create an instance of a readmrp object
+ my $mrp = new readmrp($mrpFile);
+
+ # Get data out
+ my $name = $mrp->GetComponent();
+ my @srcitems = @{$mrp->GetSrcItems()};
+ my @binexpitems = @{$mrp->GetBinExpItems()};
+ my $notessrc = $mrp->GetNotes();
+
+=head1 DESCRIPTION
+
+This module is used to parse MRP files and to store the basic data.  It does not do any further processing of the data, and so it deliberately does not depend on the referenced files being present.  It records source statements, as well as simple binary statements and the target of export_file statements.  It ignores exports and complex binary statements, which refer to a group directory and would require further processing to determine their targets.
+
+=head1 METHODS
+
+=head2 New (mrpFile)
+
+Constructor.  Takes an MRP filename, and immediately parses it.  Dies if there is a syntax error in the MRP file.
+
+=head2 GetComponent ()
+
+Returns the parsed component name.
+
+=head2 GetSrcItems ()
+
+Returns an array ref of the source paths of the 'source' statements in the MRP file.
+
+=head2 GetBinExpItems ()
+
+Returns an array ref of the target paths of the simple 'binary' and 'export_file' statements in the MRP file.  It does not distringuish between binary files and exports.
+
+=head2 GetNotes ()
+
+Returns the path of the 'notes_source' file.
+
+=head1 COPYRIGHT
+
+Copyright (c) 2004-2007 Symbian Software Ltd. All Rights Reserved.
+
+=cut
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/release.src	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,21 @@
+NOTESRC_RELEASER
+Productisation (kits.notify@symbian.com)
+
+NOTESRC_RELEASE_REASON
+New release based on build %build identifier%
+
+NOTESRC_GENERAL_COMMENTS
+Built automatically from an release build, not via an OCK or CustKit.
+See Appendix_to_Release_Notes.rtf for details on prohibited export or use.
+
+NOTESRC_KNOWN_DEVIATIONS
+See General Comments above.
+
+NOTESRC_BUGS_FIXED
+See General Comments above.
+
+NOTESRC_BUGS_REMAINING
+See General Comments above.
+
+NOTESRC_OTHER_CHANGES
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/DISTRIBUTION.POLICY	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2 @@
+Category T
+OSD:	Reference/Test	Tools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/base.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2 @@
+comPlete	sOurce/complete\complete.mrp
+    whole   source\\\\\\\whOLe/whole.mrp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/bincase.mrp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,8 @@
+component	binCase
+binary	\epoc32\thisonesfine
+binary  \epoc32\thisOneIsnt
+binary  \epoc32\andNorIs/thisone
+export_file \prefix\source\bincase\bincase.mrp \epoc32\thisonesokay
+export_file \prefix\source\bincase\bincase.mrp \epoc32\thisonesNot
+export_file \prefix\source\bincase\bincase.mrp \epoc32\norThis\one
+notes_source dummy
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/duffer.mrp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,5 @@
+component duffer
+
+source duffer.mrp
+
+-notes_source can't do this
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/naughty.mrp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,3 @@
+component naughty
+source nothing_important
+notes_source relnotes
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/options.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+GT+Techview baseline component name:gt_techview_baseline
+GT+Techview baseline mrp location:\Source\miSSinG\miSsINg.mRp
+GT only baseline component name:gt_only_baseline
+GT only baseline mrp location:sourcE\spAcey\spaCEY.mrP
+
+Techview component list:BAse.TxT
+
+Components to export:[\sf\os\unref\orphan\comgen\application-protocols\http\group, \sf\os\unref\orphan\comgen\syslibs\charconv\version1\group, \sf\app\messaging\messagingappbase\smilparser\group, \sf\mw\messagingmw\messagingfw\msgtests\mms\group, \sf\os\unref\orphan\comgen\syncml\group]
+Components to make:[\sf\os\unref\orphan\comgen\syslibs\charconv\version1\group, \sf\mw\messagingmw\messagingfw\msgtests\GMXML\group, \sf\mw\messagingmw\messagingfw\msgtests\mms\group, \sf\os\unref\orphan\comtv\messagingUi\group, \sf\app\java\midpprofile\midpmidlet\j2me\group\8.1]
+Platforms to make:[arm4, winscw, tools, armv5]
+
+GT conflicts mrp location:\sf\os\buildtools\packaging\additionalutils\GT_overwritten.mrp
+GT conflicts component name:GT_overwritten
+Conflicting files log:\product\cedar\generated\logs\techview_dups.log
+
+Release notes template location:\sf\os\buildtools\toolsandutils\productionbldtools\makecbr\files\release.src
+Release notes location:\component_defs\release.src
+Reltools.ini location:\sf\os\deviceplatformrelease\symbianosbld\productionbldcbrconfig\8.1b\Reltools.ini
+Spare drive letter:C*
+Techview directory:\CBRTV
+GT directory:\CBRGT
+Source directories:[\src\]
+Release archive: 8.1bDaily
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/source/DISTRIBUTION.POLICY	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2 @@
+Category T
+OSD:	Reference/Test	Tools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/source/complete/DISTRIBUTION.POLICY	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2 @@
+Category T
+OSD:	Reference/Test	Tools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/source/complete/complete.mrp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,8 @@
+component	complete
+source	\prefix\source\complete
+binary	\prefix/source\complete all
+exports	/prefix\source\complete
+export_file	\epoc32\include\complete	\prefix/source\complete\complete
+source	\prefix\source\shared\complete
+source	\PREFIX\source\shared\DISTRIBUTION.POLICY
+notes_source	dummy
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/source/complete/file	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1 @@
+dummy
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/source/fixer.mrp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,5 @@
+component	fixer
+source	fixer.mrp
+source	/prefix/soUrce/DIStribuTION.poliCY
+source	\prefix\soUrce\missing\unowned
+notes_source	dummy
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/source/missing/DISTRIBUTION.POLICY	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2 @@
+Category T
+OSD:	Reference/Test	Tools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/source/missing/file	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2 @@
+dummy
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/source/missing/missing.mrp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,6 @@
+component	missing
+source	\preFIX\source\missing\file
+source	DISTRIBUTION.POLICY
+source	/prefix\source\missing\missing.mrp
+source	\prefix\source\shared\missing
+notes_source	dummy
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/source/missing/unowned	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1 @@
+dummy
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/source/shared/DISTRIBUTION.POLICY	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2 @@
+Category T
+OSD:	Reference/Test	Tools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/source/shared/complete	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1 @@
+dummy
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/source/shared/missing	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1 @@
+dummy
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/source/spacey/DISTRIBUTION.POLICY	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2 @@
+Category T
+OSD:	Reference/Test	Tools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/source/spacey/spa cey.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1 @@
+Dum my
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/source/spacey/spacey.mrp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,5 @@
+component spacey
+source \source//spacey\\spacey.mrp
+source \source//spacey\\DISTRIBUTION.POLICY
+source \source\spacey\spa cey.txt
+notes_source	dummy     
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/source/whole/DISTRIBUTION.POLICY	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,2 @@
+Category T
+OSD:	Reference/Test	Tools
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/source/whole/file	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1 @@
+dummy
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/source/whole/whole.mrp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,4 @@
+component	whole
+source	\\prefix//source\whole
+binary	/prefix/source\whole	all
+notes_source dummy
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/distillsrc/test/test.pl	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,226 @@
+#!\bin\perl -w
+# Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Eclipse Public License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.eclipse.org/legal/epl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# distillsrc.pl test script
+# 
+#
+
+use FindBin;
+use Cwd ('chdir','abs_path');
+
+my $cwd = abs_path($FindBin::Bin."\\..");
+chdir($cwd) or die "Couldn't change directory to $cwd\n";
+
+# Test cases
+#
+# Entry format: [parameters, [[pass regexps],[fail regexps]]]
+# 
+# [pass regexps] and [fail regexps] are lists of regular expressions, each
+# as a string. All pass regexps must match. No fail regexps may match.
+# If a line matches both, it is said to have passed (hence a generic failure
+# rule can be written to match any output which wasn't expected)
+my @testcases =
+	(
+	['-r fred -l beech' ,
+		[
+			['^ERROR: RealTimeBuild:.*srcpath must be given'],
+			['^ERROR: RealTimeBuild:']
+		]
+	],
+	['-s fred -l beech' ,
+		[
+			['^ERROR: RealTimeBuild:.*srcroot must be given'],
+			['^ERROR: RealTimeBuild:']
+		]
+	],
+	['-r fred -s src' ,
+		[
+			['^ERROR: RealTimeBuild:.*platform'],
+			['^ERROR: RealTimeBuild:']
+		]
+	],
+	['-d -r test -s source -p prefix -l fred -c test\options.txt -N' ,
+		[
+			[
+			'= spacey$',
+			'= whole$',
+			'^DUMMY: File test\\\\source\\\\fixer.mrp',
+			'^DUMMY: File test\\\\source\\\\DISTRIBUTION\\.POLICY',
+			'^DUMMY: File test\\\\source\\\\missing\\\\unowned'
+			],
+			[
+			'^DUMMY:.*is not specified in any \\.mrp file',
+			'does not include itself'
+			]
+		]
+	],
+	['-d -r test -s source -p prefix -l fred -c test\options.txt -m test\source\fixer.mrp' ,
+		[
+			[
+			'= spacey$',
+			'= whole$',
+			'= fixer$',
+			'WARNING: \[fixer\] Case of .test\\\\soUrce\\\\DIStribuTION.poliCY. does not match.* Should be test\\\\source\\\\DISTRIBUTION.POLICY$',
+			'WARNING: \[fixer\] Case of .test\\\\soUrce\\\\missing.* does not match.* Should be test\\\\source\\\\missing',
+			'source\\\\spacey\\\\spa cey.txt = spacey$',
+			],
+			[
+			'^DUMMY:.*is not specified in any \\.mrp file',
+			'does not include itself'
+			]
+		]
+	],
+	['-d -r test -s source -p prefix -l fred -f test\base.txt' ,
+		[
+			[
+			'= whole$',
+			'^DUMMY: File test\\\\source\\\\fixer\\.mrp',
+			'^DUMMY: File test\\\\source\\\\DISTRIBUTION\\.POLICY',
+			'^DUMMY: Directory test\\\\source\\\\missing',
+			'^DUMMY: File test\\\\source\\\\shared\\\\missing',
+			'^DUMMY: Directory test\\\\source\\\\spacey'
+			],
+			[
+			'^DUMMY:.*is not specified in any \\.mrp file',
+			'does not include itself'
+			]
+		]
+	],
+	['-d -r test -s nowt -l fred -m test\naughty.mrp' ,
+		[
+			[
+			'nothing_important.* doesn\'t exist',
+			'No \.mrp files claim any source',
+			'naughty\.mrp.*does not include itself'
+			],
+			['^DUMMY:.*is not specified in any \\.mrp file']
+		]
+	],
+	['-r test -s source -l fred -m test\not_present.mrp' ,
+		[
+			['^ERROR: RealTimeBuild:.*not_present\\.mrp.*does not exist'],
+			[]
+		]
+	],
+	['-r test -s source -l fred -m test\duffer.mrp',
+		[
+			['^ERROR: RealTimeBuild:.*not a valid command.*test\\\\duffer\\.mrp'],
+			['= duffer$']
+		]
+	],
+	['-d -r test -s source -p prefix -l fred -f test\base.txt',
+		[
+			[
+			'^WARNING:.*Case of \'.*complete.mrp\' does not match.* Should be.*source.*$',
+			'^WARNING:.*Case of \'.*whole.mrp\' does not match.* Should be.*whole.whole.*$',
+			],
+			['^WARNING:.*Case of .* does not match.* Should be.*$']
+		]
+	],
+	['-d -r test -s source -p prefix -l fred -m test\bincase.mrp',
+		[
+			[
+			'^REMARK:.*\\\\epoc32\\\\thisOneIsnt should be lower case',
+			'^REMARK:.*\\\\epoc32\\\\andNorIs\/thisone should be lower case',
+			'^REMARK:.*\\\\epoc32\\\\thisonesNot should be lower case',
+			'^REMARK:.*\\\\epoc32\\\\norThis\\\\one should be lower case'
+			],
+			['^REMARK:.*should be lower case.*$']
+		]
+	]
+	);
+
+my $passes = 0;
+my $tests = 0;
+
+foreach my $testcase (@testcases)
+	{
+	my $cmd = "distillsrc.pl ".$testcase->[0];
+	print "\nRunning $cmd\n";
+	my @output = `perl $cmd 2>&1`;
+	my @passregexps = @{$testcase->[1]->[0]};
+	my @failregexps = @{$testcase->[1]->[1]};
+
+	my $testpass = -1; # (unset)
+
+	foreach my $line (@output)
+		{
+		chomp ($line);
+		my $pass = 0;
+		my $fail = 0;
+		
+		foreach my $passregexp (@passregexps)
+			{
+			if ($line =~ /$passregexp/)
+				{
+				$pass = 1;
+
+				# Remove rule from list
+				@passregexps = grep($_ ne $passregexp, @passregexps);
+				}
+			}
+
+		if (!$pass)
+			{
+			foreach my $failregexp (@failregexps)
+				{
+				if ($line =~ /$failregexp/)
+					{
+					$fail = 1;
+					}
+				}
+			}
+
+		if ($pass)
+			{
+			print "GOOD:$line\n";
+			if ($testpass == -1)
+				{
+				$testpass = 1; # Passed (so far)
+				}
+			}
+		elsif ($fail)
+			{
+			print "BAD:$line\n";
+			$testpass = 0; # Failed
+			}
+		else { print "OKEH:$line\n"; }
+		}
+	
+	if ($testpass == 1)
+		{
+		if ((scalar @passregexps) == 0)
+			{
+			print "*** PASS\n";
+			$passes ++;
+			}
+		else
+			{
+			print "*** FAIL - tests not matched:\n> ";
+			print join("\n> ", @passregexps)."\n";
+			}
+		}
+	elsif ($testpass == 0)
+		{
+		print "*** FAIL - hard fail\n";
+		}
+	else
+		{
+		print "*** FAIL - no tests matched\n";
+		}
+
+	$tests ++;
+	}
+
+print "*** Out of $tests tests, $passes passed\n";
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/readtype/UnicodeData-5.0.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,17720 @@
+0000;<control>;Cc;0;BN;;;;;N;NULL;;;;
+0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;;;
+0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;;
+0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;;
+0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;;
+0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;;
+0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;;
+0007;<control>;Cc;0;BN;;;;;N;BELL;;;;
+0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;;
+0009;<control>;Cc;0;S;;;;;N;CHARACTER TABULATION;;;;
+000A;<control>;Cc;0;B;;;;;N;LINE FEED (LF);;;;
+000B;<control>;Cc;0;S;;;;;N;LINE TABULATION;;;;
+000C;<control>;Cc;0;WS;;;;;N;FORM FEED (FF);;;;
+000D;<control>;Cc;0;B;;;;;N;CARRIAGE RETURN (CR);;;;
+000E;<control>;Cc;0;BN;;;;;N;SHIFT OUT;;;;
+000F;<control>;Cc;0;BN;;;;;N;SHIFT IN;;;;
+0010;<control>;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;;
+0011;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;;
+0012;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;;
+0013;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;;
+0014;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;;
+0015;<control>;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;;
+0016;<control>;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;;
+0017;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;;
+0018;<control>;Cc;0;BN;;;;;N;CANCEL;;;;
+0019;<control>;Cc;0;BN;;;;;N;END OF MEDIUM;;;;
+001A;<control>;Cc;0;BN;;;;;N;SUBSTITUTE;;;;
+001B;<control>;Cc;0;BN;;;;;N;ESCAPE;;;;
+001C;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR FOUR;;;;
+001D;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR THREE;;;;
+001E;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR TWO;;;;
+001F;<control>;Cc;0;S;;;;;N;INFORMATION SEPARATOR ONE;;;;
+0020;SPACE;Zs;0;WS;;;;;N;;;;;
+0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;
+0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;;
+0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;;
+0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+0026;AMPERSAND;Po;0;ON;;;;;N;;;;;
+0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;
+0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
+0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
+002A;ASTERISK;Po;0;ON;;;;;N;;;;;
+002B;PLUS SIGN;Sm;0;ES;;;;;N;;;;;
+002C;COMMA;Po;0;CS;;;;;N;;;;;
+002D;HYPHEN-MINUS;Pd;0;ES;;;;;N;;;;;
+002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
+002F;SOLIDUS;Po;0;CS;;;;;N;SLASH;;;;
+0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
+0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
+0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
+0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;;
+0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;;
+0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;;
+0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;;
+0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;;
+0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;;
+0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;;
+003A;COLON;Po;0;CS;;;;;N;;;;;
+003B;SEMICOLON;Po;0;ON;;;;;N;;;;;
+003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
+003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;
+0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;
+0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;
+0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;
+0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;
+0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064;
+0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065;
+0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066;
+0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067;
+0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068;
+0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069;
+004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A;
+004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B;
+004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C;
+004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D;
+004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E;
+004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F;
+0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070;
+0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071;
+0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072;
+0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073;
+0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074;
+0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075;
+0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076;
+0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077;
+0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078;
+0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079;
+005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A;
+005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;
+005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;;
+005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;;
+005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;;
+005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;;
+0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;;
+0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041
+0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042
+0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043
+0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044
+0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045
+0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046
+0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047
+0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048
+0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049
+006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A
+006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B
+006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C
+006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D
+006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E
+006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F
+0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050
+0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051
+0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052
+0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053
+0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054
+0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055
+0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056
+0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057
+0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058
+0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059
+007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A
+007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;;
+007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;;
+007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;;
+007E;TILDE;Sm;0;ON;;;;;N;;;;;
+007F;<control>;Cc;0;BN;;;;;N;DELETE;;;;
+0080;<control>;Cc;0;BN;;;;;N;;;;;
+0081;<control>;Cc;0;BN;;;;;N;;;;;
+0082;<control>;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;;
+0083;<control>;Cc;0;BN;;;;;N;NO BREAK HERE;;;;
+0084;<control>;Cc;0;BN;;;;;N;;;;;
+0085;<control>;Cc;0;B;;;;;N;NEXT LINE (NEL);;;;
+0086;<control>;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;;
+0087;<control>;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;;
+0088;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;;
+0089;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;;
+008A;<control>;Cc;0;BN;;;;;N;LINE TABULATION SET;;;;
+008B;<control>;Cc;0;BN;;;;;N;PARTIAL LINE FORWARD;;;;
+008C;<control>;Cc;0;BN;;;;;N;PARTIAL LINE BACKWARD;;;;
+008D;<control>;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;;
+008E;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;;
+008F;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;;
+0090;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;;
+0091;<control>;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;;
+0092;<control>;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;;
+0093;<control>;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;;
+0094;<control>;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;;
+0095;<control>;Cc;0;BN;;;;;N;MESSAGE WAITING;;;;
+0096;<control>;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;;
+0097;<control>;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;;
+0098;<control>;Cc;0;BN;;;;;N;START OF STRING;;;;
+0099;<control>;Cc;0;BN;;;;;N;;;;;
+009A;<control>;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;;
+009B;<control>;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;;
+009C;<control>;Cc;0;BN;;;;;N;STRING TERMINATOR;;;;
+009D;<control>;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;;
+009E;<control>;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;;
+009F;<control>;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;;
+00A0;NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;
+00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;;
+00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;;
+00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;
+00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;
+00A7;SECTION SIGN;So;0;ON;;;;;N;;;;;
+00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;;
+00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;
+00AA;FEMININE ORDINAL INDICATOR;Ll;0;L;<super> 0061;;;;N;;;;;
+00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;*;;;
+00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
+00AD;SOFT HYPHEN;Cf;0;BN;;;;;N;;;;;
+00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
+00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
+00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
+00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;
+00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;;2;2;N;SUPERSCRIPT DIGIT TWO;;;;
+00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;;3;3;N;SUPERSCRIPT DIGIT THREE;;;;
+00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;;
+00B5;MICRO SIGN;Ll;0;L;<compat> 03BC;;;;N;;;039C;;039C
+00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;;
+00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;;
+00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;;1;1;N;SUPERSCRIPT DIGIT ONE;;;;
+00BA;MASCULINE ORDINAL INDICATOR;Ll;0;L;<super> 006F;;;;N;;;;;
+00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;*;;;
+00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;
+00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;
+00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;;
+00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;;
+00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0;
+00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1;
+00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2;
+00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3;
+00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4;
+00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5;
+00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;ash *;;00E6;
+00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7;
+00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8;
+00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9;
+00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA;
+00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB;
+00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC;
+00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED;
+00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE;
+00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF;
+00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0;
+00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1;
+00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2;
+00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3;
+00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4;
+00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5;
+00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6;
+00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;;
+00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8;
+00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9;
+00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA;
+00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB;
+00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC;
+00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD;
+00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE;
+00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;;
+00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0
+00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1
+00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2
+00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3
+00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4
+00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5
+00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;ash *;00C6;;00C6
+00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7
+00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8
+00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9
+00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA
+00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB
+00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC
+00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD
+00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE
+00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF
+00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0
+00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1
+00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2
+00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3
+00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4
+00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5
+00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6
+00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8
+00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9
+00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA
+00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB
+00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC
+00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD
+00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE
+00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178
+0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101;
+0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100
+0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103;
+0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102
+0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105;
+0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104
+0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107;
+0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106
+0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109;
+0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108
+010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B;
+010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A
+010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D;
+010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C
+010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F;
+010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E
+0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111;
+0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110
+0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113;
+0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112
+0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115;
+0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114
+0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117;
+0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116
+0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119;
+0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118
+011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B;
+011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A
+011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D;
+011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C
+011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F;
+011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E
+0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121;
+0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120
+0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123;
+0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122
+0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125;
+0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124
+0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127;
+0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126
+0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129;
+0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128
+012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B;
+012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A
+012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D;
+012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C
+012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F;
+012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E
+0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069;
+0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049
+0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133;
+0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132
+0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135;
+0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134
+0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137;
+0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136
+0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;;
+0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A;
+013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139
+013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C;
+013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B
+013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E;
+013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D
+013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140;
+0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F
+0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142;
+0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141
+0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144;
+0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143
+0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146;
+0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145
+0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148;
+0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147
+0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;;
+014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B;
+014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A
+014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D;
+014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C
+014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F;
+014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E
+0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151;
+0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150
+0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153;
+0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152
+0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155;
+0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154
+0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157;
+0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156
+0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159;
+0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158
+015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B;
+015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A
+015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D;
+015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C
+015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;*;;015F;
+015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;*;015E;;015E
+0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161;
+0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160
+0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;*;;0163;
+0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;*;0162;;0162
+0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165;
+0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164
+0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167;
+0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166
+0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169;
+0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168
+016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B;
+016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A
+016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D;
+016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C
+016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F;
+016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E
+0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171;
+0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170
+0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173;
+0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172
+0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175;
+0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174
+0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177;
+0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176
+0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF;
+0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A;
+017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179
+017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C;
+017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B
+017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;
+017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D
+017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053
+0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;0243;;0243
+0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;
+0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;
+0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182
+0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185;
+0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184
+0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254;
+0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188;
+0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187
+0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;*;;0256;
+018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257;
+018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C;
+018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B
+018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;;
+018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD;
+018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259;
+0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B;
+0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192;
+0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191
+0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260;
+0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263;
+0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;hwair;01F6;;01F6
+0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269;
+0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
+0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
+0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
+019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;023D;;023D
+019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
+019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
+019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
+019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;0220;;0220
+019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;*;;0275;
+01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1;
+01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0
+01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;gha;;01A3;
+01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;gha;01A2;;01A2
+01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5;
+01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4
+01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;*;;0280;
+01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8;
+01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7
+01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283;
+01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;;
+01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;;
+01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD;
+01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC
+01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288;
+01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0;
+01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF
+01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A;
+01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B;
+01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4;
+01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3
+01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6;
+01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5
+01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292;
+01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9;
+01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8
+01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;;
+01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;;
+01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD;
+01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC
+01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;;
+01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7
+01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;;
+01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;;
+01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;;
+01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;;
+01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5
+01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;01C5
+01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5
+01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8
+01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;01C8
+01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8
+01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB
+01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;01CB
+01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB
+01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE;
+01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD
+01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0;
+01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF
+01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2;
+01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1
+01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4;
+01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3
+01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6;
+01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5
+01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8;
+01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7
+01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA;
+01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9
+01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC;
+01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB
+01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E
+01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF;
+01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE
+01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1;
+01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0
+01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;ash *;;01E3;
+01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;ash *;01E2;;01E2
+01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5;
+01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4
+01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7;
+01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6
+01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9;
+01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8
+01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB;
+01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA
+01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED;
+01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC
+01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF;
+01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE
+01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;;
+01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2
+01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;01F2
+01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2
+01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5;
+01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4
+01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195;
+01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF;
+01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9;
+01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8
+01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB;
+01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA
+01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;ash *;;01FD;
+01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;ash *;01FC;;01FC
+01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF;
+01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE
+0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201;
+0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200
+0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203;
+0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202
+0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205;
+0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204
+0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207;
+0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206
+0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209;
+0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208
+020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B;
+020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A
+020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D;
+020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C
+020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F;
+020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E
+0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211;
+0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210
+0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213;
+0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212
+0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215;
+0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214
+0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217;
+0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216
+0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;*;;0219;
+0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;*;0218;;0218
+021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;*;;021B;
+021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;*;021A;;021A
+021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D;
+021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C
+021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F;
+021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E
+0220;LATIN CAPITAL LETTER N WITH LONG RIGHT LEG;Lu;0;L;;;;;N;;;;019E;
+0221;LATIN SMALL LETTER D WITH CURL;Ll;0;L;;;;;N;;;;;
+0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223;
+0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222
+0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225;
+0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224
+0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227;
+0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226
+0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229;
+0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228
+022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B;
+022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A
+022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D;
+022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C
+022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F;
+022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E
+0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231;
+0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230
+0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233;
+0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232
+0234;LATIN SMALL LETTER L WITH CURL;Ll;0;L;;;;;N;;;;;
+0235;LATIN SMALL LETTER N WITH CURL;Ll;0;L;;;;;N;;;;;
+0236;LATIN SMALL LETTER T WITH CURL;Ll;0;L;;;;;N;;;;;
+0237;LATIN SMALL LETTER DOTLESS J;Ll;0;L;;;;;N;;;;;
+0238;LATIN SMALL LETTER DB DIGRAPH;Ll;0;L;;;;;N;;;;;
+0239;LATIN SMALL LETTER QP DIGRAPH;Ll;0;L;;;;;N;;;;;
+023A;LATIN CAPITAL LETTER A WITH STROKE;Lu;0;L;;;;;N;;;;2C65;
+023B;LATIN CAPITAL LETTER C WITH STROKE;Lu;0;L;;;;;N;;;;023C;
+023C;LATIN SMALL LETTER C WITH STROKE;Ll;0;L;;;;;N;;;023B;;023B
+023D;LATIN CAPITAL LETTER L WITH BAR;Lu;0;L;;;;;N;;;;019A;
+023E;LATIN CAPITAL LETTER T WITH DIAGONAL STROKE;Lu;0;L;;;;;N;;;;2C66;
+023F;LATIN SMALL LETTER S WITH SWASH TAIL;Ll;0;L;;;;;N;;;;;
+0240;LATIN SMALL LETTER Z WITH SWASH TAIL;Ll;0;L;;;;;N;;;;;
+0241;LATIN CAPITAL LETTER GLOTTAL STOP;Lu;0;L;;;;;N;;;;0242;
+0242;LATIN SMALL LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;0241;;0241
+0243;LATIN CAPITAL LETTER B WITH STROKE;Lu;0;L;;;;;N;;;;0180;
+0244;LATIN CAPITAL LETTER U BAR;Lu;0;L;;;;;N;;;;0289;
+0245;LATIN CAPITAL LETTER TURNED V;Lu;0;L;;;;;N;;;;028C;
+0246;LATIN CAPITAL LETTER E WITH STROKE;Lu;0;L;;;;;N;;;;0247;
+0247;LATIN SMALL LETTER E WITH STROKE;Ll;0;L;;;;;N;;;0246;;0246
+0248;LATIN CAPITAL LETTER J WITH STROKE;Lu;0;L;;;;;N;;;;0249;
+0249;LATIN SMALL LETTER J WITH STROKE;Ll;0;L;;;;;N;;;0248;;0248
+024A;LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL;Lu;0;L;;;;;N;;;;024B;
+024B;LATIN SMALL LETTER Q WITH HOOK TAIL;Ll;0;L;;;;;N;;;024A;;024A
+024C;LATIN CAPITAL LETTER R WITH STROKE;Lu;0;L;;;;;N;;;;024D;
+024D;LATIN SMALL LETTER R WITH STROKE;Ll;0;L;;;;;N;;;024C;;024C
+024E;LATIN CAPITAL LETTER Y WITH STROKE;Lu;0;L;;;;;N;;;;024F;
+024F;LATIN SMALL LETTER Y WITH STROKE;Ll;0;L;;;;;N;;;024E;;024E
+0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;;
+0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;;
+0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;;
+0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181
+0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186
+0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;;
+0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189
+0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A
+0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;;
+0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F
+025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;;
+025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190
+025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;;
+025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;;
+025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;;
+025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;;
+0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193
+0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;;
+0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;;
+0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194
+0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;;
+0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;;
+0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;;
+0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;
+0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
+0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
+026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;;
+026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;2C62;;2C62
+026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;;
+026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
+026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;
+026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C
+0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;;
+0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D
+0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;
+0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;
+0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F
+0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;;
+0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;;
+0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;;
+0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;;
+027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;
+027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;2C64;;2C64
+027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;
+027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;
+0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;*;01A6;;01A6
+0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;;
+0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;;
+0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9
+0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;;
+0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;;
+0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;
+0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;;
+0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE
+0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;0244;;0244
+028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1
+028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2
+028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;0245;;0245
+028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;
+028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;
+028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;
+0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;;
+0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
+0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
+0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
+0294;LATIN LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
+0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
+0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;;
+0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;;
+029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;;
+029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;;
+029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;;
+029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;;
+029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;;
+029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;;
+02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;;
+02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;;
+02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;;
+02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;;
+02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;;
+02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;;
+02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;;
+02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;;
+02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;;
+02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
+02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
+02AE;LATIN SMALL LETTER TURNED H WITH FISHHOOK;Ll;0;L;;;;;N;;;;;
+02AF;LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL;Ll;0;L;;;;;N;;;;;
+02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;
+02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;
+02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;;
+02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;;
+02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;;
+02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;;
+02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;;
+02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;;
+02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;;
+02B9;MODIFIER LETTER PRIME;Lm;0;ON;;;;;N;;;;;
+02BA;MODIFIER LETTER DOUBLE PRIME;Lm;0;ON;;;;;N;;;;;
+02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;;
+02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;;
+02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;;
+02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;;
+02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;;
+02C7;CARON;Lm;0;ON;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;;
+02C8;MODIFIER LETTER VERTICAL LINE;Lm;0;ON;;;;;N;;;;;
+02C9;MODIFIER LETTER MACRON;Lm;0;ON;;;;;N;;Mandarin Chinese first tone;;;
+02CA;MODIFIER LETTER ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;;
+02CB;MODIFIER LETTER GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;;
+02CC;MODIFIER LETTER LOW VERTICAL LINE;Lm;0;ON;;;;;N;;;;;
+02CD;MODIFIER LETTER LOW MACRON;Lm;0;ON;;;;;N;;;;;
+02CE;MODIFIER LETTER LOW GRAVE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;;
+02CF;MODIFIER LETTER LOW ACUTE ACCENT;Lm;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;;
+02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;;
+02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;;
+02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;;
+02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;;
+02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D8;BREVE;Sk;0;ON;<compat> 0020 0306;;;;N;SPACING BREVE;;;;
+02D9;DOT ABOVE;Sk;0;ON;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;;
+02DA;RING ABOVE;Sk;0;ON;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;;
+02DB;OGONEK;Sk;0;ON;<compat> 0020 0328;;;;N;SPACING OGONEK;;;;
+02DC;SMALL TILDE;Sk;0;ON;<compat> 0020 0303;;;;N;SPACING TILDE;;;;
+02DD;DOUBLE ACUTE ACCENT;Sk;0;ON;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;;
+02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;;
+02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;;
+02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;;
+02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;;
+02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;;
+02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;;
+02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;;
+02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
+02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
+02EC;MODIFIER LETTER VOICING;Sk;0;ON;;;;;N;;;;;
+02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;;
+02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;;
+02EF;MODIFIER LETTER LOW DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02F0;MODIFIER LETTER LOW UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02F1;MODIFIER LETTER LOW LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02F2;MODIFIER LETTER LOW RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02F3;MODIFIER LETTER LOW RING;Sk;0;ON;;;;;N;;;;;
+02F4;MODIFIER LETTER MIDDLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;;
+02F5;MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT;Sk;0;ON;;;;;N;;;;;
+02F6;MODIFIER LETTER MIDDLE DOUBLE ACUTE ACCENT;Sk;0;ON;;;;;N;;;;;
+02F7;MODIFIER LETTER LOW TILDE;Sk;0;ON;;;;;N;;;;;
+02F8;MODIFIER LETTER RAISED COLON;Sk;0;ON;;;;;N;;;;;
+02F9;MODIFIER LETTER BEGIN HIGH TONE;Sk;0;ON;;;;;N;;;;;
+02FA;MODIFIER LETTER END HIGH TONE;Sk;0;ON;;;;;N;;;;;
+02FB;MODIFIER LETTER BEGIN LOW TONE;Sk;0;ON;;;;;N;;;;;
+02FC;MODIFIER LETTER END LOW TONE;Sk;0;ON;;;;;N;;;;;
+02FD;MODIFIER LETTER SHELF;Sk;0;ON;;;;;N;;;;;
+02FE;MODIFIER LETTER OPEN SHELF;Sk;0;ON;;;;;N;;;;;
+02FF;MODIFIER LETTER LOW LEFT ARROW;Sk;0;ON;;;;;N;;;;;
+0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;Varia;;;
+0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;Oxia, Tonos;;;
+0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;;
+0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;;
+0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;;
+0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;;
+0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;Vrachy;;;
+0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;;
+0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;Dialytika;;;
+0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;;
+030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;;
+030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;;
+030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;;
+030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;;;;
+030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;;
+030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;;
+0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;;
+0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;;
+0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;;
+0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;Psili;;;
+0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;;
+0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;;
+0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;;
+0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;;
+0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;;
+0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;;
+031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;;
+031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;;
+031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;;
+031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;;
+031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;;
+031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;;
+0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;;
+0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;;
+0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;;
+0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;;
+0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;;
+0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;;
+0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;;
+0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;;
+0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;;
+0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;;
+032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;;
+032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;;
+032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;;
+032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;;
+032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;;
+032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;;
+0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;;
+0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;;
+0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;;
+0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;;
+0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;;
+0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;;
+0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;;
+0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;;
+0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;;
+0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;;
+033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;;
+033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;;
+033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;;
+033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;;
+033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;;
+033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;;
+0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;;
+0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;;
+0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;;
+0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;;
+0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;;
+0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399
+0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
+0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;;
+0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;;
+034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;;
+034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;;
+034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;;
+034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+034F;COMBINING GRAPHEME JOINER;Mn;0;NSM;;;;;N;;;;;
+0350;COMBINING RIGHT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
+0351;COMBINING LEFT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;;
+0352;COMBINING FERMATA;Mn;230;NSM;;;;;N;;;;;
+0353;COMBINING X BELOW;Mn;220;NSM;;;;;N;;;;;
+0354;COMBINING LEFT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+0355;COMBINING RIGHT ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+0356;COMBINING RIGHT ARROWHEAD AND UP ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+0357;COMBINING RIGHT HALF RING ABOVE;Mn;230;NSM;;;;;N;;;;;
+0358;COMBINING DOT ABOVE RIGHT;Mn;232;NSM;;;;;N;;;;;
+0359;COMBINING ASTERISK BELOW;Mn;220;NSM;;;;;N;;;;;
+035A;COMBINING DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;;
+035B;COMBINING ZIGZAG ABOVE;Mn;230;NSM;;;;;N;;;;;
+035C;COMBINING DOUBLE BREVE BELOW;Mn;233;NSM;;;;;N;;;;;
+035D;COMBINING DOUBLE BREVE;Mn;234;NSM;;;;;N;;;;;
+035E;COMBINING DOUBLE MACRON;Mn;234;NSM;;;;;N;;;;;
+035F;COMBINING DOUBLE MACRON BELOW;Mn;233;NSM;;;;;N;;;;;
+0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;;
+0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;;
+0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;;
+0363;COMBINING LATIN SMALL LETTER A;Mn;230;NSM;;;;;N;;;;;
+0364;COMBINING LATIN SMALL LETTER E;Mn;230;NSM;;;;;N;;;;;
+0365;COMBINING LATIN SMALL LETTER I;Mn;230;NSM;;;;;N;;;;;
+0366;COMBINING LATIN SMALL LETTER O;Mn;230;NSM;;;;;N;;;;;
+0367;COMBINING LATIN SMALL LETTER U;Mn;230;NSM;;;;;N;;;;;
+0368;COMBINING LATIN SMALL LETTER C;Mn;230;NSM;;;;;N;;;;;
+0369;COMBINING LATIN SMALL LETTER D;Mn;230;NSM;;;;;N;;;;;
+036A;COMBINING LATIN SMALL LETTER H;Mn;230;NSM;;;;;N;;;;;
+036B;COMBINING LATIN SMALL LETTER M;Mn;230;NSM;;;;;N;;;;;
+036C;COMBINING LATIN SMALL LETTER R;Mn;230;NSM;;;;;N;;;;;
+036D;COMBINING LATIN SMALL LETTER T;Mn;230;NSM;;;;;N;;;;;
+036E;COMBINING LATIN SMALL LETTER V;Mn;230;NSM;;;;;N;;;;;
+036F;COMBINING LATIN SMALL LETTER X;Mn;230;NSM;;;;;N;;;;;
+0374;GREEK NUMERAL SIGN;Sk;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;
+0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;Aristeri keraia;;;
+037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;
+037B;GREEK SMALL REVERSED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FD;;03FD
+037C;GREEK SMALL DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FE;;03FE
+037D;GREEK SMALL REVERSED DOTTED LUNATE SIGMA SYMBOL;Ll;0;L;;;;;N;;;03FF;;03FF
+037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;Erotimatiko;;;
+0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;;
+0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;;
+0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC;
+0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;;
+0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD;
+0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE;
+038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF;
+038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC;
+038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD;
+038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE;
+0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;;
+0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1;
+0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2;
+0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3;
+0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4;
+0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5;
+0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6;
+0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7;
+0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;
+0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9;
+039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA;
+039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB;
+039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC;
+039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD;
+039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE;
+039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF;
+03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0;
+03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;
+03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
+03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4;
+03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5;
+03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6;
+03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7;
+03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8;
+03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9;
+03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;
+03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;
+03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386
+03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388
+03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389
+03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A
+03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;;
+03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391
+03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392
+03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393
+03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394
+03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395
+03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396
+03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397
+03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398
+03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399
+03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A
+03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B
+03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C
+03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D
+03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E
+03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F
+03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0
+03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1
+03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4
+03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5
+03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6
+03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7
+03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8
+03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9
+03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA
+03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB
+03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C
+03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E
+03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F
+03D0;GREEK BETA SYMBOL;Ll;0;L;<compat> 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392
+03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398
+03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;<compat> 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;
+03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;;
+03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;
+03D5;GREEK PHI SYMBOL;Ll;0;L;<compat> 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6
+03D6;GREEK PI SYMBOL;Ll;0;L;<compat> 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0
+03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;;;
+03D8;GREEK LETTER ARCHAIC KOPPA;Lu;0;L;;;;;N;;*;;03D9;
+03D9;GREEK SMALL LETTER ARCHAIC KOPPA;Ll;0;L;;;;;N;;*;03D8;;03D8
+03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB;
+03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA
+03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD;
+03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC
+03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF;
+03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE
+03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1;
+03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0
+03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3;
+03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2
+03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5;
+03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4
+03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7;
+03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6
+03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9;
+03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8
+03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB;
+03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA
+03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED;
+03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC
+03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF;
+03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE
+03F0;GREEK KAPPA SYMBOL;Ll;0;L;<compat> 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A
+03F1;GREEK RHO SYMBOL;Ll;0;L;<compat> 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1
+03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;<compat> 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03F9;;03F9
+03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;;;
+03F4;GREEK CAPITAL THETA SYMBOL;Lu;0;L;<compat> 0398;;;;N;;;;03B8;
+03F5;GREEK LUNATE EPSILON SYMBOL;Ll;0;L;<compat> 03B5;;;;N;;;0395;;0395
+03F6;GREEK REVERSED LUNATE EPSILON SYMBOL;Sm;0;ON;;;;;N;;;;;
+03F7;GREEK CAPITAL LETTER SHO;Lu;0;L;;;;;N;;;;03F8;
+03F8;GREEK SMALL LETTER SHO;Ll;0;L;;;;;N;;;03F7;;03F7
+03F9;GREEK CAPITAL LUNATE SIGMA SYMBOL;Lu;0;L;<compat> 03A3;;;;N;;;;03F2;
+03FA;GREEK CAPITAL LETTER SAN;Lu;0;L;;;;;N;;;;03FB;
+03FB;GREEK SMALL LETTER SAN;Ll;0;L;;;;;N;;;03FA;;03FA
+03FC;GREEK RHO WITH STROKE SYMBOL;Ll;0;L;;;;;N;;;;;
+03FD;GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037B;
+03FE;GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037C;
+03FF;GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL;Lu;0;L;;;;;N;;;;037D;
+0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450;
+0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
+0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452;
+0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453;
+0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454;
+0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455;
+0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456;
+0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457;
+0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458;
+0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459;
+040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A;
+040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B;
+040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C;
+040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D;
+040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E;
+040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F;
+0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430;
+0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431;
+0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432;
+0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433;
+0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434;
+0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435;
+0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436;
+0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437;
+0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438;
+0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439;
+041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A;
+041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B;
+041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C;
+041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D;
+041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E;
+041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F;
+0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440;
+0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441;
+0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442;
+0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443;
+0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444;
+0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445;
+0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446;
+0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447;
+0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448;
+0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449;
+042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A;
+042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B;
+042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C;
+042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D;
+042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E;
+042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F;
+0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410
+0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411
+0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412
+0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413
+0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414
+0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415
+0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416
+0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417
+0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418
+0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419
+043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A
+043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B
+043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C
+043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D
+043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E
+043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F
+0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420
+0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421
+0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422
+0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423
+0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424
+0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425
+0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426
+0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427
+0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428
+0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429
+044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
+044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B
+044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C
+044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D
+044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E
+044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F
+0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400
+0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401
+0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402
+0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403
+0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404
+0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
+0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406
+0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407
+0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408
+0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409
+045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A
+045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B
+045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C
+045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D
+045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E
+045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F
+0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461;
+0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460
+0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463;
+0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462
+0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465;
+0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464
+0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467;
+0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466
+0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469;
+0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468
+046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B;
+046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A
+046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D;
+046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C
+046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F;
+046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E
+0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471;
+0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470
+0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473;
+0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472
+0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475;
+0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474
+0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477;
+0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476
+0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479;
+0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478
+047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B;
+047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A
+047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D;
+047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C
+047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F;
+047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E
+0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481;
+0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480
+0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;;
+0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;;
+0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;
+0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;
+0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;
+0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;;
+0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
+048A;CYRILLIC CAPITAL LETTER SHORT I WITH TAIL;Lu;0;L;;;;;N;;;;048B;
+048B;CYRILLIC SMALL LETTER SHORT I WITH TAIL;Ll;0;L;;;;;N;;;048A;;048A
+048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D;
+048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C
+048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F;
+048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E
+0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491;
+0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490
+0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493;
+0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492
+0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495;
+0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494
+0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497;
+0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496
+0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499;
+0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498
+049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B;
+049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A
+049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D;
+049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C
+049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F;
+049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E
+04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1;
+04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0
+04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3;
+04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2
+04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5;
+04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4
+04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7;
+04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6
+04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9;
+04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8
+04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB;
+04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA
+04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD;
+04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC
+04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF;
+04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE
+04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1;
+04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0
+04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3;
+04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2
+04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5;
+04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4
+04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7;
+04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6
+04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9;
+04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8
+04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB;
+04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA
+04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD;
+04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC
+04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;
+04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE
+04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;04CF;
+04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;
+04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1
+04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;
+04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3
+04C5;CYRILLIC CAPITAL LETTER EL WITH TAIL;Lu;0;L;;;;;N;;;;04C6;
+04C6;CYRILLIC SMALL LETTER EL WITH TAIL;Ll;0;L;;;;;N;;;04C5;;04C5
+04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8;
+04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7
+04C9;CYRILLIC CAPITAL LETTER EN WITH TAIL;Lu;0;L;;;;;N;;;;04CA;
+04CA;CYRILLIC SMALL LETTER EN WITH TAIL;Ll;0;L;;;;;N;;;04C9;;04C9
+04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC;
+04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB
+04CD;CYRILLIC CAPITAL LETTER EM WITH TAIL;Lu;0;L;;;;;N;;;;04CE;
+04CE;CYRILLIC SMALL LETTER EM WITH TAIL;Ll;0;L;;;;;N;;;04CD;;04CD
+04CF;CYRILLIC SMALL LETTER PALOCHKA;Ll;0;L;;;;;N;;;04C0;;04C0
+04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;
+04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0
+04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;
+04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2
+04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5;
+04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4
+04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7;
+04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6
+04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9;
+04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8
+04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB;
+04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA
+04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD;
+04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC
+04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF;
+04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE
+04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1;
+04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0
+04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3;
+04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2
+04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5;
+04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4
+04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7;
+04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6
+04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9;
+04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8
+04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB;
+04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA
+04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED;
+04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC
+04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF;
+04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE
+04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1;
+04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0
+04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3;
+04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
+04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
+04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
+04F6;CYRILLIC CAPITAL LETTER GHE WITH DESCENDER;Lu;0;L;;;;;N;;;;04F7;
+04F7;CYRILLIC SMALL LETTER GHE WITH DESCENDER;Ll;0;L;;;;;N;;;04F6;;04F6
+04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
+04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
+04FA;CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK;Lu;0;L;;;;;N;;;;04FB;
+04FB;CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK;Ll;0;L;;;;;N;;;04FA;;04FA
+04FC;CYRILLIC CAPITAL LETTER HA WITH HOOK;Lu;0;L;;;;;N;;;;04FD;
+04FD;CYRILLIC SMALL LETTER HA WITH HOOK;Ll;0;L;;;;;N;;;04FC;;04FC
+04FE;CYRILLIC CAPITAL LETTER HA WITH STROKE;Lu;0;L;;;;;N;;;;04FF;
+04FF;CYRILLIC SMALL LETTER HA WITH STROKE;Ll;0;L;;;;;N;;;04FE;;04FE
+0500;CYRILLIC CAPITAL LETTER KOMI DE;Lu;0;L;;;;;N;;;;0501;
+0501;CYRILLIC SMALL LETTER KOMI DE;Ll;0;L;;;;;N;;;0500;;0500
+0502;CYRILLIC CAPITAL LETTER KOMI DJE;Lu;0;L;;;;;N;;;;0503;
+0503;CYRILLIC SMALL LETTER KOMI DJE;Ll;0;L;;;;;N;;;0502;;0502
+0504;CYRILLIC CAPITAL LETTER KOMI ZJE;Lu;0;L;;;;;N;;;;0505;
+0505;CYRILLIC SMALL LETTER KOMI ZJE;Ll;0;L;;;;;N;;;0504;;0504
+0506;CYRILLIC CAPITAL LETTER KOMI DZJE;Lu;0;L;;;;;N;;;;0507;
+0507;CYRILLIC SMALL LETTER KOMI DZJE;Ll;0;L;;;;;N;;;0506;;0506
+0508;CYRILLIC CAPITAL LETTER KOMI LJE;Lu;0;L;;;;;N;;;;0509;
+0509;CYRILLIC SMALL LETTER KOMI LJE;Ll;0;L;;;;;N;;;0508;;0508
+050A;CYRILLIC CAPITAL LETTER KOMI NJE;Lu;0;L;;;;;N;;;;050B;
+050B;CYRILLIC SMALL LETTER KOMI NJE;Ll;0;L;;;;;N;;;050A;;050A
+050C;CYRILLIC CAPITAL LETTER KOMI SJE;Lu;0;L;;;;;N;;;;050D;
+050D;CYRILLIC SMALL LETTER KOMI SJE;Ll;0;L;;;;;N;;;050C;;050C
+050E;CYRILLIC CAPITAL LETTER KOMI TJE;Lu;0;L;;;;;N;;;;050F;
+050F;CYRILLIC SMALL LETTER KOMI TJE;Ll;0;L;;;;;N;;;050E;;050E
+0510;CYRILLIC CAPITAL LETTER REVERSED ZE;Lu;0;L;;;;;N;;;;0511;
+0511;CYRILLIC SMALL LETTER REVERSED ZE;Ll;0;L;;;;;N;;;0510;;0510
+0512;CYRILLIC CAPITAL LETTER EL WITH HOOK;Lu;0;L;;;;;N;;;;0513;
+0513;CYRILLIC SMALL LETTER EL WITH HOOK;Ll;0;L;;;;;N;;;0512;;0512
+0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;
+0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;
+0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;
+0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564;
+0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565;
+0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566;
+0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567;
+0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568;
+0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569;
+053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A;
+053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B;
+053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C;
+053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D;
+053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E;
+053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F;
+0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570;
+0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571;
+0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572;
+0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573;
+0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574;
+0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575;
+0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576;
+0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577;
+0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578;
+0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579;
+054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A;
+054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B;
+054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C;
+054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D;
+054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E;
+054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F;
+0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580;
+0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581;
+0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582;
+0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583;
+0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584;
+0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585;
+0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586;
+0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;;
+055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;;
+055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;;
+055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;
+055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;
+055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;
+0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531
+0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532
+0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533
+0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534
+0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535
+0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536
+0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537
+0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538
+0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539
+056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A
+056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B
+056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C
+056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D
+056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E
+056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F
+0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540
+0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541
+0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542
+0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543
+0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544
+0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545
+0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546
+0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547
+0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548
+0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549
+057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A
+057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B
+057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C
+057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D
+057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E
+057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F
+0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550
+0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551
+0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552
+0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553
+0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554
+0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555
+0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556
+0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;
+0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
+058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;;
+0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;;
+0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;;
+0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;;
+0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;;
+0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;;
+0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;*;;;
+0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;;
+0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;*;;;
+0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;;
+059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;;
+059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;;
+059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;;
+059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;;
+059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;;
+059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;;
+05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;;
+05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;;
+05A2;HEBREW ACCENT ATNAH HAFUKH;Mn;220;NSM;;;;;N;;;;;
+05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;;
+05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;;
+05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;*;;;
+05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;;
+05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;;
+05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;*;;;
+05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;;
+05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;*;;;
+05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;;
+05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;;
+05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;;
+05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;;
+05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;;
+05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;;
+05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;;
+05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;;
+05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;;
+05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;;
+05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;;
+05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;;
+05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;;
+05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;;
+05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;;
+05BA;HEBREW POINT HOLAM HASER FOR VAV;Mn;19;NSM;;;;;N;;;;;
+05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;;
+05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;or shuruq;;;
+05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;*;;;
+05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;;
+05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;;
+05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;*;;;
+05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;;
+05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;;
+05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;*;;;
+05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;;
+05C5;HEBREW MARK LOWER DOT;Mn;220;NSM;;;;;N;;;;;
+05C6;HEBREW PUNCTUATION NUN HAFUKHA;Po;0;R;;;;;N;;;;;
+05C7;HEBREW POINT QAMATS QATAN;Mn;18;NSM;;;;;N;;;;;
+05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
+05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
+05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;;
+05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;;
+05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;;
+05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;;
+05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;;
+05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;;
+05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;;
+05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;;
+05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;;
+05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;
+05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;;
+05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
+05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;;
+05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;;
+05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;;
+05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;;
+05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;;
+05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;;
+05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;;
+05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;
+05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;
+05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;
+05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;
+05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;
+05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
+05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;
+05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;
+0600;ARABIC NUMBER SIGN;Cf;0;AL;;;;;N;;;;;
+0601;ARABIC SIGN SANAH;Cf;0;AL;;;;;N;;;;;
+0602;ARABIC FOOTNOTE MARKER;Cf;0;AL;;;;;N;;;;;
+0603;ARABIC SIGN SAFHA;Cf;0;AL;;;;;N;;;;;
+060B;AFGHANI SIGN;Sc;0;AL;;;;;N;;;;;
+060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;;
+060D;ARABIC DATE SEPARATOR;Po;0;AL;;;;;N;;;;;
+060E;ARABIC POETIC VERSE SIGN;So;0;ON;;;;;N;;;;;
+060F;ARABIC SIGN MISRA;So;0;ON;;;;;N;;;;;
+0610;ARABIC SIGN SALLALLAHOU ALAYHE WASSALLAM;Mn;230;NSM;;;;;N;;;;;
+0611;ARABIC SIGN ALAYHE ASSALLAM;Mn;230;NSM;;;;;N;;;;;
+0612;ARABIC SIGN RAHMATULLAH ALAYHE;Mn;230;NSM;;;;;N;;;;;
+0613;ARABIC SIGN RADI ALLAHOU ANHU;Mn;230;NSM;;;;;N;;;;;
+0614;ARABIC SIGN TAKHALLUS;Mn;230;NSM;;;;;N;;;;;
+0615;ARABIC SMALL HIGH TAH;Mn;230;NSM;;;;;N;;;;;
+061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;
+061E;ARABIC TRIPLE DOT PUNCTUATION MARK;Po;0;AL;;;;;N;;;;;
+061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;
+0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;;
+0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
+0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;;
+0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;;
+0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;;
+0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;;
+0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;;
+0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;;
+0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;;
+062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;;
+062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;;
+062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;;
+062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;;
+062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;;
+062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;;
+0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;;
+0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;;
+0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;;
+0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;;
+0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;;
+0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;;
+0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;;
+0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;;
+0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;;
+063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;;
+0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;;
+0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;;
+0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;;
+0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;;
+0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;;
+0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;;
+0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;;
+0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;;
+0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;;
+064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;;
+064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;;
+064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;;
+064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;;
+064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;;
+064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;;
+0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;;
+0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;;
+0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;;
+0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;;
+0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;;
+0656;ARABIC SUBSCRIPT ALEF;Mn;220;NSM;;;;;N;;;;;
+0657;ARABIC INVERTED DAMMA;Mn;230;NSM;;;;;N;;;;;
+0658;ARABIC MARK NOON GHUNNA;Mn;230;NSM;;;;;N;;;;;
+0659;ARABIC ZWARAKAY;Mn;230;NSM;;;;;N;;;;;
+065A;ARABIC VOWEL SIGN SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;;
+065B;ARABIC VOWEL SIGN INVERTED SMALL V ABOVE;Mn;230;NSM;;;;;N;;;;;
+065C;ARABIC VOWEL SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+065D;ARABIC REVERSED DAMMA;Mn;230;NSM;;;;;N;;;;;
+065E;ARABIC FATHA WITH TWO DOTS;Mn;230;NSM;;;;;N;;;;;
+0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
+0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
+0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
+0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
+0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
+0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
+0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
+0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
+0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
+0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
+066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
+066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;;
+066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;;
+066E;ARABIC LETTER DOTLESS BEH;Lo;0;AL;;;;;N;;;;;
+066F;ARABIC LETTER DOTLESS QAF;Lo;0;AL;;;;;N;;;;;
+0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;;
+0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;;
+0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;;
+0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;;
+0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;;
+0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL;<compat> 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;;
+0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL;<compat> 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;;
+0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL;<compat> 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;;
+0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL;<compat> 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;;
+0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;;
+067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;;
+067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;;
+067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;;
+067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;;
+067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;;
+067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;;
+0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;;
+0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;;
+0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;;
+0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;;
+0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;;
+0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;;
+0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;;
+0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;;
+0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;;
+0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;;
+068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
+068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;;
+068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;;
+068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;;
+068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;;
+0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;;
+0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;;
+0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;;
+0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;;
+0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;;
+0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;;
+0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;;
+0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;;
+0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;;
+069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;;
+06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;;
+06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;;
+06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;;
+06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;;
+06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;;
+06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;;
+06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;;
+06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;;
+06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;;
+06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;;
+06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;;
+06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;*;;;
+06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;;
+06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;;
+06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;;
+06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;;
+06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;;
+06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;;
+06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;;
+06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;;
+06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;;
+06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;;
+06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;;
+06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;;
+06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;;
+06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;;
+06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;;
+06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;;
+06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;;
+06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;;
+06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;;
+06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;;
+06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;;
+06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;*;;;
+06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;;
+06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;;
+06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;;
+06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;;
+06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;;
+06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;;
+06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;;
+06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;;
+06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;;
+06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;;
+06DD;ARABIC END OF AYAH;Cf;0;AL;;;;;N;;;;;
+06DE;ARABIC START OF RUB EL HIZB;Me;0;NSM;;;;;N;;;;;
+06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;;
+06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;;
+06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;;
+06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;;
+06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;;
+06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;;
+06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;;
+06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;;
+06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;;
+06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;;
+06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;;
+06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;;
+06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;;
+06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;;
+06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;;
+06EE;ARABIC LETTER DAL WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+06EF;ARABIC LETTER REH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;;
+06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;;
+06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;;
+06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;;
+06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;;
+06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;;
+06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;;
+06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;;
+06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;;
+06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;;
+06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;;
+06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;;
+06FF;ARABIC LETTER HEH WITH INVERTED V;Lo;0;AL;;;;;N;;;;;
+0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;;
+0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
+0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
+0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;;
+0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;;
+0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;;
+0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
+0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
+0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
+0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
+070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;;
+070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;;
+070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;;
+070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;;
+070F;SYRIAC ABBREVIATION MARK;Cf;0;BN;;;;;N;;;;;
+0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;;
+0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;;
+0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;;
+0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;;
+0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;;
+0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;;
+0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;;
+0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;;
+0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;;
+071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;;
+071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;;
+071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;;
+071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;;
+071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;;
+0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;;
+0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;;
+0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;;
+0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;;
+0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;;
+0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;;
+0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;;
+0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;;
+0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;;
+0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;;
+072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;;
+072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;;
+072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;;
+072D;SYRIAC LETTER PERSIAN BHETH;Lo;0;AL;;;;;N;;;;;
+072E;SYRIAC LETTER PERSIAN GHAMAL;Lo;0;AL;;;;;N;;;;;
+072F;SYRIAC LETTER PERSIAN DHALATH;Lo;0;AL;;;;;N;;;;;
+0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;;
+0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;;
+0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;;
+0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;;
+0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;;
+0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;;
+0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;;
+073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;;
+073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;;
+073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;;
+073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;;
+0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;;
+0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;;
+0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;;
+0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;;
+0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;;
+074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;;
+074D;SYRIAC LETTER SOGDIAN ZHAIN;Lo;0;AL;;;;;N;;;;;
+074E;SYRIAC LETTER SOGDIAN KHAPH;Lo;0;AL;;;;;N;;;;;
+074F;SYRIAC LETTER SOGDIAN FE;Lo;0;AL;;;;;N;;;;;
+0750;ARABIC LETTER BEH WITH THREE DOTS HORIZONTALLY BELOW;Lo;0;AL;;;;;N;;;;;
+0751;ARABIC LETTER BEH WITH DOT BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0752;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0753;ARABIC LETTER BEH WITH THREE DOTS POINTING UPWARDS BELOW AND TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0754;ARABIC LETTER BEH WITH TWO DOTS BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0755;ARABIC LETTER BEH WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
+0756;ARABIC LETTER BEH WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+0757;ARABIC LETTER HAH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0758;ARABIC LETTER HAH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0759;ARABIC LETTER DAL WITH TWO DOTS VERTICALLY BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
+075A;ARABIC LETTER DAL WITH INVERTED SMALL V BELOW;Lo;0;AL;;;;;N;;;;;
+075B;ARABIC LETTER REH WITH STROKE;Lo;0;AL;;;;;N;;;;;
+075C;ARABIC LETTER SEEN WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+075D;ARABIC LETTER AIN WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+075E;ARABIC LETTER AIN WITH THREE DOTS POINTING DOWNWARDS ABOVE;Lo;0;AL;;;;;N;;;;;
+075F;ARABIC LETTER AIN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
+0760;ARABIC LETTER FEH WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+0761;ARABIC LETTER FEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0762;ARABIC LETTER KEHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0763;ARABIC LETTER KEHEH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0764;ARABIC LETTER KEHEH WITH THREE DOTS POINTING UPWARDS BELOW;Lo;0;AL;;;;;N;;;;;
+0765;ARABIC LETTER MEEM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+0766;ARABIC LETTER MEEM WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+0767;ARABIC LETTER NOON WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+0768;ARABIC LETTER NOON WITH SMALL TAH;Lo;0;AL;;;;;N;;;;;
+0769;ARABIC LETTER NOON WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+076A;ARABIC LETTER LAM WITH BAR;Lo;0;AL;;;;;N;;;;;
+076B;ARABIC LETTER REH WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
+076C;ARABIC LETTER REH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;;;;;
+076D;ARABIC LETTER SEEN WITH TWO DOTS VERTICALLY ABOVE;Lo;0;AL;;;;;N;;;;;
+0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;;
+0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;;
+0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;;
+0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;;
+0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;;
+0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;;
+0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;;
+0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;;
+078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;;
+078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;;
+078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;;
+078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;;
+078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;;
+078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;;
+0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;;
+0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;;
+0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;;
+0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;;
+0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;;
+0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;;
+0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;;
+0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;;
+0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;;
+079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;;
+079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;;
+079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;;
+079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;;
+079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;;
+079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;;
+07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;;
+07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;;
+07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;;
+07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;;
+07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;;
+07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;;
+07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;;
+07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;;
+07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;;
+07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;;
+07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;;
+07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;;
+07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;;
+07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;;
+07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;;
+07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;;
+07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;;
+07B1;THAANA LETTER NAA;Lo;0;AL;;;;;N;;;;;
+07C0;NKO DIGIT ZERO;Nd;0;R;;0;0;0;N;;;;;
+07C1;NKO DIGIT ONE;Nd;0;R;;1;1;1;N;;;;;
+07C2;NKO DIGIT TWO;Nd;0;R;;2;2;2;N;;;;;
+07C3;NKO DIGIT THREE;Nd;0;R;;3;3;3;N;;;;;
+07C4;NKO DIGIT FOUR;Nd;0;R;;4;4;4;N;;;;;
+07C5;NKO DIGIT FIVE;Nd;0;R;;5;5;5;N;;;;;
+07C6;NKO DIGIT SIX;Nd;0;R;;6;6;6;N;;;;;
+07C7;NKO DIGIT SEVEN;Nd;0;R;;7;7;7;N;;;;;
+07C8;NKO DIGIT EIGHT;Nd;0;R;;8;8;8;N;;;;;
+07C9;NKO DIGIT NINE;Nd;0;R;;9;9;9;N;;;;;
+07CA;NKO LETTER A;Lo;0;R;;;;;N;;;;;
+07CB;NKO LETTER EE;Lo;0;R;;;;;N;;;;;
+07CC;NKO LETTER I;Lo;0;R;;;;;N;;;;;
+07CD;NKO LETTER E;Lo;0;R;;;;;N;;;;;
+07CE;NKO LETTER U;Lo;0;R;;;;;N;;;;;
+07CF;NKO LETTER OO;Lo;0;R;;;;;N;;;;;
+07D0;NKO LETTER O;Lo;0;R;;;;;N;;;;;
+07D1;NKO LETTER DAGBASINNA;Lo;0;R;;;;;N;;;;;
+07D2;NKO LETTER N;Lo;0;R;;;;;N;;;;;
+07D3;NKO LETTER BA;Lo;0;R;;;;;N;;;;;
+07D4;NKO LETTER PA;Lo;0;R;;;;;N;;;;;
+07D5;NKO LETTER TA;Lo;0;R;;;;;N;;;;;
+07D6;NKO LETTER JA;Lo;0;R;;;;;N;;;;;
+07D7;NKO LETTER CHA;Lo;0;R;;;;;N;;;;;
+07D8;NKO LETTER DA;Lo;0;R;;;;;N;;;;;
+07D9;NKO LETTER RA;Lo;0;R;;;;;N;;;;;
+07DA;NKO LETTER RRA;Lo;0;R;;;;;N;;;;;
+07DB;NKO LETTER SA;Lo;0;R;;;;;N;;;;;
+07DC;NKO LETTER GBA;Lo;0;R;;;;;N;;;;;
+07DD;NKO LETTER FA;Lo;0;R;;;;;N;;;;;
+07DE;NKO LETTER KA;Lo;0;R;;;;;N;;;;;
+07DF;NKO LETTER LA;Lo;0;R;;;;;N;;;;;
+07E0;NKO LETTER NA WOLOSO;Lo;0;R;;;;;N;;;;;
+07E1;NKO LETTER MA;Lo;0;R;;;;;N;;;;;
+07E2;NKO LETTER NYA;Lo;0;R;;;;;N;;;;;
+07E3;NKO LETTER NA;Lo;0;R;;;;;N;;;;;
+07E4;NKO LETTER HA;Lo;0;R;;;;;N;;;;;
+07E5;NKO LETTER WA;Lo;0;R;;;;;N;;;;;
+07E6;NKO LETTER YA;Lo;0;R;;;;;N;;;;;
+07E7;NKO LETTER NYA WOLOSO;Lo;0;R;;;;;N;;;;;
+07E8;NKO LETTER JONA JA;Lo;0;R;;;;;N;;;;;
+07E9;NKO LETTER JONA CHA;Lo;0;R;;;;;N;;;;;
+07EA;NKO LETTER JONA RA;Lo;0;R;;;;;N;;;;;
+07EB;NKO COMBINING SHORT HIGH TONE;Mn;230;NSM;;;;;N;;;;;
+07EC;NKO COMBINING SHORT LOW TONE;Mn;230;NSM;;;;;N;;;;;
+07ED;NKO COMBINING SHORT RISING TONE;Mn;230;NSM;;;;;N;;;;;
+07EE;NKO COMBINING LONG DESCENDING TONE;Mn;230;NSM;;;;;N;;;;;
+07EF;NKO COMBINING LONG HIGH TONE;Mn;230;NSM;;;;;N;;;;;
+07F0;NKO COMBINING LONG LOW TONE;Mn;230;NSM;;;;;N;;;;;
+07F1;NKO COMBINING LONG RISING TONE;Mn;230;NSM;;;;;N;;;;;
+07F2;NKO COMBINING NASALIZATION MARK;Mn;220;NSM;;;;;N;;;;;
+07F3;NKO COMBINING DOUBLE DOT ABOVE;Mn;230;NSM;;;;;N;;;;;
+07F4;NKO HIGH TONE APOSTROPHE;Lm;0;R;;;;;N;;;;;
+07F5;NKO LOW TONE APOSTROPHE;Lm;0;R;;;;;N;;;;;
+07F6;NKO SYMBOL OO DENNEN;So;0;ON;;;;;N;;;;;
+07F7;NKO SYMBOL GBAKURUNEN;Po;0;ON;;;;;N;;;;;
+07F8;NKO COMMA;Po;0;ON;;;;;N;;;;;
+07F9;NKO EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+07FA;NKO LAJANYALAN;Lm;0;R;;;;;N;;;;;
+0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0904;DEVANAGARI LETTER SHORT A;Lo;0;L;;;;;N;;;;;
+0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;;
+0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
+0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;;
+0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;;
+0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;;
+090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;;
+090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;;
+090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;;
+090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;;
+0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;;
+0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;;
+0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;;
+0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;;
+0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;;
+0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;;
+0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;;
+0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;
+091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;;
+091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;
+091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;;
+091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;
+091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;
+091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;;
+0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;;
+0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;;
+0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;;
+0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;;
+092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;;
+092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;
+092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;;
+092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;
+092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;;
+092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;;
+0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;;
+0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;;
+0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;;
+0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;;
+0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;;
+0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;;
+0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;;
+093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
+0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;;
+0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
+094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;;
+0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;;
+0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;;
+0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
+0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
+0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;;
+0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;;
+095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;;
+095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;;
+095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;;
+095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;;
+095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;;
+095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;;
+0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;;
+0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+097B;DEVANAGARI LETTER GGA;Lo;0;L;;;;;N;;;;;
+097C;DEVANAGARI LETTER JJA;Lo;0;L;;;;;N;;;;;
+097D;DEVANAGARI LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+097E;DEVANAGARI LETTER DDDA;Lo;0;L;;;;;N;;;;;
+097F;DEVANAGARI LETTER BBA;Lo;0;L;;;;;N;;;;;
+0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;;
+0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;;
+0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;;
+0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;;
+0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;;
+098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;;
+098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;;
+0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;;
+0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;;
+0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;;
+0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;;
+0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;;
+0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;;
+099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;;
+099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;;
+099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;;
+099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;;
+099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;;
+099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;;
+09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;;
+09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;;
+09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;;
+09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;;
+09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;;
+09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;;
+09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;;
+09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;;
+09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;;
+09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;;
+09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;;
+09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;;
+09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;;
+09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;;
+09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;;
+09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;;
+09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;;
+09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;;
+09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;;
+09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+09BD;BENGALI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
+09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
+09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+09CE;BENGALI LETTER KHANDA TA;Lo;0;L;;;;;N;;;;;
+09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
+09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
+09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;;
+09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;;
+09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;;
+09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;;
+09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;;
+09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;;
+09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;;
+09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;;
+09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;;N;;;;;
+09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;;
+09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;;
+0A01;GURMUKHI SIGN ADAK BINDI;Mn;0;NSM;;;;;N;;;;;
+0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;;
+0A03;GURMUKHI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;;
+0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;;
+0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;;
+0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;;
+0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;;
+0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;;
+0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;;
+0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;;
+0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;;
+0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;;
+0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;;
+0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;;
+0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;;
+0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;;
+0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;;
+0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;;
+0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;;
+0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;;
+0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;;
+0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;;
+0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;;
+0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
+0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;
+0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;
+0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;
+0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;;
+0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;;
+0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;;
+0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;;
+0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;
+0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
+0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
+0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;;
+0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;;
+0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;;
+0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;;
+0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0A8C;GUJARATI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;;
+0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;;
+0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;;
+0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;;
+0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;;
+0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;;
+0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;;
+0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;;
+0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;;
+0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;;
+0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;;
+0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;;
+0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;;
+0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;;
+0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;;
+0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;;
+0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;;
+0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
+0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;;
+0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0AE1;GUJARATI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0AE2;GUJARATI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0AE3;GUJARATI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0AF1;GUJARATI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;;
+0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;;
+0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;;
+0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;;
+0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;;
+0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;;
+0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;;
+0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;;
+0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;;
+0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;;
+0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;;
+0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;;
+0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;;
+0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;;
+0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;;
+0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;;
+0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;;
+0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;;
+0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;;
+0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;;
+0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;;
+0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;;
+0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;;
+0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;;
+0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0B35;ORIYA LETTER VA;Lo;0;L;;;;;N;;;;;
+0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;;
+0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;;
+0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
+0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
+0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
+0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
+0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;
+0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;;
+0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;;
+0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;;
+0B71;ORIYA LETTER WA;Lo;0;L;;;;;N;;;;;
+0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0B83;TAMIL SIGN VISARGA;Lo;0;L;;;;;N;;;;;
+0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;;
+0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;;
+0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;;
+0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;;
+0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;;
+0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;;
+0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;;
+0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;;
+0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;;
+0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;;
+0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;;
+0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;;
+0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;;
+0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;;
+0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;;
+0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;;
+0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;;
+0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;;
+0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;;
+0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;;
+0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;;
+0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;;
+0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;;
+0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;;
+0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;;
+0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;;
+0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
+0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
+0BB6;TAMIL LETTER SHA;Lo;0;L;;;;;N;;;;;
+0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
+0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
+0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
+0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;;
+0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
+0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
+0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0BE6;TAMIL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;;
+0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+0BF3;TAMIL DAY SIGN;So;0;ON;;;;;N;;Naal;;;
+0BF4;TAMIL MONTH SIGN;So;0;ON;;;;;N;;Maatham;;;
+0BF5;TAMIL YEAR SIGN;So;0;ON;;;;;N;;Varudam;;;
+0BF6;TAMIL DEBIT SIGN;So;0;ON;;;;;N;;Patru;;;
+0BF7;TAMIL CREDIT SIGN;So;0;ON;;;;;N;;Varavu;;;
+0BF8;TAMIL AS ABOVE SIGN;So;0;ON;;;;;N;;Merpadi;;;
+0BF9;TAMIL RUPEE SIGN;Sc;0;ET;;;;;N;;Rupai;;;
+0BFA;TAMIL NUMBER SIGN;So;0;ON;;;;;N;;Enn;;;
+0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
+0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;
+0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;
+0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;
+0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;;
+0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;;
+0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;;
+0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;;
+0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;;
+0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;;
+0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;;
+0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;;
+0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;;
+0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;;
+0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;;
+0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;;
+0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;;
+0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;;
+0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;;
+0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;;
+0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;;
+0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;;
+0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;;
+0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;;
+0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;;
+0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;;
+0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;;
+0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;;
+0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;;
+0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;;
+0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;;
+0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;;
+0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;;
+0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;;
+0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;;
+0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;;
+0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;;
+0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
+0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
+0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
+0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;;
+0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
+0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;;
+0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;;
+0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
+0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;
+0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;
+0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;;
+0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;;
+0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;;
+0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;;
+0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;;
+0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;;
+0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;;
+0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;;
+0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;;
+0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;;
+0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;;
+0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;;
+0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;;
+0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;;
+0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;;
+0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;;
+0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;;
+0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;;
+0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;;
+0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;;
+0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;;
+0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;;
+0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;;
+0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;;
+0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;;
+0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;;
+0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;;
+0CBC;KANNADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0CBD;KANNADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0CBF;KANNADA VOWEL SIGN I;Mn;0;L;;;;;N;;;;;
+0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;;
+0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0CC6;KANNADA VOWEL SIGN E;Mn;0;L;;;;;N;;;;;
+0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;;
+0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;;
+0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;;
+0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;;
+0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
+0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0CE2;KANNADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0CE3;KANNADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0CF1;KANNADA SIGN JIHVAMULIYA;So;0;ON;;;;;N;;;;;
+0CF2;KANNADA SIGN UPADHMANIYA;So;0;ON;;;;;N;;;;;
+0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
+0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;
+0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;
+0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;;
+0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;;
+0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;;
+0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;;
+0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;;
+0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;;
+0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;;
+0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;;
+0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;;
+0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;;
+0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;;
+0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;;
+0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;;
+0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;;
+0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;;
+0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;;
+0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;;
+0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;;
+0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;;
+0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;;
+0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;;
+0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;;
+0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;;
+0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;;
+0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;;
+0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;;
+0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;;
+0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;;
+0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;;
+0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;;
+0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;;
+0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;;
+0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;;
+0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;;
+0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;;
+0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;;
+0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;;
+0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;;
+0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;;
+0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;
+0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
+0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
+0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;;
+0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;;
+0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;
+0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;;
+0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;;
+0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;;
+0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;;
+0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;;
+0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;;
+0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;;
+0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;;
+0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;;
+0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;;
+0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;;
+0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;;
+0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;;
+0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;;
+0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;;
+0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;;
+0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;;
+0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;;
+0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;;
+0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;;
+0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
+0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
+0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
+0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
+0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
+0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;;
+0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
+0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
+0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
+0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;;
+0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
+0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
+0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;;
+0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
+0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
+0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;;
+0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
+0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
+0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;;
+0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;;
+0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;;
+0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;;
+0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;;
+0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;;
+0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;;
+0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;;
+0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;;
+0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;;
+0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;;
+0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;;
+0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;;
+0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;;
+0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;;
+0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;;
+0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
+0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;;
+0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;;
+0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;;
+0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;;
+0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;;
+0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;;
+0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;;
+0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;;
+0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;;
+0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;;
+0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;;
+0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;;
+0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;;
+0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;;
+0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;;
+0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;;
+0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;;
+0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;;
+0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;;
+0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;;
+0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;;
+0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;;
+0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;;
+0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;;
+0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;;
+0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;;
+0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;;
+0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;;
+0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;;
+0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;;
+0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;;
+0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;;
+0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;;
+0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;;
+0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;;
+0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;;
+0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;;
+0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;;
+0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;;
+0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;;
+0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;;
+0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;;
+0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;;
+0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;;
+0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;;
+0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;;
+0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;;
+0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;;
+0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;paiyan noi;;;
+0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;;
+0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;;
+0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;;
+0E33;THAI CHARACTER SARA AM;Lo;0;L;<compat> 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;
+0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;;
+0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;;
+0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;;
+0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;sara uue;;;
+0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;;
+0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;;
+0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;;
+0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;;
+0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;;
+0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;;
+0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;;
+0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;sara ai mai muan;;;
+0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;sara ai mai malai;;;
+0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;lakkhang yao;;;
+0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;mai yamok;;;
+0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;mai taikhu;;;
+0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;;
+0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;;
+0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;;
+0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;;
+0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;;
+0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;nikkhahit;;;
+0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;;
+0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;;
+0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;;
+0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;;
+0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;;
+0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;;
+0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;;
+0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;;
+0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;;
+0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;;
+0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;;
+0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;;
+0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;;
+0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;;
+0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;;
+0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;;
+0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;;
+0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;;
+0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;;
+0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;;
+0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;;
+0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;;
+0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;;
+0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;;
+0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;;
+0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;;
+0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;;
+0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;;
+0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;;
+0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;;
+0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;;
+0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;;
+0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;;
+0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;;
+0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
+0EB3;LAO VOWEL SIGN AM;Lo;0;L;<compat> 0ECD 0EB2;;;;N;;;;;
+0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
+0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
+0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;;
+0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;;
+0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;;
+0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;;
+0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;;
+0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;;
+0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;;
+0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;;
+0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;
+0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;;
+0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;;
+0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;;
+0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;;
+0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;;
+0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;;
+0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;;
+0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;;
+0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;;
+0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;;
+0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;;
+0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;;
+0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;;
+0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;;
+0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;yik go dun ma;;;
+0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;;
+0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;;
+0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;;
+0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;drul shey;;;
+0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;;
+0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;;
+0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;tsek;;;
+0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;<noBreak> 0F0B;;;;N;;tsek tar;;;
+0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;shey;;;
+0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;nyi shey;;;
+0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;;
+0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;;
+0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;rinchen pung shey;;;
+0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;;
+0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;;
+0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;TIBETAN COMMA;ter tsek;;;
+0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;;
+0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;;
+0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;;
+0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;kyu pa;;;
+0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;dong tsu;;;
+0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;;
+0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;;
+0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;;
+0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;;
+0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;;
+0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;;
+0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;1/2;N;;;;;
+0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;3/2;N;;;;;
+0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;5/2;N;;;;;
+0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;7/2;N;;;;;
+0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;9/2;N;;;;;
+0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;11/2;N;;;;;
+0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;13/2;N;;;;;
+0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;15/2;N;;;;;
+0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;17/2;N;;;;;
+0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;-1/2;N;;;;;
+0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;;
+0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;nge zung nyi da;;;
+0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;;
+0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;nge zung gor ta;;;
+0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;;
+0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;tsa tru;;;
+0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;Y;;gug ta yun;;;
+0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;Y;;gug ta ye;;;
+0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;Y;TIBETAN LEFT BRACE;ang kang yun;;;
+0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;Y;TIBETAN RIGHT BRACE;ang kang ye;;;
+0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;yar tse;;;
+0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;mar tse;;;
+0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;
+0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;;
+0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;;
+0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;;
+0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;;
+0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;;
+0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;;
+0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;;
+0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;;
+0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;;
+0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;;
+0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;;
+0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;;
+0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;;
+0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;;
+0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;;
+0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;;
+0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;;
+0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;;
+0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;;
+0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;;
+0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;;
+0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;;
+0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;;
+0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;;
+0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;;
+0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;;
+0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;;
+0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;;
+0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;*;;;
+0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;;
+0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;;
+0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;;
+0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;;
+0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;
+0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;
+0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;*;;;
+0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;;
+0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;;
+0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;;
+0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;;
+0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;;
+0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;;
+0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM;<compat> 0FB2 0F81;;;;N;;;;;
+0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;;
+0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM;<compat> 0FB3 0F81;;;;N;;;;;
+0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;;
+0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;;
+0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;;
+0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;;
+0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;je su nga ro;;;
+0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;nam chey;;;
+0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;;
+0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;;
+0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;nyi da na da;;;
+0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;nan de;;;
+0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;;
+0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;;
+0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;ji ta;;;
+0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;yang ta;;;
+0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;che tsa chen;;;
+0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;chu chen;;;
+0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;tru chen ging;;;
+0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;tru me ging;;;
+0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;;
+0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;;
+0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;;
+0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;;
+0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;;
+0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;;
+0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;;
+0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;;
+0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;;
+0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;;
+0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;;
+0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;;
+0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;;
+0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;;
+0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;;
+0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;;
+0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;;
+0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;;
+0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;;
+0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;;
+0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;;
+0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;;
+0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;;
+0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;;
+0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;;
+0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;;
+0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;;
+0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;;
+0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;*;;;
+0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;;
+0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;;
+0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;;
+0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;*;;;
+0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;*;;;
+0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;;
+0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;;
+0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;;
+0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;;
+0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;;
+0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;;
+0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;;
+0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;*;;;
+0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;*;;;
+0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;*;;;
+0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;kuruka;;;
+0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;kuruka shi mik chen;;;
+0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;;
+0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;;
+0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;chang tyu;;;
+0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;bub chey;;;
+0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;drilbu;;;
+0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;dorje;;;
+0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;pema den;;;
+0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;dorje gya dram;;;
+0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;phurba;;;
+0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;norbu;;;
+0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;norbu nyi khyi;;;
+0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;;
+0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;;
+0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;dena sum;;;
+0FD0;TIBETAN MARK BSKA- SHOG GI MGO RGYAN;Po;0;L;;;;;N;;ka shog gi go gyen;;;
+0FD1;TIBETAN MARK MNYAM YIG GI MGO RGYAN;Po;0;L;;;;;N;;nyam yig gi go gyen;;;
+1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;;
+1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;;
+1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;;
+1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;;
+1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;;
+1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;;
+1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;;
+1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;;
+1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;;
+1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;;
+100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;;
+100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;;
+100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;;
+100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;;
+100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;;
+100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;;
+1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;;
+1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;;
+1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;;
+1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;;
+1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;;
+1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;;
+1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;;
+1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;;
+1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;;
+1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;;
+101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;;
+101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;;
+101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;;
+101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;;
+101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;;
+101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;;
+1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;;
+1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;;
+1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;;
+1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;;
+1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;;
+1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;;
+1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;;
+1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;;
+102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;;
+102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;;
+1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;;
+104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;;
+104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;;
+104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;;
+104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;;
+104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;;
+1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;;
+1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;;
+1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;2D00;
+10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;2D01;
+10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;2D02;
+10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;2D03;
+10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;2D04;
+10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;2D05;
+10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;2D06;
+10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;2D07;
+10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;2D08;
+10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;2D09;
+10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;2D0A;
+10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;2D0B;
+10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;2D0C;
+10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;2D0D;
+10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;2D0E;
+10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;2D0F;
+10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;2D10;
+10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;2D11;
+10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;2D12;
+10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;2D13;
+10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;2D14;
+10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;2D15;
+10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;2D16;
+10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;2D17;
+10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;2D18;
+10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;2D19;
+10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;2D1A;
+10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;2D1B;
+10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;2D1C;
+10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;2D1D;
+10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;2D1E;
+10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;2D1F;
+10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;2D20;
+10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;2D21;
+10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;2D22;
+10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;2D23;
+10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;2D24;
+10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;2D25;
+10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
+10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
+10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
+10D3;GEORGIAN LETTER DON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;;
+10D4;GEORGIAN LETTER EN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;;
+10D5;GEORGIAN LETTER VIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;;
+10D6;GEORGIAN LETTER ZEN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;;
+10D7;GEORGIAN LETTER TAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;;
+10D8;GEORGIAN LETTER IN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;;
+10D9;GEORGIAN LETTER KAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;;
+10DA;GEORGIAN LETTER LAS;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;;
+10DB;GEORGIAN LETTER MAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;;
+10DC;GEORGIAN LETTER NAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;;
+10DD;GEORGIAN LETTER ON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;;
+10DE;GEORGIAN LETTER PAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;;
+10DF;GEORGIAN LETTER ZHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;;
+10E0;GEORGIAN LETTER RAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;;
+10E1;GEORGIAN LETTER SAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;;
+10E2;GEORGIAN LETTER TAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;;
+10E3;GEORGIAN LETTER UN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;;
+10E4;GEORGIAN LETTER PHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;;
+10E5;GEORGIAN LETTER KHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;;
+10E6;GEORGIAN LETTER GHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;;
+10E7;GEORGIAN LETTER QAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;;
+10E8;GEORGIAN LETTER SHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;;
+10E9;GEORGIAN LETTER CHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;;
+10EA;GEORGIAN LETTER CAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;;
+10EB;GEORGIAN LETTER JIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;;
+10EC;GEORGIAN LETTER CIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;;
+10ED;GEORGIAN LETTER CHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;;
+10EE;GEORGIAN LETTER XAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;;
+10EF;GEORGIAN LETTER JHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;;
+10F0;GEORGIAN LETTER HAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;;
+10F1;GEORGIAN LETTER HE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;;
+10F2;GEORGIAN LETTER HIE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;;
+10F3;GEORGIAN LETTER WE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;;
+10F4;GEORGIAN LETTER HAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;;
+10F5;GEORGIAN LETTER HOE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;;
+10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
+10F7;GEORGIAN LETTER YN;Lo;0;L;;;;;N;;;;;
+10F8;GEORGIAN LETTER ELIFI;Lo;0;L;;;;;N;;;;;
+10F9;GEORGIAN LETTER TURNED GAN;Lo;0;L;;;;;N;;;;;
+10FA;GEORGIAN LETTER AIN;Lo;0;L;;;;;N;;;;;
+10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+10FC;MODIFIER LETTER GEORGIAN NAR;Lm;0;L;<super> 10DC;;;;N;;;;;
+1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
+1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
+1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
+1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
+1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;dd *;;;
+1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;r *;;;
+1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
+1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
+1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;bb *;;;
+1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
+110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
+110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;;
+110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
+110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;jj *;;;
+110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
+110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
+1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
+1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
+1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
+1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
+1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;;
+1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
+1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;;
+1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
+1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
+1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
+111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;;
+111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;;
+111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
+111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
+111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
+111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;;
+1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;;
+1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;;
+1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;;
+1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;;
+112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;;
+112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;;
+112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
+1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;;
+1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
+1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;;
+1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;;
+1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;;
+1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;;
+113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;;
+113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;;
+113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;;
+113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
+113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;;
+113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
+1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
+1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;;
+1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;;
+1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;;
+1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;;
+1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
+1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
+1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;;
+1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;;
+114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;;
+114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;;
+114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;;
+114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;;
+114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
+1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;;
+1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
+1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;;
+1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;;
+1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
+1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
+1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;;
+1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;;
+1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;;
+1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;;
+1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;;
+1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;;
+1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;;
+1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;;
+1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;;
+1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;;
+116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;;
+116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;;
+116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;;
+116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;;
+116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;;
+116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;;
+1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;;
+1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;;
+1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;;
+1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;;
+1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;;
+1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;;
+1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;;
+1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;;
+1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;;
+1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;;
+117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;;
+117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;;
+117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;;
+117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;;
+117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;;
+117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;;
+1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;;
+1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;;
+1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;;
+1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;;
+1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;;
+1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;;
+1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;;
+1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;;
+1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;;
+1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;;
+118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;;
+118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;;
+118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;;
+118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;;
+118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;;
+118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;;
+1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;;
+1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;;
+1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;;
+1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;;
+1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;;
+1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;;
+1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;;
+1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;;
+1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;;
+1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;;
+119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;;
+119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;;
+119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;;
+119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;;
+119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;;
+119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;;
+11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;;
+11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;;
+11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;;
+11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
+11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
+11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;gs *;;;
+11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
+11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;nj *;;;
+11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;nh *;;;
+11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
+11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;l *;;;
+11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;lg *;;;
+11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;lm *;;;
+11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;lb *;;;
+11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;ls *;;;
+11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;lt *;;;
+11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;lp *;;;
+11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;lh *;;;
+11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
+11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
+11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;bs *;;;
+11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
+11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
+11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;ng *;;;
+11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
+11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
+11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
+11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
+11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
+11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
+11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;;
+11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
+11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
+11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;;
+11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;;
+11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;;
+11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
+11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;;
+11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;;
+11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
+11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;;
+11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;;
+11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
+11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;;
+11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;;
+11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;;
+11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
+11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;;
+11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;;
+11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;;
+11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
+11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;;
+11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
+11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
+11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
+11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
+11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;;
+11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;;
+11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
+11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
+11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
+11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;;
+11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;;
+11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;;
+11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;;
+11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;;
+1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;;
+1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;;
+1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
+1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+1207;ETHIOPIC SYLLABLE HOA;Lo;0;L;;;;;N;;;;;
+1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;;
+120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;;
+120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;;
+1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;;
+1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;;
+1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;;
+1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;;
+1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;;
+1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;;
+1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;;
+1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;;
+1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;;
+121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;;
+121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;;
+1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;;
+1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;;
+1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;;
+1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;;
+1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;;
+1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;;
+1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;;
+1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;;
+1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;;
+122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;;
+122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;;
+122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;;
+1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;;
+1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;;
+1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;;
+1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;;
+123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;;
+123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;;
+123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;;
+1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;;
+1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;;
+1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;;
+1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;;
+1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;;
+1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;;
+1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+1247;ETHIOPIC SYLLABLE QOA;Lo;0;L;;;;;N;;;;;
+1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;;
+124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;;
+124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;;
+124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;;
+124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;;
+1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;;
+1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;;
+1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;;
+1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;;
+1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;;
+1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;;
+1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;;
+1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;;
+125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;;
+125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;;
+125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;;
+125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;;
+1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;;
+1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;;
+1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;;
+1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;;
+126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;;
+126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;;
+126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;;
+1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;;
+1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;;
+1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;;
+1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;;
+127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;;
+127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;;
+1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;;
+1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;;
+1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;;
+1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;;
+1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;;
+1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;;
+1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+1287;ETHIOPIC SYLLABLE XOA;Lo;0;L;;;;;N;;;;;
+1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;;
+128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;;
+128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;;
+128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;;
+128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;;
+1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;;
+1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;;
+1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;;
+1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;;
+1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;;
+129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;;
+129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;;
+129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;;
+12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;;
+12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;;
+12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;;
+12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;;
+12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;;
+12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;;
+12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;;
+12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;;
+12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;;
+12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
+12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+12AF;ETHIOPIC SYLLABLE KOA;Lo;0;L;;;;;N;;;;;
+12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;;
+12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;;
+12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;;
+12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;;
+12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;;
+12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;;
+12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;;
+12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;;
+12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;;
+12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;;
+12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;;
+12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;;
+12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;;
+12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;;
+12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;;
+12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;;
+12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;;
+12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;;
+12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;;
+12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;;
+12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
+12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+12CF;ETHIOPIC SYLLABLE WOA;Lo;0;L;;;;;N;;;;;
+12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;;
+12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;;
+12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;;
+12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;;
+12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;;
+12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;;
+12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;;
+12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;;
+12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;;
+12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;;
+12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;;
+12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;;
+12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;;
+12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;;
+12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;;
+12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;;
+12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
+12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;;
+12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+12EF;ETHIOPIC SYLLABLE YOA;Lo;0;L;;;;;N;;;;;
+12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;;
+12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;;
+12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;;
+12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
+12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
+12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
+12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;;
+12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;;
+12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
+12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
+12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;;
+1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;;
+1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;;
+1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;;
+1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;;
+1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;;
+1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;;
+130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
+130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+130F;ETHIOPIC SYLLABLE GOA;Lo;0;L;;;;;N;;;;;
+1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;;
+1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;;
+1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;;
+1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;;
+1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;;
+1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
+1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
+131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
+131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;;
+131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;;
+131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
+131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+131F;ETHIOPIC SYLLABLE GGWAA;Lo;0;L;;;;;N;;;;;
+1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;;
+1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;;
+1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;;
+1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;;
+1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;;
+1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;;
+1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;;
+1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;;
+1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
+1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
+132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;;
+132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;;
+132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;;
+132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
+132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
+132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;;
+1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;;
+1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;;
+1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;;
+1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;;
+1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;;
+1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;;
+1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;;
+1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;;
+1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;;
+1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;;
+133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;;
+133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;;
+133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;;
+133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;;
+133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;;
+133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;;
+1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;;
+1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;;
+1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;;
+1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;;
+1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;;
+1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;;
+1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;;
+1347;ETHIOPIC SYLLABLE TZOA;Lo;0;L;;;;;N;;;;;
+1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;;
+134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;;
+134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;;
+134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;;
+1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;;
+1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;;
+1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;;
+1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;;
+1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;;
+1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;;
+135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;;
+135F;ETHIOPIC COMBINING GEMINATION MARK;Mn;230;NSM;;;;;N;;;;;
+1360;ETHIOPIC SECTION MARK;So;0;L;;;;;N;;;;;
+1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;;
+1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;;
+1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;;
+1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;;
+1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;;
+1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;;
+1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;;
+1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+1369;ETHIOPIC DIGIT ONE;No;0;L;;;1;1;N;;;;;
+136A;ETHIOPIC DIGIT TWO;No;0;L;;;2;2;N;;;;;
+136B;ETHIOPIC DIGIT THREE;No;0;L;;;3;3;N;;;;;
+136C;ETHIOPIC DIGIT FOUR;No;0;L;;;4;4;N;;;;;
+136D;ETHIOPIC DIGIT FIVE;No;0;L;;;5;5;N;;;;;
+136E;ETHIOPIC DIGIT SIX;No;0;L;;;6;6;N;;;;;
+136F;ETHIOPIC DIGIT SEVEN;No;0;L;;;7;7;N;;;;;
+1370;ETHIOPIC DIGIT EIGHT;No;0;L;;;8;8;N;;;;;
+1371;ETHIOPIC DIGIT NINE;No;0;L;;;9;9;N;;;;;
+1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;;
+1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;;
+1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;;
+1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;;
+1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;;
+1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
+1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
+137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;;
+137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;;
+137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
+1380;ETHIOPIC SYLLABLE SEBATBEIT MWA;Lo;0;L;;;;;N;;;;;
+1381;ETHIOPIC SYLLABLE MWI;Lo;0;L;;;;;N;;;;;
+1382;ETHIOPIC SYLLABLE MWEE;Lo;0;L;;;;;N;;;;;
+1383;ETHIOPIC SYLLABLE MWE;Lo;0;L;;;;;N;;;;;
+1384;ETHIOPIC SYLLABLE SEBATBEIT BWA;Lo;0;L;;;;;N;;;;;
+1385;ETHIOPIC SYLLABLE BWI;Lo;0;L;;;;;N;;;;;
+1386;ETHIOPIC SYLLABLE BWEE;Lo;0;L;;;;;N;;;;;
+1387;ETHIOPIC SYLLABLE BWE;Lo;0;L;;;;;N;;;;;
+1388;ETHIOPIC SYLLABLE SEBATBEIT FWA;Lo;0;L;;;;;N;;;;;
+1389;ETHIOPIC SYLLABLE FWI;Lo;0;L;;;;;N;;;;;
+138A;ETHIOPIC SYLLABLE FWEE;Lo;0;L;;;;;N;;;;;
+138B;ETHIOPIC SYLLABLE FWE;Lo;0;L;;;;;N;;;;;
+138C;ETHIOPIC SYLLABLE SEBATBEIT PWA;Lo;0;L;;;;;N;;;;;
+138D;ETHIOPIC SYLLABLE PWI;Lo;0;L;;;;;N;;;;;
+138E;ETHIOPIC SYLLABLE PWEE;Lo;0;L;;;;;N;;;;;
+138F;ETHIOPIC SYLLABLE PWE;Lo;0;L;;;;;N;;;;;
+1390;ETHIOPIC TONAL MARK YIZET;So;0;ON;;;;;N;;;;;
+1391;ETHIOPIC TONAL MARK DERET;So;0;ON;;;;;N;;;;;
+1392;ETHIOPIC TONAL MARK RIKRIK;So;0;ON;;;;;N;;;;;
+1393;ETHIOPIC TONAL MARK SHORT RIKRIK;So;0;ON;;;;;N;;;;;
+1394;ETHIOPIC TONAL MARK DIFAT;So;0;ON;;;;;N;;;;;
+1395;ETHIOPIC TONAL MARK KENAT;So;0;ON;;;;;N;;;;;
+1396;ETHIOPIC TONAL MARK CHIRET;So;0;ON;;;;;N;;;;;
+1397;ETHIOPIC TONAL MARK HIDET;So;0;ON;;;;;N;;;;;
+1398;ETHIOPIC TONAL MARK DERET-HIDET;So;0;ON;;;;;N;;;;;
+1399;ETHIOPIC TONAL MARK KURT;So;0;ON;;;;;N;;;;;
+13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;;
+13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;;
+13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;;
+13A3;CHEROKEE LETTER O;Lo;0;L;;;;;N;;;;;
+13A4;CHEROKEE LETTER U;Lo;0;L;;;;;N;;;;;
+13A5;CHEROKEE LETTER V;Lo;0;L;;;;;N;;;;;
+13A6;CHEROKEE LETTER GA;Lo;0;L;;;;;N;;;;;
+13A7;CHEROKEE LETTER KA;Lo;0;L;;;;;N;;;;;
+13A8;CHEROKEE LETTER GE;Lo;0;L;;;;;N;;;;;
+13A9;CHEROKEE LETTER GI;Lo;0;L;;;;;N;;;;;
+13AA;CHEROKEE LETTER GO;Lo;0;L;;;;;N;;;;;
+13AB;CHEROKEE LETTER GU;Lo;0;L;;;;;N;;;;;
+13AC;CHEROKEE LETTER GV;Lo;0;L;;;;;N;;;;;
+13AD;CHEROKEE LETTER HA;Lo;0;L;;;;;N;;;;;
+13AE;CHEROKEE LETTER HE;Lo;0;L;;;;;N;;;;;
+13AF;CHEROKEE LETTER HI;Lo;0;L;;;;;N;;;;;
+13B0;CHEROKEE LETTER HO;Lo;0;L;;;;;N;;;;;
+13B1;CHEROKEE LETTER HU;Lo;0;L;;;;;N;;;;;
+13B2;CHEROKEE LETTER HV;Lo;0;L;;;;;N;;;;;
+13B3;CHEROKEE LETTER LA;Lo;0;L;;;;;N;;;;;
+13B4;CHEROKEE LETTER LE;Lo;0;L;;;;;N;;;;;
+13B5;CHEROKEE LETTER LI;Lo;0;L;;;;;N;;;;;
+13B6;CHEROKEE LETTER LO;Lo;0;L;;;;;N;;;;;
+13B7;CHEROKEE LETTER LU;Lo;0;L;;;;;N;;;;;
+13B8;CHEROKEE LETTER LV;Lo;0;L;;;;;N;;;;;
+13B9;CHEROKEE LETTER MA;Lo;0;L;;;;;N;;;;;
+13BA;CHEROKEE LETTER ME;Lo;0;L;;;;;N;;;;;
+13BB;CHEROKEE LETTER MI;Lo;0;L;;;;;N;;;;;
+13BC;CHEROKEE LETTER MO;Lo;0;L;;;;;N;;;;;
+13BD;CHEROKEE LETTER MU;Lo;0;L;;;;;N;;;;;
+13BE;CHEROKEE LETTER NA;Lo;0;L;;;;;N;;;;;
+13BF;CHEROKEE LETTER HNA;Lo;0;L;;;;;N;;;;;
+13C0;CHEROKEE LETTER NAH;Lo;0;L;;;;;N;;;;;
+13C1;CHEROKEE LETTER NE;Lo;0;L;;;;;N;;;;;
+13C2;CHEROKEE LETTER NI;Lo;0;L;;;;;N;;;;;
+13C3;CHEROKEE LETTER NO;Lo;0;L;;;;;N;;;;;
+13C4;CHEROKEE LETTER NU;Lo;0;L;;;;;N;;;;;
+13C5;CHEROKEE LETTER NV;Lo;0;L;;;;;N;;;;;
+13C6;CHEROKEE LETTER QUA;Lo;0;L;;;;;N;;;;;
+13C7;CHEROKEE LETTER QUE;Lo;0;L;;;;;N;;;;;
+13C8;CHEROKEE LETTER QUI;Lo;0;L;;;;;N;;;;;
+13C9;CHEROKEE LETTER QUO;Lo;0;L;;;;;N;;;;;
+13CA;CHEROKEE LETTER QUU;Lo;0;L;;;;;N;;;;;
+13CB;CHEROKEE LETTER QUV;Lo;0;L;;;;;N;;;;;
+13CC;CHEROKEE LETTER SA;Lo;0;L;;;;;N;;;;;
+13CD;CHEROKEE LETTER S;Lo;0;L;;;;;N;;;;;
+13CE;CHEROKEE LETTER SE;Lo;0;L;;;;;N;;;;;
+13CF;CHEROKEE LETTER SI;Lo;0;L;;;;;N;;;;;
+13D0;CHEROKEE LETTER SO;Lo;0;L;;;;;N;;;;;
+13D1;CHEROKEE LETTER SU;Lo;0;L;;;;;N;;;;;
+13D2;CHEROKEE LETTER SV;Lo;0;L;;;;;N;;;;;
+13D3;CHEROKEE LETTER DA;Lo;0;L;;;;;N;;;;;
+13D4;CHEROKEE LETTER TA;Lo;0;L;;;;;N;;;;;
+13D5;CHEROKEE LETTER DE;Lo;0;L;;;;;N;;;;;
+13D6;CHEROKEE LETTER TE;Lo;0;L;;;;;N;;;;;
+13D7;CHEROKEE LETTER DI;Lo;0;L;;;;;N;;;;;
+13D8;CHEROKEE LETTER TI;Lo;0;L;;;;;N;;;;;
+13D9;CHEROKEE LETTER DO;Lo;0;L;;;;;N;;;;;
+13DA;CHEROKEE LETTER DU;Lo;0;L;;;;;N;;;;;
+13DB;CHEROKEE LETTER DV;Lo;0;L;;;;;N;;;;;
+13DC;CHEROKEE LETTER DLA;Lo;0;L;;;;;N;;;;;
+13DD;CHEROKEE LETTER TLA;Lo;0;L;;;;;N;;;;;
+13DE;CHEROKEE LETTER TLE;Lo;0;L;;;;;N;;;;;
+13DF;CHEROKEE LETTER TLI;Lo;0;L;;;;;N;;;;;
+13E0;CHEROKEE LETTER TLO;Lo;0;L;;;;;N;;;;;
+13E1;CHEROKEE LETTER TLU;Lo;0;L;;;;;N;;;;;
+13E2;CHEROKEE LETTER TLV;Lo;0;L;;;;;N;;;;;
+13E3;CHEROKEE LETTER TSA;Lo;0;L;;;;;N;;;;;
+13E4;CHEROKEE LETTER TSE;Lo;0;L;;;;;N;;;;;
+13E5;CHEROKEE LETTER TSI;Lo;0;L;;;;;N;;;;;
+13E6;CHEROKEE LETTER TSO;Lo;0;L;;;;;N;;;;;
+13E7;CHEROKEE LETTER TSU;Lo;0;L;;;;;N;;;;;
+13E8;CHEROKEE LETTER TSV;Lo;0;L;;;;;N;;;;;
+13E9;CHEROKEE LETTER WA;Lo;0;L;;;;;N;;;;;
+13EA;CHEROKEE LETTER WE;Lo;0;L;;;;;N;;;;;
+13EB;CHEROKEE LETTER WI;Lo;0;L;;;;;N;;;;;
+13EC;CHEROKEE LETTER WO;Lo;0;L;;;;;N;;;;;
+13ED;CHEROKEE LETTER WU;Lo;0;L;;;;;N;;;;;
+13EE;CHEROKEE LETTER WV;Lo;0;L;;;;;N;;;;;
+13EF;CHEROKEE LETTER YA;Lo;0;L;;;;;N;;;;;
+13F0;CHEROKEE LETTER YE;Lo;0;L;;;;;N;;;;;
+13F1;CHEROKEE LETTER YI;Lo;0;L;;;;;N;;;;;
+13F2;CHEROKEE LETTER YO;Lo;0;L;;;;;N;;;;;
+13F3;CHEROKEE LETTER YU;Lo;0;L;;;;;N;;;;;
+13F4;CHEROKEE LETTER YV;Lo;0;L;;;;;N;;;;;
+1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;;
+1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;;
+1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;;
+1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;;
+1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;;
+1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;;
+1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;;
+1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;;
+1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;;
+140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;;
+140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;;
+140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;;
+140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;;
+140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;;
+140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;;
+1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;;
+1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;;
+1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;;
+1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;;
+1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;;
+1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;;
+1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;;
+1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;;
+1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;;
+1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;;
+141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;;
+141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;;
+141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;;
+141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;;
+141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;;
+1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;;
+1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;;
+1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;;
+1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;;
+1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;;
+1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;;
+1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;;
+1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;;
+1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;;
+1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;;
+142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;;
+142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;;
+142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;;
+142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;;
+142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;;
+142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;;
+1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;;
+1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;;
+1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;;
+1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;;
+1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;;
+1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;;
+1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;;
+1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;;
+1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;;
+1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;;
+143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;;
+143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;;
+143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;;
+143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;;
+143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;;
+143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;;
+1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;;
+1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;;
+1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;;
+1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;;
+1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;;
+1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;;
+1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;;
+1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;;
+1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;;
+1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;;
+144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;;
+144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;;
+144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;;
+144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;;
+144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;;
+144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;;
+1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;;
+1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;;
+1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;;
+1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;;
+1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;;
+1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;;
+1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;;
+1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;;
+1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;;
+1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;;
+145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;;
+145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;;
+145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;;
+145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;;
+145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;;
+145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;;
+1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;;
+1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;;
+1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;;
+1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;;
+1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;;
+1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;;
+1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;;
+1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;;
+1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;;
+1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;;
+146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;;
+146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;;
+146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;;
+146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;;
+146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;;
+146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;;
+1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;;
+1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;;
+1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;;
+1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;;
+1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;;
+1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;;
+1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;;
+1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;;
+1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;;
+1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;;
+147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;;
+147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;;
+147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;;
+147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;;
+147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;;
+147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;;
+1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;;
+1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;;
+1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;;
+1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;;
+1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;;
+1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;;
+1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;;
+1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;;
+1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;;
+1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;;
+148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;;
+148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;;
+148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;;
+148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;;
+148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;;
+148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;;
+1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;;
+1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;;
+1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;;
+1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;;
+1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;;
+1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;;
+1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;;
+1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;;
+1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;;
+1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;;
+149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;;
+149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;;
+149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;;
+149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;;
+149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;;
+149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;;
+14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;;
+14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;;
+14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;;
+14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;;
+14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;;
+14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;;
+14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;;
+14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;;
+14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;;
+14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;;
+14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;;
+14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;;
+14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;;
+14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;;
+14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;;
+14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;;
+14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;;
+14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;;
+14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;;
+14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;;
+14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;;
+14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;;
+14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;;
+14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;;
+14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;;
+14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;;
+14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;;
+14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;;
+14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;;
+14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;;
+14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;;
+14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;;
+14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;;
+14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;;
+14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;;
+14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;;
+14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;;
+14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;;
+14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;;
+14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;;
+14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;;
+14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;;
+14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;;
+14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;;
+14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;;
+14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;;
+14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;;
+14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;;
+14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;;
+14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;;
+14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;;
+14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;;
+14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;;
+14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;;
+14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;;
+14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;;
+14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;;
+14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;;
+14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;;
+14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;;
+14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;;
+14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;;
+14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;;
+14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;;
+14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;;
+14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;;
+14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;;
+14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;;
+14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;;
+14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;;
+14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;;
+14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;;
+14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;;
+14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;;
+14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;;
+14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;;
+14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;;
+14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;;
+14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;;
+14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;;
+14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;;
+14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;;
+14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;;
+14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;;
+14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;;
+14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;;
+14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;;
+14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;;
+14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;;
+14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;;
+14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;;
+14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;;
+14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;;
+14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;;
+14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;;
+14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;;
+1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;;
+1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;;
+1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;;
+1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;;
+1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;;
+1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;;
+1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;;
+1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;;
+1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;;
+1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;;
+150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;;
+150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;;
+150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;;
+150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;;
+150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;;
+150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;;
+1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;;
+1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;;
+1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;;
+1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;;
+1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;;
+1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;;
+1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;;
+1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;;
+1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;;
+1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;;
+151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;;
+151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;;
+151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;;
+151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;;
+151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;;
+151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;;
+1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;;
+1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;;
+1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;;
+1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;;
+1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;;
+1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;;
+1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;;
+1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;;
+1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;;
+1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;;
+152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;;
+152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;;
+152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;;
+152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;;
+152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;;
+152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;;
+1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;;
+1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;;
+1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;;
+1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;;
+1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;;
+1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;;
+1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;;
+1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;;
+1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;;
+1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;;
+153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;;
+153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;;
+153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;;
+153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;;
+153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;;
+153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;;
+1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;;
+1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;;
+1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;;
+1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;;
+1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;;
+1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;;
+1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;;
+1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;;
+1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;;
+1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;;
+154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;;
+154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;;
+154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;;
+154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;;
+154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;;
+154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;;
+1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;;
+1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;;
+1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;;
+1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;;
+1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;;
+1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;;
+1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;;
+1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;;
+1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;;
+1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;;
+155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;;
+155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;;
+155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;;
+155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;;
+155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;;
+155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;;
+1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;;
+1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;;
+1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;;
+1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;;
+1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;;
+1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;;
+1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;;
+1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;;
+1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;;
+1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;;
+156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;;
+156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;;
+156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;;
+156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;;
+156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;;
+156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;;
+1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;;
+1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;;
+1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;;
+1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;;
+1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;;
+1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;;
+1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;;
+1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;;
+1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;;
+1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;;
+157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;;
+157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;;
+157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;;
+157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;;
+157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;;
+157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;;
+1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;;
+1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;;
+1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;;
+1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;;
+1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;;
+1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;;
+1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;;
+1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;;
+1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;;
+1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;;
+158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;;
+158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;;
+158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;;
+158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;;
+158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;;
+158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;;
+1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;;
+1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;;
+1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;;
+1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;;
+1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;;
+1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;;
+1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;;
+1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;;
+1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;;
+1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;;
+159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;;
+159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;;
+159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;;
+159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;;
+159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;;
+159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;;
+15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;;
+15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;;
+15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;;
+15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;;
+15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;;
+15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;;
+15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;;
+15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;;
+15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;;
+15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;;
+15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;;
+15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;;
+15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;;
+15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;;
+15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;;
+15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;;
+15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;;
+15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;;
+15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;;
+15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;;
+15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;;
+15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;;
+15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;;
+15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;;
+15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;;
+15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;;
+15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;;
+15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;;
+15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;;
+15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;;
+15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;;
+15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;;
+15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;;
+15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;;
+15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;;
+15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;;
+15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;;
+15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;;
+15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;;
+15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;;
+15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;;
+15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;;
+15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;;
+15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;;
+15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;;
+15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;;
+15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;;
+15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;;
+15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;;
+15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;;
+15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;;
+15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;;
+15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;;
+15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;;
+15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;;
+15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;;
+15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;;
+15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;;
+15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;;
+15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;;
+15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;;
+15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;;
+15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;;
+15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;;
+15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;;
+15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;;
+15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;;
+15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;;
+15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;;
+15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;;
+15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;;
+15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;;
+15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;;
+15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;;
+15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;;
+15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;;
+15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;;
+15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;;
+15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;;
+15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;;
+15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;;
+15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;;
+15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;;
+15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;;
+15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;;
+15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;;
+15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;;
+15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;;
+15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;;
+15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;;
+15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;;
+15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;;
+15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;;
+15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;;
+15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;;
+15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;;
+1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;;
+1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;;
+1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;;
+1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;;
+1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;;
+1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;;
+1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;;
+1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;;
+1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;;
+1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;;
+160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;;
+160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;;
+160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;;
+160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;;
+160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;;
+160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;;
+1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;;
+1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;;
+1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;;
+1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;;
+1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;;
+1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;;
+1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;;
+1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;;
+1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;;
+1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;;
+161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;;
+161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;;
+161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;;
+161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;;
+161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;;
+161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;;
+1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;;
+1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;;
+1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;;
+1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;;
+1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;;
+1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;;
+1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;;
+1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;;
+1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;;
+1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;;
+162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;;
+162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;;
+162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;;
+162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;;
+162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;;
+162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;;
+1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;;
+1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;;
+1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;;
+1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;;
+1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;;
+1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;;
+1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;;
+1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;;
+1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;;
+1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;;
+163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;;
+163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;;
+163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;;
+163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;;
+163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;;
+163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;;
+1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;;
+1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;;
+1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;;
+1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;;
+1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;;
+1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;;
+1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;;
+1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;;
+1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;;
+1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;;
+164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;;
+164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;;
+164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;;
+164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;;
+164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;;
+164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;;
+1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;;
+1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;;
+1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;;
+1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;;
+1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;;
+1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;;
+1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;;
+1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;;
+1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;;
+1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;;
+165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;;
+165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;;
+165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;;
+165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;;
+165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;;
+165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;;
+1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;;
+1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;;
+1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;;
+1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;;
+1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;;
+1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;;
+1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;;
+1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;;
+1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;;
+1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;;
+166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;;
+166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;;
+166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;;
+166D;CANADIAN SYLLABICS CHI SIGN;Po;0;L;;;;;N;;;;;
+166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;;
+166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;;
+1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;;
+1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;;
+1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;;
+1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;;
+1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;;
+1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;;
+1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;;
+1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;;
+1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;;
+1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;;
+1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;;
+1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;;
+1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;;
+1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;;
+1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;;
+1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;;
+1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;;
+168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;;
+168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;;
+168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;;
+168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;;
+168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;;
+168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;;
+1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;;
+1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;;
+1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;;
+1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;;
+1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;;
+1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;;
+1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;;
+1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;;
+1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;;
+1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;;
+169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;;
+169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;Y;;;;;
+169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;Y;;;;;
+16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;;
+16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;;
+16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;;
+16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;;
+16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;;
+16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;;
+16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;;
+16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;;
+16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;;
+16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;;
+16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;;
+16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;;
+16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;;
+16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;;
+16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;;
+16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;;
+16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;;
+16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;;
+16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;;
+16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;;
+16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;;
+16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;;
+16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;;
+16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;;
+16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;;
+16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;;
+16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;;
+16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;;
+16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;;
+16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;;
+16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;;
+16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;;
+16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;;
+16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;;
+16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;;
+16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;;
+16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;;
+16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;;
+16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;;
+16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;;
+16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;;
+16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;;
+16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;;
+16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;;
+16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;;
+16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;;
+16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;;
+16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;;
+16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;;
+16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;;
+16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;;
+16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;;
+16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;;
+16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;;
+16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;;
+16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;;
+16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;;
+16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;;
+16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;;
+16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;;
+16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;;
+16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;;
+16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;;
+16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;;
+16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;;
+16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;;
+16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;;
+16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;;
+16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;;
+16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;;
+16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;;
+16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;;
+16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;;
+16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;;
+16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;;
+16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;;
+16EE;RUNIC ARLAUG SYMBOL;Nl;0;L;;;;17;N;;golden number 17;;;
+16EF;RUNIC TVIMADUR SYMBOL;Nl;0;L;;;;18;N;;golden number 18;;;
+16F0;RUNIC BELGTHOR SYMBOL;Nl;0;L;;;;19;N;;golden number 19;;;
+1700;TAGALOG LETTER A;Lo;0;L;;;;;N;;;;;
+1701;TAGALOG LETTER I;Lo;0;L;;;;;N;;;;;
+1702;TAGALOG LETTER U;Lo;0;L;;;;;N;;;;;
+1703;TAGALOG LETTER KA;Lo;0;L;;;;;N;;;;;
+1704;TAGALOG LETTER GA;Lo;0;L;;;;;N;;;;;
+1705;TAGALOG LETTER NGA;Lo;0;L;;;;;N;;;;;
+1706;TAGALOG LETTER TA;Lo;0;L;;;;;N;;;;;
+1707;TAGALOG LETTER DA;Lo;0;L;;;;;N;;;;;
+1708;TAGALOG LETTER NA;Lo;0;L;;;;;N;;;;;
+1709;TAGALOG LETTER PA;Lo;0;L;;;;;N;;;;;
+170A;TAGALOG LETTER BA;Lo;0;L;;;;;N;;;;;
+170B;TAGALOG LETTER MA;Lo;0;L;;;;;N;;;;;
+170C;TAGALOG LETTER YA;Lo;0;L;;;;;N;;;;;
+170E;TAGALOG LETTER LA;Lo;0;L;;;;;N;;;;;
+170F;TAGALOG LETTER WA;Lo;0;L;;;;;N;;;;;
+1710;TAGALOG LETTER SA;Lo;0;L;;;;;N;;;;;
+1711;TAGALOG LETTER HA;Lo;0;L;;;;;N;;;;;
+1712;TAGALOG VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1713;TAGALOG VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1714;TAGALOG SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1720;HANUNOO LETTER A;Lo;0;L;;;;;N;;;;;
+1721;HANUNOO LETTER I;Lo;0;L;;;;;N;;;;;
+1722;HANUNOO LETTER U;Lo;0;L;;;;;N;;;;;
+1723;HANUNOO LETTER KA;Lo;0;L;;;;;N;;;;;
+1724;HANUNOO LETTER GA;Lo;0;L;;;;;N;;;;;
+1725;HANUNOO LETTER NGA;Lo;0;L;;;;;N;;;;;
+1726;HANUNOO LETTER TA;Lo;0;L;;;;;N;;;;;
+1727;HANUNOO LETTER DA;Lo;0;L;;;;;N;;;;;
+1728;HANUNOO LETTER NA;Lo;0;L;;;;;N;;;;;
+1729;HANUNOO LETTER PA;Lo;0;L;;;;;N;;;;;
+172A;HANUNOO LETTER BA;Lo;0;L;;;;;N;;;;;
+172B;HANUNOO LETTER MA;Lo;0;L;;;;;N;;;;;
+172C;HANUNOO LETTER YA;Lo;0;L;;;;;N;;;;;
+172D;HANUNOO LETTER RA;Lo;0;L;;;;;N;;;;;
+172E;HANUNOO LETTER LA;Lo;0;L;;;;;N;;;;;
+172F;HANUNOO LETTER WA;Lo;0;L;;;;;N;;;;;
+1730;HANUNOO LETTER SA;Lo;0;L;;;;;N;;;;;
+1731;HANUNOO LETTER HA;Lo;0;L;;;;;N;;;;;
+1732;HANUNOO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1733;HANUNOO VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1734;HANUNOO SIGN PAMUDPOD;Mn;9;NSM;;;;;N;;;;;
+1735;PHILIPPINE SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+1736;PHILIPPINE DOUBLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+1740;BUHID LETTER A;Lo;0;L;;;;;N;;;;;
+1741;BUHID LETTER I;Lo;0;L;;;;;N;;;;;
+1742;BUHID LETTER U;Lo;0;L;;;;;N;;;;;
+1743;BUHID LETTER KA;Lo;0;L;;;;;N;;;;;
+1744;BUHID LETTER GA;Lo;0;L;;;;;N;;;;;
+1745;BUHID LETTER NGA;Lo;0;L;;;;;N;;;;;
+1746;BUHID LETTER TA;Lo;0;L;;;;;N;;;;;
+1747;BUHID LETTER DA;Lo;0;L;;;;;N;;;;;
+1748;BUHID LETTER NA;Lo;0;L;;;;;N;;;;;
+1749;BUHID LETTER PA;Lo;0;L;;;;;N;;;;;
+174A;BUHID LETTER BA;Lo;0;L;;;;;N;;;;;
+174B;BUHID LETTER MA;Lo;0;L;;;;;N;;;;;
+174C;BUHID LETTER YA;Lo;0;L;;;;;N;;;;;
+174D;BUHID LETTER RA;Lo;0;L;;;;;N;;;;;
+174E;BUHID LETTER LA;Lo;0;L;;;;;N;;;;;
+174F;BUHID LETTER WA;Lo;0;L;;;;;N;;;;;
+1750;BUHID LETTER SA;Lo;0;L;;;;;N;;;;;
+1751;BUHID LETTER HA;Lo;0;L;;;;;N;;;;;
+1752;BUHID VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1753;BUHID VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1760;TAGBANWA LETTER A;Lo;0;L;;;;;N;;;;;
+1761;TAGBANWA LETTER I;Lo;0;L;;;;;N;;;;;
+1762;TAGBANWA LETTER U;Lo;0;L;;;;;N;;;;;
+1763;TAGBANWA LETTER KA;Lo;0;L;;;;;N;;;;;
+1764;TAGBANWA LETTER GA;Lo;0;L;;;;;N;;;;;
+1765;TAGBANWA LETTER NGA;Lo;0;L;;;;;N;;;;;
+1766;TAGBANWA LETTER TA;Lo;0;L;;;;;N;;;;;
+1767;TAGBANWA LETTER DA;Lo;0;L;;;;;N;;;;;
+1768;TAGBANWA LETTER NA;Lo;0;L;;;;;N;;;;;
+1769;TAGBANWA LETTER PA;Lo;0;L;;;;;N;;;;;
+176A;TAGBANWA LETTER BA;Lo;0;L;;;;;N;;;;;
+176B;TAGBANWA LETTER MA;Lo;0;L;;;;;N;;;;;
+176C;TAGBANWA LETTER YA;Lo;0;L;;;;;N;;;;;
+176E;TAGBANWA LETTER LA;Lo;0;L;;;;;N;;;;;
+176F;TAGBANWA LETTER WA;Lo;0;L;;;;;N;;;;;
+1770;TAGBANWA LETTER SA;Lo;0;L;;;;;N;;;;;
+1772;TAGBANWA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1773;TAGBANWA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;;
+1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;;
+1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;;
+1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;;
+1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;;
+1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;;
+1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;;
+1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;;
+1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;;
+1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;;
+178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;;
+178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;;
+178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;;
+178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;;
+178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;;
+178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;;
+1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;;
+1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;;
+1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;;
+1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;;
+1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;;
+1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;;
+1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;;
+1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;;
+1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;;
+1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;;
+179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;;
+179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;;
+179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;;
+179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;;
+179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;;
+179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;;
+17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;;
+17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;;
+17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;;
+17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;*;;;
+17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;*;;;
+17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;;
+17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;;
+17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;;
+17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;;
+17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;;
+17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;;
+17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;;
+17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;;
+17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;;
+17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;;
+17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;;
+17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;;
+17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;;
+17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;;
+17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;;
+17B4;KHMER VOWEL INHERENT AQ;Cf;0;L;;;;;N;;*;;;
+17B5;KHMER VOWEL INHERENT AA;Cf;0;L;;;;;N;;*;;;
+17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
+17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
+17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;;
+17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;;
+17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;;
+17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;;
+17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;;
+17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;;
+17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;;
+17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;;
+17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;;
+17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;;
+17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;;
+17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;;
+17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;;
+17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;;
+17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;;
+17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;;
+17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;;
+17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;*;;;
+17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;;
+17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;;
+17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;;
+17D7;KHMER SIGN LEK TOO;Lm;0;L;;;;;N;;;;;
+17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;*;;;
+17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;;
+17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;;
+17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;;
+17DC;KHMER SIGN AVAKRAHASANYA;Lo;0;L;;;;;N;;;;;
+17DD;KHMER SIGN ATTHACAN;Mn;230;NSM;;;;;N;;;;;
+17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+17F0;KHMER SYMBOL LEK ATTAK SON;No;0;ON;;;;0;N;;;;;
+17F1;KHMER SYMBOL LEK ATTAK MUOY;No;0;ON;;;;1;N;;;;;
+17F2;KHMER SYMBOL LEK ATTAK PII;No;0;ON;;;;2;N;;;;;
+17F3;KHMER SYMBOL LEK ATTAK BEI;No;0;ON;;;;3;N;;;;;
+17F4;KHMER SYMBOL LEK ATTAK BUON;No;0;ON;;;;4;N;;;;;
+17F5;KHMER SYMBOL LEK ATTAK PRAM;No;0;ON;;;;5;N;;;;;
+17F6;KHMER SYMBOL LEK ATTAK PRAM-MUOY;No;0;ON;;;;6;N;;;;;
+17F7;KHMER SYMBOL LEK ATTAK PRAM-PII;No;0;ON;;;;7;N;;;;;
+17F8;KHMER SYMBOL LEK ATTAK PRAM-BEI;No;0;ON;;;;8;N;;;;;
+17F9;KHMER SYMBOL LEK ATTAK PRAM-BUON;No;0;ON;;;;9;N;;;;;
+1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;;
+1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;;
+1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;;
+1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;;
+1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;;
+1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;;
+1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
+1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;;
+1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;;
+1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;;
+180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;;
+180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Mn;0;NSM;;;;;N;;;;;
+180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Mn;0;NSM;;;;;N;;;;;
+180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Mn;0;NSM;;;;;N;;;;;
+180E;MONGOLIAN VOWEL SEPARATOR;Zs;0;WS;;;;;N;;;;;
+1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;;
+1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;;
+1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;;
+1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;;
+1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;;
+1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;;
+1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;;
+1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;;
+1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;;
+1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;;
+182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;;
+182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;;
+182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;;
+182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;;
+182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;;
+182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;;
+1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;;
+1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;;
+1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;;
+1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;;
+1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;;
+1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;;
+1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;;
+1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;;
+183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;;
+183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;;
+183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;;
+1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;;
+1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;;
+1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;;
+1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;;
+1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;;
+1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;;
+1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;;
+1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;;
+1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;;
+1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;;
+184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;;
+184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;;
+184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;;
+184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;;
+184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;;
+184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;;
+1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;;
+1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;;
+1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;;
+1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;;
+1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;;
+1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;;
+1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;;
+1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;;
+1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;;
+1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;;
+185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;;
+185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;;
+185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;;
+185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;;
+185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;;
+185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;;
+1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;;
+1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;;
+1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;;
+1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;;
+1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;;
+1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;;
+1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;;
+1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;;
+1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;;
+1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;;
+186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;;
+186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;;
+186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;;
+186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;;
+186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;;
+186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;;
+1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;;
+1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;;
+1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;;
+1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;;
+1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;;
+1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;;
+1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;;
+1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;;
+1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;;
+1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;;
+1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;;
+1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;;
+1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;;
+1885;MONGOLIAN LETTER ALI GALI BALUDA;Lo;0;L;;;;;N;;;;;
+1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Lo;0;L;;;;;N;;;;;
+1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;;
+1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;;
+1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;;
+188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;;
+188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;;
+188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;;
+188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;;
+188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;;
+188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;;
+1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;;
+1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;;
+1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;;
+1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;;
+1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;;
+1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;;
+1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;;
+1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;;
+1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;;
+189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;;
+189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;;
+189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;;
+189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;;
+189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;;
+18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;;
+18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;;
+18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;;
+18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;;
+18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;;
+18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;;
+18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;;
+18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;;
+18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;;
+1900;LIMBU VOWEL-CARRIER LETTER;Lo;0;L;;;;;N;;;;;
+1901;LIMBU LETTER KA;Lo;0;L;;;;;N;;;;;
+1902;LIMBU LETTER KHA;Lo;0;L;;;;;N;;;;;
+1903;LIMBU LETTER GA;Lo;0;L;;;;;N;;;;;
+1904;LIMBU LETTER GHA;Lo;0;L;;;;;N;;;;;
+1905;LIMBU LETTER NGA;Lo;0;L;;;;;N;;;;;
+1906;LIMBU LETTER CA;Lo;0;L;;;;;N;;;;;
+1907;LIMBU LETTER CHA;Lo;0;L;;;;;N;;;;;
+1908;LIMBU LETTER JA;Lo;0;L;;;;;N;;;;;
+1909;LIMBU LETTER JHA;Lo;0;L;;;;;N;;;;;
+190A;LIMBU LETTER YAN;Lo;0;L;;;;;N;;;;;
+190B;LIMBU LETTER TA;Lo;0;L;;;;;N;;;;;
+190C;LIMBU LETTER THA;Lo;0;L;;;;;N;;;;;
+190D;LIMBU LETTER DA;Lo;0;L;;;;;N;;;;;
+190E;LIMBU LETTER DHA;Lo;0;L;;;;;N;;;;;
+190F;LIMBU LETTER NA;Lo;0;L;;;;;N;;;;;
+1910;LIMBU LETTER PA;Lo;0;L;;;;;N;;;;;
+1911;LIMBU LETTER PHA;Lo;0;L;;;;;N;;;;;
+1912;LIMBU LETTER BA;Lo;0;L;;;;;N;;;;;
+1913;LIMBU LETTER BHA;Lo;0;L;;;;;N;;;;;
+1914;LIMBU LETTER MA;Lo;0;L;;;;;N;;;;;
+1915;LIMBU LETTER YA;Lo;0;L;;;;;N;;;;;
+1916;LIMBU LETTER RA;Lo;0;L;;;;;N;;;;;
+1917;LIMBU LETTER LA;Lo;0;L;;;;;N;;;;;
+1918;LIMBU LETTER WA;Lo;0;L;;;;;N;;;;;
+1919;LIMBU LETTER SHA;Lo;0;L;;;;;N;;;;;
+191A;LIMBU LETTER SSA;Lo;0;L;;;;;N;;;;;
+191B;LIMBU LETTER SA;Lo;0;L;;;;;N;;;;;
+191C;LIMBU LETTER HA;Lo;0;L;;;;;N;;;;;
+1920;LIMBU VOWEL SIGN A;Mn;0;NSM;;;;;N;;;;;
+1921;LIMBU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+1922;LIMBU VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1923;LIMBU VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+1924;LIMBU VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+1925;LIMBU VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+1926;LIMBU VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+1927;LIMBU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+1928;LIMBU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+1929;LIMBU SUBJOINED LETTER YA;Mc;0;NSM;;;;;N;;;;;
+192A;LIMBU SUBJOINED LETTER RA;Mc;0;NSM;;;;;N;;;;;
+192B;LIMBU SUBJOINED LETTER WA;Mc;0;NSM;;;;;N;;;;;
+1930;LIMBU SMALL LETTER KA;Mc;0;L;;;;;N;;;;;
+1931;LIMBU SMALL LETTER NGA;Mc;0;L;;;;;N;;;;;
+1932;LIMBU SMALL LETTER ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+1933;LIMBU SMALL LETTER TA;Mc;0;L;;;;;N;;;;;
+1934;LIMBU SMALL LETTER NA;Mc;0;L;;;;;N;;;;;
+1935;LIMBU SMALL LETTER PA;Mc;0;L;;;;;N;;;;;
+1936;LIMBU SMALL LETTER MA;Mc;0;L;;;;;N;;;;;
+1937;LIMBU SMALL LETTER RA;Mc;0;L;;;;;N;;;;;
+1938;LIMBU SMALL LETTER LA;Mc;0;L;;;;;N;;;;;
+1939;LIMBU SIGN MUKPHRENG;Mn;222;NSM;;;;;N;;;;;
+193A;LIMBU SIGN KEMPHRENG;Mn;230;NSM;;;;;N;;;;;
+193B;LIMBU SIGN SA-I;Mn;220;NSM;;;;;N;;;;;
+1940;LIMBU SIGN LOO;So;0;ON;;;;;N;;;;;
+1944;LIMBU EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+1945;LIMBU QUESTION MARK;Po;0;ON;;;;;N;;;;;
+1946;LIMBU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1947;LIMBU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1948;LIMBU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1949;LIMBU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+194A;LIMBU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+194B;LIMBU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+194C;LIMBU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+194D;LIMBU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+194E;LIMBU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+194F;LIMBU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1950;TAI LE LETTER KA;Lo;0;L;;;;;N;;;;;
+1951;TAI LE LETTER XA;Lo;0;L;;;;;N;;;;;
+1952;TAI LE LETTER NGA;Lo;0;L;;;;;N;;;;;
+1953;TAI LE LETTER TSA;Lo;0;L;;;;;N;;;;;
+1954;TAI LE LETTER SA;Lo;0;L;;;;;N;;;;;
+1955;TAI LE LETTER YA;Lo;0;L;;;;;N;;;;;
+1956;TAI LE LETTER TA;Lo;0;L;;;;;N;;;;;
+1957;TAI LE LETTER THA;Lo;0;L;;;;;N;;;;;
+1958;TAI LE LETTER LA;Lo;0;L;;;;;N;;;;;
+1959;TAI LE LETTER PA;Lo;0;L;;;;;N;;;;;
+195A;TAI LE LETTER PHA;Lo;0;L;;;;;N;;;;;
+195B;TAI LE LETTER MA;Lo;0;L;;;;;N;;;;;
+195C;TAI LE LETTER FA;Lo;0;L;;;;;N;;;;;
+195D;TAI LE LETTER VA;Lo;0;L;;;;;N;;;;;
+195E;TAI LE LETTER HA;Lo;0;L;;;;;N;;;;;
+195F;TAI LE LETTER QA;Lo;0;L;;;;;N;;;;;
+1960;TAI LE LETTER KHA;Lo;0;L;;;;;N;;;;;
+1961;TAI LE LETTER TSHA;Lo;0;L;;;;;N;;;;;
+1962;TAI LE LETTER NA;Lo;0;L;;;;;N;;;;;
+1963;TAI LE LETTER A;Lo;0;L;;;;;N;;;;;
+1964;TAI LE LETTER I;Lo;0;L;;;;;N;;;;;
+1965;TAI LE LETTER EE;Lo;0;L;;;;;N;;;;;
+1966;TAI LE LETTER EH;Lo;0;L;;;;;N;;;;;
+1967;TAI LE LETTER U;Lo;0;L;;;;;N;;;;;
+1968;TAI LE LETTER OO;Lo;0;L;;;;;N;;;;;
+1969;TAI LE LETTER O;Lo;0;L;;;;;N;;;;;
+196A;TAI LE LETTER UE;Lo;0;L;;;;;N;;;;;
+196B;TAI LE LETTER E;Lo;0;L;;;;;N;;;;;
+196C;TAI LE LETTER AUE;Lo;0;L;;;;;N;;;;;
+196D;TAI LE LETTER AI;Lo;0;L;;;;;N;;;;;
+1970;TAI LE LETTER TONE-2;Lo;0;L;;;;;N;;;;;
+1971;TAI LE LETTER TONE-3;Lo;0;L;;;;;N;;;;;
+1972;TAI LE LETTER TONE-4;Lo;0;L;;;;;N;;;;;
+1973;TAI LE LETTER TONE-5;Lo;0;L;;;;;N;;;;;
+1974;TAI LE LETTER TONE-6;Lo;0;L;;;;;N;;;;;
+1980;NEW TAI LUE LETTER HIGH QA;Lo;0;L;;;;;N;;;;;
+1981;NEW TAI LUE LETTER LOW QA;Lo;0;L;;;;;N;;;;;
+1982;NEW TAI LUE LETTER HIGH KA;Lo;0;L;;;;;N;;;;;
+1983;NEW TAI LUE LETTER HIGH XA;Lo;0;L;;;;;N;;;;;
+1984;NEW TAI LUE LETTER HIGH NGA;Lo;0;L;;;;;N;;;;;
+1985;NEW TAI LUE LETTER LOW KA;Lo;0;L;;;;;N;;;;;
+1986;NEW TAI LUE LETTER LOW XA;Lo;0;L;;;;;N;;;;;
+1987;NEW TAI LUE LETTER LOW NGA;Lo;0;L;;;;;N;;;;;
+1988;NEW TAI LUE LETTER HIGH TSA;Lo;0;L;;;;;N;;;;;
+1989;NEW TAI LUE LETTER HIGH SA;Lo;0;L;;;;;N;;;;;
+198A;NEW TAI LUE LETTER HIGH YA;Lo;0;L;;;;;N;;;;;
+198B;NEW TAI LUE LETTER LOW TSA;Lo;0;L;;;;;N;;;;;
+198C;NEW TAI LUE LETTER LOW SA;Lo;0;L;;;;;N;;;;;
+198D;NEW TAI LUE LETTER LOW YA;Lo;0;L;;;;;N;;;;;
+198E;NEW TAI LUE LETTER HIGH TA;Lo;0;L;;;;;N;;;;;
+198F;NEW TAI LUE LETTER HIGH THA;Lo;0;L;;;;;N;;;;;
+1990;NEW TAI LUE LETTER HIGH NA;Lo;0;L;;;;;N;;;;;
+1991;NEW TAI LUE LETTER LOW TA;Lo;0;L;;;;;N;;;;;
+1992;NEW TAI LUE LETTER LOW THA;Lo;0;L;;;;;N;;;;;
+1993;NEW TAI LUE LETTER LOW NA;Lo;0;L;;;;;N;;;;;
+1994;NEW TAI LUE LETTER HIGH PA;Lo;0;L;;;;;N;;;;;
+1995;NEW TAI LUE LETTER HIGH PHA;Lo;0;L;;;;;N;;;;;
+1996;NEW TAI LUE LETTER HIGH MA;Lo;0;L;;;;;N;;;;;
+1997;NEW TAI LUE LETTER LOW PA;Lo;0;L;;;;;N;;;;;
+1998;NEW TAI LUE LETTER LOW PHA;Lo;0;L;;;;;N;;;;;
+1999;NEW TAI LUE LETTER LOW MA;Lo;0;L;;;;;N;;;;;
+199A;NEW TAI LUE LETTER HIGH FA;Lo;0;L;;;;;N;;;;;
+199B;NEW TAI LUE LETTER HIGH VA;Lo;0;L;;;;;N;;;;;
+199C;NEW TAI LUE LETTER HIGH LA;Lo;0;L;;;;;N;;;;;
+199D;NEW TAI LUE LETTER LOW FA;Lo;0;L;;;;;N;;;;;
+199E;NEW TAI LUE LETTER LOW VA;Lo;0;L;;;;;N;;;;;
+199F;NEW TAI LUE LETTER LOW LA;Lo;0;L;;;;;N;;;;;
+19A0;NEW TAI LUE LETTER HIGH HA;Lo;0;L;;;;;N;;;;;
+19A1;NEW TAI LUE LETTER HIGH DA;Lo;0;L;;;;;N;;;;;
+19A2;NEW TAI LUE LETTER HIGH BA;Lo;0;L;;;;;N;;;;;
+19A3;NEW TAI LUE LETTER LOW HA;Lo;0;L;;;;;N;;;;;
+19A4;NEW TAI LUE LETTER LOW DA;Lo;0;L;;;;;N;;;;;
+19A5;NEW TAI LUE LETTER LOW BA;Lo;0;L;;;;;N;;;;;
+19A6;NEW TAI LUE LETTER HIGH KVA;Lo;0;L;;;;;N;;;;;
+19A7;NEW TAI LUE LETTER HIGH XVA;Lo;0;L;;;;;N;;;;;
+19A8;NEW TAI LUE LETTER LOW KVA;Lo;0;L;;;;;N;;;;;
+19A9;NEW TAI LUE LETTER LOW XVA;Lo;0;L;;;;;N;;;;;
+19B0;NEW TAI LUE VOWEL SIGN VOWEL SHORTENER;Mc;0;L;;;;;N;;;;;
+19B1;NEW TAI LUE VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+19B2;NEW TAI LUE VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+19B3;NEW TAI LUE VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+19B4;NEW TAI LUE VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+19B5;NEW TAI LUE VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+19B6;NEW TAI LUE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+19B7;NEW TAI LUE VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+19B8;NEW TAI LUE VOWEL SIGN OA;Mc;0;L;;;;;N;;;;;
+19B9;NEW TAI LUE VOWEL SIGN UE;Mc;0;L;;;;;N;;;;;
+19BA;NEW TAI LUE VOWEL SIGN AY;Mc;0;L;;;;;N;;;;;
+19BB;NEW TAI LUE VOWEL SIGN AAY;Mc;0;L;;;;;N;;;;;
+19BC;NEW TAI LUE VOWEL SIGN UY;Mc;0;L;;;;;N;;;;;
+19BD;NEW TAI LUE VOWEL SIGN OY;Mc;0;L;;;;;N;;;;;
+19BE;NEW TAI LUE VOWEL SIGN OAY;Mc;0;L;;;;;N;;;;;
+19BF;NEW TAI LUE VOWEL SIGN UEY;Mc;0;L;;;;;N;;;;;
+19C0;NEW TAI LUE VOWEL SIGN IY;Mc;0;L;;;;;N;;;;;
+19C1;NEW TAI LUE LETTER FINAL V;Lo;0;L;;;;;N;;;;;
+19C2;NEW TAI LUE LETTER FINAL NG;Lo;0;L;;;;;N;;;;;
+19C3;NEW TAI LUE LETTER FINAL N;Lo;0;L;;;;;N;;;;;
+19C4;NEW TAI LUE LETTER FINAL M;Lo;0;L;;;;;N;;;;;
+19C5;NEW TAI LUE LETTER FINAL K;Lo;0;L;;;;;N;;;;;
+19C6;NEW TAI LUE LETTER FINAL D;Lo;0;L;;;;;N;;;;;
+19C7;NEW TAI LUE LETTER FINAL B;Lo;0;L;;;;;N;;;;;
+19C8;NEW TAI LUE TONE MARK-1;Mc;0;L;;;;;N;;;;;
+19C9;NEW TAI LUE TONE MARK-2;Mc;0;L;;;;;N;;;;;
+19D0;NEW TAI LUE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+19D1;NEW TAI LUE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+19D2;NEW TAI LUE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+19D3;NEW TAI LUE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+19D4;NEW TAI LUE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+19D5;NEW TAI LUE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+19D6;NEW TAI LUE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+19D7;NEW TAI LUE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+19D8;NEW TAI LUE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+19D9;NEW TAI LUE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+19DE;NEW TAI LUE SIGN LAE;Po;0;ON;;;;;N;;;;;
+19DF;NEW TAI LUE SIGN LAEV;Po;0;ON;;;;;N;;;;;
+19E0;KHMER SYMBOL PATHAMASAT;So;0;ON;;;;;N;;;;;
+19E1;KHMER SYMBOL MUOY KOET;So;0;ON;;;;;N;;;;;
+19E2;KHMER SYMBOL PII KOET;So;0;ON;;;;;N;;;;;
+19E3;KHMER SYMBOL BEI KOET;So;0;ON;;;;;N;;;;;
+19E4;KHMER SYMBOL BUON KOET;So;0;ON;;;;;N;;;;;
+19E5;KHMER SYMBOL PRAM KOET;So;0;ON;;;;;N;;;;;
+19E6;KHMER SYMBOL PRAM-MUOY KOET;So;0;ON;;;;;N;;;;;
+19E7;KHMER SYMBOL PRAM-PII KOET;So;0;ON;;;;;N;;;;;
+19E8;KHMER SYMBOL PRAM-BEI KOET;So;0;ON;;;;;N;;;;;
+19E9;KHMER SYMBOL PRAM-BUON KOET;So;0;ON;;;;;N;;;;;
+19EA;KHMER SYMBOL DAP KOET;So;0;ON;;;;;N;;;;;
+19EB;KHMER SYMBOL DAP-MUOY KOET;So;0;ON;;;;;N;;;;;
+19EC;KHMER SYMBOL DAP-PII KOET;So;0;ON;;;;;N;;;;;
+19ED;KHMER SYMBOL DAP-BEI KOET;So;0;ON;;;;;N;;;;;
+19EE;KHMER SYMBOL DAP-BUON KOET;So;0;ON;;;;;N;;;;;
+19EF;KHMER SYMBOL DAP-PRAM KOET;So;0;ON;;;;;N;;;;;
+19F0;KHMER SYMBOL TUTEYASAT;So;0;ON;;;;;N;;;;;
+19F1;KHMER SYMBOL MUOY ROC;So;0;ON;;;;;N;;;;;
+19F2;KHMER SYMBOL PII ROC;So;0;ON;;;;;N;;;;;
+19F3;KHMER SYMBOL BEI ROC;So;0;ON;;;;;N;;;;;
+19F4;KHMER SYMBOL BUON ROC;So;0;ON;;;;;N;;;;;
+19F5;KHMER SYMBOL PRAM ROC;So;0;ON;;;;;N;;;;;
+19F6;KHMER SYMBOL PRAM-MUOY ROC;So;0;ON;;;;;N;;;;;
+19F7;KHMER SYMBOL PRAM-PII ROC;So;0;ON;;;;;N;;;;;
+19F8;KHMER SYMBOL PRAM-BEI ROC;So;0;ON;;;;;N;;;;;
+19F9;KHMER SYMBOL PRAM-BUON ROC;So;0;ON;;;;;N;;;;;
+19FA;KHMER SYMBOL DAP ROC;So;0;ON;;;;;N;;;;;
+19FB;KHMER SYMBOL DAP-MUOY ROC;So;0;ON;;;;;N;;;;;
+19FC;KHMER SYMBOL DAP-PII ROC;So;0;ON;;;;;N;;;;;
+19FD;KHMER SYMBOL DAP-BEI ROC;So;0;ON;;;;;N;;;;;
+19FE;KHMER SYMBOL DAP-BUON ROC;So;0;ON;;;;;N;;;;;
+19FF;KHMER SYMBOL DAP-PRAM ROC;So;0;ON;;;;;N;;;;;
+1A00;BUGINESE LETTER KA;Lo;0;L;;;;;N;;;;;
+1A01;BUGINESE LETTER GA;Lo;0;L;;;;;N;;;;;
+1A02;BUGINESE LETTER NGA;Lo;0;L;;;;;N;;;;;
+1A03;BUGINESE LETTER NGKA;Lo;0;L;;;;;N;;;;;
+1A04;BUGINESE LETTER PA;Lo;0;L;;;;;N;;;;;
+1A05;BUGINESE LETTER BA;Lo;0;L;;;;;N;;;;;
+1A06;BUGINESE LETTER MA;Lo;0;L;;;;;N;;;;;
+1A07;BUGINESE LETTER MPA;Lo;0;L;;;;;N;;;;;
+1A08;BUGINESE LETTER TA;Lo;0;L;;;;;N;;;;;
+1A09;BUGINESE LETTER DA;Lo;0;L;;;;;N;;;;;
+1A0A;BUGINESE LETTER NA;Lo;0;L;;;;;N;;;;;
+1A0B;BUGINESE LETTER NRA;Lo;0;L;;;;;N;;;;;
+1A0C;BUGINESE LETTER CA;Lo;0;L;;;;;N;;;;;
+1A0D;BUGINESE LETTER JA;Lo;0;L;;;;;N;;;;;
+1A0E;BUGINESE LETTER NYA;Lo;0;L;;;;;N;;;;;
+1A0F;BUGINESE LETTER NYCA;Lo;0;L;;;;;N;;;;;
+1A10;BUGINESE LETTER YA;Lo;0;L;;;;;N;;;;;
+1A11;BUGINESE LETTER RA;Lo;0;L;;;;;N;;;;;
+1A12;BUGINESE LETTER LA;Lo;0;L;;;;;N;;;;;
+1A13;BUGINESE LETTER VA;Lo;0;L;;;;;N;;;;;
+1A14;BUGINESE LETTER SA;Lo;0;L;;;;;N;;;;;
+1A15;BUGINESE LETTER A;Lo;0;L;;;;;N;;;;;
+1A16;BUGINESE LETTER HA;Lo;0;L;;;;;N;;;;;
+1A17;BUGINESE VOWEL SIGN I;Mn;230;NSM;;;;;N;;;;;
+1A18;BUGINESE VOWEL SIGN U;Mn;220;NSM;;;;;N;;;;;
+1A19;BUGINESE VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1A1A;BUGINESE VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+1A1B;BUGINESE VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+1A1E;BUGINESE PALLAWA;Po;0;L;;;;;N;;;;;
+1A1F;BUGINESE END OF SECTION;Po;0;L;;;;;N;;;;;
+1B00;BALINESE SIGN ULU RICEM;Mn;0;NSM;;;;;N;;ardhacandra;;;
+1B01;BALINESE SIGN ULU CANDRA;Mn;0;NSM;;;;;N;;candrabindu;;;
+1B02;BALINESE SIGN CECEK;Mn;0;NSM;;;;;N;;anusvara;;;
+1B03;BALINESE SIGN SURANG;Mn;0;NSM;;;;;N;;repha;;;
+1B04;BALINESE SIGN BISAH;Mc;0;L;;;;;N;;visarga;;;
+1B05;BALINESE LETTER AKARA;Lo;0;L;;;;;N;;a;;;
+1B06;BALINESE LETTER AKARA TEDUNG;Lo;0;L;1B05 1B35;;;;N;;aa;;;
+1B07;BALINESE LETTER IKARA;Lo;0;L;;;;;N;;i;;;
+1B08;BALINESE LETTER IKARA TEDUNG;Lo;0;L;1B07 1B35;;;;N;;ii;;;
+1B09;BALINESE LETTER UKARA;Lo;0;L;;;;;N;;u;;;
+1B0A;BALINESE LETTER UKARA TEDUNG;Lo;0;L;1B09 1B35;;;;N;;uu;;;
+1B0B;BALINESE LETTER RA REPA;Lo;0;L;;;;;N;;vocalic r;;;
+1B0C;BALINESE LETTER RA REPA TEDUNG;Lo;0;L;1B0B 1B35;;;;N;;vocalic rr;;;
+1B0D;BALINESE LETTER LA LENGA;Lo;0;L;;;;;N;;vocalic l;;;
+1B0E;BALINESE LETTER LA LENGA TEDUNG;Lo;0;L;1B0D 1B35;;;;N;;vocalic ll;;;
+1B0F;BALINESE LETTER EKARA;Lo;0;L;;;;;N;;e;;;
+1B10;BALINESE LETTER AIKARA;Lo;0;L;;;;;N;;ai;;;
+1B11;BALINESE LETTER OKARA;Lo;0;L;;;;;N;;o;;;
+1B12;BALINESE LETTER OKARA TEDUNG;Lo;0;L;1B11 1B35;;;;N;;au;;;
+1B13;BALINESE LETTER KA;Lo;0;L;;;;;N;;;;;
+1B14;BALINESE LETTER KA MAHAPRANA;Lo;0;L;;;;;N;;kha;;;
+1B15;BALINESE LETTER GA;Lo;0;L;;;;;N;;;;;
+1B16;BALINESE LETTER GA GORA;Lo;0;L;;;;;N;;gha;;;
+1B17;BALINESE LETTER NGA;Lo;0;L;;;;;N;;;;;
+1B18;BALINESE LETTER CA;Lo;0;L;;;;;N;;;;;
+1B19;BALINESE LETTER CA LACA;Lo;0;L;;;;;N;;cha;;;
+1B1A;BALINESE LETTER JA;Lo;0;L;;;;;N;;;;;
+1B1B;BALINESE LETTER JA JERA;Lo;0;L;;;;;N;;jha;;;
+1B1C;BALINESE LETTER NYA;Lo;0;L;;;;;N;;;;;
+1B1D;BALINESE LETTER TA LATIK;Lo;0;L;;;;;N;;tta;;;
+1B1E;BALINESE LETTER TA MURDA MAHAPRANA;Lo;0;L;;;;;N;;ttha;;;
+1B1F;BALINESE LETTER DA MURDA ALPAPRANA;Lo;0;L;;;;;N;;dda;;;
+1B20;BALINESE LETTER DA MURDA MAHAPRANA;Lo;0;L;;;;;N;;ddha;;;
+1B21;BALINESE LETTER NA RAMBAT;Lo;0;L;;;;;N;;nna;;;
+1B22;BALINESE LETTER TA;Lo;0;L;;;;;N;;;;;
+1B23;BALINESE LETTER TA TAWA;Lo;0;L;;;;;N;;tha;;;
+1B24;BALINESE LETTER DA;Lo;0;L;;;;;N;;;;;
+1B25;BALINESE LETTER DA MADU;Lo;0;L;;;;;N;;dha;;;
+1B26;BALINESE LETTER NA;Lo;0;L;;;;;N;;;;;
+1B27;BALINESE LETTER PA;Lo;0;L;;;;;N;;;;;
+1B28;BALINESE LETTER PA KAPAL;Lo;0;L;;;;;N;;pha;;;
+1B29;BALINESE LETTER BA;Lo;0;L;;;;;N;;;;;
+1B2A;BALINESE LETTER BA KEMBANG;Lo;0;L;;;;;N;;bha;;;
+1B2B;BALINESE LETTER MA;Lo;0;L;;;;;N;;;;;
+1B2C;BALINESE LETTER YA;Lo;0;L;;;;;N;;;;;
+1B2D;BALINESE LETTER RA;Lo;0;L;;;;;N;;;;;
+1B2E;BALINESE LETTER LA;Lo;0;L;;;;;N;;;;;
+1B2F;BALINESE LETTER WA;Lo;0;L;;;;;N;;;;;
+1B30;BALINESE LETTER SA SAGA;Lo;0;L;;;;;N;;sha;;;
+1B31;BALINESE LETTER SA SAPA;Lo;0;L;;;;;N;;ssa;;;
+1B32;BALINESE LETTER SA;Lo;0;L;;;;;N;;;;;
+1B33;BALINESE LETTER HA;Lo;0;L;;;;;N;;;;;
+1B34;BALINESE SIGN REREKAN;Mn;7;NSM;;;;;N;;nukta;;;
+1B35;BALINESE VOWEL SIGN TEDUNG;Mc;0;L;;;;;N;;aa;;;
+1B36;BALINESE VOWEL SIGN ULU;Mn;0;NSM;;;;;N;;i;;;
+1B37;BALINESE VOWEL SIGN ULU SARI;Mn;0;NSM;;;;;N;;ii;;;
+1B38;BALINESE VOWEL SIGN SUKU;Mn;0;NSM;;;;;N;;u;;;
+1B39;BALINESE VOWEL SIGN SUKU ILUT;Mn;0;NSM;;;;;N;;uu;;;
+1B3A;BALINESE VOWEL SIGN RA REPA;Mn;0;NSM;;;;;N;;vocalic r;;;
+1B3B;BALINESE VOWEL SIGN RA REPA TEDUNG;Mc;0;L;1B3A 1B35;;;;N;;vocalic rr;;;
+1B3C;BALINESE VOWEL SIGN LA LENGA;Mn;0;NSM;;;;;N;;vocalic l;;;
+1B3D;BALINESE VOWEL SIGN LA LENGA TEDUNG;Mc;0;L;1B3C 1B35;;;;N;;vocalic ll;;;
+1B3E;BALINESE VOWEL SIGN TALING;Mc;0;L;;;;;N;;e;;;
+1B3F;BALINESE VOWEL SIGN TALING REPA;Mc;0;L;;;;;N;;ai;;;
+1B40;BALINESE VOWEL SIGN TALING TEDUNG;Mc;0;L;1B3E 1B35;;;;N;;o;;;
+1B41;BALINESE VOWEL SIGN TALING REPA TEDUNG;Mc;0;L;1B3F 1B35;;;;N;;au;;;
+1B42;BALINESE VOWEL SIGN PEPET;Mn;0;NSM;;;;;N;;ae;;;
+1B43;BALINESE VOWEL SIGN PEPET TEDUNG;Mc;0;L;1B42 1B35;;;;N;;oe;;;
+1B44;BALINESE ADEG ADEG;Mc;9;L;;;;;N;;virama;;;
+1B45;BALINESE LETTER KAF SASAK;Lo;0;L;;;;;N;;;;;
+1B46;BALINESE LETTER KHOT SASAK;Lo;0;L;;;;;N;;;;;
+1B47;BALINESE LETTER TZIR SASAK;Lo;0;L;;;;;N;;;;;
+1B48;BALINESE LETTER EF SASAK;Lo;0;L;;;;;N;;;;;
+1B49;BALINESE LETTER VE SASAK;Lo;0;L;;;;;N;;;;;
+1B4A;BALINESE LETTER ZAL SASAK;Lo;0;L;;;;;N;;;;;
+1B4B;BALINESE LETTER ASYURA SASAK;Lo;0;L;;;;;N;;;;;
+1B50;BALINESE DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1B51;BALINESE DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1B52;BALINESE DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1B53;BALINESE DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1B54;BALINESE DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1B55;BALINESE DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1B56;BALINESE DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1B57;BALINESE DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1B58;BALINESE DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1B59;BALINESE DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1B5A;BALINESE PANTI;Po;0;L;;;;;N;;section;;;
+1B5B;BALINESE PAMADA;Po;0;L;;;;;N;;honorific section;;;
+1B5C;BALINESE WINDU;Po;0;L;;;;;N;;punctuation ring;;;
+1B5D;BALINESE CARIK PAMUNGKAH;Po;0;L;;;;;N;;colon;;;
+1B5E;BALINESE CARIK SIKI;Po;0;L;;;;;N;;danda;;;
+1B5F;BALINESE CARIK PAREREN;Po;0;L;;;;;N;;double danda;;;
+1B60;BALINESE PAMENENG;Po;0;L;;;;;N;;line-breaking hyphen;;;
+1B61;BALINESE MUSICAL SYMBOL DONG;So;0;L;;;;;N;;;;;
+1B62;BALINESE MUSICAL SYMBOL DENG;So;0;L;;;;;N;;;;;
+1B63;BALINESE MUSICAL SYMBOL DUNG;So;0;L;;;;;N;;;;;
+1B64;BALINESE MUSICAL SYMBOL DANG;So;0;L;;;;;N;;;;;
+1B65;BALINESE MUSICAL SYMBOL DANG SURANG;So;0;L;;;;;N;;;;;
+1B66;BALINESE MUSICAL SYMBOL DING;So;0;L;;;;;N;;;;;
+1B67;BALINESE MUSICAL SYMBOL DAENG;So;0;L;;;;;N;;;;;
+1B68;BALINESE MUSICAL SYMBOL DEUNG;So;0;L;;;;;N;;;;;
+1B69;BALINESE MUSICAL SYMBOL DAING;So;0;L;;;;;N;;;;;
+1B6A;BALINESE MUSICAL SYMBOL DANG GEDE;So;0;L;;;;;N;;;;;
+1B6B;BALINESE MUSICAL SYMBOL COMBINING TEGEH;Mn;230;NSM;;;;;N;;;;;
+1B6C;BALINESE MUSICAL SYMBOL COMBINING ENDEP;Mn;220;NSM;;;;;N;;;;;
+1B6D;BALINESE MUSICAL SYMBOL COMBINING KEMPUL;Mn;230;NSM;;;;;N;;;;;
+1B6E;BALINESE MUSICAL SYMBOL COMBINING KEMPLI;Mn;230;NSM;;;;;N;;;;;
+1B6F;BALINESE MUSICAL SYMBOL COMBINING JEGOGAN;Mn;230;NSM;;;;;N;;;;;
+1B70;BALINESE MUSICAL SYMBOL COMBINING KEMPUL WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;;
+1B71;BALINESE MUSICAL SYMBOL COMBINING KEMPLI WITH JEGOGAN;Mn;230;NSM;;;;;N;;;;;
+1B72;BALINESE MUSICAL SYMBOL COMBINING BENDE;Mn;230;NSM;;;;;N;;;;;
+1B73;BALINESE MUSICAL SYMBOL COMBINING GONG;Mn;230;NSM;;;;;N;;;;;
+1B74;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DUG;So;0;L;;;;;N;;;;;
+1B75;BALINESE MUSICAL SYMBOL RIGHT-HAND OPEN DAG;So;0;L;;;;;N;;;;;
+1B76;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TUK;So;0;L;;;;;N;;;;;
+1B77;BALINESE MUSICAL SYMBOL RIGHT-HAND CLOSED TAK;So;0;L;;;;;N;;;;;
+1B78;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PANG;So;0;L;;;;;N;;;;;
+1B79;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PUNG;So;0;L;;;;;N;;;;;
+1B7A;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLAK;So;0;L;;;;;N;;;;;
+1B7B;BALINESE MUSICAL SYMBOL LEFT-HAND CLOSED PLUK;So;0;L;;;;;N;;;;;
+1B7C;BALINESE MUSICAL SYMBOL LEFT-HAND OPEN PING;So;0;L;;;;;N;;;;;
+1D00;LATIN LETTER SMALL CAPITAL A;Ll;0;L;;;;;N;;;;;
+1D01;LATIN LETTER SMALL CAPITAL AE;Ll;0;L;;;;;N;;;;;
+1D02;LATIN SMALL LETTER TURNED AE;Ll;0;L;;;;;N;;;;;
+1D03;LATIN LETTER SMALL CAPITAL BARRED B;Ll;0;L;;;;;N;;;;;
+1D04;LATIN LETTER SMALL CAPITAL C;Ll;0;L;;;;;N;;;;;
+1D05;LATIN LETTER SMALL CAPITAL D;Ll;0;L;;;;;N;;;;;
+1D06;LATIN LETTER SMALL CAPITAL ETH;Ll;0;L;;;;;N;;;;;
+1D07;LATIN LETTER SMALL CAPITAL E;Ll;0;L;;;;;N;;;;;
+1D08;LATIN SMALL LETTER TURNED OPEN E;Ll;0;L;;;;;N;;;;;
+1D09;LATIN SMALL LETTER TURNED I;Ll;0;L;;;;;N;;;;;
+1D0A;LATIN LETTER SMALL CAPITAL J;Ll;0;L;;;;;N;;;;;
+1D0B;LATIN LETTER SMALL CAPITAL K;Ll;0;L;;;;;N;;;;;
+1D0C;LATIN LETTER SMALL CAPITAL L WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D0D;LATIN LETTER SMALL CAPITAL M;Ll;0;L;;;;;N;;;;;
+1D0E;LATIN LETTER SMALL CAPITAL REVERSED N;Ll;0;L;;;;;N;;;;;
+1D0F;LATIN LETTER SMALL CAPITAL O;Ll;0;L;;;;;N;;;;;
+1D10;LATIN LETTER SMALL CAPITAL OPEN O;Ll;0;L;;;;;N;;;;;
+1D11;LATIN SMALL LETTER SIDEWAYS O;Ll;0;L;;;;;N;;;;;
+1D12;LATIN SMALL LETTER SIDEWAYS OPEN O;Ll;0;L;;;;;N;;;;;
+1D13;LATIN SMALL LETTER SIDEWAYS O WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D14;LATIN SMALL LETTER TURNED OE;Ll;0;L;;;;;N;;;;;
+1D15;LATIN LETTER SMALL CAPITAL OU;Ll;0;L;;;;;N;;;;;
+1D16;LATIN SMALL LETTER TOP HALF O;Ll;0;L;;;;;N;;;;;
+1D17;LATIN SMALL LETTER BOTTOM HALF O;Ll;0;L;;;;;N;;;;;
+1D18;LATIN LETTER SMALL CAPITAL P;Ll;0;L;;;;;N;;;;;
+1D19;LATIN LETTER SMALL CAPITAL REVERSED R;Ll;0;L;;;;;N;;;;;
+1D1A;LATIN LETTER SMALL CAPITAL TURNED R;Ll;0;L;;;;;N;;;;;
+1D1B;LATIN LETTER SMALL CAPITAL T;Ll;0;L;;;;;N;;;;;
+1D1C;LATIN LETTER SMALL CAPITAL U;Ll;0;L;;;;;N;;;;;
+1D1D;LATIN SMALL LETTER SIDEWAYS U;Ll;0;L;;;;;N;;;;;
+1D1E;LATIN SMALL LETTER SIDEWAYS DIAERESIZED U;Ll;0;L;;;;;N;;;;;
+1D1F;LATIN SMALL LETTER SIDEWAYS TURNED M;Ll;0;L;;;;;N;;;;;
+1D20;LATIN LETTER SMALL CAPITAL V;Ll;0;L;;;;;N;;;;;
+1D21;LATIN LETTER SMALL CAPITAL W;Ll;0;L;;;;;N;;;;;
+1D22;LATIN LETTER SMALL CAPITAL Z;Ll;0;L;;;;;N;;;;;
+1D23;LATIN LETTER SMALL CAPITAL EZH;Ll;0;L;;;;;N;;;;;
+1D24;LATIN LETTER VOICED LARYNGEAL SPIRANT;Ll;0;L;;;;;N;;;;;
+1D25;LATIN LETTER AIN;Ll;0;L;;;;;N;;;;;
+1D26;GREEK LETTER SMALL CAPITAL GAMMA;Ll;0;L;;;;;N;;;;;
+1D27;GREEK LETTER SMALL CAPITAL LAMDA;Ll;0;L;;;;;N;;;;;
+1D28;GREEK LETTER SMALL CAPITAL PI;Ll;0;L;;;;;N;;;;;
+1D29;GREEK LETTER SMALL CAPITAL RHO;Ll;0;L;;;;;N;;;;;
+1D2A;GREEK LETTER SMALL CAPITAL PSI;Ll;0;L;;;;;N;;;;;
+1D2B;CYRILLIC LETTER SMALL CAPITAL EL;Ll;0;L;;;;;N;;;;;
+1D2C;MODIFIER LETTER CAPITAL A;Lm;0;L;<super> 0041;;;;N;;;;;
+1D2D;MODIFIER LETTER CAPITAL AE;Lm;0;L;<super> 00C6;;;;N;;;;;
+1D2E;MODIFIER LETTER CAPITAL B;Lm;0;L;<super> 0042;;;;N;;;;;
+1D2F;MODIFIER LETTER CAPITAL BARRED B;Lm;0;L;;;;;N;;;;;
+1D30;MODIFIER LETTER CAPITAL D;Lm;0;L;<super> 0044;;;;N;;;;;
+1D31;MODIFIER LETTER CAPITAL E;Lm;0;L;<super> 0045;;;;N;;;;;
+1D32;MODIFIER LETTER CAPITAL REVERSED E;Lm;0;L;<super> 018E;;;;N;;;;;
+1D33;MODIFIER LETTER CAPITAL G;Lm;0;L;<super> 0047;;;;N;;;;;
+1D34;MODIFIER LETTER CAPITAL H;Lm;0;L;<super> 0048;;;;N;;;;;
+1D35;MODIFIER LETTER CAPITAL I;Lm;0;L;<super> 0049;;;;N;;;;;
+1D36;MODIFIER LETTER CAPITAL J;Lm;0;L;<super> 004A;;;;N;;;;;
+1D37;MODIFIER LETTER CAPITAL K;Lm;0;L;<super> 004B;;;;N;;;;;
+1D38;MODIFIER LETTER CAPITAL L;Lm;0;L;<super> 004C;;;;N;;;;;
+1D39;MODIFIER LETTER CAPITAL M;Lm;0;L;<super> 004D;;;;N;;;;;
+1D3A;MODIFIER LETTER CAPITAL N;Lm;0;L;<super> 004E;;;;N;;;;;
+1D3B;MODIFIER LETTER CAPITAL REVERSED N;Lm;0;L;;;;;N;;;;;
+1D3C;MODIFIER LETTER CAPITAL O;Lm;0;L;<super> 004F;;;;N;;;;;
+1D3D;MODIFIER LETTER CAPITAL OU;Lm;0;L;<super> 0222;;;;N;;;;;
+1D3E;MODIFIER LETTER CAPITAL P;Lm;0;L;<super> 0050;;;;N;;;;;
+1D3F;MODIFIER LETTER CAPITAL R;Lm;0;L;<super> 0052;;;;N;;;;;
+1D40;MODIFIER LETTER CAPITAL T;Lm;0;L;<super> 0054;;;;N;;;;;
+1D41;MODIFIER LETTER CAPITAL U;Lm;0;L;<super> 0055;;;;N;;;;;
+1D42;MODIFIER LETTER CAPITAL W;Lm;0;L;<super> 0057;;;;N;;;;;
+1D43;MODIFIER LETTER SMALL A;Lm;0;L;<super> 0061;;;;N;;;;;
+1D44;MODIFIER LETTER SMALL TURNED A;Lm;0;L;<super> 0250;;;;N;;;;;
+1D45;MODIFIER LETTER SMALL ALPHA;Lm;0;L;<super> 0251;;;;N;;;;;
+1D46;MODIFIER LETTER SMALL TURNED AE;Lm;0;L;<super> 1D02;;;;N;;;;;
+1D47;MODIFIER LETTER SMALL B;Lm;0;L;<super> 0062;;;;N;;;;;
+1D48;MODIFIER LETTER SMALL D;Lm;0;L;<super> 0064;;;;N;;;;;
+1D49;MODIFIER LETTER SMALL E;Lm;0;L;<super> 0065;;;;N;;;;;
+1D4A;MODIFIER LETTER SMALL SCHWA;Lm;0;L;<super> 0259;;;;N;;;;;
+1D4B;MODIFIER LETTER SMALL OPEN E;Lm;0;L;<super> 025B;;;;N;;;;;
+1D4C;MODIFIER LETTER SMALL TURNED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;;
+1D4D;MODIFIER LETTER SMALL G;Lm;0;L;<super> 0067;;;;N;;;;;
+1D4E;MODIFIER LETTER SMALL TURNED I;Lm;0;L;;;;;N;;;;;
+1D4F;MODIFIER LETTER SMALL K;Lm;0;L;<super> 006B;;;;N;;;;;
+1D50;MODIFIER LETTER SMALL M;Lm;0;L;<super> 006D;;;;N;;;;;
+1D51;MODIFIER LETTER SMALL ENG;Lm;0;L;<super> 014B;;;;N;;;;;
+1D52;MODIFIER LETTER SMALL O;Lm;0;L;<super> 006F;;;;N;;;;;
+1D53;MODIFIER LETTER SMALL OPEN O;Lm;0;L;<super> 0254;;;;N;;;;;
+1D54;MODIFIER LETTER SMALL TOP HALF O;Lm;0;L;<super> 1D16;;;;N;;;;;
+1D55;MODIFIER LETTER SMALL BOTTOM HALF O;Lm;0;L;<super> 1D17;;;;N;;;;;
+1D56;MODIFIER LETTER SMALL P;Lm;0;L;<super> 0070;;;;N;;;;;
+1D57;MODIFIER LETTER SMALL T;Lm;0;L;<super> 0074;;;;N;;;;;
+1D58;MODIFIER LETTER SMALL U;Lm;0;L;<super> 0075;;;;N;;;;;
+1D59;MODIFIER LETTER SMALL SIDEWAYS U;Lm;0;L;<super> 1D1D;;;;N;;;;;
+1D5A;MODIFIER LETTER SMALL TURNED M;Lm;0;L;<super> 026F;;;;N;;;;;
+1D5B;MODIFIER LETTER SMALL V;Lm;0;L;<super> 0076;;;;N;;;;;
+1D5C;MODIFIER LETTER SMALL AIN;Lm;0;L;<super> 1D25;;;;N;;;;;
+1D5D;MODIFIER LETTER SMALL BETA;Lm;0;L;<super> 03B2;;;;N;;;;;
+1D5E;MODIFIER LETTER SMALL GREEK GAMMA;Lm;0;L;<super> 03B3;;;;N;;;;;
+1D5F;MODIFIER LETTER SMALL DELTA;Lm;0;L;<super> 03B4;;;;N;;;;;
+1D60;MODIFIER LETTER SMALL GREEK PHI;Lm;0;L;<super> 03C6;;;;N;;;;;
+1D61;MODIFIER LETTER SMALL CHI;Lm;0;L;<super> 03C7;;;;N;;;;;
+1D62;LATIN SUBSCRIPT SMALL LETTER I;Ll;0;L;<sub> 0069;;;;N;;;;;
+1D63;LATIN SUBSCRIPT SMALL LETTER R;Ll;0;L;<sub> 0072;;;;N;;;;;
+1D64;LATIN SUBSCRIPT SMALL LETTER U;Ll;0;L;<sub> 0075;;;;N;;;;;
+1D65;LATIN SUBSCRIPT SMALL LETTER V;Ll;0;L;<sub> 0076;;;;N;;;;;
+1D66;GREEK SUBSCRIPT SMALL LETTER BETA;Ll;0;L;<sub> 03B2;;;;N;;;;;
+1D67;GREEK SUBSCRIPT SMALL LETTER GAMMA;Ll;0;L;<sub> 03B3;;;;N;;;;;
+1D68;GREEK SUBSCRIPT SMALL LETTER RHO;Ll;0;L;<sub> 03C1;;;;N;;;;;
+1D69;GREEK SUBSCRIPT SMALL LETTER PHI;Ll;0;L;<sub> 03C6;;;;N;;;;;
+1D6A;GREEK SUBSCRIPT SMALL LETTER CHI;Ll;0;L;<sub> 03C7;;;;N;;;;;
+1D6B;LATIN SMALL LETTER UE;Ll;0;L;;;;;N;;;;;
+1D6C;LATIN SMALL LETTER B WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D6D;LATIN SMALL LETTER D WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D6E;LATIN SMALL LETTER F WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D6F;LATIN SMALL LETTER M WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D70;LATIN SMALL LETTER N WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D71;LATIN SMALL LETTER P WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D72;LATIN SMALL LETTER R WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D73;LATIN SMALL LETTER R WITH FISHHOOK AND MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D74;LATIN SMALL LETTER S WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D75;LATIN SMALL LETTER T WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D76;LATIN SMALL LETTER Z WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+1D77;LATIN SMALL LETTER TURNED G;Ll;0;L;;;;;N;;;;;
+1D78;MODIFIER LETTER CYRILLIC EN;Lm;0;L;<super> 043D;;;;N;;;;;
+1D79;LATIN SMALL LETTER INSULAR G;Ll;0;L;;;;;N;;;;;
+1D7A;LATIN SMALL LETTER TH WITH STRIKETHROUGH;Ll;0;L;;;;;N;;;;;
+1D7B;LATIN SMALL CAPITAL LETTER I WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D7C;LATIN SMALL LETTER IOTA WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D7D;LATIN SMALL LETTER P WITH STROKE;Ll;0;L;;;;;N;;;2C63;;2C63
+1D7E;LATIN SMALL CAPITAL LETTER U WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D7F;LATIN SMALL LETTER UPSILON WITH STROKE;Ll;0;L;;;;;N;;;;;
+1D80;LATIN SMALL LETTER B WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D81;LATIN SMALL LETTER D WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D82;LATIN SMALL LETTER F WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D83;LATIN SMALL LETTER G WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D84;LATIN SMALL LETTER K WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D85;LATIN SMALL LETTER L WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D86;LATIN SMALL LETTER M WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D87;LATIN SMALL LETTER N WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D88;LATIN SMALL LETTER P WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D89;LATIN SMALL LETTER R WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8A;LATIN SMALL LETTER S WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8B;LATIN SMALL LETTER ESH WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8C;LATIN SMALL LETTER V WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8D;LATIN SMALL LETTER X WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8E;LATIN SMALL LETTER Z WITH PALATAL HOOK;Ll;0;L;;;;;N;;;;;
+1D8F;LATIN SMALL LETTER A WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D90;LATIN SMALL LETTER ALPHA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D91;LATIN SMALL LETTER D WITH HOOK AND TAIL;Ll;0;L;;;;;N;;;;;
+1D92;LATIN SMALL LETTER E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D93;LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D94;LATIN SMALL LETTER REVERSED OPEN E WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D95;LATIN SMALL LETTER SCHWA WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D96;LATIN SMALL LETTER I WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D97;LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D98;LATIN SMALL LETTER ESH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D99;LATIN SMALL LETTER U WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D9A;LATIN SMALL LETTER EZH WITH RETROFLEX HOOK;Ll;0;L;;;;;N;;;;;
+1D9B;MODIFIER LETTER SMALL TURNED ALPHA;Lm;0;L;<super> 0252;;;;N;;;;;
+1D9C;MODIFIER LETTER SMALL C;Lm;0;L;<super> 0063;;;;N;;;;;
+1D9D;MODIFIER LETTER SMALL C WITH CURL;Lm;0;L;<super> 0255;;;;N;;;;;
+1D9E;MODIFIER LETTER SMALL ETH;Lm;0;L;<super> 00F0;;;;N;;;;;
+1D9F;MODIFIER LETTER SMALL REVERSED OPEN E;Lm;0;L;<super> 025C;;;;N;;;;;
+1DA0;MODIFIER LETTER SMALL F;Lm;0;L;<super> 0066;;;;N;;;;;
+1DA1;MODIFIER LETTER SMALL DOTLESS J WITH STROKE;Lm;0;L;<super> 025F;;;;N;;;;;
+1DA2;MODIFIER LETTER SMALL SCRIPT G;Lm;0;L;<super> 0261;;;;N;;;;;
+1DA3;MODIFIER LETTER SMALL TURNED H;Lm;0;L;<super> 0265;;;;N;;;;;
+1DA4;MODIFIER LETTER SMALL I WITH STROKE;Lm;0;L;<super> 0268;;;;N;;;;;
+1DA5;MODIFIER LETTER SMALL IOTA;Lm;0;L;<super> 0269;;;;N;;;;;
+1DA6;MODIFIER LETTER SMALL CAPITAL I;Lm;0;L;<super> 026A;;;;N;;;;;
+1DA7;MODIFIER LETTER SMALL CAPITAL I WITH STROKE;Lm;0;L;<super> 1D7B;;;;N;;;;;
+1DA8;MODIFIER LETTER SMALL J WITH CROSSED-TAIL;Lm;0;L;<super> 029D;;;;N;;;;;
+1DA9;MODIFIER LETTER SMALL L WITH RETROFLEX HOOK;Lm;0;L;<super> 026D;;;;N;;;;;
+1DAA;MODIFIER LETTER SMALL L WITH PALATAL HOOK;Lm;0;L;<super> 1D85;;;;N;;;;;
+1DAB;MODIFIER LETTER SMALL CAPITAL L;Lm;0;L;<super> 029F;;;;N;;;;;
+1DAC;MODIFIER LETTER SMALL M WITH HOOK;Lm;0;L;<super> 0271;;;;N;;;;;
+1DAD;MODIFIER LETTER SMALL TURNED M WITH LONG LEG;Lm;0;L;<super> 0270;;;;N;;;;;
+1DAE;MODIFIER LETTER SMALL N WITH LEFT HOOK;Lm;0;L;<super> 0272;;;;N;;;;;
+1DAF;MODIFIER LETTER SMALL N WITH RETROFLEX HOOK;Lm;0;L;<super> 0273;;;;N;;;;;
+1DB0;MODIFIER LETTER SMALL CAPITAL N;Lm;0;L;<super> 0274;;;;N;;;;;
+1DB1;MODIFIER LETTER SMALL BARRED O;Lm;0;L;<super> 0275;;;;N;;;;;
+1DB2;MODIFIER LETTER SMALL PHI;Lm;0;L;<super> 0278;;;;N;;;;;
+1DB3;MODIFIER LETTER SMALL S WITH HOOK;Lm;0;L;<super> 0282;;;;N;;;;;
+1DB4;MODIFIER LETTER SMALL ESH;Lm;0;L;<super> 0283;;;;N;;;;;
+1DB5;MODIFIER LETTER SMALL T WITH PALATAL HOOK;Lm;0;L;<super> 01AB;;;;N;;;;;
+1DB6;MODIFIER LETTER SMALL U BAR;Lm;0;L;<super> 0289;;;;N;;;;;
+1DB7;MODIFIER LETTER SMALL UPSILON;Lm;0;L;<super> 028A;;;;N;;;;;
+1DB8;MODIFIER LETTER SMALL CAPITAL U;Lm;0;L;<super> 1D1C;;;;N;;;;;
+1DB9;MODIFIER LETTER SMALL V WITH HOOK;Lm;0;L;<super> 028B;;;;N;;;;;
+1DBA;MODIFIER LETTER SMALL TURNED V;Lm;0;L;<super> 028C;;;;N;;;;;
+1DBB;MODIFIER LETTER SMALL Z;Lm;0;L;<super> 007A;;;;N;;;;;
+1DBC;MODIFIER LETTER SMALL Z WITH RETROFLEX HOOK;Lm;0;L;<super> 0290;;;;N;;;;;
+1DBD;MODIFIER LETTER SMALL Z WITH CURL;Lm;0;L;<super> 0291;;;;N;;;;;
+1DBE;MODIFIER LETTER SMALL EZH;Lm;0;L;<super> 0292;;;;N;;;;;
+1DBF;MODIFIER LETTER SMALL THETA;Lm;0;L;<super> 03B8;;;;N;;;;;
+1DC0;COMBINING DOTTED GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
+1DC1;COMBINING DOTTED ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
+1DC2;COMBINING SNAKE BELOW;Mn;220;NSM;;;;;N;;;;;
+1DC3;COMBINING SUSPENSION MARK;Mn;230;NSM;;;;;N;;;;;
+1DC4;COMBINING MACRON-ACUTE;Mn;230;NSM;;;;;N;;;;;
+1DC5;COMBINING GRAVE-MACRON;Mn;230;NSM;;;;;N;;;;;
+1DC6;COMBINING MACRON-GRAVE;Mn;230;NSM;;;;;N;;;;;
+1DC7;COMBINING ACUTE-MACRON;Mn;230;NSM;;;;;N;;;;;
+1DC8;COMBINING GRAVE-ACUTE-GRAVE;Mn;230;NSM;;;;;N;;;;;
+1DC9;COMBINING ACUTE-GRAVE-ACUTE;Mn;230;NSM;;;;;N;;;;;
+1DCA;COMBINING LATIN SMALL LETTER R BELOW;Mn;220;NSM;;;;;N;;;;;
+1DFE;COMBINING LEFT ARROWHEAD ABOVE;Mn;230;NSM;;;;;N;;;;;
+1DFF;COMBINING RIGHT ARROWHEAD AND DOWN ARROWHEAD BELOW;Mn;220;NSM;;;;;N;;;;;
+1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
+1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
+1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
+1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02
+1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05;
+1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04
+1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07;
+1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06
+1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09;
+1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08
+1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B;
+1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A
+1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D;
+1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C
+1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F;
+1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E
+1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11;
+1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10
+1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13;
+1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12
+1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15;
+1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14
+1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17;
+1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16
+1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19;
+1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18
+1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B;
+1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A
+1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D;
+1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C
+1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F;
+1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E
+1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21;
+1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20
+1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23;
+1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22
+1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25;
+1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24
+1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27;
+1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26
+1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29;
+1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28
+1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B;
+1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A
+1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D;
+1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C
+1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F;
+1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E
+1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31;
+1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30
+1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33;
+1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32
+1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35;
+1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34
+1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37;
+1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36
+1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39;
+1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38
+1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B;
+1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A
+1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D;
+1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C
+1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F;
+1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E
+1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41;
+1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40
+1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43;
+1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42
+1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45;
+1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44
+1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47;
+1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46
+1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49;
+1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48
+1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B;
+1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A
+1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D;
+1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C
+1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F;
+1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E
+1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51;
+1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50
+1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53;
+1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52
+1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55;
+1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54
+1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57;
+1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56
+1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59;
+1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58
+1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B;
+1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A
+1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D;
+1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C
+1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F;
+1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E
+1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61;
+1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60
+1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63;
+1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62
+1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65;
+1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64
+1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67;
+1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66
+1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69;
+1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68
+1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B;
+1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A
+1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D;
+1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C
+1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F;
+1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E
+1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71;
+1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70
+1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73;
+1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72
+1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75;
+1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74
+1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77;
+1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76
+1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79;
+1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78
+1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B;
+1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A
+1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D;
+1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C
+1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F;
+1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E
+1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81;
+1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80
+1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83;
+1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82
+1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85;
+1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84
+1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87;
+1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86
+1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89;
+1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88
+1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B;
+1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A
+1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D;
+1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C
+1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F;
+1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E
+1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91;
+1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90
+1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93;
+1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92
+1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95;
+1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94
+1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;;
+1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;;
+1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;;
+1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;
+1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;
+1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60
+1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;
+1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0
+1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;
+1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2
+1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5;
+1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4
+1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7;
+1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6
+1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9;
+1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8
+1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB;
+1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA
+1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD;
+1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC
+1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF;
+1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE
+1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1;
+1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0
+1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3;
+1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2
+1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5;
+1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4
+1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7;
+1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6
+1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9;
+1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8
+1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB;
+1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA
+1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD;
+1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC
+1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF;
+1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE
+1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1;
+1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0
+1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3;
+1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2
+1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5;
+1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4
+1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7;
+1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6
+1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9;
+1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8
+1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB;
+1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA
+1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD;
+1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC
+1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF;
+1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE
+1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1;
+1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0
+1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3;
+1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2
+1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5;
+1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4
+1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7;
+1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6
+1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9;
+1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8
+1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB;
+1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA
+1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD;
+1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC
+1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF;
+1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE
+1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1;
+1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0
+1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3;
+1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2
+1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5;
+1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4
+1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7;
+1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6
+1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9;
+1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8
+1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB;
+1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA
+1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED;
+1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC
+1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF;
+1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE
+1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1;
+1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0
+1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3;
+1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2
+1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5;
+1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4
+1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7;
+1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6
+1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;
+1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8
+1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08
+1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09
+1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A
+1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B
+1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C
+1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D
+1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E
+1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F
+1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00;
+1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01;
+1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02;
+1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03;
+1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04;
+1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05;
+1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06;
+1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07;
+1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18
+1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19
+1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A
+1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B
+1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C
+1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D
+1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10;
+1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11;
+1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12;
+1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13;
+1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14;
+1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15;
+1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28
+1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29
+1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A
+1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B
+1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C
+1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D
+1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E
+1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F
+1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20;
+1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21;
+1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22;
+1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23;
+1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24;
+1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25;
+1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26;
+1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27;
+1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38
+1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39
+1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A
+1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B
+1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C
+1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D
+1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E
+1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F
+1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30;
+1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31;
+1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32;
+1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33;
+1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34;
+1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35;
+1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36;
+1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37;
+1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48
+1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49
+1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A
+1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B
+1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C
+1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D
+1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40;
+1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41;
+1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42;
+1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43;
+1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44;
+1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45;
+1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;;
+1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59
+1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;;
+1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B
+1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;;
+1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D
+1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;;
+1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F
+1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51;
+1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53;
+1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55;
+1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57;
+1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68
+1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69
+1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A
+1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B
+1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C
+1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D
+1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E
+1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F
+1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60;
+1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61;
+1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62;
+1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63;
+1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64;
+1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65;
+1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66;
+1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67;
+1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA
+1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB
+1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8
+1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9
+1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA
+1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB
+1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA
+1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB
+1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8
+1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9
+1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA
+1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB
+1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA
+1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB
+1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88
+1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89
+1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A
+1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B
+1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C
+1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D
+1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E
+1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F
+1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80;
+1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81;
+1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82;
+1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83;
+1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84;
+1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85;
+1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86;
+1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87;
+1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98
+1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99
+1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A
+1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B
+1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C
+1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D
+1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E
+1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F
+1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90;
+1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91;
+1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92;
+1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93;
+1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94;
+1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95;
+1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96;
+1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97;
+1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8
+1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9
+1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA
+1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB
+1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC
+1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD
+1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE
+1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF
+1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0;
+1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1;
+1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2;
+1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3;
+1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4;
+1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5;
+1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6;
+1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7;
+1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8
+1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9
+1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;;
+1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC
+1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;;
+1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;;
+1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;;
+1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0;
+1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1;
+1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70;
+1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71;
+1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3;
+1FBD;GREEK KORONIS;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399
+1FBF;GREEK PSILI;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FC0;GREEK PERISPOMENI;Sk;0;ON;<compat> 0020 0342;;;;N;;;;;
+1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;;
+1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;;
+1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC
+1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;;
+1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;;
+1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;;
+1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72;
+1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73;
+1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74;
+1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75;
+1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3;
+1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;;
+1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;;
+1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;;
+1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8
+1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9
+1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;;
+1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;;
+1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;;
+1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;;
+1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0;
+1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1;
+1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76;
+1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77;
+1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;;
+1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;;
+1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;;
+1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8
+1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9
+1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;;
+1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;;
+1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;;
+1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC
+1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;;
+1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;;
+1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0;
+1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1;
+1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A;
+1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B;
+1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5;
+1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;;
+1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;;
+1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;;
+1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;;
+1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC
+1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;;
+1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;;
+1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;;
+1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78;
+1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79;
+1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C;
+1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D;
+1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3;
+1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;;
+1FFE;GREEK DASIA;Sk;0;ON;<compat> 0020 0314;;;;N;;;;;
+2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;;
+2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;;
+2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2007;FIGURE SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
+2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200B;ZERO WIDTH SPACE;Cf;0;BN;;;;;N;;;;;
+200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;;
+200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;;
+200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;
+200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;;
+2010;HYPHEN;Pd;0;ON;;;;;N;;;;;
+2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;;
+2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;;
+2013;EN DASH;Pd;0;ON;;;;;N;;;;;
+2014;EM DASH;Pd;0;ON;;;;;N;;;;;
+2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;;
+2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;;
+2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;;
+2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;Y;SINGLE TURNED COMMA QUOTATION MARK;;;;
+2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;Y;SINGLE COMMA QUOTATION MARK;;;;
+201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;Y;LOW SINGLE COMMA QUOTATION MARK;;;;
+201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;Y;SINGLE REVERSED COMMA QUOTATION MARK;;;;
+201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;Y;DOUBLE TURNED COMMA QUOTATION MARK;;;;
+201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;Y;DOUBLE COMMA QUOTATION MARK;;;;
+201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;Y;LOW DOUBLE COMMA QUOTATION MARK;;;;
+201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;Y;DOUBLE REVERSED COMMA QUOTATION MARK;;;;
+2020;DAGGER;Po;0;ON;;;;;N;;;;;
+2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;;
+2022;BULLET;Po;0;ON;;;;;N;;;;;
+2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;;
+2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;;
+2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;;
+2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;;
+2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;;
+2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;;
+2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;;
+202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;;
+202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;;
+202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;;
+202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;;
+202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;;
+202F;NARROW NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;;;;;
+2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
+2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
+2032;PRIME;Po;0;ET;;;;;N;;;;;
+2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;;
+2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;;
+2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;;
+2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;;
+2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;;
+2038;CARET;Po;0;ON;;;;;N;;;;;
+2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;;
+203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;;
+203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;;
+203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;;
+203D;INTERROBANG;Po;0;ON;;;;;N;;;;;
+203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;;
+203F;UNDERTIE;Pc;0;ON;;;;;N;;Enotikon;;;
+2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;;
+2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;
+2042;ASTERISM;Po;0;ON;;;;;N;;;;;
+2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;
+2044;FRACTION SLASH;Sm;0;CS;;;;;N;;;;;
+2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;
+2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;
+2047;DOUBLE QUESTION MARK;Po;0;ON;<compat> 003F 003F;;;;N;;;;;
+2048;QUESTION EXCLAMATION MARK;Po;0;ON;<compat> 003F 0021;;;;N;;;;;
+2049;EXCLAMATION QUESTION MARK;Po;0;ON;<compat> 0021 003F;;;;N;;;;;
+204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;;
+204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;;
+204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;;
+204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;;
+204E;LOW ASTERISK;Po;0;ON;;;;;N;;;;;
+204F;REVERSED SEMICOLON;Po;0;ON;;;;;N;;;;;
+2050;CLOSE UP;Po;0;ON;;;;;N;;;;;
+2051;TWO ASTERISKS ALIGNED VERTICALLY;Po;0;ON;;;;;N;;;;;
+2052;COMMERCIAL MINUS SIGN;Sm;0;ON;;;;;N;;;;;
+2053;SWUNG DASH;Po;0;ON;;;;;N;;;;;
+2054;INVERTED UNDERTIE;Pc;0;ON;;;;;N;;;;;
+2055;FLOWER PUNCTUATION MARK;Po;0;ON;;;;;N;;;;;
+2056;THREE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+2057;QUADRUPLE PRIME;Po;0;ON;<compat> 2032 2032 2032 2032;;;;N;;;;;
+2058;FOUR DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+2059;FIVE DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+205A;TWO DOT PUNCTUATION;Po;0;ON;;;;;N;;;;;
+205B;FOUR DOT MARK;Po;0;ON;;;;;N;;;;;
+205C;DOTTED CROSS;Po;0;ON;;;;;N;;;;;
+205D;TRICOLON;Po;0;ON;;;;;N;;;;;
+205E;VERTICAL FOUR DOTS;Po;0;ON;;;;;N;;;;;
+205F;MEDIUM MATHEMATICAL SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2060;WORD JOINER;Cf;0;BN;;;;;N;;;;;
+2061;FUNCTION APPLICATION;Cf;0;BN;;;;;N;;;;;
+2062;INVISIBLE TIMES;Cf;0;BN;;;;;N;;;;;
+2063;INVISIBLE SEPARATOR;Cf;0;BN;;;;;N;;;;;
+206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
+206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
+206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
+206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
+206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
+206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
+2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;;0;0;N;SUPERSCRIPT DIGIT ZERO;;;;
+2071;SUPERSCRIPT LATIN SMALL LETTER I;Ll;0;L;<super> 0069;;;;N;;;;;
+2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;;4;4;N;SUPERSCRIPT DIGIT FOUR;;;;
+2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;;5;5;N;SUPERSCRIPT DIGIT FIVE;;;;
+2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;;6;6;N;SUPERSCRIPT DIGIT SIX;;;;
+2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
+2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
+2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
+207A;SUPERSCRIPT PLUS SIGN;Sm;0;ES;<super> 002B;;;;N;;;;;
+207B;SUPERSCRIPT MINUS;Sm;0;ES;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
+207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
+207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
+207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
+207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;L;<super> 006E;;;;N;;;;;
+2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;;0;0;N;SUBSCRIPT DIGIT ZERO;;;;
+2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;;1;1;N;SUBSCRIPT DIGIT ONE;;;;
+2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;;2;2;N;SUBSCRIPT DIGIT TWO;;;;
+2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;;3;3;N;SUBSCRIPT DIGIT THREE;;;;
+2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;;4;4;N;SUBSCRIPT DIGIT FOUR;;;;
+2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;;5;5;N;SUBSCRIPT DIGIT FIVE;;;;
+2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;;6;6;N;SUBSCRIPT DIGIT SIX;;;;
+2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
+2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
+2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;;9;9;N;SUBSCRIPT DIGIT NINE;;;;
+208A;SUBSCRIPT PLUS SIGN;Sm;0;ES;<sub> 002B;;;;N;;;;;
+208B;SUBSCRIPT MINUS;Sm;0;ES;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
+208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
+208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
+208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
+2090;LATIN SUBSCRIPT SMALL LETTER A;Lm;0;L;<sub> 0061;;;;N;;;;;
+2091;LATIN SUBSCRIPT SMALL LETTER E;Lm;0;L;<sub> 0065;;;;N;;;;;
+2092;LATIN SUBSCRIPT SMALL LETTER O;Lm;0;L;<sub> 006F;;;;N;;;;;
+2093;LATIN SUBSCRIPT SMALL LETTER X;Lm;0;L;<sub> 0078;;;;N;;;;;
+2094;LATIN SUBSCRIPT SMALL LETTER SCHWA;Lm;0;L;<sub> 0259;;;;N;;;;;
+20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
+20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
+20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;;
+20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;;
+20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;;
+20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;;
+20A9;WON SIGN;Sc;0;ET;;;;;N;;;;;
+20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;;
+20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;;
+20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;;
+20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;;
+20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;;
+20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;;
+20B0;GERMAN PENNY SIGN;Sc;0;ET;;;;;N;;;;;
+20B1;PESO SIGN;Sc;0;ET;;;;;N;;;;;
+20B2;GUARANI SIGN;Sc;0;ET;;;;;N;;;;;
+20B3;AUSTRAL SIGN;Sc;0;ET;;;;;N;;;;;
+20B4;HRYVNIA SIGN;Sc;0;ET;;;;;N;;;;;
+20B5;CEDI SIGN;Sc;0;ET;;;;;N;;;;;
+20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
+20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
+20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
+20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;;
+20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;;
+20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;;
+20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;;
+20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;;
+20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;;
+20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;;
+20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;;
+20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;;
+20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;;
+20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;;
+20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;;
+20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;;
+20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;;
+20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;;
+20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;;
+20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;;
+20E4;COMBINING ENCLOSING UPWARD POINTING TRIANGLE;Me;0;NSM;;;;;N;;;;;
+20E5;COMBINING REVERSE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;;
+20E6;COMBINING DOUBLE VERTICAL STROKE OVERLAY;Mn;1;NSM;;;;;N;;;;;
+20E7;COMBINING ANNUITY SYMBOL;Mn;230;NSM;;;;;N;;;;;
+20E8;COMBINING TRIPLE UNDERDOT;Mn;220;NSM;;;;;N;;;;;
+20E9;COMBINING WIDE BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
+20EA;COMBINING LEFTWARDS ARROW OVERLAY;Mn;1;NSM;;;;;N;;;;;
+20EB;COMBINING LONG DOUBLE SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;;;;;
+20EC;COMBINING RIGHTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;;
+20ED;COMBINING LEFTWARDS HARPOON WITH BARB DOWNWARDS;Mn;220;NSM;;;;;N;;;;;
+20EE;COMBINING LEFT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+20EF;COMBINING RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;;
+2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;;
+2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
+2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;;
+2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;;
+2105;CARE OF;So;0;ON;<compat> 0063 002F 006F;;;;N;;;;;
+2106;CADA UNA;So;0;ON;<compat> 0063 002F 0075;;;;N;;;;;
+2107;EULER CONSTANT;Lu;0;L;<compat> 0190;;;;N;EULERS;;;;
+2108;SCRUPLE;So;0;ON;;;;;N;;;;;
+2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;;
+210A;SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+210B;SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;SCRIPT H;;;;
+210C;BLACK-LETTER CAPITAL H;Lu;0;L;<font> 0048;;;;N;BLACK-LETTER H;;;;
+210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L;<font> 0048;;;;N;DOUBLE-STRUCK H;;;;
+210E;PLANCK CONSTANT;Ll;0;L;<font> 0068;;;;N;;;;;
+210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;;
+2110;SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;SCRIPT I;;;;
+2111;BLACK-LETTER CAPITAL I;Lu;0;L;<font> 0049;;;;N;BLACK-LETTER I;;;;
+2112;SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;SCRIPT L;;;;
+2113;SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;;
+2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L;<font> 004E;;;;N;DOUBLE-STRUCK N;;;;
+2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;;
+2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;;
+2118;SCRIPT CAPITAL P;So;0;ON;;;;;N;SCRIPT P;;;;
+2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L;<font> 0050;;;;N;DOUBLE-STRUCK P;;;;
+211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;;
+211B;SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;SCRIPT R;;;;
+211C;BLACK-LETTER CAPITAL R;Lu;0;L;<font> 0052;;;;N;BLACK-LETTER R;;;;
+211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L;<font> 0052;;;;N;DOUBLE-STRUCK R;;;;
+211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;;
+211F;RESPONSE;So;0;ON;;;;;N;;;;;
+2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;;
+2121;TELEPHONE SIGN;So;0;ON;<compat> 0054 0045 004C;;;;N;T E L SYMBOL;;;;
+2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;;
+2123;VERSICLE;So;0;ON;;;;;N;;;;;
+2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;;
+2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;;
+2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9;
+2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;;
+2128;BLACK-LETTER CAPITAL Z;Lu;0;L;<font> 005A;;;;N;BLACK-LETTER Z;;;;
+2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;;
+212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B;
+212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5;
+212C;SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;SCRIPT B;;;;
+212D;BLACK-LETTER CAPITAL C;Lu;0;L;<font> 0043;;;;N;BLACK-LETTER C;;;;
+212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;;
+212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;;
+2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;;
+2132;TURNED CAPITAL F;Lu;0;L;;;;;N;TURNED F;;;214E;
+2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;;
+2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;
+2136;BET SYMBOL;Lo;0;L;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;;
+2137;GIMEL SYMBOL;Lo;0;L;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;;
+2138;DALET SYMBOL;Lo;0;L;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;;
+2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;;
+213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;;
+213B;FACSIMILE SIGN;So;0;ON;<compat> 0046 0041 0058;;;;N;;;;;
+213C;DOUBLE-STRUCK SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+213D;DOUBLE-STRUCK SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+213E;DOUBLE-STRUCK CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+213F;DOUBLE-STRUCK CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+2140;DOUBLE-STRUCK N-ARY SUMMATION;Sm;0;ON;<font> 2211;;;;Y;;;;;
+2141;TURNED SANS-SERIF CAPITAL G;Sm;0;ON;;;;;N;;;;;
+2142;TURNED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;;
+2143;REVERSED SANS-SERIF CAPITAL L;Sm;0;ON;;;;;N;;;;;
+2144;TURNED SANS-SERIF CAPITAL Y;Sm;0;ON;;;;;N;;;;;
+2145;DOUBLE-STRUCK ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+2146;DOUBLE-STRUCK ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+2147;DOUBLE-STRUCK ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+2148;DOUBLE-STRUCK ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+2149;DOUBLE-STRUCK ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+214A;PROPERTY LINE;So;0;ON;;;;;N;;;;;
+214B;TURNED AMPERSAND;Sm;0;ON;;;;;N;;;;;
+214C;PER SIGN;So;0;ON;;;;;N;;;;;
+214D;AKTIESELSKAB;So;0;ON;;;;;N;;;;;
+214E;TURNED SMALL F;Ll;0;L;;;;;N;;;2132;;2132
+2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
+2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
+2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
+2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;;
+2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;;
+2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;;
+2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;;
+215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;;
+215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;;
+215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;;
+215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;;
+215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;;
+215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;;
+2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170;
+2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171;
+2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172;
+2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173;
+2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174;
+2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175;
+2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176;
+2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177;
+2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178;
+2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179;
+216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A;
+216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B;
+216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C;
+216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D;
+216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E;
+216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F;
+2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160
+2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161
+2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162
+2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163
+2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164
+2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165
+2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166
+2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167
+2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168
+2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169
+217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A
+217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B
+217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C
+217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D
+217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E
+217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F
+2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;
+2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;
+2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;
+2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Lu;0;L;;;;;N;;;;2184;
+2184;LATIN SMALL LETTER REVERSED C;Ll;0;L;;;;;N;;;2183;;2183
+2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
+2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
+2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
+2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;;
+2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
+2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;;
+2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;;
+2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;;
+2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;;
+2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;;
+219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;;
+219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;;
+219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;;
+219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;;
+219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;;
+219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;;
+21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;;
+21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;;
+21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;;
+21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;;
+21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;;
+21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;;
+21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;;
+21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;;
+21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;;
+21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;;
+21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;;
+21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;;
+21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;;
+21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;;
+21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;;
+21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;;
+21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;;
+21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;;
+21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;;
+21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;;
+21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;;
+21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;;
+21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;;
+21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;;
+21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;;
+21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;;
+21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;;
+21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;;
+21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;;
+21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;;
+21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;;
+21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;;
+21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;;
+21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;;
+21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;;
+21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;;
+21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;;
+21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;;
+21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;;
+21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;;
+21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;;
+21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;;
+21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;;
+21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;;
+21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;;
+21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;;
+21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;;
+21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;;
+21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;;
+21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;;
+21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;;
+21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;;
+21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;;
+21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;;
+21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;;
+21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;;
+21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;;
+21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;;
+21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;;
+21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;;
+21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;;
+21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;;
+21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;;
+21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;;
+21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;;
+21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;;
+21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;;
+21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;;
+21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;;
+21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
+21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;;
+21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;;
+21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
+21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;;
+21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
+21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
+21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;;
+21F4;RIGHT ARROW WITH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+21F5;DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+21F6;THREE RIGHTWARDS ARROWS;Sm;0;ON;;;;;N;;;;;
+21F7;LEFTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21F8;RIGHTWARDS ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21F9;LEFT RIGHT ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21FA;LEFTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21FB;RIGHTWARDS ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21FC;LEFT RIGHT ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+21FD;LEFTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;
+21FE;RIGHTWARDS OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;
+21FF;LEFT RIGHT OPEN-HEADED ARROW;Sm;0;ON;;;;;N;;;;;
+2200;FOR ALL;Sm;0;ON;;;;;N;;;;;
+2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;;
+2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;;
+2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;;
+2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;;
+2205;EMPTY SET;Sm;0;ON;;;;;N;;;;;
+2206;INCREMENT;Sm;0;ON;;;;;N;;;;;
+2207;NABLA;Sm;0;ON;;;;;N;;;;;
+2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;;
+220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;;
+220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220E;END OF PROOF;Sm;0;ON;;;;;N;;;;;
+220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
+2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
+2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
+2212;MINUS SIGN;Sm;0;ES;;;;;N;;;;;
+2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
+2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2216;SET MINUS;Sm;0;ON;;;;;Y;;;;;
+2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;;
+221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;;
+221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;;
+221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;;
+221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;;
+221E;INFINITY;Sm;0;ON;;;;;N;;;;;
+221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;;
+2220;ANGLE;Sm;0;ON;;;;;Y;;;;;
+2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;;
+2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;;
+2223;DIVIDES;Sm;0;ON;;;;;N;;;;;
+2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;;
+2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;;
+2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2229;INTERSECTION;Sm;0;ON;;;;;N;;;;;
+222A;UNION;Sm;0;ON;;;;;N;;;;;
+222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;;
+222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;;
+222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;;
+2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;;
+2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2234;THEREFORE;Sm;0;ON;;;;;N;;;;;
+2235;BECAUSE;Sm;0;ON;;;;;N;;;;;
+2236;RATIO;Sm;0;ON;;;;;N;;;;;
+2237;PROPORTION;Sm;0;ON;;;;;N;;;;;
+2238;DOT MINUS;Sm;0;ON;;;;;N;;;;;
+2239;EXCESS;Sm;0;ON;;;;;Y;;;;;
+223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;;
+223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;;
+223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;lazy S;;;
+223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;;
+223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;;
+2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;;
+2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;;
+2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;;
+2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;;
+2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;;
+224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;;
+224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;;
+2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;;
+2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;;
+2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;;
+2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;;
+2259;ESTIMATES;Sm;0;ON;;;;;N;;;;;
+225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;;
+225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;;
+225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;;
+225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;;
+225E;MEASURED BY;Sm;0;ON;;;;;N;;;;;
+225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;;
+2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;;
+2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;;
+2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;;
+2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;;
+2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;;
+2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;;
+2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;;
+2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;;
+226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;;
+226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;;
+226C;BETWEEN;Sm;0;ON;;;;;N;;;;;
+226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;;
+226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;;
+226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;;
+2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;;
+2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;;
+2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;;
+2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;;
+2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;;
+2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;;
+2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;;
+2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;;
+2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;;
+2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;;
+227A;PRECEDES;Sm;0;ON;;;;;Y;;;;;
+227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;;
+2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;;
+2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;;
+2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;;
+2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;;
+2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;;
+2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;;
+2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;;
+228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;;
+228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;;
+228C;MULTISET;Sm;0;ON;;;;;Y;;;;;
+228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;;
+228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;;
+228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;;
+2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;;
+2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;;
+2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;;
+2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;;
+229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;;
+229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;;
+229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;;
+22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;;
+22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
+22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;;
+22A5;UP TACK;Sm;0;ON;;;;;N;;;;;
+22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;;
+22A7;MODELS;Sm;0;ON;;;;;Y;;;;;
+22A8;TRUE;Sm;0;ON;;;;;Y;;;;;
+22A9;FORCES;Sm;0;ON;;;;;Y;;;;;
+22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;;
+22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;;
+22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;;
+22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;;
+22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;;
+22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;;
+22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;;
+22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;;
+22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;;
+22BB;XOR;Sm;0;ON;;;;;N;;;;;
+22BC;NAND;Sm;0;ON;;;;;N;;;;;
+22BD;NOR;Sm;0;ON;;;;;N;;;;;
+22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;;
+22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;;
+22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;;
+22C8;BOWTIE;Sm;0;ON;;;;;N;;;;;
+22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;;
+22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;;
+22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;;
+22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;;
+22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;;
+22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;;
+22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;;
+22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;;
+22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;;
+22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;;
+22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;;
+22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;;
+22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;;
+22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;;
+22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;;
+22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;;
+22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;;
+22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;;
+22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;;
+22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;;
+22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;;
+22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;;
+22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;;
+22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+22F2;ELEMENT OF WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22F3;ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22F4;SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22F5;ELEMENT OF WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+22F6;ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+22F7;SMALL ELEMENT OF WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+22F8;ELEMENT OF WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+22F9;ELEMENT OF WITH TWO HORIZONTAL STROKES;Sm;0;ON;;;;;Y;;;;;
+22FA;CONTAINS WITH LONG HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22FB;CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22FC;SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+22FD;CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+22FE;SMALL CONTAINS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+22FF;Z NOTATION BAG MEMBERSHIP;Sm;0;ON;;;;;Y;;;;;
+2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;;
+2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;;
+2302;HOUSE;So;0;ON;;;;;N;;;;;
+2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;;
+2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;;
+2305;PROJECTIVE;So;0;ON;;;;;N;;;;;
+2306;PERSPECTIVE;So;0;ON;;;;;N;;;;;
+2307;WAVY LINE;So;0;ON;;;;;N;;;;;
+2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;;
+2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;;
+230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;;
+230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;;
+230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;;
+230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;;
+2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;;
+2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;;
+2312;ARC;So;0;ON;;;;;N;;;;;
+2313;SEGMENT;So;0;ON;;;;;N;;;;;
+2314;SECTOR;So;0;ON;;;;;N;;;;;
+2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;;
+2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;;
+2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;;
+2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;;
+2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;;
+231A;WATCH;So;0;ON;;;;;N;;;;;
+231B;HOURGLASS;So;0;ON;;;;;N;;;;;
+231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;;
+231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;;
+231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;;
+231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;;
+2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2322;FROWN;So;0;ON;;;;;N;;;;;
+2323;SMILE;So;0;ON;;;;;N;;;;;
+2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;;
+2325;OPTION KEY;So;0;ON;;;;;N;;;;;
+2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;;
+2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;;
+2328;KEYBOARD;So;0;ON;;;;;N;;;;;
+2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;;
+232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;;
+232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;;
+232C;BENZENE RING;So;0;ON;;;;;N;;;;;
+232D;CYLINDRICITY;So;0;ON;;;;;N;;;;;
+232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;;
+232F;SYMMETRY;So;0;ON;;;;;N;;;;;
+2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;;
+2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;;
+2332;CONICAL TAPER;So;0;ON;;;;;N;;;;;
+2333;SLOPE;So;0;ON;;;;;N;;;;;
+2334;COUNTERBORE;So;0;ON;;;;;N;;;;;
+2335;COUNTERSINK;So;0;ON;;;;;N;;;;;
+2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;;
+2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;;
+2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;;
+2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;;
+233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;;
+233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;;
+233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;;
+233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;;
+233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;;
+233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;;
+2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;;
+2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;;
+2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;;
+2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;;
+2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;;
+2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;;
+2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;;
+2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;;
+2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;;
+2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;;
+234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;*;;;
+234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;;
+234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;;
+234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;;
+234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;*;;;
+234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;;
+2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;;
+2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;*;;;
+2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;;
+2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;;
+2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;;
+2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;*;;;
+2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;;
+2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;;
+2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;;
+2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;;
+235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;;
+235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;;
+235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;;
+235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;;
+235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;;
+235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;;
+2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;;
+2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;*;;;
+2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;;
+2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;;
+2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;;
+2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;;
+2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;;
+2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;;
+2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;;
+2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;;
+236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;;
+236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;;
+236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;;
+236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;;
+236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;;
+236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;;
+2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;;
+2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;;
+2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;;
+2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;;
+2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;;
+2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;;
+2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;;
+2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;;
+2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;;
+2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;;
+237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;;
+237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;;
+237C;RIGHT ANGLE WITH DOWNWARDS ZIGZAG ARROW;Sm;0;ON;;;;;N;;;;;
+237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;;
+237E;BELL SYMBOL;So;0;ON;;;;;N;;;;;
+237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;;
+2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;;
+2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
+2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
+2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;;
+2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;;
+2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;;
+2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;;
+2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;;
+2388;HELM SYMBOL;So;0;ON;;;;;N;;;;;
+2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;pause;;;
+238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;break;;;
+238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;escape;;;
+238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;;
+238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;;
+238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;;
+238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
+2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
+2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
+2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
+2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;;
+2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;;
+2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;;
+2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;;
+2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;;
+2398;NEXT PAGE;So;0;ON;;;;;N;;;;;
+2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
+239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
+239B;LEFT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;;
+239C;LEFT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;;
+239D;LEFT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;;
+239E;RIGHT PARENTHESIS UPPER HOOK;Sm;0;ON;;;;;N;;;;;
+239F;RIGHT PARENTHESIS EXTENSION;Sm;0;ON;;;;;N;;;;;
+23A0;RIGHT PARENTHESIS LOWER HOOK;Sm;0;ON;;;;;N;;;;;
+23A1;LEFT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;;
+23A2;LEFT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;
+23A3;LEFT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;;
+23A4;RIGHT SQUARE BRACKET UPPER CORNER;Sm;0;ON;;;;;N;;;;;
+23A5;RIGHT SQUARE BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;
+23A6;RIGHT SQUARE BRACKET LOWER CORNER;Sm;0;ON;;;;;N;;;;;
+23A7;LEFT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;;
+23A8;LEFT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;;
+23A9;LEFT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;;
+23AA;CURLY BRACKET EXTENSION;Sm;0;ON;;;;;N;;;;;
+23AB;RIGHT CURLY BRACKET UPPER HOOK;Sm;0;ON;;;;;N;;;;;
+23AC;RIGHT CURLY BRACKET MIDDLE PIECE;Sm;0;ON;;;;;N;;;;;
+23AD;RIGHT CURLY BRACKET LOWER HOOK;Sm;0;ON;;;;;N;;;;;
+23AE;INTEGRAL EXTENSION;Sm;0;ON;;;;;N;;;;;
+23AF;HORIZONTAL LINE EXTENSION;Sm;0;ON;;;;;N;;;;;
+23B0;UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;;
+23B1;UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION;Sm;0;ON;;;;;N;;;;;
+23B2;SUMMATION TOP;Sm;0;ON;;;;;N;;;;;
+23B3;SUMMATION BOTTOM;Sm;0;ON;;;;;N;;;;;
+23B4;TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;;
+23B5;BOTTOM SQUARE BRACKET;So;0;ON;;;;;N;;;;;
+23B6;BOTTOM SQUARE BRACKET OVER TOP SQUARE BRACKET;So;0;ON;;;;;N;;;;;
+23B7;RADICAL SYMBOL BOTTOM;So;0;ON;;;;;N;;;;;
+23B8;LEFT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;;
+23B9;RIGHT VERTICAL BOX LINE;So;0;ON;;;;;N;;;;;
+23BA;HORIZONTAL SCAN LINE-1;So;0;ON;;;;;N;;;;;
+23BB;HORIZONTAL SCAN LINE-3;So;0;ON;;;;;N;;;;;
+23BC;HORIZONTAL SCAN LINE-7;So;0;ON;;;;;N;;;;;
+23BD;HORIZONTAL SCAN LINE-9;So;0;ON;;;;;N;;;;;
+23BE;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP RIGHT;So;0;ON;;;;;N;;;;;
+23BF;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM RIGHT;So;0;ON;;;;;N;;;;;
+23C0;DENTISTRY SYMBOL LIGHT VERTICAL WITH CIRCLE;So;0;ON;;;;;N;;;;;
+23C1;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;;
+23C2;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH CIRCLE;So;0;ON;;;;;N;;;;;
+23C3;DENTISTRY SYMBOL LIGHT VERTICAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;
+23C4;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;
+23C5;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH TRIANGLE;So;0;ON;;;;;N;;;;;
+23C6;DENTISTRY SYMBOL LIGHT VERTICAL AND WAVE;So;0;ON;;;;;N;;;;;
+23C7;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;;
+23C8;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL WITH WAVE;So;0;ON;;;;;N;;;;;
+23C9;DENTISTRY SYMBOL LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;;;;;
+23CA;DENTISTRY SYMBOL LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;;;;;
+23CB;DENTISTRY SYMBOL LIGHT VERTICAL AND TOP LEFT;So;0;ON;;;;;N;;;;;
+23CC;DENTISTRY SYMBOL LIGHT VERTICAL AND BOTTOM LEFT;So;0;ON;;;;;N;;;;;
+23CD;SQUARE FOOT;So;0;ON;;;;;N;;;;;
+23CE;RETURN SYMBOL;So;0;ON;;;;;N;;;;;
+23CF;EJECT SYMBOL;So;0;ON;;;;;N;;;;;
+23D0;VERTICAL LINE EXTENSION;So;0;ON;;;;;N;;;;;
+23D1;METRICAL BREVE;So;0;ON;;;;;N;;;;;
+23D2;METRICAL LONG OVER SHORT;So;0;ON;;;;;N;;;;;
+23D3;METRICAL SHORT OVER LONG;So;0;ON;;;;;N;;;;;
+23D4;METRICAL LONG OVER TWO SHORTS;So;0;ON;;;;;N;;;;;
+23D5;METRICAL TWO SHORTS OVER LONG;So;0;ON;;;;;N;;;;;
+23D6;METRICAL TWO SHORTS JOINED;So;0;ON;;;;;N;;;;;
+23D7;METRICAL TRISEME;So;0;ON;;;;;N;;;;;
+23D8;METRICAL TETRASEME;So;0;ON;;;;;N;;;;;
+23D9;METRICAL PENTASEME;So;0;ON;;;;;N;;;;;
+23DA;EARTH GROUND;So;0;ON;;;;;N;;;;;
+23DB;FUSE;So;0;ON;;;;;N;;;;;
+23DC;TOP PARENTHESIS;Sm;0;ON;;;;;N;;mathematical use;;;
+23DD;BOTTOM PARENTHESIS;Sm;0;ON;;;;;N;;mathematical use;;;
+23DE;TOP CURLY BRACKET;Sm;0;ON;;;;;N;;mathematical use;;;
+23DF;BOTTOM CURLY BRACKET;Sm;0;ON;;;;;N;;mathematical use;;;
+23E0;TOP TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;mathematical use;;;
+23E1;BOTTOM TORTOISE SHELL BRACKET;Sm;0;ON;;;;;N;;mathematical use;;;
+23E2;WHITE TRAPEZIUM;So;0;ON;;;;;N;;;;;
+23E3;BENZENE RING WITH CIRCLE;So;0;ON;;;;;N;;;;;
+23E4;STRAIGHTNESS;So;0;ON;;;;;N;;;;;
+23E5;FLATNESS;So;0;ON;;;;;N;;;;;
+23E6;AC CURRENT;So;0;ON;;;;;N;;;;;
+23E7;ELECTRICAL INTERSECTION;So;0;ON;;;;;N;;;;;
+2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
+2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
+2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
+2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;;
+2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;;
+2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;;
+2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;;
+2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;;
+2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;;
+2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;;
+240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;;
+240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;;
+240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;;
+240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;;
+240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;;
+240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;;
+2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;;
+2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;;
+2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;;
+2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;;
+2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;;
+2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;;
+2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;;
+2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;;
+2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;;
+2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;;
+241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;;
+241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;;
+241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;;
+241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;;
+241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;;
+241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;;
+2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;;
+2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;;
+2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;;
+2423;OPEN BOX;So;0;ON;;;;;N;;;;;
+2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;;
+2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;;
+2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;;
+2440;OCR HOOK;So;0;ON;;;;;N;;;;;
+2441;OCR CHAIR;So;0;ON;;;;;N;;;;;
+2442;OCR FORK;So;0;ON;;;;;N;;;;;
+2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;;
+2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;;
+2445;OCR BOW TIE;So;0;ON;;;;;N;;;;;
+2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;;
+2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;;
+2448;OCR DASH;So;0;ON;;;;;N;;;;;
+2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;
+244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;
+2460;CIRCLED DIGIT ONE;No;0;ON;<circle> 0031;;1;1;N;;;;;
+2461;CIRCLED DIGIT TWO;No;0;ON;<circle> 0032;;2;2;N;;;;;
+2462;CIRCLED DIGIT THREE;No;0;ON;<circle> 0033;;3;3;N;;;;;
+2463;CIRCLED DIGIT FOUR;No;0;ON;<circle> 0034;;4;4;N;;;;;
+2464;CIRCLED DIGIT FIVE;No;0;ON;<circle> 0035;;5;5;N;;;;;
+2465;CIRCLED DIGIT SIX;No;0;ON;<circle> 0036;;6;6;N;;;;;
+2466;CIRCLED DIGIT SEVEN;No;0;ON;<circle> 0037;;7;7;N;;;;;
+2467;CIRCLED DIGIT EIGHT;No;0;ON;<circle> 0038;;8;8;N;;;;;
+2468;CIRCLED DIGIT NINE;No;0;ON;<circle> 0039;;9;9;N;;;;;
+2469;CIRCLED NUMBER TEN;No;0;ON;<circle> 0031 0030;;;10;N;;;;;
+246A;CIRCLED NUMBER ELEVEN;No;0;ON;<circle> 0031 0031;;;11;N;;;;;
+246B;CIRCLED NUMBER TWELVE;No;0;ON;<circle> 0031 0032;;;12;N;;;;;
+246C;CIRCLED NUMBER THIRTEEN;No;0;ON;<circle> 0031 0033;;;13;N;;;;;
+246D;CIRCLED NUMBER FOURTEEN;No;0;ON;<circle> 0031 0034;;;14;N;;;;;
+246E;CIRCLED NUMBER FIFTEEN;No;0;ON;<circle> 0031 0035;;;15;N;;;;;
+246F;CIRCLED NUMBER SIXTEEN;No;0;ON;<circle> 0031 0036;;;16;N;;;;;
+2470;CIRCLED NUMBER SEVENTEEN;No;0;ON;<circle> 0031 0037;;;17;N;;;;;
+2471;CIRCLED NUMBER EIGHTEEN;No;0;ON;<circle> 0031 0038;;;18;N;;;;;
+2472;CIRCLED NUMBER NINETEEN;No;0;ON;<circle> 0031 0039;;;19;N;;;;;
+2473;CIRCLED NUMBER TWENTY;No;0;ON;<circle> 0032 0030;;;20;N;;;;;
+2474;PARENTHESIZED DIGIT ONE;No;0;ON;<compat> 0028 0031 0029;;1;1;N;;;;;
+2475;PARENTHESIZED DIGIT TWO;No;0;ON;<compat> 0028 0032 0029;;2;2;N;;;;;
+2476;PARENTHESIZED DIGIT THREE;No;0;ON;<compat> 0028 0033 0029;;3;3;N;;;;;
+2477;PARENTHESIZED DIGIT FOUR;No;0;ON;<compat> 0028 0034 0029;;4;4;N;;;;;
+2478;PARENTHESIZED DIGIT FIVE;No;0;ON;<compat> 0028 0035 0029;;5;5;N;;;;;
+2479;PARENTHESIZED DIGIT SIX;No;0;ON;<compat> 0028 0036 0029;;6;6;N;;;;;
+247A;PARENTHESIZED DIGIT SEVEN;No;0;ON;<compat> 0028 0037 0029;;7;7;N;;;;;
+247B;PARENTHESIZED DIGIT EIGHT;No;0;ON;<compat> 0028 0038 0029;;8;8;N;;;;;
+247C;PARENTHESIZED DIGIT NINE;No;0;ON;<compat> 0028 0039 0029;;9;9;N;;;;;
+247D;PARENTHESIZED NUMBER TEN;No;0;ON;<compat> 0028 0031 0030 0029;;;10;N;;;;;
+247E;PARENTHESIZED NUMBER ELEVEN;No;0;ON;<compat> 0028 0031 0031 0029;;;11;N;;;;;
+247F;PARENTHESIZED NUMBER TWELVE;No;0;ON;<compat> 0028 0031 0032 0029;;;12;N;;;;;
+2480;PARENTHESIZED NUMBER THIRTEEN;No;0;ON;<compat> 0028 0031 0033 0029;;;13;N;;;;;
+2481;PARENTHESIZED NUMBER FOURTEEN;No;0;ON;<compat> 0028 0031 0034 0029;;;14;N;;;;;
+2482;PARENTHESIZED NUMBER FIFTEEN;No;0;ON;<compat> 0028 0031 0035 0029;;;15;N;;;;;
+2483;PARENTHESIZED NUMBER SIXTEEN;No;0;ON;<compat> 0028 0031 0036 0029;;;16;N;;;;;
+2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;ON;<compat> 0028 0031 0037 0029;;;17;N;;;;;
+2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;ON;<compat> 0028 0031 0038 0029;;;18;N;;;;;
+2486;PARENTHESIZED NUMBER NINETEEN;No;0;ON;<compat> 0028 0031 0039 0029;;;19;N;;;;;
+2487;PARENTHESIZED NUMBER TWENTY;No;0;ON;<compat> 0028 0032 0030 0029;;;20;N;;;;;
+2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;
+2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;
+248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;
+248B;DIGIT FOUR FULL STOP;No;0;EN;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;;
+248C;DIGIT FIVE FULL STOP;No;0;EN;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;;
+248D;DIGIT SIX FULL STOP;No;0;EN;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;;
+248E;DIGIT SEVEN FULL STOP;No;0;EN;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;;
+248F;DIGIT EIGHT FULL STOP;No;0;EN;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;;
+2490;DIGIT NINE FULL STOP;No;0;EN;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;;
+2491;NUMBER TEN FULL STOP;No;0;EN;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;;
+2492;NUMBER ELEVEN FULL STOP;No;0;EN;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;;
+2493;NUMBER TWELVE FULL STOP;No;0;EN;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;;
+2494;NUMBER THIRTEEN FULL STOP;No;0;EN;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;;
+2495;NUMBER FOURTEEN FULL STOP;No;0;EN;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;;
+2496;NUMBER FIFTEEN FULL STOP;No;0;EN;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;;
+2497;NUMBER SIXTEEN FULL STOP;No;0;EN;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;;
+2498;NUMBER SEVENTEEN FULL STOP;No;0;EN;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;;
+2499;NUMBER EIGHTEEN FULL STOP;No;0;EN;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;;
+249A;NUMBER NINETEEN FULL STOP;No;0;EN;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;;
+249B;NUMBER TWENTY FULL STOP;No;0;EN;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;;
+249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L;<compat> 0028 0061 0029;;;;N;;;;;
+249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L;<compat> 0028 0062 0029;;;;N;;;;;
+249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L;<compat> 0028 0063 0029;;;;N;;;;;
+249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L;<compat> 0028 0064 0029;;;;N;;;;;
+24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L;<compat> 0028 0065 0029;;;;N;;;;;
+24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L;<compat> 0028 0066 0029;;;;N;;;;;
+24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L;<compat> 0028 0067 0029;;;;N;;;;;
+24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L;<compat> 0028 0068 0029;;;;N;;;;;
+24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L;<compat> 0028 0069 0029;;;;N;;;;;
+24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L;<compat> 0028 006A 0029;;;;N;;;;;
+24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L;<compat> 0028 006B 0029;;;;N;;;;;
+24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L;<compat> 0028 006C 0029;;;;N;;;;;
+24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L;<compat> 0028 006D 0029;;;;N;;;;;
+24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L;<compat> 0028 006E 0029;;;;N;;;;;
+24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L;<compat> 0028 006F 0029;;;;N;;;;;
+24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L;<compat> 0028 0070 0029;;;;N;;;;;
+24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L;<compat> 0028 0071 0029;;;;N;;;;;
+24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L;<compat> 0028 0072 0029;;;;N;;;;;
+24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L;<compat> 0028 0073 0029;;;;N;;;;;
+24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L;<compat> 0028 0074 0029;;;;N;;;;;
+24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L;<compat> 0028 0075 0029;;;;N;;;;;
+24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L;<compat> 0028 0076 0029;;;;N;;;;;
+24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L;<compat> 0028 0077 0029;;;;N;;;;;
+24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L;<compat> 0028 0078 0029;;;;N;;;;;
+24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L;<compat> 0028 0079 0029;;;;N;;;;;
+24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L;<compat> 0028 007A 0029;;;;N;;;;;
+24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L;<circle> 0041;;;;N;;;;24D0;
+24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L;<circle> 0042;;;;N;;;;24D1;
+24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;24D2;
+24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L;<circle> 0044;;;;N;;;;24D3;
+24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L;<circle> 0045;;;;N;;;;24D4;
+24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L;<circle> 0046;;;;N;;;;24D5;
+24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L;<circle> 0047;;;;N;;;;24D6;
+24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L;<circle> 0048;;;;N;;;;24D7;
+24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L;<circle> 0049;;;;N;;;;24D8;
+24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L;<circle> 004A;;;;N;;;;24D9;
+24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L;<circle> 004B;;;;N;;;;24DA;
+24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L;<circle> 004C;;;;N;;;;24DB;
+24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L;<circle> 004D;;;;N;;;;24DC;
+24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L;<circle> 004E;;;;N;;;;24DD;
+24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L;<circle> 004F;;;;N;;;;24DE;
+24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L;<circle> 0050;;;;N;;;;24DF;
+24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L;<circle> 0051;;;;N;;;;24E0;
+24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;24E1;
+24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L;<circle> 0053;;;;N;;;;24E2;
+24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L;<circle> 0054;;;;N;;;;24E3;
+24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L;<circle> 0055;;;;N;;;;24E4;
+24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L;<circle> 0056;;;;N;;;;24E5;
+24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L;<circle> 0057;;;;N;;;;24E6;
+24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L;<circle> 0058;;;;N;;;;24E7;
+24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L;<circle> 0059;;;;N;;;;24E8;
+24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L;<circle> 005A;;;;N;;;;24E9;
+24D0;CIRCLED LATIN SMALL LETTER A;So;0;L;<circle> 0061;;;;N;;;24B6;;24B6
+24D1;CIRCLED LATIN SMALL LETTER B;So;0;L;<circle> 0062;;;;N;;;24B7;;24B7
+24D2;CIRCLED LATIN SMALL LETTER C;So;0;L;<circle> 0063;;;;N;;;24B8;;24B8
+24D3;CIRCLED LATIN SMALL LETTER D;So;0;L;<circle> 0064;;;;N;;;24B9;;24B9
+24D4;CIRCLED LATIN SMALL LETTER E;So;0;L;<circle> 0065;;;;N;;;24BA;;24BA
+24D5;CIRCLED LATIN SMALL LETTER F;So;0;L;<circle> 0066;;;;N;;;24BB;;24BB
+24D6;CIRCLED LATIN SMALL LETTER G;So;0;L;<circle> 0067;;;;N;;;24BC;;24BC
+24D7;CIRCLED LATIN SMALL LETTER H;So;0;L;<circle> 0068;;;;N;;;24BD;;24BD
+24D8;CIRCLED LATIN SMALL LETTER I;So;0;L;<circle> 0069;;;;N;;;24BE;;24BE
+24D9;CIRCLED LATIN SMALL LETTER J;So;0;L;<circle> 006A;;;;N;;;24BF;;24BF
+24DA;CIRCLED LATIN SMALL LETTER K;So;0;L;<circle> 006B;;;;N;;;24C0;;24C0
+24DB;CIRCLED LATIN SMALL LETTER L;So;0;L;<circle> 006C;;;;N;;;24C1;;24C1
+24DC;CIRCLED LATIN SMALL LETTER M;So;0;L;<circle> 006D;;;;N;;;24C2;;24C2
+24DD;CIRCLED LATIN SMALL LETTER N;So;0;L;<circle> 006E;;;;N;;;24C3;;24C3
+24DE;CIRCLED LATIN SMALL LETTER O;So;0;L;<circle> 006F;;;;N;;;24C4;;24C4
+24DF;CIRCLED LATIN SMALL LETTER P;So;0;L;<circle> 0070;;;;N;;;24C5;;24C5
+24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L;<circle> 0071;;;;N;;;24C6;;24C6
+24E1;CIRCLED LATIN SMALL LETTER R;So;0;L;<circle> 0072;;;;N;;;24C7;;24C7
+24E2;CIRCLED LATIN SMALL LETTER S;So;0;L;<circle> 0073;;;;N;;;24C8;;24C8
+24E3;CIRCLED LATIN SMALL LETTER T;So;0;L;<circle> 0074;;;;N;;;24C9;;24C9
+24E4;CIRCLED LATIN SMALL LETTER U;So;0;L;<circle> 0075;;;;N;;;24CA;;24CA
+24E5;CIRCLED LATIN SMALL LETTER V;So;0;L;<circle> 0076;;;;N;;;24CB;;24CB
+24E6;CIRCLED LATIN SMALL LETTER W;So;0;L;<circle> 0077;;;;N;;;24CC;;24CC
+24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD
+24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE
+24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF
+24EA;CIRCLED DIGIT ZERO;No;0;ON;<circle> 0030;;0;0;N;;;;;
+24EB;NEGATIVE CIRCLED NUMBER ELEVEN;No;0;ON;;;;11;N;;;;;
+24EC;NEGATIVE CIRCLED NUMBER TWELVE;No;0;ON;;;;12;N;;;;;
+24ED;NEGATIVE CIRCLED NUMBER THIRTEEN;No;0;ON;;;;13;N;;;;;
+24EE;NEGATIVE CIRCLED NUMBER FOURTEEN;No;0;ON;;;;14;N;;;;;
+24EF;NEGATIVE CIRCLED NUMBER FIFTEEN;No;0;ON;;;;15;N;;;;;
+24F0;NEGATIVE CIRCLED NUMBER SIXTEEN;No;0;ON;;;;16;N;;;;;
+24F1;NEGATIVE CIRCLED NUMBER SEVENTEEN;No;0;ON;;;;17;N;;;;;
+24F2;NEGATIVE CIRCLED NUMBER EIGHTEEN;No;0;ON;;;;18;N;;;;;
+24F3;NEGATIVE CIRCLED NUMBER NINETEEN;No;0;ON;;;;19;N;;;;;
+24F4;NEGATIVE CIRCLED NUMBER TWENTY;No;0;ON;;;;20;N;;;;;
+24F5;DOUBLE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;;;;;
+24F6;DOUBLE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;;;;;
+24F7;DOUBLE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;;;;;
+24F8;DOUBLE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;;;;;
+24F9;DOUBLE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;;;;;
+24FA;DOUBLE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;;;;;
+24FB;DOUBLE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;;;;;
+24FC;DOUBLE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;;;;;
+24FD;DOUBLE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;;;;;
+24FE;DOUBLE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;;;;;
+24FF;NEGATIVE CIRCLED DIGIT ZERO;No;0;ON;;;0;0;N;;;;;
+2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;;
+2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;;
+2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;;
+2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;;
+2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;;
+2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;;
+2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;;
+2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;;
+2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;;
+2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;;
+250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;;
+250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;;
+250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;;
+250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;;
+250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;;
+250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;;
+2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;;
+2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;;
+2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;;
+2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;;
+2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;;
+2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;;
+2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;;
+2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;;
+2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;;
+2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;;
+251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;;
+251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;;
+251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;;
+251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;;
+251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;;
+251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;;
+2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;;
+2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;;
+2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;;
+2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;;
+2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;;
+2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;;
+2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;;
+2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;;
+2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;;
+252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;;
+252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;;
+252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;;
+252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;;
+252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;;
+252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;;
+2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;;
+2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;;
+2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;;
+2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;;
+2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;;
+2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;;
+2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;;
+2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;;
+2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;;
+2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;;
+253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;;
+253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;;
+253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;;
+253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;;
+253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;;
+253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;;
+2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;;
+2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;;
+2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;;
+2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;;
+2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;;
+2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;;
+2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;;
+2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;;
+2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;;
+254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;;
+254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;;
+254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;;
+254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;;
+254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;;
+254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;;
+2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;;
+2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;;
+2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;;
+2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;;
+2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;;
+2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;;
+2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;;
+2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;;
+2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;;
+2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;;
+255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;;
+255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;;
+255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;;
+255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;;
+255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;;
+255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;;
+2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;;
+2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;;
+2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;;
+2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;;
+2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;;
+2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;;
+2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;;
+2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;;
+2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;;
+2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;;
+256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;;
+256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;;
+256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;;
+256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;;
+256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;;
+256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;;
+2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;;
+2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;;
+2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;;
+2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;;
+2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;;
+2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;;
+2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;;
+2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;;
+2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;;
+2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;;
+257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;;
+257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;;
+257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;;
+257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;;
+257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;;
+257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;;
+2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;;
+2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2588;FULL BLOCK;So;0;ON;;;;;N;;;;;
+2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;;
+258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;;
+258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
+2591;LIGHT SHADE;So;0;ON;;;;;N;;;;;
+2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+2593;DARK SHADE;So;0;ON;;;;;N;;;;;
+2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2596;QUADRANT LOWER LEFT;So;0;ON;;;;;N;;;;;
+2597;QUADRANT LOWER RIGHT;So;0;ON;;;;;N;;;;;
+2598;QUADRANT UPPER LEFT;So;0;ON;;;;;N;;;;;
+2599;QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
+259A;QUADRANT UPPER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
+259B;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;;
+259C;QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
+259D;QUADRANT UPPER RIGHT;So;0;ON;;;;;N;;;;;
+259E;QUADRANT UPPER RIGHT AND LOWER LEFT;So;0;ON;;;;;N;;;;;
+259F;QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT;So;0;ON;;;;;N;;;;;
+25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;;
+25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;;
+25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
+25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;;
+25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;
+25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;
+25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;;
+25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;;
+25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;;
+25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;;
+25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;;
+25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;;
+25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;;
+25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;;
+25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;;
+25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;;
+25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;;
+25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;;
+25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;;
+25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;;
+25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;;
+25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;;
+25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;;
+25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;;
+25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;;
+25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;;
+25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;;
+25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;;
+25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;;
+25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;;
+25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
+25C9;FISHEYE;So;0;ON;;;;;N;;;;;
+25CA;LOZENGE;So;0;ON;;;;;N;;;;;
+25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;;
+25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25CE;BULLSEYE;So;0;ON;;;;;N;;;;;
+25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;;
+25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E6;WHITE BULLET;So;0;ON;;;;;N;;;;;
+25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;;
+25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;;
+25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;;
+25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;;
+25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;;
+25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F8;UPPER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;;
+25F9;UPPER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;;
+25FA;LOWER LEFT TRIANGLE;Sm;0;ON;;;;;N;;;;;
+25FB;WHITE MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;;
+25FC;BLACK MEDIUM SQUARE;Sm;0;ON;;;;;N;;;;;
+25FD;WHITE MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;;
+25FE;BLACK MEDIUM SMALL SQUARE;Sm;0;ON;;;;;N;;;;;
+25FF;LOWER RIGHT TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+2601;CLOUD;So;0;ON;;;;;N;;;;;
+2602;UMBRELLA;So;0;ON;;;;;N;;;;;
+2603;SNOWMAN;So;0;ON;;;;;N;;;;;
+2604;COMET;So;0;ON;;;;;N;;;;;
+2605;BLACK STAR;So;0;ON;;;;;N;;;;;
+2606;WHITE STAR;So;0;ON;;;;;N;;;;;
+2607;LIGHTNING;So;0;ON;;;;;N;;;;;
+2608;THUNDERSTORM;So;0;ON;;;;;N;;;;;
+2609;SUN;So;0;ON;;;;;N;;;;;
+260A;ASCENDING NODE;So;0;ON;;;;;N;;;;;
+260B;DESCENDING NODE;So;0;ON;;;;;N;;;;;
+260C;CONJUNCTION;So;0;ON;;;;;N;;;;;
+260D;OPPOSITION;So;0;ON;;;;;N;;;;;
+260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;;
+260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;;
+2610;BALLOT BOX;So;0;ON;;;;;N;;;;;
+2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;;
+2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;;
+2613;SALTIRE;So;0;ON;;;;;N;;;;;
+2614;UMBRELLA WITH RAIN DROPS;So;0;ON;;;;;N;;;;;
+2615;HOT BEVERAGE;So;0;ON;;;;;N;;;;;
+2616;WHITE SHOGI PIECE;So;0;ON;;;;;N;;;;;
+2617;BLACK SHOGI PIECE;So;0;ON;;;;;N;;;;;
+2618;SHAMROCK;So;0;ON;;;;;N;;;;;
+2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;
+261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
+2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;
+2621;CAUTION SIGN;So;0;ON;;;;;N;;;;;
+2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;;
+2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;;
+2624;CADUCEUS;So;0;ON;;;;;N;;;;;
+2625;ANKH;So;0;ON;;;;;N;;;;;
+2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;;
+2627;CHI RHO;So;0;ON;;;;;N;;;;;
+2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;;
+2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;;
+262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;;
+262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;;
+262C;ADI SHAKTI;So;0;ON;;;;;N;;;;;
+262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;;
+262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;;
+262F;YIN YANG;So;0;ON;;;;;N;;;;;
+2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;;
+2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;;
+2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;;
+2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;;
+2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;;
+2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;;
+2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;;
+2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
+2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;;
+2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;;
+263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;;
+263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;;
+263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263F;MERCURY;So;0;ON;;;;;N;;;;;
+2640;FEMALE SIGN;So;0;ON;;;;;N;;;;;
+2641;EARTH;So;0;ON;;;;;N;;;;;
+2642;MALE SIGN;So;0;ON;;;;;N;;;;;
+2643;JUPITER;So;0;ON;;;;;N;;;;;
+2644;SATURN;So;0;ON;;;;;N;;;;;
+2645;URANUS;So;0;ON;;;;;N;;;;;
+2646;NEPTUNE;So;0;ON;;;;;N;;;;;
+2647;PLUTO;So;0;ON;;;;;N;;;;;
+2648;ARIES;So;0;ON;;;;;N;;;;;
+2649;TAURUS;So;0;ON;;;;;N;;;;;
+264A;GEMINI;So;0;ON;;;;;N;;;;;
+264B;CANCER;So;0;ON;;;;;N;;;;;
+264C;LEO;So;0;ON;;;;;N;;;;;
+264D;VIRGO;So;0;ON;;;;;N;;;;;
+264E;LIBRA;So;0;ON;;;;;N;;;;;
+264F;SCORPIUS;So;0;ON;;;;;N;;;;;
+2650;SAGITTARIUS;So;0;ON;;;;;N;;;;;
+2651;CAPRICORN;So;0;ON;;;;;N;;;;;
+2652;AQUARIUS;So;0;ON;;;;;N;;;;;
+2653;PISCES;So;0;ON;;;;;N;;;;;
+2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;;
+2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;;
+2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;;
+2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;;
+2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;;
+265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;;
+265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;;
+265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;;
+265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;;
+265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;;
+2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;;
+2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;;
+2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;;
+2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;;
+2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;;
+2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;;
+2668;HOT SPRINGS;So;0;ON;;;;;N;;;;;
+2669;QUARTER NOTE;So;0;ON;;;;;N;;;;;
+266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;;
+266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;;
+266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;;
+266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;;
+266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;;
+266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;;
+2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
+2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
+2672;UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;;
+2673;RECYCLING SYMBOL FOR TYPE-1 PLASTICS;So;0;ON;;;;;N;;pete;;;
+2674;RECYCLING SYMBOL FOR TYPE-2 PLASTICS;So;0;ON;;;;;N;;hdpe;;;
+2675;RECYCLING SYMBOL FOR TYPE-3 PLASTICS;So;0;ON;;;;;N;;pvc;;;
+2676;RECYCLING SYMBOL FOR TYPE-4 PLASTICS;So;0;ON;;;;;N;;ldpe;;;
+2677;RECYCLING SYMBOL FOR TYPE-5 PLASTICS;So;0;ON;;;;;N;;pp;;;
+2678;RECYCLING SYMBOL FOR TYPE-6 PLASTICS;So;0;ON;;;;;N;;ps;;;
+2679;RECYCLING SYMBOL FOR TYPE-7 PLASTICS;So;0;ON;;;;;N;;other;;;
+267A;RECYCLING SYMBOL FOR GENERIC MATERIALS;So;0;ON;;;;;N;;;;;
+267B;BLACK UNIVERSAL RECYCLING SYMBOL;So;0;ON;;;;;N;;;;;
+267C;RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;;
+267D;PARTIALLY-RECYCLED PAPER SYMBOL;So;0;ON;;;;;N;;;;;
+267E;PERMANENT PAPER SIGN;So;0;ON;;;;;N;;;;;
+267F;WHEELCHAIR SYMBOL;So;0;ON;;;;;N;;;;;
+2680;DIE FACE-1;So;0;ON;;;;;N;;;;;
+2681;DIE FACE-2;So;0;ON;;;;;N;;;;;
+2682;DIE FACE-3;So;0;ON;;;;;N;;;;;
+2683;DIE FACE-4;So;0;ON;;;;;N;;;;;
+2684;DIE FACE-5;So;0;ON;;;;;N;;;;;
+2685;DIE FACE-6;So;0;ON;;;;;N;;;;;
+2686;WHITE CIRCLE WITH DOT RIGHT;So;0;ON;;;;;N;;;;;
+2687;WHITE CIRCLE WITH TWO DOTS;So;0;ON;;;;;N;;;;;
+2688;BLACK CIRCLE WITH WHITE DOT RIGHT;So;0;ON;;;;;N;;;;;
+2689;BLACK CIRCLE WITH TWO WHITE DOTS;So;0;ON;;;;;N;;;;;
+268A;MONOGRAM FOR YANG;So;0;ON;;;;;N;;;;;
+268B;MONOGRAM FOR YIN;So;0;ON;;;;;N;;;;;
+268C;DIGRAM FOR GREATER YANG;So;0;ON;;;;;N;;;;;
+268D;DIGRAM FOR LESSER YIN;So;0;ON;;;;;N;;;;;
+268E;DIGRAM FOR LESSER YANG;So;0;ON;;;;;N;;;;;
+268F;DIGRAM FOR GREATER YIN;So;0;ON;;;;;N;;;;;
+2690;WHITE FLAG;So;0;ON;;;;;N;;;;;
+2691;BLACK FLAG;So;0;ON;;;;;N;;;;;
+2692;HAMMER AND PICK;So;0;ON;;;;;N;;;;;
+2693;ANCHOR;So;0;ON;;;;;N;;;;;
+2694;CROSSED SWORDS;So;0;ON;;;;;N;;;;;
+2695;STAFF OF AESCULAPIUS;So;0;ON;;;;;N;;;;;
+2696;SCALES;So;0;ON;;;;;N;;;;;
+2697;ALEMBIC;So;0;ON;;;;;N;;;;;
+2698;FLOWER;So;0;ON;;;;;N;;;;;
+2699;GEAR;So;0;ON;;;;;N;;;;;
+269A;STAFF OF HERMES;So;0;ON;;;;;N;;;;;
+269B;ATOM SYMBOL;So;0;ON;;;;;N;;;;;
+269C;FLEUR-DE-LIS;So;0;ON;;;;;N;;;;;
+26A0;WARNING SIGN;So;0;ON;;;;;N;;;;;
+26A1;HIGH VOLTAGE SIGN;So;0;ON;;;;;N;;;;;
+26A2;DOUBLED FEMALE SIGN;So;0;ON;;;;;N;;;;;
+26A3;DOUBLED MALE SIGN;So;0;ON;;;;;N;;;;;
+26A4;INTERLOCKED FEMALE AND MALE SIGN;So;0;ON;;;;;N;;;;;
+26A5;MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;;
+26A6;MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
+26A7;MALE WITH STROKE AND MALE AND FEMALE SIGN;So;0;ON;;;;;N;;;;;
+26A8;VERTICAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
+26A9;HORIZONTAL MALE WITH STROKE SIGN;So;0;ON;;;;;N;;;;;
+26AA;MEDIUM WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+26AB;MEDIUM BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+26AC;MEDIUM SMALL WHITE CIRCLE;So;0;L;;;;;N;;;;;
+26AD;MARRIAGE SYMBOL;So;0;ON;;;;;N;;;;;
+26AE;DIVORCE SYMBOL;So;0;ON;;;;;N;;;;;
+26AF;UNMARRIED PARTNERSHIP SYMBOL;So;0;ON;;;;;N;;;;;
+26B0;COFFIN;So;0;ON;;;;;N;;;;;
+26B1;FUNERAL URN;So;0;ON;;;;;N;;;;;
+26B2;NEUTER;So;0;ON;;;;;N;;;;;
+2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
+2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;;
+2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;;
+2707;TAPE DRIVE;So;0;ON;;;;;N;;;;;
+2708;AIRPLANE;So;0;ON;;;;;N;;;;;
+2709;ENVELOPE;So;0;ON;;;;;N;;;;;
+270C;VICTORY HAND;So;0;ON;;;;;N;;;;;
+270D;WRITING HAND;So;0;ON;;;;;N;;;;;
+270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+270F;PENCIL;So;0;ON;;;;;N;;;;;
+2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+2711;WHITE NIB;So;0;ON;;;;;N;;;;;
+2712;BLACK NIB;So;0;ON;;;;;N;;;;;
+2713;CHECK MARK;So;0;ON;;;;;N;;;;;
+2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
+2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2717;BALLOT X;So;0;ON;;;;;N;;;;;
+2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;;
+2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;;
+271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;
+271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;;
+271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;;
+271D;LATIN CROSS;So;0;ON;;;;;N;;;;;
+271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;
+271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;;
+2720;MALTESE CROSS;So;0;ON;;;;;N;;;;;
+2721;STAR OF DAVID;So;0;ON;;;;;N;;;;;
+2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
+272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;;
+272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;;
+272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;;
+272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;;
+2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;;
+2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;;
+2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;;
+273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;;
+273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;;
+2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;;
+2744;SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2747;SPARKLE;So;0;ON;;;;;N;;;;;
+2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;;
+2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;;
+2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;;
+2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;;
+2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;;
+2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;;
+2766;FLORAL HEART;So;0;ON;;;;;N;;;;;
+2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+2768;MEDIUM LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+2769;MEDIUM RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+276A;MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+276B;MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+276C;MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+276D;MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+276E;HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+276F;HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+2770;HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+2771;HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+2772;LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+2773;LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+2774;MEDIUM LEFT CURLY BRACKET ORNAMENT;Ps;0;ON;;;;;Y;;;;;
+2775;MEDIUM RIGHT CURLY BRACKET ORNAMENT;Pe;0;ON;;;;;Y;;;;;
+2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;;
+2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;;
+2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;;
+2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;;
+277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;;
+277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;;
+277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;;
+277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;;
+277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;;
+277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;;
+2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;;
+2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;;
+2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;;
+2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;;
+2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;;
+2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;;
+2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;;
+2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;;
+278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;;
+278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;;
+278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;;
+278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;;
+278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;;
+278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;;
+2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;;
+2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;;
+2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;;
+2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;;
+2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;;
+279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;;
+279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;;
+279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;;
+279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;;
+279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;;
+279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;;
+27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;;
+27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;;
+27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;;
+27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;;
+27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;;
+27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;;
+27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;;
+27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;;
+27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;;
+27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;;
+27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;;
+27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;;
+27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;;
+27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;;
+27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;;
+27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
+27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
+27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
+27C0;THREE DIMENSIONAL ANGLE;Sm;0;ON;;;;;Y;;;;;
+27C1;WHITE TRIANGLE CONTAINING SMALL WHITE TRIANGLE;Sm;0;ON;;;;;N;;;;;
+27C2;PERPENDICULAR;Sm;0;ON;;;;;N;;;;;
+27C3;OPEN SUBSET;Sm;0;ON;;;;;Y;;;;;
+27C4;OPEN SUPERSET;Sm;0;ON;;;;;Y;;;;;
+27C5;LEFT S-SHAPED BAG DELIMITER;Ps;0;ON;;;;;Y;;;;;
+27C6;RIGHT S-SHAPED BAG DELIMITER;Pe;0;ON;;;;;Y;;;;;
+27C7;OR WITH DOT INSIDE;Sm;0;ON;;;;;N;;;;;
+27C8;REVERSE SOLIDUS PRECEDING SUBSET;Sm;0;ON;;;;;N;;;;;
+27C9;SUPERSET PRECEDING SOLIDUS;Sm;0;ON;;;;;N;;;;;
+27CA;VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+27D0;WHITE DIAMOND WITH CENTRED DOT;Sm;0;ON;;;;;N;;;;;
+27D1;AND WITH DOT;Sm;0;ON;;;;;N;;;;;
+27D2;ELEMENT OF OPENING UPWARDS;Sm;0;ON;;;;;N;;;;;
+27D3;LOWER RIGHT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;;
+27D4;UPPER LEFT CORNER WITH DOT;Sm;0;ON;;;;;Y;;;;;
+27D5;LEFT OUTER JOIN;Sm;0;ON;;;;;Y;;;;;
+27D6;RIGHT OUTER JOIN;Sm;0;ON;;;;;Y;;;;;
+27D7;FULL OUTER JOIN;Sm;0;ON;;;;;N;;;;;
+27D8;LARGE UP TACK;Sm;0;ON;;;;;N;;;;;
+27D9;LARGE DOWN TACK;Sm;0;ON;;;;;N;;;;;
+27DA;LEFT AND RIGHT DOUBLE TURNSTILE;Sm;0;ON;;;;;N;;;;;
+27DB;LEFT AND RIGHT TACK;Sm;0;ON;;;;;N;;;;;
+27DC;LEFT MULTIMAP;Sm;0;ON;;;;;Y;;;;;
+27DD;LONG RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
+27DE;LONG LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+27DF;UP TACK WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
+27E0;LOZENGE DIVIDED BY HORIZONTAL RULE;Sm;0;ON;;;;;N;;;;;
+27E1;WHITE CONCAVE-SIDED DIAMOND;Sm;0;ON;;;;;N;;;;;
+27E2;WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
+27E3;WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
+27E4;WHITE SQUARE WITH LEFTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
+27E5;WHITE SQUARE WITH RIGHTWARDS TICK;Sm;0;ON;;;;;Y;;;;;
+27E6;MATHEMATICAL LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;;;;;
+27E7;MATHEMATICAL RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;;;;;
+27E8;MATHEMATICAL LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;
+27E9;MATHEMATICAL RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
+27EA;MATHEMATICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;
+27EB;MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
+27F0;UPWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F1;DOWNWARDS QUADRUPLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F2;ANTICLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F3;CLOCKWISE GAPPED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F4;RIGHT ARROW WITH CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+27F5;LONG LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+27F6;LONG RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+27F7;LONG LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
+27F8;LONG LEFTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+27F9;LONG RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+27FA;LONG LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+27FB;LONG LEFTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+27FC;LONG RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+27FD;LONG LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+27FE;LONG RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+27FF;LONG RIGHTWARDS SQUIGGLE ARROW;Sm;0;ON;;;;;N;;;;;
+2800;BRAILLE PATTERN BLANK;So;0;L;;;;;N;;;;;
+2801;BRAILLE PATTERN DOTS-1;So;0;L;;;;;N;;;;;
+2802;BRAILLE PATTERN DOTS-2;So;0;L;;;;;N;;;;;
+2803;BRAILLE PATTERN DOTS-12;So;0;L;;;;;N;;;;;
+2804;BRAILLE PATTERN DOTS-3;So;0;L;;;;;N;;;;;
+2805;BRAILLE PATTERN DOTS-13;So;0;L;;;;;N;;;;;
+2806;BRAILLE PATTERN DOTS-23;So;0;L;;;;;N;;;;;
+2807;BRAILLE PATTERN DOTS-123;So;0;L;;;;;N;;;;;
+2808;BRAILLE PATTERN DOTS-4;So;0;L;;;;;N;;;;;
+2809;BRAILLE PATTERN DOTS-14;So;0;L;;;;;N;;;;;
+280A;BRAILLE PATTERN DOTS-24;So;0;L;;;;;N;;;;;
+280B;BRAILLE PATTERN DOTS-124;So;0;L;;;;;N;;;;;
+280C;BRAILLE PATTERN DOTS-34;So;0;L;;;;;N;;;;;
+280D;BRAILLE PATTERN DOTS-134;So;0;L;;;;;N;;;;;
+280E;BRAILLE PATTERN DOTS-234;So;0;L;;;;;N;;;;;
+280F;BRAILLE PATTERN DOTS-1234;So;0;L;;;;;N;;;;;
+2810;BRAILLE PATTERN DOTS-5;So;0;L;;;;;N;;;;;
+2811;BRAILLE PATTERN DOTS-15;So;0;L;;;;;N;;;;;
+2812;BRAILLE PATTERN DOTS-25;So;0;L;;;;;N;;;;;
+2813;BRAILLE PATTERN DOTS-125;So;0;L;;;;;N;;;;;
+2814;BRAILLE PATTERN DOTS-35;So;0;L;;;;;N;;;;;
+2815;BRAILLE PATTERN DOTS-135;So;0;L;;;;;N;;;;;
+2816;BRAILLE PATTERN DOTS-235;So;0;L;;;;;N;;;;;
+2817;BRAILLE PATTERN DOTS-1235;So;0;L;;;;;N;;;;;
+2818;BRAILLE PATTERN DOTS-45;So;0;L;;;;;N;;;;;
+2819;BRAILLE PATTERN DOTS-145;So;0;L;;;;;N;;;;;
+281A;BRAILLE PATTERN DOTS-245;So;0;L;;;;;N;;;;;
+281B;BRAILLE PATTERN DOTS-1245;So;0;L;;;;;N;;;;;
+281C;BRAILLE PATTERN DOTS-345;So;0;L;;;;;N;;;;;
+281D;BRAILLE PATTERN DOTS-1345;So;0;L;;;;;N;;;;;
+281E;BRAILLE PATTERN DOTS-2345;So;0;L;;;;;N;;;;;
+281F;BRAILLE PATTERN DOTS-12345;So;0;L;;;;;N;;;;;
+2820;BRAILLE PATTERN DOTS-6;So;0;L;;;;;N;;;;;
+2821;BRAILLE PATTERN DOTS-16;So;0;L;;;;;N;;;;;
+2822;BRAILLE PATTERN DOTS-26;So;0;L;;;;;N;;;;;
+2823;BRAILLE PATTERN DOTS-126;So;0;L;;;;;N;;;;;
+2824;BRAILLE PATTERN DOTS-36;So;0;L;;;;;N;;;;;
+2825;BRAILLE PATTERN DOTS-136;So;0;L;;;;;N;;;;;
+2826;BRAILLE PATTERN DOTS-236;So;0;L;;;;;N;;;;;
+2827;BRAILLE PATTERN DOTS-1236;So;0;L;;;;;N;;;;;
+2828;BRAILLE PATTERN DOTS-46;So;0;L;;;;;N;;;;;
+2829;BRAILLE PATTERN DOTS-146;So;0;L;;;;;N;;;;;
+282A;BRAILLE PATTERN DOTS-246;So;0;L;;;;;N;;;;;
+282B;BRAILLE PATTERN DOTS-1246;So;0;L;;;;;N;;;;;
+282C;BRAILLE PATTERN DOTS-346;So;0;L;;;;;N;;;;;
+282D;BRAILLE PATTERN DOTS-1346;So;0;L;;;;;N;;;;;
+282E;BRAILLE PATTERN DOTS-2346;So;0;L;;;;;N;;;;;
+282F;BRAILLE PATTERN DOTS-12346;So;0;L;;;;;N;;;;;
+2830;BRAILLE PATTERN DOTS-56;So;0;L;;;;;N;;;;;
+2831;BRAILLE PATTERN DOTS-156;So;0;L;;;;;N;;;;;
+2832;BRAILLE PATTERN DOTS-256;So;0;L;;;;;N;;;;;
+2833;BRAILLE PATTERN DOTS-1256;So;0;L;;;;;N;;;;;
+2834;BRAILLE PATTERN DOTS-356;So;0;L;;;;;N;;;;;
+2835;BRAILLE PATTERN DOTS-1356;So;0;L;;;;;N;;;;;
+2836;BRAILLE PATTERN DOTS-2356;So;0;L;;;;;N;;;;;
+2837;BRAILLE PATTERN DOTS-12356;So;0;L;;;;;N;;;;;
+2838;BRAILLE PATTERN DOTS-456;So;0;L;;;;;N;;;;;
+2839;BRAILLE PATTERN DOTS-1456;So;0;L;;;;;N;;;;;
+283A;BRAILLE PATTERN DOTS-2456;So;0;L;;;;;N;;;;;
+283B;BRAILLE PATTERN DOTS-12456;So;0;L;;;;;N;;;;;
+283C;BRAILLE PATTERN DOTS-3456;So;0;L;;;;;N;;;;;
+283D;BRAILLE PATTERN DOTS-13456;So;0;L;;;;;N;;;;;
+283E;BRAILLE PATTERN DOTS-23456;So;0;L;;;;;N;;;;;
+283F;BRAILLE PATTERN DOTS-123456;So;0;L;;;;;N;;;;;
+2840;BRAILLE PATTERN DOTS-7;So;0;L;;;;;N;;;;;
+2841;BRAILLE PATTERN DOTS-17;So;0;L;;;;;N;;;;;
+2842;BRAILLE PATTERN DOTS-27;So;0;L;;;;;N;;;;;
+2843;BRAILLE PATTERN DOTS-127;So;0;L;;;;;N;;;;;
+2844;BRAILLE PATTERN DOTS-37;So;0;L;;;;;N;;;;;
+2845;BRAILLE PATTERN DOTS-137;So;0;L;;;;;N;;;;;
+2846;BRAILLE PATTERN DOTS-237;So;0;L;;;;;N;;;;;
+2847;BRAILLE PATTERN DOTS-1237;So;0;L;;;;;N;;;;;
+2848;BRAILLE PATTERN DOTS-47;So;0;L;;;;;N;;;;;
+2849;BRAILLE PATTERN DOTS-147;So;0;L;;;;;N;;;;;
+284A;BRAILLE PATTERN DOTS-247;So;0;L;;;;;N;;;;;
+284B;BRAILLE PATTERN DOTS-1247;So;0;L;;;;;N;;;;;
+284C;BRAILLE PATTERN DOTS-347;So;0;L;;;;;N;;;;;
+284D;BRAILLE PATTERN DOTS-1347;So;0;L;;;;;N;;;;;
+284E;BRAILLE PATTERN DOTS-2347;So;0;L;;;;;N;;;;;
+284F;BRAILLE PATTERN DOTS-12347;So;0;L;;;;;N;;;;;
+2850;BRAILLE PATTERN DOTS-57;So;0;L;;;;;N;;;;;
+2851;BRAILLE PATTERN DOTS-157;So;0;L;;;;;N;;;;;
+2852;BRAILLE PATTERN DOTS-257;So;0;L;;;;;N;;;;;
+2853;BRAILLE PATTERN DOTS-1257;So;0;L;;;;;N;;;;;
+2854;BRAILLE PATTERN DOTS-357;So;0;L;;;;;N;;;;;
+2855;BRAILLE PATTERN DOTS-1357;So;0;L;;;;;N;;;;;
+2856;BRAILLE PATTERN DOTS-2357;So;0;L;;;;;N;;;;;
+2857;BRAILLE PATTERN DOTS-12357;So;0;L;;;;;N;;;;;
+2858;BRAILLE PATTERN DOTS-457;So;0;L;;;;;N;;;;;
+2859;BRAILLE PATTERN DOTS-1457;So;0;L;;;;;N;;;;;
+285A;BRAILLE PATTERN DOTS-2457;So;0;L;;;;;N;;;;;
+285B;BRAILLE PATTERN DOTS-12457;So;0;L;;;;;N;;;;;
+285C;BRAILLE PATTERN DOTS-3457;So;0;L;;;;;N;;;;;
+285D;BRAILLE PATTERN DOTS-13457;So;0;L;;;;;N;;;;;
+285E;BRAILLE PATTERN DOTS-23457;So;0;L;;;;;N;;;;;
+285F;BRAILLE PATTERN DOTS-123457;So;0;L;;;;;N;;;;;
+2860;BRAILLE PATTERN DOTS-67;So;0;L;;;;;N;;;;;
+2861;BRAILLE PATTERN DOTS-167;So;0;L;;;;;N;;;;;
+2862;BRAILLE PATTERN DOTS-267;So;0;L;;;;;N;;;;;
+2863;BRAILLE PATTERN DOTS-1267;So;0;L;;;;;N;;;;;
+2864;BRAILLE PATTERN DOTS-367;So;0;L;;;;;N;;;;;
+2865;BRAILLE PATTERN DOTS-1367;So;0;L;;;;;N;;;;;
+2866;BRAILLE PATTERN DOTS-2367;So;0;L;;;;;N;;;;;
+2867;BRAILLE PATTERN DOTS-12367;So;0;L;;;;;N;;;;;
+2868;BRAILLE PATTERN DOTS-467;So;0;L;;;;;N;;;;;
+2869;BRAILLE PATTERN DOTS-1467;So;0;L;;;;;N;;;;;
+286A;BRAILLE PATTERN DOTS-2467;So;0;L;;;;;N;;;;;
+286B;BRAILLE PATTERN DOTS-12467;So;0;L;;;;;N;;;;;
+286C;BRAILLE PATTERN DOTS-3467;So;0;L;;;;;N;;;;;
+286D;BRAILLE PATTERN DOTS-13467;So;0;L;;;;;N;;;;;
+286E;BRAILLE PATTERN DOTS-23467;So;0;L;;;;;N;;;;;
+286F;BRAILLE PATTERN DOTS-123467;So;0;L;;;;;N;;;;;
+2870;BRAILLE PATTERN DOTS-567;So;0;L;;;;;N;;;;;
+2871;BRAILLE PATTERN DOTS-1567;So;0;L;;;;;N;;;;;
+2872;BRAILLE PATTERN DOTS-2567;So;0;L;;;;;N;;;;;
+2873;BRAILLE PATTERN DOTS-12567;So;0;L;;;;;N;;;;;
+2874;BRAILLE PATTERN DOTS-3567;So;0;L;;;;;N;;;;;
+2875;BRAILLE PATTERN DOTS-13567;So;0;L;;;;;N;;;;;
+2876;BRAILLE PATTERN DOTS-23567;So;0;L;;;;;N;;;;;
+2877;BRAILLE PATTERN DOTS-123567;So;0;L;;;;;N;;;;;
+2878;BRAILLE PATTERN DOTS-4567;So;0;L;;;;;N;;;;;
+2879;BRAILLE PATTERN DOTS-14567;So;0;L;;;;;N;;;;;
+287A;BRAILLE PATTERN DOTS-24567;So;0;L;;;;;N;;;;;
+287B;BRAILLE PATTERN DOTS-124567;So;0;L;;;;;N;;;;;
+287C;BRAILLE PATTERN DOTS-34567;So;0;L;;;;;N;;;;;
+287D;BRAILLE PATTERN DOTS-134567;So;0;L;;;;;N;;;;;
+287E;BRAILLE PATTERN DOTS-234567;So;0;L;;;;;N;;;;;
+287F;BRAILLE PATTERN DOTS-1234567;So;0;L;;;;;N;;;;;
+2880;BRAILLE PATTERN DOTS-8;So;0;L;;;;;N;;;;;
+2881;BRAILLE PATTERN DOTS-18;So;0;L;;;;;N;;;;;
+2882;BRAILLE PATTERN DOTS-28;So;0;L;;;;;N;;;;;
+2883;BRAILLE PATTERN DOTS-128;So;0;L;;;;;N;;;;;
+2884;BRAILLE PATTERN DOTS-38;So;0;L;;;;;N;;;;;
+2885;BRAILLE PATTERN DOTS-138;So;0;L;;;;;N;;;;;
+2886;BRAILLE PATTERN DOTS-238;So;0;L;;;;;N;;;;;
+2887;BRAILLE PATTERN DOTS-1238;So;0;L;;;;;N;;;;;
+2888;BRAILLE PATTERN DOTS-48;So;0;L;;;;;N;;;;;
+2889;BRAILLE PATTERN DOTS-148;So;0;L;;;;;N;;;;;
+288A;BRAILLE PATTERN DOTS-248;So;0;L;;;;;N;;;;;
+288B;BRAILLE PATTERN DOTS-1248;So;0;L;;;;;N;;;;;
+288C;BRAILLE PATTERN DOTS-348;So;0;L;;;;;N;;;;;
+288D;BRAILLE PATTERN DOTS-1348;So;0;L;;;;;N;;;;;
+288E;BRAILLE PATTERN DOTS-2348;So;0;L;;;;;N;;;;;
+288F;BRAILLE PATTERN DOTS-12348;So;0;L;;;;;N;;;;;
+2890;BRAILLE PATTERN DOTS-58;So;0;L;;;;;N;;;;;
+2891;BRAILLE PATTERN DOTS-158;So;0;L;;;;;N;;;;;
+2892;BRAILLE PATTERN DOTS-258;So;0;L;;;;;N;;;;;
+2893;BRAILLE PATTERN DOTS-1258;So;0;L;;;;;N;;;;;
+2894;BRAILLE PATTERN DOTS-358;So;0;L;;;;;N;;;;;
+2895;BRAILLE PATTERN DOTS-1358;So;0;L;;;;;N;;;;;
+2896;BRAILLE PATTERN DOTS-2358;So;0;L;;;;;N;;;;;
+2897;BRAILLE PATTERN DOTS-12358;So;0;L;;;;;N;;;;;
+2898;BRAILLE PATTERN DOTS-458;So;0;L;;;;;N;;;;;
+2899;BRAILLE PATTERN DOTS-1458;So;0;L;;;;;N;;;;;
+289A;BRAILLE PATTERN DOTS-2458;So;0;L;;;;;N;;;;;
+289B;BRAILLE PATTERN DOTS-12458;So;0;L;;;;;N;;;;;
+289C;BRAILLE PATTERN DOTS-3458;So;0;L;;;;;N;;;;;
+289D;BRAILLE PATTERN DOTS-13458;So;0;L;;;;;N;;;;;
+289E;BRAILLE PATTERN DOTS-23458;So;0;L;;;;;N;;;;;
+289F;BRAILLE PATTERN DOTS-123458;So;0;L;;;;;N;;;;;
+28A0;BRAILLE PATTERN DOTS-68;So;0;L;;;;;N;;;;;
+28A1;BRAILLE PATTERN DOTS-168;So;0;L;;;;;N;;;;;
+28A2;BRAILLE PATTERN DOTS-268;So;0;L;;;;;N;;;;;
+28A3;BRAILLE PATTERN DOTS-1268;So;0;L;;;;;N;;;;;
+28A4;BRAILLE PATTERN DOTS-368;So;0;L;;;;;N;;;;;
+28A5;BRAILLE PATTERN DOTS-1368;So;0;L;;;;;N;;;;;
+28A6;BRAILLE PATTERN DOTS-2368;So;0;L;;;;;N;;;;;
+28A7;BRAILLE PATTERN DOTS-12368;So;0;L;;;;;N;;;;;
+28A8;BRAILLE PATTERN DOTS-468;So;0;L;;;;;N;;;;;
+28A9;BRAILLE PATTERN DOTS-1468;So;0;L;;;;;N;;;;;
+28AA;BRAILLE PATTERN DOTS-2468;So;0;L;;;;;N;;;;;
+28AB;BRAILLE PATTERN DOTS-12468;So;0;L;;;;;N;;;;;
+28AC;BRAILLE PATTERN DOTS-3468;So;0;L;;;;;N;;;;;
+28AD;BRAILLE PATTERN DOTS-13468;So;0;L;;;;;N;;;;;
+28AE;BRAILLE PATTERN DOTS-23468;So;0;L;;;;;N;;;;;
+28AF;BRAILLE PATTERN DOTS-123468;So;0;L;;;;;N;;;;;
+28B0;BRAILLE PATTERN DOTS-568;So;0;L;;;;;N;;;;;
+28B1;BRAILLE PATTERN DOTS-1568;So;0;L;;;;;N;;;;;
+28B2;BRAILLE PATTERN DOTS-2568;So;0;L;;;;;N;;;;;
+28B3;BRAILLE PATTERN DOTS-12568;So;0;L;;;;;N;;;;;
+28B4;BRAILLE PATTERN DOTS-3568;So;0;L;;;;;N;;;;;
+28B5;BRAILLE PATTERN DOTS-13568;So;0;L;;;;;N;;;;;
+28B6;BRAILLE PATTERN DOTS-23568;So;0;L;;;;;N;;;;;
+28B7;BRAILLE PATTERN DOTS-123568;So;0;L;;;;;N;;;;;
+28B8;BRAILLE PATTERN DOTS-4568;So;0;L;;;;;N;;;;;
+28B9;BRAILLE PATTERN DOTS-14568;So;0;L;;;;;N;;;;;
+28BA;BRAILLE PATTERN DOTS-24568;So;0;L;;;;;N;;;;;
+28BB;BRAILLE PATTERN DOTS-124568;So;0;L;;;;;N;;;;;
+28BC;BRAILLE PATTERN DOTS-34568;So;0;L;;;;;N;;;;;
+28BD;BRAILLE PATTERN DOTS-134568;So;0;L;;;;;N;;;;;
+28BE;BRAILLE PATTERN DOTS-234568;So;0;L;;;;;N;;;;;
+28BF;BRAILLE PATTERN DOTS-1234568;So;0;L;;;;;N;;;;;
+28C0;BRAILLE PATTERN DOTS-78;So;0;L;;;;;N;;;;;
+28C1;BRAILLE PATTERN DOTS-178;So;0;L;;;;;N;;;;;
+28C2;BRAILLE PATTERN DOTS-278;So;0;L;;;;;N;;;;;
+28C3;BRAILLE PATTERN DOTS-1278;So;0;L;;;;;N;;;;;
+28C4;BRAILLE PATTERN DOTS-378;So;0;L;;;;;N;;;;;
+28C5;BRAILLE PATTERN DOTS-1378;So;0;L;;;;;N;;;;;
+28C6;BRAILLE PATTERN DOTS-2378;So;0;L;;;;;N;;;;;
+28C7;BRAILLE PATTERN DOTS-12378;So;0;L;;;;;N;;;;;
+28C8;BRAILLE PATTERN DOTS-478;So;0;L;;;;;N;;;;;
+28C9;BRAILLE PATTERN DOTS-1478;So;0;L;;;;;N;;;;;
+28CA;BRAILLE PATTERN DOTS-2478;So;0;L;;;;;N;;;;;
+28CB;BRAILLE PATTERN DOTS-12478;So;0;L;;;;;N;;;;;
+28CC;BRAILLE PATTERN DOTS-3478;So;0;L;;;;;N;;;;;
+28CD;BRAILLE PATTERN DOTS-13478;So;0;L;;;;;N;;;;;
+28CE;BRAILLE PATTERN DOTS-23478;So;0;L;;;;;N;;;;;
+28CF;BRAILLE PATTERN DOTS-123478;So;0;L;;;;;N;;;;;
+28D0;BRAILLE PATTERN DOTS-578;So;0;L;;;;;N;;;;;
+28D1;BRAILLE PATTERN DOTS-1578;So;0;L;;;;;N;;;;;
+28D2;BRAILLE PATTERN DOTS-2578;So;0;L;;;;;N;;;;;
+28D3;BRAILLE PATTERN DOTS-12578;So;0;L;;;;;N;;;;;
+28D4;BRAILLE PATTERN DOTS-3578;So;0;L;;;;;N;;;;;
+28D5;BRAILLE PATTERN DOTS-13578;So;0;L;;;;;N;;;;;
+28D6;BRAILLE PATTERN DOTS-23578;So;0;L;;;;;N;;;;;
+28D7;BRAILLE PATTERN DOTS-123578;So;0;L;;;;;N;;;;;
+28D8;BRAILLE PATTERN DOTS-4578;So;0;L;;;;;N;;;;;
+28D9;BRAILLE PATTERN DOTS-14578;So;0;L;;;;;N;;;;;
+28DA;BRAILLE PATTERN DOTS-24578;So;0;L;;;;;N;;;;;
+28DB;BRAILLE PATTERN DOTS-124578;So;0;L;;;;;N;;;;;
+28DC;BRAILLE PATTERN DOTS-34578;So;0;L;;;;;N;;;;;
+28DD;BRAILLE PATTERN DOTS-134578;So;0;L;;;;;N;;;;;
+28DE;BRAILLE PATTERN DOTS-234578;So;0;L;;;;;N;;;;;
+28DF;BRAILLE PATTERN DOTS-1234578;So;0;L;;;;;N;;;;;
+28E0;BRAILLE PATTERN DOTS-678;So;0;L;;;;;N;;;;;
+28E1;BRAILLE PATTERN DOTS-1678;So;0;L;;;;;N;;;;;
+28E2;BRAILLE PATTERN DOTS-2678;So;0;L;;;;;N;;;;;
+28E3;BRAILLE PATTERN DOTS-12678;So;0;L;;;;;N;;;;;
+28E4;BRAILLE PATTERN DOTS-3678;So;0;L;;;;;N;;;;;
+28E5;BRAILLE PATTERN DOTS-13678;So;0;L;;;;;N;;;;;
+28E6;BRAILLE PATTERN DOTS-23678;So;0;L;;;;;N;;;;;
+28E7;BRAILLE PATTERN DOTS-123678;So;0;L;;;;;N;;;;;
+28E8;BRAILLE PATTERN DOTS-4678;So;0;L;;;;;N;;;;;
+28E9;BRAILLE PATTERN DOTS-14678;So;0;L;;;;;N;;;;;
+28EA;BRAILLE PATTERN DOTS-24678;So;0;L;;;;;N;;;;;
+28EB;BRAILLE PATTERN DOTS-124678;So;0;L;;;;;N;;;;;
+28EC;BRAILLE PATTERN DOTS-34678;So;0;L;;;;;N;;;;;
+28ED;BRAILLE PATTERN DOTS-134678;So;0;L;;;;;N;;;;;
+28EE;BRAILLE PATTERN DOTS-234678;So;0;L;;;;;N;;;;;
+28EF;BRAILLE PATTERN DOTS-1234678;So;0;L;;;;;N;;;;;
+28F0;BRAILLE PATTERN DOTS-5678;So;0;L;;;;;N;;;;;
+28F1;BRAILLE PATTERN DOTS-15678;So;0;L;;;;;N;;;;;
+28F2;BRAILLE PATTERN DOTS-25678;So;0;L;;;;;N;;;;;
+28F3;BRAILLE PATTERN DOTS-125678;So;0;L;;;;;N;;;;;
+28F4;BRAILLE PATTERN DOTS-35678;So;0;L;;;;;N;;;;;
+28F5;BRAILLE PATTERN DOTS-135678;So;0;L;;;;;N;;;;;
+28F6;BRAILLE PATTERN DOTS-235678;So;0;L;;;;;N;;;;;
+28F7;BRAILLE PATTERN DOTS-1235678;So;0;L;;;;;N;;;;;
+28F8;BRAILLE PATTERN DOTS-45678;So;0;L;;;;;N;;;;;
+28F9;BRAILLE PATTERN DOTS-145678;So;0;L;;;;;N;;;;;
+28FA;BRAILLE PATTERN DOTS-245678;So;0;L;;;;;N;;;;;
+28FB;BRAILLE PATTERN DOTS-1245678;So;0;L;;;;;N;;;;;
+28FC;BRAILLE PATTERN DOTS-345678;So;0;L;;;;;N;;;;;
+28FD;BRAILLE PATTERN DOTS-1345678;So;0;L;;;;;N;;;;;
+28FE;BRAILLE PATTERN DOTS-2345678;So;0;L;;;;;N;;;;;
+28FF;BRAILLE PATTERN DOTS-12345678;So;0;L;;;;;N;;;;;
+2900;RIGHTWARDS TWO-HEADED ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2901;RIGHTWARDS TWO-HEADED ARROW WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2902;LEFTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2903;RIGHTWARDS DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2904;LEFT RIGHT DOUBLE ARROW WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2905;RIGHTWARDS TWO-HEADED ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+2906;LEFTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+2907;RIGHTWARDS DOUBLE ARROW FROM BAR;Sm;0;ON;;;;;N;;;;;
+2908;DOWNWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+2909;UPWARDS ARROW WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+290A;UPWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;;
+290B;DOWNWARDS TRIPLE ARROW;Sm;0;ON;;;;;N;;;;;
+290C;LEFTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+290D;RIGHTWARDS DOUBLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+290E;LEFTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+290F;RIGHTWARDS TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+2910;RIGHTWARDS TWO-HEADED TRIPLE DASH ARROW;Sm;0;ON;;;;;N;;;;;
+2911;RIGHTWARDS ARROW WITH DOTTED STEM;Sm;0;ON;;;;;N;;;;;
+2912;UPWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;;
+2913;DOWNWARDS ARROW TO BAR;Sm;0;ON;;;;;N;;;;;
+2914;RIGHTWARDS ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2915;RIGHTWARDS ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2916;RIGHTWARDS TWO-HEADED ARROW WITH TAIL;Sm;0;ON;;;;;N;;;;;
+2917;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2918;RIGHTWARDS TWO-HEADED ARROW WITH TAIL WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2919;LEFTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
+291A;RIGHTWARDS ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
+291B;LEFTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
+291C;RIGHTWARDS DOUBLE ARROW-TAIL;Sm;0;ON;;;;;N;;;;;
+291D;LEFTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+291E;RIGHTWARDS ARROW TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+291F;LEFTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+2920;RIGHTWARDS ARROW FROM BAR TO BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+2921;NORTH WEST AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2922;NORTH EAST AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
+2923;NORTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
+2924;NORTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
+2925;SOUTH EAST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
+2926;SOUTH WEST ARROW WITH HOOK;Sm;0;ON;;;;;N;;;;;
+2927;NORTH WEST ARROW AND NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2928;NORTH EAST ARROW AND SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2929;SOUTH EAST ARROW AND SOUTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
+292A;SOUTH WEST ARROW AND NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
+292B;RISING DIAGONAL CROSSING FALLING DIAGONAL;Sm;0;ON;;;;;N;;;;;
+292C;FALLING DIAGONAL CROSSING RISING DIAGONAL;Sm;0;ON;;;;;N;;;;;
+292D;SOUTH EAST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+292E;NORTH EAST ARROW CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+292F;FALLING DIAGONAL CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2930;RISING DIAGONAL CROSSING SOUTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2931;NORTH EAST ARROW CROSSING NORTH WEST ARROW;Sm;0;ON;;;;;N;;;;;
+2932;NORTH WEST ARROW CROSSING NORTH EAST ARROW;Sm;0;ON;;;;;N;;;;;
+2933;WAVE ARROW POINTING DIRECTLY RIGHT;Sm;0;ON;;;;;N;;;;;
+2934;ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS;Sm;0;ON;;;;;N;;;;;
+2935;ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS;Sm;0;ON;;;;;N;;;;;
+2936;ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS;Sm;0;ON;;;;;N;;;;;
+2937;ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS;Sm;0;ON;;;;;N;;;;;
+2938;RIGHT-SIDE ARC CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+2939;LEFT-SIDE ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+293A;TOP ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+293B;BOTTOM ARC ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+293C;TOP ARC CLOCKWISE ARROW WITH MINUS;Sm;0;ON;;;;;N;;;;;
+293D;TOP ARC ANTICLOCKWISE ARROW WITH PLUS;Sm;0;ON;;;;;N;;;;;
+293E;LOWER RIGHT SEMICIRCULAR CLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+293F;LOWER LEFT SEMICIRCULAR ANTICLOCKWISE ARROW;Sm;0;ON;;;;;N;;;;;
+2940;ANTICLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
+2941;CLOCKWISE CLOSED CIRCLE ARROW;Sm;0;ON;;;;;N;;;;;
+2942;RIGHTWARDS ARROW ABOVE SHORT LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2943;LEFTWARDS ARROW ABOVE SHORT RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2944;SHORT RIGHTWARDS ARROW ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2945;RIGHTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;;
+2946;LEFTWARDS ARROW WITH PLUS BELOW;Sm;0;ON;;;;;N;;;;;
+2947;RIGHTWARDS ARROW THROUGH X;Sm;0;ON;;;;;N;;;;;
+2948;LEFT RIGHT ARROW THROUGH SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+2949;UPWARDS TWO-HEADED ARROW FROM SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+294A;LEFT BARB UP RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;;
+294B;LEFT BARB DOWN RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;;
+294C;UP BARB RIGHT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;;
+294D;UP BARB LEFT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;;
+294E;LEFT BARB UP RIGHT BARB UP HARPOON;Sm;0;ON;;;;;N;;;;;
+294F;UP BARB RIGHT DOWN BARB RIGHT HARPOON;Sm;0;ON;;;;;N;;;;;
+2950;LEFT BARB DOWN RIGHT BARB DOWN HARPOON;Sm;0;ON;;;;;N;;;;;
+2951;UP BARB LEFT DOWN BARB LEFT HARPOON;Sm;0;ON;;;;;N;;;;;
+2952;LEFTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;;
+2953;RIGHTWARDS HARPOON WITH BARB UP TO BAR;Sm;0;ON;;;;;N;;;;;
+2954;UPWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;;
+2955;DOWNWARDS HARPOON WITH BARB RIGHT TO BAR;Sm;0;ON;;;;;N;;;;;
+2956;LEFTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;;
+2957;RIGHTWARDS HARPOON WITH BARB DOWN TO BAR;Sm;0;ON;;;;;N;;;;;
+2958;UPWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;;
+2959;DOWNWARDS HARPOON WITH BARB LEFT TO BAR;Sm;0;ON;;;;;N;;;;;
+295A;LEFTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;;
+295B;RIGHTWARDS HARPOON WITH BARB UP FROM BAR;Sm;0;ON;;;;;N;;;;;
+295C;UPWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;;
+295D;DOWNWARDS HARPOON WITH BARB RIGHT FROM BAR;Sm;0;ON;;;;;N;;;;;
+295E;LEFTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;;
+295F;RIGHTWARDS HARPOON WITH BARB DOWN FROM BAR;Sm;0;ON;;;;;N;;;;;
+2960;UPWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;;
+2961;DOWNWARDS HARPOON WITH BARB LEFT FROM BAR;Sm;0;ON;;;;;N;;;;;
+2962;LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
+2963;UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
+2964;RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
+2965;DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
+2966;LEFTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;;
+2967;LEFTWARDS HARPOON WITH BARB DOWN ABOVE RIGHTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
+2968;RIGHTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS HARPOON WITH BARB UP;Sm;0;ON;;;;;N;;;;;
+2969;RIGHTWARDS HARPOON WITH BARB DOWN ABOVE LEFTWARDS HARPOON WITH BARB DOWN;Sm;0;ON;;;;;N;;;;;
+296A;LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;;
+296B;LEFTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;;
+296C;RIGHTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;Sm;0;ON;;;;;N;;;;;
+296D;RIGHTWARDS HARPOON WITH BARB DOWN BELOW LONG DASH;Sm;0;ON;;;;;N;;;;;
+296E;UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
+296F;DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON WITH BARB RIGHT;Sm;0;ON;;;;;N;;;;;
+2970;RIGHT DOUBLE ARROW WITH ROUNDED HEAD;Sm;0;ON;;;;;N;;;;;
+2971;EQUALS SIGN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2972;TILDE OPERATOR ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2973;LEFTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
+2974;RIGHTWARDS ARROW ABOVE TILDE OPERATOR;Sm;0;ON;;;;;N;;;;;
+2975;RIGHTWARDS ARROW ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2976;LESS-THAN ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2977;LEFTWARDS ARROW THROUGH LESS-THAN;Sm;0;ON;;;;;N;;;;;
+2978;GREATER-THAN ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+2979;SUBSET ABOVE RIGHTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+297A;LEFTWARDS ARROW THROUGH SUBSET;Sm;0;ON;;;;;N;;;;;
+297B;SUPERSET ABOVE LEFTWARDS ARROW;Sm;0;ON;;;;;N;;;;;
+297C;LEFT FISH TAIL;Sm;0;ON;;;;;N;;;;;
+297D;RIGHT FISH TAIL;Sm;0;ON;;;;;N;;;;;
+297E;UP FISH TAIL;Sm;0;ON;;;;;N;;;;;
+297F;DOWN FISH TAIL;Sm;0;ON;;;;;N;;;;;
+2980;TRIPLE VERTICAL BAR DELIMITER;Sm;0;ON;;;;;N;;;;;
+2981;Z NOTATION SPOT;Sm;0;ON;;;;;N;;;;;
+2982;Z NOTATION TYPE COLON;Sm;0;ON;;;;;N;;;;;
+2983;LEFT WHITE CURLY BRACKET;Ps;0;ON;;;;;Y;;;;;
+2984;RIGHT WHITE CURLY BRACKET;Pe;0;ON;;;;;Y;;;;;
+2985;LEFT WHITE PARENTHESIS;Ps;0;ON;;;;;Y;;;;;
+2986;RIGHT WHITE PARENTHESIS;Pe;0;ON;;;;;Y;;;;;
+2987;Z NOTATION LEFT IMAGE BRACKET;Ps;0;ON;;;;;Y;;;;;
+2988;Z NOTATION RIGHT IMAGE BRACKET;Pe;0;ON;;;;;Y;;;;;
+2989;Z NOTATION LEFT BINDING BRACKET;Ps;0;ON;;;;;Y;;;;;
+298A;Z NOTATION RIGHT BINDING BRACKET;Pe;0;ON;;;;;Y;;;;;
+298B;LEFT SQUARE BRACKET WITH UNDERBAR;Ps;0;ON;;;;;Y;;;;;
+298C;RIGHT SQUARE BRACKET WITH UNDERBAR;Pe;0;ON;;;;;Y;;;;;
+298D;LEFT SQUARE BRACKET WITH TICK IN TOP CORNER;Ps;0;ON;;;;;Y;;;;;
+298E;RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Pe;0;ON;;;;;Y;;;;;
+298F;LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER;Ps;0;ON;;;;;Y;;;;;
+2990;RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER;Pe;0;ON;;;;;Y;;;;;
+2991;LEFT ANGLE BRACKET WITH DOT;Ps;0;ON;;;;;Y;;;;;
+2992;RIGHT ANGLE BRACKET WITH DOT;Pe;0;ON;;;;;Y;;;;;
+2993;LEFT ARC LESS-THAN BRACKET;Ps;0;ON;;;;;Y;;;;;
+2994;RIGHT ARC GREATER-THAN BRACKET;Pe;0;ON;;;;;Y;;;;;
+2995;DOUBLE LEFT ARC GREATER-THAN BRACKET;Ps;0;ON;;;;;Y;;;;;
+2996;DOUBLE RIGHT ARC LESS-THAN BRACKET;Pe;0;ON;;;;;Y;;;;;
+2997;LEFT BLACK TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;;;;;
+2998;RIGHT BLACK TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;;;;;
+2999;DOTTED FENCE;Sm;0;ON;;;;;N;;;;;
+299A;VERTICAL ZIGZAG LINE;Sm;0;ON;;;;;N;;;;;
+299B;MEASURED ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;;
+299C;RIGHT ANGLE VARIANT WITH SQUARE;Sm;0;ON;;;;;Y;;;;;
+299D;MEASURED RIGHT ANGLE WITH DOT;Sm;0;ON;;;;;Y;;;;;
+299E;ANGLE WITH S INSIDE;Sm;0;ON;;;;;Y;;;;;
+299F;ACUTE ANGLE;Sm;0;ON;;;;;Y;;;;;
+29A0;SPHERICAL ANGLE OPENING LEFT;Sm;0;ON;;;;;Y;;;;;
+29A1;SPHERICAL ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;;
+29A2;TURNED ANGLE;Sm;0;ON;;;;;Y;;;;;
+29A3;REVERSED ANGLE;Sm;0;ON;;;;;Y;;;;;
+29A4;ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+29A5;REVERSED ANGLE WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+29A6;OBLIQUE ANGLE OPENING UP;Sm;0;ON;;;;;Y;;;;;
+29A7;OBLIQUE ANGLE OPENING DOWN;Sm;0;ON;;;;;Y;;;;;
+29A8;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT;Sm;0;ON;;;;;Y;;;;;
+29A9;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT;Sm;0;ON;;;;;Y;;;;;
+29AA;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT;Sm;0;ON;;;;;Y;;;;;
+29AB;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT;Sm;0;ON;;;;;Y;;;;;
+29AC;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP;Sm;0;ON;;;;;Y;;;;;
+29AD;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP;Sm;0;ON;;;;;Y;;;;;
+29AE;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN;Sm;0;ON;;;;;Y;;;;;
+29AF;MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN;Sm;0;ON;;;;;Y;;;;;
+29B0;REVERSED EMPTY SET;Sm;0;ON;;;;;N;;;;;
+29B1;EMPTY SET WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
+29B2;EMPTY SET WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
+29B3;EMPTY SET WITH RIGHT ARROW ABOVE;Sm;0;ON;;;;;N;;;;;
+29B4;EMPTY SET WITH LEFT ARROW ABOVE;Sm;0;ON;;;;;N;;;;;
+29B5;CIRCLE WITH HORIZONTAL BAR;Sm;0;ON;;;;;N;;;;;
+29B6;CIRCLED VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+29B7;CIRCLED PARALLEL;Sm;0;ON;;;;;N;;;;;
+29B8;CIRCLED REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;;
+29B9;CIRCLED PERPENDICULAR;Sm;0;ON;;;;;N;;;;;
+29BA;CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF DIVIDED BY VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+29BB;CIRCLE WITH SUPERIMPOSED X;Sm;0;ON;;;;;N;;;;;
+29BC;CIRCLED ANTICLOCKWISE-ROTATED DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+29BD;UP ARROW THROUGH CIRCLE;Sm;0;ON;;;;;N;;;;;
+29BE;CIRCLED WHITE BULLET;Sm;0;ON;;;;;N;;;;;
+29BF;CIRCLED BULLET;Sm;0;ON;;;;;N;;;;;
+29C0;CIRCLED LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+29C1;CIRCLED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+29C2;CIRCLE WITH SMALL CIRCLE TO THE RIGHT;Sm;0;ON;;;;;Y;;;;;
+29C3;CIRCLE WITH TWO HORIZONTAL STROKES TO THE RIGHT;Sm;0;ON;;;;;Y;;;;;
+29C4;SQUARED RISING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;;
+29C5;SQUARED FALLING DIAGONAL SLASH;Sm;0;ON;;;;;Y;;;;;
+29C6;SQUARED ASTERISK;Sm;0;ON;;;;;N;;;;;
+29C7;SQUARED SMALL CIRCLE;Sm;0;ON;;;;;N;;;;;
+29C8;SQUARED SQUARE;Sm;0;ON;;;;;N;;;;;
+29C9;TWO JOINED SQUARES;Sm;0;ON;;;;;Y;;;;;
+29CA;TRIANGLE WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+29CB;TRIANGLE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+29CC;S IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
+29CD;TRIANGLE WITH SERIFS AT BOTTOM;Sm;0;ON;;;;;N;;;;;
+29CE;RIGHT TRIANGLE ABOVE LEFT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+29CF;LEFT TRIANGLE BESIDE VERTICAL BAR;Sm;0;ON;;;;;Y;;;;;
+29D0;VERTICAL BAR BESIDE RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+29D1;BOWTIE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29D2;BOWTIE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29D3;BLACK BOWTIE;Sm;0;ON;;;;;N;;;;;
+29D4;TIMES WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29D5;TIMES WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29D6;WHITE HOURGLASS;Sm;0;ON;;;;;N;;;;;
+29D7;BLACK HOURGLASS;Sm;0;ON;;;;;N;;;;;
+29D8;LEFT WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;;
+29D9;RIGHT WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;;
+29DA;LEFT DOUBLE WIGGLY FENCE;Ps;0;ON;;;;;Y;;;;;
+29DB;RIGHT DOUBLE WIGGLY FENCE;Pe;0;ON;;;;;Y;;;;;
+29DC;INCOMPLETE INFINITY;Sm;0;ON;;;;;Y;;;;;
+29DD;TIE OVER INFINITY;Sm;0;ON;;;;;N;;;;;
+29DE;INFINITY NEGATED WITH VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+29DF;DOUBLE-ENDED MULTIMAP;Sm;0;ON;;;;;N;;;;;
+29E0;SQUARE WITH CONTOURED OUTLINE;Sm;0;ON;;;;;N;;;;;
+29E1;INCREASES AS;Sm;0;ON;;;;;Y;;;;;
+29E2;SHUFFLE PRODUCT;Sm;0;ON;;;;;N;;;;;
+29E3;EQUALS SIGN AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;;
+29E4;EQUALS SIGN AND SLANTED PARALLEL WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;;
+29E5;IDENTICAL TO AND SLANTED PARALLEL;Sm;0;ON;;;;;Y;;;;;
+29E6;GLEICH STARK;Sm;0;ON;;;;;N;;;;;
+29E7;THERMODYNAMIC;Sm;0;ON;;;;;N;;;;;
+29E8;DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29E9;DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK;Sm;0;ON;;;;;Y;;;;;
+29EA;BLACK DIAMOND WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;
+29EB;BLACK LOZENGE;Sm;0;ON;;;;;N;;;;;
+29EC;WHITE CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;
+29ED;BLACK CIRCLE WITH DOWN ARROW;Sm;0;ON;;;;;N;;;;;
+29EE;ERROR-BARRED WHITE SQUARE;Sm;0;ON;;;;;N;;;;;
+29EF;ERROR-BARRED BLACK SQUARE;Sm;0;ON;;;;;N;;;;;
+29F0;ERROR-BARRED WHITE DIAMOND;Sm;0;ON;;;;;N;;;;;
+29F1;ERROR-BARRED BLACK DIAMOND;Sm;0;ON;;;;;N;;;;;
+29F2;ERROR-BARRED WHITE CIRCLE;Sm;0;ON;;;;;N;;;;;
+29F3;ERROR-BARRED BLACK CIRCLE;Sm;0;ON;;;;;N;;;;;
+29F4;RULE-DELAYED;Sm;0;ON;;;;;Y;;;;;
+29F5;REVERSE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;;
+29F6;SOLIDUS WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+29F7;REVERSE SOLIDUS WITH HORIZONTAL STROKE;Sm;0;ON;;;;;Y;;;;;
+29F8;BIG SOLIDUS;Sm;0;ON;;;;;Y;;;;;
+29F9;BIG REVERSE SOLIDUS;Sm;0;ON;;;;;Y;;;;;
+29FA;DOUBLE PLUS;Sm;0;ON;;;;;N;;;;;
+29FB;TRIPLE PLUS;Sm;0;ON;;;;;N;;;;;
+29FC;LEFT-POINTING CURVED ANGLE BRACKET;Ps;0;ON;;;;;Y;;;;;
+29FD;RIGHT-POINTING CURVED ANGLE BRACKET;Pe;0;ON;;;;;Y;;;;;
+29FE;TINY;Sm;0;ON;;;;;N;;;;;
+29FF;MINY;Sm;0;ON;;;;;N;;;;;
+2A00;N-ARY CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A01;N-ARY CIRCLED PLUS OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A02;N-ARY CIRCLED TIMES OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A03;N-ARY UNION OPERATOR WITH DOT;Sm;0;ON;;;;;N;;;;;
+2A04;N-ARY UNION OPERATOR WITH PLUS;Sm;0;ON;;;;;N;;;;;
+2A05;N-ARY SQUARE INTERSECTION OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A06;N-ARY SQUARE UNION OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A07;TWO LOGICAL AND OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A08;TWO LOGICAL OR OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A09;N-ARY TIMES OPERATOR;Sm;0;ON;;;;;N;;;;;
+2A0A;MODULO TWO SUM;Sm;0;ON;;;;;Y;;;;;
+2A0B;SUMMATION WITH INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2A0C;QUADRUPLE INTEGRAL OPERATOR;Sm;0;ON;<compat> 222B 222B 222B 222B;;;;Y;;;;;
+2A0D;FINITE PART INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2A0E;INTEGRAL WITH DOUBLE STROKE;Sm;0;ON;;;;;Y;;;;;
+2A0F;INTEGRAL AVERAGE WITH SLASH;Sm;0;ON;;;;;Y;;;;;
+2A10;CIRCULATION FUNCTION;Sm;0;ON;;;;;Y;;;;;
+2A11;ANTICLOCKWISE INTEGRATION;Sm;0;ON;;;;;Y;;;;;
+2A12;LINE INTEGRATION WITH RECTANGULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;;
+2A13;LINE INTEGRATION WITH SEMICIRCULAR PATH AROUND POLE;Sm;0;ON;;;;;Y;;;;;
+2A14;LINE INTEGRATION NOT INCLUDING THE POLE;Sm;0;ON;;;;;Y;;;;;
+2A15;INTEGRAL AROUND A POINT OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2A16;QUATERNION INTEGRAL OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2A17;INTEGRAL WITH LEFTWARDS ARROW WITH HOOK;Sm;0;ON;;;;;Y;;;;;
+2A18;INTEGRAL WITH TIMES SIGN;Sm;0;ON;;;;;Y;;;;;
+2A19;INTEGRAL WITH INTERSECTION;Sm;0;ON;;;;;Y;;;;;
+2A1A;INTEGRAL WITH UNION;Sm;0;ON;;;;;Y;;;;;
+2A1B;INTEGRAL WITH OVERBAR;Sm;0;ON;;;;;Y;;;;;
+2A1C;INTEGRAL WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+2A1D;JOIN;Sm;0;ON;;;;;N;;;;;
+2A1E;LARGE LEFT TRIANGLE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2A1F;Z NOTATION SCHEMA COMPOSITION;Sm;0;ON;;;;;Y;;;;;
+2A20;Z NOTATION SCHEMA PIPING;Sm;0;ON;;;;;Y;;;;;
+2A21;Z NOTATION SCHEMA PROJECTION;Sm;0;ON;;;;;Y;;;;;
+2A22;PLUS SIGN WITH SMALL CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
+2A23;PLUS SIGN WITH CIRCUMFLEX ACCENT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A24;PLUS SIGN WITH TILDE ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A25;PLUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;
+2A26;PLUS SIGN WITH TILDE BELOW;Sm;0;ON;;;;;Y;;;;;
+2A27;PLUS SIGN WITH SUBSCRIPT TWO;Sm;0;ON;;;;;N;;;;;
+2A28;PLUS SIGN WITH BLACK TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2A29;MINUS SIGN WITH COMMA ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A2A;MINUS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;
+2A2B;MINUS SIGN WITH FALLING DOTS;Sm;0;ON;;;;;Y;;;;;
+2A2C;MINUS SIGN WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;;
+2A2D;PLUS SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
+2A2E;PLUS SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
+2A2F;VECTOR OR CROSS PRODUCT;Sm;0;ON;;;;;N;;;;;
+2A30;MULTIPLICATION SIGN WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A31;MULTIPLICATION SIGN WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A32;SEMIDIRECT PRODUCT WITH BOTTOM CLOSED;Sm;0;ON;;;;;N;;;;;
+2A33;SMASH PRODUCT;Sm;0;ON;;;;;N;;;;;
+2A34;MULTIPLICATION SIGN IN LEFT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
+2A35;MULTIPLICATION SIGN IN RIGHT HALF CIRCLE;Sm;0;ON;;;;;Y;;;;;
+2A36;CIRCLED MULTIPLICATION SIGN WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;N;;;;;
+2A37;MULTIPLICATION SIGN IN DOUBLE CIRCLE;Sm;0;ON;;;;;N;;;;;
+2A38;CIRCLED DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+2A39;PLUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2A3A;MINUS SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2A3B;MULTIPLICATION SIGN IN TRIANGLE;Sm;0;ON;;;;;N;;;;;
+2A3C;INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2A3D;RIGHTHAND INTERIOR PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2A3E;Z NOTATION RELATIONAL COMPOSITION;Sm;0;ON;;;;;Y;;;;;
+2A3F;AMALGAMATION OR COPRODUCT;Sm;0;ON;;;;;N;;;;;
+2A40;INTERSECTION WITH DOT;Sm;0;ON;;;;;N;;;;;
+2A41;UNION WITH MINUS SIGN;Sm;0;ON;;;;;N;;;;;
+2A42;UNION WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
+2A43;INTERSECTION WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
+2A44;INTERSECTION WITH LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2A45;UNION WITH LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2A46;UNION ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2A47;INTERSECTION ABOVE UNION;Sm;0;ON;;;;;N;;;;;
+2A48;UNION ABOVE BAR ABOVE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2A49;INTERSECTION ABOVE BAR ABOVE UNION;Sm;0;ON;;;;;N;;;;;
+2A4A;UNION BESIDE AND JOINED WITH UNION;Sm;0;ON;;;;;N;;;;;
+2A4B;INTERSECTION BESIDE AND JOINED WITH INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2A4C;CLOSED UNION WITH SERIFS;Sm;0;ON;;;;;N;;;;;
+2A4D;CLOSED INTERSECTION WITH SERIFS;Sm;0;ON;;;;;N;;;;;
+2A4E;DOUBLE SQUARE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2A4F;DOUBLE SQUARE UNION;Sm;0;ON;;;;;N;;;;;
+2A50;CLOSED UNION WITH SERIFS AND SMASH PRODUCT;Sm;0;ON;;;;;N;;;;;
+2A51;LOGICAL AND WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A52;LOGICAL OR WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A53;DOUBLE LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2A54;DOUBLE LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2A55;TWO INTERSECTING LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2A56;TWO INTERSECTING LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2A57;SLOPING LARGE OR;Sm;0;ON;;;;;Y;;;;;
+2A58;SLOPING LARGE AND;Sm;0;ON;;;;;Y;;;;;
+2A59;LOGICAL OR OVERLAPPING LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2A5A;LOGICAL AND WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;;
+2A5B;LOGICAL OR WITH MIDDLE STEM;Sm;0;ON;;;;;N;;;;;
+2A5C;LOGICAL AND WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;;
+2A5D;LOGICAL OR WITH HORIZONTAL DASH;Sm;0;ON;;;;;N;;;;;
+2A5E;LOGICAL AND WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;;
+2A5F;LOGICAL AND WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A60;LOGICAL AND WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A61;SMALL VEE WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A62;LOGICAL OR WITH DOUBLE OVERBAR;Sm;0;ON;;;;;N;;;;;
+2A63;LOGICAL OR WITH DOUBLE UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2A64;Z NOTATION DOMAIN ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;;
+2A65;Z NOTATION RANGE ANTIRESTRICTION;Sm;0;ON;;;;;Y;;;;;
+2A66;EQUALS SIGN WITH DOT BELOW;Sm;0;ON;;;;;N;;;;;
+2A67;IDENTICAL WITH DOT ABOVE;Sm;0;ON;;;;;N;;;;;
+2A68;TRIPLE HORIZONTAL BAR WITH DOUBLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2A69;TRIPLE HORIZONTAL BAR WITH TRIPLE VERTICAL STROKE;Sm;0;ON;;;;;N;;;;;
+2A6A;TILDE OPERATOR WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A6B;TILDE OPERATOR WITH RISING DOTS;Sm;0;ON;;;;;Y;;;;;
+2A6C;SIMILAR MINUS SIMILAR;Sm;0;ON;;;;;Y;;;;;
+2A6D;CONGRUENT WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A6E;EQUALS WITH ASTERISK;Sm;0;ON;;;;;N;;;;;
+2A6F;ALMOST EQUAL TO WITH CIRCUMFLEX ACCENT;Sm;0;ON;;;;;Y;;;;;
+2A70;APPROXIMATELY EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A71;EQUALS SIGN ABOVE PLUS SIGN;Sm;0;ON;;;;;N;;;;;
+2A72;PLUS SIGN ABOVE EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
+2A73;EQUALS SIGN ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2A74;DOUBLE COLON EQUAL;Sm;0;ON;<compat> 003A 003A 003D;;;;Y;;;;;
+2A75;TWO CONSECUTIVE EQUALS SIGNS;Sm;0;ON;<compat> 003D 003D;;;;N;;;;;
+2A76;THREE CONSECUTIVE EQUALS SIGNS;Sm;0;ON;<compat> 003D 003D 003D;;;;N;;;;;
+2A77;EQUALS SIGN WITH TWO DOTS ABOVE AND TWO DOTS BELOW;Sm;0;ON;;;;;N;;;;;
+2A78;EQUIVALENT WITH FOUR DOTS ABOVE;Sm;0;ON;;;;;N;;;;;
+2A79;LESS-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A7A;GREATER-THAN WITH CIRCLE INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A7B;LESS-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A7C;GREATER-THAN WITH QUESTION MARK ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A7D;LESS-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A7E;GREATER-THAN OR SLANTED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A7F;LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A80;GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A81;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A82;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2A83;LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT;Sm;0;ON;;;;;Y;;;;;
+2A84;GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT;Sm;0;ON;;;;;Y;;;;;
+2A85;LESS-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
+2A86;GREATER-THAN OR APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
+2A87;LESS-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A88;GREATER-THAN AND SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2A89;LESS-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
+2A8A;GREATER-THAN AND NOT APPROXIMATE;Sm;0;ON;;;;;Y;;;;;
+2A8B;LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A8C;GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A8D;LESS-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A8E;GREATER-THAN ABOVE SIMILAR OR EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A8F;LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A90;GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A91;LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A92;GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A93;LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A94;GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
+2A95;SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A96;SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A97;SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A98;SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE;Sm;0;ON;;;;;Y;;;;;
+2A99;DOUBLE-LINE EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9A;DOUBLE-LINE EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9B;DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9C;DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9D;SIMILAR OR LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9E;SIMILAR OR GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2A9F;SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AA0;SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AA1;DOUBLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2AA2;DOUBLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2AA3;DOUBLE NESTED LESS-THAN WITH UNDERBAR;Sm;0;ON;;;;;Y;;;;;
+2AA4;GREATER-THAN OVERLAPPING LESS-THAN;Sm;0;ON;;;;;N;;;;;
+2AA5;GREATER-THAN BESIDE LESS-THAN;Sm;0;ON;;;;;N;;;;;
+2AA6;LESS-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;;
+2AA7;GREATER-THAN CLOSED BY CURVE;Sm;0;ON;;;;;Y;;;;;
+2AA8;LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
+2AA9;GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL;Sm;0;ON;;;;;Y;;;;;
+2AAA;SMALLER THAN;Sm;0;ON;;;;;Y;;;;;
+2AAB;LARGER THAN;Sm;0;ON;;;;;Y;;;;;
+2AAC;SMALLER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AAD;LARGER THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AAE;EQUALS SIGN WITH BUMPY ABOVE;Sm;0;ON;;;;;N;;;;;
+2AAF;PRECEDES ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AB0;SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AB1;PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB2;SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB3;PRECEDES ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AB4;SUCCEEDS ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AB5;PRECEDES ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB6;SUCCEEDS ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB7;PRECEDES ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB8;SUCCEEDS ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AB9;PRECEDES ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ABA;SUCCEEDS ABOVE NOT ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ABB;DOUBLE PRECEDES;Sm;0;ON;;;;;Y;;;;;
+2ABC;DOUBLE SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+2ABD;SUBSET WITH DOT;Sm;0;ON;;;;;Y;;;;;
+2ABE;SUPERSET WITH DOT;Sm;0;ON;;;;;Y;;;;;
+2ABF;SUBSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
+2AC0;SUPERSET WITH PLUS SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
+2AC1;SUBSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
+2AC2;SUPERSET WITH MULTIPLICATION SIGN BELOW;Sm;0;ON;;;;;Y;;;;;
+2AC3;SUBSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2AC4;SUPERSET OF OR EQUAL TO WITH DOT ABOVE;Sm;0;ON;;;;;Y;;;;;
+2AC5;SUBSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AC6;SUPERSET OF ABOVE EQUALS SIGN;Sm;0;ON;;;;;Y;;;;;
+2AC7;SUBSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2AC8;SUPERSET OF ABOVE TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2AC9;SUBSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ACA;SUPERSET OF ABOVE ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ACB;SUBSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ACC;SUPERSET OF ABOVE NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2ACD;SQUARE LEFT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2ACE;SQUARE RIGHT OPEN BOX OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2ACF;CLOSED SUBSET;Sm;0;ON;;;;;Y;;;;;
+2AD0;CLOSED SUPERSET;Sm;0;ON;;;;;Y;;;;;
+2AD1;CLOSED SUBSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AD2;CLOSED SUPERSET OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AD3;SUBSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+2AD4;SUPERSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;;
+2AD5;SUBSET ABOVE SUBSET;Sm;0;ON;;;;;Y;;;;;
+2AD6;SUPERSET ABOVE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+2AD7;SUPERSET BESIDE SUBSET;Sm;0;ON;;;;;N;;;;;
+2AD8;SUPERSET BESIDE AND JOINED BY DASH WITH SUBSET;Sm;0;ON;;;;;N;;;;;
+2AD9;ELEMENT OF OPENING DOWNWARDS;Sm;0;ON;;;;;N;;;;;
+2ADA;PITCHFORK WITH TEE TOP;Sm;0;ON;;;;;N;;;;;
+2ADB;TRANSVERSAL INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2ADC;FORKING;Sm;0;ON;2ADD 0338;;;;Y;;not independent;;;
+2ADD;NONFORKING;Sm;0;ON;;;;;N;;independent;;;
+2ADE;SHORT LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+2ADF;SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;;
+2AE0;SHORT UP TACK;Sm;0;ON;;;;;N;;;;;
+2AE1;PERPENDICULAR WITH S;Sm;0;ON;;;;;N;;;;;
+2AE2;VERTICAL BAR TRIPLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+2AE3;DOUBLE VERTICAL BAR LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+2AE4;VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+2AE5;DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+2AE6;LONG DASH FROM LEFT MEMBER OF DOUBLE VERTICAL;Sm;0;ON;;;;;Y;;;;;
+2AE7;SHORT DOWN TACK WITH OVERBAR;Sm;0;ON;;;;;N;;;;;
+2AE8;SHORT UP TACK WITH UNDERBAR;Sm;0;ON;;;;;N;;;;;
+2AE9;SHORT UP TACK ABOVE SHORT DOWN TACK;Sm;0;ON;;;;;N;;;;;
+2AEA;DOUBLE DOWN TACK;Sm;0;ON;;;;;N;;;;;
+2AEB;DOUBLE UP TACK;Sm;0;ON;;;;;N;;;;;
+2AEC;DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;;
+2AED;REVERSED DOUBLE STROKE NOT SIGN;Sm;0;ON;;;;;Y;;;;;
+2AEE;DOES NOT DIVIDE WITH REVERSED NEGATION SLASH;Sm;0;ON;;;;;Y;;;;;
+2AEF;VERTICAL LINE WITH CIRCLE ABOVE;Sm;0;ON;;;;;N;;;;;
+2AF0;VERTICAL LINE WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;;
+2AF1;DOWN TACK WITH CIRCLE BELOW;Sm;0;ON;;;;;N;;;;;
+2AF2;PARALLEL WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+2AF3;PARALLEL WITH TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2AF4;TRIPLE VERTICAL BAR BINARY RELATION;Sm;0;ON;;;;;N;;;;;
+2AF5;TRIPLE VERTICAL BAR WITH HORIZONTAL STROKE;Sm;0;ON;;;;;N;;;;;
+2AF6;TRIPLE COLON OPERATOR;Sm;0;ON;;;;;N;;;;;
+2AF7;TRIPLE NESTED LESS-THAN;Sm;0;ON;;;;;Y;;;;;
+2AF8;TRIPLE NESTED GREATER-THAN;Sm;0;ON;;;;;Y;;;;;
+2AF9;DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AFA;DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2AFB;TRIPLE SOLIDUS BINARY RELATION;Sm;0;ON;;;;;Y;;;;;
+2AFC;LARGE TRIPLE VERTICAL BAR OPERATOR;Sm;0;ON;;;;;N;;;;;
+2AFD;DOUBLE SOLIDUS OPERATOR;Sm;0;ON;;;;;Y;;;;;
+2AFE;WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+2AFF;N-ARY WHITE VERTICAL BAR;Sm;0;ON;;;;;N;;;;;
+2B00;NORTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B01;NORTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B02;SOUTH EAST WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B03;SOUTH WEST WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B04;LEFT RIGHT WHITE ARROW;So;0;ON;;;;;N;;;;;
+2B05;LEFTWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B06;UPWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B07;DOWNWARDS BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B08;NORTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B09;NORTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0A;SOUTH EAST BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0B;SOUTH WEST BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0C;LEFT RIGHT BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0D;UP DOWN BLACK ARROW;So;0;ON;;;;;N;;;;;
+2B0E;RIGHTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;;
+2B0F;RIGHTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;;
+2B10;LEFTWARDS ARROW WITH TIP DOWNWARDS;So;0;ON;;;;;N;;;;;
+2B11;LEFTWARDS ARROW WITH TIP UPWARDS;So;0;ON;;;;;N;;;;;
+2B12;SQUARE WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;;
+2B13;SQUARE WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;;
+2B14;SQUARE WITH UPPER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+2B15;SQUARE WITH LOWER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+2B16;DIAMOND WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+2B17;DIAMOND WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+2B18;DIAMOND WITH TOP HALF BLACK;So;0;ON;;;;;N;;;;;
+2B19;DIAMOND WITH BOTTOM HALF BLACK;So;0;ON;;;;;N;;;;;
+2B1A;DOTTED SQUARE;So;0;ON;;;;;N;;;;;
+2B20;WHITE PENTAGON;So;0;ON;;;;;N;;;;;
+2B21;WHITE HEXAGON;So;0;ON;;;;;N;;;;;
+2B22;BLACK HEXAGON;So;0;ON;;;;;N;;;;;
+2B23;HORIZONTAL BLACK HEXAGON;So;0;ON;;;;;N;;;;;
+2C00;GLAGOLITIC CAPITAL LETTER AZU;Lu;0;L;;;;;N;;;;2C30;
+2C01;GLAGOLITIC CAPITAL LETTER BUKY;Lu;0;L;;;;;N;;;;2C31;
+2C02;GLAGOLITIC CAPITAL LETTER VEDE;Lu;0;L;;;;;N;;;;2C32;
+2C03;GLAGOLITIC CAPITAL LETTER GLAGOLI;Lu;0;L;;;;;N;;;;2C33;
+2C04;GLAGOLITIC CAPITAL LETTER DOBRO;Lu;0;L;;;;;N;;;;2C34;
+2C05;GLAGOLITIC CAPITAL LETTER YESTU;Lu;0;L;;;;;N;;;;2C35;
+2C06;GLAGOLITIC CAPITAL LETTER ZHIVETE;Lu;0;L;;;;;N;;;;2C36;
+2C07;GLAGOLITIC CAPITAL LETTER DZELO;Lu;0;L;;;;;N;;;;2C37;
+2C08;GLAGOLITIC CAPITAL LETTER ZEMLJA;Lu;0;L;;;;;N;;;;2C38;
+2C09;GLAGOLITIC CAPITAL LETTER IZHE;Lu;0;L;;;;;N;;;;2C39;
+2C0A;GLAGOLITIC CAPITAL LETTER INITIAL IZHE;Lu;0;L;;;;;N;;;;2C3A;
+2C0B;GLAGOLITIC CAPITAL LETTER I;Lu;0;L;;;;;N;;;;2C3B;
+2C0C;GLAGOLITIC CAPITAL LETTER DJERVI;Lu;0;L;;;;;N;;;;2C3C;
+2C0D;GLAGOLITIC CAPITAL LETTER KAKO;Lu;0;L;;;;;N;;;;2C3D;
+2C0E;GLAGOLITIC CAPITAL LETTER LJUDIJE;Lu;0;L;;;;;N;;;;2C3E;
+2C0F;GLAGOLITIC CAPITAL LETTER MYSLITE;Lu;0;L;;;;;N;;;;2C3F;
+2C10;GLAGOLITIC CAPITAL LETTER NASHI;Lu;0;L;;;;;N;;;;2C40;
+2C11;GLAGOLITIC CAPITAL LETTER ONU;Lu;0;L;;;;;N;;;;2C41;
+2C12;GLAGOLITIC CAPITAL LETTER POKOJI;Lu;0;L;;;;;N;;;;2C42;
+2C13;GLAGOLITIC CAPITAL LETTER RITSI;Lu;0;L;;;;;N;;;;2C43;
+2C14;GLAGOLITIC CAPITAL LETTER SLOVO;Lu;0;L;;;;;N;;;;2C44;
+2C15;GLAGOLITIC CAPITAL LETTER TVRIDO;Lu;0;L;;;;;N;;;;2C45;
+2C16;GLAGOLITIC CAPITAL LETTER UKU;Lu;0;L;;;;;N;;;;2C46;
+2C17;GLAGOLITIC CAPITAL LETTER FRITU;Lu;0;L;;;;;N;;;;2C47;
+2C18;GLAGOLITIC CAPITAL LETTER HERU;Lu;0;L;;;;;N;;;;2C48;
+2C19;GLAGOLITIC CAPITAL LETTER OTU;Lu;0;L;;;;;N;;;;2C49;
+2C1A;GLAGOLITIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;2C4A;
+2C1B;GLAGOLITIC CAPITAL LETTER SHTA;Lu;0;L;;;;;N;;;;2C4B;
+2C1C;GLAGOLITIC CAPITAL LETTER TSI;Lu;0;L;;;;;N;;;;2C4C;
+2C1D;GLAGOLITIC CAPITAL LETTER CHRIVI;Lu;0;L;;;;;N;;;;2C4D;
+2C1E;GLAGOLITIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;2C4E;
+2C1F;GLAGOLITIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;;;;2C4F;
+2C20;GLAGOLITIC CAPITAL LETTER YERI;Lu;0;L;;;;;N;;;;2C50;
+2C21;GLAGOLITIC CAPITAL LETTER YATI;Lu;0;L;;;;;N;;;;2C51;
+2C22;GLAGOLITIC CAPITAL LETTER SPIDERY HA;Lu;0;L;;;;;N;;;;2C52;
+2C23;GLAGOLITIC CAPITAL LETTER YU;Lu;0;L;;;;;N;;;;2C53;
+2C24;GLAGOLITIC CAPITAL LETTER SMALL YUS;Lu;0;L;;;;;N;;;;2C54;
+2C25;GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL;Lu;0;L;;;;;N;;;;2C55;
+2C26;GLAGOLITIC CAPITAL LETTER YO;Lu;0;L;;;;;N;;;;2C56;
+2C27;GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS;Lu;0;L;;;;;N;;;;2C57;
+2C28;GLAGOLITIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;2C58;
+2C29;GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS;Lu;0;L;;;;;N;;;;2C59;
+2C2A;GLAGOLITIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;2C5A;
+2C2B;GLAGOLITIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;2C5B;
+2C2C;GLAGOLITIC CAPITAL LETTER SHTAPIC;Lu;0;L;;;;;N;;;;2C5C;
+2C2D;GLAGOLITIC CAPITAL LETTER TROKUTASTI A;Lu;0;L;;;;;N;;;;2C5D;
+2C2E;GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE;Lu;0;L;;;;;N;;;;2C5E;
+2C30;GLAGOLITIC SMALL LETTER AZU;Ll;0;L;;;;;N;;;2C00;;2C00
+2C31;GLAGOLITIC SMALL LETTER BUKY;Ll;0;L;;;;;N;;;2C01;;2C01
+2C32;GLAGOLITIC SMALL LETTER VEDE;Ll;0;L;;;;;N;;;2C02;;2C02
+2C33;GLAGOLITIC SMALL LETTER GLAGOLI;Ll;0;L;;;;;N;;;2C03;;2C03
+2C34;GLAGOLITIC SMALL LETTER DOBRO;Ll;0;L;;;;;N;;;2C04;;2C04
+2C35;GLAGOLITIC SMALL LETTER YESTU;Ll;0;L;;;;;N;;;2C05;;2C05
+2C36;GLAGOLITIC SMALL LETTER ZHIVETE;Ll;0;L;;;;;N;;;2C06;;2C06
+2C37;GLAGOLITIC SMALL LETTER DZELO;Ll;0;L;;;;;N;;;2C07;;2C07
+2C38;GLAGOLITIC SMALL LETTER ZEMLJA;Ll;0;L;;;;;N;;;2C08;;2C08
+2C39;GLAGOLITIC SMALL LETTER IZHE;Ll;0;L;;;;;N;;;2C09;;2C09
+2C3A;GLAGOLITIC SMALL LETTER INITIAL IZHE;Ll;0;L;;;;;N;;;2C0A;;2C0A
+2C3B;GLAGOLITIC SMALL LETTER I;Ll;0;L;;;;;N;;;2C0B;;2C0B
+2C3C;GLAGOLITIC SMALL LETTER DJERVI;Ll;0;L;;;;;N;;;2C0C;;2C0C
+2C3D;GLAGOLITIC SMALL LETTER KAKO;Ll;0;L;;;;;N;;;2C0D;;2C0D
+2C3E;GLAGOLITIC SMALL LETTER LJUDIJE;Ll;0;L;;;;;N;;;2C0E;;2C0E
+2C3F;GLAGOLITIC SMALL LETTER MYSLITE;Ll;0;L;;;;;N;;;2C0F;;2C0F
+2C40;GLAGOLITIC SMALL LETTER NASHI;Ll;0;L;;;;;N;;;2C10;;2C10
+2C41;GLAGOLITIC SMALL LETTER ONU;Ll;0;L;;;;;N;;;2C11;;2C11
+2C42;GLAGOLITIC SMALL LETTER POKOJI;Ll;0;L;;;;;N;;;2C12;;2C12
+2C43;GLAGOLITIC SMALL LETTER RITSI;Ll;0;L;;;;;N;;;2C13;;2C13
+2C44;GLAGOLITIC SMALL LETTER SLOVO;Ll;0;L;;;;;N;;;2C14;;2C14
+2C45;GLAGOLITIC SMALL LETTER TVRIDO;Ll;0;L;;;;;N;;;2C15;;2C15
+2C46;GLAGOLITIC SMALL LETTER UKU;Ll;0;L;;;;;N;;;2C16;;2C16
+2C47;GLAGOLITIC SMALL LETTER FRITU;Ll;0;L;;;;;N;;;2C17;;2C17
+2C48;GLAGOLITIC SMALL LETTER HERU;Ll;0;L;;;;;N;;;2C18;;2C18
+2C49;GLAGOLITIC SMALL LETTER OTU;Ll;0;L;;;;;N;;;2C19;;2C19
+2C4A;GLAGOLITIC SMALL LETTER PE;Ll;0;L;;;;;N;;;2C1A;;2C1A
+2C4B;GLAGOLITIC SMALL LETTER SHTA;Ll;0;L;;;;;N;;;2C1B;;2C1B
+2C4C;GLAGOLITIC SMALL LETTER TSI;Ll;0;L;;;;;N;;;2C1C;;2C1C
+2C4D;GLAGOLITIC SMALL LETTER CHRIVI;Ll;0;L;;;;;N;;;2C1D;;2C1D
+2C4E;GLAGOLITIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;2C1E;;2C1E
+2C4F;GLAGOLITIC SMALL LETTER YERU;Ll;0;L;;;;;N;;;2C1F;;2C1F
+2C50;GLAGOLITIC SMALL LETTER YERI;Ll;0;L;;;;;N;;;2C20;;2C20
+2C51;GLAGOLITIC SMALL LETTER YATI;Ll;0;L;;;;;N;;;2C21;;2C21
+2C52;GLAGOLITIC SMALL LETTER SPIDERY HA;Ll;0;L;;;;;N;;;2C22;;2C22
+2C53;GLAGOLITIC SMALL LETTER YU;Ll;0;L;;;;;N;;;2C23;;2C23
+2C54;GLAGOLITIC SMALL LETTER SMALL YUS;Ll;0;L;;;;;N;;;2C24;;2C24
+2C55;GLAGOLITIC SMALL LETTER SMALL YUS WITH TAIL;Ll;0;L;;;;;N;;;2C25;;2C25
+2C56;GLAGOLITIC SMALL LETTER YO;Ll;0;L;;;;;N;;;2C26;;2C26
+2C57;GLAGOLITIC SMALL LETTER IOTATED SMALL YUS;Ll;0;L;;;;;N;;;2C27;;2C27
+2C58;GLAGOLITIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;2C28;;2C28
+2C59;GLAGOLITIC SMALL LETTER IOTATED BIG YUS;Ll;0;L;;;;;N;;;2C29;;2C29
+2C5A;GLAGOLITIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;2C2A;;2C2A
+2C5B;GLAGOLITIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;2C2B;;2C2B
+2C5C;GLAGOLITIC SMALL LETTER SHTAPIC;Ll;0;L;;;;;N;;;2C2C;;2C2C
+2C5D;GLAGOLITIC SMALL LETTER TROKUTASTI A;Ll;0;L;;;;;N;;;2C2D;;2C2D
+2C5E;GLAGOLITIC SMALL LETTER LATINATE MYSLITE;Ll;0;L;;;;;N;;;2C2E;;2C2E
+2C60;LATIN CAPITAL LETTER L WITH DOUBLE BAR;Lu;0;L;;;;;N;;;;2C61;
+2C61;LATIN SMALL LETTER L WITH DOUBLE BAR;Ll;0;L;;;;;N;;;2C60;;2C60
+2C62;LATIN CAPITAL LETTER L WITH MIDDLE TILDE;Lu;0;L;;;;;N;;;;026B;
+2C63;LATIN CAPITAL LETTER P WITH STROKE;Lu;0;L;;;;;N;;;;1D7D;
+2C64;LATIN CAPITAL LETTER R WITH TAIL;Lu;0;L;;;;;N;;;;027D;
+2C65;LATIN SMALL LETTER A WITH STROKE;Ll;0;L;;;;;N;;;023A;;023A
+2C66;LATIN SMALL LETTER T WITH DIAGONAL STROKE;Ll;0;L;;;;;N;;;023E;;023E
+2C67;LATIN CAPITAL LETTER H WITH DESCENDER;Lu;0;L;;;;;N;;;;2C68;
+2C68;LATIN SMALL LETTER H WITH DESCENDER;Ll;0;L;;;;;N;;;2C67;;2C67
+2C69;LATIN CAPITAL LETTER K WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6A;
+2C6A;LATIN SMALL LETTER K WITH DESCENDER;Ll;0;L;;;;;N;;;2C69;;2C69
+2C6B;LATIN CAPITAL LETTER Z WITH DESCENDER;Lu;0;L;;;;;N;;;;2C6C;
+2C6C;LATIN SMALL LETTER Z WITH DESCENDER;Ll;0;L;;;;;N;;;2C6B;;2C6B
+2C74;LATIN SMALL LETTER V WITH CURL;Ll;0;L;;;;;N;;;;;
+2C75;LATIN CAPITAL LETTER HALF H;Lu;0;L;;;;;N;;;;2C76;
+2C76;LATIN SMALL LETTER HALF H;Ll;0;L;;;;;N;;;2C75;;2C75
+2C77;LATIN SMALL LETTER TAILLESS PHI;Ll;0;L;;;;;N;;;;;
+2C80;COPTIC CAPITAL LETTER ALFA;Lu;0;L;;;;;N;;;;2C81;
+2C81;COPTIC SMALL LETTER ALFA;Ll;0;L;;;;;N;;;2C80;;2C80
+2C82;COPTIC CAPITAL LETTER VIDA;Lu;0;L;;;;;N;;;;2C83;
+2C83;COPTIC SMALL LETTER VIDA;Ll;0;L;;;;;N;;;2C82;;2C82
+2C84;COPTIC CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;2C85;
+2C85;COPTIC SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;2C84;;2C84
+2C86;COPTIC CAPITAL LETTER DALDA;Lu;0;L;;;;;N;;;;2C87;
+2C87;COPTIC SMALL LETTER DALDA;Ll;0;L;;;;;N;;;2C86;;2C86
+2C88;COPTIC CAPITAL LETTER EIE;Lu;0;L;;;;;N;;;;2C89;
+2C89;COPTIC SMALL LETTER EIE;Ll;0;L;;;;;N;;;2C88;;2C88
+2C8A;COPTIC CAPITAL LETTER SOU;Lu;0;L;;;;;N;;;;2C8B;
+2C8B;COPTIC SMALL LETTER SOU;Ll;0;L;;;;;N;;;2C8A;;2C8A
+2C8C;COPTIC CAPITAL LETTER ZATA;Lu;0;L;;;;;N;;;;2C8D;
+2C8D;COPTIC SMALL LETTER ZATA;Ll;0;L;;;;;N;;;2C8C;;2C8C
+2C8E;COPTIC CAPITAL LETTER HATE;Lu;0;L;;;;;N;;;;2C8F;
+2C8F;COPTIC SMALL LETTER HATE;Ll;0;L;;;;;N;;;2C8E;;2C8E
+2C90;COPTIC CAPITAL LETTER THETHE;Lu;0;L;;;;;N;;;;2C91;
+2C91;COPTIC SMALL LETTER THETHE;Ll;0;L;;;;;N;;;2C90;;2C90
+2C92;COPTIC CAPITAL LETTER IAUDA;Lu;0;L;;;;;N;;;;2C93;
+2C93;COPTIC SMALL LETTER IAUDA;Ll;0;L;;;;;N;;;2C92;;2C92
+2C94;COPTIC CAPITAL LETTER KAPA;Lu;0;L;;;;;N;;;;2C95;
+2C95;COPTIC SMALL LETTER KAPA;Ll;0;L;;;;;N;;;2C94;;2C94
+2C96;COPTIC CAPITAL LETTER LAULA;Lu;0;L;;;;;N;;;;2C97;
+2C97;COPTIC SMALL LETTER LAULA;Ll;0;L;;;;;N;;;2C96;;2C96
+2C98;COPTIC CAPITAL LETTER MI;Lu;0;L;;;;;N;;;;2C99;
+2C99;COPTIC SMALL LETTER MI;Ll;0;L;;;;;N;;;2C98;;2C98
+2C9A;COPTIC CAPITAL LETTER NI;Lu;0;L;;;;;N;;;;2C9B;
+2C9B;COPTIC SMALL LETTER NI;Ll;0;L;;;;;N;;;2C9A;;2C9A
+2C9C;COPTIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;2C9D;
+2C9D;COPTIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;2C9C;;2C9C
+2C9E;COPTIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;2C9F;
+2C9F;COPTIC SMALL LETTER O;Ll;0;L;;;;;N;;;2C9E;;2C9E
+2CA0;COPTIC CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;2CA1;
+2CA1;COPTIC SMALL LETTER PI;Ll;0;L;;;;;N;;;2CA0;;2CA0
+2CA2;COPTIC CAPITAL LETTER RO;Lu;0;L;;;;;N;;;;2CA3;
+2CA3;COPTIC SMALL LETTER RO;Ll;0;L;;;;;N;;;2CA2;;2CA2
+2CA4;COPTIC CAPITAL LETTER SIMA;Lu;0;L;;;;;N;;;;2CA5;
+2CA5;COPTIC SMALL LETTER SIMA;Ll;0;L;;;;;N;;;2CA4;;2CA4
+2CA6;COPTIC CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;2CA7;
+2CA7;COPTIC SMALL LETTER TAU;Ll;0;L;;;;;N;;;2CA6;;2CA6
+2CA8;COPTIC CAPITAL LETTER UA;Lu;0;L;;;;;N;;;;2CA9;
+2CA9;COPTIC SMALL LETTER UA;Ll;0;L;;;;;N;;;2CA8;;2CA8
+2CAA;COPTIC CAPITAL LETTER FI;Lu;0;L;;;;;N;;;;2CAB;
+2CAB;COPTIC SMALL LETTER FI;Ll;0;L;;;;;N;;;2CAA;;2CAA
+2CAC;COPTIC CAPITAL LETTER KHI;Lu;0;L;;;;;N;;;;2CAD;
+2CAD;COPTIC SMALL LETTER KHI;Ll;0;L;;;;;N;;;2CAC;;2CAC
+2CAE;COPTIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;2CAF;
+2CAF;COPTIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;2CAE;;2CAE
+2CB0;COPTIC CAPITAL LETTER OOU;Lu;0;L;;;;;N;;;;2CB1;
+2CB1;COPTIC SMALL LETTER OOU;Ll;0;L;;;;;N;;;2CB0;;2CB0
+2CB2;COPTIC CAPITAL LETTER DIALECT-P ALEF;Lu;0;L;;;;;N;;;;2CB3;
+2CB3;COPTIC SMALL LETTER DIALECT-P ALEF;Ll;0;L;;;;;N;;;2CB2;;2CB2
+2CB4;COPTIC CAPITAL LETTER OLD COPTIC AIN;Lu;0;L;;;;;N;;;;2CB5;
+2CB5;COPTIC SMALL LETTER OLD COPTIC AIN;Ll;0;L;;;;;N;;;2CB4;;2CB4
+2CB6;COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE;Lu;0;L;;;;;N;;;;2CB7;
+2CB7;COPTIC SMALL LETTER CRYPTOGRAMMIC EIE;Ll;0;L;;;;;N;;;2CB6;;2CB6
+2CB8;COPTIC CAPITAL LETTER DIALECT-P KAPA;Lu;0;L;;;;;N;;;;2CB9;
+2CB9;COPTIC SMALL LETTER DIALECT-P KAPA;Ll;0;L;;;;;N;;;2CB8;;2CB8
+2CBA;COPTIC CAPITAL LETTER DIALECT-P NI;Lu;0;L;;;;;N;;;;2CBB;
+2CBB;COPTIC SMALL LETTER DIALECT-P NI;Ll;0;L;;;;;N;;;2CBA;;2CBA
+2CBC;COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI;Lu;0;L;;;;;N;;;;2CBD;
+2CBD;COPTIC SMALL LETTER CRYPTOGRAMMIC NI;Ll;0;L;;;;;N;;;2CBC;;2CBC
+2CBE;COPTIC CAPITAL LETTER OLD COPTIC OOU;Lu;0;L;;;;;N;;;;2CBF;
+2CBF;COPTIC SMALL LETTER OLD COPTIC OOU;Ll;0;L;;;;;N;;;2CBE;;2CBE
+2CC0;COPTIC CAPITAL LETTER SAMPI;Lu;0;L;;;;;N;;;;2CC1;
+2CC1;COPTIC SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;2CC0;;2CC0
+2CC2;COPTIC CAPITAL LETTER CROSSED SHEI;Lu;0;L;;;;;N;;;;2CC3;
+2CC3;COPTIC SMALL LETTER CROSSED SHEI;Ll;0;L;;;;;N;;;2CC2;;2CC2
+2CC4;COPTIC CAPITAL LETTER OLD COPTIC SHEI;Lu;0;L;;;;;N;;;;2CC5;
+2CC5;COPTIC SMALL LETTER OLD COPTIC SHEI;Ll;0;L;;;;;N;;;2CC4;;2CC4
+2CC6;COPTIC CAPITAL LETTER OLD COPTIC ESH;Lu;0;L;;;;;N;;;;2CC7;
+2CC7;COPTIC SMALL LETTER OLD COPTIC ESH;Ll;0;L;;;;;N;;;2CC6;;2CC6
+2CC8;COPTIC CAPITAL LETTER AKHMIMIC KHEI;Lu;0;L;;;;;N;;;;2CC9;
+2CC9;COPTIC SMALL LETTER AKHMIMIC KHEI;Ll;0;L;;;;;N;;;2CC8;;2CC8
+2CCA;COPTIC CAPITAL LETTER DIALECT-P HORI;Lu;0;L;;;;;N;;;;2CCB;
+2CCB;COPTIC SMALL LETTER DIALECT-P HORI;Ll;0;L;;;;;N;;;2CCA;;2CCA
+2CCC;COPTIC CAPITAL LETTER OLD COPTIC HORI;Lu;0;L;;;;;N;;;;2CCD;
+2CCD;COPTIC SMALL LETTER OLD COPTIC HORI;Ll;0;L;;;;;N;;;2CCC;;2CCC
+2CCE;COPTIC CAPITAL LETTER OLD COPTIC HA;Lu;0;L;;;;;N;;;;2CCF;
+2CCF;COPTIC SMALL LETTER OLD COPTIC HA;Ll;0;L;;;;;N;;;2CCE;;2CCE
+2CD0;COPTIC CAPITAL LETTER L-SHAPED HA;Lu;0;L;;;;;N;;;;2CD1;
+2CD1;COPTIC SMALL LETTER L-SHAPED HA;Ll;0;L;;;;;N;;;2CD0;;2CD0
+2CD2;COPTIC CAPITAL LETTER OLD COPTIC HEI;Lu;0;L;;;;;N;;;;2CD3;
+2CD3;COPTIC SMALL LETTER OLD COPTIC HEI;Ll;0;L;;;;;N;;;2CD2;;2CD2
+2CD4;COPTIC CAPITAL LETTER OLD COPTIC HAT;Lu;0;L;;;;;N;;;;2CD5;
+2CD5;COPTIC SMALL LETTER OLD COPTIC HAT;Ll;0;L;;;;;N;;;2CD4;;2CD4
+2CD6;COPTIC CAPITAL LETTER OLD COPTIC GANGIA;Lu;0;L;;;;;N;;;;2CD7;
+2CD7;COPTIC SMALL LETTER OLD COPTIC GANGIA;Ll;0;L;;;;;N;;;2CD6;;2CD6
+2CD8;COPTIC CAPITAL LETTER OLD COPTIC DJA;Lu;0;L;;;;;N;;;;2CD9;
+2CD9;COPTIC SMALL LETTER OLD COPTIC DJA;Ll;0;L;;;;;N;;;2CD8;;2CD8
+2CDA;COPTIC CAPITAL LETTER OLD COPTIC SHIMA;Lu;0;L;;;;;N;;;;2CDB;
+2CDB;COPTIC SMALL LETTER OLD COPTIC SHIMA;Ll;0;L;;;;;N;;;2CDA;;2CDA
+2CDC;COPTIC CAPITAL LETTER OLD NUBIAN SHIMA;Lu;0;L;;;;;N;;;;2CDD;
+2CDD;COPTIC SMALL LETTER OLD NUBIAN SHIMA;Ll;0;L;;;;;N;;;2CDC;;2CDC
+2CDE;COPTIC CAPITAL LETTER OLD NUBIAN NGI;Lu;0;L;;;;;N;;;;2CDF;
+2CDF;COPTIC SMALL LETTER OLD NUBIAN NGI;Ll;0;L;;;;;N;;;2CDE;;2CDE
+2CE0;COPTIC CAPITAL LETTER OLD NUBIAN NYI;Lu;0;L;;;;;N;;;;2CE1;
+2CE1;COPTIC SMALL LETTER OLD NUBIAN NYI;Ll;0;L;;;;;N;;;2CE0;;2CE0
+2CE2;COPTIC CAPITAL LETTER OLD NUBIAN WAU;Lu;0;L;;;;;N;;;;2CE3;
+2CE3;COPTIC SMALL LETTER OLD NUBIAN WAU;Ll;0;L;;;;;N;;;2CE2;;2CE2
+2CE4;COPTIC SYMBOL KAI;Ll;0;L;;;;;N;;;;;
+2CE5;COPTIC SYMBOL MI RO;So;0;ON;;;;;N;;;;;
+2CE6;COPTIC SYMBOL PI RO;So;0;ON;;;;;N;;;;;
+2CE7;COPTIC SYMBOL STAUROS;So;0;ON;;;;;N;;;;;
+2CE8;COPTIC SYMBOL TAU RO;So;0;ON;;;;;N;;;;;
+2CE9;COPTIC SYMBOL KHI RO;So;0;ON;;;;;N;;;;;
+2CEA;COPTIC SYMBOL SHIMA SIMA;So;0;ON;;;;;N;;;;;
+2CF9;COPTIC OLD NUBIAN FULL STOP;Po;0;ON;;;;;N;;;;;
+2CFA;COPTIC OLD NUBIAN DIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;;
+2CFB;COPTIC OLD NUBIAN INDIRECT QUESTION MARK;Po;0;ON;;;;;N;;;;;
+2CFC;COPTIC OLD NUBIAN VERSE DIVIDER;Po;0;ON;;;;;N;;;;;
+2CFD;COPTIC FRACTION ONE HALF;No;0;ON;;;;1/2;N;;;;;
+2CFE;COPTIC FULL STOP;Po;0;ON;;;;;N;;;;;
+2CFF;COPTIC MORPHOLOGICAL DIVIDER;Po;0;ON;;;;;N;;;;;
+2D00;GEORGIAN SMALL LETTER AN;Ll;0;L;;;;;N;;Khutsuri;10A0;;10A0
+2D01;GEORGIAN SMALL LETTER BAN;Ll;0;L;;;;;N;;Khutsuri;10A1;;10A1
+2D02;GEORGIAN SMALL LETTER GAN;Ll;0;L;;;;;N;;Khutsuri;10A2;;10A2
+2D03;GEORGIAN SMALL LETTER DON;Ll;0;L;;;;;N;;Khutsuri;10A3;;10A3
+2D04;GEORGIAN SMALL LETTER EN;Ll;0;L;;;;;N;;Khutsuri;10A4;;10A4
+2D05;GEORGIAN SMALL LETTER VIN;Ll;0;L;;;;;N;;Khutsuri;10A5;;10A5
+2D06;GEORGIAN SMALL LETTER ZEN;Ll;0;L;;;;;N;;Khutsuri;10A6;;10A6
+2D07;GEORGIAN SMALL LETTER TAN;Ll;0;L;;;;;N;;Khutsuri;10A7;;10A7
+2D08;GEORGIAN SMALL LETTER IN;Ll;0;L;;;;;N;;Khutsuri;10A8;;10A8
+2D09;GEORGIAN SMALL LETTER KAN;Ll;0;L;;;;;N;;Khutsuri;10A9;;10A9
+2D0A;GEORGIAN SMALL LETTER LAS;Ll;0;L;;;;;N;;Khutsuri;10AA;;10AA
+2D0B;GEORGIAN SMALL LETTER MAN;Ll;0;L;;;;;N;;Khutsuri;10AB;;10AB
+2D0C;GEORGIAN SMALL LETTER NAR;Ll;0;L;;;;;N;;Khutsuri;10AC;;10AC
+2D0D;GEORGIAN SMALL LETTER ON;Ll;0;L;;;;;N;;Khutsuri;10AD;;10AD
+2D0E;GEORGIAN SMALL LETTER PAR;Ll;0;L;;;;;N;;Khutsuri;10AE;;10AE
+2D0F;GEORGIAN SMALL LETTER ZHAR;Ll;0;L;;;;;N;;Khutsuri;10AF;;10AF
+2D10;GEORGIAN SMALL LETTER RAE;Ll;0;L;;;;;N;;Khutsuri;10B0;;10B0
+2D11;GEORGIAN SMALL LETTER SAN;Ll;0;L;;;;;N;;Khutsuri;10B1;;10B1
+2D12;GEORGIAN SMALL LETTER TAR;Ll;0;L;;;;;N;;Khutsuri;10B2;;10B2
+2D13;GEORGIAN SMALL LETTER UN;Ll;0;L;;;;;N;;Khutsuri;10B3;;10B3
+2D14;GEORGIAN SMALL LETTER PHAR;Ll;0;L;;;;;N;;Khutsuri;10B4;;10B4
+2D15;GEORGIAN SMALL LETTER KHAR;Ll;0;L;;;;;N;;Khutsuri;10B5;;10B5
+2D16;GEORGIAN SMALL LETTER GHAN;Ll;0;L;;;;;N;;Khutsuri;10B6;;10B6
+2D17;GEORGIAN SMALL LETTER QAR;Ll;0;L;;;;;N;;Khutsuri;10B7;;10B7
+2D18;GEORGIAN SMALL LETTER SHIN;Ll;0;L;;;;;N;;Khutsuri;10B8;;10B8
+2D19;GEORGIAN SMALL LETTER CHIN;Ll;0;L;;;;;N;;Khutsuri;10B9;;10B9
+2D1A;GEORGIAN SMALL LETTER CAN;Ll;0;L;;;;;N;;Khutsuri;10BA;;10BA
+2D1B;GEORGIAN SMALL LETTER JIL;Ll;0;L;;;;;N;;Khutsuri;10BB;;10BB
+2D1C;GEORGIAN SMALL LETTER CIL;Ll;0;L;;;;;N;;Khutsuri;10BC;;10BC
+2D1D;GEORGIAN SMALL LETTER CHAR;Ll;0;L;;;;;N;;Khutsuri;10BD;;10BD
+2D1E;GEORGIAN SMALL LETTER XAN;Ll;0;L;;;;;N;;Khutsuri;10BE;;10BE
+2D1F;GEORGIAN SMALL LETTER JHAN;Ll;0;L;;;;;N;;Khutsuri;10BF;;10BF
+2D20;GEORGIAN SMALL LETTER HAE;Ll;0;L;;;;;N;;Khutsuri;10C0;;10C0
+2D21;GEORGIAN SMALL LETTER HE;Ll;0;L;;;;;N;;Khutsuri;10C1;;10C1
+2D22;GEORGIAN SMALL LETTER HIE;Ll;0;L;;;;;N;;Khutsuri;10C2;;10C2
+2D23;GEORGIAN SMALL LETTER WE;Ll;0;L;;;;;N;;Khutsuri;10C3;;10C3
+2D24;GEORGIAN SMALL LETTER HAR;Ll;0;L;;;;;N;;Khutsuri;10C4;;10C4
+2D25;GEORGIAN SMALL LETTER HOE;Ll;0;L;;;;;N;;Khutsuri;10C5;;10C5
+2D30;TIFINAGH LETTER YA;Lo;0;L;;;;;N;;;;;
+2D31;TIFINAGH LETTER YAB;Lo;0;L;;;;;N;;;;;
+2D32;TIFINAGH LETTER YABH;Lo;0;L;;;;;N;;;;;
+2D33;TIFINAGH LETTER YAG;Lo;0;L;;;;;N;;;;;
+2D34;TIFINAGH LETTER YAGHH;Lo;0;L;;;;;N;;;;;
+2D35;TIFINAGH LETTER BERBER ACADEMY YAJ;Lo;0;L;;;;;N;;;;;
+2D36;TIFINAGH LETTER YAJ;Lo;0;L;;;;;N;;;;;
+2D37;TIFINAGH LETTER YAD;Lo;0;L;;;;;N;;;;;
+2D38;TIFINAGH LETTER YADH;Lo;0;L;;;;;N;;;;;
+2D39;TIFINAGH LETTER YADD;Lo;0;L;;;;;N;;;;;
+2D3A;TIFINAGH LETTER YADDH;Lo;0;L;;;;;N;;;;;
+2D3B;TIFINAGH LETTER YEY;Lo;0;L;;;;;N;;;;;
+2D3C;TIFINAGH LETTER YAF;Lo;0;L;;;;;N;;;;;
+2D3D;TIFINAGH LETTER YAK;Lo;0;L;;;;;N;;;;;
+2D3E;TIFINAGH LETTER TUAREG YAK;Lo;0;L;;;;;N;;;;;
+2D3F;TIFINAGH LETTER YAKHH;Lo;0;L;;;;;N;;;;;
+2D40;TIFINAGH LETTER YAH;Lo;0;L;;;;;N;;Tuareg yab;;;
+2D41;TIFINAGH LETTER BERBER ACADEMY YAH;Lo;0;L;;;;;N;;;;;
+2D42;TIFINAGH LETTER TUAREG YAH;Lo;0;L;;;;;N;;;;;
+2D43;TIFINAGH LETTER YAHH;Lo;0;L;;;;;N;;;;;
+2D44;TIFINAGH LETTER YAA;Lo;0;L;;;;;N;;;;;
+2D45;TIFINAGH LETTER YAKH;Lo;0;L;;;;;N;;;;;
+2D46;TIFINAGH LETTER TUAREG YAKH;Lo;0;L;;;;;N;;;;;
+2D47;TIFINAGH LETTER YAQ;Lo;0;L;;;;;N;;;;;
+2D48;TIFINAGH LETTER TUAREG YAQ;Lo;0;L;;;;;N;;;;;
+2D49;TIFINAGH LETTER YI;Lo;0;L;;;;;N;;;;;
+2D4A;TIFINAGH LETTER YAZH;Lo;0;L;;;;;N;;;;;
+2D4B;TIFINAGH LETTER AHAGGAR YAZH;Lo;0;L;;;;;N;;;;;
+2D4C;TIFINAGH LETTER TUAREG YAZH;Lo;0;L;;;;;N;;;;;
+2D4D;TIFINAGH LETTER YAL;Lo;0;L;;;;;N;;;;;
+2D4E;TIFINAGH LETTER YAM;Lo;0;L;;;;;N;;;;;
+2D4F;TIFINAGH LETTER YAN;Lo;0;L;;;;;N;;;;;
+2D50;TIFINAGH LETTER TUAREG YAGN;Lo;0;L;;;;;N;;;;;
+2D51;TIFINAGH LETTER TUAREG YANG;Lo;0;L;;;;;N;;;;;
+2D52;TIFINAGH LETTER YAP;Lo;0;L;;;;;N;;;;;
+2D53;TIFINAGH LETTER YU;Lo;0;L;;;;;N;;Tuareg yaw;;;
+2D54;TIFINAGH LETTER YAR;Lo;0;L;;;;;N;;;;;
+2D55;TIFINAGH LETTER YARR;Lo;0;L;;;;;N;;;;;
+2D56;TIFINAGH LETTER YAGH;Lo;0;L;;;;;N;;;;;
+2D57;TIFINAGH LETTER TUAREG YAGH;Lo;0;L;;;;;N;;;;;
+2D58;TIFINAGH LETTER AYER YAGH;Lo;0;L;;;;;N;;Adrar yaj;;;
+2D59;TIFINAGH LETTER YAS;Lo;0;L;;;;;N;;;;;
+2D5A;TIFINAGH LETTER YASS;Lo;0;L;;;;;N;;;;;
+2D5B;TIFINAGH LETTER YASH;Lo;0;L;;;;;N;;;;;
+2D5C;TIFINAGH LETTER YAT;Lo;0;L;;;;;N;;;;;
+2D5D;TIFINAGH LETTER YATH;Lo;0;L;;;;;N;;;;;
+2D5E;TIFINAGH LETTER YACH;Lo;0;L;;;;;N;;;;;
+2D5F;TIFINAGH LETTER YATT;Lo;0;L;;;;;N;;;;;
+2D60;TIFINAGH LETTER YAV;Lo;0;L;;;;;N;;;;;
+2D61;TIFINAGH LETTER YAW;Lo;0;L;;;;;N;;;;;
+2D62;TIFINAGH LETTER YAY;Lo;0;L;;;;;N;;;;;
+2D63;TIFINAGH LETTER YAZ;Lo;0;L;;;;;N;;;;;
+2D64;TIFINAGH LETTER TAWELLEMET YAZ;Lo;0;L;;;;;N;;harpoon yaz;;;
+2D65;TIFINAGH LETTER YAZZ;Lo;0;L;;;;;N;;;;;
+2D6F;TIFINAGH MODIFIER LETTER LABIALIZATION MARK;Lm;0;L;<super> 2D61;;;;N;;tamatart;;;
+2D80;ETHIOPIC SYLLABLE LOA;Lo;0;L;;;;;N;;;;;
+2D81;ETHIOPIC SYLLABLE MOA;Lo;0;L;;;;;N;;;;;
+2D82;ETHIOPIC SYLLABLE ROA;Lo;0;L;;;;;N;;;;;
+2D83;ETHIOPIC SYLLABLE SOA;Lo;0;L;;;;;N;;;;;
+2D84;ETHIOPIC SYLLABLE SHOA;Lo;0;L;;;;;N;;;;;
+2D85;ETHIOPIC SYLLABLE BOA;Lo;0;L;;;;;N;;;;;
+2D86;ETHIOPIC SYLLABLE TOA;Lo;0;L;;;;;N;;;;;
+2D87;ETHIOPIC SYLLABLE COA;Lo;0;L;;;;;N;;;;;
+2D88;ETHIOPIC SYLLABLE NOA;Lo;0;L;;;;;N;;;;;
+2D89;ETHIOPIC SYLLABLE NYOA;Lo;0;L;;;;;N;;;;;
+2D8A;ETHIOPIC SYLLABLE GLOTTAL OA;Lo;0;L;;;;;N;;;;;
+2D8B;ETHIOPIC SYLLABLE ZOA;Lo;0;L;;;;;N;;;;;
+2D8C;ETHIOPIC SYLLABLE DOA;Lo;0;L;;;;;N;;;;;
+2D8D;ETHIOPIC SYLLABLE DDOA;Lo;0;L;;;;;N;;;;;
+2D8E;ETHIOPIC SYLLABLE JOA;Lo;0;L;;;;;N;;;;;
+2D8F;ETHIOPIC SYLLABLE THOA;Lo;0;L;;;;;N;;;;;
+2D90;ETHIOPIC SYLLABLE CHOA;Lo;0;L;;;;;N;;;;;
+2D91;ETHIOPIC SYLLABLE PHOA;Lo;0;L;;;;;N;;;;;
+2D92;ETHIOPIC SYLLABLE POA;Lo;0;L;;;;;N;;;;;
+2D93;ETHIOPIC SYLLABLE GGWA;Lo;0;L;;;;;N;;;;;
+2D94;ETHIOPIC SYLLABLE GGWI;Lo;0;L;;;;;N;;;;;
+2D95;ETHIOPIC SYLLABLE GGWEE;Lo;0;L;;;;;N;;;;;
+2D96;ETHIOPIC SYLLABLE GGWE;Lo;0;L;;;;;N;;;;;
+2DA0;ETHIOPIC SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
+2DA1;ETHIOPIC SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
+2DA2;ETHIOPIC SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
+2DA3;ETHIOPIC SYLLABLE SSAA;Lo;0;L;;;;;N;;;;;
+2DA4;ETHIOPIC SYLLABLE SSEE;Lo;0;L;;;;;N;;;;;
+2DA5;ETHIOPIC SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
+2DA6;ETHIOPIC SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
+2DA8;ETHIOPIC SYLLABLE CCA;Lo;0;L;;;;;N;;;;;
+2DA9;ETHIOPIC SYLLABLE CCU;Lo;0;L;;;;;N;;;;;
+2DAA;ETHIOPIC SYLLABLE CCI;Lo;0;L;;;;;N;;;;;
+2DAB;ETHIOPIC SYLLABLE CCAA;Lo;0;L;;;;;N;;;;;
+2DAC;ETHIOPIC SYLLABLE CCEE;Lo;0;L;;;;;N;;;;;
+2DAD;ETHIOPIC SYLLABLE CCE;Lo;0;L;;;;;N;;;;;
+2DAE;ETHIOPIC SYLLABLE CCO;Lo;0;L;;;;;N;;;;;
+2DB0;ETHIOPIC SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
+2DB1;ETHIOPIC SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
+2DB2;ETHIOPIC SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
+2DB3;ETHIOPIC SYLLABLE ZZAA;Lo;0;L;;;;;N;;;;;
+2DB4;ETHIOPIC SYLLABLE ZZEE;Lo;0;L;;;;;N;;;;;
+2DB5;ETHIOPIC SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
+2DB6;ETHIOPIC SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
+2DB8;ETHIOPIC SYLLABLE CCHA;Lo;0;L;;;;;N;;;;;
+2DB9;ETHIOPIC SYLLABLE CCHU;Lo;0;L;;;;;N;;;;;
+2DBA;ETHIOPIC SYLLABLE CCHI;Lo;0;L;;;;;N;;;;;
+2DBB;ETHIOPIC SYLLABLE CCHAA;Lo;0;L;;;;;N;;;;;
+2DBC;ETHIOPIC SYLLABLE CCHEE;Lo;0;L;;;;;N;;;;;
+2DBD;ETHIOPIC SYLLABLE CCHE;Lo;0;L;;;;;N;;;;;
+2DBE;ETHIOPIC SYLLABLE CCHO;Lo;0;L;;;;;N;;;;;
+2DC0;ETHIOPIC SYLLABLE QYA;Lo;0;L;;;;;N;;;;;
+2DC1;ETHIOPIC SYLLABLE QYU;Lo;0;L;;;;;N;;;;;
+2DC2;ETHIOPIC SYLLABLE QYI;Lo;0;L;;;;;N;;;;;
+2DC3;ETHIOPIC SYLLABLE QYAA;Lo;0;L;;;;;N;;;;;
+2DC4;ETHIOPIC SYLLABLE QYEE;Lo;0;L;;;;;N;;;;;
+2DC5;ETHIOPIC SYLLABLE QYE;Lo;0;L;;;;;N;;;;;
+2DC6;ETHIOPIC SYLLABLE QYO;Lo;0;L;;;;;N;;;;;
+2DC8;ETHIOPIC SYLLABLE KYA;Lo;0;L;;;;;N;;;;;
+2DC9;ETHIOPIC SYLLABLE KYU;Lo;0;L;;;;;N;;;;;
+2DCA;ETHIOPIC SYLLABLE KYI;Lo;0;L;;;;;N;;;;;
+2DCB;ETHIOPIC SYLLABLE KYAA;Lo;0;L;;;;;N;;;;;
+2DCC;ETHIOPIC SYLLABLE KYEE;Lo;0;L;;;;;N;;;;;
+2DCD;ETHIOPIC SYLLABLE KYE;Lo;0;L;;;;;N;;;;;
+2DCE;ETHIOPIC SYLLABLE KYO;Lo;0;L;;;;;N;;;;;
+2DD0;ETHIOPIC SYLLABLE XYA;Lo;0;L;;;;;N;;;;;
+2DD1;ETHIOPIC SYLLABLE XYU;Lo;0;L;;;;;N;;;;;
+2DD2;ETHIOPIC SYLLABLE XYI;Lo;0;L;;;;;N;;;;;
+2DD3;ETHIOPIC SYLLABLE XYAA;Lo;0;L;;;;;N;;;;;
+2DD4;ETHIOPIC SYLLABLE XYEE;Lo;0;L;;;;;N;;;;;
+2DD5;ETHIOPIC SYLLABLE XYE;Lo;0;L;;;;;N;;;;;
+2DD6;ETHIOPIC SYLLABLE XYO;Lo;0;L;;;;;N;;;;;
+2DD8;ETHIOPIC SYLLABLE GYA;Lo;0;L;;;;;N;;;;;
+2DD9;ETHIOPIC SYLLABLE GYU;Lo;0;L;;;;;N;;;;;
+2DDA;ETHIOPIC SYLLABLE GYI;Lo;0;L;;;;;N;;;;;
+2DDB;ETHIOPIC SYLLABLE GYAA;Lo;0;L;;;;;N;;;;;
+2DDC;ETHIOPIC SYLLABLE GYEE;Lo;0;L;;;;;N;;;;;
+2DDD;ETHIOPIC SYLLABLE GYE;Lo;0;L;;;;;N;;;;;
+2DDE;ETHIOPIC SYLLABLE GYO;Lo;0;L;;;;;N;;;;;
+2E00;RIGHT ANGLE SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;;
+2E01;RIGHT ANGLE DOTTED SUBSTITUTION MARKER;Po;0;ON;;;;;N;;;;;
+2E02;LEFT SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E03;RIGHT SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E04;LEFT DOTTED SUBSTITUTION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E05;RIGHT DOTTED SUBSTITUTION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E06;RAISED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;;
+2E07;RAISED DOTTED INTERPOLATION MARKER;Po;0;ON;;;;;N;;;;;
+2E08;DOTTED TRANSPOSITION MARKER;Po;0;ON;;;;;N;;;;;
+2E09;LEFT TRANSPOSITION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E0A;RIGHT TRANSPOSITION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E0B;RAISED SQUARE;Po;0;ON;;;;;N;;;;;
+2E0C;LEFT RAISED OMISSION BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E0D;RIGHT RAISED OMISSION BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E0E;EDITORIAL CORONIS;Po;0;ON;;;;;N;;;;;
+2E0F;PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
+2E10;FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
+2E11;REVERSED FORKED PARAGRAPHOS;Po;0;ON;;;;;N;;;;;
+2E12;HYPODIASTOLE;Po;0;ON;;;;;N;;;;;
+2E13;DOTTED OBELOS;Po;0;ON;;;;;N;;;;;
+2E14;DOWNWARDS ANCORA;Po;0;ON;;;;;N;;;;;
+2E15;UPWARDS ANCORA;Po;0;ON;;;;;N;;;;;
+2E16;DOTTED RIGHT-POINTING ANGLE;Po;0;ON;;;;;N;;;;;
+2E17;DOUBLE OBLIQUE HYPHEN;Pd;0;ON;;;;;N;;;;;
+2E1C;LEFT LOW PARAPHRASE BRACKET;Pi;0;ON;;;;;Y;;;;;
+2E1D;RIGHT LOW PARAPHRASE BRACKET;Pf;0;ON;;;;;Y;;;;;
+2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
+2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
+2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
+2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;;
+2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;;
+2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;;
+2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;;
+2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;;
+2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;;
+2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;;
+2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;;
+2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;;
+2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;;
+2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;;
+2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;;
+2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;;
+2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;;
+2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;;
+2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;;
+2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;;
+2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;;
+2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;;
+2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;;
+2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;;
+2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;;
+2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;;
+2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;;
+2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;;
+2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;;
+2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;;
+2E9F;CJK RADICAL MOTHER;So;0;ON;<compat> 6BCD;;;;N;;;;;
+2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;;
+2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;;
+2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;;
+2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;;
+2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;;
+2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;;
+2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;;
+2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;;
+2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;;
+2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;;
+2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;;
+2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;;
+2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;;
+2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;;
+2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;;
+2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;;
+2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;;
+2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;;
+2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;;
+2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;;
+2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;;
+2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;;
+2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;;
+2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;;
+2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;;
+2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;;
+2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;;
+2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;;
+2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;;
+2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;;
+2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;;
+2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;;
+2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;;
+2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;;
+2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;;
+2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;;
+2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;;
+2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;;
+2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;;
+2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;;
+2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;;
+2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;;
+2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;;
+2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;;
+2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;;
+2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;;
+2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;;
+2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;;
+2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;;
+2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;;
+2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;;
+2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;;
+2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;;
+2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;;
+2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;;
+2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;;
+2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;;
+2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;;
+2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;;
+2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;;
+2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;;
+2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;;
+2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;;
+2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;;
+2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;;
+2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;;
+2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;;
+2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;;
+2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;;
+2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;;
+2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;;
+2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;;
+2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;;
+2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;;
+2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;;
+2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
+2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
+2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
+2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
+2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
+2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
+2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;;
+2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;;
+2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON;<compat> 9F9F;;;;N;;;;;
+2F00;KANGXI RADICAL ONE;So;0;ON;<compat> 4E00;;;;N;;;;;
+2F01;KANGXI RADICAL LINE;So;0;ON;<compat> 4E28;;;;N;;;;;
+2F02;KANGXI RADICAL DOT;So;0;ON;<compat> 4E36;;;;N;;;;;
+2F03;KANGXI RADICAL SLASH;So;0;ON;<compat> 4E3F;;;;N;;;;;
+2F04;KANGXI RADICAL SECOND;So;0;ON;<compat> 4E59;;;;N;;;;;
+2F05;KANGXI RADICAL HOOK;So;0;ON;<compat> 4E85;;;;N;;;;;
+2F06;KANGXI RADICAL TWO;So;0;ON;<compat> 4E8C;;;;N;;;;;
+2F07;KANGXI RADICAL LID;So;0;ON;<compat> 4EA0;;;;N;;;;;
+2F08;KANGXI RADICAL MAN;So;0;ON;<compat> 4EBA;;;;N;;;;;
+2F09;KANGXI RADICAL LEGS;So;0;ON;<compat> 513F;;;;N;;;;;
+2F0A;KANGXI RADICAL ENTER;So;0;ON;<compat> 5165;;;;N;;;;;
+2F0B;KANGXI RADICAL EIGHT;So;0;ON;<compat> 516B;;;;N;;;;;
+2F0C;KANGXI RADICAL DOWN BOX;So;0;ON;<compat> 5182;;;;N;;;;;
+2F0D;KANGXI RADICAL COVER;So;0;ON;<compat> 5196;;;;N;;;;;
+2F0E;KANGXI RADICAL ICE;So;0;ON;<compat> 51AB;;;;N;;;;;
+2F0F;KANGXI RADICAL TABLE;So;0;ON;<compat> 51E0;;;;N;;;;;
+2F10;KANGXI RADICAL OPEN BOX;So;0;ON;<compat> 51F5;;;;N;;;;;
+2F11;KANGXI RADICAL KNIFE;So;0;ON;<compat> 5200;;;;N;;;;;
+2F12;KANGXI RADICAL POWER;So;0;ON;<compat> 529B;;;;N;;;;;
+2F13;KANGXI RADICAL WRAP;So;0;ON;<compat> 52F9;;;;N;;;;;
+2F14;KANGXI RADICAL SPOON;So;0;ON;<compat> 5315;;;;N;;;;;
+2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON;<compat> 531A;;;;N;;;;;
+2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON;<compat> 5338;;;;N;;;;;
+2F17;KANGXI RADICAL TEN;So;0;ON;<compat> 5341;;;;N;;;;;
+2F18;KANGXI RADICAL DIVINATION;So;0;ON;<compat> 535C;;;;N;;;;;
+2F19;KANGXI RADICAL SEAL;So;0;ON;<compat> 5369;;;;N;;;;;
+2F1A;KANGXI RADICAL CLIFF;So;0;ON;<compat> 5382;;;;N;;;;;
+2F1B;KANGXI RADICAL PRIVATE;So;0;ON;<compat> 53B6;;;;N;;;;;
+2F1C;KANGXI RADICAL AGAIN;So;0;ON;<compat> 53C8;;;;N;;;;;
+2F1D;KANGXI RADICAL MOUTH;So;0;ON;<compat> 53E3;;;;N;;;;;
+2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON;<compat> 56D7;;;;N;;;;;
+2F1F;KANGXI RADICAL EARTH;So;0;ON;<compat> 571F;;;;N;;;;;
+2F20;KANGXI RADICAL SCHOLAR;So;0;ON;<compat> 58EB;;;;N;;;;;
+2F21;KANGXI RADICAL GO;So;0;ON;<compat> 5902;;;;N;;;;;
+2F22;KANGXI RADICAL GO SLOWLY;So;0;ON;<compat> 590A;;;;N;;;;;
+2F23;KANGXI RADICAL EVENING;So;0;ON;<compat> 5915;;;;N;;;;;
+2F24;KANGXI RADICAL BIG;So;0;ON;<compat> 5927;;;;N;;;;;
+2F25;KANGXI RADICAL WOMAN;So;0;ON;<compat> 5973;;;;N;;;;;
+2F26;KANGXI RADICAL CHILD;So;0;ON;<compat> 5B50;;;;N;;;;;
+2F27;KANGXI RADICAL ROOF;So;0;ON;<compat> 5B80;;;;N;;;;;
+2F28;KANGXI RADICAL INCH;So;0;ON;<compat> 5BF8;;;;N;;;;;
+2F29;KANGXI RADICAL SMALL;So;0;ON;<compat> 5C0F;;;;N;;;;;
+2F2A;KANGXI RADICAL LAME;So;0;ON;<compat> 5C22;;;;N;;;;;
+2F2B;KANGXI RADICAL CORPSE;So;0;ON;<compat> 5C38;;;;N;;;;;
+2F2C;KANGXI RADICAL SPROUT;So;0;ON;<compat> 5C6E;;;;N;;;;;
+2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON;<compat> 5C71;;;;N;;;;;
+2F2E;KANGXI RADICAL RIVER;So;0;ON;<compat> 5DDB;;;;N;;;;;
+2F2F;KANGXI RADICAL WORK;So;0;ON;<compat> 5DE5;;;;N;;;;;
+2F30;KANGXI RADICAL ONESELF;So;0;ON;<compat> 5DF1;;;;N;;;;;
+2F31;KANGXI RADICAL TURBAN;So;0;ON;<compat> 5DFE;;;;N;;;;;
+2F32;KANGXI RADICAL DRY;So;0;ON;<compat> 5E72;;;;N;;;;;
+2F33;KANGXI RADICAL SHORT THREAD;So;0;ON;<compat> 5E7A;;;;N;;;;;
+2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON;<compat> 5E7F;;;;N;;;;;
+2F35;KANGXI RADICAL LONG STRIDE;So;0;ON;<compat> 5EF4;;;;N;;;;;
+2F36;KANGXI RADICAL TWO HANDS;So;0;ON;<compat> 5EFE;;;;N;;;;;
+2F37;KANGXI RADICAL SHOOT;So;0;ON;<compat> 5F0B;;;;N;;;;;
+2F38;KANGXI RADICAL BOW;So;0;ON;<compat> 5F13;;;;N;;;;;
+2F39;KANGXI RADICAL SNOUT;So;0;ON;<compat> 5F50;;;;N;;;;;
+2F3A;KANGXI RADICAL BRISTLE;So;0;ON;<compat> 5F61;;;;N;;;;;
+2F3B;KANGXI RADICAL STEP;So;0;ON;<compat> 5F73;;;;N;;;;;
+2F3C;KANGXI RADICAL HEART;So;0;ON;<compat> 5FC3;;;;N;;;;;
+2F3D;KANGXI RADICAL HALBERD;So;0;ON;<compat> 6208;;;;N;;;;;
+2F3E;KANGXI RADICAL DOOR;So;0;ON;<compat> 6236;;;;N;;;;;
+2F3F;KANGXI RADICAL HAND;So;0;ON;<compat> 624B;;;;N;;;;;
+2F40;KANGXI RADICAL BRANCH;So;0;ON;<compat> 652F;;;;N;;;;;
+2F41;KANGXI RADICAL RAP;So;0;ON;<compat> 6534;;;;N;;;;;
+2F42;KANGXI RADICAL SCRIPT;So;0;ON;<compat> 6587;;;;N;;;;;
+2F43;KANGXI RADICAL DIPPER;So;0;ON;<compat> 6597;;;;N;;;;;
+2F44;KANGXI RADICAL AXE;So;0;ON;<compat> 65A4;;;;N;;;;;
+2F45;KANGXI RADICAL SQUARE;So;0;ON;<compat> 65B9;;;;N;;;;;
+2F46;KANGXI RADICAL NOT;So;0;ON;<compat> 65E0;;;;N;;;;;
+2F47;KANGXI RADICAL SUN;So;0;ON;<compat> 65E5;;;;N;;;;;
+2F48;KANGXI RADICAL SAY;So;0;ON;<compat> 66F0;;;;N;;;;;
+2F49;KANGXI RADICAL MOON;So;0;ON;<compat> 6708;;;;N;;;;;
+2F4A;KANGXI RADICAL TREE;So;0;ON;<compat> 6728;;;;N;;;;;
+2F4B;KANGXI RADICAL LACK;So;0;ON;<compat> 6B20;;;;N;;;;;
+2F4C;KANGXI RADICAL STOP;So;0;ON;<compat> 6B62;;;;N;;;;;
+2F4D;KANGXI RADICAL DEATH;So;0;ON;<compat> 6B79;;;;N;;;;;
+2F4E;KANGXI RADICAL WEAPON;So;0;ON;<compat> 6BB3;;;;N;;;;;
+2F4F;KANGXI RADICAL DO NOT;So;0;ON;<compat> 6BCB;;;;N;;;;;
+2F50;KANGXI RADICAL COMPARE;So;0;ON;<compat> 6BD4;;;;N;;;;;
+2F51;KANGXI RADICAL FUR;So;0;ON;<compat> 6BDB;;;;N;;;;;
+2F52;KANGXI RADICAL CLAN;So;0;ON;<compat> 6C0F;;;;N;;;;;
+2F53;KANGXI RADICAL STEAM;So;0;ON;<compat> 6C14;;;;N;;;;;
+2F54;KANGXI RADICAL WATER;So;0;ON;<compat> 6C34;;;;N;;;;;
+2F55;KANGXI RADICAL FIRE;So;0;ON;<compat> 706B;;;;N;;;;;
+2F56;KANGXI RADICAL CLAW;So;0;ON;<compat> 722A;;;;N;;;;;
+2F57;KANGXI RADICAL FATHER;So;0;ON;<compat> 7236;;;;N;;;;;
+2F58;KANGXI RADICAL DOUBLE X;So;0;ON;<compat> 723B;;;;N;;;;;
+2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON;<compat> 723F;;;;N;;;;;
+2F5A;KANGXI RADICAL SLICE;So;0;ON;<compat> 7247;;;;N;;;;;
+2F5B;KANGXI RADICAL FANG;So;0;ON;<compat> 7259;;;;N;;;;;
+2F5C;KANGXI RADICAL COW;So;0;ON;<compat> 725B;;;;N;;;;;
+2F5D;KANGXI RADICAL DOG;So;0;ON;<compat> 72AC;;;;N;;;;;
+2F5E;KANGXI RADICAL PROFOUND;So;0;ON;<compat> 7384;;;;N;;;;;
+2F5F;KANGXI RADICAL JADE;So;0;ON;<compat> 7389;;;;N;;;;;
+2F60;KANGXI RADICAL MELON;So;0;ON;<compat> 74DC;;;;N;;;;;
+2F61;KANGXI RADICAL TILE;So;0;ON;<compat> 74E6;;;;N;;;;;
+2F62;KANGXI RADICAL SWEET;So;0;ON;<compat> 7518;;;;N;;;;;
+2F63;KANGXI RADICAL LIFE;So;0;ON;<compat> 751F;;;;N;;;;;
+2F64;KANGXI RADICAL USE;So;0;ON;<compat> 7528;;;;N;;;;;
+2F65;KANGXI RADICAL FIELD;So;0;ON;<compat> 7530;;;;N;;;;;
+2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON;<compat> 758B;;;;N;;;;;
+2F67;KANGXI RADICAL SICKNESS;So;0;ON;<compat> 7592;;;;N;;;;;
+2F68;KANGXI RADICAL DOTTED TENT;So;0;ON;<compat> 7676;;;;N;;;;;
+2F69;KANGXI RADICAL WHITE;So;0;ON;<compat> 767D;;;;N;;;;;
+2F6A;KANGXI RADICAL SKIN;So;0;ON;<compat> 76AE;;;;N;;;;;
+2F6B;KANGXI RADICAL DISH;So;0;ON;<compat> 76BF;;;;N;;;;;
+2F6C;KANGXI RADICAL EYE;So;0;ON;<compat> 76EE;;;;N;;;;;
+2F6D;KANGXI RADICAL SPEAR;So;0;ON;<compat> 77DB;;;;N;;;;;
+2F6E;KANGXI RADICAL ARROW;So;0;ON;<compat> 77E2;;;;N;;;;;
+2F6F;KANGXI RADICAL STONE;So;0;ON;<compat> 77F3;;;;N;;;;;
+2F70;KANGXI RADICAL SPIRIT;So;0;ON;<compat> 793A;;;;N;;;;;
+2F71;KANGXI RADICAL TRACK;So;0;ON;<compat> 79B8;;;;N;;;;;
+2F72;KANGXI RADICAL GRAIN;So;0;ON;<compat> 79BE;;;;N;;;;;
+2F73;KANGXI RADICAL CAVE;So;0;ON;<compat> 7A74;;;;N;;;;;
+2F74;KANGXI RADICAL STAND;So;0;ON;<compat> 7ACB;;;;N;;;;;
+2F75;KANGXI RADICAL BAMBOO;So;0;ON;<compat> 7AF9;;;;N;;;;;
+2F76;KANGXI RADICAL RICE;So;0;ON;<compat> 7C73;;;;N;;;;;
+2F77;KANGXI RADICAL SILK;So;0;ON;<compat> 7CF8;;;;N;;;;;
+2F78;KANGXI RADICAL JAR;So;0;ON;<compat> 7F36;;;;N;;;;;
+2F79;KANGXI RADICAL NET;So;0;ON;<compat> 7F51;;;;N;;;;;
+2F7A;KANGXI RADICAL SHEEP;So;0;ON;<compat> 7F8A;;;;N;;;;;
+2F7B;KANGXI RADICAL FEATHER;So;0;ON;<compat> 7FBD;;;;N;;;;;
+2F7C;KANGXI RADICAL OLD;So;0;ON;<compat> 8001;;;;N;;;;;
+2F7D;KANGXI RADICAL AND;So;0;ON;<compat> 800C;;;;N;;;;;
+2F7E;KANGXI RADICAL PLOW;So;0;ON;<compat> 8012;;;;N;;;;;
+2F7F;KANGXI RADICAL EAR;So;0;ON;<compat> 8033;;;;N;;;;;
+2F80;KANGXI RADICAL BRUSH;So;0;ON;<compat> 807F;;;;N;;;;;
+2F81;KANGXI RADICAL MEAT;So;0;ON;<compat> 8089;;;;N;;;;;
+2F82;KANGXI RADICAL MINISTER;So;0;ON;<compat> 81E3;;;;N;;;;;
+2F83;KANGXI RADICAL SELF;So;0;ON;<compat> 81EA;;;;N;;;;;
+2F84;KANGXI RADICAL ARRIVE;So;0;ON;<compat> 81F3;;;;N;;;;;
+2F85;KANGXI RADICAL MORTAR;So;0;ON;<compat> 81FC;;;;N;;;;;
+2F86;KANGXI RADICAL TONGUE;So;0;ON;<compat> 820C;;;;N;;;;;
+2F87;KANGXI RADICAL OPPOSE;So;0;ON;<compat> 821B;;;;N;;;;;
+2F88;KANGXI RADICAL BOAT;So;0;ON;<compat> 821F;;;;N;;;;;
+2F89;KANGXI RADICAL STOPPING;So;0;ON;<compat> 826E;;;;N;;;;;
+2F8A;KANGXI RADICAL COLOR;So;0;ON;<compat> 8272;;;;N;;;;;
+2F8B;KANGXI RADICAL GRASS;So;0;ON;<compat> 8278;;;;N;;;;;
+2F8C;KANGXI RADICAL TIGER;So;0;ON;<compat> 864D;;;;N;;;;;
+2F8D;KANGXI RADICAL INSECT;So;0;ON;<compat> 866B;;;;N;;;;;
+2F8E;KANGXI RADICAL BLOOD;So;0;ON;<compat> 8840;;;;N;;;;;
+2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON;<compat> 884C;;;;N;;;;;
+2F90;KANGXI RADICAL CLOTHES;So;0;ON;<compat> 8863;;;;N;;;;;
+2F91;KANGXI RADICAL WEST;So;0;ON;<compat> 897E;;;;N;;;;;
+2F92;KANGXI RADICAL SEE;So;0;ON;<compat> 898B;;;;N;;;;;
+2F93;KANGXI RADICAL HORN;So;0;ON;<compat> 89D2;;;;N;;;;;
+2F94;KANGXI RADICAL SPEECH;So;0;ON;<compat> 8A00;;;;N;;;;;
+2F95;KANGXI RADICAL VALLEY;So;0;ON;<compat> 8C37;;;;N;;;;;
+2F96;KANGXI RADICAL BEAN;So;0;ON;<compat> 8C46;;;;N;;;;;
+2F97;KANGXI RADICAL PIG;So;0;ON;<compat> 8C55;;;;N;;;;;
+2F98;KANGXI RADICAL BADGER;So;0;ON;<compat> 8C78;;;;N;;;;;
+2F99;KANGXI RADICAL SHELL;So;0;ON;<compat> 8C9D;;;;N;;;;;
+2F9A;KANGXI RADICAL RED;So;0;ON;<compat> 8D64;;;;N;;;;;
+2F9B;KANGXI RADICAL RUN;So;0;ON;<compat> 8D70;;;;N;;;;;
+2F9C;KANGXI RADICAL FOOT;So;0;ON;<compat> 8DB3;;;;N;;;;;
+2F9D;KANGXI RADICAL BODY;So;0;ON;<compat> 8EAB;;;;N;;;;;
+2F9E;KANGXI RADICAL CART;So;0;ON;<compat> 8ECA;;;;N;;;;;
+2F9F;KANGXI RADICAL BITTER;So;0;ON;<compat> 8F9B;;;;N;;;;;
+2FA0;KANGXI RADICAL MORNING;So;0;ON;<compat> 8FB0;;;;N;;;;;
+2FA1;KANGXI RADICAL WALK;So;0;ON;<compat> 8FB5;;;;N;;;;;
+2FA2;KANGXI RADICAL CITY;So;0;ON;<compat> 9091;;;;N;;;;;
+2FA3;KANGXI RADICAL WINE;So;0;ON;<compat> 9149;;;;N;;;;;
+2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON;<compat> 91C6;;;;N;;;;;
+2FA5;KANGXI RADICAL VILLAGE;So;0;ON;<compat> 91CC;;;;N;;;;;
+2FA6;KANGXI RADICAL GOLD;So;0;ON;<compat> 91D1;;;;N;;;;;
+2FA7;KANGXI RADICAL LONG;So;0;ON;<compat> 9577;;;;N;;;;;
+2FA8;KANGXI RADICAL GATE;So;0;ON;<compat> 9580;;;;N;;;;;
+2FA9;KANGXI RADICAL MOUND;So;0;ON;<compat> 961C;;;;N;;;;;
+2FAA;KANGXI RADICAL SLAVE;So;0;ON;<compat> 96B6;;;;N;;;;;
+2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON;<compat> 96B9;;;;N;;;;;
+2FAC;KANGXI RADICAL RAIN;So;0;ON;<compat> 96E8;;;;N;;;;;
+2FAD;KANGXI RADICAL BLUE;So;0;ON;<compat> 9751;;;;N;;;;;
+2FAE;KANGXI RADICAL WRONG;So;0;ON;<compat> 975E;;;;N;;;;;
+2FAF;KANGXI RADICAL FACE;So;0;ON;<compat> 9762;;;;N;;;;;
+2FB0;KANGXI RADICAL LEATHER;So;0;ON;<compat> 9769;;;;N;;;;;
+2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON;<compat> 97CB;;;;N;;;;;
+2FB2;KANGXI RADICAL LEEK;So;0;ON;<compat> 97ED;;;;N;;;;;
+2FB3;KANGXI RADICAL SOUND;So;0;ON;<compat> 97F3;;;;N;;;;;
+2FB4;KANGXI RADICAL LEAF;So;0;ON;<compat> 9801;;;;N;;;;;
+2FB5;KANGXI RADICAL WIND;So;0;ON;<compat> 98A8;;;;N;;;;;
+2FB6;KANGXI RADICAL FLY;So;0;ON;<compat> 98DB;;;;N;;;;;
+2FB7;KANGXI RADICAL EAT;So;0;ON;<compat> 98DF;;;;N;;;;;
+2FB8;KANGXI RADICAL HEAD;So;0;ON;<compat> 9996;;;;N;;;;;
+2FB9;KANGXI RADICAL FRAGRANT;So;0;ON;<compat> 9999;;;;N;;;;;
+2FBA;KANGXI RADICAL HORSE;So;0;ON;<compat> 99AC;;;;N;;;;;
+2FBB;KANGXI RADICAL BONE;So;0;ON;<compat> 9AA8;;;;N;;;;;
+2FBC;KANGXI RADICAL TALL;So;0;ON;<compat> 9AD8;;;;N;;;;;
+2FBD;KANGXI RADICAL HAIR;So;0;ON;<compat> 9ADF;;;;N;;;;;
+2FBE;KANGXI RADICAL FIGHT;So;0;ON;<compat> 9B25;;;;N;;;;;
+2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON;<compat> 9B2F;;;;N;;;;;
+2FC0;KANGXI RADICAL CAULDRON;So;0;ON;<compat> 9B32;;;;N;;;;;
+2FC1;KANGXI RADICAL GHOST;So;0;ON;<compat> 9B3C;;;;N;;;;;
+2FC2;KANGXI RADICAL FISH;So;0;ON;<compat> 9B5A;;;;N;;;;;
+2FC3;KANGXI RADICAL BIRD;So;0;ON;<compat> 9CE5;;;;N;;;;;
+2FC4;KANGXI RADICAL SALT;So;0;ON;<compat> 9E75;;;;N;;;;;
+2FC5;KANGXI RADICAL DEER;So;0;ON;<compat> 9E7F;;;;N;;;;;
+2FC6;KANGXI RADICAL WHEAT;So;0;ON;<compat> 9EA5;;;;N;;;;;
+2FC7;KANGXI RADICAL HEMP;So;0;ON;<compat> 9EBB;;;;N;;;;;
+2FC8;KANGXI RADICAL YELLOW;So;0;ON;<compat> 9EC3;;;;N;;;;;
+2FC9;KANGXI RADICAL MILLET;So;0;ON;<compat> 9ECD;;;;N;;;;;
+2FCA;KANGXI RADICAL BLACK;So;0;ON;<compat> 9ED1;;;;N;;;;;
+2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON;<compat> 9EF9;;;;N;;;;;
+2FCC;KANGXI RADICAL FROG;So;0;ON;<compat> 9EFD;;;;N;;;;;
+2FCD;KANGXI RADICAL TRIPOD;So;0;ON;<compat> 9F0E;;;;N;;;;;
+2FCE;KANGXI RADICAL DRUM;So;0;ON;<compat> 9F13;;;;N;;;;;
+2FCF;KANGXI RADICAL RAT;So;0;ON;<compat> 9F20;;;;N;;;;;
+2FD0;KANGXI RADICAL NOSE;So;0;ON;<compat> 9F3B;;;;N;;;;;
+2FD1;KANGXI RADICAL EVEN;So;0;ON;<compat> 9F4A;;;;N;;;;;
+2FD2;KANGXI RADICAL TOOTH;So;0;ON;<compat> 9F52;;;;N;;;;;
+2FD3;KANGXI RADICAL DRAGON;So;0;ON;<compat> 9F8D;;;;N;;;;;
+2FD4;KANGXI RADICAL TURTLE;So;0;ON;<compat> 9F9C;;;;N;;;;;
+2FD5;KANGXI RADICAL FLUTE;So;0;ON;<compat> 9FA0;;;;N;;;;;
+2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;;
+2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;;
+2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;;
+2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;;
+2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;;
+2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;;
+2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;;
+2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;;
+2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;;
+2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;;
+2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;;
+2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;;
+3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;
+3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;;
+3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;;
+3003;DITTO MARK;Po;0;ON;;;;;N;;;;;
+3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;;
+3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;
+3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;;
+3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;;
+3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;;
+3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;;
+300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;;
+300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;;
+300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;;
+300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;;
+300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;;
+300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;;
+3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;;
+3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;;
+3012;POSTAL MARK;So;0;ON;;;;;N;;;;;
+3013;GETA MARK;So;0;ON;;;;;N;;;;;
+3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;;
+3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;;
+3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;;
+3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;;
+3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;;
+3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;;
+301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;;
+301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;;
+301C;WAVE DASH;Pd;0;ON;;;;;N;;;;;
+301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;Y;;;;;
+301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;Y;;;;;
+301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;Y;;;;;
+3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;;
+3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;;
+3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;;
+3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;;
+3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;;
+3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;;
+3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;;
+3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;;
+3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;;
+3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;;
+302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;;
+302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;;
+302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;;
+302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;;
+302E;HANGUL SINGLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
+302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
+3030;WAVY DASH;Pd;0;ON;;;;;N;;;;;
+3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;;
+3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;;
+3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
+3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
+3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;;
+3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;;
+3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;;
+3038;HANGZHOU NUMERAL TEN;Nl;0;L;<compat> 5341;;;10;N;;;;;
+3039;HANGZHOU NUMERAL TWENTY;Nl;0;L;<compat> 5344;;;20;N;;;;;
+303A;HANGZHOU NUMERAL THIRTY;Nl;0;L;<compat> 5345;;;30;N;;;;;
+303B;VERTICAL IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;
+303C;MASU MARK;Lo;0;L;;;;;N;;;;;
+303D;PART ALTERNATION MARK;Po;0;ON;;;;;N;;;;;
+303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;;
+303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;;
+3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;;
+3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;;
+3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;;
+3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;;
+3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;;
+304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;;
+304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;;
+304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;;
+304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;;
+304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;;
+3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;;
+3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;;
+3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;;
+3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;;
+3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;;
+3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;;
+3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;;
+3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;;
+3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;;
+3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;;
+305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;;
+305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;;
+305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;;
+305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;;
+305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;;
+305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;;
+3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;;
+3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;;
+3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;;
+3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;;
+3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;;
+3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;;
+3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;;
+3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;;
+3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;;
+306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;;
+306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;;
+306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;;
+306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;;
+306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;;
+306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;;
+3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;;
+3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;;
+3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;;
+3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;;
+3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;;
+3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;;
+3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;;
+3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;;
+3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;;
+3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;;
+307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;;
+307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;;
+307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;;
+307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;;
+307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;;
+307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;;
+3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;;
+3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;;
+3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;;
+3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;;
+3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;;
+3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;;
+3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;;
+308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;;
+308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;;
+308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;;
+308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;;
+308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;;
+3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;;
+3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;;
+3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;;
+3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;;
+3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;;
+3095;HIRAGANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
+3096;HIRAGANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
+3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;;
+309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;;
+309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON;<compat> 0020 3099;;;;N;;;;;
+309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON;<compat> 0020 309A;;;;N;;;;;
+309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;;
+309F;HIRAGANA DIGRAPH YORI;Lo;0;L;<vertical> 3088 308A;;;;N;;;;;
+30A0;KATAKANA-HIRAGANA DOUBLE HYPHEN;Pd;0;ON;;;;;N;;;;;
+30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;;
+30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;;
+30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;;
+30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;;
+30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;;
+30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;;
+30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;;
+30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;;
+30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;;
+30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;;
+30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;;
+30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;;
+30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;;
+30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;;
+30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;;
+30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;;
+30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;;
+30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;;
+30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;;
+30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;;
+30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;;
+30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;;
+30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;;
+30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;;
+30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;;
+30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;;
+30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;;
+30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;;
+30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;;
+30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;;
+30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;;
+30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;;
+30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;;
+30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;;
+30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;;
+30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;;
+30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;;
+30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;;
+30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;;
+30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;;
+30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;;
+30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;;
+30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;;
+30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;;
+30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;;
+30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;;
+30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;;
+30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;;
+30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;;
+30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;;
+30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;;
+30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;;
+30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;;
+30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;;
+30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;;
+30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;;
+30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;;
+30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;;
+30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;;
+30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;;
+30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;;
+30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;;
+30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;;
+30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;;
+30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;;
+30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;;
+30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;;
+30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;;
+30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;;
+30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;;
+30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;;
+30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;;
+30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;;
+30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;;
+30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
+30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
+30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;;
+30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
+30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
+30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
+30FB;KATAKANA MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
+30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
+30FF;KATAKANA DIGRAPH KOTO;Lo;0;L;<vertical> 30B3 30C8;;;;N;;;;;
+3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;;
+3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;;
+3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;;
+3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;;
+3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;;
+310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;;
+310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;;
+310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;;
+310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;;
+310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;;
+310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;;
+3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;;
+3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;;
+3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;;
+3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;;
+3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;;
+3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;;
+3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;;
+3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;;
+3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;;
+3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;;
+311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;;
+311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;;
+311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;;
+311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;;
+311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;;
+311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;;
+3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;;
+3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;;
+3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;;
+3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;;
+3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;;
+3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;;
+3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;;
+3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;;
+3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;;
+3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;;
+312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;
+312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
+312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
+3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
+3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
+3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
+3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;;
+3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;;
+3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;;
+3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;;
+3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;;
+3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;;
+313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;;
+313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;;
+313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;;
+313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;;
+313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;;
+313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;;
+3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;;
+3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;;
+3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;;
+3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;;
+3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;;
+3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;;
+3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;;
+3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;;
+3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;;
+3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;;
+314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;;
+314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;;
+314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;;
+314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;;
+314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;;
+314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;;
+3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;;
+3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;;
+3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;;
+3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;;
+3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;;
+3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;;
+3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;;
+3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;;
+3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;;
+3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;;
+315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;;
+315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;;
+315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;;
+315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;;
+315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;;
+315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;;
+3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;;
+3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;;
+3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;;
+3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;;
+3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;;
+3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;;
+3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;;
+3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;;
+3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;;
+3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;;
+316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;;
+316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;;
+316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;;
+316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;;
+316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;;
+316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;;
+3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;;
+3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;;
+3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;;
+3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;;
+3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;;
+3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;;
+3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;;
+3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;;
+3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;;
+3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;;
+317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;;
+317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;;
+317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;;
+317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;;
+317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;;
+317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;;
+3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;;
+3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;;
+3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;;
+3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;;
+3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;;
+3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;;
+3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;;
+3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;;
+3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;;
+3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;;
+318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;;
+318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;;
+318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;;
+318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;;
+318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
+3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;;
+3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;;
+3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;1;N;KAERITEN ITI;Kaeriten;;;
+3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;2;N;KAERITEN NI;Kaeriten;;;
+3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;3;N;KAERITEN SAN;Kaeriten;;;
+3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;4;N;KAERITEN SI;Kaeriten;;;
+3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;;
+3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;;
+3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;Kaeriten;;;
+3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;Kaeriten;;;
+319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;Kaeriten;;;
+319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;Kaeriten;;;
+319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;Kaeriten;;;
+319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;Kaeriten;;;
+319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;Kaeriten;;;
+319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;;
+31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;;
+31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;;
+31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;;
+31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;;
+31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;;
+31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;;
+31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;;
+31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;;
+31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;;
+31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;;
+31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;;
+31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;;
+31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;;
+31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;;
+31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;;
+31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;;
+31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;;
+31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;;
+31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;;
+31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;;
+31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;;
+31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;;
+31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;;
+31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;;
+31C0;CJK STROKE T;So;0;ON;;;;;N;;;;;
+31C1;CJK STROKE WG;So;0;ON;;;;;N;;;;;
+31C2;CJK STROKE XG;So;0;ON;;;;;N;;;;;
+31C3;CJK STROKE BXG;So;0;ON;;;;;N;;;;;
+31C4;CJK STROKE SW;So;0;ON;;;;;N;;;;;
+31C5;CJK STROKE HZZ;So;0;ON;;;;;N;;;;;
+31C6;CJK STROKE HZG;So;0;ON;;;;;N;;;;;
+31C7;CJK STROKE HP;So;0;ON;;;;;N;;;;;
+31C8;CJK STROKE HZWG;So;0;ON;;;;;N;;;;;
+31C9;CJK STROKE SZWG;So;0;ON;;;;;N;;;;;
+31CA;CJK STROKE HZT;So;0;ON;;;;;N;;;;;
+31CB;CJK STROKE HZZP;So;0;ON;;;;;N;;;;;
+31CC;CJK STROKE HPWG;So;0;ON;;;;;N;;;;;
+31CD;CJK STROKE HZW;So;0;ON;;;;;N;;;;;
+31CE;CJK STROKE HZZZ;So;0;ON;;;;;N;;;;;
+31CF;CJK STROKE N;So;0;ON;;;;;N;;;;;
+31F0;KATAKANA LETTER SMALL KU;Lo;0;L;;;;;N;;;;;
+31F1;KATAKANA LETTER SMALL SI;Lo;0;L;;;;;N;;;;;
+31F2;KATAKANA LETTER SMALL SU;Lo;0;L;;;;;N;;;;;
+31F3;KATAKANA LETTER SMALL TO;Lo;0;L;;;;;N;;;;;
+31F4;KATAKANA LETTER SMALL NU;Lo;0;L;;;;;N;;;;;
+31F5;KATAKANA LETTER SMALL HA;Lo;0;L;;;;;N;;;;;
+31F6;KATAKANA LETTER SMALL HI;Lo;0;L;;;;;N;;;;;
+31F7;KATAKANA LETTER SMALL HU;Lo;0;L;;;;;N;;;;;
+31F8;KATAKANA LETTER SMALL HE;Lo;0;L;;;;;N;;;;;
+31F9;KATAKANA LETTER SMALL HO;Lo;0;L;;;;;N;;;;;
+31FA;KATAKANA LETTER SMALL MU;Lo;0;L;;;;;N;;;;;
+31FB;KATAKANA LETTER SMALL RA;Lo;0;L;;;;;N;;;;;
+31FC;KATAKANA LETTER SMALL RI;Lo;0;L;;;;;N;;;;;
+31FD;KATAKANA LETTER SMALL RU;Lo;0;L;;;;;N;;;;;
+31FE;KATAKANA LETTER SMALL RE;Lo;0;L;;;;;N;;;;;
+31FF;KATAKANA LETTER SMALL RO;Lo;0;L;;;;;N;;;;;
+3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;;
+3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;;
+3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;;
+3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;;
+3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;;
+3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;;
+3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;;
+3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;;
+3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;;
+3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;;
+320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;;
+320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;;
+320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;;
+320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;;
+320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;;
+320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;;
+3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;;
+3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;;
+3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;;
+3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;;
+3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;;
+3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;;
+3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;;
+3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;;
+3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;;
+3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;;
+321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;;
+321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;;
+321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;;
+321D;PARENTHESIZED KOREAN CHARACTER OJEON;So;0;ON;<compat> 0028 110B 1169 110C 1165 11AB 0029;;;;N;;;;;
+321E;PARENTHESIZED KOREAN CHARACTER O HU;So;0;ON;<compat> 0028 110B 1169 1112 116E 0029;;;;N;;;;;
+3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;1;N;;;;;
+3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;2;N;;;;;
+3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;3;N;;;;;
+3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;4;N;;;;;
+3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;5;N;;;;;
+3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;6;N;;;;;
+3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;7;N;;;;;
+3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;8;N;;;;;
+3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;9;N;;;;;
+3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;10;N;;;;;
+322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;;
+322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;;
+322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;;
+322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;;
+322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;;
+322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;;
+3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;;
+3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;;
+3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;;
+3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;;
+3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;;
+3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;;
+3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;;
+3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;;
+3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;;
+3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;;
+323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;;
+323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;;
+323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;;
+323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;;
+323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;;
+323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;;
+3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;;
+3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;;
+3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;;
+3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;;
+3250;PARTNERSHIP SIGN;So;0;ON;<square> 0050 0054 0045;;;;N;;;;;
+3251;CIRCLED NUMBER TWENTY ONE;No;0;ON;<circle> 0032 0031;;;21;N;;;;;
+3252;CIRCLED NUMBER TWENTY TWO;No;0;ON;<circle> 0032 0032;;;22;N;;;;;
+3253;CIRCLED NUMBER TWENTY THREE;No;0;ON;<circle> 0032 0033;;;23;N;;;;;
+3254;CIRCLED NUMBER TWENTY FOUR;No;0;ON;<circle> 0032 0034;;;24;N;;;;;
+3255;CIRCLED NUMBER TWENTY FIVE;No;0;ON;<circle> 0032 0035;;;25;N;;;;;
+3256;CIRCLED NUMBER TWENTY SIX;No;0;ON;<circle> 0032 0036;;;26;N;;;;;
+3257;CIRCLED NUMBER TWENTY SEVEN;No;0;ON;<circle> 0032 0037;;;27;N;;;;;
+3258;CIRCLED NUMBER TWENTY EIGHT;No;0;ON;<circle> 0032 0038;;;28;N;;;;;
+3259;CIRCLED NUMBER TWENTY NINE;No;0;ON;<circle> 0032 0039;;;29;N;;;;;
+325A;CIRCLED NUMBER THIRTY;No;0;ON;<circle> 0033 0030;;;30;N;;;;;
+325B;CIRCLED NUMBER THIRTY ONE;No;0;ON;<circle> 0033 0031;;;31;N;;;;;
+325C;CIRCLED NUMBER THIRTY TWO;No;0;ON;<circle> 0033 0032;;;32;N;;;;;
+325D;CIRCLED NUMBER THIRTY THREE;No;0;ON;<circle> 0033 0033;;;33;N;;;;;
+325E;CIRCLED NUMBER THIRTY FOUR;No;0;ON;<circle> 0033 0034;;;34;N;;;;;
+325F;CIRCLED NUMBER THIRTY FIVE;No;0;ON;<circle> 0033 0035;;;35;N;;;;;
+3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;;
+3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;;
+3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;;
+3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;;
+3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;;
+3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;;
+3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;;
+3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;;
+3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;;
+3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;;
+326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;;
+326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;;
+326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;;
+326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;;
+326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;;
+326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;;
+3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;;
+3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;;
+3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;;
+3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;;
+3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;;
+3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;;
+3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;;
+3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;;
+3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;;
+3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;;
+327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;;
+327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
+327C;CIRCLED KOREAN CHARACTER CHAMKO;So;0;ON;<circle> 110E 1161 11B7 1100 1169;;;;N;;;;;
+327D;CIRCLED KOREAN CHARACTER JUEUI;So;0;ON;<circle> 110C 116E 110B 1174;;;;N;;;;;
+327E;CIRCLED HANGUL IEUNG U;So;0;ON;<circle> 110B 116E;;;;N;;;;;
+327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
+3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
+3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
+3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;;
+3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;;
+3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;;
+3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;;
+3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;;
+3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;;
+3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;;
+3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;;
+328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;;
+328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;;
+328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;;
+328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;;
+328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;;
+328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;;
+3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;;
+3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;;
+3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;;
+3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;;
+3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;;
+3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;;
+3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;;
+3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;;
+3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;;
+3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;;
+329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;;
+329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;;
+329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;;
+329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;;
+329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;;
+329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;;
+32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;;
+32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;;
+32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;;
+32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;;
+32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;;
+32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;;
+32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;;
+32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;;
+32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;;
+32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;;
+32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;;
+32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;;
+32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;;
+32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;;
+32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;;
+32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;;
+32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;;
+32B1;CIRCLED NUMBER THIRTY SIX;No;0;ON;<circle> 0033 0036;;;36;N;;;;;
+32B2;CIRCLED NUMBER THIRTY SEVEN;No;0;ON;<circle> 0033 0037;;;37;N;;;;;
+32B3;CIRCLED NUMBER THIRTY EIGHT;No;0;ON;<circle> 0033 0038;;;38;N;;;;;
+32B4;CIRCLED NUMBER THIRTY NINE;No;0;ON;<circle> 0033 0039;;;39;N;;;;;
+32B5;CIRCLED NUMBER FORTY;No;0;ON;<circle> 0034 0030;;;40;N;;;;;
+32B6;CIRCLED NUMBER FORTY ONE;No;0;ON;<circle> 0034 0031;;;41;N;;;;;
+32B7;CIRCLED NUMBER FORTY TWO;No;0;ON;<circle> 0034 0032;;;42;N;;;;;
+32B8;CIRCLED NUMBER FORTY THREE;No;0;ON;<circle> 0034 0033;;;43;N;;;;;
+32B9;CIRCLED NUMBER FORTY FOUR;No;0;ON;<circle> 0034 0034;;;44;N;;;;;
+32BA;CIRCLED NUMBER FORTY FIVE;No;0;ON;<circle> 0034 0035;;;45;N;;;;;
+32BB;CIRCLED NUMBER FORTY SIX;No;0;ON;<circle> 0034 0036;;;46;N;;;;;
+32BC;CIRCLED NUMBER FORTY SEVEN;No;0;ON;<circle> 0034 0037;;;47;N;;;;;
+32BD;CIRCLED NUMBER FORTY EIGHT;No;0;ON;<circle> 0034 0038;;;48;N;;;;;
+32BE;CIRCLED NUMBER FORTY NINE;No;0;ON;<circle> 0034 0039;;;49;N;;;;;
+32BF;CIRCLED NUMBER FIFTY;No;0;ON;<circle> 0035 0030;;;50;N;;;;;
+32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;;
+32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;;
+32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;;
+32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;;
+32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;;
+32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;;
+32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;;
+32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;;
+32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;;
+32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;;
+32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;;
+32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;;
+32CC;SQUARE HG;So;0;ON;<square> 0048 0067;;;;N;;;;;
+32CD;SQUARE ERG;So;0;ON;<square> 0065 0072 0067;;;;N;;;;;
+32CE;SQUARE EV;So;0;ON;<square> 0065 0056;;;;N;;;;;
+32CF;LIMITED LIABILITY SIGN;So;0;ON;<square> 004C 0054 0044;;;;N;;;;;
+32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;;
+32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;;
+32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;;
+32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;;
+32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;;
+32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;;
+32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;;
+32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;;
+32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;;
+32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;;
+32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;;
+32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;;
+32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;;
+32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;;
+32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;;
+32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;;
+32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;;
+32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;;
+32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;;
+32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;;
+32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;;
+32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;;
+32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;;
+32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;;
+32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;;
+32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;;
+32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;;
+32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;;
+32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;;
+32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;;
+32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;;
+32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;;
+32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;;
+32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;;
+32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;;
+32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;;
+32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;;
+32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;;
+32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;;
+32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;;
+32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;;
+32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;;
+32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;;
+32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;;
+32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;;
+32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;;
+32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;;
+3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;;
+3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;;
+3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;;
+3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;;
+3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;;
+3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;;
+3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;;
+3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;;
+3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;;
+3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;;
+330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;;
+330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;;
+330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;;
+330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;;
+330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;;
+330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;;
+3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;;
+3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;;
+3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;;
+3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;;
+3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;;
+3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;;
+3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;;
+3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;;
+3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;;
+3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;;
+331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;;
+331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;;
+331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;;
+331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;;
+331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;;
+331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;;
+3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;;
+3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;;
+3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;;
+3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;;
+3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;;
+3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;;
+3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;;
+3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;;
+3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;;
+3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;;
+332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;;
+332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;;
+332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;;
+332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;;
+332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;;
+332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;;
+3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;;
+3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;;
+3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;;
+3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;;
+3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;;
+3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;;
+3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;;
+3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;;
+3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;;
+3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;;
+333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;;
+333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;;
+333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;;
+333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;;
+333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;;
+333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;;
+3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;;
+3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;;
+3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;;
+3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;;
+3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;;
+3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;;
+3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;;
+3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;;
+3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;;
+3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;;
+334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;;
+334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;;
+334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;;
+334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;;
+334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;;
+334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;;
+3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;;
+3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;;
+3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;;
+3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;;
+3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;;
+3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;;
+3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;;
+3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;;
+3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;;
+3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;;
+335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;;
+335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;;
+335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;;
+335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;;
+335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;;
+335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;;
+3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;;
+3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;;
+3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;;
+3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;;
+3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;;
+3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;;
+3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;;
+3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;;
+3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;;
+3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;;
+336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;;
+336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;;
+336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;;
+336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;;
+336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;;
+336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;;
+3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;;
+3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;;
+3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;;
+3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;;
+3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;;
+3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;;
+3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;;
+3377;SQUARE DM;So;0;ON;<square> 0064 006D;;;;N;;;;;
+3378;SQUARE DM SQUARED;So;0;ON;<square> 0064 006D 00B2;;;;N;;;;;
+3379;SQUARE DM CUBED;So;0;ON;<square> 0064 006D 00B3;;;;N;;;;;
+337A;SQUARE IU;So;0;ON;<square> 0049 0055;;;;N;;;;;
+337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;;
+337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;;
+337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;;
+337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;;
+337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;;
+3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;;
+3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;;
+3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;;
+3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;;
+3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;;
+3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;;
+3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;;
+3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;;
+3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;;
+3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;;
+338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;;
+338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;;
+338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;;
+338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;;
+338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;;
+338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;;
+3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;;
+3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;;
+3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;;
+3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;;
+3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;;
+3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;;
+3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;;
+3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;;
+3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;;
+3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;;
+339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;;
+339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;;
+339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;;
+339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;;
+339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;;
+339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;;
+33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;;
+33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;;
+33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;;
+33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;;
+33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;;
+33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;;
+33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;;
+33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;;
+33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;;
+33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;;
+33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;;
+33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;;
+33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;;
+33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;;
+33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;;
+33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;;
+33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;;
+33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;;
+33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;;
+33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;;
+33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;;
+33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;;
+33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;;
+33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;;
+33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;;
+33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;;
+33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;;
+33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;;
+33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;;
+33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;;
+33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;;
+33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;;
+33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;;
+33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;;
+33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;;
+33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;;
+33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;;
+33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;;
+33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;;
+33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;;
+33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;;
+33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;;
+33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;;
+33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;;
+33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;;
+33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;;
+33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;;
+33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;;
+33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;;
+33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;;
+33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;;
+33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;;
+33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;;
+33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;;
+33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;;
+33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;;
+33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;;
+33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;;
+33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;;
+33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;;
+33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;;
+33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;;
+33DE;SQUARE V OVER M;So;0;ON;<square> 0056 2215 006D;;;;N;;;;;
+33DF;SQUARE A OVER M;So;0;ON;<square> 0041 2215 006D;;;;N;;;;;
+33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;;
+33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;;
+33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;;
+33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;;
+33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;;
+33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;;
+33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;;
+33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;;
+33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;;
+33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;;
+33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;;
+33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;;
+33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;;
+33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;;
+33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;;
+33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;;
+33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;;
+33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;;
+33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;;
+33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;;
+33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;;
+33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;;
+33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;;
+33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;;
+33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;;
+33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;;
+33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;;
+33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;;
+33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;;
+33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;;
+33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;
+33FF;SQUARE GAL;So;0;ON;<square> 0067 0061 006C;;;;N;;;;;
+3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;;
+4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;
+4DC0;HEXAGRAM FOR THE CREATIVE HEAVEN;So;0;ON;;;;;N;;;;;
+4DC1;HEXAGRAM FOR THE RECEPTIVE EARTH;So;0;ON;;;;;N;;;;;
+4DC2;HEXAGRAM FOR DIFFICULTY AT THE BEGINNING;So;0;ON;;;;;N;;;;;
+4DC3;HEXAGRAM FOR YOUTHFUL FOLLY;So;0;ON;;;;;N;;;;;
+4DC4;HEXAGRAM FOR WAITING;So;0;ON;;;;;N;;;;;
+4DC5;HEXAGRAM FOR CONFLICT;So;0;ON;;;;;N;;;;;
+4DC6;HEXAGRAM FOR THE ARMY;So;0;ON;;;;;N;;;;;
+4DC7;HEXAGRAM FOR HOLDING TOGETHER;So;0;ON;;;;;N;;;;;
+4DC8;HEXAGRAM FOR SMALL TAMING;So;0;ON;;;;;N;;;;;
+4DC9;HEXAGRAM FOR TREADING;So;0;ON;;;;;N;;;;;
+4DCA;HEXAGRAM FOR PEACE;So;0;ON;;;;;N;;;;;
+4DCB;HEXAGRAM FOR STANDSTILL;So;0;ON;;;;;N;;;;;
+4DCC;HEXAGRAM FOR FELLOWSHIP;So;0;ON;;;;;N;;;;;
+4DCD;HEXAGRAM FOR GREAT POSSESSION;So;0;ON;;;;;N;;;;;
+4DCE;HEXAGRAM FOR MODESTY;So;0;ON;;;;;N;;;;;
+4DCF;HEXAGRAM FOR ENTHUSIASM;So;0;ON;;;;;N;;;;;
+4DD0;HEXAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;;
+4DD1;HEXAGRAM FOR WORK ON THE DECAYED;So;0;ON;;;;;N;;;;;
+4DD2;HEXAGRAM FOR APPROACH;So;0;ON;;;;;N;;;;;
+4DD3;HEXAGRAM FOR CONTEMPLATION;So;0;ON;;;;;N;;;;;
+4DD4;HEXAGRAM FOR BITING THROUGH;So;0;ON;;;;;N;;;;;
+4DD5;HEXAGRAM FOR GRACE;So;0;ON;;;;;N;;;;;
+4DD6;HEXAGRAM FOR SPLITTING APART;So;0;ON;;;;;N;;;;;
+4DD7;HEXAGRAM FOR RETURN;So;0;ON;;;;;N;;;;;
+4DD8;HEXAGRAM FOR INNOCENCE;So;0;ON;;;;;N;;;;;
+4DD9;HEXAGRAM FOR GREAT TAMING;So;0;ON;;;;;N;;;;;
+4DDA;HEXAGRAM FOR MOUTH CORNERS;So;0;ON;;;;;N;;;;;
+4DDB;HEXAGRAM FOR GREAT PREPONDERANCE;So;0;ON;;;;;N;;;;;
+4DDC;HEXAGRAM FOR THE ABYSMAL WATER;So;0;ON;;;;;N;;;;;
+4DDD;HEXAGRAM FOR THE CLINGING FIRE;So;0;ON;;;;;N;;;;;
+4DDE;HEXAGRAM FOR INFLUENCE;So;0;ON;;;;;N;;;;;
+4DDF;HEXAGRAM FOR DURATION;So;0;ON;;;;;N;;;;;
+4DE0;HEXAGRAM FOR RETREAT;So;0;ON;;;;;N;;;;;
+4DE1;HEXAGRAM FOR GREAT POWER;So;0;ON;;;;;N;;;;;
+4DE2;HEXAGRAM FOR PROGRESS;So;0;ON;;;;;N;;;;;
+4DE3;HEXAGRAM FOR DARKENING OF THE LIGHT;So;0;ON;;;;;N;;;;;
+4DE4;HEXAGRAM FOR THE FAMILY;So;0;ON;;;;;N;;;;;
+4DE5;HEXAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;;
+4DE6;HEXAGRAM FOR OBSTRUCTION;So;0;ON;;;;;N;;;;;
+4DE7;HEXAGRAM FOR DELIVERANCE;So;0;ON;;;;;N;;;;;
+4DE8;HEXAGRAM FOR DECREASE;So;0;ON;;;;;N;;;;;
+4DE9;HEXAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;;
+4DEA;HEXAGRAM FOR BREAKTHROUGH;So;0;ON;;;;;N;;;;;
+4DEB;HEXAGRAM FOR COMING TO MEET;So;0;ON;;;;;N;;;;;
+4DEC;HEXAGRAM FOR GATHERING TOGETHER;So;0;ON;;;;;N;;;;;
+4DED;HEXAGRAM FOR PUSHING UPWARD;So;0;ON;;;;;N;;;;;
+4DEE;HEXAGRAM FOR OPPRESSION;So;0;ON;;;;;N;;;;;
+4DEF;HEXAGRAM FOR THE WELL;So;0;ON;;;;;N;;;;;
+4DF0;HEXAGRAM FOR REVOLUTION;So;0;ON;;;;;N;;;;;
+4DF1;HEXAGRAM FOR THE CAULDRON;So;0;ON;;;;;N;;;;;
+4DF2;HEXAGRAM FOR THE AROUSING THUNDER;So;0;ON;;;;;N;;;;;
+4DF3;HEXAGRAM FOR THE KEEPING STILL MOUNTAIN;So;0;ON;;;;;N;;;;;
+4DF4;HEXAGRAM FOR DEVELOPMENT;So;0;ON;;;;;N;;;;;
+4DF5;HEXAGRAM FOR THE MARRYING MAIDEN;So;0;ON;;;;;N;;;;;
+4DF6;HEXAGRAM FOR ABUNDANCE;So;0;ON;;;;;N;;;;;
+4DF7;HEXAGRAM FOR THE WANDERER;So;0;ON;;;;;N;;;;;
+4DF8;HEXAGRAM FOR THE GENTLE WIND;So;0;ON;;;;;N;;;;;
+4DF9;HEXAGRAM FOR THE JOYOUS LAKE;So;0;ON;;;;;N;;;;;
+4DFA;HEXAGRAM FOR DISPERSION;So;0;ON;;;;;N;;;;;
+4DFB;HEXAGRAM FOR LIMITATION;So;0;ON;;;;;N;;;;;
+4DFC;HEXAGRAM FOR INNER TRUTH;So;0;ON;;;;;N;;;;;
+4DFD;HEXAGRAM FOR SMALL PREPONDERANCE;So;0;ON;;;;;N;;;;;
+4DFE;HEXAGRAM FOR AFTER COMPLETION;So;0;ON;;;;;N;;;;;
+4DFF;HEXAGRAM FOR BEFORE COMPLETION;So;0;ON;;;;;N;;;;;
+4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
+9FBB;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
+A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
+A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
+A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;;
+A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;;
+A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;;
+A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;;
+A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;;
+A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;;
+A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;;
+A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;;
+A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;;
+A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;;
+A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;;
+A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;;
+A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;;
+A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;;
+A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;;
+A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;;
+A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;;
+A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;;
+A015;YI SYLLABLE WU;Lm;0;L;;;;;N;;;;;
+A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;;
+A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;;
+A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;;
+A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;;
+A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;;
+A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;;
+A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;;
+A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;;
+A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;;
+A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;;
+A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;;
+A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;;
+A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;;
+A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;;
+A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;;
+A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;;
+A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;;
+A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;;
+A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;;
+A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;;
+A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;;
+A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;;
+A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;;
+A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;;
+A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;;
+A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;;
+A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;;
+A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;;
+A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;;
+A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;;
+A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;;
+A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;;
+A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;;
+A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;;
+A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;;
+A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;;
+A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;;
+A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;;
+A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;;
+A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;;
+A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;;
+A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;;
+A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;;
+A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;;
+A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;;
+A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;;
+A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;;
+A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;;
+A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;;
+A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;;
+A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;;
+A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;;
+A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;;
+A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;;
+A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;;
+A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;;
+A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;;
+A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;;
+A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;;
+A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;;
+A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;;
+A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;;
+A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;;
+A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;;
+A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;;
+A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;;
+A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;;
+A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;;
+A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;;
+A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;;
+A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;;
+A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;;
+A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;;
+A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;;
+A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;;
+A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;;
+A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;;
+A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;;
+A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;;
+A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;;
+A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;;
+A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;;
+A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;;
+A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;;
+A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;;
+A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;;
+A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;;
+A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;;
+A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;;
+A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;;
+A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;;
+A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;;
+A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;;
+A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;;
+A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;;
+A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;;
+A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;;
+A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;;
+A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;;
+A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;;
+A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;;
+A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;;
+A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;;
+A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;;
+A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;;
+A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;;
+A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;;
+A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;;
+A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;;
+A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;;
+A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;;
+A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;;
+A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;;
+A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;;
+A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;;
+A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;;
+A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;;
+A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;;
+A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;;
+A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;;
+A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;;
+A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;;
+A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;;
+A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;;
+A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;;
+A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;;
+A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;;
+A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;;
+A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;;
+A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;;
+A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;;
+A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;;
+A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;;
+A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;;
+A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;;
+A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;;
+A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;;
+A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;;
+A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;;
+A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;;
+A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;;
+A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;;
+A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;;
+A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;;
+A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;;
+A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;;
+A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;;
+A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;;
+A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;;
+A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;;
+A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;;
+A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;;
+A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;;
+A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;;
+A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;;
+A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;;
+A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;;
+A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;;
+A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;;
+A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;;
+A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;;
+A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;;
+A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;;
+A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;;
+A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;;
+A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;;
+A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;;
+A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;;
+A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;;
+A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;;
+A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;;
+A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;;
+A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;;
+A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;;
+A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;;
+A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;;
+A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;;
+A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;;
+A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;;
+A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;;
+A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;;
+A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;;
+A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;;
+A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;;
+A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;;
+A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;;
+A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;;
+A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;;
+A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;;
+A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;;
+A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;;
+A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;;
+A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;;
+A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;;
+A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;;
+A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;;
+A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;;
+A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;;
+A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;;
+A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;;
+A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;;
+A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;;
+A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;;
+A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;;
+A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;;
+A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;;
+A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;;
+A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;;
+A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;;
+A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;;
+A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;;
+A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;;
+A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;;
+A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;;
+A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;;
+A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;;
+A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;;
+A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;;
+A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;;
+A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;;
+A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;;
+A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;;
+A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;;
+A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;;
+A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;;
+A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;;
+A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;;
+A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;;
+A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;;
+A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;;
+A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;;
+A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;;
+A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;;
+A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;;
+A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;;
+A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;;
+A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;;
+A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;;
+A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;;
+A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;;
+A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;;
+A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;;
+A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;;
+A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;;
+A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;;
+A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;;
+A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;;
+A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;;
+A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;;
+A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;;
+A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;;
+A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;;
+A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;;
+A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;;
+A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;;
+A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;;
+A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;;
+A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;;
+A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
+A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;;
+A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;;
+A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;;
+A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;;
+A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;;
+A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;;
+A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
+A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;;
+A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;;
+A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;;
+A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;;
+A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;;
+A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;;
+A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
+A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;;
+A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;;
+A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
+A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;;
+A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;;
+A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;;
+A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
+A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;;
+A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;;
+A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;;
+A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;;
+A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;;
+A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;;
+A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;;
+A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;;
+A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;;
+A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;;
+A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;;
+A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;;
+A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;;
+A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;;
+A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;;
+A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;;
+A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;;
+A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;;
+A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;;
+A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;;
+A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;;
+A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;;
+A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;;
+A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;;
+A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;;
+A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;;
+A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;;
+A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;;
+A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;;
+A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;;
+A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;;
+A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;;
+A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;;
+A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;;
+A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;;
+A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;;
+A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;;
+A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;;
+A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;;
+A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;;
+A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;;
+A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;;
+A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;;
+A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;;
+A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;;
+A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;;
+A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;;
+A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;;
+A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;;
+A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;;
+A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;;
+A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;;
+A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;;
+A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;;
+A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;;
+A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;;
+A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;;
+A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;;
+A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;;
+A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;;
+A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;;
+A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;;
+A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;;
+A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;;
+A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;;
+A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;;
+A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;;
+A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;;
+A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;;
+A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;;
+A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;;
+A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;;
+A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;;
+A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;;
+A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;;
+A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;;
+A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;;
+A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;;
+A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;;
+A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;;
+A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;;
+A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;;
+A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;;
+A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;;
+A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;;
+A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;;
+A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;;
+A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;;
+A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;;
+A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;;
+A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;;
+A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;;
+A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;;
+A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;;
+A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;;
+A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;;
+A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;;
+A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;;
+A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;;
+A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;;
+A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;;
+A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;;
+A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;;
+A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;;
+A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;;
+A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;;
+A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;;
+A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;;
+A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;;
+A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;;
+A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;;
+A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;;
+A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;;
+A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;;
+A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;;
+A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;;
+A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;;
+A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;;
+A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;;
+A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;;
+A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;;
+A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;;
+A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;;
+A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;;
+A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;;
+A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;;
+A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;;
+A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;;
+A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;;
+A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;;
+A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;;
+A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;;
+A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;;
+A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;;
+A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;;
+A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;;
+A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;;
+A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;;
+A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;;
+A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;;
+A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;;
+A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;;
+A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;;
+A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;;
+A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;;
+A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;;
+A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;;
+A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;;
+A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;;
+A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;;
+A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;;
+A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;;
+A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;;
+A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;;
+A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;;
+A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;;
+A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;;
+A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;;
+A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;;
+A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;;
+A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;;
+A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;;
+A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;;
+A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;;
+A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;;
+A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;;
+A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;;
+A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;;
+A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;;
+A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;;
+A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;;
+A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;;
+A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;;
+A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;;
+A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;;
+A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;;
+A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;;
+A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;;
+A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;;
+A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;;
+A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
+A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;;
+A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;;
+A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;;
+A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;;
+A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;;
+A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
+A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;;
+A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;;
+A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;;
+A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;;
+A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;;
+A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;;
+A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;;
+A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;;
+A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;;
+A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;;
+A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
+A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;;
+A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;;
+A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;;
+A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
+A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;;
+A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;;
+A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;;
+A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;;
+A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;;
+A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;;
+A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;;
+A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;;
+A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;;
+A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;;
+A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;;
+A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;;
+A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;;
+A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;;
+A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;;
+A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;;
+A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;;
+A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;;
+A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;;
+A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;;
+A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;;
+A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;;
+A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;;
+A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;;
+A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;;
+A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;;
+A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;;
+A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;;
+A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;;
+A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;;
+A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;;
+A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;;
+A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;;
+A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;;
+A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;;
+A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;;
+A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;;
+A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;;
+A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;;
+A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;;
+A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;;
+A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;;
+A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;;
+A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;;
+A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;;
+A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;;
+A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;;
+A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;;
+A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;;
+A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;;
+A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;;
+A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;;
+A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;;
+A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;;
+A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;;
+A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;;
+A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;;
+A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;;
+A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;;
+A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;;
+A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;;
+A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;;
+A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;;
+A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;;
+A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;;
+A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;;
+A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;;
+A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;;
+A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;;
+A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;;
+A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;;
+A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;;
+A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;;
+A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;;
+A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;;
+A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;;
+A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;;
+A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;;
+A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;;
+A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;;
+A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;;
+A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;;
+A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;;
+A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;;
+A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;;
+A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;;
+A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;;
+A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;;
+A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;;
+A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;;
+A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;;
+A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;;
+A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;;
+A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;;
+A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;;
+A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;;
+A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;;
+A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;;
+A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;;
+A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;;
+A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;;
+A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;;
+A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;;
+A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;;
+A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;;
+A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;;
+A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;;
+A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;;
+A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;;
+A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;;
+A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;;
+A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;;
+A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;;
+A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;;
+A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;;
+A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;;
+A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;;
+A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;;
+A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;;
+A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;;
+A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;;
+A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;;
+A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;;
+A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;;
+A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;;
+A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;;
+A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;;
+A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;;
+A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;;
+A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;;
+A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;;
+A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;;
+A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;;
+A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;;
+A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;;
+A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;;
+A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;;
+A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;;
+A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;;
+A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;;
+A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;;
+A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;;
+A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;;
+A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;;
+A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;;
+A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;;
+A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;;
+A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;;
+A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;;
+A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
+A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;;
+A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;;
+A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;;
+A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;;
+A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;;
+A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;;
+A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;;
+A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
+A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;;
+A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;;
+A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
+A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;;
+A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;;
+A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
+A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;;
+A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;;
+A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
+A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;;
+A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;;
+A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;;
+A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;;
+A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;;
+A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;;
+A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;;
+A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;;
+A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;;
+A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;;
+A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;;
+A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;;
+A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;;
+A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;;
+A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;;
+A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;;
+A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;;
+A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;;
+A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;;
+A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;;
+A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;;
+A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;;
+A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;;
+A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;;
+A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;;
+A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;;
+A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;;
+A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;;
+A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;;
+A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;;
+A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;;
+A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;;
+A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;;
+A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;;
+A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;;
+A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;;
+A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;;
+A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;;
+A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;;
+A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;;
+A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;;
+A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;;
+A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;;
+A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;;
+A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;;
+A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;;
+A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;;
+A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;;
+A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;;
+A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;;
+A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;;
+A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;;
+A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;;
+A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;;
+A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;;
+A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;;
+A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;;
+A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;;
+A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;;
+A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;;
+A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;;
+A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;;
+A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;;
+A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;;
+A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;;
+A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;;
+A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;;
+A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
+A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;;
+A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;;
+A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;;
+A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;;
+A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;;
+A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;;
+A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
+A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;;
+A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;;
+A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;;
+A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
+A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;;
+A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;;
+A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
+A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;;
+A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;;
+A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;;
+A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
+A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;;
+A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;;
+A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;;
+A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;;
+A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;;
+A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;;
+A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;;
+A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;;
+A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;;
+A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;;
+A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;;
+A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;;
+A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;;
+A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;;
+A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;;
+A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;;
+A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;;
+A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;;
+A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;;
+A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;;
+A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;;
+A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;;
+A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;;
+A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;;
+A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;;
+A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;;
+A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;;
+A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;;
+A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;;
+A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;;
+A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;;
+A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;;
+A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
+A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;;
+A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;;
+A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;;
+A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;;
+A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;;
+A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;;
+A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;;
+A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
+A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;;
+A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;;
+A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;;
+A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
+A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;;
+A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;;
+A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
+A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;;
+A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;;
+A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;;
+A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;;
+A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;;
+A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;;
+A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;;
+A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;;
+A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;;
+A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;;
+A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;;
+A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;;
+A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;;
+A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;;
+A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;;
+A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;;
+A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;;
+A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;;
+A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;;
+A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;;
+A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;;
+A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;;
+A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;;
+A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;;
+A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;;
+A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;;
+A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;;
+A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;;
+A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;;
+A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;;
+A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;;
+A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;;
+A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;;
+A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;;
+A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;;
+A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;;
+A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;;
+A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;;
+A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;;
+A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;;
+A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;;
+A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;;
+A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;;
+A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;;
+A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;;
+A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;;
+A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;;
+A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;;
+A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;;
+A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;;
+A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;;
+A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;;
+A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;;
+A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;;
+A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;;
+A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;;
+A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;;
+A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;;
+A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;;
+A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;;
+A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;;
+A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;;
+A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;;
+A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;;
+A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;;
+A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;;
+A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;;
+A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;;
+A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;;
+A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;;
+A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;;
+A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;;
+A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;;
+A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;;
+A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;;
+A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;;
+A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;;
+A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;;
+A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;;
+A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;;
+A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;;
+A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;;
+A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;;
+A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;;
+A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;;
+A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;;
+A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;;
+A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;;
+A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;;
+A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;;
+A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;;
+A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;;
+A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;;
+A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;;
+A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;;
+A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;;
+A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;;
+A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;;
+A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;;
+A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;;
+A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;;
+A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;;
+A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;;
+A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;;
+A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;;
+A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;;
+A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;;
+A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;;
+A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;;
+A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;;
+A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;;
+A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;;
+A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;;
+A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;;
+A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;;
+A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;;
+A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;;
+A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;;
+A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;;
+A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;;
+A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;;
+A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;;
+A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;;
+A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;;
+A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;;
+A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;;
+A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;;
+A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;;
+A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;;
+A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;;
+A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;;
+A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;;
+A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;;
+A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;;
+A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;;
+A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;;
+A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;;
+A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;;
+A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;;
+A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;;
+A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;;
+A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;;
+A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;;
+A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;;
+A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;;
+A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;;
+A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;;
+A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;;
+A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;;
+A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;;
+A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;;
+A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;;
+A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;;
+A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;;
+A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;;
+A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;;
+A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;;
+A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;;
+A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;;
+A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;;
+A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;;
+A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;;
+A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;;
+A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;;
+A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;;
+A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;;
+A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;;
+A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;;
+A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;;
+A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;;
+A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;;
+A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;;
+A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;;
+A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;;
+A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;;
+A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;;
+A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;;
+A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;;
+A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;;
+A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;;
+A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;;
+A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;;
+A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;;
+A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;;
+A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;;
+A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;;
+A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;;
+A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;;
+A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;;
+A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;;
+A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;;
+A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;;
+A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;;
+A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;;
+A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;;
+A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;;
+A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;;
+A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;;
+A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;;
+A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;;
+A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;;
+A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;;
+A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;;
+A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;;
+A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;;
+A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;;
+A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;;
+A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;;
+A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;;
+A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;;
+A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;;
+A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;;
+A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;;
+A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;;
+A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;;
+A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;;
+A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;;
+A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;;
+A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;;
+A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;;
+A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;;
+A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;;
+A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;;
+A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;;
+A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;;
+A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;;
+A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;;
+A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;;
+A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;;
+A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;;
+A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;;
+A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;;
+A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;;
+A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;;
+A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;;
+A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;;
+A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;;
+A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;;
+A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;;
+A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;;
+A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;;
+A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;;
+A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;;
+A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;;
+A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;;
+A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;;
+A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;;
+A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;;
+A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;;
+A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;;
+A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;;
+A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;;
+A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;;
+A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;;
+A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;;
+A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;;
+A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;;
+A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;;
+A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;;
+A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;;
+A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;;
+A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;;
+A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;;
+A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;;
+A491;YI RADICAL LI;So;0;ON;;;;;N;;;;;
+A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;;
+A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;;
+A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;;
+A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;;
+A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;;
+A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;;
+A498;YI RADICAL MI;So;0;ON;;;;;N;;;;;
+A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;;
+A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;;
+A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;;
+A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;;
+A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;;
+A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;;
+A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;;
+A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;;
+A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;;
+A4A2;YI RADICAL ZUP;So;0;ON;;;;;N;;;;;
+A4A3;YI RADICAL CYT;So;0;ON;;;;;N;;;;;
+A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;;
+A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;;
+A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;;
+A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;;
+A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;;
+A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;;
+A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;;
+A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;;
+A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;;
+A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;;
+A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;;
+A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;;
+A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;;
+A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;;
+A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;;
+A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;;
+A4B4;YI RADICAL NZUP;So;0;ON;;;;;N;;;;;
+A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;;
+A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;;
+A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;;
+A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;;
+A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;;
+A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;;
+A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;;
+A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;;
+A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;;
+A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;;
+A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;;
+A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;;
+A4C1;YI RADICAL ZUR;So;0;ON;;;;;N;;;;;
+A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;;
+A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;;
+A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;;
+A4C5;YI RADICAL NBIE;So;0;ON;;;;;N;;;;;
+A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;;
+A700;MODIFIER LETTER CHINESE TONE YIN PING;Sk;0;ON;;;;;N;;;;;
+A701;MODIFIER LETTER CHINESE TONE YANG PING;Sk;0;ON;;;;;N;;;;;
+A702;MODIFIER LETTER CHINESE TONE YIN SHANG;Sk;0;ON;;;;;N;;;;;
+A703;MODIFIER LETTER CHINESE TONE YANG SHANG;Sk;0;ON;;;;;N;;;;;
+A704;MODIFIER LETTER CHINESE TONE YIN QU;Sk;0;ON;;;;;N;;;;;
+A705;MODIFIER LETTER CHINESE TONE YANG QU;Sk;0;ON;;;;;N;;;;;
+A706;MODIFIER LETTER CHINESE TONE YIN RU;Sk;0;ON;;;;;N;;;;;
+A707;MODIFIER LETTER CHINESE TONE YANG RU;Sk;0;ON;;;;;N;;;;;
+A708;MODIFIER LETTER EXTRA-HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A709;MODIFIER LETTER HIGH DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70A;MODIFIER LETTER MID DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70B;MODIFIER LETTER LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70C;MODIFIER LETTER EXTRA-LOW DOTTED TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70D;MODIFIER LETTER EXTRA-HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70E;MODIFIER LETTER HIGH DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A70F;MODIFIER LETTER MID DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A710;MODIFIER LETTER LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A711;MODIFIER LETTER EXTRA-LOW DOTTED LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A712;MODIFIER LETTER EXTRA-HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A713;MODIFIER LETTER HIGH LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A714;MODIFIER LETTER MID LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A715;MODIFIER LETTER LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A716;MODIFIER LETTER EXTRA-LOW LEFT-STEM TONE BAR;Sk;0;ON;;;;;N;;;;;
+A717;MODIFIER LETTER DOT VERTICAL BAR;Lm;0;ON;;;;;N;;;;;
+A718;MODIFIER LETTER DOT SLASH;Lm;0;ON;;;;;N;;;;;
+A719;MODIFIER LETTER DOT HORIZONTAL BAR;Lm;0;ON;;;;;N;;;;;
+A71A;MODIFIER LETTER LOWER RIGHT CORNER ANGLE;Lm;0;ON;;;;;N;;;;;
+A720;MODIFIER LETTER STRESS AND HIGH TONE;Sk;0;ON;;;;;N;;;;;
+A721;MODIFIER LETTER STRESS AND LOW TONE;Sk;0;ON;;;;;N;;;;;
+A800;SYLOTI NAGRI LETTER A;Lo;0;L;;;;;N;;;;;
+A801;SYLOTI NAGRI LETTER I;Lo;0;L;;;;;N;;;;;
+A802;SYLOTI NAGRI SIGN DVISVARA;Mc;0;NSM;;;;;N;;;;;
+A803;SYLOTI NAGRI LETTER U;Lo;0;L;;;;;N;;;;;
+A804;SYLOTI NAGRI LETTER E;Lo;0;L;;;;;N;;;;;
+A805;SYLOTI NAGRI LETTER O;Lo;0;L;;;;;N;;;;;
+A806;SYLOTI NAGRI SIGN HASANTA;Mn;9;NSM;;;;;N;;;;;
+A807;SYLOTI NAGRI LETTER KO;Lo;0;L;;;;;N;;;;;
+A808;SYLOTI NAGRI LETTER KHO;Lo;0;L;;;;;N;;;;;
+A809;SYLOTI NAGRI LETTER GO;Lo;0;L;;;;;N;;;;;
+A80A;SYLOTI NAGRI LETTER GHO;Lo;0;L;;;;;N;;;;;
+A80B;SYLOTI NAGRI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+A80C;SYLOTI NAGRI LETTER CO;Lo;0;L;;;;;N;;;;;
+A80D;SYLOTI NAGRI LETTER CHO;Lo;0;L;;;;;N;;;;;
+A80E;SYLOTI NAGRI LETTER JO;Lo;0;L;;;;;N;;;;;
+A80F;SYLOTI NAGRI LETTER JHO;Lo;0;L;;;;;N;;;;;
+A810;SYLOTI NAGRI LETTER TTO;Lo;0;L;;;;;N;;;;;
+A811;SYLOTI NAGRI LETTER TTHO;Lo;0;L;;;;;N;;;;;
+A812;SYLOTI NAGRI LETTER DDO;Lo;0;L;;;;;N;;;;;
+A813;SYLOTI NAGRI LETTER DDHO;Lo;0;L;;;;;N;;;;;
+A814;SYLOTI NAGRI LETTER TO;Lo;0;L;;;;;N;;;;;
+A815;SYLOTI NAGRI LETTER THO;Lo;0;L;;;;;N;;;;;
+A816;SYLOTI NAGRI LETTER DO;Lo;0;L;;;;;N;;;;;
+A817;SYLOTI NAGRI LETTER DHO;Lo;0;L;;;;;N;;;;;
+A818;SYLOTI NAGRI LETTER NO;Lo;0;L;;;;;N;;;;;
+A819;SYLOTI NAGRI LETTER PO;Lo;0;L;;;;;N;;;;;
+A81A;SYLOTI NAGRI LETTER PHO;Lo;0;L;;;;;N;;;;;
+A81B;SYLOTI NAGRI LETTER BO;Lo;0;L;;;;;N;;;;;
+A81C;SYLOTI NAGRI LETTER BHO;Lo;0;L;;;;;N;;;;;
+A81D;SYLOTI NAGRI LETTER MO;Lo;0;L;;;;;N;;;;;
+A81E;SYLOTI NAGRI LETTER RO;Lo;0;L;;;;;N;;;;;
+A81F;SYLOTI NAGRI LETTER LO;Lo;0;L;;;;;N;;;;;
+A820;SYLOTI NAGRI LETTER RRO;Lo;0;L;;;;;N;;;;;
+A821;SYLOTI NAGRI LETTER SO;Lo;0;L;;;;;N;;;;;
+A822;SYLOTI NAGRI LETTER HO;Lo;0;L;;;;;N;;;;;
+A823;SYLOTI NAGRI VOWEL SIGN A;Mc;0;L;;;;;N;;;;;
+A824;SYLOTI NAGRI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+A825;SYLOTI NAGRI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+A826;SYLOTI NAGRI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+A827;SYLOTI NAGRI VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+A828;SYLOTI NAGRI POETRY MARK-1;So;0;ON;;;;;N;;;;;
+A829;SYLOTI NAGRI POETRY MARK-2;So;0;ON;;;;;N;;;;;
+A82A;SYLOTI NAGRI POETRY MARK-3;So;0;ON;;;;;N;;;;;
+A82B;SYLOTI NAGRI POETRY MARK-4;So;0;ON;;;;;N;;;;;
+A840;PHAGS-PA LETTER KA;Lo;0;L;;;;;N;;;;;
+A841;PHAGS-PA LETTER KHA;Lo;0;L;;;;;N;;;;;
+A842;PHAGS-PA LETTER GA;Lo;0;L;;;;;N;;;;;
+A843;PHAGS-PA LETTER NGA;Lo;0;L;;;;;N;;;;;
+A844;PHAGS-PA LETTER CA;Lo;0;L;;;;;N;;;;;
+A845;PHAGS-PA LETTER CHA;Lo;0;L;;;;;N;;;;;
+A846;PHAGS-PA LETTER JA;Lo;0;L;;;;;N;;;;;
+A847;PHAGS-PA LETTER NYA;Lo;0;L;;;;;N;;;;;
+A848;PHAGS-PA LETTER TA;Lo;0;L;;;;;N;;;;;
+A849;PHAGS-PA LETTER THA;Lo;0;L;;;;;N;;;;;
+A84A;PHAGS-PA LETTER DA;Lo;0;L;;;;;N;;;;;
+A84B;PHAGS-PA LETTER NA;Lo;0;L;;;;;N;;;;;
+A84C;PHAGS-PA LETTER PA;Lo;0;L;;;;;N;;;;;
+A84D;PHAGS-PA LETTER PHA;Lo;0;L;;;;;N;;;;;
+A84E;PHAGS-PA LETTER BA;Lo;0;L;;;;;N;;;;;
+A84F;PHAGS-PA LETTER MA;Lo;0;L;;;;;N;;;;;
+A850;PHAGS-PA LETTER TSA;Lo;0;L;;;;;N;;;;;
+A851;PHAGS-PA LETTER TSHA;Lo;0;L;;;;;N;;;;;
+A852;PHAGS-PA LETTER DZA;Lo;0;L;;;;;N;;;;;
+A853;PHAGS-PA LETTER WA;Lo;0;L;;;;;N;;;;;
+A854;PHAGS-PA LETTER ZHA;Lo;0;L;;;;;N;;;;;
+A855;PHAGS-PA LETTER ZA;Lo;0;L;;;;;N;;;;;
+A856;PHAGS-PA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+A857;PHAGS-PA LETTER YA;Lo;0;L;;;;;N;;;;;
+A858;PHAGS-PA LETTER RA;Lo;0;L;;;;;N;;;;;
+A859;PHAGS-PA LETTER LA;Lo;0;L;;;;;N;;;;;
+A85A;PHAGS-PA LETTER SHA;Lo;0;L;;;;;N;;;;;
+A85B;PHAGS-PA LETTER SA;Lo;0;L;;;;;N;;;;;
+A85C;PHAGS-PA LETTER HA;Lo;0;L;;;;;N;;;;;
+A85D;PHAGS-PA LETTER A;Lo;0;L;;;;;N;;;;;
+A85E;PHAGS-PA LETTER I;Lo;0;L;;;;;N;;;;;
+A85F;PHAGS-PA LETTER U;Lo;0;L;;;;;N;;;;;
+A860;PHAGS-PA LETTER E;Lo;0;L;;;;;N;;;;;
+A861;PHAGS-PA LETTER O;Lo;0;L;;;;;N;;;;;
+A862;PHAGS-PA LETTER QA;Lo;0;L;;;;;N;;;;;
+A863;PHAGS-PA LETTER XA;Lo;0;L;;;;;N;;;;;
+A864;PHAGS-PA LETTER FA;Lo;0;L;;;;;N;;;;;
+A865;PHAGS-PA LETTER GGA;Lo;0;L;;;;;N;;;;;
+A866;PHAGS-PA LETTER EE;Lo;0;L;;;;;N;;;;;
+A867;PHAGS-PA SUBJOINED LETTER WA;Lo;0;L;;;;;N;;;;;
+A868;PHAGS-PA SUBJOINED LETTER YA;Lo;0;L;;;;;N;;;;;
+A869;PHAGS-PA LETTER TTA;Lo;0;L;;;;;N;;;;;
+A86A;PHAGS-PA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+A86B;PHAGS-PA LETTER DDA;Lo;0;L;;;;;N;;;;;
+A86C;PHAGS-PA LETTER NNA;Lo;0;L;;;;;N;;;;;
+A86D;PHAGS-PA LETTER ALTERNATE YA;Lo;0;L;;;;;N;;;;;
+A86E;PHAGS-PA LETTER VOICELESS SHA;Lo;0;L;;;;;N;;;;;
+A86F;PHAGS-PA LETTER VOICED HA;Lo;0;L;;;;;N;;;;;
+A870;PHAGS-PA LETTER ASPIRATED FA;Lo;0;L;;;;;N;;;;;
+A871;PHAGS-PA SUBJOINED LETTER RA;Lo;0;L;;;;;N;;;;;
+A872;PHAGS-PA SUPERFIXED LETTER RA;Lo;0;L;;;;;N;;;;;
+A873;PHAGS-PA LETTER CANDRABINDU;Lo;0;L;;;;;N;;;;;
+A874;PHAGS-PA SINGLE HEAD MARK;Po;0;ON;;;;;N;;;;;
+A875;PHAGS-PA DOUBLE HEAD MARK;Po;0;ON;;;;;N;;;;;
+A876;PHAGS-PA MARK SHAD;Po;0;ON;;;;;N;;;;;
+A877;PHAGS-PA MARK DOUBLE SHAD;Po;0;ON;;;;;N;;;;;
+AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+D800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DB7F;<Non Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+E000;<Private Use, First>;Co;0;L;;;;;N;;;;;
+F8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;;
+F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;;
+F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;;
+F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;;
+F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;;
+F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;;
+F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;;
+F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;;
+F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;;
+F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;;
+F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;;
+F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;;
+F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;;
+F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;;
+F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;;
+F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;;
+F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;;
+F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;;
+F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;;
+F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;;
+F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;;
+F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;;
+F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;;
+F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;;
+F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;;
+F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;;
+F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;;
+F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;;
+F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;;
+F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;;
+F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;;
+F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;;
+F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;;
+F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;;
+F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;;
+F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;;
+F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;;
+F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;;
+F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;;
+F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;;
+F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;;
+F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;;
+F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;;
+F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;;
+F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;;
+F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;;
+F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;;
+F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;;
+F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;;
+F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;;
+F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;;
+F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;;
+F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;;
+F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;;
+F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;;
+F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;;
+F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;;
+F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;;
+F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;;
+F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;;
+F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;;
+F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;;
+F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;;
+F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;;
+F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;;
+F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;;
+F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;;
+F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;;
+F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;;
+F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;;
+F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;;
+F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;;
+F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;;
+F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;;
+F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;;
+F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;;
+F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;;
+F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;;
+F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;;
+F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;;
+F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;;
+F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;;
+F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;964B;;;;N;;;;;
+F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;;
+F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;;
+F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;;
+F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;;
+F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;;
+F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;;
+F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;;
+F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;;
+F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;;
+F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;;
+F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;;
+F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;;
+F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;;
+F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;;
+F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;;
+F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;;
+F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;;
+F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;;
+F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;;
+F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;;
+F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;;
+F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;;
+F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;;
+F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;;
+F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;;
+F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;;N;;;;;
+F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;;
+F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;;
+F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;;
+F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;;
+F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;;
+F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;;
+F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;;
+F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;;N;;;;;
+F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;;
+F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;;
+F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;;
+F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;;
+F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;;N;;;;;
+F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;;
+F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;;
+F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;;
+F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;;
+F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;;
+F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;;
+F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;;
+F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;;
+F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;;
+F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;;
+F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;;
+F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;;
+F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;;
+F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;;
+F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;;
+F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;;
+F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;;
+F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;;
+F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;;
+F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;;
+F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;;
+F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;;
+F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;;
+F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;;
+F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;;
+F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;;
+F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;;
+F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;;
+F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;;
+F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;;
+F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;;
+F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;;
+F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;;
+F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;;
+F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;;
+F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;;
+F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;;
+F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;;
+F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;;
+F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;;
+F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;;
+F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;;
+F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;;
+F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;;
+F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;;
+F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;;
+F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;;
+F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;;
+F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;;
+F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;;
+F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;;
+F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;;
+F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;;
+F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;;
+F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;;
+F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;;
+F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;;
+F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;;N;;;;;
+F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;;
+F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;;
+F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;;
+F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;;
+F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;;
+F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;;
+F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;;
+F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;;
+F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;;
+F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;;
+F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;;
+F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;;
+F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;;
+F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;;
+F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;;
+F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;;
+F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;;
+F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;;
+F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;;
+F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;;
+F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;;
+F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;;
+F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;;
+F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;;
+F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;;
+F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;;
+F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;;
+F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;;
+F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;;
+F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;;
+F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;;N;;;;;
+F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;;
+F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;;N;;;;;
+F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;;
+F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;;
+F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;;
+F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;;
+F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;;
+F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;;
+F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;;
+F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;;
+F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;;
+F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;;
+F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;;
+F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;;
+F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;;
+F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;;
+F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;;
+F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;;
+F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;;
+F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;;
+F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;;
+F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;;
+F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;;
+F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;;
+F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;;
+F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;;
+F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;;
+F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;;
+F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;;
+F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;;
+F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;;
+F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;;
+F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;;
+F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;;
+F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;;
+F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;;
+F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;;
+F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;;
+F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;;
+F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;;
+F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;;
+F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;;
+F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;;
+F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;;N;;;;;
+F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;;
+F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;;
+FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;;
+FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;;
+FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;;
+FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;;
+FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;;
+FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;;
+FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;;
+FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;;
+FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;;
+FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;;
+FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;;
+FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;;
+FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;;
+FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;;
+FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;;
+FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;;
+FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;;
+FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;;
+FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;;
+FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;;
+FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;;
+FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;;
+FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;;
+FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;;
+FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;;
+FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;;
+FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;;
+FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;;
+FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;;
+FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;;
+FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;;
+FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;*;;;
+FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;;
+FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;;
+FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;;
+FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;*;;;
+FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;;
+FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;;
+FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;;
+FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;;
+FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;;
+FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;;
+FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;;
+FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;;
+FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;;
+FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;;
+FA30;CJK COMPATIBILITY IDEOGRAPH-FA30;Lo;0;L;4FAE;;;;N;;;;;
+FA31;CJK COMPATIBILITY IDEOGRAPH-FA31;Lo;0;L;50E7;;;;N;;;;;
+FA32;CJK COMPATIBILITY IDEOGRAPH-FA32;Lo;0;L;514D;;;;N;;;;;
+FA33;CJK COMPATIBILITY IDEOGRAPH-FA33;Lo;0;L;52C9;;;;N;;;;;
+FA34;CJK COMPATIBILITY IDEOGRAPH-FA34;Lo;0;L;52E4;;;;N;;;;;
+FA35;CJK COMPATIBILITY IDEOGRAPH-FA35;Lo;0;L;5351;;;;N;;;;;
+FA36;CJK COMPATIBILITY IDEOGRAPH-FA36;Lo;0;L;559D;;;;N;;;;;
+FA37;CJK COMPATIBILITY IDEOGRAPH-FA37;Lo;0;L;5606;;;;N;;;;;
+FA38;CJK COMPATIBILITY IDEOGRAPH-FA38;Lo;0;L;5668;;;;N;;;;;
+FA39;CJK COMPATIBILITY IDEOGRAPH-FA39;Lo;0;L;5840;;;;N;;;;;
+FA3A;CJK COMPATIBILITY IDEOGRAPH-FA3A;Lo;0;L;58A8;;;;N;;;;;
+FA3B;CJK COMPATIBILITY IDEOGRAPH-FA3B;Lo;0;L;5C64;;;;N;;;;;
+FA3C;CJK COMPATIBILITY IDEOGRAPH-FA3C;Lo;0;L;5C6E;;;;N;;;;;
+FA3D;CJK COMPATIBILITY IDEOGRAPH-FA3D;Lo;0;L;6094;;;;N;;;;;
+FA3E;CJK COMPATIBILITY IDEOGRAPH-FA3E;Lo;0;L;6168;;;;N;;;;;
+FA3F;CJK COMPATIBILITY IDEOGRAPH-FA3F;Lo;0;L;618E;;;;N;;;;;
+FA40;CJK COMPATIBILITY IDEOGRAPH-FA40;Lo;0;L;61F2;;;;N;;;;;
+FA41;CJK COMPATIBILITY IDEOGRAPH-FA41;Lo;0;L;654F;;;;N;;;;;
+FA42;CJK COMPATIBILITY IDEOGRAPH-FA42;Lo;0;L;65E2;;;;N;;;;;
+FA43;CJK COMPATIBILITY IDEOGRAPH-FA43;Lo;0;L;6691;;;;N;;;;;
+FA44;CJK COMPATIBILITY IDEOGRAPH-FA44;Lo;0;L;6885;;;;N;;;;;
+FA45;CJK COMPATIBILITY IDEOGRAPH-FA45;Lo;0;L;6D77;;;;N;;;;;
+FA46;CJK COMPATIBILITY IDEOGRAPH-FA46;Lo;0;L;6E1A;;;;N;;;;;
+FA47;CJK COMPATIBILITY IDEOGRAPH-FA47;Lo;0;L;6F22;;;;N;;;;;
+FA48;CJK COMPATIBILITY IDEOGRAPH-FA48;Lo;0;L;716E;;;;N;;;;;
+FA49;CJK COMPATIBILITY IDEOGRAPH-FA49;Lo;0;L;722B;;;;N;;;;;
+FA4A;CJK COMPATIBILITY IDEOGRAPH-FA4A;Lo;0;L;7422;;;;N;;;;;
+FA4B;CJK COMPATIBILITY IDEOGRAPH-FA4B;Lo;0;L;7891;;;;N;;;;;
+FA4C;CJK COMPATIBILITY IDEOGRAPH-FA4C;Lo;0;L;793E;;;;N;;;;;
+FA4D;CJK COMPATIBILITY IDEOGRAPH-FA4D;Lo;0;L;7949;;;;N;;;;;
+FA4E;CJK COMPATIBILITY IDEOGRAPH-FA4E;Lo;0;L;7948;;;;N;;;;;
+FA4F;CJK COMPATIBILITY IDEOGRAPH-FA4F;Lo;0;L;7950;;;;N;;;;;
+FA50;CJK COMPATIBILITY IDEOGRAPH-FA50;Lo;0;L;7956;;;;N;;;;;
+FA51;CJK COMPATIBILITY IDEOGRAPH-FA51;Lo;0;L;795D;;;;N;;;;;
+FA52;CJK COMPATIBILITY IDEOGRAPH-FA52;Lo;0;L;798D;;;;N;;;;;
+FA53;CJK COMPATIBILITY IDEOGRAPH-FA53;Lo;0;L;798E;;;;N;;;;;
+FA54;CJK COMPATIBILITY IDEOGRAPH-FA54;Lo;0;L;7A40;;;;N;;;;;
+FA55;CJK COMPATIBILITY IDEOGRAPH-FA55;Lo;0;L;7A81;;;;N;;;;;
+FA56;CJK COMPATIBILITY IDEOGRAPH-FA56;Lo;0;L;7BC0;;;;N;;;;;
+FA57;CJK COMPATIBILITY IDEOGRAPH-FA57;Lo;0;L;7DF4;;;;N;;;;;
+FA58;CJK COMPATIBILITY IDEOGRAPH-FA58;Lo;0;L;7E09;;;;N;;;;;
+FA59;CJK COMPATIBILITY IDEOGRAPH-FA59;Lo;0;L;7E41;;;;N;;;;;
+FA5A;CJK COMPATIBILITY IDEOGRAPH-FA5A;Lo;0;L;7F72;;;;N;;;;;
+FA5B;CJK COMPATIBILITY IDEOGRAPH-FA5B;Lo;0;L;8005;;;;N;;;;;
+FA5C;CJK COMPATIBILITY IDEOGRAPH-FA5C;Lo;0;L;81ED;;;;N;;;;;
+FA5D;CJK COMPATIBILITY IDEOGRAPH-FA5D;Lo;0;L;8279;;;;N;;;;;
+FA5E;CJK COMPATIBILITY IDEOGRAPH-FA5E;Lo;0;L;8279;;;;N;;;;;
+FA5F;CJK COMPATIBILITY IDEOGRAPH-FA5F;Lo;0;L;8457;;;;N;;;;;
+FA60;CJK COMPATIBILITY IDEOGRAPH-FA60;Lo;0;L;8910;;;;N;;;;;
+FA61;CJK COMPATIBILITY IDEOGRAPH-FA61;Lo;0;L;8996;;;;N;;;;;
+FA62;CJK COMPATIBILITY IDEOGRAPH-FA62;Lo;0;L;8B01;;;;N;;;;;
+FA63;CJK COMPATIBILITY IDEOGRAPH-FA63;Lo;0;L;8B39;;;;N;;;;;
+FA64;CJK COMPATIBILITY IDEOGRAPH-FA64;Lo;0;L;8CD3;;;;N;;;;;
+FA65;CJK COMPATIBILITY IDEOGRAPH-FA65;Lo;0;L;8D08;;;;N;;;;;
+FA66;CJK COMPATIBILITY IDEOGRAPH-FA66;Lo;0;L;8FB6;;;;N;;;;;
+FA67;CJK COMPATIBILITY IDEOGRAPH-FA67;Lo;0;L;9038;;;;N;;;;;
+FA68;CJK COMPATIBILITY IDEOGRAPH-FA68;Lo;0;L;96E3;;;;N;;;;;
+FA69;CJK COMPATIBILITY IDEOGRAPH-FA69;Lo;0;L;97FF;;;;N;;;;;
+FA6A;CJK COMPATIBILITY IDEOGRAPH-FA6A;Lo;0;L;983B;;;;N;;;;;
+FA70;CJK COMPATIBILITY IDEOGRAPH-FA70;Lo;0;L;4E26;;;;N;;;;;
+FA71;CJK COMPATIBILITY IDEOGRAPH-FA71;Lo;0;L;51B5;;;;N;;;;;
+FA72;CJK COMPATIBILITY IDEOGRAPH-FA72;Lo;0;L;5168;;;;N;;;;;
+FA73;CJK COMPATIBILITY IDEOGRAPH-FA73;Lo;0;L;4F80;;;;N;;;;;
+FA74;CJK COMPATIBILITY IDEOGRAPH-FA74;Lo;0;L;5145;;;;N;;;;;
+FA75;CJK COMPATIBILITY IDEOGRAPH-FA75;Lo;0;L;5180;;;;N;;;;;
+FA76;CJK COMPATIBILITY IDEOGRAPH-FA76;Lo;0;L;52C7;;;;N;;;;;
+FA77;CJK COMPATIBILITY IDEOGRAPH-FA77;Lo;0;L;52FA;;;;N;;;;;
+FA78;CJK COMPATIBILITY IDEOGRAPH-FA78;Lo;0;L;559D;;;;N;;;;;
+FA79;CJK COMPATIBILITY IDEOGRAPH-FA79;Lo;0;L;5555;;;;N;;;;;
+FA7A;CJK COMPATIBILITY IDEOGRAPH-FA7A;Lo;0;L;5599;;;;N;;;;;
+FA7B;CJK COMPATIBILITY IDEOGRAPH-FA7B;Lo;0;L;55E2;;;;N;;;;;
+FA7C;CJK COMPATIBILITY IDEOGRAPH-FA7C;Lo;0;L;585A;;;;N;;;;;
+FA7D;CJK COMPATIBILITY IDEOGRAPH-FA7D;Lo;0;L;58B3;;;;N;;;;;
+FA7E;CJK COMPATIBILITY IDEOGRAPH-FA7E;Lo;0;L;5944;;;;N;;;;;
+FA7F;CJK COMPATIBILITY IDEOGRAPH-FA7F;Lo;0;L;5954;;;;N;;;;;
+FA80;CJK COMPATIBILITY IDEOGRAPH-FA80;Lo;0;L;5A62;;;;N;;;;;
+FA81;CJK COMPATIBILITY IDEOGRAPH-FA81;Lo;0;L;5B28;;;;N;;;;;
+FA82;CJK COMPATIBILITY IDEOGRAPH-FA82;Lo;0;L;5ED2;;;;N;;;;;
+FA83;CJK COMPATIBILITY IDEOGRAPH-FA83;Lo;0;L;5ED9;;;;N;;;;;
+FA84;CJK COMPATIBILITY IDEOGRAPH-FA84;Lo;0;L;5F69;;;;N;;;;;
+FA85;CJK COMPATIBILITY IDEOGRAPH-FA85;Lo;0;L;5FAD;;;;N;;;;;
+FA86;CJK COMPATIBILITY IDEOGRAPH-FA86;Lo;0;L;60D8;;;;N;;;;;
+FA87;CJK COMPATIBILITY IDEOGRAPH-FA87;Lo;0;L;614E;;;;N;;;;;
+FA88;CJK COMPATIBILITY IDEOGRAPH-FA88;Lo;0;L;6108;;;;N;;;;;
+FA89;CJK COMPATIBILITY IDEOGRAPH-FA89;Lo;0;L;618E;;;;N;;;;;
+FA8A;CJK COMPATIBILITY IDEOGRAPH-FA8A;Lo;0;L;6160;;;;N;;;;;
+FA8B;CJK COMPATIBILITY IDEOGRAPH-FA8B;Lo;0;L;61F2;;;;N;;;;;
+FA8C;CJK COMPATIBILITY IDEOGRAPH-FA8C;Lo;0;L;6234;;;;N;;;;;
+FA8D;CJK COMPATIBILITY IDEOGRAPH-FA8D;Lo;0;L;63C4;;;;N;;;;;
+FA8E;CJK COMPATIBILITY IDEOGRAPH-FA8E;Lo;0;L;641C;;;;N;;;;;
+FA8F;CJK COMPATIBILITY IDEOGRAPH-FA8F;Lo;0;L;6452;;;;N;;;;;
+FA90;CJK COMPATIBILITY IDEOGRAPH-FA90;Lo;0;L;6556;;;;N;;;;;
+FA91;CJK COMPATIBILITY IDEOGRAPH-FA91;Lo;0;L;6674;;;;N;;;;;
+FA92;CJK COMPATIBILITY IDEOGRAPH-FA92;Lo;0;L;6717;;;;N;;;;;
+FA93;CJK COMPATIBILITY IDEOGRAPH-FA93;Lo;0;L;671B;;;;N;;;;;
+FA94;CJK COMPATIBILITY IDEOGRAPH-FA94;Lo;0;L;6756;;;;N;;;;;
+FA95;CJK COMPATIBILITY IDEOGRAPH-FA95;Lo;0;L;6B79;;;;N;;;;;
+FA96;CJK COMPATIBILITY IDEOGRAPH-FA96;Lo;0;L;6BBA;;;;N;;;;;
+FA97;CJK COMPATIBILITY IDEOGRAPH-FA97;Lo;0;L;6D41;;;;N;;;;;
+FA98;CJK COMPATIBILITY IDEOGRAPH-FA98;Lo;0;L;6EDB;;;;N;;;;;
+FA99;CJK COMPATIBILITY IDEOGRAPH-FA99;Lo;0;L;6ECB;;;;N;;;;;
+FA9A;CJK COMPATIBILITY IDEOGRAPH-FA9A;Lo;0;L;6F22;;;;N;;;;;
+FA9B;CJK COMPATIBILITY IDEOGRAPH-FA9B;Lo;0;L;701E;;;;N;;;;;
+FA9C;CJK COMPATIBILITY IDEOGRAPH-FA9C;Lo;0;L;716E;;;;N;;;;;
+FA9D;CJK COMPATIBILITY IDEOGRAPH-FA9D;Lo;0;L;77A7;;;;N;;;;;
+FA9E;CJK COMPATIBILITY IDEOGRAPH-FA9E;Lo;0;L;7235;;;;N;;;;;
+FA9F;CJK COMPATIBILITY IDEOGRAPH-FA9F;Lo;0;L;72AF;;;;N;;;;;
+FAA0;CJK COMPATIBILITY IDEOGRAPH-FAA0;Lo;0;L;732A;;;;N;;;;;
+FAA1;CJK COMPATIBILITY IDEOGRAPH-FAA1;Lo;0;L;7471;;;;N;;;;;
+FAA2;CJK COMPATIBILITY IDEOGRAPH-FAA2;Lo;0;L;7506;;;;N;;;;;
+FAA3;CJK COMPATIBILITY IDEOGRAPH-FAA3;Lo;0;L;753B;;;;N;;;;;
+FAA4;CJK COMPATIBILITY IDEOGRAPH-FAA4;Lo;0;L;761D;;;;N;;;;;
+FAA5;CJK COMPATIBILITY IDEOGRAPH-FAA5;Lo;0;L;761F;;;;N;;;;;
+FAA6;CJK COMPATIBILITY IDEOGRAPH-FAA6;Lo;0;L;76CA;;;;N;;;;;
+FAA7;CJK COMPATIBILITY IDEOGRAPH-FAA7;Lo;0;L;76DB;;;;N;;;;;
+FAA8;CJK COMPATIBILITY IDEOGRAPH-FAA8;Lo;0;L;76F4;;;;N;;;;;
+FAA9;CJK COMPATIBILITY IDEOGRAPH-FAA9;Lo;0;L;774A;;;;N;;;;;
+FAAA;CJK COMPATIBILITY IDEOGRAPH-FAAA;Lo;0;L;7740;;;;N;;;;;
+FAAB;CJK COMPATIBILITY IDEOGRAPH-FAAB;Lo;0;L;78CC;;;;N;;;;;
+FAAC;CJK COMPATIBILITY IDEOGRAPH-FAAC;Lo;0;L;7AB1;;;;N;;;;;
+FAAD;CJK COMPATIBILITY IDEOGRAPH-FAAD;Lo;0;L;7BC0;;;;N;;;;;
+FAAE;CJK COMPATIBILITY IDEOGRAPH-FAAE;Lo;0;L;7C7B;;;;N;;;;;
+FAAF;CJK COMPATIBILITY IDEOGRAPH-FAAF;Lo;0;L;7D5B;;;;N;;;;;
+FAB0;CJK COMPATIBILITY IDEOGRAPH-FAB0;Lo;0;L;7DF4;;;;N;;;;;
+FAB1;CJK COMPATIBILITY IDEOGRAPH-FAB1;Lo;0;L;7F3E;;;;N;;;;;
+FAB2;CJK COMPATIBILITY IDEOGRAPH-FAB2;Lo;0;L;8005;;;;N;;;;;
+FAB3;CJK COMPATIBILITY IDEOGRAPH-FAB3;Lo;0;L;8352;;;;N;;;;;
+FAB4;CJK COMPATIBILITY IDEOGRAPH-FAB4;Lo;0;L;83EF;;;;N;;;;;
+FAB5;CJK COMPATIBILITY IDEOGRAPH-FAB5;Lo;0;L;8779;;;;N;;;;;
+FAB6;CJK COMPATIBILITY IDEOGRAPH-FAB6;Lo;0;L;8941;;;;N;;;;;
+FAB7;CJK COMPATIBILITY IDEOGRAPH-FAB7;Lo;0;L;8986;;;;N;;;;;
+FAB8;CJK COMPATIBILITY IDEOGRAPH-FAB8;Lo;0;L;8996;;;;N;;;;;
+FAB9;CJK COMPATIBILITY IDEOGRAPH-FAB9;Lo;0;L;8ABF;;;;N;;;;;
+FABA;CJK COMPATIBILITY IDEOGRAPH-FABA;Lo;0;L;8AF8;;;;N;;;;;
+FABB;CJK COMPATIBILITY IDEOGRAPH-FABB;Lo;0;L;8ACB;;;;N;;;;;
+FABC;CJK COMPATIBILITY IDEOGRAPH-FABC;Lo;0;L;8B01;;;;N;;;;;
+FABD;CJK COMPATIBILITY IDEOGRAPH-FABD;Lo;0;L;8AFE;;;;N;;;;;
+FABE;CJK COMPATIBILITY IDEOGRAPH-FABE;Lo;0;L;8AED;;;;N;;;;;
+FABF;CJK COMPATIBILITY IDEOGRAPH-FABF;Lo;0;L;8B39;;;;N;;;;;
+FAC0;CJK COMPATIBILITY IDEOGRAPH-FAC0;Lo;0;L;8B8A;;;;N;;;;;
+FAC1;CJK COMPATIBILITY IDEOGRAPH-FAC1;Lo;0;L;8D08;;;;N;;;;;
+FAC2;CJK COMPATIBILITY IDEOGRAPH-FAC2;Lo;0;L;8F38;;;;N;;;;;
+FAC3;CJK COMPATIBILITY IDEOGRAPH-FAC3;Lo;0;L;9072;;;;N;;;;;
+FAC4;CJK COMPATIBILITY IDEOGRAPH-FAC4;Lo;0;L;9199;;;;N;;;;;
+FAC5;CJK COMPATIBILITY IDEOGRAPH-FAC5;Lo;0;L;9276;;;;N;;;;;
+FAC6;CJK COMPATIBILITY IDEOGRAPH-FAC6;Lo;0;L;967C;;;;N;;;;;
+FAC7;CJK COMPATIBILITY IDEOGRAPH-FAC7;Lo;0;L;96E3;;;;N;;;;;
+FAC8;CJK COMPATIBILITY IDEOGRAPH-FAC8;Lo;0;L;9756;;;;N;;;;;
+FAC9;CJK COMPATIBILITY IDEOGRAPH-FAC9;Lo;0;L;97DB;;;;N;;;;;
+FACA;CJK COMPATIBILITY IDEOGRAPH-FACA;Lo;0;L;97FF;;;;N;;;;;
+FACB;CJK COMPATIBILITY IDEOGRAPH-FACB;Lo;0;L;980B;;;;N;;;;;
+FACC;CJK COMPATIBILITY IDEOGRAPH-FACC;Lo;0;L;983B;;;;N;;;;;
+FACD;CJK COMPATIBILITY IDEOGRAPH-FACD;Lo;0;L;9B12;;;;N;;;;;
+FACE;CJK COMPATIBILITY IDEOGRAPH-FACE;Lo;0;L;9F9C;;;;N;;;;;
+FACF;CJK COMPATIBILITY IDEOGRAPH-FACF;Lo;0;L;2284A;;;;N;;;;;
+FAD0;CJK COMPATIBILITY IDEOGRAPH-FAD0;Lo;0;L;22844;;;;N;;;;;
+FAD1;CJK COMPATIBILITY IDEOGRAPH-FAD1;Lo;0;L;233D5;;;;N;;;;;
+FAD2;CJK COMPATIBILITY IDEOGRAPH-FAD2;Lo;0;L;3B9D;;;;N;;;;;
+FAD3;CJK COMPATIBILITY IDEOGRAPH-FAD3;Lo;0;L;4018;;;;N;;;;;
+FAD4;CJK COMPATIBILITY IDEOGRAPH-FAD4;Lo;0;L;4039;;;;N;;;;;
+FAD5;CJK COMPATIBILITY IDEOGRAPH-FAD5;Lo;0;L;25249;;;;N;;;;;
+FAD6;CJK COMPATIBILITY IDEOGRAPH-FAD6;Lo;0;L;25CD0;;;;N;;;;;
+FAD7;CJK COMPATIBILITY IDEOGRAPH-FAD7;Lo;0;L;27ED3;;;;N;;;;;
+FAD8;CJK COMPATIBILITY IDEOGRAPH-FAD8;Lo;0;L;9F43;;;;N;;;;;
+FAD9;CJK COMPATIBILITY IDEOGRAPH-FAD9;Lo;0;L;9F8E;;;;N;;;;;
+FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
+FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
+FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
+FB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;;
+FB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;;
+FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;;
+FB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;;
+FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;;
+FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;;
+FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;;
+FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;;
+FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;;
+FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;;
+FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;;
+FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;;
+FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;;
+FB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;;
+FB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;;
+FB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;;
+FB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;;
+FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;;
+FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
+FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
+FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
+FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ES;<font> 002B;;;;N;;;;;
+FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
+FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
+FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;;
+FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;;
+FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;;
+FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;;
+FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;;
+FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;;
+FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;;
+FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;;
+FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;;
+FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;;
+FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;;
+FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;;
+FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;;
+FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;;
+FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;;
+FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;;
+FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;;
+FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;;
+FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;;
+FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;;
+FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;;
+FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;;
+FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;;
+FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;;
+FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;;
+FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;;
+FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;;
+FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;;
+FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;;
+FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;;
+FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;;
+FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL;<isolated> 0671;;;;N;;;;;
+FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL;<final> 0671;;;;N;;;;;
+FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL;<isolated> 067B;;;;N;;;;;
+FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL;<final> 067B;;;;N;;;;;
+FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL;<initial> 067B;;;;N;;;;;
+FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL;<medial> 067B;;;;N;;;;;
+FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL;<isolated> 067E;;;;N;;;;;
+FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL;<final> 067E;;;;N;;;;;
+FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL;<initial> 067E;;;;N;;;;;
+FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL;<medial> 067E;;;;N;;;;;
+FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0680;;;;N;;;;;
+FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL;<final> 0680;;;;N;;;;;
+FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL;<initial> 0680;;;;N;;;;;
+FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL;<medial> 0680;;;;N;;;;;
+FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067A;;;;N;;;;;
+FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL;<final> 067A;;;;N;;;;;
+FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL;<initial> 067A;;;;N;;;;;
+FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL;<medial> 067A;;;;N;;;;;
+FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067F;;;;N;;;;;
+FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL;<final> 067F;;;;N;;;;;
+FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL;<initial> 067F;;;;N;;;;;
+FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL;<medial> 067F;;;;N;;;;;
+FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL;<isolated> 0679;;;;N;;;;;
+FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL;<final> 0679;;;;N;;;;;
+FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL;<initial> 0679;;;;N;;;;;
+FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL;<medial> 0679;;;;N;;;;;
+FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL;<isolated> 06A4;;;;N;;;;;
+FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL;<final> 06A4;;;;N;;;;;
+FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL;<initial> 06A4;;;;N;;;;;
+FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL;<medial> 06A4;;;;N;;;;;
+FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A6;;;;N;;;;;
+FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL;<final> 06A6;;;;N;;;;;
+FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL;<initial> 06A6;;;;N;;;;;
+FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A6;;;;N;;;;;
+FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL;<isolated> 0684;;;;N;;;;;
+FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL;<final> 0684;;;;N;;;;;
+FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL;<initial> 0684;;;;N;;;;;
+FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL;<medial> 0684;;;;N;;;;;
+FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL;<isolated> 0683;;;;N;;;;;
+FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL;<final> 0683;;;;N;;;;;
+FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL;<initial> 0683;;;;N;;;;;
+FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL;<medial> 0683;;;;N;;;;;
+FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL;<isolated> 0686;;;;N;;;;;
+FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL;<final> 0686;;;;N;;;;;
+FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL;<initial> 0686;;;;N;;;;;
+FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL;<medial> 0686;;;;N;;;;;
+FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0687;;;;N;;;;;
+FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL;<final> 0687;;;;N;;;;;
+FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL;<initial> 0687;;;;N;;;;;
+FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL;<medial> 0687;;;;N;;;;;
+FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068D;;;;N;;;;;
+FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL;<final> 068D;;;;N;;;;;
+FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068C;;;;N;;;;;
+FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL;<final> 068C;;;;N;;;;;
+FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL;<isolated> 068E;;;;N;;;;;
+FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL;<final> 068E;;;;N;;;;;
+FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL;<isolated> 0688;;;;N;;;;;
+FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL;<final> 0688;;;;N;;;;;
+FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL;<isolated> 0698;;;;N;;;;;
+FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL;<final> 0698;;;;N;;;;;
+FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL;<isolated> 0691;;;;N;;;;;
+FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL;<final> 0691;;;;N;;;;;
+FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A9;;;;N;;;;;
+FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL;<final> 06A9;;;;N;;;;;
+FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL;<initial> 06A9;;;;N;;;;;
+FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A9;;;;N;;;;;
+FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL;<isolated> 06AF;;;;N;;;;;
+FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL;<final> 06AF;;;;N;;;;;
+FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL;<initial> 06AF;;;;N;;;;;
+FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL;<medial> 06AF;;;;N;;;;;
+FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL;<isolated> 06B3;;;;N;;;;;
+FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL;<final> 06B3;;;;N;;;;;
+FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL;<initial> 06B3;;;;N;;;;;
+FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL;<medial> 06B3;;;;N;;;;;
+FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL;<isolated> 06B1;;;;N;;;;;
+FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL;<final> 06B1;;;;N;;;;;
+FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL;<initial> 06B1;;;;N;;;;;
+FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL;<medial> 06B1;;;;N;;;;;
+FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL;<isolated> 06BA;;;;N;;;;;
+FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL;<final> 06BA;;;;N;;;;;
+FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL;<isolated> 06BB;;;;N;;;;;
+FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL;<final> 06BB;;;;N;;;;;
+FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL;<initial> 06BB;;;;N;;;;;
+FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL;<medial> 06BB;;;;N;;;;;
+FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06C0;;;;N;;;;;
+FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL;<final> 06C0;;;;N;;;;;
+FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL;<isolated> 06C1;;;;N;;;;;
+FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL;<final> 06C1;;;;N;;;;;
+FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL;<initial> 06C1;;;;N;;;;;
+FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL;<medial> 06C1;;;;N;;;;;
+FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL;<isolated> 06BE;;;;N;;;;;
+FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL;<final> 06BE;;;;N;;;;;
+FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL;<initial> 06BE;;;;N;;;;;
+FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL;<medial> 06BE;;;;N;;;;;
+FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL;<isolated> 06D2;;;;N;;;;;
+FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL;<final> 06D2;;;;N;;;;;
+FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06D3;;;;N;;;;;
+FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 06D3;;;;N;;;;;
+FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL;<isolated> 06AD;;;;N;;;;;
+FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL;<final> 06AD;;;;N;;;;;
+FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL;<initial> 06AD;;;;N;;;;;
+FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL;<medial> 06AD;;;;N;;;;;
+FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL;<isolated> 06C7;;;;N;;;;;
+FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL;<final> 06C7;;;;N;;;;;
+FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL;<isolated> 06C6;;;;N;;;;;
+FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL;<final> 06C6;;;;N;;;;;
+FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL;<isolated> 06C8;;;;N;;;;;
+FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL;<final> 06C8;;;;N;;;;;
+FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0677;;;;N;;;;;
+FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL;<isolated> 06CB;;;;N;;;;;
+FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL;<final> 06CB;;;;N;;;;;
+FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL;<isolated> 06C5;;;;N;;;;;
+FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL;<final> 06C5;;;;N;;;;;
+FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL;<isolated> 06C9;;;;N;;;;;
+FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL;<final> 06C9;;;;N;;;;;
+FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL;<isolated> 06D0;;;;N;;;;;
+FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL;<final> 06D0;;;;N;;;;;
+FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL;<initial> 06D0;;;;N;;;;;
+FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL;<medial> 06D0;;;;N;;;;;
+FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0649;;;;N;;;;;
+FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL;<medial> 0649;;;;N;;;;;
+FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0626 0627;;;;N;;;;;
+FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL;<final> 0626 0627;;;;N;;;;;
+FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D5;;;;N;;;;;
+FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL;<final> 0626 06D5;;;;N;;;;;
+FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL;<isolated> 0626 0648;;;;N;;;;;
+FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL;<final> 0626 0648;;;;N;;;;;
+FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C7;;;;N;;;;;
+FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL;<final> 0626 06C7;;;;N;;;;;
+FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C6;;;;N;;;;;
+FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL;<final> 0626 06C6;;;;N;;;;;
+FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C8;;;;N;;;;;
+FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL;<final> 0626 06C8;;;;N;;;;;
+FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D0;;;;N;;;;;
+FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL;<final> 0626 06D0;;;;N;;;;;
+FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL;<initial> 0626 06D0;;;;N;;;;;
+FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0626 0649;;;;N;;;;;
+FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL;<isolated> 06CC;;;;N;;;;;
+FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL;<final> 06CC;;;;N;;;;;
+FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL;<initial> 06CC;;;;N;;;;;
+FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL;<medial> 06CC;;;;N;;;;;
+FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 062C;;;;N;;;;;
+FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0626 062D;;;;N;;;;;
+FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 0645;;;;N;;;;;
+FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0626 064A;;;;N;;;;;
+FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 062C;;;;N;;;;;
+FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062D;;;;N;;;;;
+FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062E;;;;N;;;;;
+FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 0645;;;;N;;;;;
+FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0628 0649;;;;N;;;;;
+FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0628 064A;;;;N;;;;;
+FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 062C;;;;N;;;;;
+FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062D;;;;N;;;;;
+FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062E;;;;N;;;;;
+FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 0645;;;;N;;;;;
+FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062A 0649;;;;N;;;;;
+FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062A 064A;;;;N;;;;;
+FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 062C;;;;N;;;;;
+FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 0645;;;;N;;;;;
+FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062B 0649;;;;N;;;;;
+FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062B 064A;;;;N;;;;;
+FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062C 062D;;;;N;;;;;
+FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C 0645;;;;N;;;;;
+FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 062C;;;;N;;;;;
+FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 0645;;;;N;;;;;
+FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 062C;;;;N;;;;;
+FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062E 062D;;;;N;;;;;
+FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 0645;;;;N;;;;;
+FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 062C;;;;N;;;;;
+FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062D;;;;N;;;;;
+FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062E;;;;N;;;;;
+FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 0645;;;;N;;;;;
+FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0635 062D;;;;N;;;;;
+FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0645;;;;N;;;;;
+FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 062C;;;;N;;;;;
+FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062D;;;;N;;;;;
+FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062E;;;;N;;;;;
+FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 0645;;;;N;;;;;
+FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0637 062D;;;;N;;;;;
+FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0637 0645;;;;N;;;;;
+FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0638 0645;;;;N;;;;;
+FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 062C;;;;N;;;;;
+FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 0645;;;;N;;;;;
+FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 062C;;;;N;;;;;
+FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 0645;;;;N;;;;;
+FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 062C;;;;N;;;;;
+FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062D;;;;N;;;;;
+FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062E;;;;N;;;;;
+FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 0645;;;;N;;;;;
+FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0641 0649;;;;N;;;;;
+FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0641 064A;;;;N;;;;;
+FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0642 062D;;;;N;;;;;
+FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0642 0645;;;;N;;;;;
+FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0642 0649;;;;N;;;;;
+FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0642 064A;;;;N;;;;;
+FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0643 0627;;;;N;;;;;
+FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 062C;;;;N;;;;;
+FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062D;;;;N;;;;;
+FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062E;;;;N;;;;;
+FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0644;;;;N;;;;;
+FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0645;;;;N;;;;;
+FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0643 0649;;;;N;;;;;
+FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0643 064A;;;;N;;;;;
+FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 062C;;;;N;;;;;
+FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062D;;;;N;;;;;
+FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062E;;;;N;;;;;
+FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 0645;;;;N;;;;;
+FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0644 0649;;;;N;;;;;
+FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0644 064A;;;;N;;;;;
+FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 062C;;;;N;;;;;
+FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D;;;;N;;;;;
+FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062E;;;;N;;;;;
+FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 0645;;;;N;;;;;
+FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0645 0649;;;;N;;;;;
+FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0645 064A;;;;N;;;;;
+FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 062C;;;;N;;;;;
+FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062D;;;;N;;;;;
+FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062E;;;;N;;;;;
+FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 0645;;;;N;;;;;
+FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0646 0649;;;;N;;;;;
+FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0646 064A;;;;N;;;;;
+FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 062C;;;;N;;;;;
+FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 0645;;;;N;;;;;
+FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0647 0649;;;;N;;;;;
+FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0647 064A;;;;N;;;;;
+FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 062C;;;;N;;;;;
+FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062D;;;;N;;;;;
+FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062E;;;;N;;;;;
+FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 0645;;;;N;;;;;
+FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 064A 0649;;;;N;;;;;
+FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A 064A;;;;N;;;;;
+FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0630 0670;;;;N;;;;;
+FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0631 0670;;;;N;;;;;
+FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0649 0670;;;;N;;;;;
+FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C 0651;;;;N;;;;;
+FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D 0651;;;;N;;;;;
+FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E 0651;;;;N;;;;;
+FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F 0651;;;;N;;;;;
+FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650 0651;;;;N;;;;;
+FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651 0670;;;;N;;;;;
+FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL;<final> 0626 0631;;;;N;;;;;
+FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0626 0632;;;;N;;;;;
+FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL;<final> 0626 0645;;;;N;;;;;
+FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL;<final> 0626 0646;;;;N;;;;;
+FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL;<final> 0626 064A;;;;N;;;;;
+FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL;<final> 0628 0631;;;;N;;;;;
+FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0628 0632;;;;N;;;;;
+FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0628 0645;;;;N;;;;;
+FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL;<final> 0628 0646;;;;N;;;;;
+FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0628 0649;;;;N;;;;;
+FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 064A;;;;N;;;;;
+FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL;<final> 062A 0631;;;;N;;;;;
+FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062A 0632;;;;N;;;;;
+FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062A 0645;;;;N;;;;;
+FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062A 0646;;;;N;;;;;
+FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0649;;;;N;;;;;
+FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 064A;;;;N;;;;;
+FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL;<final> 062B 0631;;;;N;;;;;
+FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062B 0632;;;;N;;;;;
+FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062B 0645;;;;N;;;;;
+FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062B 0646;;;;N;;;;;
+FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062B 0649;;;;N;;;;;
+FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062B 064A;;;;N;;;;;
+FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0641 0649;;;;N;;;;;
+FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 064A;;;;N;;;;;
+FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0642 0649;;;;N;;;;;
+FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 064A;;;;N;;;;;
+FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL;<final> 0643 0627;;;;N;;;;;
+FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL;<final> 0643 0644;;;;N;;;;;
+FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645;;;;N;;;;;
+FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0643 0649;;;;N;;;;;
+FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 064A;;;;N;;;;;
+FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 0645;;;;N;;;;;
+FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 0649;;;;N;;;;;
+FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 064A;;;;N;;;;;
+FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0645 0627;;;;N;;;;;
+FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0645 0645;;;;N;;;;;
+FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL;<final> 0646 0631;;;;N;;;;;
+FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0646 0632;;;;N;;;;;
+FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 0645;;;;N;;;;;
+FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL;<final> 0646 0646;;;;N;;;;;
+FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0649;;;;N;;;;;
+FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 064A;;;;N;;;;;
+FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL;<final> 0649 0670;;;;N;;;;;
+FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL;<final> 064A 0631;;;;N;;;;;
+FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 064A 0632;;;;N;;;;;
+FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645;;;;N;;;;;
+FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL;<final> 064A 0646;;;;N;;;;;
+FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 064A 0649;;;;N;;;;;
+FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 064A;;;;N;;;;;
+FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0626 062C;;;;N;;;;;
+FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0626 062D;;;;N;;;;;
+FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0626 062E;;;;N;;;;;
+FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0626 0645;;;;N;;;;;
+FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0626 0647;;;;N;;;;;
+FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0628 062C;;;;N;;;;;
+FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0628 062D;;;;N;;;;;
+FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0628 062E;;;;N;;;;;
+FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0628 0645;;;;N;;;;;
+FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0628 0647;;;;N;;;;;
+FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C;;;;N;;;;;
+FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 062D;;;;N;;;;;
+FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 062E;;;;N;;;;;
+FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645;;;;N;;;;;
+FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 062A 0647;;;;N;;;;;
+FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062B 0645;;;;N;;;;;
+FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 062D;;;;N;;;;;
+FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062C 0645;;;;N;;;;;
+FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062D 062C;;;;N;;;;;
+FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062D 0645;;;;N;;;;;
+FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062E 062C;;;;N;;;;;
+FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062E 0645;;;;N;;;;;
+FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062C;;;;N;;;;;
+FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062D;;;;N;;;;;
+FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0633 062E;;;;N;;;;;
+FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645;;;;N;;;;;
+FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D;;;;N;;;;;
+FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0635 062E;;;;N;;;;;
+FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645;;;;N;;;;;
+FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062C;;;;N;;;;;
+FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0636 062D;;;;N;;;;;
+FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0636 062E;;;;N;;;;;
+FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 0645;;;;N;;;;;
+FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 062D;;;;N;;;;;
+FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0638 0645;;;;N;;;;;
+FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C;;;;N;;;;;
+FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645;;;;N;;;;;
+FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 063A 062C;;;;N;;;;;
+FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 063A 0645;;;;N;;;;;
+FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062C;;;;N;;;;;
+FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0641 062D;;;;N;;;;;
+FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0641 062E;;;;N;;;;;
+FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 0645;;;;N;;;;;
+FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 062D;;;;N;;;;;
+FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0642 0645;;;;N;;;;;
+FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0643 062C;;;;N;;;;;
+FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0643 062D;;;;N;;;;;
+FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0643 062E;;;;N;;;;;
+FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL;<initial> 0643 0644;;;;N;;;;;
+FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645;;;;N;;;;;
+FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C;;;;N;;;;;
+FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 062D;;;;N;;;;;
+FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0644 062E;;;;N;;;;;
+FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 0645;;;;N;;;;;
+FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0644 0647;;;;N;;;;;
+FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C;;;;N;;;;;
+FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062D;;;;N;;;;;
+FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062E;;;;N;;;;;
+FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 0645;;;;N;;;;;
+FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C;;;;N;;;;;
+FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062D;;;;N;;;;;
+FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0646 062E;;;;N;;;;;
+FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 0645;;;;N;;;;;
+FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0646 0647;;;;N;;;;;
+FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 062C;;;;N;;;;;
+FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645;;;;N;;;;;
+FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL;<initial> 0647 0670;;;;N;;;;;
+FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 064A 062C;;;;N;;;;;
+FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 064A 062D;;;;N;;;;;
+FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 064A 062E;;;;N;;;;;
+FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645;;;;N;;;;;
+FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 064A 0647;;;;N;;;;;
+FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0626 0645;;;;N;;;;;
+FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0626 0647;;;;N;;;;;
+FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0628 0645;;;;N;;;;;
+FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0628 0647;;;;N;;;;;
+FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062A 0645;;;;N;;;;;
+FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062A 0647;;;;N;;;;;
+FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062B 0645;;;;N;;;;;
+FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062B 0647;;;;N;;;;;
+FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 0645;;;;N;;;;;
+FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0633 0647;;;;N;;;;;
+FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 0645;;;;N;;;;;
+FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0634 0647;;;;N;;;;;
+FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL;<medial> 0643 0644;;;;N;;;;;
+FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0643 0645;;;;N;;;;;
+FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0644 0645;;;;N;;;;;
+FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0646 0645;;;;N;;;;;
+FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0646 0647;;;;N;;;;;
+FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 064A 0645;;;;N;;;;;
+FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 064A 0647;;;;N;;;;;
+FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E 0651;;;;N;;;;;
+FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F 0651;;;;N;;;;;
+FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650 0651;;;;N;;;;;
+FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0637 0649;;;;N;;;;;
+FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0637 064A;;;;N;;;;;
+FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0639 0649;;;;N;;;;;
+FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0639 064A;;;;N;;;;;
+FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 063A 0649;;;;N;;;;;
+FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 063A 064A;;;;N;;;;;
+FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0633 0649;;;;N;;;;;
+FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0633 064A;;;;N;;;;;
+FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0634 0649;;;;N;;;;;
+FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0634 064A;;;;N;;;;;
+FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062D 0649;;;;N;;;;;
+FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062D 064A;;;;N;;;;;
+FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062C 0649;;;;N;;;;;
+FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062C 064A;;;;N;;;;;
+FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062E 0649;;;;N;;;;;
+FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062E 064A;;;;N;;;;;
+FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0649;;;;N;;;;;
+FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0635 064A;;;;N;;;;;
+FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0636 0649;;;;N;;;;;
+FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0636 064A;;;;N;;;;;
+FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 062C;;;;N;;;;;
+FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062D;;;;N;;;;;
+FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062E;;;;N;;;;;
+FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 0645;;;;N;;;;;
+FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0634 0631;;;;N;;;;;
+FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0633 0631;;;;N;;;;;
+FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0635 0631;;;;N;;;;;
+FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0636 0631;;;;N;;;;;
+FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0637 0649;;;;N;;;;;
+FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 064A;;;;N;;;;;
+FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0649;;;;N;;;;;
+FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 064A;;;;N;;;;;
+FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0649;;;;N;;;;;
+FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 064A;;;;N;;;;;
+FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 0649;;;;N;;;;;
+FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 064A;;;;N;;;;;
+FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0634 0649;;;;N;;;;;
+FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 064A;;;;N;;;;;
+FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0649;;;;N;;;;;
+FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 064A;;;;N;;;;;
+FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0649;;;;N;;;;;
+FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 064A;;;;N;;;;;
+FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062E 0649;;;;N;;;;;
+FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062E 064A;;;;N;;;;;
+FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0635 0649;;;;N;;;;;
+FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 064A;;;;N;;;;;
+FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 0649;;;;N;;;;;
+FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 064A;;;;N;;;;;
+FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL;<final> 0634 062C;;;;N;;;;;
+FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL;<final> 0634 062D;;;;N;;;;;
+FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 062E;;;;N;;;;;
+FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645;;;;N;;;;;
+FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0634 0631;;;;N;;;;;
+FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0633 0631;;;;N;;;;;
+FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL;<final> 0635 0631;;;;N;;;;;
+FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL;<final> 0636 0631;;;;N;;;;;
+FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062C;;;;N;;;;;
+FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0634 062D;;;;N;;;;;
+FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 062E;;;;N;;;;;
+FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645;;;;N;;;;;
+FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0633 0647;;;;N;;;;;
+FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0634 0647;;;;N;;;;;
+FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645;;;;N;;;;;
+FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 062C;;;;N;;;;;
+FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062D;;;;N;;;;;
+FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062E;;;;N;;;;;
+FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 062C;;;;N;;;;;
+FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062D;;;;N;;;;;
+FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062E;;;;N;;;;;
+FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0637 0645;;;;N;;;;;
+FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0638 0645;;;;N;;;;;
+FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL;<final> 0627 064B;;;;N;;;;;
+FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0627 064B;;;;N;;;;;
+FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
+FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
+FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C 0645;;;;N;;;;;
+FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL;<final> 062A 062D 062C;;;;N;;;;;
+FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 062C;;;;N;;;;;
+FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 0645;;;;N;;;;;
+FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062E 0645;;;;N;;;;;
+FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062C;;;;N;;;;;
+FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062D;;;;N;;;;;
+FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062E;;;;N;;;;;
+FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 062C 0645 062D;;;;N;;;;;
+FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 0645 062D;;;;N;;;;;
+FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 0645 064A;;;;N;;;;;
+FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0645 0649;;;;N;;;;;
+FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062D 062C;;;;N;;;;;
+FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062C 062D;;;;N;;;;;
+FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062C 0649;;;;N;;;;;
+FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0633 0645 062D;;;;N;;;;;
+FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062D;;;;N;;;;;
+FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062C;;;;N;;;;;
+FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0633 0645 0645;;;;N;;;;;
+FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 0645;;;;N;;;;;
+FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL;<final> 0635 062D 062D;;;;N;;;;;
+FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D 062D;;;;N;;;;;
+FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0635 0645 0645;;;;N;;;;;
+FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 062D 0645;;;;N;;;;;
+FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062D 0645;;;;N;;;;;
+FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062C 064A;;;;N;;;;;
+FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 0645 062E;;;;N;;;;;
+FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 0645 062E;;;;N;;;;;
+FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645 0645;;;;N;;;;;
+FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645 0645;;;;N;;;;;
+FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 062D 0649;;;;N;;;;;
+FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0636 062E 0645;;;;N;;;;;
+FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062E 0645;;;;N;;;;;
+FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0637 0645 062D;;;;N;;;;;
+FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 0645 062D;;;;N;;;;;
+FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645 0645;;;;N;;;;;
+FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 0645 064A;;;;N;;;;;
+FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 062C 0645;;;;N;;;;;
+FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 0645 0645;;;;N;;;;;
+FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645 0645;;;;N;;;;;
+FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0645 0649;;;;N;;;;;
+FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 063A 0645 0645;;;;N;;;;;
+FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 0645 064A;;;;N;;;;;
+FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0645 0649;;;;N;;;;;
+FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0641 062E 0645;;;;N;;;;;
+FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062E 0645;;;;N;;;;;
+FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0642 0645 062D;;;;N;;;;;
+FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0642 0645 0645;;;;N;;;;;
+FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062D 0645;;;;N;;;;;
+FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062D 064A;;;;N;;;;;
+FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 062D 0649;;;;N;;;;;
+FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 062C;;;;N;;;;;
+FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 062C;;;;N;;;;;
+FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062E 0645;;;;N;;;;;
+FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062E 0645;;;;N;;;;;
+FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0644 0645 062D;;;;N;;;;;
+FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 0645 062D;;;;N;;;;;
+FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 062C;;;;N;;;;;
+FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 0645;;;;N;;;;;
+FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062D 064A;;;;N;;;;;
+FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062D;;;;N;;;;;
+FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C 0645;;;;N;;;;;
+FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 062C;;;;N;;;;;
+FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 0645;;;;N;;;;;
+FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062E;;;;N;;;;;
+FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 062C;;;;N;;;;;
+FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 0645;;;;N;;;;;
+FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062D 0645;;;;N;;;;;
+FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062D 0649;;;;N;;;;;
+FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 062C 0645;;;;N;;;;;
+FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C 0645;;;;N;;;;;
+FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062C 0649;;;;N;;;;;
+FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 0645 064A;;;;N;;;;;
+FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0645 0649;;;;N;;;;;
+FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645 0645;;;;N;;;;;
+FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645 0645;;;;N;;;;;
+FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062E 064A;;;;N;;;;;
+FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062C 064A;;;;N;;;;;
+FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062C 0649;;;;N;;;;;
+FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062E 064A;;;;N;;;;;
+FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062E 0649;;;;N;;;;;
+FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 0645 064A;;;;N;;;;;
+FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0645 0649;;;;N;;;;;
+FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 0645 064A;;;;N;;;;;
+FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 062D 0649;;;;N;;;;;
+FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0645 0649;;;;N;;;;;
+FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062E 0649;;;;N;;;;;
+FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 062D 064A;;;;N;;;;;
+FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062D 064A;;;;N;;;;;
+FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 062D 064A;;;;N;;;;;
+FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062C 064A;;;;N;;;;;
+FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 0645 064A;;;;N;;;;;
+FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062D 064A;;;;N;;;;;
+FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062C 064A;;;;N;;;;;
+FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 0645 064A;;;;N;;;;;
+FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 0645 064A;;;;N;;;;;
+FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 0645 064A;;;;N;;;;;
+FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062D 064A;;;;N;;;;;
+FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 0645 062D;;;;N;;;;;
+FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062D 0645;;;;N;;;;;
+FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 0645 064A;;;;N;;;;;
+FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 0645 064A;;;;N;;;;;
+FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062C 062D;;;;N;;;;;
+FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062E 064A;;;;N;;;;;
+FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 0645;;;;N;;;;;
+FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645 0645;;;;N;;;;;
+FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 0645;;;;N;;;;;
+FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0646 062C 062D;;;;N;;;;;
+FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 062D 064A;;;;N;;;;;
+FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 062C 064A;;;;N;;;;;
+FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062C 064A;;;;N;;;;;
+FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 0645 064A;;;;N;;;;;
+FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062D 064A;;;;N;;;;;
+FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645 0645;;;;N;;;;;
+FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C 0645;;;;N;;;;;
+FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645 0645;;;;N;;;;;
+FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 062E 064A;;;;N;;;;;
+FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062C 064A;;;;N;;;;;
+FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 06D2;;;;N;;;;;
+FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0642 0644 06D2;;;;N;;;;;
+FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL;<isolated> 0627 0644 0644 0647;;;;N;;;;;
+FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL;<isolated> 0627 0643 0628 0631;;;;N;;;;;
+FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D 0645 062F;;;;N;;;;;
+FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0639 0645;;;;N;;;;;
+FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL;<isolated> 0631 0633 0648 0644;;;;N;;;;;
+FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL;<isolated> 0639 0644 064A 0647;;;;N;;;;;
+FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL;<isolated> 0648 0633 0644 0645;;;;N;;;;;
+FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0649;;;;N;;;;;
+FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;;
+FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
+FDFC;RIAL SIGN;Sc;0;AL;<isolated> 0631 06CC 0627 0644;;;;N;;;;;
+FDFD;ARABIC LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM;So;0;ON;;;;;N;;;;;
+FE00;VARIATION SELECTOR-1;Mn;0;NSM;;;;;N;;;;;
+FE01;VARIATION SELECTOR-2;Mn;0;NSM;;;;;N;;;;;
+FE02;VARIATION SELECTOR-3;Mn;0;NSM;;;;;N;;;;;
+FE03;VARIATION SELECTOR-4;Mn;0;NSM;;;;;N;;;;;
+FE04;VARIATION SELECTOR-5;Mn;0;NSM;;;;;N;;;;;
+FE05;VARIATION SELECTOR-6;Mn;0;NSM;;;;;N;;;;;
+FE06;VARIATION SELECTOR-7;Mn;0;NSM;;;;;N;;;;;
+FE07;VARIATION SELECTOR-8;Mn;0;NSM;;;;;N;;;;;
+FE08;VARIATION SELECTOR-9;Mn;0;NSM;;;;;N;;;;;
+FE09;VARIATION SELECTOR-10;Mn;0;NSM;;;;;N;;;;;
+FE0A;VARIATION SELECTOR-11;Mn;0;NSM;;;;;N;;;;;
+FE0B;VARIATION SELECTOR-12;Mn;0;NSM;;;;;N;;;;;
+FE0C;VARIATION SELECTOR-13;Mn;0;NSM;;;;;N;;;;;
+FE0D;VARIATION SELECTOR-14;Mn;0;NSM;;;;;N;;;;;
+FE0E;VARIATION SELECTOR-15;Mn;0;NSM;;;;;N;;;;;
+FE0F;VARIATION SELECTOR-16;Mn;0;NSM;;;;;N;;;;;
+FE10;PRESENTATION FORM FOR VERTICAL COMMA;Po;0;ON;<vertical> 002C;;;;N;;;;;
+FE11;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC COMMA;Po;0;ON;<vertical> 3001;;;;N;;;;;
+FE12;PRESENTATION FORM FOR VERTICAL IDEOGRAPHIC FULL STOP;Po;0;ON;<vertical> 3002;;;;N;;;;;
+FE13;PRESENTATION FORM FOR VERTICAL COLON;Po;0;ON;<vertical> 003A;;;;N;;;;;
+FE14;PRESENTATION FORM FOR VERTICAL SEMICOLON;Po;0;ON;<vertical> 003B;;;;N;;;;;
+FE15;PRESENTATION FORM FOR VERTICAL EXCLAMATION MARK;Po;0;ON;<vertical> 0021;;;;N;;;;;
+FE16;PRESENTATION FORM FOR VERTICAL QUESTION MARK;Po;0;ON;<vertical> 003F;;;;N;;;;;
+FE17;PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;<vertical> 3016;;;;N;;;;;
+FE18;PRESENTATION FORM FOR VERTICAL RIGHT WHITE LENTICULAR BRAKCET;Pe;0;ON;<vertical> 3017;;;;N;;;;;
+FE19;PRESENTATION FORM FOR VERTICAL HORIZONTAL ELLIPSIS;Po;0;ON;<vertical> 2026;;;;N;;;;;
+FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
+FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
+FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
+FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;;
+FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;;
+FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;;
+FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;;
+FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;;
+FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;;
+FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;;
+FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;;
+FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;;
+FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;;
+FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;;
+FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;;
+FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;;
+FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;;
+FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;;
+FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;;
+FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;;
+FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;;
+FE45;SESAME DOT;Po;0;ON;;;;;N;;;;;
+FE46;WHITE SESAME DOT;Po;0;ON;;;;;N;;;;;
+FE47;PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET;Ps;0;ON;<vertical> 005B;;;;N;;;;;
+FE48;PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET;Pe;0;ON;<vertical> 005D;;;;N;;;;;
+FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;;
+FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;;
+FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;;
+FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;;
+FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;;
+FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;;
+FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;;
+FE50;SMALL COMMA;Po;0;CS;<small> 002C;;;;N;;;;;
+FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;;
+FE52;SMALL FULL STOP;Po;0;CS;<small> 002E;;;;N;SMALL PERIOD;;;;
+FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;;
+FE55;SMALL COLON;Po;0;CS;<small> 003A;;;;N;;;;;
+FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
+FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
+FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
+FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;Y;SMALL OPENING PARENTHESIS;;;;
+FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;Y;SMALL CLOSING PARENTHESIS;;;;
+FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;Y;SMALL OPENING CURLY BRACKET;;;;
+FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;Y;SMALL CLOSING CURLY BRACKET;;;;
+FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;Y;SMALL OPENING TORTOISE SHELL BRACKET;;;;
+FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;Y;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
+FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;;
+FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
+FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
+FE62;SMALL PLUS SIGN;Sm;0;ES;<small> 002B;;;;N;;;;;
+FE63;SMALL HYPHEN-MINUS;Pd;0;ES;<small> 002D;;;;N;;;;;
+FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;Y;;;;;
+FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;Y;;;;;
+FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
+FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
+FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;;
+FE6A;SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;;
+FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;;
+FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;;
+FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;;
+FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;;
+FE73;ARABIC TAIL FRAGMENT;Lo;0;AL;;;;;N;;;;;
+FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;;
+FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;;
+FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;;
+FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;;
+FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;;
+FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;;
+FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;;
+FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;;
+FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;;
+FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;;
+FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;;
+FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;;
+FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;;
+FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;;
+FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;;
+FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;;
+FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;;
+FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;;
+FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;;
+FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;;
+FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;;
+FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;;
+FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;;
+FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;;
+FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;;
+FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;;
+FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;;
+FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;;
+FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;;
+FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;;
+FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;;
+FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;;
+FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;;
+FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;;
+FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;;
+FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;;
+FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;;
+FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;;
+FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;;
+FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;;
+FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;
+FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;
+FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;
+FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;
+FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;;
+FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;;
+FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;;
+FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;;
+FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;;
+FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;;
+FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;;
+FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;;
+FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;;
+FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;;
+FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;;
+FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;;
+FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;;
+FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;;
+FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;;
+FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;;
+FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;;
+FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;;
+FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;;
+FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;;
+FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;
+FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;
+FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;
+FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;
+FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;;
+FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;;
+FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;;
+FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;;
+FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;;
+FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;;
+FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;;
+FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;;
+FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;;
+FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;;
+FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;;
+FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;;
+FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;;
+FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;;
+FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;;
+FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;;
+FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;;
+FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;;
+FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;;
+FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;;
+FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;;
+FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;;
+FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;;
+FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;;
+FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;;
+FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;;
+FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;;
+FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;;
+FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;;
+FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;;
+FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;;
+FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;;
+FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;;
+FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;;
+FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;;
+FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;;
+FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;;
+FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;;
+FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;;
+FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;;
+FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;;
+FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;;
+FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;;
+FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;;
+FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;;
+FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;;
+FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;;
+FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;;
+FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;;
+FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;;
+FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;;
+FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;;
+FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;;
+FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;;
+FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;;
+FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;;
+FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;;
+FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;;
+FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;;
+FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;;
+FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;;
+FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;;
+FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;;
+FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;;
+FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;;
+FF03;FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;;
+FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET;<wide> 0024;;;;N;;;;;
+FF05;FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;;
+FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;;
+FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;
+FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;Y;FULLWIDTH OPENING PARENTHESIS;;;;
+FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;Y;FULLWIDTH CLOSING PARENTHESIS;;;;
+FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
+FF0B;FULLWIDTH PLUS SIGN;Sm;0;ES;<wide> 002B;;;;N;;;;;
+FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;;
+FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ES;<wide> 002D;;;;N;;;;;
+FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
+FF0F;FULLWIDTH SOLIDUS;Po;0;CS;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
+FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
+FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
+FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
+FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;;
+FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;;
+FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;;
+FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;;
+FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;;
+FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;;
+FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;;
+FF1A;FULLWIDTH COLON;Po;0;CS;<wide> 003A;;;;N;;;;;
+FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;;
+FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;Y;;;;;
+FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;;
+FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;Y;;;;;
+FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;;
+FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;;
+FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41;
+FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42;
+FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43;
+FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44;
+FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45;
+FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46;
+FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47;
+FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48;
+FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49;
+FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A;
+FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B;
+FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C;
+FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D;
+FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E;
+FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F;
+FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50;
+FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51;
+FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52;
+FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53;
+FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54;
+FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55;
+FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56;
+FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57;
+FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58;
+FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59;
+FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A;
+FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;Y;FULLWIDTH OPENING SQUARE BRACKET;;;;
+FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;;
+FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;Y;FULLWIDTH CLOSING SQUARE BRACKET;;;;
+FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;;
+FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;;
+FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;;
+FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21
+FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22
+FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23
+FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24
+FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25
+FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26
+FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27
+FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28
+FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29
+FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A
+FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B
+FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C
+FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D
+FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E
+FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F
+FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30
+FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31
+FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32
+FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33
+FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34
+FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35
+FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36
+FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37
+FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38
+FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39
+FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A
+FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;Y;FULLWIDTH OPENING CURLY BRACKET;;;;
+FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;;
+FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;Y;FULLWIDTH CLOSING CURLY BRACKET;;;;
+FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;;
+FF5F;FULLWIDTH LEFT WHITE PARENTHESIS;Ps;0;ON;<wide> 2985;;;;Y;;*;;;
+FF60;FULLWIDTH RIGHT WHITE PARENTHESIS;Pe;0;ON;<wide> 2986;;;;Y;;*;;;
+FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;;
+FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;Y;HALFWIDTH OPENING CORNER BRACKET;;;;
+FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;Y;HALFWIDTH CLOSING CORNER BRACKET;;;;
+FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
+FF65;HALFWIDTH KATAKANA MIDDLE DOT;Po;0;ON;<narrow> 30FB;;;;N;;;;;
+FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
+FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
+FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
+FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;;
+FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;;
+FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;;
+FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;;
+FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;;
+FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;;
+FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;;
+FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;;
+FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;;
+FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;;
+FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;;
+FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;;
+FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;;
+FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;;
+FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;;
+FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;;
+FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;;
+FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;;
+FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;;
+FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;;
+FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;;
+FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;;
+FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;;
+FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;;
+FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;;
+FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;;
+FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;;
+FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;;
+FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;;
+FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;;
+FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;;
+FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;;
+FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;;
+FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;;
+FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;;
+FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;;
+FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;;
+FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;;
+FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;;
+FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;;
+FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;;
+FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;;
+FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;;
+FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;;
+FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;;
+FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;;
+FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;;
+FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;;
+FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;;
+FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;;
+FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;;
+FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;;
+FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;;
+FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;halfwidth katakana-hiragana voiced sound mark;;;
+FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;halfwidth katakana-hiragana semi-voiced sound mark;;;
+FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;;
+FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;;
+FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;;
+FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
+FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;;
+FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;;
+FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;;
+FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;;
+FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;;
+FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;;
+FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;;
+FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;;
+FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;;
+FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;;
+FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;;
+FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;;
+FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;;
+FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;;
+FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;;
+FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;;
+FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;;
+FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;;
+FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;;
+FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;;
+FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;;
+FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;;
+FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;;
+FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;;
+FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;;
+FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;;
+FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;;
+FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;;
+FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;;
+FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;;
+FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;;
+FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;;
+FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;;
+FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;;
+FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;;
+FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;;
+FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;;
+FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;;
+FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;;
+FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;;
+FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;;
+FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;;
+FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;;
+FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;;
+FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;;
+FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;;
+FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;;
+FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;
+FFE0;FULLWIDTH CENT SIGN;Sc;0;ET;<wide> 00A2;;;;N;;;;;
+FFE1;FULLWIDTH POUND SIGN;Sc;0;ET;<wide> 00A3;;;;N;;;;;
+FFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;;
+FFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;*;;;
+FFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;;
+FFE5;FULLWIDTH YEN SIGN;Sc;0;ET;<wide> 00A5;;;;N;;;;;
+FFE6;FULLWIDTH WON SIGN;Sc;0;ET;<wide> 20A9;;;;N;;;;;
+FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON;<narrow> 2502;;;;N;;;;;
+FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;;
+FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;;
+FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;;
+FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;
+FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;
+FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;
+FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;ON;;;;;N;;;;;
+FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;ON;;;;;N;;;;;
+FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;ON;;;;;N;;;;;
+FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+10000;LINEAR B SYLLABLE B008 A;Lo;0;L;;;;;N;;;;;
+10001;LINEAR B SYLLABLE B038 E;Lo;0;L;;;;;N;;;;;
+10002;LINEAR B SYLLABLE B028 I;Lo;0;L;;;;;N;;;;;
+10003;LINEAR B SYLLABLE B061 O;Lo;0;L;;;;;N;;;;;
+10004;LINEAR B SYLLABLE B010 U;Lo;0;L;;;;;N;;;;;
+10005;LINEAR B SYLLABLE B001 DA;Lo;0;L;;;;;N;;;;;
+10006;LINEAR B SYLLABLE B045 DE;Lo;0;L;;;;;N;;;;;
+10007;LINEAR B SYLLABLE B007 DI;Lo;0;L;;;;;N;;;;;
+10008;LINEAR B SYLLABLE B014 DO;Lo;0;L;;;;;N;;;;;
+10009;LINEAR B SYLLABLE B051 DU;Lo;0;L;;;;;N;;;;;
+1000A;LINEAR B SYLLABLE B057 JA;Lo;0;L;;;;;N;;;;;
+1000B;LINEAR B SYLLABLE B046 JE;Lo;0;L;;;;;N;;;;;
+1000D;LINEAR B SYLLABLE B036 JO;Lo;0;L;;;;;N;;;;;
+1000E;LINEAR B SYLLABLE B065 JU;Lo;0;L;;;;;N;;;;;
+1000F;LINEAR B SYLLABLE B077 KA;Lo;0;L;;;;;N;;;;;
+10010;LINEAR B SYLLABLE B044 KE;Lo;0;L;;;;;N;;;;;
+10011;LINEAR B SYLLABLE B067 KI;Lo;0;L;;;;;N;;;;;
+10012;LINEAR B SYLLABLE B070 KO;Lo;0;L;;;;;N;;;;;
+10013;LINEAR B SYLLABLE B081 KU;Lo;0;L;;;;;N;;;;;
+10014;LINEAR B SYLLABLE B080 MA;Lo;0;L;;;;;N;;;;;
+10015;LINEAR B SYLLABLE B013 ME;Lo;0;L;;;;;N;;;;;
+10016;LINEAR B SYLLABLE B073 MI;Lo;0;L;;;;;N;;;;;
+10017;LINEAR B SYLLABLE B015 MO;Lo;0;L;;;;;N;;;;;
+10018;LINEAR B SYLLABLE B023 MU;Lo;0;L;;;;;N;;;;;
+10019;LINEAR B SYLLABLE B006 NA;Lo;0;L;;;;;N;;;;;
+1001A;LINEAR B SYLLABLE B024 NE;Lo;0;L;;;;;N;;;;;
+1001B;LINEAR B SYLLABLE B030 NI;Lo;0;L;;;;;N;;;;;
+1001C;LINEAR B SYLLABLE B052 NO;Lo;0;L;;;;;N;;;;;
+1001D;LINEAR B SYLLABLE B055 NU;Lo;0;L;;;;;N;;;;;
+1001E;LINEAR B SYLLABLE B003 PA;Lo;0;L;;;;;N;;;;;
+1001F;LINEAR B SYLLABLE B072 PE;Lo;0;L;;;;;N;;;;;
+10020;LINEAR B SYLLABLE B039 PI;Lo;0;L;;;;;N;;;;;
+10021;LINEAR B SYLLABLE B011 PO;Lo;0;L;;;;;N;;;;;
+10022;LINEAR B SYLLABLE B050 PU;Lo;0;L;;;;;N;;;;;
+10023;LINEAR B SYLLABLE B016 QA;Lo;0;L;;;;;N;;;;;
+10024;LINEAR B SYLLABLE B078 QE;Lo;0;L;;;;;N;;;;;
+10025;LINEAR B SYLLABLE B021 QI;Lo;0;L;;;;;N;;;;;
+10026;LINEAR B SYLLABLE B032 QO;Lo;0;L;;;;;N;;;;;
+10028;LINEAR B SYLLABLE B060 RA;Lo;0;L;;;;;N;;;;;
+10029;LINEAR B SYLLABLE B027 RE;Lo;0;L;;;;;N;;;;;
+1002A;LINEAR B SYLLABLE B053 RI;Lo;0;L;;;;;N;;;;;
+1002B;LINEAR B SYLLABLE B002 RO;Lo;0;L;;;;;N;;;;;
+1002C;LINEAR B SYLLABLE B026 RU;Lo;0;L;;;;;N;;;;;
+1002D;LINEAR B SYLLABLE B031 SA;Lo;0;L;;;;;N;;;;;
+1002E;LINEAR B SYLLABLE B009 SE;Lo;0;L;;;;;N;;;;;
+1002F;LINEAR B SYLLABLE B041 SI;Lo;0;L;;;;;N;;;;;
+10030;LINEAR B SYLLABLE B012 SO;Lo;0;L;;;;;N;;;;;
+10031;LINEAR B SYLLABLE B058 SU;Lo;0;L;;;;;N;;;;;
+10032;LINEAR B SYLLABLE B059 TA;Lo;0;L;;;;;N;;;;;
+10033;LINEAR B SYLLABLE B004 TE;Lo;0;L;;;;;N;;;;;
+10034;LINEAR B SYLLABLE B037 TI;Lo;0;L;;;;;N;;;;;
+10035;LINEAR B SYLLABLE B005 TO;Lo;0;L;;;;;N;;;;;
+10036;LINEAR B SYLLABLE B069 TU;Lo;0;L;;;;;N;;;;;
+10037;LINEAR B SYLLABLE B054 WA;Lo;0;L;;;;;N;;;;;
+10038;LINEAR B SYLLABLE B075 WE;Lo;0;L;;;;;N;;;;;
+10039;LINEAR B SYLLABLE B040 WI;Lo;0;L;;;;;N;;;;;
+1003A;LINEAR B SYLLABLE B042 WO;Lo;0;L;;;;;N;;;;;
+1003C;LINEAR B SYLLABLE B017 ZA;Lo;0;L;;;;;N;;;;;
+1003D;LINEAR B SYLLABLE B074 ZE;Lo;0;L;;;;;N;;;;;
+1003F;LINEAR B SYLLABLE B020 ZO;Lo;0;L;;;;;N;;;;;
+10040;LINEAR B SYLLABLE B025 A2;Lo;0;L;;;;;N;;;;;
+10041;LINEAR B SYLLABLE B043 A3;Lo;0;L;;;;;N;;;;;
+10042;LINEAR B SYLLABLE B085 AU;Lo;0;L;;;;;N;;;;;
+10043;LINEAR B SYLLABLE B071 DWE;Lo;0;L;;;;;N;;;;;
+10044;LINEAR B SYLLABLE B090 DWO;Lo;0;L;;;;;N;;;;;
+10045;LINEAR B SYLLABLE B048 NWA;Lo;0;L;;;;;N;;;;;
+10046;LINEAR B SYLLABLE B029 PU2;Lo;0;L;;;;;N;;;;;
+10047;LINEAR B SYLLABLE B062 PTE;Lo;0;L;;;;;N;;;;;
+10048;LINEAR B SYLLABLE B076 RA2;Lo;0;L;;;;;N;;;;;
+10049;LINEAR B SYLLABLE B033 RA3;Lo;0;L;;;;;N;;;;;
+1004A;LINEAR B SYLLABLE B068 RO2;Lo;0;L;;;;;N;;;;;
+1004B;LINEAR B SYLLABLE B066 TA2;Lo;0;L;;;;;N;;;;;
+1004C;LINEAR B SYLLABLE B087 TWE;Lo;0;L;;;;;N;;;;;
+1004D;LINEAR B SYLLABLE B091 TWO;Lo;0;L;;;;;N;;;;;
+10050;LINEAR B SYMBOL B018;Lo;0;L;;;;;N;;;;;
+10051;LINEAR B SYMBOL B019;Lo;0;L;;;;;N;;;;;
+10052;LINEAR B SYMBOL B022;Lo;0;L;;;;;N;;;;;
+10053;LINEAR B SYMBOL B034;Lo;0;L;;;;;N;;;;;
+10054;LINEAR B SYMBOL B047;Lo;0;L;;;;;N;;;;;
+10055;LINEAR B SYMBOL B049;Lo;0;L;;;;;N;;;;;
+10056;LINEAR B SYMBOL B056;Lo;0;L;;;;;N;;;;;
+10057;LINEAR B SYMBOL B063;Lo;0;L;;;;;N;;;;;
+10058;LINEAR B SYMBOL B064;Lo;0;L;;;;;N;;;;;
+10059;LINEAR B SYMBOL B079;Lo;0;L;;;;;N;;;;;
+1005A;LINEAR B SYMBOL B082;Lo;0;L;;;;;N;;;;;
+1005B;LINEAR B SYMBOL B083;Lo;0;L;;;;;N;;;;;
+1005C;LINEAR B SYMBOL B086;Lo;0;L;;;;;N;;;;;
+1005D;LINEAR B SYMBOL B089;Lo;0;L;;;;;N;;;;;
+10080;LINEAR B IDEOGRAM B100 MAN;Lo;0;L;;;;;N;;;;;
+10081;LINEAR B IDEOGRAM B102 WOMAN;Lo;0;L;;;;;N;;;;;
+10082;LINEAR B IDEOGRAM B104 DEER;Lo;0;L;;;;;N;;;;;
+10083;LINEAR B IDEOGRAM B105 EQUID;Lo;0;L;;;;;N;;;;;
+10084;LINEAR B IDEOGRAM B105F MARE;Lo;0;L;;;;;N;;;;;
+10085;LINEAR B IDEOGRAM B105M STALLION;Lo;0;L;;;;;N;;;;;
+10086;LINEAR B IDEOGRAM B106F EWE;Lo;0;L;;;;;N;;;;;
+10087;LINEAR B IDEOGRAM B106M RAM;Lo;0;L;;;;;N;;;;;
+10088;LINEAR B IDEOGRAM B107F SHE-GOAT;Lo;0;L;;;;;N;;;;;
+10089;LINEAR B IDEOGRAM B107M HE-GOAT;Lo;0;L;;;;;N;;;;;
+1008A;LINEAR B IDEOGRAM B108F SOW;Lo;0;L;;;;;N;;;;;
+1008B;LINEAR B IDEOGRAM B108M BOAR;Lo;0;L;;;;;N;;;;;
+1008C;LINEAR B IDEOGRAM B109F COW;Lo;0;L;;;;;N;;;;;
+1008D;LINEAR B IDEOGRAM B109M BULL;Lo;0;L;;;;;N;;;;;
+1008E;LINEAR B IDEOGRAM B120 WHEAT;Lo;0;L;;;;;N;;;;;
+1008F;LINEAR B IDEOGRAM B121 BARLEY;Lo;0;L;;;;;N;;;;;
+10090;LINEAR B IDEOGRAM B122 OLIVE;Lo;0;L;;;;;N;;;;;
+10091;LINEAR B IDEOGRAM B123 SPICE;Lo;0;L;;;;;N;;;;;
+10092;LINEAR B IDEOGRAM B125 CYPERUS;Lo;0;L;;;;;N;;;;;
+10093;LINEAR B MONOGRAM B127 KAPO;Lo;0;L;;;;;N;;;;;
+10094;LINEAR B MONOGRAM B128 KANAKO;Lo;0;L;;;;;N;;;;;
+10095;LINEAR B IDEOGRAM B130 OIL;Lo;0;L;;;;;N;;;;;
+10096;LINEAR B IDEOGRAM B131 WINE;Lo;0;L;;;;;N;;;;;
+10097;LINEAR B IDEOGRAM B132;Lo;0;L;;;;;N;;;;;
+10098;LINEAR B MONOGRAM B133 AREPA;Lo;0;L;;;;;N;;;;;
+10099;LINEAR B MONOGRAM B135 MERI;Lo;0;L;;;;;N;;;;;
+1009A;LINEAR B IDEOGRAM B140 BRONZE;Lo;0;L;;;;;N;;;;;
+1009B;LINEAR B IDEOGRAM B141 GOLD;Lo;0;L;;;;;N;;;;;
+1009C;LINEAR B IDEOGRAM B142;Lo;0;L;;;;;N;;;;;
+1009D;LINEAR B IDEOGRAM B145 WOOL;Lo;0;L;;;;;N;;;;;
+1009E;LINEAR B IDEOGRAM B146;Lo;0;L;;;;;N;;;;;
+1009F;LINEAR B IDEOGRAM B150;Lo;0;L;;;;;N;;;;;
+100A0;LINEAR B IDEOGRAM B151 HORN;Lo;0;L;;;;;N;;;;;
+100A1;LINEAR B IDEOGRAM B152;Lo;0;L;;;;;N;;;;;
+100A2;LINEAR B IDEOGRAM B153;Lo;0;L;;;;;N;;;;;
+100A3;LINEAR B IDEOGRAM B154;Lo;0;L;;;;;N;;;;;
+100A4;LINEAR B MONOGRAM B156 TURO2;Lo;0;L;;;;;N;;;;;
+100A5;LINEAR B IDEOGRAM B157;Lo;0;L;;;;;N;;;;;
+100A6;LINEAR B IDEOGRAM B158;Lo;0;L;;;;;N;;;;;
+100A7;LINEAR B IDEOGRAM B159 CLOTH;Lo;0;L;;;;;N;;;;;
+100A8;LINEAR B IDEOGRAM B160;Lo;0;L;;;;;N;;;;;
+100A9;LINEAR B IDEOGRAM B161;Lo;0;L;;;;;N;;;;;
+100AA;LINEAR B IDEOGRAM B162 GARMENT;Lo;0;L;;;;;N;;;;;
+100AB;LINEAR B IDEOGRAM B163 ARMOUR;Lo;0;L;;;;;N;;;;;
+100AC;LINEAR B IDEOGRAM B164;Lo;0;L;;;;;N;;;;;
+100AD;LINEAR B IDEOGRAM B165;Lo;0;L;;;;;N;;;;;
+100AE;LINEAR B IDEOGRAM B166;Lo;0;L;;;;;N;;;;;
+100AF;LINEAR B IDEOGRAM B167;Lo;0;L;;;;;N;;;;;
+100B0;LINEAR B IDEOGRAM B168;Lo;0;L;;;;;N;;;;;
+100B1;LINEAR B IDEOGRAM B169;Lo;0;L;;;;;N;;;;;
+100B2;LINEAR B IDEOGRAM B170;Lo;0;L;;;;;N;;;;;
+100B3;LINEAR B IDEOGRAM B171;Lo;0;L;;;;;N;;;;;
+100B4;LINEAR B IDEOGRAM B172;Lo;0;L;;;;;N;;;;;
+100B5;LINEAR B IDEOGRAM B173 MONTH;Lo;0;L;;;;;N;;;;;
+100B6;LINEAR B IDEOGRAM B174;Lo;0;L;;;;;N;;;;;
+100B7;LINEAR B IDEOGRAM B176 TREE;Lo;0;L;;;;;N;;;;;
+100B8;LINEAR B IDEOGRAM B177;Lo;0;L;;;;;N;;;;;
+100B9;LINEAR B IDEOGRAM B178;Lo;0;L;;;;;N;;;;;
+100BA;LINEAR B IDEOGRAM B179;Lo;0;L;;;;;N;;;;;
+100BB;LINEAR B IDEOGRAM B180;Lo;0;L;;;;;N;;;;;
+100BC;LINEAR B IDEOGRAM B181;Lo;0;L;;;;;N;;;;;
+100BD;LINEAR B IDEOGRAM B182;Lo;0;L;;;;;N;;;;;
+100BE;LINEAR B IDEOGRAM B183;Lo;0;L;;;;;N;;;;;
+100BF;LINEAR B IDEOGRAM B184;Lo;0;L;;;;;N;;;;;
+100C0;LINEAR B IDEOGRAM B185;Lo;0;L;;;;;N;;;;;
+100C1;LINEAR B IDEOGRAM B189;Lo;0;L;;;;;N;;;;;
+100C2;LINEAR B IDEOGRAM B190;Lo;0;L;;;;;N;;;;;
+100C3;LINEAR B IDEOGRAM B191 HELMET;Lo;0;L;;;;;N;;;;;
+100C4;LINEAR B IDEOGRAM B220 FOOTSTOOL;Lo;0;L;;;;;N;;;;;
+100C5;LINEAR B IDEOGRAM B225 BATHTUB;Lo;0;L;;;;;N;;;;;
+100C6;LINEAR B IDEOGRAM B230 SPEAR;Lo;0;L;;;;;N;;;;;
+100C7;LINEAR B IDEOGRAM B231 ARROW;Lo;0;L;;;;;N;;;;;
+100C8;LINEAR B IDEOGRAM B232;Lo;0;L;;;;;N;;;;;
+100C9;LINEAR B IDEOGRAM B233 SWORD;Lo;0;L;;;;;N;;pug;;;
+100CA;LINEAR B IDEOGRAM B234;Lo;0;L;;;;;N;;;;;
+100CB;LINEAR B IDEOGRAM B236;Lo;0;L;;;;;N;;gup;;;
+100CC;LINEAR B IDEOGRAM B240 WHEELED CHARIOT;Lo;0;L;;;;;N;;;;;
+100CD;LINEAR B IDEOGRAM B241 CHARIOT;Lo;0;L;;;;;N;;;;;
+100CE;LINEAR B IDEOGRAM B242 CHARIOT FRAME;Lo;0;L;;;;;N;;;;;
+100CF;LINEAR B IDEOGRAM B243 WHEEL;Lo;0;L;;;;;N;;;;;
+100D0;LINEAR B IDEOGRAM B245;Lo;0;L;;;;;N;;;;;
+100D1;LINEAR B IDEOGRAM B246;Lo;0;L;;;;;N;;;;;
+100D2;LINEAR B MONOGRAM B247 DIPTE;Lo;0;L;;;;;N;;;;;
+100D3;LINEAR B IDEOGRAM B248;Lo;0;L;;;;;N;;;;;
+100D4;LINEAR B IDEOGRAM B249;Lo;0;L;;;;;N;;;;;
+100D5;LINEAR B IDEOGRAM B251;Lo;0;L;;;;;N;;;;;
+100D6;LINEAR B IDEOGRAM B252;Lo;0;L;;;;;N;;;;;
+100D7;LINEAR B IDEOGRAM B253;Lo;0;L;;;;;N;;;;;
+100D8;LINEAR B IDEOGRAM B254 DART;Lo;0;L;;;;;N;;;;;
+100D9;LINEAR B IDEOGRAM B255;Lo;0;L;;;;;N;;;;;
+100DA;LINEAR B IDEOGRAM B256;Lo;0;L;;;;;N;;;;;
+100DB;LINEAR B IDEOGRAM B257;Lo;0;L;;;;;N;;;;;
+100DC;LINEAR B IDEOGRAM B258;Lo;0;L;;;;;N;;;;;
+100DD;LINEAR B IDEOGRAM B259;Lo;0;L;;;;;N;;;;;
+100DE;LINEAR B IDEOGRAM VESSEL B155;Lo;0;L;;;;;N;;;;;
+100DF;LINEAR B IDEOGRAM VESSEL B200;Lo;0;L;;;;;N;;;;;
+100E0;LINEAR B IDEOGRAM VESSEL B201;Lo;0;L;;;;;N;;;;;
+100E1;LINEAR B IDEOGRAM VESSEL B202;Lo;0;L;;;;;N;;;;;
+100E2;LINEAR B IDEOGRAM VESSEL B203;Lo;0;L;;;;;N;;;;;
+100E3;LINEAR B IDEOGRAM VESSEL B204;Lo;0;L;;;;;N;;;;;
+100E4;LINEAR B IDEOGRAM VESSEL B205;Lo;0;L;;;;;N;;;;;
+100E5;LINEAR B IDEOGRAM VESSEL B206;Lo;0;L;;;;;N;;;;;
+100E6;LINEAR B IDEOGRAM VESSEL B207;Lo;0;L;;;;;N;;;;;
+100E7;LINEAR B IDEOGRAM VESSEL B208;Lo;0;L;;;;;N;;;;;
+100E8;LINEAR B IDEOGRAM VESSEL B209;Lo;0;L;;;;;N;;;;;
+100E9;LINEAR B IDEOGRAM VESSEL B210;Lo;0;L;;;;;N;;;;;
+100EA;LINEAR B IDEOGRAM VESSEL B211;Lo;0;L;;;;;N;;;;;
+100EB;LINEAR B IDEOGRAM VESSEL B212;Lo;0;L;;;;;N;;;;;
+100EC;LINEAR B IDEOGRAM VESSEL B213;Lo;0;L;;;;;N;;;;;
+100ED;LINEAR B IDEOGRAM VESSEL B214;Lo;0;L;;;;;N;;;;;
+100EE;LINEAR B IDEOGRAM VESSEL B215;Lo;0;L;;;;;N;;;;;
+100EF;LINEAR B IDEOGRAM VESSEL B216;Lo;0;L;;;;;N;;;;;
+100F0;LINEAR B IDEOGRAM VESSEL B217;Lo;0;L;;;;;N;;;;;
+100F1;LINEAR B IDEOGRAM VESSEL B218;Lo;0;L;;;;;N;;;;;
+100F2;LINEAR B IDEOGRAM VESSEL B219;Lo;0;L;;;;;N;;;;;
+100F3;LINEAR B IDEOGRAM VESSEL B221;Lo;0;L;;;;;N;;;;;
+100F4;LINEAR B IDEOGRAM VESSEL B222;Lo;0;L;;;;;N;;;;;
+100F5;LINEAR B IDEOGRAM VESSEL B226;Lo;0;L;;;;;N;;;;;
+100F6;LINEAR B IDEOGRAM VESSEL B227;Lo;0;L;;;;;N;;;;;
+100F7;LINEAR B IDEOGRAM VESSEL B228;Lo;0;L;;;;;N;;;;;
+100F8;LINEAR B IDEOGRAM VESSEL B229;Lo;0;L;;;;;N;;;;;
+100F9;LINEAR B IDEOGRAM VESSEL B250;Lo;0;L;;;;;N;;;;;
+100FA;LINEAR B IDEOGRAM VESSEL B305;Lo;0;L;;;;;N;;;;;
+10100;AEGEAN WORD SEPARATOR LINE;Po;0;L;;;;;N;;;;;
+10101;AEGEAN WORD SEPARATOR DOT;Po;0;ON;;;;;N;;;;;
+10102;AEGEAN CHECK MARK;So;0;L;;;;;N;;;;;
+10107;AEGEAN NUMBER ONE;No;0;L;;;;1;N;;;;;
+10108;AEGEAN NUMBER TWO;No;0;L;;;;2;N;;;;;
+10109;AEGEAN NUMBER THREE;No;0;L;;;;3;N;;;;;
+1010A;AEGEAN NUMBER FOUR;No;0;L;;;;4;N;;;;;
+1010B;AEGEAN NUMBER FIVE;No;0;L;;;;5;N;;;;;
+1010C;AEGEAN NUMBER SIX;No;0;L;;;;6;N;;;;;
+1010D;AEGEAN NUMBER SEVEN;No;0;L;;;;7;N;;;;;
+1010E;AEGEAN NUMBER EIGHT;No;0;L;;;;8;N;;;;;
+1010F;AEGEAN NUMBER NINE;No;0;L;;;;9;N;;;;;
+10110;AEGEAN NUMBER TEN;No;0;L;;;;10;N;;;;;
+10111;AEGEAN NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+10112;AEGEAN NUMBER THIRTY;No;0;L;;;;30;N;;;;;
+10113;AEGEAN NUMBER FORTY;No;0;L;;;;40;N;;;;;
+10114;AEGEAN NUMBER FIFTY;No;0;L;;;;50;N;;;;;
+10115;AEGEAN NUMBER SIXTY;No;0;L;;;;60;N;;;;;
+10116;AEGEAN NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
+10117;AEGEAN NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
+10118;AEGEAN NUMBER NINETY;No;0;L;;;;90;N;;;;;
+10119;AEGEAN NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+1011A;AEGEAN NUMBER TWO HUNDRED;No;0;L;;;;200;N;;;;;
+1011B;AEGEAN NUMBER THREE HUNDRED;No;0;L;;;;300;N;;;;;
+1011C;AEGEAN NUMBER FOUR HUNDRED;No;0;L;;;;400;N;;;;;
+1011D;AEGEAN NUMBER FIVE HUNDRED;No;0;L;;;;500;N;;;;;
+1011E;AEGEAN NUMBER SIX HUNDRED;No;0;L;;;;600;N;;;;;
+1011F;AEGEAN NUMBER SEVEN HUNDRED;No;0;L;;;;700;N;;;;;
+10120;AEGEAN NUMBER EIGHT HUNDRED;No;0;L;;;;800;N;;;;;
+10121;AEGEAN NUMBER NINE HUNDRED;No;0;L;;;;900;N;;;;;
+10122;AEGEAN NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+10123;AEGEAN NUMBER TWO THOUSAND;No;0;L;;;;2000;N;;;;;
+10124;AEGEAN NUMBER THREE THOUSAND;No;0;L;;;;3000;N;;;;;
+10125;AEGEAN NUMBER FOUR THOUSAND;No;0;L;;;;4000;N;;;;;
+10126;AEGEAN NUMBER FIVE THOUSAND;No;0;L;;;;5000;N;;;;;
+10127;AEGEAN NUMBER SIX THOUSAND;No;0;L;;;;6000;N;;;;;
+10128;AEGEAN NUMBER SEVEN THOUSAND;No;0;L;;;;7000;N;;;;;
+10129;AEGEAN NUMBER EIGHT THOUSAND;No;0;L;;;;8000;N;;;;;
+1012A;AEGEAN NUMBER NINE THOUSAND;No;0;L;;;;9000;N;;;;;
+1012B;AEGEAN NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
+1012C;AEGEAN NUMBER TWENTY THOUSAND;No;0;L;;;;20000;N;;;;;
+1012D;AEGEAN NUMBER THIRTY THOUSAND;No;0;L;;;;30000;N;;;;;
+1012E;AEGEAN NUMBER FORTY THOUSAND;No;0;L;;;;40000;N;;;;;
+1012F;AEGEAN NUMBER FIFTY THOUSAND;No;0;L;;;;50000;N;;;;;
+10130;AEGEAN NUMBER SIXTY THOUSAND;No;0;L;;;;60000;N;;;;;
+10131;AEGEAN NUMBER SEVENTY THOUSAND;No;0;L;;;;70000;N;;;;;
+10132;AEGEAN NUMBER EIGHTY THOUSAND;No;0;L;;;;80000;N;;;;;
+10133;AEGEAN NUMBER NINETY THOUSAND;No;0;L;;;;90000;N;;;;;
+10137;AEGEAN WEIGHT BASE UNIT;So;0;L;;;;;N;;;;;
+10138;AEGEAN WEIGHT FIRST SUBUNIT;So;0;L;;;;;N;;;;;
+10139;AEGEAN WEIGHT SECOND SUBUNIT;So;0;L;;;;;N;;;;;
+1013A;AEGEAN WEIGHT THIRD SUBUNIT;So;0;L;;;;;N;;;;;
+1013B;AEGEAN WEIGHT FOURTH SUBUNIT;So;0;L;;;;;N;;;;;
+1013C;AEGEAN DRY MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;;
+1013D;AEGEAN LIQUID MEASURE FIRST SUBUNIT;So;0;L;;;;;N;;;;;
+1013E;AEGEAN MEASURE SECOND SUBUNIT;So;0;L;;;;;N;;;;;
+1013F;AEGEAN MEASURE THIRD SUBUNIT;So;0;L;;;;;N;;;;;
+10140;GREEK ACROPHONIC ATTIC ONE QUARTER;Nl;0;ON;;;;1/4;N;;;;;
+10141;GREEK ACROPHONIC ATTIC ONE HALF;Nl;0;ON;;;;1/2;N;;;;;
+10142;GREEK ACROPHONIC ATTIC ONE DRACHMA;Nl;0;ON;;;;1;N;;;;;
+10143;GREEK ACROPHONIC ATTIC FIVE;Nl;0;ON;;;;5;N;;;;;
+10144;GREEK ACROPHONIC ATTIC FIFTY;Nl;0;ON;;;;50;N;;;;;
+10145;GREEK ACROPHONIC ATTIC FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+10146;GREEK ACROPHONIC ATTIC FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;;
+10147;GREEK ACROPHONIC ATTIC FIFTY THOUSAND;Nl;0;ON;;;;50000;N;;;;;
+10148;GREEK ACROPHONIC ATTIC FIVE TALENTS;Nl;0;ON;;;;5;N;;;;;
+10149;GREEK ACROPHONIC ATTIC TEN TALENTS;Nl;0;ON;;;;10;N;;;;;
+1014A;GREEK ACROPHONIC ATTIC FIFTY TALENTS;Nl;0;ON;;;;50;N;;;;;
+1014B;GREEK ACROPHONIC ATTIC ONE HUNDRED TALENTS;Nl;0;ON;;;;100;N;;;;;
+1014C;GREEK ACROPHONIC ATTIC FIVE HUNDRED TALENTS;Nl;0;ON;;;;500;N;;;;;
+1014D;GREEK ACROPHONIC ATTIC ONE THOUSAND TALENTS;Nl;0;ON;;;;1000;N;;;;;
+1014E;GREEK ACROPHONIC ATTIC FIVE THOUSAND TALENTS;Nl;0;ON;;;;5000;N;;;;;
+1014F;GREEK ACROPHONIC ATTIC FIVE STATERS;Nl;0;ON;;;;5;N;;;;;
+10150;GREEK ACROPHONIC ATTIC TEN STATERS;Nl;0;ON;;;;10;N;;;;;
+10151;GREEK ACROPHONIC ATTIC FIFTY STATERS;Nl;0;ON;;;;50;N;;;;;
+10152;GREEK ACROPHONIC ATTIC ONE HUNDRED STATERS;Nl;0;ON;;;;100;N;;;;;
+10153;GREEK ACROPHONIC ATTIC FIVE HUNDRED STATERS;Nl;0;ON;;;;500;N;;;;;
+10154;GREEK ACROPHONIC ATTIC ONE THOUSAND STATERS;Nl;0;ON;;;;1000;N;;;;;
+10155;GREEK ACROPHONIC ATTIC TEN THOUSAND STATERS;Nl;0;ON;;;;10000;N;;;;;
+10156;GREEK ACROPHONIC ATTIC FIFTY THOUSAND STATERS;Nl;0;ON;;;;50000;N;;;;;
+10157;GREEK ACROPHONIC ATTIC TEN MNAS;Nl;0;ON;;;;10;N;;;;;
+10158;GREEK ACROPHONIC HERAEUM ONE PLETHRON;Nl;0;ON;;;;1;N;;;;;
+10159;GREEK ACROPHONIC THESPIAN ONE;Nl;0;ON;;;;1;N;;;;;
+1015A;GREEK ACROPHONIC HERMIONIAN ONE;Nl;0;ON;;;;1;N;;;;;
+1015B;GREEK ACROPHONIC EPIDAUREAN TWO;Nl;0;ON;;;;2;N;;;;;
+1015C;GREEK ACROPHONIC THESPIAN TWO;Nl;0;ON;;;;2;N;;;;;
+1015D;GREEK ACROPHONIC CYRENAIC TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;;
+1015E;GREEK ACROPHONIC EPIDAUREAN TWO DRACHMAS;Nl;0;ON;;;;2;N;;;;;
+1015F;GREEK ACROPHONIC TROEZENIAN FIVE;Nl;0;ON;;;;5;N;;;;;
+10160;GREEK ACROPHONIC TROEZENIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10161;GREEK ACROPHONIC TROEZENIAN TEN ALTERNATE FORM;Nl;0;ON;;;;10;N;;;;;
+10162;GREEK ACROPHONIC HERMIONIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10163;GREEK ACROPHONIC MESSENIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10164;GREEK ACROPHONIC THESPIAN TEN;Nl;0;ON;;;;10;N;;;;;
+10165;GREEK ACROPHONIC THESPIAN THIRTY;Nl;0;ON;;;;30;N;;;;;
+10166;GREEK ACROPHONIC TROEZENIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
+10167;GREEK ACROPHONIC TROEZENIAN FIFTY ALTERNATE FORM;Nl;0;ON;;;;50;N;;;;;
+10168;GREEK ACROPHONIC HERMIONIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
+10169;GREEK ACROPHONIC THESPIAN FIFTY;Nl;0;ON;;;;50;N;;;;;
+1016A;GREEK ACROPHONIC THESPIAN ONE HUNDRED;Nl;0;ON;;;;100;N;;;;;
+1016B;GREEK ACROPHONIC THESPIAN THREE HUNDRED;Nl;0;ON;;;;300;N;;;;;
+1016C;GREEK ACROPHONIC EPIDAUREAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+1016D;GREEK ACROPHONIC TROEZENIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+1016E;GREEK ACROPHONIC THESPIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+1016F;GREEK ACROPHONIC CARYSTIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+10170;GREEK ACROPHONIC NAXIAN FIVE HUNDRED;Nl;0;ON;;;;500;N;;;;;
+10171;GREEK ACROPHONIC THESPIAN ONE THOUSAND;Nl;0;ON;;;;1000;N;;;;;
+10172;GREEK ACROPHONIC THESPIAN FIVE THOUSAND;Nl;0;ON;;;;5000;N;;;;;
+10173;GREEK ACROPHONIC DELPHIC FIVE MNAS;Nl;0;ON;;;;5;N;;;;;
+10174;GREEK ACROPHONIC STRATIAN FIFTY MNAS;Nl;0;ON;;;;50;N;;;;;
+10175;GREEK ONE HALF SIGN;No;0;ON;;;;1/2;N;;;;;
+10176;GREEK ONE HALF SIGN ALTERNATE FORM;No;0;ON;;;;1/2;N;;;;;
+10177;GREEK TWO THIRDS SIGN;No;0;ON;;;;2/3;N;;;;;
+10178;GREEK THREE QUARTERS SIGN;No;0;ON;;;;3/4;N;;;;;
+10179;GREEK YEAR SIGN;So;0;ON;;;;;N;;;;;
+1017A;GREEK TALENT SIGN;So;0;ON;;;;;N;;;;;
+1017B;GREEK DRACHMA SIGN;So;0;ON;;;;;N;;;;;
+1017C;GREEK OBOL SIGN;So;0;ON;;;;;N;;;;;
+1017D;GREEK TWO OBOLS SIGN;So;0;ON;;;;;N;;;;;
+1017E;GREEK THREE OBOLS SIGN;So;0;ON;;;;;N;;;;;
+1017F;GREEK FOUR OBOLS SIGN;So;0;ON;;;;;N;;;;;
+10180;GREEK FIVE OBOLS SIGN;So;0;ON;;;;;N;;;;;
+10181;GREEK METRETES SIGN;So;0;ON;;;;;N;;;;;
+10182;GREEK KYATHOS BASE SIGN;So;0;ON;;;;;N;;;;;
+10183;GREEK LITRA SIGN;So;0;ON;;;;;N;;;;;
+10184;GREEK OUNKIA SIGN;So;0;ON;;;;;N;;;;;
+10185;GREEK XESTES SIGN;So;0;ON;;;;;N;;;;;
+10186;GREEK ARTABE SIGN;So;0;ON;;;;;N;;;;;
+10187;GREEK AROURA SIGN;So;0;ON;;;;;N;;;;;
+10188;GREEK GRAMMA SIGN;So;0;ON;;;;;N;;;;;
+10189;GREEK TRYBLION BASE SIGN;So;0;ON;;;;;N;;;;;
+1018A;GREEK ZERO SIGN;No;0;ON;;;;0;N;;;;;
+10300;OLD ITALIC LETTER A;Lo;0;L;;;;;N;;;;;
+10301;OLD ITALIC LETTER BE;Lo;0;L;;;;;N;;;;;
+10302;OLD ITALIC LETTER KE;Lo;0;L;;;;;N;;;;;
+10303;OLD ITALIC LETTER DE;Lo;0;L;;;;;N;;;;;
+10304;OLD ITALIC LETTER E;Lo;0;L;;;;;N;;;;;
+10305;OLD ITALIC LETTER VE;Lo;0;L;;;;;N;;;;;
+10306;OLD ITALIC LETTER ZE;Lo;0;L;;;;;N;;;;;
+10307;OLD ITALIC LETTER HE;Lo;0;L;;;;;N;;;;;
+10308;OLD ITALIC LETTER THE;Lo;0;L;;;;;N;;;;;
+10309;OLD ITALIC LETTER I;Lo;0;L;;;;;N;;;;;
+1030A;OLD ITALIC LETTER KA;Lo;0;L;;;;;N;;;;;
+1030B;OLD ITALIC LETTER EL;Lo;0;L;;;;;N;;;;;
+1030C;OLD ITALIC LETTER EM;Lo;0;L;;;;;N;;;;;
+1030D;OLD ITALIC LETTER EN;Lo;0;L;;;;;N;;;;;
+1030E;OLD ITALIC LETTER ESH;Lo;0;L;;;;;N;;;;;
+1030F;OLD ITALIC LETTER O;Lo;0;L;;;;;N;;Faliscan;;;
+10310;OLD ITALIC LETTER PE;Lo;0;L;;;;;N;;;;;
+10311;OLD ITALIC LETTER SHE;Lo;0;L;;;;;N;;;;;
+10312;OLD ITALIC LETTER KU;Lo;0;L;;;;;N;;;;;
+10313;OLD ITALIC LETTER ER;Lo;0;L;;;;;N;;;;;
+10314;OLD ITALIC LETTER ES;Lo;0;L;;;;;N;;;;;
+10315;OLD ITALIC LETTER TE;Lo;0;L;;;;;N;;;;;
+10316;OLD ITALIC LETTER U;Lo;0;L;;;;;N;;;;;
+10317;OLD ITALIC LETTER EKS;Lo;0;L;;;;;N;;Faliscan;;;
+10318;OLD ITALIC LETTER PHE;Lo;0;L;;;;;N;;;;;
+10319;OLD ITALIC LETTER KHE;Lo;0;L;;;;;N;;;;;
+1031A;OLD ITALIC LETTER EF;Lo;0;L;;;;;N;;;;;
+1031B;OLD ITALIC LETTER ERS;Lo;0;L;;;;;N;;Umbrian;;;
+1031C;OLD ITALIC LETTER CHE;Lo;0;L;;;;;N;;Umbrian;;;
+1031D;OLD ITALIC LETTER II;Lo;0;L;;;;;N;;Oscan;;;
+1031E;OLD ITALIC LETTER UU;Lo;0;L;;;;;N;;Oscan;;;
+10320;OLD ITALIC NUMERAL ONE;No;0;L;;;;1;N;;;;;
+10321;OLD ITALIC NUMERAL FIVE;No;0;L;;;;5;N;;;;;
+10322;OLD ITALIC NUMERAL TEN;No;0;L;;;;10;N;;;;;
+10323;OLD ITALIC NUMERAL FIFTY;No;0;L;;;;50;N;;;;;
+10330;GOTHIC LETTER AHSA;Lo;0;L;;;;;N;;;;;
+10331;GOTHIC LETTER BAIRKAN;Lo;0;L;;;;;N;;;;;
+10332;GOTHIC LETTER GIBA;Lo;0;L;;;;;N;;;;;
+10333;GOTHIC LETTER DAGS;Lo;0;L;;;;;N;;;;;
+10334;GOTHIC LETTER AIHVUS;Lo;0;L;;;;;N;;;;;
+10335;GOTHIC LETTER QAIRTHRA;Lo;0;L;;;;;N;;;;;
+10336;GOTHIC LETTER IUJA;Lo;0;L;;;;;N;;;;;
+10337;GOTHIC LETTER HAGL;Lo;0;L;;;;;N;;;;;
+10338;GOTHIC LETTER THIUTH;Lo;0;L;;;;;N;;;;;
+10339;GOTHIC LETTER EIS;Lo;0;L;;;;;N;;;;;
+1033A;GOTHIC LETTER KUSMA;Lo;0;L;;;;;N;;;;;
+1033B;GOTHIC LETTER LAGUS;Lo;0;L;;;;;N;;;;;
+1033C;GOTHIC LETTER MANNA;Lo;0;L;;;;;N;;;;;
+1033D;GOTHIC LETTER NAUTHS;Lo;0;L;;;;;N;;;;;
+1033E;GOTHIC LETTER JER;Lo;0;L;;;;;N;;;;;
+1033F;GOTHIC LETTER URUS;Lo;0;L;;;;;N;;;;;
+10340;GOTHIC LETTER PAIRTHRA;Lo;0;L;;;;;N;;;;;
+10341;GOTHIC LETTER NINETY;Nl;0;L;;;;90;N;;;;;
+10342;GOTHIC LETTER RAIDA;Lo;0;L;;;;;N;;;;;
+10343;GOTHIC LETTER SAUIL;Lo;0;L;;;;;N;;;;;
+10344;GOTHIC LETTER TEIWS;Lo;0;L;;;;;N;;;;;
+10345;GOTHIC LETTER WINJA;Lo;0;L;;;;;N;;;;;
+10346;GOTHIC LETTER FAIHU;Lo;0;L;;;;;N;;;;;
+10347;GOTHIC LETTER IGGWS;Lo;0;L;;;;;N;;;;;
+10348;GOTHIC LETTER HWAIR;Lo;0;L;;;;;N;;;;;
+10349;GOTHIC LETTER OTHAL;Lo;0;L;;;;;N;;;;;
+1034A;GOTHIC LETTER NINE HUNDRED;Nl;0;L;;;;900;N;;;;;
+10380;UGARITIC LETTER ALPA;Lo;0;L;;;;;N;;;;;
+10381;UGARITIC LETTER BETA;Lo;0;L;;;;;N;;;;;
+10382;UGARITIC LETTER GAMLA;Lo;0;L;;;;;N;;;;;
+10383;UGARITIC LETTER KHA;Lo;0;L;;;;;N;;;;;
+10384;UGARITIC LETTER DELTA;Lo;0;L;;;;;N;;;;;
+10385;UGARITIC LETTER HO;Lo;0;L;;;;;N;;;;;
+10386;UGARITIC LETTER WO;Lo;0;L;;;;;N;;;;;
+10387;UGARITIC LETTER ZETA;Lo;0;L;;;;;N;;;;;
+10388;UGARITIC LETTER HOTA;Lo;0;L;;;;;N;;;;;
+10389;UGARITIC LETTER TET;Lo;0;L;;;;;N;;;;;
+1038A;UGARITIC LETTER YOD;Lo;0;L;;;;;N;;;;;
+1038B;UGARITIC LETTER KAF;Lo;0;L;;;;;N;;;;;
+1038C;UGARITIC LETTER SHIN;Lo;0;L;;;;;N;;;;;
+1038D;UGARITIC LETTER LAMDA;Lo;0;L;;;;;N;;;;;
+1038E;UGARITIC LETTER MEM;Lo;0;L;;;;;N;;;;;
+1038F;UGARITIC LETTER DHAL;Lo;0;L;;;;;N;;;;;
+10390;UGARITIC LETTER NUN;Lo;0;L;;;;;N;;;;;
+10391;UGARITIC LETTER ZU;Lo;0;L;;;;;N;;;;;
+10392;UGARITIC LETTER SAMKA;Lo;0;L;;;;;N;;;;;
+10393;UGARITIC LETTER AIN;Lo;0;L;;;;;N;;;;;
+10394;UGARITIC LETTER PU;Lo;0;L;;;;;N;;;;;
+10395;UGARITIC LETTER SADE;Lo;0;L;;;;;N;;;;;
+10396;UGARITIC LETTER QOPA;Lo;0;L;;;;;N;;;;;
+10397;UGARITIC LETTER RASHA;Lo;0;L;;;;;N;;;;;
+10398;UGARITIC LETTER THANNA;Lo;0;L;;;;;N;;;;;
+10399;UGARITIC LETTER GHAIN;Lo;0;L;;;;;N;;;;;
+1039A;UGARITIC LETTER TO;Lo;0;L;;;;;N;;;;;
+1039B;UGARITIC LETTER I;Lo;0;L;;;;;N;;;;;
+1039C;UGARITIC LETTER U;Lo;0;L;;;;;N;;;;;
+1039D;UGARITIC LETTER SSU;Lo;0;L;;;;;N;;;;;
+1039F;UGARITIC WORD DIVIDER;Po;0;L;;;;;N;;;;;
+103A0;OLD PERSIAN SIGN A;Lo;0;L;;;;;N;;;;;
+103A1;OLD PERSIAN SIGN I;Lo;0;L;;;;;N;;;;;
+103A2;OLD PERSIAN SIGN U;Lo;0;L;;;;;N;;;;;
+103A3;OLD PERSIAN SIGN KA;Lo;0;L;;;;;N;;;;;
+103A4;OLD PERSIAN SIGN KU;Lo;0;L;;;;;N;;;;;
+103A5;OLD PERSIAN SIGN GA;Lo;0;L;;;;;N;;;;;
+103A6;OLD PERSIAN SIGN GU;Lo;0;L;;;;;N;;;;;
+103A7;OLD PERSIAN SIGN XA;Lo;0;L;;;;;N;;;;;
+103A8;OLD PERSIAN SIGN CA;Lo;0;L;;;;;N;;;;;
+103A9;OLD PERSIAN SIGN JA;Lo;0;L;;;;;N;;;;;
+103AA;OLD PERSIAN SIGN JI;Lo;0;L;;;;;N;;;;;
+103AB;OLD PERSIAN SIGN TA;Lo;0;L;;;;;N;;;;;
+103AC;OLD PERSIAN SIGN TU;Lo;0;L;;;;;N;;;;;
+103AD;OLD PERSIAN SIGN DA;Lo;0;L;;;;;N;;;;;
+103AE;OLD PERSIAN SIGN DI;Lo;0;L;;;;;N;;;;;
+103AF;OLD PERSIAN SIGN DU;Lo;0;L;;;;;N;;;;;
+103B0;OLD PERSIAN SIGN THA;Lo;0;L;;;;;N;;;;;
+103B1;OLD PERSIAN SIGN PA;Lo;0;L;;;;;N;;;;;
+103B2;OLD PERSIAN SIGN BA;Lo;0;L;;;;;N;;;;;
+103B3;OLD PERSIAN SIGN FA;Lo;0;L;;;;;N;;;;;
+103B4;OLD PERSIAN SIGN NA;Lo;0;L;;;;;N;;;;;
+103B5;OLD PERSIAN SIGN NU;Lo;0;L;;;;;N;;;;;
+103B6;OLD PERSIAN SIGN MA;Lo;0;L;;;;;N;;;;;
+103B7;OLD PERSIAN SIGN MI;Lo;0;L;;;;;N;;;;;
+103B8;OLD PERSIAN SIGN MU;Lo;0;L;;;;;N;;;;;
+103B9;OLD PERSIAN SIGN YA;Lo;0;L;;;;;N;;;;;
+103BA;OLD PERSIAN SIGN VA;Lo;0;L;;;;;N;;;;;
+103BB;OLD PERSIAN SIGN VI;Lo;0;L;;;;;N;;;;;
+103BC;OLD PERSIAN SIGN RA;Lo;0;L;;;;;N;;;;;
+103BD;OLD PERSIAN SIGN RU;Lo;0;L;;;;;N;;;;;
+103BE;OLD PERSIAN SIGN LA;Lo;0;L;;;;;N;;;;;
+103BF;OLD PERSIAN SIGN SA;Lo;0;L;;;;;N;;;;;
+103C0;OLD PERSIAN SIGN ZA;Lo;0;L;;;;;N;;;;;
+103C1;OLD PERSIAN SIGN SHA;Lo;0;L;;;;;N;;;;;
+103C2;OLD PERSIAN SIGN SSA;Lo;0;L;;;;;N;;;;;
+103C3;OLD PERSIAN SIGN HA;Lo;0;L;;;;;N;;;;;
+103C8;OLD PERSIAN SIGN AURAMAZDAA;Lo;0;L;;;;;N;;;;;
+103C9;OLD PERSIAN SIGN AURAMAZDAA-2;Lo;0;L;;;;;N;;;;;
+103CA;OLD PERSIAN SIGN AURAMAZDAAHA;Lo;0;L;;;;;N;;;;;
+103CB;OLD PERSIAN SIGN XSHAAYATHIYA;Lo;0;L;;;;;N;;;;;
+103CC;OLD PERSIAN SIGN DAHYAAUSH;Lo;0;L;;;;;N;;;;;
+103CD;OLD PERSIAN SIGN DAHYAAUSH-2;Lo;0;L;;;;;N;;;;;
+103CE;OLD PERSIAN SIGN BAGA;Lo;0;L;;;;;N;;;;;
+103CF;OLD PERSIAN SIGN BUUMISH;Lo;0;L;;;;;N;;;;;
+103D0;OLD PERSIAN WORD DIVIDER;Po;0;L;;;;;N;;;;;
+103D1;OLD PERSIAN NUMBER ONE;Nl;0;L;;;;1;N;;;;;
+103D2;OLD PERSIAN NUMBER TWO;Nl;0;L;;;;2;N;;;;;
+103D3;OLD PERSIAN NUMBER TEN;Nl;0;L;;;;10;N;;;;;
+103D4;OLD PERSIAN NUMBER TWENTY;Nl;0;L;;;;20;N;;;;;
+103D5;OLD PERSIAN NUMBER HUNDRED;Nl;0;L;;;;100;N;;;;;
+10400;DESERET CAPITAL LETTER LONG I;Lu;0;L;;;;;N;;;;10428;
+10401;DESERET CAPITAL LETTER LONG E;Lu;0;L;;;;;N;;;;10429;
+10402;DESERET CAPITAL LETTER LONG A;Lu;0;L;;;;;N;;;;1042A;
+10403;DESERET CAPITAL LETTER LONG AH;Lu;0;L;;;;;N;;;;1042B;
+10404;DESERET CAPITAL LETTER LONG O;Lu;0;L;;;;;N;;;;1042C;
+10405;DESERET CAPITAL LETTER LONG OO;Lu;0;L;;;;;N;;;;1042D;
+10406;DESERET CAPITAL LETTER SHORT I;Lu;0;L;;;;;N;;;;1042E;
+10407;DESERET CAPITAL LETTER SHORT E;Lu;0;L;;;;;N;;;;1042F;
+10408;DESERET CAPITAL LETTER SHORT A;Lu;0;L;;;;;N;;;;10430;
+10409;DESERET CAPITAL LETTER SHORT AH;Lu;0;L;;;;;N;;;;10431;
+1040A;DESERET CAPITAL LETTER SHORT O;Lu;0;L;;;;;N;;;;10432;
+1040B;DESERET CAPITAL LETTER SHORT OO;Lu;0;L;;;;;N;;;;10433;
+1040C;DESERET CAPITAL LETTER AY;Lu;0;L;;;;;N;;;;10434;
+1040D;DESERET CAPITAL LETTER OW;Lu;0;L;;;;;N;;;;10435;
+1040E;DESERET CAPITAL LETTER WU;Lu;0;L;;;;;N;;;;10436;
+1040F;DESERET CAPITAL LETTER YEE;Lu;0;L;;;;;N;;;;10437;
+10410;DESERET CAPITAL LETTER H;Lu;0;L;;;;;N;;;;10438;
+10411;DESERET CAPITAL LETTER PEE;Lu;0;L;;;;;N;;;;10439;
+10412;DESERET CAPITAL LETTER BEE;Lu;0;L;;;;;N;;;;1043A;
+10413;DESERET CAPITAL LETTER TEE;Lu;0;L;;;;;N;;;;1043B;
+10414;DESERET CAPITAL LETTER DEE;Lu;0;L;;;;;N;;;;1043C;
+10415;DESERET CAPITAL LETTER CHEE;Lu;0;L;;;;;N;;;;1043D;
+10416;DESERET CAPITAL LETTER JEE;Lu;0;L;;;;;N;;;;1043E;
+10417;DESERET CAPITAL LETTER KAY;Lu;0;L;;;;;N;;;;1043F;
+10418;DESERET CAPITAL LETTER GAY;Lu;0;L;;;;;N;;;;10440;
+10419;DESERET CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;10441;
+1041A;DESERET CAPITAL LETTER VEE;Lu;0;L;;;;;N;;;;10442;
+1041B;DESERET CAPITAL LETTER ETH;Lu;0;L;;;;;N;;;;10443;
+1041C;DESERET CAPITAL LETTER THEE;Lu;0;L;;;;;N;;;;10444;
+1041D;DESERET CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;10445;
+1041E;DESERET CAPITAL LETTER ZEE;Lu;0;L;;;;;N;;;;10446;
+1041F;DESERET CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;10447;
+10420;DESERET CAPITAL LETTER ZHEE;Lu;0;L;;;;;N;;;;10448;
+10421;DESERET CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;10449;
+10422;DESERET CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;1044A;
+10423;DESERET CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;1044B;
+10424;DESERET CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;1044C;
+10425;DESERET CAPITAL LETTER ENG;Lu;0;L;;;;;N;;;;1044D;
+10426;DESERET CAPITAL LETTER OI;Lu;0;L;;;;;N;;;;1044E;
+10427;DESERET CAPITAL LETTER EW;Lu;0;L;;;;;N;;;;1044F;
+10428;DESERET SMALL LETTER LONG I;Ll;0;L;;;;;N;;;10400;;10400
+10429;DESERET SMALL LETTER LONG E;Ll;0;L;;;;;N;;;10401;;10401
+1042A;DESERET SMALL LETTER LONG A;Ll;0;L;;;;;N;;;10402;;10402
+1042B;DESERET SMALL LETTER LONG AH;Ll;0;L;;;;;N;;;10403;;10403
+1042C;DESERET SMALL LETTER LONG O;Ll;0;L;;;;;N;;;10404;;10404
+1042D;DESERET SMALL LETTER LONG OO;Ll;0;L;;;;;N;;;10405;;10405
+1042E;DESERET SMALL LETTER SHORT I;Ll;0;L;;;;;N;;;10406;;10406
+1042F;DESERET SMALL LETTER SHORT E;Ll;0;L;;;;;N;;;10407;;10407
+10430;DESERET SMALL LETTER SHORT A;Ll;0;L;;;;;N;;;10408;;10408
+10431;DESERET SMALL LETTER SHORT AH;Ll;0;L;;;;;N;;;10409;;10409
+10432;DESERET SMALL LETTER SHORT O;Ll;0;L;;;;;N;;;1040A;;1040A
+10433;DESERET SMALL LETTER SHORT OO;Ll;0;L;;;;;N;;;1040B;;1040B
+10434;DESERET SMALL LETTER AY;Ll;0;L;;;;;N;;;1040C;;1040C
+10435;DESERET SMALL LETTER OW;Ll;0;L;;;;;N;;;1040D;;1040D
+10436;DESERET SMALL LETTER WU;Ll;0;L;;;;;N;;;1040E;;1040E
+10437;DESERET SMALL LETTER YEE;Ll;0;L;;;;;N;;;1040F;;1040F
+10438;DESERET SMALL LETTER H;Ll;0;L;;;;;N;;;10410;;10410
+10439;DESERET SMALL LETTER PEE;Ll;0;L;;;;;N;;;10411;;10411
+1043A;DESERET SMALL LETTER BEE;Ll;0;L;;;;;N;;;10412;;10412
+1043B;DESERET SMALL LETTER TEE;Ll;0;L;;;;;N;;;10413;;10413
+1043C;DESERET SMALL LETTER DEE;Ll;0;L;;;;;N;;;10414;;10414
+1043D;DESERET SMALL LETTER CHEE;Ll;0;L;;;;;N;;;10415;;10415
+1043E;DESERET SMALL LETTER JEE;Ll;0;L;;;;;N;;;10416;;10416
+1043F;DESERET SMALL LETTER KAY;Ll;0;L;;;;;N;;;10417;;10417
+10440;DESERET SMALL LETTER GAY;Ll;0;L;;;;;N;;;10418;;10418
+10441;DESERET SMALL LETTER EF;Ll;0;L;;;;;N;;;10419;;10419
+10442;DESERET SMALL LETTER VEE;Ll;0;L;;;;;N;;;1041A;;1041A
+10443;DESERET SMALL LETTER ETH;Ll;0;L;;;;;N;;;1041B;;1041B
+10444;DESERET SMALL LETTER THEE;Ll;0;L;;;;;N;;;1041C;;1041C
+10445;DESERET SMALL LETTER ES;Ll;0;L;;;;;N;;;1041D;;1041D
+10446;DESERET SMALL LETTER ZEE;Ll;0;L;;;;;N;;;1041E;;1041E
+10447;DESERET SMALL LETTER ESH;Ll;0;L;;;;;N;;;1041F;;1041F
+10448;DESERET SMALL LETTER ZHEE;Ll;0;L;;;;;N;;;10420;;10420
+10449;DESERET SMALL LETTER ER;Ll;0;L;;;;;N;;;10421;;10421
+1044A;DESERET SMALL LETTER EL;Ll;0;L;;;;;N;;;10422;;10422
+1044B;DESERET SMALL LETTER EM;Ll;0;L;;;;;N;;;10423;;10423
+1044C;DESERET SMALL LETTER EN;Ll;0;L;;;;;N;;;10424;;10424
+1044D;DESERET SMALL LETTER ENG;Ll;0;L;;;;;N;;;10425;;10425
+1044E;DESERET SMALL LETTER OI;Ll;0;L;;;;;N;;;10426;;10426
+1044F;DESERET SMALL LETTER EW;Ll;0;L;;;;;N;;;10427;;10427
+10450;SHAVIAN LETTER PEEP;Lo;0;L;;;;;N;;;;;
+10451;SHAVIAN LETTER TOT;Lo;0;L;;;;;N;;;;;
+10452;SHAVIAN LETTER KICK;Lo;0;L;;;;;N;;;;;
+10453;SHAVIAN LETTER FEE;Lo;0;L;;;;;N;;;;;
+10454;SHAVIAN LETTER THIGH;Lo;0;L;;;;;N;;;;;
+10455;SHAVIAN LETTER SO;Lo;0;L;;;;;N;;;;;
+10456;SHAVIAN LETTER SURE;Lo;0;L;;;;;N;;;;;
+10457;SHAVIAN LETTER CHURCH;Lo;0;L;;;;;N;;;;;
+10458;SHAVIAN LETTER YEA;Lo;0;L;;;;;N;;;;;
+10459;SHAVIAN LETTER HUNG;Lo;0;L;;;;;N;;;;;
+1045A;SHAVIAN LETTER BIB;Lo;0;L;;;;;N;;;;;
+1045B;SHAVIAN LETTER DEAD;Lo;0;L;;;;;N;;;;;
+1045C;SHAVIAN LETTER GAG;Lo;0;L;;;;;N;;;;;
+1045D;SHAVIAN LETTER VOW;Lo;0;L;;;;;N;;;;;
+1045E;SHAVIAN LETTER THEY;Lo;0;L;;;;;N;;;;;
+1045F;SHAVIAN LETTER ZOO;Lo;0;L;;;;;N;;;;;
+10460;SHAVIAN LETTER MEASURE;Lo;0;L;;;;;N;;;;;
+10461;SHAVIAN LETTER JUDGE;Lo;0;L;;;;;N;;;;;
+10462;SHAVIAN LETTER WOE;Lo;0;L;;;;;N;;;;;
+10463;SHAVIAN LETTER HA-HA;Lo;0;L;;;;;N;;;;;
+10464;SHAVIAN LETTER LOLL;Lo;0;L;;;;;N;;;;;
+10465;SHAVIAN LETTER MIME;Lo;0;L;;;;;N;;;;;
+10466;SHAVIAN LETTER IF;Lo;0;L;;;;;N;;;;;
+10467;SHAVIAN LETTER EGG;Lo;0;L;;;;;N;;;;;
+10468;SHAVIAN LETTER ASH;Lo;0;L;;;;;N;;;;;
+10469;SHAVIAN LETTER ADO;Lo;0;L;;;;;N;;;;;
+1046A;SHAVIAN LETTER ON;Lo;0;L;;;;;N;;;;;
+1046B;SHAVIAN LETTER WOOL;Lo;0;L;;;;;N;;;;;
+1046C;SHAVIAN LETTER OUT;Lo;0;L;;;;;N;;;;;
+1046D;SHAVIAN LETTER AH;Lo;0;L;;;;;N;;;;;
+1046E;SHAVIAN LETTER ROAR;Lo;0;L;;;;;N;;;;;
+1046F;SHAVIAN LETTER NUN;Lo;0;L;;;;;N;;;;;
+10470;SHAVIAN LETTER EAT;Lo;0;L;;;;;N;;;;;
+10471;SHAVIAN LETTER AGE;Lo;0;L;;;;;N;;;;;
+10472;SHAVIAN LETTER ICE;Lo;0;L;;;;;N;;;;;
+10473;SHAVIAN LETTER UP;Lo;0;L;;;;;N;;;;;
+10474;SHAVIAN LETTER OAK;Lo;0;L;;;;;N;;;;;
+10475;SHAVIAN LETTER OOZE;Lo;0;L;;;;;N;;;;;
+10476;SHAVIAN LETTER OIL;Lo;0;L;;;;;N;;;;;
+10477;SHAVIAN LETTER AWE;Lo;0;L;;;;;N;;;;;
+10478;SHAVIAN LETTER ARE;Lo;0;L;;;;;N;;;;;
+10479;SHAVIAN LETTER OR;Lo;0;L;;;;;N;;;;;
+1047A;SHAVIAN LETTER AIR;Lo;0;L;;;;;N;;;;;
+1047B;SHAVIAN LETTER ERR;Lo;0;L;;;;;N;;;;;
+1047C;SHAVIAN LETTER ARRAY;Lo;0;L;;;;;N;;;;;
+1047D;SHAVIAN LETTER EAR;Lo;0;L;;;;;N;;;;;
+1047E;SHAVIAN LETTER IAN;Lo;0;L;;;;;N;;;;;
+1047F;SHAVIAN LETTER YEW;Lo;0;L;;;;;N;;;;;
+10480;OSMANYA LETTER ALEF;Lo;0;L;;;;;N;;;;;
+10481;OSMANYA LETTER BA;Lo;0;L;;;;;N;;;;;
+10482;OSMANYA LETTER TA;Lo;0;L;;;;;N;;;;;
+10483;OSMANYA LETTER JA;Lo;0;L;;;;;N;;;;;
+10484;OSMANYA LETTER XA;Lo;0;L;;;;;N;;;;;
+10485;OSMANYA LETTER KHA;Lo;0;L;;;;;N;;;;;
+10486;OSMANYA LETTER DEEL;Lo;0;L;;;;;N;;;;;
+10487;OSMANYA LETTER RA;Lo;0;L;;;;;N;;;;;
+10488;OSMANYA LETTER SA;Lo;0;L;;;;;N;;;;;
+10489;OSMANYA LETTER SHIIN;Lo;0;L;;;;;N;;;;;
+1048A;OSMANYA LETTER DHA;Lo;0;L;;;;;N;;;;;
+1048B;OSMANYA LETTER CAYN;Lo;0;L;;;;;N;;;;;
+1048C;OSMANYA LETTER GA;Lo;0;L;;;;;N;;;;;
+1048D;OSMANYA LETTER FA;Lo;0;L;;;;;N;;;;;
+1048E;OSMANYA LETTER QAAF;Lo;0;L;;;;;N;;;;;
+1048F;OSMANYA LETTER KAAF;Lo;0;L;;;;;N;;;;;
+10490;OSMANYA LETTER LAAN;Lo;0;L;;;;;N;;;;;
+10491;OSMANYA LETTER MIIN;Lo;0;L;;;;;N;;;;;
+10492;OSMANYA LETTER NUUN;Lo;0;L;;;;;N;;;;;
+10493;OSMANYA LETTER WAW;Lo;0;L;;;;;N;;;;;
+10494;OSMANYA LETTER HA;Lo;0;L;;;;;N;;;;;
+10495;OSMANYA LETTER YA;Lo;0;L;;;;;N;;;;;
+10496;OSMANYA LETTER A;Lo;0;L;;;;;N;;;;;
+10497;OSMANYA LETTER E;Lo;0;L;;;;;N;;;;;
+10498;OSMANYA LETTER I;Lo;0;L;;;;;N;;;;;
+10499;OSMANYA LETTER O;Lo;0;L;;;;;N;;;;;
+1049A;OSMANYA LETTER U;Lo;0;L;;;;;N;;;;;
+1049B;OSMANYA LETTER AA;Lo;0;L;;;;;N;;;;;
+1049C;OSMANYA LETTER EE;Lo;0;L;;;;;N;;;;;
+1049D;OSMANYA LETTER OO;Lo;0;L;;;;;N;;;;;
+104A0;OSMANYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+104A1;OSMANYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+104A2;OSMANYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+104A3;OSMANYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+104A4;OSMANYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+104A5;OSMANYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+104A6;OSMANYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+104A7;OSMANYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+104A8;OSMANYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+104A9;OSMANYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+10800;CYPRIOT SYLLABLE A;Lo;0;R;;;;;N;;;;;
+10801;CYPRIOT SYLLABLE E;Lo;0;R;;;;;N;;;;;
+10802;CYPRIOT SYLLABLE I;Lo;0;R;;;;;N;;;;;
+10803;CYPRIOT SYLLABLE O;Lo;0;R;;;;;N;;;;;
+10804;CYPRIOT SYLLABLE U;Lo;0;R;;;;;N;;;;;
+10805;CYPRIOT SYLLABLE JA;Lo;0;R;;;;;N;;;;;
+10808;CYPRIOT SYLLABLE JO;Lo;0;R;;;;;N;;;;;
+1080A;CYPRIOT SYLLABLE KA;Lo;0;R;;;;;N;;;;;
+1080B;CYPRIOT SYLLABLE KE;Lo;0;R;;;;;N;;;;;
+1080C;CYPRIOT SYLLABLE KI;Lo;0;R;;;;;N;;;;;
+1080D;CYPRIOT SYLLABLE KO;Lo;0;R;;;;;N;;;;;
+1080E;CYPRIOT SYLLABLE KU;Lo;0;R;;;;;N;;;;;
+1080F;CYPRIOT SYLLABLE LA;Lo;0;R;;;;;N;;;;;
+10810;CYPRIOT SYLLABLE LE;Lo;0;R;;;;;N;;;;;
+10811;CYPRIOT SYLLABLE LI;Lo;0;R;;;;;N;;;;;
+10812;CYPRIOT SYLLABLE LO;Lo;0;R;;;;;N;;;;;
+10813;CYPRIOT SYLLABLE LU;Lo;0;R;;;;;N;;;;;
+10814;CYPRIOT SYLLABLE MA;Lo;0;R;;;;;N;;;;;
+10815;CYPRIOT SYLLABLE ME;Lo;0;R;;;;;N;;;;;
+10816;CYPRIOT SYLLABLE MI;Lo;0;R;;;;;N;;;;;
+10817;CYPRIOT SYLLABLE MO;Lo;0;R;;;;;N;;;;;
+10818;CYPRIOT SYLLABLE MU;Lo;0;R;;;;;N;;;;;
+10819;CYPRIOT SYLLABLE NA;Lo;0;R;;;;;N;;;;;
+1081A;CYPRIOT SYLLABLE NE;Lo;0;R;;;;;N;;;;;
+1081B;CYPRIOT SYLLABLE NI;Lo;0;R;;;;;N;;;;;
+1081C;CYPRIOT SYLLABLE NO;Lo;0;R;;;;;N;;;;;
+1081D;CYPRIOT SYLLABLE NU;Lo;0;R;;;;;N;;;;;
+1081E;CYPRIOT SYLLABLE PA;Lo;0;R;;;;;N;;;;;
+1081F;CYPRIOT SYLLABLE PE;Lo;0;R;;;;;N;;;;;
+10820;CYPRIOT SYLLABLE PI;Lo;0;R;;;;;N;;;;;
+10821;CYPRIOT SYLLABLE PO;Lo;0;R;;;;;N;;;;;
+10822;CYPRIOT SYLLABLE PU;Lo;0;R;;;;;N;;;;;
+10823;CYPRIOT SYLLABLE RA;Lo;0;R;;;;;N;;;;;
+10824;CYPRIOT SYLLABLE RE;Lo;0;R;;;;;N;;;;;
+10825;CYPRIOT SYLLABLE RI;Lo;0;R;;;;;N;;;;;
+10826;CYPRIOT SYLLABLE RO;Lo;0;R;;;;;N;;;;;
+10827;CYPRIOT SYLLABLE RU;Lo;0;R;;;;;N;;;;;
+10828;CYPRIOT SYLLABLE SA;Lo;0;R;;;;;N;;;;;
+10829;CYPRIOT SYLLABLE SE;Lo;0;R;;;;;N;;;;;
+1082A;CYPRIOT SYLLABLE SI;Lo;0;R;;;;;N;;;;;
+1082B;CYPRIOT SYLLABLE SO;Lo;0;R;;;;;N;;;;;
+1082C;CYPRIOT SYLLABLE SU;Lo;0;R;;;;;N;;;;;
+1082D;CYPRIOT SYLLABLE TA;Lo;0;R;;;;;N;;;;;
+1082E;CYPRIOT SYLLABLE TE;Lo;0;R;;;;;N;;;;;
+1082F;CYPRIOT SYLLABLE TI;Lo;0;R;;;;;N;;;;;
+10830;CYPRIOT SYLLABLE TO;Lo;0;R;;;;;N;;;;;
+10831;CYPRIOT SYLLABLE TU;Lo;0;R;;;;;N;;;;;
+10832;CYPRIOT SYLLABLE WA;Lo;0;R;;;;;N;;;;;
+10833;CYPRIOT SYLLABLE WE;Lo;0;R;;;;;N;;;;;
+10834;CYPRIOT SYLLABLE WI;Lo;0;R;;;;;N;;;;;
+10835;CYPRIOT SYLLABLE WO;Lo;0;R;;;;;N;;;;;
+10837;CYPRIOT SYLLABLE XA;Lo;0;R;;;;;N;;;;;
+10838;CYPRIOT SYLLABLE XE;Lo;0;R;;;;;N;;;;;
+1083C;CYPRIOT SYLLABLE ZA;Lo;0;R;;;;;N;;;;;
+1083F;CYPRIOT SYLLABLE ZO;Lo;0;R;;;;;N;;;;;
+10900;PHOENICIAN LETTER ALF;Lo;0;R;;;;;N;;;;;
+10901;PHOENICIAN LETTER BET;Lo;0;R;;;;;N;;;;;
+10902;PHOENICIAN LETTER GAML;Lo;0;R;;;;;N;;;;;
+10903;PHOENICIAN LETTER DELT;Lo;0;R;;;;;N;;;;;
+10904;PHOENICIAN LETTER HE;Lo;0;R;;;;;N;;;;;
+10905;PHOENICIAN LETTER WAU;Lo;0;R;;;;;N;;;;;
+10906;PHOENICIAN LETTER ZAI;Lo;0;R;;;;;N;;;;;
+10907;PHOENICIAN LETTER HET;Lo;0;R;;;;;N;;;;;
+10908;PHOENICIAN LETTER TET;Lo;0;R;;;;;N;;;;;
+10909;PHOENICIAN LETTER YOD;Lo;0;R;;;;;N;;;;;
+1090A;PHOENICIAN LETTER KAF;Lo;0;R;;;;;N;;;;;
+1090B;PHOENICIAN LETTER LAMD;Lo;0;R;;;;;N;;;;;
+1090C;PHOENICIAN LETTER MEM;Lo;0;R;;;;;N;;;;;
+1090D;PHOENICIAN LETTER NUN;Lo;0;R;;;;;N;;;;;
+1090E;PHOENICIAN LETTER SEMK;Lo;0;R;;;;;N;;;;;
+1090F;PHOENICIAN LETTER AIN;Lo;0;R;;;;;N;;;;;
+10910;PHOENICIAN LETTER PE;Lo;0;R;;;;;N;;;;;
+10911;PHOENICIAN LETTER SADE;Lo;0;R;;;;;N;;;;;
+10912;PHOENICIAN LETTER QOF;Lo;0;R;;;;;N;;;;;
+10913;PHOENICIAN LETTER ROSH;Lo;0;R;;;;;N;;;;;
+10914;PHOENICIAN LETTER SHIN;Lo;0;R;;;;;N;;;;;
+10915;PHOENICIAN LETTER TAU;Lo;0;R;;;;;N;;;;;
+10916;PHOENICIAN NUMBER ONE;No;0;R;;;;1;N;;;;;
+10917;PHOENICIAN NUMBER TEN;No;0;R;;;;10;N;;;;;
+10918;PHOENICIAN NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10919;PHOENICIAN NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+1091F;PHOENICIAN WORD SEPARATOR;Po;0;ON;;;;;N;;;;;
+10A00;KHAROSHTHI LETTER A;Lo;0;R;;;;;N;;;;;
+10A01;KHAROSHTHI VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+10A02;KHAROSHTHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+10A03;KHAROSHTHI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+10A05;KHAROSHTHI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+10A06;KHAROSHTHI VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+10A0C;KHAROSHTHI VOWEL LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
+10A0D;KHAROSHTHI SIGN DOUBLE RING BELOW;Mn;220;NSM;;;;;N;;;;;
+10A0E;KHAROSHTHI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+10A0F;KHAROSHTHI SIGN VISARGA;Mn;230;NSM;;;;;N;;;;;
+10A10;KHAROSHTHI LETTER KA;Lo;0;R;;;;;N;;;;;
+10A11;KHAROSHTHI LETTER KHA;Lo;0;R;;;;;N;;;;;
+10A12;KHAROSHTHI LETTER GA;Lo;0;R;;;;;N;;;;;
+10A13;KHAROSHTHI LETTER GHA;Lo;0;R;;;;;N;;;;;
+10A15;KHAROSHTHI LETTER CA;Lo;0;R;;;;;N;;;;;
+10A16;KHAROSHTHI LETTER CHA;Lo;0;R;;;;;N;;;;;
+10A17;KHAROSHTHI LETTER JA;Lo;0;R;;;;;N;;;;;
+10A19;KHAROSHTHI LETTER NYA;Lo;0;R;;;;;N;;;;;
+10A1A;KHAROSHTHI LETTER TTA;Lo;0;R;;;;;N;;;;;
+10A1B;KHAROSHTHI LETTER TTHA;Lo;0;R;;;;;N;;;;;
+10A1C;KHAROSHTHI LETTER DDA;Lo;0;R;;;;;N;;;;;
+10A1D;KHAROSHTHI LETTER DDHA;Lo;0;R;;;;;N;;;;;
+10A1E;KHAROSHTHI LETTER NNA;Lo;0;R;;;;;N;;;;;
+10A1F;KHAROSHTHI LETTER TA;Lo;0;R;;;;;N;;;;;
+10A20;KHAROSHTHI LETTER THA;Lo;0;R;;;;;N;;;;;
+10A21;KHAROSHTHI LETTER DA;Lo;0;R;;;;;N;;;;;
+10A22;KHAROSHTHI LETTER DHA;Lo;0;R;;;;;N;;;;;
+10A23;KHAROSHTHI LETTER NA;Lo;0;R;;;;;N;;;;;
+10A24;KHAROSHTHI LETTER PA;Lo;0;R;;;;;N;;;;;
+10A25;KHAROSHTHI LETTER PHA;Lo;0;R;;;;;N;;;;;
+10A26;KHAROSHTHI LETTER BA;Lo;0;R;;;;;N;;;;;
+10A27;KHAROSHTHI LETTER BHA;Lo;0;R;;;;;N;;;;;
+10A28;KHAROSHTHI LETTER MA;Lo;0;R;;;;;N;;;;;
+10A29;KHAROSHTHI LETTER YA;Lo;0;R;;;;;N;;;;;
+10A2A;KHAROSHTHI LETTER RA;Lo;0;R;;;;;N;;;;;
+10A2B;KHAROSHTHI LETTER LA;Lo;0;R;;;;;N;;;;;
+10A2C;KHAROSHTHI LETTER VA;Lo;0;R;;;;;N;;;;;
+10A2D;KHAROSHTHI LETTER SHA;Lo;0;R;;;;;N;;;;;
+10A2E;KHAROSHTHI LETTER SSA;Lo;0;R;;;;;N;;;;;
+10A2F;KHAROSHTHI LETTER SA;Lo;0;R;;;;;N;;;;;
+10A30;KHAROSHTHI LETTER ZA;Lo;0;R;;;;;N;;;;;
+10A31;KHAROSHTHI LETTER HA;Lo;0;R;;;;;N;;;;;
+10A32;KHAROSHTHI LETTER KKA;Lo;0;R;;;;;N;;;;;
+10A33;KHAROSHTHI LETTER TTTHA;Lo;0;R;;;;;N;;;;;
+10A38;KHAROSHTHI SIGN BAR ABOVE;Mn;230;NSM;;;;;N;;;;;
+10A39;KHAROSHTHI SIGN CAUDA;Mn;1;NSM;;;;;N;;;;;
+10A3A;KHAROSHTHI SIGN DOT BELOW;Mn;220;NSM;;;;;N;;;;;
+10A3F;KHAROSHTHI VIRAMA;Mn;9;NSM;;;;;N;;;;;
+10A40;KHAROSHTHI DIGIT ONE;No;0;R;;;1;1;N;;;;;
+10A41;KHAROSHTHI DIGIT TWO;No;0;R;;;2;2;N;;;;;
+10A42;KHAROSHTHI DIGIT THREE;No;0;R;;;3;3;N;;;;;
+10A43;KHAROSHTHI DIGIT FOUR;No;0;R;;;4;4;N;;;;;
+10A44;KHAROSHTHI NUMBER TEN;No;0;R;;;;10;N;;;;;
+10A45;KHAROSHTHI NUMBER TWENTY;No;0;R;;;;20;N;;;;;
+10A46;KHAROSHTHI NUMBER ONE HUNDRED;No;0;R;;;;100;N;;;;;
+10A47;KHAROSHTHI NUMBER ONE THOUSAND;No;0;R;;;;1000;N;;;;;
+10A50;KHAROSHTHI PUNCTUATION DOT;Po;0;R;;;;;N;;;;;
+10A51;KHAROSHTHI PUNCTUATION SMALL CIRCLE;Po;0;R;;;;;N;;;;;
+10A52;KHAROSHTHI PUNCTUATION CIRCLE;Po;0;R;;;;;N;;;;;
+10A53;KHAROSHTHI PUNCTUATION CRESCENT BAR;Po;0;R;;;;;N;;;;;
+10A54;KHAROSHTHI PUNCTUATION MANGALAM;Po;0;R;;;;;N;;;;;
+10A55;KHAROSHTHI PUNCTUATION LOTUS;Po;0;R;;;;;N;;;;;
+10A56;KHAROSHTHI PUNCTUATION DANDA;Po;0;R;;;;;N;;;;;
+10A57;KHAROSHTHI PUNCTUATION DOUBLE DANDA;Po;0;R;;;;;N;;;;;
+10A58;KHAROSHTHI PUNCTUATION LINES;Po;0;R;;;;;N;;;;;
+12000;CUNEIFORM SIGN A;Lo;0;L;;;;;N;;;;;
+12001;CUNEIFORM SIGN A TIMES A;Lo;0;L;;;;;N;;;;;
+12002;CUNEIFORM SIGN A TIMES BAD;Lo;0;L;;;;;N;;;;;
+12003;CUNEIFORM SIGN A TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12004;CUNEIFORM SIGN A TIMES HA;Lo;0;L;;;;;N;;;;;
+12005;CUNEIFORM SIGN A TIMES IGI;Lo;0;L;;;;;N;;;;;
+12006;CUNEIFORM SIGN A TIMES LAGAR GUNU;Lo;0;L;;;;;N;;;;;
+12007;CUNEIFORM SIGN A TIMES MUSH;Lo;0;L;;;;;N;;;;;
+12008;CUNEIFORM SIGN A TIMES SAG;Lo;0;L;;;;;N;;;;;
+12009;CUNEIFORM SIGN A2;Lo;0;L;;;;;N;;;;;
+1200A;CUNEIFORM SIGN AB;Lo;0;L;;;;;N;;;;;
+1200B;CUNEIFORM SIGN AB TIMES ASH2;Lo;0;L;;;;;N;;;;;
+1200C;CUNEIFORM SIGN AB TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;;
+1200D;CUNEIFORM SIGN AB TIMES GAL;Lo;0;L;;;;;N;;;;;
+1200E;CUNEIFORM SIGN AB TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1200F;CUNEIFORM SIGN AB TIMES HA;Lo;0;L;;;;;N;;;;;
+12010;CUNEIFORM SIGN AB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+12011;CUNEIFORM SIGN AB TIMES IMIN;Lo;0;L;;;;;N;;;;;
+12012;CUNEIFORM SIGN AB TIMES LAGAB;Lo;0;L;;;;;N;;;;;
+12013;CUNEIFORM SIGN AB TIMES SHESH;Lo;0;L;;;;;N;;;;;
+12014;CUNEIFORM SIGN AB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;
+12015;CUNEIFORM SIGN AB GUNU;Lo;0;L;;;;;N;;;;;
+12016;CUNEIFORM SIGN AB2;Lo;0;L;;;;;N;;;;;
+12017;CUNEIFORM SIGN AB2 TIMES BALAG;Lo;0;L;;;;;N;;;;;
+12018;CUNEIFORM SIGN AB2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12019;CUNEIFORM SIGN AB2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
+1201A;CUNEIFORM SIGN AB2 TIMES SHA3;Lo;0;L;;;;;N;;;;;
+1201B;CUNEIFORM SIGN AB2 TIMES TAK4;Lo;0;L;;;;;N;;;;;
+1201C;CUNEIFORM SIGN AD;Lo;0;L;;;;;N;;;;;
+1201D;CUNEIFORM SIGN AK;Lo;0;L;;;;;N;;;;;
+1201E;CUNEIFORM SIGN AK TIMES ERIN2;Lo;0;L;;;;;N;;;;;
+1201F;CUNEIFORM SIGN AK TIMES SHITA PLUS GISH;Lo;0;L;;;;;N;;;;;
+12020;CUNEIFORM SIGN AL;Lo;0;L;;;;;N;;;;;
+12021;CUNEIFORM SIGN AL TIMES AL;Lo;0;L;;;;;N;;;;;
+12022;CUNEIFORM SIGN AL TIMES DIM2;Lo;0;L;;;;;N;;;;;
+12023;CUNEIFORM SIGN AL TIMES GISH;Lo;0;L;;;;;N;;;;;
+12024;CUNEIFORM SIGN AL TIMES HA;Lo;0;L;;;;;N;;;;;
+12025;CUNEIFORM SIGN AL TIMES KAD3;Lo;0;L;;;;;N;;;;;
+12026;CUNEIFORM SIGN AL TIMES KI;Lo;0;L;;;;;N;;;;;
+12027;CUNEIFORM SIGN AL TIMES SHE;Lo;0;L;;;;;N;;;;;
+12028;CUNEIFORM SIGN AL TIMES USH;Lo;0;L;;;;;N;;;;;
+12029;CUNEIFORM SIGN ALAN;Lo;0;L;;;;;N;;;;;
+1202A;CUNEIFORM SIGN ALEPH;Lo;0;L;;;;;N;;;;;
+1202B;CUNEIFORM SIGN AMAR;Lo;0;L;;;;;N;;;;;
+1202C;CUNEIFORM SIGN AMAR TIMES SHE;Lo;0;L;;;;;N;;;;;
+1202D;CUNEIFORM SIGN AN;Lo;0;L;;;;;N;;;;;
+1202E;CUNEIFORM SIGN AN OVER AN;Lo;0;L;;;;;N;;;;;
+1202F;CUNEIFORM SIGN AN THREE TIMES;Lo;0;L;;;;;N;;;;;
+12030;CUNEIFORM SIGN AN PLUS NAGA OPPOSING AN PLUS NAGA;Lo;0;L;;;;;N;;;;;
+12031;CUNEIFORM SIGN AN PLUS NAGA SQUARED;Lo;0;L;;;;;N;;;;;
+12032;CUNEIFORM SIGN ANSHE;Lo;0;L;;;;;N;;;;;
+12033;CUNEIFORM SIGN APIN;Lo;0;L;;;;;N;;;;;
+12034;CUNEIFORM SIGN ARAD;Lo;0;L;;;;;N;;;;;
+12035;CUNEIFORM SIGN ARAD TIMES KUR;Lo;0;L;;;;;N;;;;;
+12036;CUNEIFORM SIGN ARKAB;Lo;0;L;;;;;N;;;;;
+12037;CUNEIFORM SIGN ASAL2;Lo;0;L;;;;;N;;;;;
+12038;CUNEIFORM SIGN ASH;Lo;0;L;;;;;N;;;;;
+12039;CUNEIFORM SIGN ASH ZIDA TENU;Lo;0;L;;;;;N;;;;;
+1203A;CUNEIFORM SIGN ASH KABA TENU;Lo;0;L;;;;;N;;;;;
+1203B;CUNEIFORM SIGN ASH OVER ASH TUG2 OVER TUG2 TUG2 OVER TUG2 PAP;Lo;0;L;;;;;N;;;;;
+1203C;CUNEIFORM SIGN ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;;
+1203D;CUNEIFORM SIGN ASH OVER ASH OVER ASH CROSSING ASH OVER ASH OVER ASH;Lo;0;L;;;;;N;;;;;
+1203E;CUNEIFORM SIGN ASH2;Lo;0;L;;;;;N;;;;;
+1203F;CUNEIFORM SIGN ASHGAB;Lo;0;L;;;;;N;;;;;
+12040;CUNEIFORM SIGN BA;Lo;0;L;;;;;N;;;;;
+12041;CUNEIFORM SIGN BAD;Lo;0;L;;;;;N;;;;;
+12042;CUNEIFORM SIGN BAG3;Lo;0;L;;;;;N;;;;;
+12043;CUNEIFORM SIGN BAHAR2;Lo;0;L;;;;;N;;;;;
+12044;CUNEIFORM SIGN BAL;Lo;0;L;;;;;N;;;;;
+12045;CUNEIFORM SIGN BAL OVER BAL;Lo;0;L;;;;;N;;;;;
+12046;CUNEIFORM SIGN BALAG;Lo;0;L;;;;;N;;;;;
+12047;CUNEIFORM SIGN BAR;Lo;0;L;;;;;N;;;;;
+12048;CUNEIFORM SIGN BARA2;Lo;0;L;;;;;N;;;;;
+12049;CUNEIFORM SIGN BI;Lo;0;L;;;;;N;;;;;
+1204A;CUNEIFORM SIGN BI TIMES A;Lo;0;L;;;;;N;;;;;
+1204B;CUNEIFORM SIGN BI TIMES GAR;Lo;0;L;;;;;N;;;;;
+1204C;CUNEIFORM SIGN BI TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+1204D;CUNEIFORM SIGN BU;Lo;0;L;;;;;N;;;;;
+1204E;CUNEIFORM SIGN BU OVER BU AB;Lo;0;L;;;;;N;;;;;
+1204F;CUNEIFORM SIGN BU OVER BU UN;Lo;0;L;;;;;N;;;;;
+12050;CUNEIFORM SIGN BU CROSSING BU;Lo;0;L;;;;;N;;;;;
+12051;CUNEIFORM SIGN BULUG;Lo;0;L;;;;;N;;;;;
+12052;CUNEIFORM SIGN BULUG OVER BULUG;Lo;0;L;;;;;N;;;;;
+12053;CUNEIFORM SIGN BUR;Lo;0;L;;;;;N;;;;;
+12054;CUNEIFORM SIGN BUR2;Lo;0;L;;;;;N;;;;;
+12055;CUNEIFORM SIGN DA;Lo;0;L;;;;;N;;;;;
+12056;CUNEIFORM SIGN DAG;Lo;0;L;;;;;N;;;;;
+12057;CUNEIFORM SIGN DAG KISIM5 TIMES A PLUS MASH;Lo;0;L;;;;;N;;;;;
+12058;CUNEIFORM SIGN DAG KISIM5 TIMES AMAR;Lo;0;L;;;;;N;;;;;
+12059;CUNEIFORM SIGN DAG KISIM5 TIMES BALAG;Lo;0;L;;;;;N;;;;;
+1205A;CUNEIFORM SIGN DAG KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;;
+1205B;CUNEIFORM SIGN DAG KISIM5 TIMES GA;Lo;0;L;;;;;N;;;;;
+1205C;CUNEIFORM SIGN DAG KISIM5 TIMES GA PLUS MASH;Lo;0;L;;;;;N;;;;;
+1205D;CUNEIFORM SIGN DAG KISIM5 TIMES GI;Lo;0;L;;;;;N;;;;;
+1205E;CUNEIFORM SIGN DAG KISIM5 TIMES GIR2;Lo;0;L;;;;;N;;;;;
+1205F;CUNEIFORM SIGN DAG KISIM5 TIMES GUD;Lo;0;L;;;;;N;;;;;
+12060;CUNEIFORM SIGN DAG KISIM5 TIMES HA;Lo;0;L;;;;;N;;;;;
+12061;CUNEIFORM SIGN DAG KISIM5 TIMES IR;Lo;0;L;;;;;N;;;;;
+12062;CUNEIFORM SIGN DAG KISIM5 TIMES IR PLUS LU;Lo;0;L;;;;;N;;;;;
+12063;CUNEIFORM SIGN DAG KISIM5 TIMES KAK;Lo;0;L;;;;;N;;;;;
+12064;CUNEIFORM SIGN DAG KISIM5 TIMES LA;Lo;0;L;;;;;N;;;;;
+12065;CUNEIFORM SIGN DAG KISIM5 TIMES LU;Lo;0;L;;;;;N;;;;;
+12066;CUNEIFORM SIGN DAG KISIM5 TIMES LU PLUS MASH2;Lo;0;L;;;;;N;;;;;
+12067;CUNEIFORM SIGN DAG KISIM5 TIMES LUM;Lo;0;L;;;;;N;;;;;
+12068;CUNEIFORM SIGN DAG KISIM5 TIMES NE;Lo;0;L;;;;;N;;;;;
+12069;CUNEIFORM SIGN DAG KISIM5 TIMES PAP PLUS PAP;Lo;0;L;;;;;N;;;;;
+1206A;CUNEIFORM SIGN DAG KISIM5 TIMES SI;Lo;0;L;;;;;N;;;;;
+1206B;CUNEIFORM SIGN DAG KISIM5 TIMES TAK4;Lo;0;L;;;;;N;;;;;
+1206C;CUNEIFORM SIGN DAG KISIM5 TIMES U2 PLUS GIR2;Lo;0;L;;;;;N;;;;;
+1206D;CUNEIFORM SIGN DAG KISIM5 TIMES USH;Lo;0;L;;;;;N;;;;;
+1206E;CUNEIFORM SIGN DAM;Lo;0;L;;;;;N;;;;;
+1206F;CUNEIFORM SIGN DAR;Lo;0;L;;;;;N;;;;;
+12070;CUNEIFORM SIGN DARA3;Lo;0;L;;;;;N;;;;;
+12071;CUNEIFORM SIGN DARA4;Lo;0;L;;;;;N;;;;;
+12072;CUNEIFORM SIGN DI;Lo;0;L;;;;;N;;;;;
+12073;CUNEIFORM SIGN DIB;Lo;0;L;;;;;N;;;;;
+12074;CUNEIFORM SIGN DIM;Lo;0;L;;;;;N;;;;;
+12075;CUNEIFORM SIGN DIM TIMES SHE;Lo;0;L;;;;;N;;;;;
+12076;CUNEIFORM SIGN DIM2;Lo;0;L;;;;;N;;;;;
+12077;CUNEIFORM SIGN DIN;Lo;0;L;;;;;N;;;;;
+12078;CUNEIFORM SIGN DIN KASKAL U GUNU DISH;Lo;0;L;;;;;N;;;;;
+12079;CUNEIFORM SIGN DISH;Lo;0;L;;;;;N;;;;;
+1207A;CUNEIFORM SIGN DU;Lo;0;L;;;;;N;;;;;
+1207B;CUNEIFORM SIGN DU OVER DU;Lo;0;L;;;;;N;;;;;
+1207C;CUNEIFORM SIGN DU GUNU;Lo;0;L;;;;;N;;;;;
+1207D;CUNEIFORM SIGN DU SHESHIG;Lo;0;L;;;;;N;;;;;
+1207E;CUNEIFORM SIGN DUB;Lo;0;L;;;;;N;;;;;
+1207F;CUNEIFORM SIGN DUB TIMES ESH2;Lo;0;L;;;;;N;;;;;
+12080;CUNEIFORM SIGN DUB2;Lo;0;L;;;;;N;;;;;
+12081;CUNEIFORM SIGN DUG;Lo;0;L;;;;;N;;;;;
+12082;CUNEIFORM SIGN DUGUD;Lo;0;L;;;;;N;;;;;
+12083;CUNEIFORM SIGN DUH;Lo;0;L;;;;;N;;;;;
+12084;CUNEIFORM SIGN DUN;Lo;0;L;;;;;N;;;;;
+12085;CUNEIFORM SIGN DUN3;Lo;0;L;;;;;N;;;;;
+12086;CUNEIFORM SIGN DUN3 GUNU;Lo;0;L;;;;;N;;;;;
+12087;CUNEIFORM SIGN DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;;
+12088;CUNEIFORM SIGN DUN4;Lo;0;L;;;;;N;;;;;
+12089;CUNEIFORM SIGN DUR2;Lo;0;L;;;;;N;;;;;
+1208A;CUNEIFORM SIGN E;Lo;0;L;;;;;N;;;;;
+1208B;CUNEIFORM SIGN E TIMES PAP;Lo;0;L;;;;;N;;;;;
+1208C;CUNEIFORM SIGN E OVER E NUN OVER NUN;Lo;0;L;;;;;N;;;;;
+1208D;CUNEIFORM SIGN E2;Lo;0;L;;;;;N;;;;;
+1208E;CUNEIFORM SIGN E2 TIMES A PLUS HA PLUS DA;Lo;0;L;;;;;N;;;;;
+1208F;CUNEIFORM SIGN E2 TIMES GAR;Lo;0;L;;;;;N;;;;;
+12090;CUNEIFORM SIGN E2 TIMES MI;Lo;0;L;;;;;N;;;;;
+12091;CUNEIFORM SIGN E2 TIMES SAL;Lo;0;L;;;;;N;;;;;
+12092;CUNEIFORM SIGN E2 TIMES SHE;Lo;0;L;;;;;N;;;;;
+12093;CUNEIFORM SIGN E2 TIMES U;Lo;0;L;;;;;N;;;;;
+12094;CUNEIFORM SIGN EDIN;Lo;0;L;;;;;N;;;;;
+12095;CUNEIFORM SIGN EGIR;Lo;0;L;;;;;N;;;;;
+12096;CUNEIFORM SIGN EL;Lo;0;L;;;;;N;;;;;
+12097;CUNEIFORM SIGN EN;Lo;0;L;;;;;N;;;;;
+12098;CUNEIFORM SIGN EN TIMES GAN2;Lo;0;L;;;;;N;;;;;
+12099;CUNEIFORM SIGN EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1209A;CUNEIFORM SIGN EN TIMES ME;Lo;0;L;;;;;N;;;;;
+1209B;CUNEIFORM SIGN EN CROSSING EN;Lo;0;L;;;;;N;;;;;
+1209C;CUNEIFORM SIGN EN OPPOSING EN;Lo;0;L;;;;;N;;;;;
+1209D;CUNEIFORM SIGN EN SQUARED;Lo;0;L;;;;;N;;;;;
+1209E;CUNEIFORM SIGN EREN;Lo;0;L;;;;;N;;;;;
+1209F;CUNEIFORM SIGN ERIN2;Lo;0;L;;;;;N;;;;;
+120A0;CUNEIFORM SIGN ESH2;Lo;0;L;;;;;N;;;;;
+120A1;CUNEIFORM SIGN EZEN;Lo;0;L;;;;;N;;;;;
+120A2;CUNEIFORM SIGN EZEN TIMES A;Lo;0;L;;;;;N;;;;;
+120A3;CUNEIFORM SIGN EZEN TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;;
+120A4;CUNEIFORM SIGN EZEN TIMES A PLUS LAL TIMES LAL;Lo;0;L;;;;;N;;;;;
+120A5;CUNEIFORM SIGN EZEN TIMES AN;Lo;0;L;;;;;N;;;;;
+120A6;CUNEIFORM SIGN EZEN TIMES BAD;Lo;0;L;;;;;N;;;;;
+120A7;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU;Lo;0;L;;;;;N;;;;;
+120A8;CUNEIFORM SIGN EZEN TIMES DUN3 GUNU GUNU;Lo;0;L;;;;;N;;;;;
+120A9;CUNEIFORM SIGN EZEN TIMES HA;Lo;0;L;;;;;N;;;;;
+120AA;CUNEIFORM SIGN EZEN TIMES HA GUNU;Lo;0;L;;;;;N;;;;;
+120AB;CUNEIFORM SIGN EZEN TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+120AC;CUNEIFORM SIGN EZEN TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+120AD;CUNEIFORM SIGN EZEN TIMES KASKAL SQUARED;Lo;0;L;;;;;N;;;;;
+120AE;CUNEIFORM SIGN EZEN TIMES KU3;Lo;0;L;;;;;N;;;;;
+120AF;CUNEIFORM SIGN EZEN TIMES LA;Lo;0;L;;;;;N;;;;;
+120B0;CUNEIFORM SIGN EZEN TIMES LAL TIMES LAL;Lo;0;L;;;;;N;;;;;
+120B1;CUNEIFORM SIGN EZEN TIMES LI;Lo;0;L;;;;;N;;;;;
+120B2;CUNEIFORM SIGN EZEN TIMES LU;Lo;0;L;;;;;N;;;;;
+120B3;CUNEIFORM SIGN EZEN TIMES U2;Lo;0;L;;;;;N;;;;;
+120B4;CUNEIFORM SIGN EZEN TIMES UD;Lo;0;L;;;;;N;;;;;
+120B5;CUNEIFORM SIGN GA;Lo;0;L;;;;;N;;;;;
+120B6;CUNEIFORM SIGN GA GUNU;Lo;0;L;;;;;N;;;;;
+120B7;CUNEIFORM SIGN GA2;Lo;0;L;;;;;N;;;;;
+120B8;CUNEIFORM SIGN GA2 TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;;
+120B9;CUNEIFORM SIGN GA2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;;
+120BA;CUNEIFORM SIGN GA2 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;;
+120BB;CUNEIFORM SIGN GA2 TIMES AB2 TENU PLUS TAB;Lo;0;L;;;;;N;;;;;
+120BC;CUNEIFORM SIGN GA2 TIMES AN;Lo;0;L;;;;;N;;;;;
+120BD;CUNEIFORM SIGN GA2 TIMES ASH;Lo;0;L;;;;;N;;;;;
+120BE;CUNEIFORM SIGN GA2 TIMES ASH2 PLUS GAL;Lo;0;L;;;;;N;;;;;
+120BF;CUNEIFORM SIGN GA2 TIMES BAD;Lo;0;L;;;;;N;;;;;
+120C0;CUNEIFORM SIGN GA2 TIMES BAR PLUS RA;Lo;0;L;;;;;N;;;;;
+120C1;CUNEIFORM SIGN GA2 TIMES BUR;Lo;0;L;;;;;N;;;;;
+120C2;CUNEIFORM SIGN GA2 TIMES BUR PLUS RA;Lo;0;L;;;;;N;;;;;
+120C3;CUNEIFORM SIGN GA2 TIMES DA;Lo;0;L;;;;;N;;;;;
+120C4;CUNEIFORM SIGN GA2 TIMES DI;Lo;0;L;;;;;N;;;;;
+120C5;CUNEIFORM SIGN GA2 TIMES DIM TIMES SHE;Lo;0;L;;;;;N;;;;;
+120C6;CUNEIFORM SIGN GA2 TIMES DUB;Lo;0;L;;;;;N;;;;;
+120C7;CUNEIFORM SIGN GA2 TIMES EL;Lo;0;L;;;;;N;;;;;
+120C8;CUNEIFORM SIGN GA2 TIMES EL PLUS LA;Lo;0;L;;;;;N;;;;;
+120C9;CUNEIFORM SIGN GA2 TIMES EN;Lo;0;L;;;;;N;;;;;
+120CA;CUNEIFORM SIGN GA2 TIMES EN TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+120CB;CUNEIFORM SIGN GA2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+120CC;CUNEIFORM SIGN GA2 TIMES GAR;Lo;0;L;;;;;N;;;;;
+120CD;CUNEIFORM SIGN GA2 TIMES GI;Lo;0;L;;;;;N;;;;;
+120CE;CUNEIFORM SIGN GA2 TIMES GI4;Lo;0;L;;;;;N;;;;;
+120CF;CUNEIFORM SIGN GA2 TIMES GI4 PLUS A;Lo;0;L;;;;;N;;;;;
+120D0;CUNEIFORM SIGN GA2 TIMES GIR2 PLUS SU;Lo;0;L;;;;;N;;;;;
+120D1;CUNEIFORM SIGN GA2 TIMES HA PLUS LU PLUS ESH2;Lo;0;L;;;;;N;;;;;
+120D2;CUNEIFORM SIGN GA2 TIMES HAL;Lo;0;L;;;;;N;;;;;
+120D3;CUNEIFORM SIGN GA2 TIMES HAL PLUS LA;Lo;0;L;;;;;N;;;;;
+120D4;CUNEIFORM SIGN GA2 TIMES HI PLUS LI;Lo;0;L;;;;;N;;;;;
+120D5;CUNEIFORM SIGN GA2 TIMES HUB2;Lo;0;L;;;;;N;;;;;
+120D6;CUNEIFORM SIGN GA2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+120D7;CUNEIFORM SIGN GA2 TIMES ISH PLUS HU PLUS ASH;Lo;0;L;;;;;N;;;;;
+120D8;CUNEIFORM SIGN GA2 TIMES KAK;Lo;0;L;;;;;N;;;;;
+120D9;CUNEIFORM SIGN GA2 TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+120DA;CUNEIFORM SIGN GA2 TIMES KID;Lo;0;L;;;;;N;;;;;
+120DB;CUNEIFORM SIGN GA2 TIMES KID PLUS LAL;Lo;0;L;;;;;N;;;;;
+120DC;CUNEIFORM SIGN GA2 TIMES KU3 PLUS AN;Lo;0;L;;;;;N;;;;;
+120DD;CUNEIFORM SIGN GA2 TIMES LA;Lo;0;L;;;;;N;;;;;
+120DE;CUNEIFORM SIGN GA2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
+120DF;CUNEIFORM SIGN GA2 TIMES MI;Lo;0;L;;;;;N;;;;;
+120E0;CUNEIFORM SIGN GA2 TIMES NUN;Lo;0;L;;;;;N;;;;;
+120E1;CUNEIFORM SIGN GA2 TIMES NUN OVER NUN;Lo;0;L;;;;;N;;;;;
+120E2;CUNEIFORM SIGN GA2 TIMES PA;Lo;0;L;;;;;N;;;;;
+120E3;CUNEIFORM SIGN GA2 TIMES SAL;Lo;0;L;;;;;N;;;;;
+120E4;CUNEIFORM SIGN GA2 TIMES SAR;Lo;0;L;;;;;N;;;;;
+120E5;CUNEIFORM SIGN GA2 TIMES SHE;Lo;0;L;;;;;N;;;;;
+120E6;CUNEIFORM SIGN GA2 TIMES SHE PLUS TUR;Lo;0;L;;;;;N;;;;;
+120E7;CUNEIFORM SIGN GA2 TIMES SHID;Lo;0;L;;;;;N;;;;;
+120E8;CUNEIFORM SIGN GA2 TIMES SUM;Lo;0;L;;;;;N;;;;;
+120E9;CUNEIFORM SIGN GA2 TIMES TAK4;Lo;0;L;;;;;N;;;;;
+120EA;CUNEIFORM SIGN GA2 TIMES U;Lo;0;L;;;;;N;;;;;
+120EB;CUNEIFORM SIGN GA2 TIMES UD;Lo;0;L;;;;;N;;;;;
+120EC;CUNEIFORM SIGN GA2 TIMES UD PLUS DU;Lo;0;L;;;;;N;;;;;
+120ED;CUNEIFORM SIGN GA2 OVER GA2;Lo;0;L;;;;;N;;;;;
+120EE;CUNEIFORM SIGN GABA;Lo;0;L;;;;;N;;;;;
+120EF;CUNEIFORM SIGN GABA CROSSING GABA;Lo;0;L;;;;;N;;;;;
+120F0;CUNEIFORM SIGN GAD;Lo;0;L;;;;;N;;;;;
+120F1;CUNEIFORM SIGN GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+120F2;CUNEIFORM SIGN GAL;Lo;0;L;;;;;N;;;;;
+120F3;CUNEIFORM SIGN GAL GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+120F4;CUNEIFORM SIGN GALAM;Lo;0;L;;;;;N;;;;;
+120F5;CUNEIFORM SIGN GAM;Lo;0;L;;;;;N;;;;;
+120F6;CUNEIFORM SIGN GAN;Lo;0;L;;;;;N;;;;;
+120F7;CUNEIFORM SIGN GAN2;Lo;0;L;;;;;N;;;;;
+120F8;CUNEIFORM SIGN GAN2 TENU;Lo;0;L;;;;;N;;;;;
+120F9;CUNEIFORM SIGN GAN2 OVER GAN2;Lo;0;L;;;;;N;;;;;
+120FA;CUNEIFORM SIGN GAN2 CROSSING GAN2;Lo;0;L;;;;;N;;;;;
+120FB;CUNEIFORM SIGN GAR;Lo;0;L;;;;;N;;;;;
+120FC;CUNEIFORM SIGN GAR3;Lo;0;L;;;;;N;;;;;
+120FD;CUNEIFORM SIGN GASHAN;Lo;0;L;;;;;N;;;;;
+120FE;CUNEIFORM SIGN GESHTIN;Lo;0;L;;;;;N;;;;;
+120FF;CUNEIFORM SIGN GESHTIN TIMES KUR;Lo;0;L;;;;;N;;;;;
+12100;CUNEIFORM SIGN GI;Lo;0;L;;;;;N;;;;;
+12101;CUNEIFORM SIGN GI TIMES E;Lo;0;L;;;;;N;;;;;
+12102;CUNEIFORM SIGN GI TIMES U;Lo;0;L;;;;;N;;;;;
+12103;CUNEIFORM SIGN GI CROSSING GI;Lo;0;L;;;;;N;;;;;
+12104;CUNEIFORM SIGN GI4;Lo;0;L;;;;;N;;;;;
+12105;CUNEIFORM SIGN GI4 OVER GI4;Lo;0;L;;;;;N;;;;;
+12106;CUNEIFORM SIGN GI4 CROSSING GI4;Lo;0;L;;;;;N;;;;;
+12107;CUNEIFORM SIGN GIDIM;Lo;0;L;;;;;N;;;;;
+12108;CUNEIFORM SIGN GIR2;Lo;0;L;;;;;N;;;;;
+12109;CUNEIFORM SIGN GIR2 GUNU;Lo;0;L;;;;;N;;;;;
+1210A;CUNEIFORM SIGN GIR3;Lo;0;L;;;;;N;;;;;
+1210B;CUNEIFORM SIGN GIR3 TIMES A PLUS IGI;Lo;0;L;;;;;N;;;;;
+1210C;CUNEIFORM SIGN GIR3 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1210D;CUNEIFORM SIGN GIR3 TIMES IGI;Lo;0;L;;;;;N;;;;;
+1210E;CUNEIFORM SIGN GIR3 TIMES LU PLUS IGI;Lo;0;L;;;;;N;;;;;
+1210F;CUNEIFORM SIGN GIR3 TIMES PA;Lo;0;L;;;;;N;;;;;
+12110;CUNEIFORM SIGN GISAL;Lo;0;L;;;;;N;;;;;
+12111;CUNEIFORM SIGN GISH;Lo;0;L;;;;;N;;;;;
+12112;CUNEIFORM SIGN GISH CROSSING GISH;Lo;0;L;;;;;N;;;;;
+12113;CUNEIFORM SIGN GISH TIMES BAD;Lo;0;L;;;;;N;;;;;
+12114;CUNEIFORM SIGN GISH TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12115;CUNEIFORM SIGN GISH TENU;Lo;0;L;;;;;N;;;;;
+12116;CUNEIFORM SIGN GU;Lo;0;L;;;;;N;;;;;
+12117;CUNEIFORM SIGN GU CROSSING GU;Lo;0;L;;;;;N;;;;;
+12118;CUNEIFORM SIGN GU2;Lo;0;L;;;;;N;;;;;
+12119;CUNEIFORM SIGN GU2 TIMES KAK;Lo;0;L;;;;;N;;;;;
+1211A;CUNEIFORM SIGN GU2 TIMES KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+1211B;CUNEIFORM SIGN GU2 TIMES NUN;Lo;0;L;;;;;N;;;;;
+1211C;CUNEIFORM SIGN GU2 TIMES SAL PLUS TUG2;Lo;0;L;;;;;N;;;;;
+1211D;CUNEIFORM SIGN GU2 GUNU;Lo;0;L;;;;;N;;;;;
+1211E;CUNEIFORM SIGN GUD;Lo;0;L;;;;;N;;;;;
+1211F;CUNEIFORM SIGN GUD TIMES A PLUS KUR;Lo;0;L;;;;;N;;;;;
+12120;CUNEIFORM SIGN GUD TIMES KUR;Lo;0;L;;;;;N;;;;;
+12121;CUNEIFORM SIGN GUD OVER GUD LUGAL;Lo;0;L;;;;;N;;;;;
+12122;CUNEIFORM SIGN GUL;Lo;0;L;;;;;N;;;;;
+12123;CUNEIFORM SIGN GUM;Lo;0;L;;;;;N;;;;;
+12124;CUNEIFORM SIGN GUM TIMES SHE;Lo;0;L;;;;;N;;;;;
+12125;CUNEIFORM SIGN GUR;Lo;0;L;;;;;N;;;;;
+12126;CUNEIFORM SIGN GUR7;Lo;0;L;;;;;N;;;;;
+12127;CUNEIFORM SIGN GURUN;Lo;0;L;;;;;N;;;;;
+12128;CUNEIFORM SIGN GURUSH;Lo;0;L;;;;;N;;;;;
+12129;CUNEIFORM SIGN HA;Lo;0;L;;;;;N;;;;;
+1212A;CUNEIFORM SIGN HA TENU;Lo;0;L;;;;;N;;;;;
+1212B;CUNEIFORM SIGN HA GUNU;Lo;0;L;;;;;N;;;;;
+1212C;CUNEIFORM SIGN HAL;Lo;0;L;;;;;N;;;;;
+1212D;CUNEIFORM SIGN HI;Lo;0;L;;;;;N;;;;;
+1212E;CUNEIFORM SIGN HI TIMES ASH;Lo;0;L;;;;;N;;;;;
+1212F;CUNEIFORM SIGN HI TIMES ASH2;Lo;0;L;;;;;N;;;;;
+12130;CUNEIFORM SIGN HI TIMES BAD;Lo;0;L;;;;;N;;;;;
+12131;CUNEIFORM SIGN HI TIMES DISH;Lo;0;L;;;;;N;;;;;
+12132;CUNEIFORM SIGN HI TIMES GAD;Lo;0;L;;;;;N;;;;;
+12133;CUNEIFORM SIGN HI TIMES KIN;Lo;0;L;;;;;N;;;;;
+12134;CUNEIFORM SIGN HI TIMES NUN;Lo;0;L;;;;;N;;;;;
+12135;CUNEIFORM SIGN HI TIMES SHE;Lo;0;L;;;;;N;;;;;
+12136;CUNEIFORM SIGN HI TIMES U;Lo;0;L;;;;;N;;;;;
+12137;CUNEIFORM SIGN HU;Lo;0;L;;;;;N;;;;;
+12138;CUNEIFORM SIGN HUB2;Lo;0;L;;;;;N;;;;;
+12139;CUNEIFORM SIGN HUB2 TIMES AN;Lo;0;L;;;;;N;;;;;
+1213A;CUNEIFORM SIGN HUB2 TIMES HAL;Lo;0;L;;;;;N;;;;;
+1213B;CUNEIFORM SIGN HUB2 TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+1213C;CUNEIFORM SIGN HUB2 TIMES LISH;Lo;0;L;;;;;N;;;;;
+1213D;CUNEIFORM SIGN HUB2 TIMES UD;Lo;0;L;;;;;N;;;;;
+1213E;CUNEIFORM SIGN HUL2;Lo;0;L;;;;;N;;;;;
+1213F;CUNEIFORM SIGN I;Lo;0;L;;;;;N;;;;;
+12140;CUNEIFORM SIGN I A;Lo;0;L;;;;;N;;;;;
+12141;CUNEIFORM SIGN IB;Lo;0;L;;;;;N;;;;;
+12142;CUNEIFORM SIGN IDIM;Lo;0;L;;;;;N;;;;;
+12143;CUNEIFORM SIGN IDIM OVER IDIM BUR;Lo;0;L;;;;;N;;;;;
+12144;CUNEIFORM SIGN IDIM OVER IDIM SQUARED;Lo;0;L;;;;;N;;;;;
+12145;CUNEIFORM SIGN IG;Lo;0;L;;;;;N;;;;;
+12146;CUNEIFORM SIGN IGI;Lo;0;L;;;;;N;;;;;
+12147;CUNEIFORM SIGN IGI DIB;Lo;0;L;;;;;N;;;;;
+12148;CUNEIFORM SIGN IGI RI;Lo;0;L;;;;;N;;;;;
+12149;CUNEIFORM SIGN IGI OVER IGI SHIR OVER SHIR UD OVER UD;Lo;0;L;;;;;N;;;;;
+1214A;CUNEIFORM SIGN IGI GUNU;Lo;0;L;;;;;N;;;;;
+1214B;CUNEIFORM SIGN IL;Lo;0;L;;;;;N;;;;;
+1214C;CUNEIFORM SIGN IL TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1214D;CUNEIFORM SIGN IL2;Lo;0;L;;;;;N;;;;;
+1214E;CUNEIFORM SIGN IM;Lo;0;L;;;;;N;;;;;
+1214F;CUNEIFORM SIGN IM TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12150;CUNEIFORM SIGN IM CROSSING IM;Lo;0;L;;;;;N;;;;;
+12151;CUNEIFORM SIGN IM OPPOSING IM;Lo;0;L;;;;;N;;;;;
+12152;CUNEIFORM SIGN IM SQUARED;Lo;0;L;;;;;N;;;;;
+12153;CUNEIFORM SIGN IMIN;Lo;0;L;;;;;N;;;;;
+12154;CUNEIFORM SIGN IN;Lo;0;L;;;;;N;;;;;
+12155;CUNEIFORM SIGN IR;Lo;0;L;;;;;N;;;;;
+12156;CUNEIFORM SIGN ISH;Lo;0;L;;;;;N;;;;;
+12157;CUNEIFORM SIGN KA;Lo;0;L;;;;;N;;;;;
+12158;CUNEIFORM SIGN KA TIMES A;Lo;0;L;;;;;N;;;;;
+12159;CUNEIFORM SIGN KA TIMES AD;Lo;0;L;;;;;N;;;;;
+1215A;CUNEIFORM SIGN KA TIMES AD PLUS KU3;Lo;0;L;;;;;N;;;;;
+1215B;CUNEIFORM SIGN KA TIMES ASH2;Lo;0;L;;;;;N;;;;;
+1215C;CUNEIFORM SIGN KA TIMES BAD;Lo;0;L;;;;;N;;;;;
+1215D;CUNEIFORM SIGN KA TIMES BALAG;Lo;0;L;;;;;N;;;;;
+1215E;CUNEIFORM SIGN KA TIMES BAR;Lo;0;L;;;;;N;;;;;
+1215F;CUNEIFORM SIGN KA TIMES BI;Lo;0;L;;;;;N;;;;;
+12160;CUNEIFORM SIGN KA TIMES ERIN2;Lo;0;L;;;;;N;;;;;
+12161;CUNEIFORM SIGN KA TIMES ESH2;Lo;0;L;;;;;N;;;;;
+12162;CUNEIFORM SIGN KA TIMES GA;Lo;0;L;;;;;N;;;;;
+12163;CUNEIFORM SIGN KA TIMES GAL;Lo;0;L;;;;;N;;;;;
+12164;CUNEIFORM SIGN KA TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12165;CUNEIFORM SIGN KA TIMES GAR;Lo;0;L;;;;;N;;;;;
+12166;CUNEIFORM SIGN KA TIMES GAR PLUS SHA3 PLUS A;Lo;0;L;;;;;N;;;;;
+12167;CUNEIFORM SIGN KA TIMES GI;Lo;0;L;;;;;N;;;;;
+12168;CUNEIFORM SIGN KA TIMES GIR2;Lo;0;L;;;;;N;;;;;
+12169;CUNEIFORM SIGN KA TIMES GISH PLUS SAR;Lo;0;L;;;;;N;;;;;
+1216A;CUNEIFORM SIGN KA TIMES GISH CROSSING GISH;Lo;0;L;;;;;N;;;;;
+1216B;CUNEIFORM SIGN KA TIMES GU;Lo;0;L;;;;;N;;;;;
+1216C;CUNEIFORM SIGN KA TIMES GUR7;Lo;0;L;;;;;N;;;;;
+1216D;CUNEIFORM SIGN KA TIMES IGI;Lo;0;L;;;;;N;;;;;
+1216E;CUNEIFORM SIGN KA TIMES IM;Lo;0;L;;;;;N;;;;;
+1216F;CUNEIFORM SIGN KA TIMES KAK;Lo;0;L;;;;;N;;;;;
+12170;CUNEIFORM SIGN KA TIMES KI;Lo;0;L;;;;;N;;;;;
+12171;CUNEIFORM SIGN KA TIMES KID;Lo;0;L;;;;;N;;;;;
+12172;CUNEIFORM SIGN KA TIMES LI;Lo;0;L;;;;;N;;;;;
+12173;CUNEIFORM SIGN KA TIMES LU;Lo;0;L;;;;;N;;;;;
+12174;CUNEIFORM SIGN KA TIMES ME;Lo;0;L;;;;;N;;;;;
+12175;CUNEIFORM SIGN KA TIMES ME PLUS DU;Lo;0;L;;;;;N;;;;;
+12176;CUNEIFORM SIGN KA TIMES ME PLUS GI;Lo;0;L;;;;;N;;;;;
+12177;CUNEIFORM SIGN KA TIMES ME PLUS TE;Lo;0;L;;;;;N;;;;;
+12178;CUNEIFORM SIGN KA TIMES MI;Lo;0;L;;;;;N;;;;;
+12179;CUNEIFORM SIGN KA TIMES MI PLUS NUNUZ;Lo;0;L;;;;;N;;;;;
+1217A;CUNEIFORM SIGN KA TIMES NE;Lo;0;L;;;;;N;;;;;
+1217B;CUNEIFORM SIGN KA TIMES NUN;Lo;0;L;;;;;N;;;;;
+1217C;CUNEIFORM SIGN KA TIMES PI;Lo;0;L;;;;;N;;;;;
+1217D;CUNEIFORM SIGN KA TIMES RU;Lo;0;L;;;;;N;;;;;
+1217E;CUNEIFORM SIGN KA TIMES SA;Lo;0;L;;;;;N;;;;;
+1217F;CUNEIFORM SIGN KA TIMES SAR;Lo;0;L;;;;;N;;;;;
+12180;CUNEIFORM SIGN KA TIMES SHA;Lo;0;L;;;;;N;;;;;
+12181;CUNEIFORM SIGN KA TIMES SHE;Lo;0;L;;;;;N;;;;;
+12182;CUNEIFORM SIGN KA TIMES SHID;Lo;0;L;;;;;N;;;;;
+12183;CUNEIFORM SIGN KA TIMES SHU;Lo;0;L;;;;;N;;;;;
+12184;CUNEIFORM SIGN KA TIMES SIG;Lo;0;L;;;;;N;;;;;
+12185;CUNEIFORM SIGN KA TIMES SUHUR;Lo;0;L;;;;;N;;;;;
+12186;CUNEIFORM SIGN KA TIMES TAR;Lo;0;L;;;;;N;;;;;
+12187;CUNEIFORM SIGN KA TIMES U;Lo;0;L;;;;;N;;;;;
+12188;CUNEIFORM SIGN KA TIMES U2;Lo;0;L;;;;;N;;;;;
+12189;CUNEIFORM SIGN KA TIMES UD;Lo;0;L;;;;;N;;;;;
+1218A;CUNEIFORM SIGN KA TIMES UMUM TIMES PA;Lo;0;L;;;;;N;;;;;
+1218B;CUNEIFORM SIGN KA TIMES USH;Lo;0;L;;;;;N;;;;;
+1218C;CUNEIFORM SIGN KA TIMES ZI;Lo;0;L;;;;;N;;;;;
+1218D;CUNEIFORM SIGN KA2;Lo;0;L;;;;;N;;;;;
+1218E;CUNEIFORM SIGN KA2 CROSSING KA2;Lo;0;L;;;;;N;;;;;
+1218F;CUNEIFORM SIGN KAB;Lo;0;L;;;;;N;;;;;
+12190;CUNEIFORM SIGN KAD2;Lo;0;L;;;;;N;;;;;
+12191;CUNEIFORM SIGN KAD3;Lo;0;L;;;;;N;;;;;
+12192;CUNEIFORM SIGN KAD4;Lo;0;L;;;;;N;;;;;
+12193;CUNEIFORM SIGN KAD5;Lo;0;L;;;;;N;;;;;
+12194;CUNEIFORM SIGN KAD5 OVER KAD5;Lo;0;L;;;;;N;;;;;
+12195;CUNEIFORM SIGN KAK;Lo;0;L;;;;;N;;;;;
+12196;CUNEIFORM SIGN KAK TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+12197;CUNEIFORM SIGN KAL;Lo;0;L;;;;;N;;;;;
+12198;CUNEIFORM SIGN KAL TIMES BAD;Lo;0;L;;;;;N;;;;;
+12199;CUNEIFORM SIGN KAL CROSSING KAL;Lo;0;L;;;;;N;;;;;
+1219A;CUNEIFORM SIGN KAM2;Lo;0;L;;;;;N;;;;;
+1219B;CUNEIFORM SIGN KAM4;Lo;0;L;;;;;N;;;;;
+1219C;CUNEIFORM SIGN KASKAL;Lo;0;L;;;;;N;;;;;
+1219D;CUNEIFORM SIGN KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;;
+1219E;CUNEIFORM SIGN KASKAL OVER KASKAL LAGAB TIMES U OVER LAGAB TIMES U;Lo;0;L;;;;;N;;;;;
+1219F;CUNEIFORM SIGN KESH2;Lo;0;L;;;;;N;;;;;
+121A0;CUNEIFORM SIGN KI;Lo;0;L;;;;;N;;;;;
+121A1;CUNEIFORM SIGN KI TIMES BAD;Lo;0;L;;;;;N;;;;;
+121A2;CUNEIFORM SIGN KI TIMES U;Lo;0;L;;;;;N;;;;;
+121A3;CUNEIFORM SIGN KI TIMES UD;Lo;0;L;;;;;N;;;;;
+121A4;CUNEIFORM SIGN KID;Lo;0;L;;;;;N;;;;;
+121A5;CUNEIFORM SIGN KIN;Lo;0;L;;;;;N;;;;;
+121A6;CUNEIFORM SIGN KISAL;Lo;0;L;;;;;N;;;;;
+121A7;CUNEIFORM SIGN KISH;Lo;0;L;;;;;N;;;;;
+121A8;CUNEIFORM SIGN KISIM5;Lo;0;L;;;;;N;;;;;
+121A9;CUNEIFORM SIGN KISIM5 OVER KISIM5;Lo;0;L;;;;;N;;;;;
+121AA;CUNEIFORM SIGN KU;Lo;0;L;;;;;N;;;;;
+121AB;CUNEIFORM SIGN KU OVER HI TIMES ASH2 KU OVER HI TIMES ASH2;Lo;0;L;;;;;N;;;;;
+121AC;CUNEIFORM SIGN KU3;Lo;0;L;;;;;N;;;;;
+121AD;CUNEIFORM SIGN KU4;Lo;0;L;;;;;N;;;;;
+121AE;CUNEIFORM SIGN KU4 VARIANT FORM;Lo;0;L;;;;;N;;;;;
+121AF;CUNEIFORM SIGN KU7;Lo;0;L;;;;;N;;;;;
+121B0;CUNEIFORM SIGN KUL;Lo;0;L;;;;;N;;;;;
+121B1;CUNEIFORM SIGN KUL GUNU;Lo;0;L;;;;;N;;;;;
+121B2;CUNEIFORM SIGN KUN;Lo;0;L;;;;;N;;;;;
+121B3;CUNEIFORM SIGN KUR;Lo;0;L;;;;;N;;;;;
+121B4;CUNEIFORM SIGN KUR OPPOSING KUR;Lo;0;L;;;;;N;;;;;
+121B5;CUNEIFORM SIGN KUSHU2;Lo;0;L;;;;;N;;;;;
+121B6;CUNEIFORM SIGN KWU318;Lo;0;L;;;;;N;;;;;
+121B7;CUNEIFORM SIGN LA;Lo;0;L;;;;;N;;;;;
+121B8;CUNEIFORM SIGN LAGAB;Lo;0;L;;;;;N;;;;;
+121B9;CUNEIFORM SIGN LAGAB TIMES A;Lo;0;L;;;;;N;;;;;
+121BA;CUNEIFORM SIGN LAGAB TIMES A PLUS DA PLUS HA;Lo;0;L;;;;;N;;;;;
+121BB;CUNEIFORM SIGN LAGAB TIMES A PLUS GAR;Lo;0;L;;;;;N;;;;;
+121BC;CUNEIFORM SIGN LAGAB TIMES A PLUS LAL;Lo;0;L;;;;;N;;;;;
+121BD;CUNEIFORM SIGN LAGAB TIMES AL;Lo;0;L;;;;;N;;;;;
+121BE;CUNEIFORM SIGN LAGAB TIMES AN;Lo;0;L;;;;;N;;;;;
+121BF;CUNEIFORM SIGN LAGAB TIMES ASH ZIDA TENU;Lo;0;L;;;;;N;;;;;
+121C0;CUNEIFORM SIGN LAGAB TIMES BAD;Lo;0;L;;;;;N;;;;;
+121C1;CUNEIFORM SIGN LAGAB TIMES BI;Lo;0;L;;;;;N;;;;;
+121C2;CUNEIFORM SIGN LAGAB TIMES DAR;Lo;0;L;;;;;N;;;;;
+121C3;CUNEIFORM SIGN LAGAB TIMES EN;Lo;0;L;;;;;N;;;;;
+121C4;CUNEIFORM SIGN LAGAB TIMES GA;Lo;0;L;;;;;N;;;;;
+121C5;CUNEIFORM SIGN LAGAB TIMES GAR;Lo;0;L;;;;;N;;;;;
+121C6;CUNEIFORM SIGN LAGAB TIMES GUD;Lo;0;L;;;;;N;;;;;
+121C7;CUNEIFORM SIGN LAGAB TIMES GUD PLUS GUD;Lo;0;L;;;;;N;;;;;
+121C8;CUNEIFORM SIGN LAGAB TIMES HA;Lo;0;L;;;;;N;;;;;
+121C9;CUNEIFORM SIGN LAGAB TIMES HAL;Lo;0;L;;;;;N;;;;;
+121CA;CUNEIFORM SIGN LAGAB TIMES HI TIMES NUN;Lo;0;L;;;;;N;;;;;
+121CB;CUNEIFORM SIGN LAGAB TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+121CC;CUNEIFORM SIGN LAGAB TIMES IM;Lo;0;L;;;;;N;;;;;
+121CD;CUNEIFORM SIGN LAGAB TIMES IM PLUS HA;Lo;0;L;;;;;N;;;;;
+121CE;CUNEIFORM SIGN LAGAB TIMES IM PLUS LU;Lo;0;L;;;;;N;;;;;
+121CF;CUNEIFORM SIGN LAGAB TIMES KI;Lo;0;L;;;;;N;;;;;
+121D0;CUNEIFORM SIGN LAGAB TIMES KIN;Lo;0;L;;;;;N;;;;;
+121D1;CUNEIFORM SIGN LAGAB TIMES KU3;Lo;0;L;;;;;N;;;;;
+121D2;CUNEIFORM SIGN LAGAB TIMES KUL;Lo;0;L;;;;;N;;;;;
+121D3;CUNEIFORM SIGN LAGAB TIMES KUL PLUS HI PLUS A;Lo;0;L;;;;;N;;;;;
+121D4;CUNEIFORM SIGN LAGAB TIMES LAGAB;Lo;0;L;;;;;N;;;;;
+121D5;CUNEIFORM SIGN LAGAB TIMES LISH;Lo;0;L;;;;;N;;;;;
+121D6;CUNEIFORM SIGN LAGAB TIMES LU;Lo;0;L;;;;;N;;;;;
+121D7;CUNEIFORM SIGN LAGAB TIMES LUL;Lo;0;L;;;;;N;;;;;
+121D8;CUNEIFORM SIGN LAGAB TIMES ME;Lo;0;L;;;;;N;;;;;
+121D9;CUNEIFORM SIGN LAGAB TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
+121DA;CUNEIFORM SIGN LAGAB TIMES MUSH;Lo;0;L;;;;;N;;;;;
+121DB;CUNEIFORM SIGN LAGAB TIMES NE;Lo;0;L;;;;;N;;;;;
+121DC;CUNEIFORM SIGN LAGAB TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;;
+121DD;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH PLUS ERIN2;Lo;0;L;;;;;N;;;;;
+121DE;CUNEIFORM SIGN LAGAB TIMES SHITA PLUS GISH TENU;Lo;0;L;;;;;N;;;;;
+121DF;CUNEIFORM SIGN LAGAB TIMES SHU2;Lo;0;L;;;;;N;;;;;
+121E0;CUNEIFORM SIGN LAGAB TIMES SHU2 PLUS SHU2;Lo;0;L;;;;;N;;;;;
+121E1;CUNEIFORM SIGN LAGAB TIMES SUM;Lo;0;L;;;;;N;;;;;
+121E2;CUNEIFORM SIGN LAGAB TIMES TAG;Lo;0;L;;;;;N;;;;;
+121E3;CUNEIFORM SIGN LAGAB TIMES TAK4;Lo;0;L;;;;;N;;;;;
+121E4;CUNEIFORM SIGN LAGAB TIMES TE PLUS A PLUS SU PLUS NA;Lo;0;L;;;;;N;;;;;
+121E5;CUNEIFORM SIGN LAGAB TIMES U;Lo;0;L;;;;;N;;;;;
+121E6;CUNEIFORM SIGN LAGAB TIMES U PLUS A;Lo;0;L;;;;;N;;;;;
+121E7;CUNEIFORM SIGN LAGAB TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;
+121E8;CUNEIFORM SIGN LAGAB TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;
+121E9;CUNEIFORM SIGN LAGAB TIMES UD;Lo;0;L;;;;;N;;;;;
+121EA;CUNEIFORM SIGN LAGAB TIMES USH;Lo;0;L;;;;;N;;;;;
+121EB;CUNEIFORM SIGN LAGAB SQUARED;Lo;0;L;;;;;N;;;;;
+121EC;CUNEIFORM SIGN LAGAR;Lo;0;L;;;;;N;;;;;
+121ED;CUNEIFORM SIGN LAGAR TIMES SHE;Lo;0;L;;;;;N;;;;;
+121EE;CUNEIFORM SIGN LAGAR TIMES SHE PLUS SUM;Lo;0;L;;;;;N;;;;;
+121EF;CUNEIFORM SIGN LAGAR GUNU;Lo;0;L;;;;;N;;;;;
+121F0;CUNEIFORM SIGN LAGAR GUNU OVER LAGAR GUNU SHE;Lo;0;L;;;;;N;;;;;
+121F1;CUNEIFORM SIGN LAHSHU;Lo;0;L;;;;;N;;;;;
+121F2;CUNEIFORM SIGN LAL;Lo;0;L;;;;;N;;;;;
+121F3;CUNEIFORM SIGN LAL TIMES LAL;Lo;0;L;;;;;N;;;;;
+121F4;CUNEIFORM SIGN LAM;Lo;0;L;;;;;N;;;;;
+121F5;CUNEIFORM SIGN LAM TIMES KUR;Lo;0;L;;;;;N;;;;;
+121F6;CUNEIFORM SIGN LAM TIMES KUR PLUS RU;Lo;0;L;;;;;N;;;;;
+121F7;CUNEIFORM SIGN LI;Lo;0;L;;;;;N;;;;;
+121F8;CUNEIFORM SIGN LIL;Lo;0;L;;;;;N;;;;;
+121F9;CUNEIFORM SIGN LIMMU2;Lo;0;L;;;;;N;;;;;
+121FA;CUNEIFORM SIGN LISH;Lo;0;L;;;;;N;;;;;
+121FB;CUNEIFORM SIGN LU;Lo;0;L;;;;;N;;;;;
+121FC;CUNEIFORM SIGN LU TIMES BAD;Lo;0;L;;;;;N;;;;;
+121FD;CUNEIFORM SIGN LU2;Lo;0;L;;;;;N;;;;;
+121FE;CUNEIFORM SIGN LU2 TIMES AL;Lo;0;L;;;;;N;;;;;
+121FF;CUNEIFORM SIGN LU2 TIMES BAD;Lo;0;L;;;;;N;;;;;
+12200;CUNEIFORM SIGN LU2 TIMES ESH2;Lo;0;L;;;;;N;;;;;
+12201;CUNEIFORM SIGN LU2 TIMES ESH2 TENU;Lo;0;L;;;;;N;;;;;
+12202;CUNEIFORM SIGN LU2 TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12203;CUNEIFORM SIGN LU2 TIMES HI TIMES BAD;Lo;0;L;;;;;N;;;;;
+12204;CUNEIFORM SIGN LU2 TIMES IM;Lo;0;L;;;;;N;;;;;
+12205;CUNEIFORM SIGN LU2 TIMES KAD2;Lo;0;L;;;;;N;;;;;
+12206;CUNEIFORM SIGN LU2 TIMES KAD3;Lo;0;L;;;;;N;;;;;
+12207;CUNEIFORM SIGN LU2 TIMES KAD3 PLUS ASH;Lo;0;L;;;;;N;;;;;
+12208;CUNEIFORM SIGN LU2 TIMES KI;Lo;0;L;;;;;N;;;;;
+12209;CUNEIFORM SIGN LU2 TIMES LA PLUS ASH;Lo;0;L;;;;;N;;;;;
+1220A;CUNEIFORM SIGN LU2 TIMES LAGAB;Lo;0;L;;;;;N;;;;;
+1220B;CUNEIFORM SIGN LU2 TIMES ME PLUS EN;Lo;0;L;;;;;N;;;;;
+1220C;CUNEIFORM SIGN LU2 TIMES NE;Lo;0;L;;;;;N;;;;;
+1220D;CUNEIFORM SIGN LU2 TIMES NU;Lo;0;L;;;;;N;;;;;
+1220E;CUNEIFORM SIGN LU2 TIMES SI PLUS ASH;Lo;0;L;;;;;N;;;;;
+1220F;CUNEIFORM SIGN LU2 TIMES SIK2 PLUS BU;Lo;0;L;;;;;N;;;;;
+12210;CUNEIFORM SIGN LU2 TIMES TUG2;Lo;0;L;;;;;N;;;;;
+12211;CUNEIFORM SIGN LU2 TENU;Lo;0;L;;;;;N;;;;;
+12212;CUNEIFORM SIGN LU2 CROSSING LU2;Lo;0;L;;;;;N;;;;;
+12213;CUNEIFORM SIGN LU2 OPPOSING LU2;Lo;0;L;;;;;N;;;;;
+12214;CUNEIFORM SIGN LU2 SQUARED;Lo;0;L;;;;;N;;;;;
+12215;CUNEIFORM SIGN LU2 SHESHIG;Lo;0;L;;;;;N;;;;;
+12216;CUNEIFORM SIGN LU3;Lo;0;L;;;;;N;;;;;
+12217;CUNEIFORM SIGN LUGAL;Lo;0;L;;;;;N;;;;;
+12218;CUNEIFORM SIGN LUGAL OVER LUGAL;Lo;0;L;;;;;N;;;;;
+12219;CUNEIFORM SIGN LUGAL OPPOSING LUGAL;Lo;0;L;;;;;N;;;;;
+1221A;CUNEIFORM SIGN LUGAL SHESHIG;Lo;0;L;;;;;N;;;;;
+1221B;CUNEIFORM SIGN LUH;Lo;0;L;;;;;N;;;;;
+1221C;CUNEIFORM SIGN LUL;Lo;0;L;;;;;N;;;;;
+1221D;CUNEIFORM SIGN LUM;Lo;0;L;;;;;N;;;;;
+1221E;CUNEIFORM SIGN LUM OVER LUM;Lo;0;L;;;;;N;;;;;
+1221F;CUNEIFORM SIGN LUM OVER LUM GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+12220;CUNEIFORM SIGN MA;Lo;0;L;;;;;N;;;;;
+12221;CUNEIFORM SIGN MA TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12222;CUNEIFORM SIGN MA GUNU;Lo;0;L;;;;;N;;;;;
+12223;CUNEIFORM SIGN MA2;Lo;0;L;;;;;N;;;;;
+12224;CUNEIFORM SIGN MAH;Lo;0;L;;;;;N;;;;;
+12225;CUNEIFORM SIGN MAR;Lo;0;L;;;;;N;;;;;
+12226;CUNEIFORM SIGN MASH;Lo;0;L;;;;;N;;;;;
+12227;CUNEIFORM SIGN MASH2;Lo;0;L;;;;;N;;;;;
+12228;CUNEIFORM SIGN ME;Lo;0;L;;;;;N;;;;;
+12229;CUNEIFORM SIGN MES;Lo;0;L;;;;;N;;;;;
+1222A;CUNEIFORM SIGN MI;Lo;0;L;;;;;N;;;;;
+1222B;CUNEIFORM SIGN MIN;Lo;0;L;;;;;N;;;;;
+1222C;CUNEIFORM SIGN MU;Lo;0;L;;;;;N;;;;;
+1222D;CUNEIFORM SIGN MU OVER MU;Lo;0;L;;;;;N;;;;;
+1222E;CUNEIFORM SIGN MUG;Lo;0;L;;;;;N;;;;;
+1222F;CUNEIFORM SIGN MUG GUNU;Lo;0;L;;;;;N;;;;;
+12230;CUNEIFORM SIGN MUNSUB;Lo;0;L;;;;;N;;;;;
+12231;CUNEIFORM SIGN MURGU2;Lo;0;L;;;;;N;;;;;
+12232;CUNEIFORM SIGN MUSH;Lo;0;L;;;;;N;;;;;
+12233;CUNEIFORM SIGN MUSH TIMES A;Lo;0;L;;;;;N;;;;;
+12234;CUNEIFORM SIGN MUSH TIMES KUR;Lo;0;L;;;;;N;;;;;
+12235;CUNEIFORM SIGN MUSH TIMES ZA;Lo;0;L;;;;;N;;;;;
+12236;CUNEIFORM SIGN MUSH OVER MUSH;Lo;0;L;;;;;N;;;;;
+12237;CUNEIFORM SIGN MUSH OVER MUSH TIMES A PLUS NA;Lo;0;L;;;;;N;;;;;
+12238;CUNEIFORM SIGN MUSH CROSSING MUSH;Lo;0;L;;;;;N;;;;;
+12239;CUNEIFORM SIGN MUSH3;Lo;0;L;;;;;N;;;;;
+1223A;CUNEIFORM SIGN MUSH3 TIMES A;Lo;0;L;;;;;N;;;;;
+1223B;CUNEIFORM SIGN MUSH3 TIMES A PLUS DI;Lo;0;L;;;;;N;;;;;
+1223C;CUNEIFORM SIGN MUSH3 TIMES DI;Lo;0;L;;;;;N;;;;;
+1223D;CUNEIFORM SIGN MUSH3 GUNU;Lo;0;L;;;;;N;;;;;
+1223E;CUNEIFORM SIGN NA;Lo;0;L;;;;;N;;;;;
+1223F;CUNEIFORM SIGN NA2;Lo;0;L;;;;;N;;;;;
+12240;CUNEIFORM SIGN NAGA;Lo;0;L;;;;;N;;;;;
+12241;CUNEIFORM SIGN NAGA INVERTED;Lo;0;L;;;;;N;;;;;
+12242;CUNEIFORM SIGN NAGA TIMES SHU TENU;Lo;0;L;;;;;N;;;;;
+12243;CUNEIFORM SIGN NAGA OPPOSING NAGA;Lo;0;L;;;;;N;;;;;
+12244;CUNEIFORM SIGN NAGAR;Lo;0;L;;;;;N;;;;;
+12245;CUNEIFORM SIGN NAM NUTILLU;Lo;0;L;;;;;N;;;;;
+12246;CUNEIFORM SIGN NAM;Lo;0;L;;;;;N;;;;;
+12247;CUNEIFORM SIGN NAM2;Lo;0;L;;;;;N;;;;;
+12248;CUNEIFORM SIGN NE;Lo;0;L;;;;;N;;;;;
+12249;CUNEIFORM SIGN NE TIMES A;Lo;0;L;;;;;N;;;;;
+1224A;CUNEIFORM SIGN NE TIMES UD;Lo;0;L;;;;;N;;;;;
+1224B;CUNEIFORM SIGN NE SHESHIG;Lo;0;L;;;;;N;;;;;
+1224C;CUNEIFORM SIGN NI;Lo;0;L;;;;;N;;;;;
+1224D;CUNEIFORM SIGN NI TIMES E;Lo;0;L;;;;;N;;;;;
+1224E;CUNEIFORM SIGN NI2;Lo;0;L;;;;;N;;;;;
+1224F;CUNEIFORM SIGN NIM;Lo;0;L;;;;;N;;;;;
+12250;CUNEIFORM SIGN NIM TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12251;CUNEIFORM SIGN NIM TIMES GAR PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12252;CUNEIFORM SIGN NINDA2;Lo;0;L;;;;;N;;;;;
+12253;CUNEIFORM SIGN NINDA2 TIMES AN;Lo;0;L;;;;;N;;;;;
+12254;CUNEIFORM SIGN NINDA2 TIMES ASH;Lo;0;L;;;;;N;;;;;
+12255;CUNEIFORM SIGN NINDA2 TIMES ASH PLUS ASH;Lo;0;L;;;;;N;;;;;
+12256;CUNEIFORM SIGN NINDA2 TIMES GUD;Lo;0;L;;;;;N;;;;;
+12257;CUNEIFORM SIGN NINDA2 TIMES ME PLUS GAN2 TENU;Lo;0;L;;;;;N;;;;;
+12258;CUNEIFORM SIGN NINDA2 TIMES NE;Lo;0;L;;;;;N;;;;;
+12259;CUNEIFORM SIGN NINDA2 TIMES NUN;Lo;0;L;;;;;N;;;;;
+1225A;CUNEIFORM SIGN NINDA2 TIMES SHE;Lo;0;L;;;;;N;;;;;
+1225B;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS A AN;Lo;0;L;;;;;N;;;;;
+1225C;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH;Lo;0;L;;;;;N;;;;;
+1225D;CUNEIFORM SIGN NINDA2 TIMES SHE PLUS ASH PLUS ASH;Lo;0;L;;;;;N;;;;;
+1225E;CUNEIFORM SIGN NINDA2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;
+1225F;CUNEIFORM SIGN NINDA2 TIMES USH;Lo;0;L;;;;;N;;;;;
+12260;CUNEIFORM SIGN NISAG;Lo;0;L;;;;;N;;;;;
+12261;CUNEIFORM SIGN NU;Lo;0;L;;;;;N;;;;;
+12262;CUNEIFORM SIGN NU11;Lo;0;L;;;;;N;;;;;
+12263;CUNEIFORM SIGN NUN;Lo;0;L;;;;;N;;;;;
+12264;CUNEIFORM SIGN NUN LAGAR TIMES GAR;Lo;0;L;;;;;N;;;;;
+12265;CUNEIFORM SIGN NUN LAGAR TIMES MASH;Lo;0;L;;;;;N;;;;;
+12266;CUNEIFORM SIGN NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;;
+12267;CUNEIFORM SIGN NUN LAGAR TIMES SAL OVER NUN LAGAR TIMES SAL;Lo;0;L;;;;;N;;;;;
+12268;CUNEIFORM SIGN NUN LAGAR TIMES USH;Lo;0;L;;;;;N;;;;;
+12269;CUNEIFORM SIGN NUN TENU;Lo;0;L;;;;;N;;;;;
+1226A;CUNEIFORM SIGN NUN OVER NUN;Lo;0;L;;;;;N;;;;;
+1226B;CUNEIFORM SIGN NUN CROSSING NUN;Lo;0;L;;;;;N;;;;;
+1226C;CUNEIFORM SIGN NUN CROSSING NUN LAGAR OVER LAGAR;Lo;0;L;;;;;N;;;;;
+1226D;CUNEIFORM SIGN NUNUZ;Lo;0;L;;;;;N;;;;;
+1226E;CUNEIFORM SIGN NUNUZ AB2 TIMES ASHGAB;Lo;0;L;;;;;N;;;;;
+1226F;CUNEIFORM SIGN NUNUZ AB2 TIMES BI;Lo;0;L;;;;;N;;;;;
+12270;CUNEIFORM SIGN NUNUZ AB2 TIMES DUG;Lo;0;L;;;;;N;;;;;
+12271;CUNEIFORM SIGN NUNUZ AB2 TIMES GUD;Lo;0;L;;;;;N;;;;;
+12272;CUNEIFORM SIGN NUNUZ AB2 TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+12273;CUNEIFORM SIGN NUNUZ AB2 TIMES KAD3;Lo;0;L;;;;;N;;;;;
+12274;CUNEIFORM SIGN NUNUZ AB2 TIMES LA;Lo;0;L;;;;;N;;;;;
+12275;CUNEIFORM SIGN NUNUZ AB2 TIMES NE;Lo;0;L;;;;;N;;;;;
+12276;CUNEIFORM SIGN NUNUZ AB2 TIMES SILA3;Lo;0;L;;;;;N;;;;;
+12277;CUNEIFORM SIGN NUNUZ AB2 TIMES U2;Lo;0;L;;;;;N;;;;;
+12278;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI;Lo;0;L;;;;;N;;;;;
+12279;CUNEIFORM SIGN NUNUZ KISIM5 TIMES BI U;Lo;0;L;;;;;N;;;;;
+1227A;CUNEIFORM SIGN PA;Lo;0;L;;;;;N;;;;;
+1227B;CUNEIFORM SIGN PAD;Lo;0;L;;;;;N;;;;;
+1227C;CUNEIFORM SIGN PAN;Lo;0;L;;;;;N;;;;;
+1227D;CUNEIFORM SIGN PAP;Lo;0;L;;;;;N;;;;;
+1227E;CUNEIFORM SIGN PESH2;Lo;0;L;;;;;N;;;;;
+1227F;CUNEIFORM SIGN PI;Lo;0;L;;;;;N;;;;;
+12280;CUNEIFORM SIGN PI TIMES A;Lo;0;L;;;;;N;;;;;
+12281;CUNEIFORM SIGN PI TIMES AB;Lo;0;L;;;;;N;;;;;
+12282;CUNEIFORM SIGN PI TIMES BI;Lo;0;L;;;;;N;;;;;
+12283;CUNEIFORM SIGN PI TIMES BU;Lo;0;L;;;;;N;;;;;
+12284;CUNEIFORM SIGN PI TIMES E;Lo;0;L;;;;;N;;;;;
+12285;CUNEIFORM SIGN PI TIMES I;Lo;0;L;;;;;N;;;;;
+12286;CUNEIFORM SIGN PI TIMES IB;Lo;0;L;;;;;N;;;;;
+12287;CUNEIFORM SIGN PI TIMES U;Lo;0;L;;;;;N;;;;;
+12288;CUNEIFORM SIGN PI TIMES U2;Lo;0;L;;;;;N;;;;;
+12289;CUNEIFORM SIGN PI CROSSING PI;Lo;0;L;;;;;N;;;;;
+1228A;CUNEIFORM SIGN PIRIG;Lo;0;L;;;;;N;;;;;
+1228B;CUNEIFORM SIGN PIRIG TIMES KAL;Lo;0;L;;;;;N;;;;;
+1228C;CUNEIFORM SIGN PIRIG TIMES UD;Lo;0;L;;;;;N;;;;;
+1228D;CUNEIFORM SIGN PIRIG TIMES ZA;Lo;0;L;;;;;N;;;;;
+1228E;CUNEIFORM SIGN PIRIG OPPOSING PIRIG;Lo;0;L;;;;;N;;;;;
+1228F;CUNEIFORM SIGN RA;Lo;0;L;;;;;N;;;;;
+12290;CUNEIFORM SIGN RAB;Lo;0;L;;;;;N;;;;;
+12291;CUNEIFORM SIGN RI;Lo;0;L;;;;;N;;;;;
+12292;CUNEIFORM SIGN RU;Lo;0;L;;;;;N;;;;;
+12293;CUNEIFORM SIGN SA;Lo;0;L;;;;;N;;;;;
+12294;CUNEIFORM SIGN SAG NUTILLU;Lo;0;L;;;;;N;;;;;
+12295;CUNEIFORM SIGN SAG;Lo;0;L;;;;;N;;;;;
+12296;CUNEIFORM SIGN SAG TIMES A;Lo;0;L;;;;;N;;;;;
+12297;CUNEIFORM SIGN SAG TIMES DU;Lo;0;L;;;;;N;;;;;
+12298;CUNEIFORM SIGN SAG TIMES DUB;Lo;0;L;;;;;N;;;;;
+12299;CUNEIFORM SIGN SAG TIMES HA;Lo;0;L;;;;;N;;;;;
+1229A;CUNEIFORM SIGN SAG TIMES KAK;Lo;0;L;;;;;N;;;;;
+1229B;CUNEIFORM SIGN SAG TIMES KUR;Lo;0;L;;;;;N;;;;;
+1229C;CUNEIFORM SIGN SAG TIMES LUM;Lo;0;L;;;;;N;;;;;
+1229D;CUNEIFORM SIGN SAG TIMES MI;Lo;0;L;;;;;N;;;;;
+1229E;CUNEIFORM SIGN SAG TIMES NUN;Lo;0;L;;;;;N;;;;;
+1229F;CUNEIFORM SIGN SAG TIMES SAL;Lo;0;L;;;;;N;;;;;
+122A0;CUNEIFORM SIGN SAG TIMES SHID;Lo;0;L;;;;;N;;;;;
+122A1;CUNEIFORM SIGN SAG TIMES TAB;Lo;0;L;;;;;N;;;;;
+122A2;CUNEIFORM SIGN SAG TIMES U2;Lo;0;L;;;;;N;;;;;
+122A3;CUNEIFORM SIGN SAG TIMES UB;Lo;0;L;;;;;N;;;;;
+122A4;CUNEIFORM SIGN SAG TIMES UM;Lo;0;L;;;;;N;;;;;
+122A5;CUNEIFORM SIGN SAG TIMES UR;Lo;0;L;;;;;N;;;;;
+122A6;CUNEIFORM SIGN SAG TIMES USH;Lo;0;L;;;;;N;;;;;
+122A7;CUNEIFORM SIGN SAG OVER SAG;Lo;0;L;;;;;N;;;;;
+122A8;CUNEIFORM SIGN SAG GUNU;Lo;0;L;;;;;N;;;;;
+122A9;CUNEIFORM SIGN SAL;Lo;0;L;;;;;N;;;;;
+122AA;CUNEIFORM SIGN SAL LAGAB TIMES ASH2;Lo;0;L;;;;;N;;;;;
+122AB;CUNEIFORM SIGN SANGA2;Lo;0;L;;;;;N;;;;;
+122AC;CUNEIFORM SIGN SAR;Lo;0;L;;;;;N;;;;;
+122AD;CUNEIFORM SIGN SHA;Lo;0;L;;;;;N;;;;;
+122AE;CUNEIFORM SIGN SHA3;Lo;0;L;;;;;N;;;;;
+122AF;CUNEIFORM SIGN SHA3 TIMES A;Lo;0;L;;;;;N;;;;;
+122B0;CUNEIFORM SIGN SHA3 TIMES BAD;Lo;0;L;;;;;N;;;;;
+122B1;CUNEIFORM SIGN SHA3 TIMES GISH;Lo;0;L;;;;;N;;;;;
+122B2;CUNEIFORM SIGN SHA3 TIMES NE;Lo;0;L;;;;;N;;;;;
+122B3;CUNEIFORM SIGN SHA3 TIMES SHU2;Lo;0;L;;;;;N;;;;;
+122B4;CUNEIFORM SIGN SHA3 TIMES TUR;Lo;0;L;;;;;N;;;;;
+122B5;CUNEIFORM SIGN SHA3 TIMES U;Lo;0;L;;;;;N;;;;;
+122B6;CUNEIFORM SIGN SHA3 TIMES U PLUS A;Lo;0;L;;;;;N;;;;;
+122B7;CUNEIFORM SIGN SHA6;Lo;0;L;;;;;N;;;;;
+122B8;CUNEIFORM SIGN SHAB6;Lo;0;L;;;;;N;;;;;
+122B9;CUNEIFORM SIGN SHAR2;Lo;0;L;;;;;N;;;;;
+122BA;CUNEIFORM SIGN SHE;Lo;0;L;;;;;N;;;;;
+122BB;CUNEIFORM SIGN SHE HU;Lo;0;L;;;;;N;;;;;
+122BC;CUNEIFORM SIGN SHE OVER SHE GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+122BD;CUNEIFORM SIGN SHE OVER SHE TAB OVER TAB GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+122BE;CUNEIFORM SIGN SHEG9;Lo;0;L;;;;;N;;;;;
+122BF;CUNEIFORM SIGN SHEN;Lo;0;L;;;;;N;;;;;
+122C0;CUNEIFORM SIGN SHESH;Lo;0;L;;;;;N;;;;;
+122C1;CUNEIFORM SIGN SHESH2;Lo;0;L;;;;;N;;;;;
+122C2;CUNEIFORM SIGN SHESHLAM;Lo;0;L;;;;;N;;;;;
+122C3;CUNEIFORM SIGN SHID;Lo;0;L;;;;;N;;;;;
+122C4;CUNEIFORM SIGN SHID TIMES A;Lo;0;L;;;;;N;;;;;
+122C5;CUNEIFORM SIGN SHID TIMES IM;Lo;0;L;;;;;N;;;;;
+122C6;CUNEIFORM SIGN SHIM;Lo;0;L;;;;;N;;;;;
+122C7;CUNEIFORM SIGN SHIM TIMES A;Lo;0;L;;;;;N;;;;;
+122C8;CUNEIFORM SIGN SHIM TIMES BAL;Lo;0;L;;;;;N;;;;;
+122C9;CUNEIFORM SIGN SHIM TIMES BULUG;Lo;0;L;;;;;N;;;;;
+122CA;CUNEIFORM SIGN SHIM TIMES DIN;Lo;0;L;;;;;N;;;;;
+122CB;CUNEIFORM SIGN SHIM TIMES GAR;Lo;0;L;;;;;N;;;;;
+122CC;CUNEIFORM SIGN SHIM TIMES IGI;Lo;0;L;;;;;N;;;;;
+122CD;CUNEIFORM SIGN SHIM TIMES IGI GUNU;Lo;0;L;;;;;N;;;;;
+122CE;CUNEIFORM SIGN SHIM TIMES KUSHU2;Lo;0;L;;;;;N;;;;;
+122CF;CUNEIFORM SIGN SHIM TIMES LUL;Lo;0;L;;;;;N;;;;;
+122D0;CUNEIFORM SIGN SHIM TIMES MUG;Lo;0;L;;;;;N;;;;;
+122D1;CUNEIFORM SIGN SHIM TIMES SAL;Lo;0;L;;;;;N;;;;;
+122D2;CUNEIFORM SIGN SHINIG;Lo;0;L;;;;;N;;;;;
+122D3;CUNEIFORM SIGN SHIR;Lo;0;L;;;;;N;;;;;
+122D4;CUNEIFORM SIGN SHIR TENU;Lo;0;L;;;;;N;;;;;
+122D5;CUNEIFORM SIGN SHIR OVER SHIR BUR OVER BUR;Lo;0;L;;;;;N;;;;;
+122D6;CUNEIFORM SIGN SHITA;Lo;0;L;;;;;N;;;;;
+122D7;CUNEIFORM SIGN SHU;Lo;0;L;;;;;N;;;;;
+122D8;CUNEIFORM SIGN SHU OVER INVERTED SHU;Lo;0;L;;;;;N;;;;;
+122D9;CUNEIFORM SIGN SHU2;Lo;0;L;;;;;N;;;;;
+122DA;CUNEIFORM SIGN SHUBUR;Lo;0;L;;;;;N;;;;;
+122DB;CUNEIFORM SIGN SI;Lo;0;L;;;;;N;;;;;
+122DC;CUNEIFORM SIGN SI GUNU;Lo;0;L;;;;;N;;;;;
+122DD;CUNEIFORM SIGN SIG;Lo;0;L;;;;;N;;;;;
+122DE;CUNEIFORM SIGN SIG4;Lo;0;L;;;;;N;;;;;
+122DF;CUNEIFORM SIGN SIG4 OVER SIG4 SHU2;Lo;0;L;;;;;N;;;;;
+122E0;CUNEIFORM SIGN SIK2;Lo;0;L;;;;;N;;;;;
+122E1;CUNEIFORM SIGN SILA3;Lo;0;L;;;;;N;;;;;
+122E2;CUNEIFORM SIGN SU;Lo;0;L;;;;;N;;;;;
+122E3;CUNEIFORM SIGN SU OVER SU;Lo;0;L;;;;;N;;;;;
+122E4;CUNEIFORM SIGN SUD;Lo;0;L;;;;;N;;;;;
+122E5;CUNEIFORM SIGN SUD2;Lo;0;L;;;;;N;;;;;
+122E6;CUNEIFORM SIGN SUHUR;Lo;0;L;;;;;N;;;;;
+122E7;CUNEIFORM SIGN SUM;Lo;0;L;;;;;N;;;;;
+122E8;CUNEIFORM SIGN SUMASH;Lo;0;L;;;;;N;;;;;
+122E9;CUNEIFORM SIGN SUR;Lo;0;L;;;;;N;;;;;
+122EA;CUNEIFORM SIGN SUR9;Lo;0;L;;;;;N;;;;;
+122EB;CUNEIFORM SIGN TA;Lo;0;L;;;;;N;;;;;
+122EC;CUNEIFORM SIGN TA ASTERISK;Lo;0;L;;;;;N;;;;;
+122ED;CUNEIFORM SIGN TA TIMES HI;Lo;0;L;;;;;N;;;;;
+122EE;CUNEIFORM SIGN TA TIMES MI;Lo;0;L;;;;;N;;;;;
+122EF;CUNEIFORM SIGN TA GUNU;Lo;0;L;;;;;N;;;;;
+122F0;CUNEIFORM SIGN TAB;Lo;0;L;;;;;N;;;;;
+122F1;CUNEIFORM SIGN TAB OVER TAB NI OVER NI DISH OVER DISH;Lo;0;L;;;;;N;;;;;
+122F2;CUNEIFORM SIGN TAB SQUARED;Lo;0;L;;;;;N;;;;;
+122F3;CUNEIFORM SIGN TAG;Lo;0;L;;;;;N;;;;;
+122F4;CUNEIFORM SIGN TAG TIMES BI;Lo;0;L;;;;;N;;;;;
+122F5;CUNEIFORM SIGN TAG TIMES GUD;Lo;0;L;;;;;N;;;;;
+122F6;CUNEIFORM SIGN TAG TIMES SHE;Lo;0;L;;;;;N;;;;;
+122F7;CUNEIFORM SIGN TAG TIMES SHU;Lo;0;L;;;;;N;;;;;
+122F8;CUNEIFORM SIGN TAG TIMES TUG2;Lo;0;L;;;;;N;;;;;
+122F9;CUNEIFORM SIGN TAG TIMES UD;Lo;0;L;;;;;N;;;;;
+122FA;CUNEIFORM SIGN TAK4;Lo;0;L;;;;;N;;;;;
+122FB;CUNEIFORM SIGN TAR;Lo;0;L;;;;;N;;;;;
+122FC;CUNEIFORM SIGN TE;Lo;0;L;;;;;N;;;;;
+122FD;CUNEIFORM SIGN TE GUNU;Lo;0;L;;;;;N;;;;;
+122FE;CUNEIFORM SIGN TI;Lo;0;L;;;;;N;;;;;
+122FF;CUNEIFORM SIGN TI TENU;Lo;0;L;;;;;N;;;;;
+12300;CUNEIFORM SIGN TIL;Lo;0;L;;;;;N;;;;;
+12301;CUNEIFORM SIGN TIR;Lo;0;L;;;;;N;;;;;
+12302;CUNEIFORM SIGN TIR TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12303;CUNEIFORM SIGN TIR OVER TIR;Lo;0;L;;;;;N;;;;;
+12304;CUNEIFORM SIGN TIR OVER TIR GAD OVER GAD GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+12305;CUNEIFORM SIGN TU;Lo;0;L;;;;;N;;;;;
+12306;CUNEIFORM SIGN TUG2;Lo;0;L;;;;;N;;;;;
+12307;CUNEIFORM SIGN TUK;Lo;0;L;;;;;N;;;;;
+12308;CUNEIFORM SIGN TUM;Lo;0;L;;;;;N;;;;;
+12309;CUNEIFORM SIGN TUR;Lo;0;L;;;;;N;;;;;
+1230A;CUNEIFORM SIGN TUR OVER TUR ZA OVER ZA;Lo;0;L;;;;;N;;;;;
+1230B;CUNEIFORM SIGN U;Lo;0;L;;;;;N;;;;;
+1230C;CUNEIFORM SIGN U GUD;Lo;0;L;;;;;N;;;;;
+1230D;CUNEIFORM SIGN U U U;Lo;0;L;;;;;N;;;;;
+1230E;CUNEIFORM SIGN U OVER U PA OVER PA GAR OVER GAR;Lo;0;L;;;;;N;;;;;
+1230F;CUNEIFORM SIGN U OVER U SUR OVER SUR;Lo;0;L;;;;;N;;;;;
+12310;CUNEIFORM SIGN U OVER U U REVERSED OVER U REVERSED;Lo;0;L;;;;;N;;;;;
+12311;CUNEIFORM SIGN U2;Lo;0;L;;;;;N;;;;;
+12312;CUNEIFORM SIGN UB;Lo;0;L;;;;;N;;;;;
+12313;CUNEIFORM SIGN UD;Lo;0;L;;;;;N;;;;;
+12314;CUNEIFORM SIGN UD KUSHU2;Lo;0;L;;;;;N;;;;;
+12315;CUNEIFORM SIGN UD TIMES BAD;Lo;0;L;;;;;N;;;;;
+12316;CUNEIFORM SIGN UD TIMES MI;Lo;0;L;;;;;N;;;;;
+12317;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U;Lo;0;L;;;;;N;;;;;
+12318;CUNEIFORM SIGN UD TIMES U PLUS U PLUS U GUNU;Lo;0;L;;;;;N;;;;;
+12319;CUNEIFORM SIGN UD GUNU;Lo;0;L;;;;;N;;;;;
+1231A;CUNEIFORM SIGN UD SHESHIG;Lo;0;L;;;;;N;;;;;
+1231B;CUNEIFORM SIGN UD SHESHIG TIMES BAD;Lo;0;L;;;;;N;;;;;
+1231C;CUNEIFORM SIGN UDUG;Lo;0;L;;;;;N;;;;;
+1231D;CUNEIFORM SIGN UM;Lo;0;L;;;;;N;;;;;
+1231E;CUNEIFORM SIGN UM TIMES LAGAB;Lo;0;L;;;;;N;;;;;
+1231F;CUNEIFORM SIGN UM TIMES ME PLUS DA;Lo;0;L;;;;;N;;;;;
+12320;CUNEIFORM SIGN UM TIMES SHA3;Lo;0;L;;;;;N;;;;;
+12321;CUNEIFORM SIGN UM TIMES U;Lo;0;L;;;;;N;;;;;
+12322;CUNEIFORM SIGN UMBIN;Lo;0;L;;;;;N;;;;;
+12323;CUNEIFORM SIGN UMUM;Lo;0;L;;;;;N;;;;;
+12324;CUNEIFORM SIGN UMUM TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+12325;CUNEIFORM SIGN UMUM TIMES PA;Lo;0;L;;;;;N;;;;;
+12326;CUNEIFORM SIGN UN;Lo;0;L;;;;;N;;;;;
+12327;CUNEIFORM SIGN UN GUNU;Lo;0;L;;;;;N;;;;;
+12328;CUNEIFORM SIGN UR;Lo;0;L;;;;;N;;;;;
+12329;CUNEIFORM SIGN UR CROSSING UR;Lo;0;L;;;;;N;;;;;
+1232A;CUNEIFORM SIGN UR SHESHIG;Lo;0;L;;;;;N;;;;;
+1232B;CUNEIFORM SIGN UR2;Lo;0;L;;;;;N;;;;;
+1232C;CUNEIFORM SIGN UR2 TIMES A PLUS HA;Lo;0;L;;;;;N;;;;;
+1232D;CUNEIFORM SIGN UR2 TIMES A PLUS NA;Lo;0;L;;;;;N;;;;;
+1232E;CUNEIFORM SIGN UR2 TIMES AL;Lo;0;L;;;;;N;;;;;
+1232F;CUNEIFORM SIGN UR2 TIMES HA;Lo;0;L;;;;;N;;;;;
+12330;CUNEIFORM SIGN UR2 TIMES NUN;Lo;0;L;;;;;N;;;;;
+12331;CUNEIFORM SIGN UR2 TIMES U2;Lo;0;L;;;;;N;;;;;
+12332;CUNEIFORM SIGN UR2 TIMES U2 PLUS ASH;Lo;0;L;;;;;N;;;;;
+12333;CUNEIFORM SIGN UR2 TIMES U2 PLUS BI;Lo;0;L;;;;;N;;;;;
+12334;CUNEIFORM SIGN UR4;Lo;0;L;;;;;N;;;;;
+12335;CUNEIFORM SIGN URI;Lo;0;L;;;;;N;;;;;
+12336;CUNEIFORM SIGN URI3;Lo;0;L;;;;;N;;;;;
+12337;CUNEIFORM SIGN URU;Lo;0;L;;;;;N;;;;;
+12338;CUNEIFORM SIGN URU TIMES A;Lo;0;L;;;;;N;;;;;
+12339;CUNEIFORM SIGN URU TIMES ASHGAB;Lo;0;L;;;;;N;;;;;
+1233A;CUNEIFORM SIGN URU TIMES BAR;Lo;0;L;;;;;N;;;;;
+1233B;CUNEIFORM SIGN URU TIMES DUN;Lo;0;L;;;;;N;;;;;
+1233C;CUNEIFORM SIGN URU TIMES GA;Lo;0;L;;;;;N;;;;;
+1233D;CUNEIFORM SIGN URU TIMES GAL;Lo;0;L;;;;;N;;;;;
+1233E;CUNEIFORM SIGN URU TIMES GAN2 TENU;Lo;0;L;;;;;N;;;;;
+1233F;CUNEIFORM SIGN URU TIMES GAR;Lo;0;L;;;;;N;;;;;
+12340;CUNEIFORM SIGN URU TIMES GU;Lo;0;L;;;;;N;;;;;
+12341;CUNEIFORM SIGN URU TIMES HA;Lo;0;L;;;;;N;;;;;
+12342;CUNEIFORM SIGN URU TIMES IGI;Lo;0;L;;;;;N;;;;;
+12343;CUNEIFORM SIGN URU TIMES IM;Lo;0;L;;;;;N;;;;;
+12344;CUNEIFORM SIGN URU TIMES ISH;Lo;0;L;;;;;N;;;;;
+12345;CUNEIFORM SIGN URU TIMES KI;Lo;0;L;;;;;N;;;;;
+12346;CUNEIFORM SIGN URU TIMES LUM;Lo;0;L;;;;;N;;;;;
+12347;CUNEIFORM SIGN URU TIMES MIN;Lo;0;L;;;;;N;;;;;
+12348;CUNEIFORM SIGN URU TIMES PA;Lo;0;L;;;;;N;;;;;
+12349;CUNEIFORM SIGN URU TIMES SHE;Lo;0;L;;;;;N;;;;;
+1234A;CUNEIFORM SIGN URU TIMES SIG4;Lo;0;L;;;;;N;;;;;
+1234B;CUNEIFORM SIGN URU TIMES TU;Lo;0;L;;;;;N;;;;;
+1234C;CUNEIFORM SIGN URU TIMES U PLUS GUD;Lo;0;L;;;;;N;;;;;
+1234D;CUNEIFORM SIGN URU TIMES UD;Lo;0;L;;;;;N;;;;;
+1234E;CUNEIFORM SIGN URU TIMES URUDA;Lo;0;L;;;;;N;;;;;
+1234F;CUNEIFORM SIGN URUDA;Lo;0;L;;;;;N;;;;;
+12350;CUNEIFORM SIGN URUDA TIMES U;Lo;0;L;;;;;N;;;;;
+12351;CUNEIFORM SIGN USH;Lo;0;L;;;;;N;;;;;
+12352;CUNEIFORM SIGN USH TIMES A;Lo;0;L;;;;;N;;;;;
+12353;CUNEIFORM SIGN USH TIMES KU;Lo;0;L;;;;;N;;;;;
+12354;CUNEIFORM SIGN USH TIMES KUR;Lo;0;L;;;;;N;;;;;
+12355;CUNEIFORM SIGN USH TIMES TAK4;Lo;0;L;;;;;N;;;;;
+12356;CUNEIFORM SIGN USHX;Lo;0;L;;;;;N;;;;;
+12357;CUNEIFORM SIGN USH2;Lo;0;L;;;;;N;;;;;
+12358;CUNEIFORM SIGN USHUMX;Lo;0;L;;;;;N;;;;;
+12359;CUNEIFORM SIGN UTUKI;Lo;0;L;;;;;N;;;;;
+1235A;CUNEIFORM SIGN UZ3;Lo;0;L;;;;;N;;;;;
+1235B;CUNEIFORM SIGN UZ3 TIMES KASKAL;Lo;0;L;;;;;N;;;;;
+1235C;CUNEIFORM SIGN UZU;Lo;0;L;;;;;N;;;;;
+1235D;CUNEIFORM SIGN ZA;Lo;0;L;;;;;N;;;;;
+1235E;CUNEIFORM SIGN ZA TENU;Lo;0;L;;;;;N;;;;;
+1235F;CUNEIFORM SIGN ZA SQUARED TIMES KUR;Lo;0;L;;;;;N;;;;;
+12360;CUNEIFORM SIGN ZAG;Lo;0;L;;;;;N;;;;;
+12361;CUNEIFORM SIGN ZAMX;Lo;0;L;;;;;N;;;;;
+12362;CUNEIFORM SIGN ZE2;Lo;0;L;;;;;N;;;;;
+12363;CUNEIFORM SIGN ZI;Lo;0;L;;;;;N;;;;;
+12364;CUNEIFORM SIGN ZI OVER ZI;Lo;0;L;;;;;N;;;;;
+12365;CUNEIFORM SIGN ZI3;Lo;0;L;;;;;N;;;;;
+12366;CUNEIFORM SIGN ZIB;Lo;0;L;;;;;N;;;;;
+12367;CUNEIFORM SIGN ZIB KABA TENU;Lo;0;L;;;;;N;;;;;
+12368;CUNEIFORM SIGN ZIG;Lo;0;L;;;;;N;;;;;
+12369;CUNEIFORM SIGN ZIZ2;Lo;0;L;;;;;N;;;;;
+1236A;CUNEIFORM SIGN ZU;Lo;0;L;;;;;N;;;;;
+1236B;CUNEIFORM SIGN ZU5;Lo;0;L;;;;;N;;;;;
+1236C;CUNEIFORM SIGN ZU5 TIMES A;Lo;0;L;;;;;N;;;;;
+1236D;CUNEIFORM SIGN ZUBUR;Lo;0;L;;;;;N;;;;;
+1236E;CUNEIFORM SIGN ZUM;Lo;0;L;;;;;N;;;;;
+12400;CUNEIFORM NUMERIC SIGN TWO ASH;Nl;0;L;;;;2;N;;;;;
+12401;CUNEIFORM NUMERIC SIGN THREE ASH;Nl;0;L;;;;3;N;;;;;
+12402;CUNEIFORM NUMERIC SIGN FOUR ASH;Nl;0;L;;;;4;N;;;;;
+12403;CUNEIFORM NUMERIC SIGN FIVE ASH;Nl;0;L;;;;5;N;;;;;
+12404;CUNEIFORM NUMERIC SIGN SIX ASH;Nl;0;L;;;;6;N;;;;;
+12405;CUNEIFORM NUMERIC SIGN SEVEN ASH;Nl;0;L;;;;7;N;;;;;
+12406;CUNEIFORM NUMERIC SIGN EIGHT ASH;Nl;0;L;;;;8;N;;;;;
+12407;CUNEIFORM NUMERIC SIGN NINE ASH;Nl;0;L;;;;9;N;;;;;
+12408;CUNEIFORM NUMERIC SIGN THREE DISH;Nl;0;L;;;;3;N;;;;;
+12409;CUNEIFORM NUMERIC SIGN FOUR DISH;Nl;0;L;;;;4;N;;;;;
+1240A;CUNEIFORM NUMERIC SIGN FIVE DISH;Nl;0;L;;;;5;N;;;;;
+1240B;CUNEIFORM NUMERIC SIGN SIX DISH;Nl;0;L;;;;6;N;;;;;
+1240C;CUNEIFORM NUMERIC SIGN SEVEN DISH;Nl;0;L;;;;7;N;;;;;
+1240D;CUNEIFORM NUMERIC SIGN EIGHT DISH;Nl;0;L;;;;8;N;;;;;
+1240E;CUNEIFORM NUMERIC SIGN NINE DISH;Nl;0;L;;;;9;N;;;;;
+1240F;CUNEIFORM NUMERIC SIGN FOUR U;Nl;0;L;;;;4;N;;;;;
+12410;CUNEIFORM NUMERIC SIGN FIVE U;Nl;0;L;;;;5;N;;;;;
+12411;CUNEIFORM NUMERIC SIGN SIX U;Nl;0;L;;;;6;N;;;;;
+12412;CUNEIFORM NUMERIC SIGN SEVEN U;Nl;0;L;;;;7;N;;;;;
+12413;CUNEIFORM NUMERIC SIGN EIGHT U;Nl;0;L;;;;8;N;;;;;
+12414;CUNEIFORM NUMERIC SIGN NINE U;Nl;0;L;;;;9;N;;;;;
+12415;CUNEIFORM NUMERIC SIGN ONE GESH2;Nl;0;L;;;;1;N;;;;;
+12416;CUNEIFORM NUMERIC SIGN TWO GESH2;Nl;0;L;;;;2;N;;;;;
+12417;CUNEIFORM NUMERIC SIGN THREE GESH2;Nl;0;L;;;;3;N;;;;;
+12418;CUNEIFORM NUMERIC SIGN FOUR GESH2;Nl;0;L;;;;4;N;;;;;
+12419;CUNEIFORM NUMERIC SIGN FIVE GESH2;Nl;0;L;;;;5;N;;;;;
+1241A;CUNEIFORM NUMERIC SIGN SIX GESH2;Nl;0;L;;;;6;N;;;;;
+1241B;CUNEIFORM NUMERIC SIGN SEVEN GESH2;Nl;0;L;;;;7;N;;;;;
+1241C;CUNEIFORM NUMERIC SIGN EIGHT GESH2;Nl;0;L;;;;8;N;;;;;
+1241D;CUNEIFORM NUMERIC SIGN NINE GESH2;Nl;0;L;;;;9;N;;;;;
+1241E;CUNEIFORM NUMERIC SIGN ONE GESHU;Nl;0;L;;;;1;N;;;;;
+1241F;CUNEIFORM NUMERIC SIGN TWO GESHU;Nl;0;L;;;;2;N;;;;;
+12420;CUNEIFORM NUMERIC SIGN THREE GESHU;Nl;0;L;;;;3;N;;;;;
+12421;CUNEIFORM NUMERIC SIGN FOUR GESHU;Nl;0;L;;;;4;N;;;;;
+12422;CUNEIFORM NUMERIC SIGN FIVE GESHU;Nl;0;L;;;;5;N;;;;;
+12423;CUNEIFORM NUMERIC SIGN TWO SHAR2;Nl;0;L;;;;2;N;;;;;
+12424;CUNEIFORM NUMERIC SIGN THREE SHAR2;Nl;0;L;;;;3;N;;;;;
+12425;CUNEIFORM NUMERIC SIGN THREE SHAR2 VARIANT FORM;Nl;0;L;;;;3;N;;;;;
+12426;CUNEIFORM NUMERIC SIGN FOUR SHAR2;Nl;0;L;;;;4;N;;;;;
+12427;CUNEIFORM NUMERIC SIGN FIVE SHAR2;Nl;0;L;;;;5;N;;;;;
+12428;CUNEIFORM NUMERIC SIGN SIX SHAR2;Nl;0;L;;;;6;N;;;;;
+12429;CUNEIFORM NUMERIC SIGN SEVEN SHAR2;Nl;0;L;;;;7;N;;;;;
+1242A;CUNEIFORM NUMERIC SIGN EIGHT SHAR2;Nl;0;L;;;;8;N;;;;;
+1242B;CUNEIFORM NUMERIC SIGN NINE SHAR2;Nl;0;L;;;;9;N;;;;;
+1242C;CUNEIFORM NUMERIC SIGN ONE SHARU;Nl;0;L;;;;1;N;;;;;
+1242D;CUNEIFORM NUMERIC SIGN TWO SHARU;Nl;0;L;;;;2;N;;;;;
+1242E;CUNEIFORM NUMERIC SIGN THREE SHARU;Nl;0;L;;;;3;N;;;;;
+1242F;CUNEIFORM NUMERIC SIGN THREE SHARU VARIANT FORM;Nl;0;L;;;;3;N;;;;;
+12430;CUNEIFORM NUMERIC SIGN FOUR SHARU;Nl;0;L;;;;4;N;;;;;
+12431;CUNEIFORM NUMERIC SIGN FIVE SHARU;Nl;0;L;;;;5;N;;;;;
+12432;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS DISH;Nl;0;L;;;;;N;;;;;
+12433;CUNEIFORM NUMERIC SIGN SHAR2 TIMES GAL PLUS MIN;Nl;0;L;;;;;N;;;;;
+12434;CUNEIFORM NUMERIC SIGN ONE BURU;Nl;0;L;;;;1;N;;;;;
+12435;CUNEIFORM NUMERIC SIGN TWO BURU;Nl;0;L;;;;2;N;;;;;
+12436;CUNEIFORM NUMERIC SIGN THREE BURU;Nl;0;L;;;;3;N;;;;;
+12437;CUNEIFORM NUMERIC SIGN THREE BURU VARIANT FORM;Nl;0;L;;;;3;N;;;;;
+12438;CUNEIFORM NUMERIC SIGN FOUR BURU;Nl;0;L;;;;4;N;;;;;
+12439;CUNEIFORM NUMERIC SIGN FIVE BURU;Nl;0;L;;;;5;N;;;;;
+1243A;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH16;Nl;0;L;;;;3;N;;;;;
+1243B;CUNEIFORM NUMERIC SIGN THREE VARIANT FORM ESH21;Nl;0;L;;;;3;N;;;;;
+1243C;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU;Nl;0;L;;;;4;N;;;;;
+1243D;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU4;Nl;0;L;;;;4;N;;;;;
+1243E;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU A;Nl;0;L;;;;4;N;;;;;
+1243F;CUNEIFORM NUMERIC SIGN FOUR VARIANT FORM LIMMU B;Nl;0;L;;;;4;N;;;;;
+12440;CUNEIFORM NUMERIC SIGN SIX VARIANT FORM ASH9;Nl;0;L;;;;6;N;;;;;
+12441;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN3;Nl;0;L;;;;7;N;;;;;
+12442;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN A;Nl;0;L;;;;7;N;;;;;
+12443;CUNEIFORM NUMERIC SIGN SEVEN VARIANT FORM IMIN B;Nl;0;L;;;;7;N;;;;;
+12444;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU;Nl;0;L;;;;8;N;;;;;
+12445;CUNEIFORM NUMERIC SIGN EIGHT VARIANT FORM USSU3;Nl;0;L;;;;8;N;;;;;
+12446;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU;Nl;0;L;;;;9;N;;;;;
+12447;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU3;Nl;0;L;;;;9;N;;;;;
+12448;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU4;Nl;0;L;;;;9;N;;;;;
+12449;CUNEIFORM NUMERIC SIGN NINE VARIANT FORM ILIMMU A;Nl;0;L;;;;9;N;;;;;
+1244A;CUNEIFORM NUMERIC SIGN TWO ASH TENU;Nl;0;L;;;;2;N;;;;;
+1244B;CUNEIFORM NUMERIC SIGN THREE ASH TENU;Nl;0;L;;;;3;N;;;;;
+1244C;CUNEIFORM NUMERIC SIGN FOUR ASH TENU;Nl;0;L;;;;4;N;;;;;
+1244D;CUNEIFORM NUMERIC SIGN FIVE ASH TENU;Nl;0;L;;;;5;N;;;;;
+1244E;CUNEIFORM NUMERIC SIGN SIX ASH TENU;Nl;0;L;;;;6;N;;;;;
+1244F;CUNEIFORM NUMERIC SIGN ONE BAN2;Nl;0;L;;;;1;N;;;;;
+12450;CUNEIFORM NUMERIC SIGN TWO BAN2;Nl;0;L;;;;2;N;;;;;
+12451;CUNEIFORM NUMERIC SIGN THREE BAN2;Nl;0;L;;;;3;N;;;;;
+12452;CUNEIFORM NUMERIC SIGN FOUR BAN2;Nl;0;L;;;;4;N;;;;;
+12453;CUNEIFORM NUMERIC SIGN FOUR BAN2 VARIANT FORM;Nl;0;L;;;;4;N;;;;;
+12454;CUNEIFORM NUMERIC SIGN FIVE BAN2;Nl;0;L;;;;5;N;;;;;
+12455;CUNEIFORM NUMERIC SIGN FIVE BAN2 VARIANT FORM;Nl;0;L;;;;5;N;;;;;
+12456;CUNEIFORM NUMERIC SIGN NIGIDAMIN;Nl;0;L;;;;;N;;;;;
+12457;CUNEIFORM NUMERIC SIGN NIGIDAESH;Nl;0;L;;;;;N;;;;;
+12458;CUNEIFORM NUMERIC SIGN ONE ESHE3;Nl;0;L;;;;1;N;;;;;
+12459;CUNEIFORM NUMERIC SIGN TWO ESHE3;Nl;0;L;;;;2;N;;;;;
+1245A;CUNEIFORM NUMERIC SIGN ONE THIRD DISH;Nl;0;L;;;;1/3;N;;;;;
+1245B;CUNEIFORM NUMERIC SIGN TWO THIRDS DISH;Nl;0;L;;;;2/3;N;;;;;
+1245C;CUNEIFORM NUMERIC SIGN FIVE SIXTHS DISH;Nl;0;L;;;;5/6;N;;;;;
+1245D;CUNEIFORM NUMERIC SIGN ONE THIRD VARIANT FORM A;Nl;0;L;;;;1/3;N;;;;;
+1245E;CUNEIFORM NUMERIC SIGN TWO THIRDS VARIANT FORM A;Nl;0;L;;;;2/3;N;;;;;
+1245F;CUNEIFORM NUMERIC SIGN ONE EIGHTH ASH;Nl;0;L;;;;1/8;N;;;;;
+12460;CUNEIFORM NUMERIC SIGN ONE QUARTER ASH;Nl;0;L;;;;1/4;N;;;;;
+12461;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE SIXTH;Nl;0;L;;;;1/6;N;;;;;
+12462;CUNEIFORM NUMERIC SIGN OLD ASSYRIAN ONE QUARTER;Nl;0;L;;;;1/4;N;;;;;
+12470;CUNEIFORM PUNCTUATION SIGN OLD ASSYRIAN WORD DIVIDER;Po;0;L;;;;;N;;;;;
+12471;CUNEIFORM PUNCTUATION SIGN VERTICAL COLON;Po;0;L;;;;;N;;;;;
+12472;CUNEIFORM PUNCTUATION SIGN DIAGONAL COLON;Po;0;L;;;;;N;;;;;
+12473;CUNEIFORM PUNCTUATION SIGN DIAGONAL TRICOLON;Po;0;L;;;;;N;;;;;
+1D000;BYZANTINE MUSICAL SYMBOL PSILI;So;0;L;;;;;N;;;;;
+1D001;BYZANTINE MUSICAL SYMBOL DASEIA;So;0;L;;;;;N;;;;;
+1D002;BYZANTINE MUSICAL SYMBOL PERISPOMENI;So;0;L;;;;;N;;;;;
+1D003;BYZANTINE MUSICAL SYMBOL OXEIA EKFONITIKON;So;0;L;;;;;N;;;;;
+1D004;BYZANTINE MUSICAL SYMBOL OXEIA DIPLI;So;0;L;;;;;N;;;;;
+1D005;BYZANTINE MUSICAL SYMBOL VAREIA EKFONITIKON;So;0;L;;;;;N;;;;;
+1D006;BYZANTINE MUSICAL SYMBOL VAREIA DIPLI;So;0;L;;;;;N;;;;;
+1D007;BYZANTINE MUSICAL SYMBOL KATHISTI;So;0;L;;;;;N;;;;;
+1D008;BYZANTINE MUSICAL SYMBOL SYRMATIKI;So;0;L;;;;;N;;;;;
+1D009;BYZANTINE MUSICAL SYMBOL PARAKLITIKI;So;0;L;;;;;N;;;;;
+1D00A;BYZANTINE MUSICAL SYMBOL YPOKRISIS;So;0;L;;;;;N;;;;;
+1D00B;BYZANTINE MUSICAL SYMBOL YPOKRISIS DIPLI;So;0;L;;;;;N;;;;;
+1D00C;BYZANTINE MUSICAL SYMBOL KREMASTI;So;0;L;;;;;N;;;;;
+1D00D;BYZANTINE MUSICAL SYMBOL APESO EKFONITIKON;So;0;L;;;;;N;;;;;
+1D00E;BYZANTINE MUSICAL SYMBOL EXO EKFONITIKON;So;0;L;;;;;N;;;;;
+1D00F;BYZANTINE MUSICAL SYMBOL TELEIA;So;0;L;;;;;N;;;;;
+1D010;BYZANTINE MUSICAL SYMBOL KENTIMATA;So;0;L;;;;;N;;;;;
+1D011;BYZANTINE MUSICAL SYMBOL APOSTROFOS;So;0;L;;;;;N;;;;;
+1D012;BYZANTINE MUSICAL SYMBOL APOSTROFOS DIPLI;So;0;L;;;;;N;;;;;
+1D013;BYZANTINE MUSICAL SYMBOL SYNEVMA;So;0;L;;;;;N;;;;;
+1D014;BYZANTINE MUSICAL SYMBOL THITA;So;0;L;;;;;N;;;;;
+1D015;BYZANTINE MUSICAL SYMBOL OLIGON ARCHAION;So;0;L;;;;;N;;;;;
+1D016;BYZANTINE MUSICAL SYMBOL GORGON ARCHAION;So;0;L;;;;;N;;;;;
+1D017;BYZANTINE MUSICAL SYMBOL PSILON;So;0;L;;;;;N;;;;;
+1D018;BYZANTINE MUSICAL SYMBOL CHAMILON;So;0;L;;;;;N;;;;;
+1D019;BYZANTINE MUSICAL SYMBOL VATHY;So;0;L;;;;;N;;;;;
+1D01A;BYZANTINE MUSICAL SYMBOL ISON ARCHAION;So;0;L;;;;;N;;;;;
+1D01B;BYZANTINE MUSICAL SYMBOL KENTIMA ARCHAION;So;0;L;;;;;N;;;;;
+1D01C;BYZANTINE MUSICAL SYMBOL KENTIMATA ARCHAION;So;0;L;;;;;N;;;;;
+1D01D;BYZANTINE MUSICAL SYMBOL SAXIMATA;So;0;L;;;;;N;;;;;
+1D01E;BYZANTINE MUSICAL SYMBOL PARICHON;So;0;L;;;;;N;;;;;
+1D01F;BYZANTINE MUSICAL SYMBOL STAVROS APODEXIA;So;0;L;;;;;N;;;;;
+1D020;BYZANTINE MUSICAL SYMBOL OXEIAI ARCHAION;So;0;L;;;;;N;;;;;
+1D021;BYZANTINE MUSICAL SYMBOL VAREIAI ARCHAION;So;0;L;;;;;N;;;;;
+1D022;BYZANTINE MUSICAL SYMBOL APODERMA ARCHAION;So;0;L;;;;;N;;;;;
+1D023;BYZANTINE MUSICAL SYMBOL APOTHEMA;So;0;L;;;;;N;;;;;
+1D024;BYZANTINE MUSICAL SYMBOL KLASMA;So;0;L;;;;;N;;;;;
+1D025;BYZANTINE MUSICAL SYMBOL REVMA;So;0;L;;;;;N;;;;;
+1D026;BYZANTINE MUSICAL SYMBOL PIASMA ARCHAION;So;0;L;;;;;N;;;;;
+1D027;BYZANTINE MUSICAL SYMBOL TINAGMA;So;0;L;;;;;N;;;;;
+1D028;BYZANTINE MUSICAL SYMBOL ANATRICHISMA;So;0;L;;;;;N;;;;;
+1D029;BYZANTINE MUSICAL SYMBOL SEISMA;So;0;L;;;;;N;;;;;
+1D02A;BYZANTINE MUSICAL SYMBOL SYNAGMA ARCHAION;So;0;L;;;;;N;;;;;
+1D02B;BYZANTINE MUSICAL SYMBOL SYNAGMA META STAVROU;So;0;L;;;;;N;;;;;
+1D02C;BYZANTINE MUSICAL SYMBOL OYRANISMA ARCHAION;So;0;L;;;;;N;;;;;
+1D02D;BYZANTINE MUSICAL SYMBOL THEMA;So;0;L;;;;;N;;;;;
+1D02E;BYZANTINE MUSICAL SYMBOL LEMOI;So;0;L;;;;;N;;;;;
+1D02F;BYZANTINE MUSICAL SYMBOL DYO;So;0;L;;;;;N;;;;;
+1D030;BYZANTINE MUSICAL SYMBOL TRIA;So;0;L;;;;;N;;;;;
+1D031;BYZANTINE MUSICAL SYMBOL TESSERA;So;0;L;;;;;N;;;;;
+1D032;BYZANTINE MUSICAL SYMBOL KRATIMATA;So;0;L;;;;;N;;;;;
+1D033;BYZANTINE MUSICAL SYMBOL APESO EXO NEO;So;0;L;;;;;N;;;;;
+1D034;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION;So;0;L;;;;;N;;;;;
+1D035;BYZANTINE MUSICAL SYMBOL IMIFTHORA;So;0;L;;;;;N;;;;;
+1D036;BYZANTINE MUSICAL SYMBOL TROMIKON ARCHAION;So;0;L;;;;;N;;;;;
+1D037;BYZANTINE MUSICAL SYMBOL KATAVA TROMIKON;So;0;L;;;;;N;;;;;
+1D038;BYZANTINE MUSICAL SYMBOL PELASTON;So;0;L;;;;;N;;;;;
+1D039;BYZANTINE MUSICAL SYMBOL PSIFISTON;So;0;L;;;;;N;;;;;
+1D03A;BYZANTINE MUSICAL SYMBOL KONTEVMA;So;0;L;;;;;N;;;;;
+1D03B;BYZANTINE MUSICAL SYMBOL CHOREVMA ARCHAION;So;0;L;;;;;N;;;;;
+1D03C;BYZANTINE MUSICAL SYMBOL RAPISMA;So;0;L;;;;;N;;;;;
+1D03D;BYZANTINE MUSICAL SYMBOL PARAKALESMA ARCHAION;So;0;L;;;;;N;;;;;
+1D03E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI ARCHAION;So;0;L;;;;;N;;;;;
+1D03F;BYZANTINE MUSICAL SYMBOL ICHADIN;So;0;L;;;;;N;;;;;
+1D040;BYZANTINE MUSICAL SYMBOL NANA;So;0;L;;;;;N;;;;;
+1D041;BYZANTINE MUSICAL SYMBOL PETASMA;So;0;L;;;;;N;;;;;
+1D042;BYZANTINE MUSICAL SYMBOL KONTEVMA ALLO;So;0;L;;;;;N;;;;;
+1D043;BYZANTINE MUSICAL SYMBOL TROMIKON ALLO;So;0;L;;;;;N;;;;;
+1D044;BYZANTINE MUSICAL SYMBOL STRAGGISMATA;So;0;L;;;;;N;;;;;
+1D045;BYZANTINE MUSICAL SYMBOL GRONTHISMATA;So;0;L;;;;;N;;;;;
+1D046;BYZANTINE MUSICAL SYMBOL ISON NEO;So;0;L;;;;;N;;;;;
+1D047;BYZANTINE MUSICAL SYMBOL OLIGON NEO;So;0;L;;;;;N;;;;;
+1D048;BYZANTINE MUSICAL SYMBOL OXEIA NEO;So;0;L;;;;;N;;;;;
+1D049;BYZANTINE MUSICAL SYMBOL PETASTI;So;0;L;;;;;N;;;;;
+1D04A;BYZANTINE MUSICAL SYMBOL KOUFISMA;So;0;L;;;;;N;;;;;
+1D04B;BYZANTINE MUSICAL SYMBOL PETASTOKOUFISMA;So;0;L;;;;;N;;;;;
+1D04C;BYZANTINE MUSICAL SYMBOL KRATIMOKOUFISMA;So;0;L;;;;;N;;;;;
+1D04D;BYZANTINE MUSICAL SYMBOL PELASTON NEO;So;0;L;;;;;N;;;;;
+1D04E;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO ANO;So;0;L;;;;;N;;;;;
+1D04F;BYZANTINE MUSICAL SYMBOL KENTIMA NEO ANO;So;0;L;;;;;N;;;;;
+1D050;BYZANTINE MUSICAL SYMBOL YPSILI;So;0;L;;;;;N;;;;;
+1D051;BYZANTINE MUSICAL SYMBOL APOSTROFOS NEO;So;0;L;;;;;N;;;;;
+1D052;BYZANTINE MUSICAL SYMBOL APOSTROFOI SYNDESMOS NEO;So;0;L;;;;;N;;;;;
+1D053;BYZANTINE MUSICAL SYMBOL YPORROI;So;0;L;;;;;N;;;;;
+1D054;BYZANTINE MUSICAL SYMBOL KRATIMOYPORROON;So;0;L;;;;;N;;;;;
+1D055;BYZANTINE MUSICAL SYMBOL ELAFRON;So;0;L;;;;;N;;;;;
+1D056;BYZANTINE MUSICAL SYMBOL CHAMILI;So;0;L;;;;;N;;;;;
+1D057;BYZANTINE MUSICAL SYMBOL MIKRON ISON;So;0;L;;;;;N;;;;;
+1D058;BYZANTINE MUSICAL SYMBOL VAREIA NEO;So;0;L;;;;;N;;;;;
+1D059;BYZANTINE MUSICAL SYMBOL PIASMA NEO;So;0;L;;;;;N;;;;;
+1D05A;BYZANTINE MUSICAL SYMBOL PSIFISTON NEO;So;0;L;;;;;N;;;;;
+1D05B;BYZANTINE MUSICAL SYMBOL OMALON;So;0;L;;;;;N;;;;;
+1D05C;BYZANTINE MUSICAL SYMBOL ANTIKENOMA;So;0;L;;;;;N;;;;;
+1D05D;BYZANTINE MUSICAL SYMBOL LYGISMA;So;0;L;;;;;N;;;;;
+1D05E;BYZANTINE MUSICAL SYMBOL PARAKLITIKI NEO;So;0;L;;;;;N;;;;;
+1D05F;BYZANTINE MUSICAL SYMBOL PARAKALESMA NEO;So;0;L;;;;;N;;;;;
+1D060;BYZANTINE MUSICAL SYMBOL ETERON PARAKALESMA;So;0;L;;;;;N;;;;;
+1D061;BYZANTINE MUSICAL SYMBOL KYLISMA;So;0;L;;;;;N;;;;;
+1D062;BYZANTINE MUSICAL SYMBOL ANTIKENOKYLISMA;So;0;L;;;;;N;;;;;
+1D063;BYZANTINE MUSICAL SYMBOL TROMIKON NEO;So;0;L;;;;;N;;;;;
+1D064;BYZANTINE MUSICAL SYMBOL EKSTREPTON;So;0;L;;;;;N;;;;;
+1D065;BYZANTINE MUSICAL SYMBOL SYNAGMA NEO;So;0;L;;;;;N;;;;;
+1D066;BYZANTINE MUSICAL SYMBOL SYRMA;So;0;L;;;;;N;;;;;
+1D067;BYZANTINE MUSICAL SYMBOL CHOREVMA NEO;So;0;L;;;;;N;;;;;
+1D068;BYZANTINE MUSICAL SYMBOL EPEGERMA;So;0;L;;;;;N;;;;;
+1D069;BYZANTINE MUSICAL SYMBOL SEISMA NEO;So;0;L;;;;;N;;;;;
+1D06A;BYZANTINE MUSICAL SYMBOL XIRON KLASMA;So;0;L;;;;;N;;;;;
+1D06B;BYZANTINE MUSICAL SYMBOL TROMIKOPSIFISTON;So;0;L;;;;;N;;;;;
+1D06C;BYZANTINE MUSICAL SYMBOL PSIFISTOLYGISMA;So;0;L;;;;;N;;;;;
+1D06D;BYZANTINE MUSICAL SYMBOL TROMIKOLYGISMA;So;0;L;;;;;N;;;;;
+1D06E;BYZANTINE MUSICAL SYMBOL TROMIKOPARAKALESMA;So;0;L;;;;;N;;;;;
+1D06F;BYZANTINE MUSICAL SYMBOL PSIFISTOPARAKALESMA;So;0;L;;;;;N;;;;;
+1D070;BYZANTINE MUSICAL SYMBOL TROMIKOSYNAGMA;So;0;L;;;;;N;;;;;
+1D071;BYZANTINE MUSICAL SYMBOL PSIFISTOSYNAGMA;So;0;L;;;;;N;;;;;
+1D072;BYZANTINE MUSICAL SYMBOL GORGOSYNTHETON;So;0;L;;;;;N;;;;;
+1D073;BYZANTINE MUSICAL SYMBOL ARGOSYNTHETON;So;0;L;;;;;N;;;;;
+1D074;BYZANTINE MUSICAL SYMBOL ETERON ARGOSYNTHETON;So;0;L;;;;;N;;;;;
+1D075;BYZANTINE MUSICAL SYMBOL OYRANISMA NEO;So;0;L;;;;;N;;;;;
+1D076;BYZANTINE MUSICAL SYMBOL THEMATISMOS ESO;So;0;L;;;;;N;;;;;
+1D077;BYZANTINE MUSICAL SYMBOL THEMATISMOS EXO;So;0;L;;;;;N;;;;;
+1D078;BYZANTINE MUSICAL SYMBOL THEMA APLOUN;So;0;L;;;;;N;;;;;
+1D079;BYZANTINE MUSICAL SYMBOL THES KAI APOTHES;So;0;L;;;;;N;;;;;
+1D07A;BYZANTINE MUSICAL SYMBOL KATAVASMA;So;0;L;;;;;N;;;;;
+1D07B;BYZANTINE MUSICAL SYMBOL ENDOFONON;So;0;L;;;;;N;;;;;
+1D07C;BYZANTINE MUSICAL SYMBOL YFEN KATO;So;0;L;;;;;N;;;;;
+1D07D;BYZANTINE MUSICAL SYMBOL YFEN ANO;So;0;L;;;;;N;;;;;
+1D07E;BYZANTINE MUSICAL SYMBOL STAVROS;So;0;L;;;;;N;;;;;
+1D07F;BYZANTINE MUSICAL SYMBOL KLASMA ANO;So;0;L;;;;;N;;;;;
+1D080;BYZANTINE MUSICAL SYMBOL DIPLI ARCHAION;So;0;L;;;;;N;;;;;
+1D081;BYZANTINE MUSICAL SYMBOL KRATIMA ARCHAION;So;0;L;;;;;N;;;;;
+1D082;BYZANTINE MUSICAL SYMBOL KRATIMA ALLO;So;0;L;;;;;N;;;;;
+1D083;BYZANTINE MUSICAL SYMBOL KRATIMA NEO;So;0;L;;;;;N;;;;;
+1D084;BYZANTINE MUSICAL SYMBOL APODERMA NEO;So;0;L;;;;;N;;;;;
+1D085;BYZANTINE MUSICAL SYMBOL APLI;So;0;L;;;;;N;;;;;
+1D086;BYZANTINE MUSICAL SYMBOL DIPLI;So;0;L;;;;;N;;;;;
+1D087;BYZANTINE MUSICAL SYMBOL TRIPLI;So;0;L;;;;;N;;;;;
+1D088;BYZANTINE MUSICAL SYMBOL TETRAPLI;So;0;L;;;;;N;;;;;
+1D089;BYZANTINE MUSICAL SYMBOL KORONIS;So;0;L;;;;;N;;;;;
+1D08A;BYZANTINE MUSICAL SYMBOL LEIMMA ENOS CHRONOU;So;0;L;;;;;N;;;;;
+1D08B;BYZANTINE MUSICAL SYMBOL LEIMMA DYO CHRONON;So;0;L;;;;;N;;;;;
+1D08C;BYZANTINE MUSICAL SYMBOL LEIMMA TRION CHRONON;So;0;L;;;;;N;;;;;
+1D08D;BYZANTINE MUSICAL SYMBOL LEIMMA TESSARON CHRONON;So;0;L;;;;;N;;;;;
+1D08E;BYZANTINE MUSICAL SYMBOL LEIMMA IMISEOS CHRONOU;So;0;L;;;;;N;;;;;
+1D08F;BYZANTINE MUSICAL SYMBOL GORGON NEO ANO;So;0;L;;;;;N;;;;;
+1D090;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON ARISTERA;So;0;L;;;;;N;;;;;
+1D091;BYZANTINE MUSICAL SYMBOL GORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;;
+1D092;BYZANTINE MUSICAL SYMBOL DIGORGON;So;0;L;;;;;N;;;;;
+1D093;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA KATO;So;0;L;;;;;N;;;;;
+1D094;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON ARISTERA ANO;So;0;L;;;;;N;;;;;
+1D095;BYZANTINE MUSICAL SYMBOL DIGORGON PARESTIGMENON DEXIA;So;0;L;;;;;N;;;;;
+1D096;BYZANTINE MUSICAL SYMBOL TRIGORGON;So;0;L;;;;;N;;;;;
+1D097;BYZANTINE MUSICAL SYMBOL ARGON;So;0;L;;;;;N;;;;;
+1D098;BYZANTINE MUSICAL SYMBOL IMIDIARGON;So;0;L;;;;;N;;;;;
+1D099;BYZANTINE MUSICAL SYMBOL DIARGON;So;0;L;;;;;N;;;;;
+1D09A;BYZANTINE MUSICAL SYMBOL AGOGI POLI ARGI;So;0;L;;;;;N;;;;;
+1D09B;BYZANTINE MUSICAL SYMBOL AGOGI ARGOTERI;So;0;L;;;;;N;;;;;
+1D09C;BYZANTINE MUSICAL SYMBOL AGOGI ARGI;So;0;L;;;;;N;;;;;
+1D09D;BYZANTINE MUSICAL SYMBOL AGOGI METRIA;So;0;L;;;;;N;;;;;
+1D09E;BYZANTINE MUSICAL SYMBOL AGOGI MESI;So;0;L;;;;;N;;;;;
+1D09F;BYZANTINE MUSICAL SYMBOL AGOGI GORGI;So;0;L;;;;;N;;;;;
+1D0A0;BYZANTINE MUSICAL SYMBOL AGOGI GORGOTERI;So;0;L;;;;;N;;;;;
+1D0A1;BYZANTINE MUSICAL SYMBOL AGOGI POLI GORGI;So;0;L;;;;;N;;;;;
+1D0A2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOS ICHOS;So;0;L;;;;;N;;;;;
+1D0A3;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI PROTOS ICHOS;So;0;L;;;;;N;;;;;
+1D0A4;BYZANTINE MUSICAL SYMBOL MARTYRIA DEYTEROS ICHOS;So;0;L;;;;;N;;;;;
+1D0A5;BYZANTINE MUSICAL SYMBOL MARTYRIA ALLI DEYTEROS ICHOS;So;0;L;;;;;N;;;;;
+1D0A6;BYZANTINE MUSICAL SYMBOL MARTYRIA TRITOS ICHOS;So;0;L;;;;;N;;;;;
+1D0A7;BYZANTINE MUSICAL SYMBOL MARTYRIA TRIFONIAS;So;0;L;;;;;N;;;;;
+1D0A8;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS ICHOS;So;0;L;;;;;N;;;;;
+1D0A9;BYZANTINE MUSICAL SYMBOL MARTYRIA TETARTOS LEGETOS ICHOS;So;0;L;;;;;N;;;;;
+1D0AA;BYZANTINE MUSICAL SYMBOL MARTYRIA LEGETOS ICHOS;So;0;L;;;;;N;;;;;
+1D0AB;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS ICHOS;So;0;L;;;;;N;;;;;
+1D0AC;BYZANTINE MUSICAL SYMBOL ISAKIA TELOUS ICHIMATOS;So;0;L;;;;;N;;;;;
+1D0AD;BYZANTINE MUSICAL SYMBOL APOSTROFOI TELOUS ICHIMATOS;So;0;L;;;;;N;;;;;
+1D0AE;BYZANTINE MUSICAL SYMBOL FANEROSIS TETRAFONIAS;So;0;L;;;;;N;;;;;
+1D0AF;BYZANTINE MUSICAL SYMBOL FANEROSIS MONOFONIAS;So;0;L;;;;;N;;;;;
+1D0B0;BYZANTINE MUSICAL SYMBOL FANEROSIS DIFONIAS;So;0;L;;;;;N;;;;;
+1D0B1;BYZANTINE MUSICAL SYMBOL MARTYRIA VARYS ICHOS;So;0;L;;;;;N;;;;;
+1D0B2;BYZANTINE MUSICAL SYMBOL MARTYRIA PROTOVARYS ICHOS;So;0;L;;;;;N;;;;;
+1D0B3;BYZANTINE MUSICAL SYMBOL MARTYRIA PLAGIOS TETARTOS ICHOS;So;0;L;;;;;N;;;;;
+1D0B4;BYZANTINE MUSICAL SYMBOL GORTHMIKON N APLOUN;So;0;L;;;;;N;;;;;
+1D0B5;BYZANTINE MUSICAL SYMBOL GORTHMIKON N DIPLOUN;So;0;L;;;;;N;;;;;
+1D0B6;BYZANTINE MUSICAL SYMBOL ENARXIS KAI FTHORA VOU;So;0;L;;;;;N;;;;;
+1D0B7;BYZANTINE MUSICAL SYMBOL IMIFONON;So;0;L;;;;;N;;;;;
+1D0B8;BYZANTINE MUSICAL SYMBOL IMIFTHORON;So;0;L;;;;;N;;;;;
+1D0B9;BYZANTINE MUSICAL SYMBOL FTHORA ARCHAION DEYTEROU ICHOU;So;0;L;;;;;N;;;;;
+1D0BA;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI PA;So;0;L;;;;;N;;;;;
+1D0BB;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NANA;So;0;L;;;;;N;;;;;
+1D0BC;BYZANTINE MUSICAL SYMBOL FTHORA NAOS ICHOS;So;0;L;;;;;N;;;;;
+1D0BD;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI DI;So;0;L;;;;;N;;;;;
+1D0BE;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON DIATONON DI;So;0;L;;;;;N;;;;;
+1D0BF;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI KE;So;0;L;;;;;N;;;;;
+1D0C0;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI ZO;So;0;L;;;;;N;;;;;
+1D0C1;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI KATO;So;0;L;;;;;N;;;;;
+1D0C2;BYZANTINE MUSICAL SYMBOL FTHORA DIATONIKI NI ANO;So;0;L;;;;;N;;;;;
+1D0C3;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA DIFONIAS;So;0;L;;;;;N;;;;;
+1D0C4;BYZANTINE MUSICAL SYMBOL FTHORA MALAKON CHROMA MONOFONIAS;So;0;L;;;;;N;;;;;
+1D0C5;BYZANTINE MUSICAL SYMBOL FHTORA SKLIRON CHROMA VASIS;So;0;L;;;;;N;;;;;
+1D0C6;BYZANTINE MUSICAL SYMBOL FTHORA SKLIRON CHROMA SYNAFI;So;0;L;;;;;N;;;;;
+1D0C7;BYZANTINE MUSICAL SYMBOL FTHORA NENANO;So;0;L;;;;;N;;;;;
+1D0C8;BYZANTINE MUSICAL SYMBOL CHROA ZYGOS;So;0;L;;;;;N;;;;;
+1D0C9;BYZANTINE MUSICAL SYMBOL CHROA KLITON;So;0;L;;;;;N;;;;;
+1D0CA;BYZANTINE MUSICAL SYMBOL CHROA SPATHI;So;0;L;;;;;N;;;;;
+1D0CB;BYZANTINE MUSICAL SYMBOL FTHORA I YFESIS TETARTIMORION;So;0;L;;;;;N;;;;;
+1D0CC;BYZANTINE MUSICAL SYMBOL FTHORA ENARMONIOS ANTIFONIA;So;0;L;;;;;N;;;;;
+1D0CD;BYZANTINE MUSICAL SYMBOL YFESIS TRITIMORION;So;0;L;;;;;N;;;;;
+1D0CE;BYZANTINE MUSICAL SYMBOL DIESIS TRITIMORION;So;0;L;;;;;N;;;;;
+1D0CF;BYZANTINE MUSICAL SYMBOL DIESIS TETARTIMORION;So;0;L;;;;;N;;;;;
+1D0D0;BYZANTINE MUSICAL SYMBOL DIESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;;
+1D0D1;BYZANTINE MUSICAL SYMBOL DIESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;;
+1D0D2;BYZANTINE MUSICAL SYMBOL DIESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;;
+1D0D3;BYZANTINE MUSICAL SYMBOL DIESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;;
+1D0D4;BYZANTINE MUSICAL SYMBOL YFESIS APLI DYO DODEKATA;So;0;L;;;;;N;;;;;
+1D0D5;BYZANTINE MUSICAL SYMBOL YFESIS MONOGRAMMOS TESSERA DODEKATA;So;0;L;;;;;N;;;;;
+1D0D6;BYZANTINE MUSICAL SYMBOL YFESIS DIGRAMMOS EX DODEKATA;So;0;L;;;;;N;;;;;
+1D0D7;BYZANTINE MUSICAL SYMBOL YFESIS TRIGRAMMOS OKTO DODEKATA;So;0;L;;;;;N;;;;;
+1D0D8;BYZANTINE MUSICAL SYMBOL GENIKI DIESIS;So;0;L;;;;;N;;;;;
+1D0D9;BYZANTINE MUSICAL SYMBOL GENIKI YFESIS;So;0;L;;;;;N;;;;;
+1D0DA;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MIKRI;So;0;L;;;;;N;;;;;
+1D0DB;BYZANTINE MUSICAL SYMBOL DIASTOLI APLI MEGALI;So;0;L;;;;;N;;;;;
+1D0DC;BYZANTINE MUSICAL SYMBOL DIASTOLI DIPLI;So;0;L;;;;;N;;;;;
+1D0DD;BYZANTINE MUSICAL SYMBOL DIASTOLI THESEOS;So;0;L;;;;;N;;;;;
+1D0DE;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS;So;0;L;;;;;N;;;;;
+1D0DF;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS DISIMOU;So;0;L;;;;;N;;;;;
+1D0E0;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TRISIMOU;So;0;L;;;;;N;;;;;
+1D0E1;BYZANTINE MUSICAL SYMBOL SIMANSIS THESEOS TETRASIMOU;So;0;L;;;;;N;;;;;
+1D0E2;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS;So;0;L;;;;;N;;;;;
+1D0E3;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS DISIMOU;So;0;L;;;;;N;;;;;
+1D0E4;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TRISIMOU;So;0;L;;;;;N;;;;;
+1D0E5;BYZANTINE MUSICAL SYMBOL SIMANSIS ARSEOS TETRASIMOU;So;0;L;;;;;N;;;;;
+1D0E6;BYZANTINE MUSICAL SYMBOL DIGRAMMA GG;So;0;L;;;;;N;;;;;
+1D0E7;BYZANTINE MUSICAL SYMBOL DIFTOGGOS OU;So;0;L;;;;;N;;;;;
+1D0E8;BYZANTINE MUSICAL SYMBOL STIGMA;So;0;L;;;;;N;;;;;
+1D0E9;BYZANTINE MUSICAL SYMBOL ARKTIKO PA;So;0;L;;;;;N;;;;;
+1D0EA;BYZANTINE MUSICAL SYMBOL ARKTIKO VOU;So;0;L;;;;;N;;;;;
+1D0EB;BYZANTINE MUSICAL SYMBOL ARKTIKO GA;So;0;L;;;;;N;;;;;
+1D0EC;BYZANTINE MUSICAL SYMBOL ARKTIKO DI;So;0;L;;;;;N;;;;;
+1D0ED;BYZANTINE MUSICAL SYMBOL ARKTIKO KE;So;0;L;;;;;N;;;;;
+1D0EE;BYZANTINE MUSICAL SYMBOL ARKTIKO ZO;So;0;L;;;;;N;;;;;
+1D0EF;BYZANTINE MUSICAL SYMBOL ARKTIKO NI;So;0;L;;;;;N;;;;;
+1D0F0;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO MESO;So;0;L;;;;;N;;;;;
+1D0F1;BYZANTINE MUSICAL SYMBOL KENTIMA NEO MESO;So;0;L;;;;;N;;;;;
+1D0F2;BYZANTINE MUSICAL SYMBOL KENTIMATA NEO KATO;So;0;L;;;;;N;;;;;
+1D0F3;BYZANTINE MUSICAL SYMBOL KENTIMA NEO KATO;So;0;L;;;;;N;;;;;
+1D0F4;BYZANTINE MUSICAL SYMBOL KLASMA KATO;So;0;L;;;;;N;;;;;
+1D0F5;BYZANTINE MUSICAL SYMBOL GORGON NEO KATO;So;0;L;;;;;N;;;;;
+1D100;MUSICAL SYMBOL SINGLE BARLINE;So;0;L;;;;;N;;;;;
+1D101;MUSICAL SYMBOL DOUBLE BARLINE;So;0;L;;;;;N;;;;;
+1D102;MUSICAL SYMBOL FINAL BARLINE;So;0;L;;;;;N;;;;;
+1D103;MUSICAL SYMBOL REVERSE FINAL BARLINE;So;0;L;;;;;N;;;;;
+1D104;MUSICAL SYMBOL DASHED BARLINE;So;0;L;;;;;N;;;;;
+1D105;MUSICAL SYMBOL SHORT BARLINE;So;0;L;;;;;N;;;;;
+1D106;MUSICAL SYMBOL LEFT REPEAT SIGN;So;0;L;;;;;N;;;;;
+1D107;MUSICAL SYMBOL RIGHT REPEAT SIGN;So;0;L;;;;;N;;;;;
+1D108;MUSICAL SYMBOL REPEAT DOTS;So;0;L;;;;;N;;;;;
+1D109;MUSICAL SYMBOL DAL SEGNO;So;0;L;;;;;N;;;;;
+1D10A;MUSICAL SYMBOL DA CAPO;So;0;L;;;;;N;;;;;
+1D10B;MUSICAL SYMBOL SEGNO;So;0;L;;;;;N;;;;;
+1D10C;MUSICAL SYMBOL CODA;So;0;L;;;;;N;;;;;
+1D10D;MUSICAL SYMBOL REPEATED FIGURE-1;So;0;L;;;;;N;;;;;
+1D10E;MUSICAL SYMBOL REPEATED FIGURE-2;So;0;L;;;;;N;;;;;
+1D10F;MUSICAL SYMBOL REPEATED FIGURE-3;So;0;L;;;;;N;;;;;
+1D110;MUSICAL SYMBOL FERMATA;So;0;L;;;;;N;;;;;
+1D111;MUSICAL SYMBOL FERMATA BELOW;So;0;L;;;;;N;;;;;
+1D112;MUSICAL SYMBOL BREATH MARK;So;0;L;;;;;N;;;;;
+1D113;MUSICAL SYMBOL CAESURA;So;0;L;;;;;N;;;;;
+1D114;MUSICAL SYMBOL BRACE;So;0;L;;;;;N;;;;;
+1D115;MUSICAL SYMBOL BRACKET;So;0;L;;;;;N;;;;;
+1D116;MUSICAL SYMBOL ONE-LINE STAFF;So;0;L;;;;;N;;;;;
+1D117;MUSICAL SYMBOL TWO-LINE STAFF;So;0;L;;;;;N;;;;;
+1D118;MUSICAL SYMBOL THREE-LINE STAFF;So;0;L;;;;;N;;;;;
+1D119;MUSICAL SYMBOL FOUR-LINE STAFF;So;0;L;;;;;N;;;;;
+1D11A;MUSICAL SYMBOL FIVE-LINE STAFF;So;0;L;;;;;N;;;;;
+1D11B;MUSICAL SYMBOL SIX-LINE STAFF;So;0;L;;;;;N;;;;;
+1D11C;MUSICAL SYMBOL SIX-STRING FRETBOARD;So;0;L;;;;;N;;;;;
+1D11D;MUSICAL SYMBOL FOUR-STRING FRETBOARD;So;0;L;;;;;N;;;;;
+1D11E;MUSICAL SYMBOL G CLEF;So;0;L;;;;;N;;;;;
+1D11F;MUSICAL SYMBOL G CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;;
+1D120;MUSICAL SYMBOL G CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;;
+1D121;MUSICAL SYMBOL C CLEF;So;0;L;;;;;N;;;;;
+1D122;MUSICAL SYMBOL F CLEF;So;0;L;;;;;N;;;;;
+1D123;MUSICAL SYMBOL F CLEF OTTAVA ALTA;So;0;L;;;;;N;;;;;
+1D124;MUSICAL SYMBOL F CLEF OTTAVA BASSA;So;0;L;;;;;N;;;;;
+1D125;MUSICAL SYMBOL DRUM CLEF-1;So;0;L;;;;;N;;;;;
+1D126;MUSICAL SYMBOL DRUM CLEF-2;So;0;L;;;;;N;;;;;
+1D12A;MUSICAL SYMBOL DOUBLE SHARP;So;0;L;;;;;N;;;;;
+1D12B;MUSICAL SYMBOL DOUBLE FLAT;So;0;L;;;;;N;;;;;
+1D12C;MUSICAL SYMBOL FLAT UP;So;0;L;;;;;N;;;;;
+1D12D;MUSICAL SYMBOL FLAT DOWN;So;0;L;;;;;N;;;;;
+1D12E;MUSICAL SYMBOL NATURAL UP;So;0;L;;;;;N;;;;;
+1D12F;MUSICAL SYMBOL NATURAL DOWN;So;0;L;;;;;N;;;;;
+1D130;MUSICAL SYMBOL SHARP UP;So;0;L;;;;;N;;;;;
+1D131;MUSICAL SYMBOL SHARP DOWN;So;0;L;;;;;N;;;;;
+1D132;MUSICAL SYMBOL QUARTER TONE SHARP;So;0;L;;;;;N;;;;;
+1D133;MUSICAL SYMBOL QUARTER TONE FLAT;So;0;L;;;;;N;;;;;
+1D134;MUSICAL SYMBOL COMMON TIME;So;0;L;;;;;N;;;;;
+1D135;MUSICAL SYMBOL CUT TIME;So;0;L;;;;;N;;;;;
+1D136;MUSICAL SYMBOL OTTAVA ALTA;So;0;L;;;;;N;;;;;
+1D137;MUSICAL SYMBOL OTTAVA BASSA;So;0;L;;;;;N;;;;;
+1D138;MUSICAL SYMBOL QUINDICESIMA ALTA;So;0;L;;;;;N;;;;;
+1D139;MUSICAL SYMBOL QUINDICESIMA BASSA;So;0;L;;;;;N;;;;;
+1D13A;MUSICAL SYMBOL MULTI REST;So;0;L;;;;;N;;;;;
+1D13B;MUSICAL SYMBOL WHOLE REST;So;0;L;;;;;N;;;;;
+1D13C;MUSICAL SYMBOL HALF REST;So;0;L;;;;;N;;;;;
+1D13D;MUSICAL SYMBOL QUARTER REST;So;0;L;;;;;N;;;;;
+1D13E;MUSICAL SYMBOL EIGHTH REST;So;0;L;;;;;N;;;;;
+1D13F;MUSICAL SYMBOL SIXTEENTH REST;So;0;L;;;;;N;;;;;
+1D140;MUSICAL SYMBOL THIRTY-SECOND REST;So;0;L;;;;;N;;;;;
+1D141;MUSICAL SYMBOL SIXTY-FOURTH REST;So;0;L;;;;;N;;;;;
+1D142;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH REST;So;0;L;;;;;N;;;;;
+1D143;MUSICAL SYMBOL X NOTEHEAD;So;0;L;;;;;N;;;;;
+1D144;MUSICAL SYMBOL PLUS NOTEHEAD;So;0;L;;;;;N;;;;;
+1D145;MUSICAL SYMBOL CIRCLE X NOTEHEAD;So;0;L;;;;;N;;;;;
+1D146;MUSICAL SYMBOL SQUARE NOTEHEAD WHITE;So;0;L;;;;;N;;;;;
+1D147;MUSICAL SYMBOL SQUARE NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
+1D148;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP WHITE;So;0;L;;;;;N;;;;;
+1D149;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP BLACK;So;0;L;;;;;N;;;;;
+1D14A;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT WHITE;So;0;L;;;;;N;;;;;
+1D14B;MUSICAL SYMBOL TRIANGLE NOTEHEAD LEFT BLACK;So;0;L;;;;;N;;;;;
+1D14C;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT WHITE;So;0;L;;;;;N;;;;;
+1D14D;MUSICAL SYMBOL TRIANGLE NOTEHEAD RIGHT BLACK;So;0;L;;;;;N;;;;;
+1D14E;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;;
+1D14F;MUSICAL SYMBOL TRIANGLE NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;;
+1D150;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT WHITE;So;0;L;;;;;N;;;;;
+1D151;MUSICAL SYMBOL TRIANGLE NOTEHEAD UP RIGHT BLACK;So;0;L;;;;;N;;;;;
+1D152;MUSICAL SYMBOL MOON NOTEHEAD WHITE;So;0;L;;;;;N;;;;;
+1D153;MUSICAL SYMBOL MOON NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
+1D154;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN WHITE;So;0;L;;;;;N;;;;;
+1D155;MUSICAL SYMBOL TRIANGLE-ROUND NOTEHEAD DOWN BLACK;So;0;L;;;;;N;;;;;
+1D156;MUSICAL SYMBOL PARENTHESIS NOTEHEAD;So;0;L;;;;;N;;;;;
+1D157;MUSICAL SYMBOL VOID NOTEHEAD;So;0;L;;;;;N;;;;;
+1D158;MUSICAL SYMBOL NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
+1D159;MUSICAL SYMBOL NULL NOTEHEAD;So;0;L;;;;;N;;;;;
+1D15A;MUSICAL SYMBOL CLUSTER NOTEHEAD WHITE;So;0;L;;;;;N;;;;;
+1D15B;MUSICAL SYMBOL CLUSTER NOTEHEAD BLACK;So;0;L;;;;;N;;;;;
+1D15C;MUSICAL SYMBOL BREVE;So;0;L;;;;;N;;;;;
+1D15D;MUSICAL SYMBOL WHOLE NOTE;So;0;L;;;;;N;;;;;
+1D15E;MUSICAL SYMBOL HALF NOTE;So;0;L;1D157 1D165;;;;N;;;;;
+1D15F;MUSICAL SYMBOL QUARTER NOTE;So;0;L;1D158 1D165;;;;N;;;;;
+1D160;MUSICAL SYMBOL EIGHTH NOTE;So;0;L;1D15F 1D16E;;;;N;;;;;
+1D161;MUSICAL SYMBOL SIXTEENTH NOTE;So;0;L;1D15F 1D16F;;;;N;;;;;
+1D162;MUSICAL SYMBOL THIRTY-SECOND NOTE;So;0;L;1D15F 1D170;;;;N;;;;;
+1D163;MUSICAL SYMBOL SIXTY-FOURTH NOTE;So;0;L;1D15F 1D171;;;;N;;;;;
+1D164;MUSICAL SYMBOL ONE HUNDRED TWENTY-EIGHTH NOTE;So;0;L;1D15F 1D172;;;;N;;;;;
+1D165;MUSICAL SYMBOL COMBINING STEM;Mc;216;L;;;;;N;;;;;
+1D166;MUSICAL SYMBOL COMBINING SPRECHGESANG STEM;Mc;216;L;;;;;N;;;;;
+1D167;MUSICAL SYMBOL COMBINING TREMOLO-1;Mn;1;NSM;;;;;N;;;;;
+1D168;MUSICAL SYMBOL COMBINING TREMOLO-2;Mn;1;NSM;;;;;N;;;;;
+1D169;MUSICAL SYMBOL COMBINING TREMOLO-3;Mn;1;NSM;;;;;N;;;;;
+1D16A;MUSICAL SYMBOL FINGERED TREMOLO-1;So;0;L;;;;;N;;;;;
+1D16B;MUSICAL SYMBOL FINGERED TREMOLO-2;So;0;L;;;;;N;;;;;
+1D16C;MUSICAL SYMBOL FINGERED TREMOLO-3;So;0;L;;;;;N;;;;;
+1D16D;MUSICAL SYMBOL COMBINING AUGMENTATION DOT;Mc;226;L;;;;;N;;;;;
+1D16E;MUSICAL SYMBOL COMBINING FLAG-1;Mc;216;L;;;;;N;;;;;
+1D16F;MUSICAL SYMBOL COMBINING FLAG-2;Mc;216;L;;;;;N;;;;;
+1D170;MUSICAL SYMBOL COMBINING FLAG-3;Mc;216;L;;;;;N;;;;;
+1D171;MUSICAL SYMBOL COMBINING FLAG-4;Mc;216;L;;;;;N;;;;;
+1D172;MUSICAL SYMBOL COMBINING FLAG-5;Mc;216;L;;;;;N;;;;;
+1D173;MUSICAL SYMBOL BEGIN BEAM;Cf;0;BN;;;;;N;;;;;
+1D174;MUSICAL SYMBOL END BEAM;Cf;0;BN;;;;;N;;;;;
+1D175;MUSICAL SYMBOL BEGIN TIE;Cf;0;BN;;;;;N;;;;;
+1D176;MUSICAL SYMBOL END TIE;Cf;0;BN;;;;;N;;;;;
+1D177;MUSICAL SYMBOL BEGIN SLUR;Cf;0;BN;;;;;N;;;;;
+1D178;MUSICAL SYMBOL END SLUR;Cf;0;BN;;;;;N;;;;;
+1D179;MUSICAL SYMBOL BEGIN PHRASE;Cf;0;BN;;;;;N;;;;;
+1D17A;MUSICAL SYMBOL END PHRASE;Cf;0;BN;;;;;N;;;;;
+1D17B;MUSICAL SYMBOL COMBINING ACCENT;Mn;220;NSM;;;;;N;;;;;
+1D17C;MUSICAL SYMBOL COMBINING STACCATO;Mn;220;NSM;;;;;N;;;;;
+1D17D;MUSICAL SYMBOL COMBINING TENUTO;Mn;220;NSM;;;;;N;;;;;
+1D17E;MUSICAL SYMBOL COMBINING STACCATISSIMO;Mn;220;NSM;;;;;N;;;;;
+1D17F;MUSICAL SYMBOL COMBINING MARCATO;Mn;220;NSM;;;;;N;;;;;
+1D180;MUSICAL SYMBOL COMBINING MARCATO-STACCATO;Mn;220;NSM;;;;;N;;;;;
+1D181;MUSICAL SYMBOL COMBINING ACCENT-STACCATO;Mn;220;NSM;;;;;N;;;;;
+1D182;MUSICAL SYMBOL COMBINING LOURE;Mn;220;NSM;;;;;N;;;;;
+1D183;MUSICAL SYMBOL ARPEGGIATO UP;So;0;L;;;;;N;;;;;
+1D184;MUSICAL SYMBOL ARPEGGIATO DOWN;So;0;L;;;;;N;;;;;
+1D185;MUSICAL SYMBOL COMBINING DOIT;Mn;230;NSM;;;;;N;;;;;
+1D186;MUSICAL SYMBOL COMBINING RIP;Mn;230;NSM;;;;;N;;;;;
+1D187;MUSICAL SYMBOL COMBINING FLIP;Mn;230;NSM;;;;;N;;;;;
+1D188;MUSICAL SYMBOL COMBINING SMEAR;Mn;230;NSM;;;;;N;;;;;
+1D189;MUSICAL SYMBOL COMBINING BEND;Mn;230;NSM;;;;;N;;;;;
+1D18A;MUSICAL SYMBOL COMBINING DOUBLE TONGUE;Mn;220;NSM;;;;;N;;;;;
+1D18B;MUSICAL SYMBOL COMBINING TRIPLE TONGUE;Mn;220;NSM;;;;;N;;;;;
+1D18C;MUSICAL SYMBOL RINFORZANDO;So;0;L;;;;;N;;;;;
+1D18D;MUSICAL SYMBOL SUBITO;So;0;L;;;;;N;;;;;
+1D18E;MUSICAL SYMBOL Z;So;0;L;;;;;N;;;;;
+1D18F;MUSICAL SYMBOL PIANO;So;0;L;;;;;N;;;;;
+1D190;MUSICAL SYMBOL MEZZO;So;0;L;;;;;N;;;;;
+1D191;MUSICAL SYMBOL FORTE;So;0;L;;;;;N;;;;;
+1D192;MUSICAL SYMBOL CRESCENDO;So;0;L;;;;;N;;;;;
+1D193;MUSICAL SYMBOL DECRESCENDO;So;0;L;;;;;N;;;;;
+1D194;MUSICAL SYMBOL GRACE NOTE SLASH;So;0;L;;;;;N;;;;;
+1D195;MUSICAL SYMBOL GRACE NOTE NO SLASH;So;0;L;;;;;N;;;;;
+1D196;MUSICAL SYMBOL TR;So;0;L;;;;;N;;;;;
+1D197;MUSICAL SYMBOL TURN;So;0;L;;;;;N;;;;;
+1D198;MUSICAL SYMBOL INVERTED TURN;So;0;L;;;;;N;;;;;
+1D199;MUSICAL SYMBOL TURN SLASH;So;0;L;;;;;N;;;;;
+1D19A;MUSICAL SYMBOL TURN UP;So;0;L;;;;;N;;;;;
+1D19B;MUSICAL SYMBOL ORNAMENT STROKE-1;So;0;L;;;;;N;;;;;
+1D19C;MUSICAL SYMBOL ORNAMENT STROKE-2;So;0;L;;;;;N;;;;;
+1D19D;MUSICAL SYMBOL ORNAMENT STROKE-3;So;0;L;;;;;N;;;;;
+1D19E;MUSICAL SYMBOL ORNAMENT STROKE-4;So;0;L;;;;;N;;;;;
+1D19F;MUSICAL SYMBOL ORNAMENT STROKE-5;So;0;L;;;;;N;;;;;
+1D1A0;MUSICAL SYMBOL ORNAMENT STROKE-6;So;0;L;;;;;N;;;;;
+1D1A1;MUSICAL SYMBOL ORNAMENT STROKE-7;So;0;L;;;;;N;;;;;
+1D1A2;MUSICAL SYMBOL ORNAMENT STROKE-8;So;0;L;;;;;N;;;;;
+1D1A3;MUSICAL SYMBOL ORNAMENT STROKE-9;So;0;L;;;;;N;;;;;
+1D1A4;MUSICAL SYMBOL ORNAMENT STROKE-10;So;0;L;;;;;N;;;;;
+1D1A5;MUSICAL SYMBOL ORNAMENT STROKE-11;So;0;L;;;;;N;;;;;
+1D1A6;MUSICAL SYMBOL HAUPTSTIMME;So;0;L;;;;;N;;;;;
+1D1A7;MUSICAL SYMBOL NEBENSTIMME;So;0;L;;;;;N;;;;;
+1D1A8;MUSICAL SYMBOL END OF STIMME;So;0;L;;;;;N;;;;;
+1D1A9;MUSICAL SYMBOL DEGREE SLASH;So;0;L;;;;;N;;;;;
+1D1AA;MUSICAL SYMBOL COMBINING DOWN BOW;Mn;230;NSM;;;;;N;;;;;
+1D1AB;MUSICAL SYMBOL COMBINING UP BOW;Mn;230;NSM;;;;;N;;;;;
+1D1AC;MUSICAL SYMBOL COMBINING HARMONIC;Mn;230;NSM;;;;;N;;;;;
+1D1AD;MUSICAL SYMBOL COMBINING SNAP PIZZICATO;Mn;230;NSM;;;;;N;;;;;
+1D1AE;MUSICAL SYMBOL PEDAL MARK;So;0;L;;;;;N;;;;;
+1D1AF;MUSICAL SYMBOL PEDAL UP MARK;So;0;L;;;;;N;;;;;
+1D1B0;MUSICAL SYMBOL HALF PEDAL MARK;So;0;L;;;;;N;;;;;
+1D1B1;MUSICAL SYMBOL GLISSANDO UP;So;0;L;;;;;N;;;;;
+1D1B2;MUSICAL SYMBOL GLISSANDO DOWN;So;0;L;;;;;N;;;;;
+1D1B3;MUSICAL SYMBOL WITH FINGERNAILS;So;0;L;;;;;N;;;;;
+1D1B4;MUSICAL SYMBOL DAMP;So;0;L;;;;;N;;;;;
+1D1B5;MUSICAL SYMBOL DAMP ALL;So;0;L;;;;;N;;;;;
+1D1B6;MUSICAL SYMBOL MAXIMA;So;0;L;;;;;N;;;;;
+1D1B7;MUSICAL SYMBOL LONGA;So;0;L;;;;;N;;;;;
+1D1B8;MUSICAL SYMBOL BREVIS;So;0;L;;;;;N;;;;;
+1D1B9;MUSICAL SYMBOL SEMIBREVIS WHITE;So;0;L;;;;;N;;;;;
+1D1BA;MUSICAL SYMBOL SEMIBREVIS BLACK;So;0;L;;;;;N;;;;;
+1D1BB;MUSICAL SYMBOL MINIMA;So;0;L;1D1B9 1D165;;;;N;;;;;
+1D1BC;MUSICAL SYMBOL MINIMA BLACK;So;0;L;1D1BA 1D165;;;;N;;;;;
+1D1BD;MUSICAL SYMBOL SEMIMINIMA WHITE;So;0;L;1D1BB 1D16E;;;;N;;;;;
+1D1BE;MUSICAL SYMBOL SEMIMINIMA BLACK;So;0;L;1D1BC 1D16E;;;;N;;;;;
+1D1BF;MUSICAL SYMBOL FUSA WHITE;So;0;L;1D1BB 1D16F;;;;N;;;;;
+1D1C0;MUSICAL SYMBOL FUSA BLACK;So;0;L;1D1BC 1D16F;;;;N;;;;;
+1D1C1;MUSICAL SYMBOL LONGA PERFECTA REST;So;0;L;;;;;N;;;;;
+1D1C2;MUSICAL SYMBOL LONGA IMPERFECTA REST;So;0;L;;;;;N;;;;;
+1D1C3;MUSICAL SYMBOL BREVIS REST;So;0;L;;;;;N;;;;;
+1D1C4;MUSICAL SYMBOL SEMIBREVIS REST;So;0;L;;;;;N;;;;;
+1D1C5;MUSICAL SYMBOL MINIMA REST;So;0;L;;;;;N;;;;;
+1D1C6;MUSICAL SYMBOL SEMIMINIMA REST;So;0;L;;;;;N;;;;;
+1D1C7;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;;
+1D1C8;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;;
+1D1C9;MUSICAL SYMBOL TEMPUS PERFECTUM CUM PROLATIONE PERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;;
+1D1CA;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE PERFECTA;So;0;L;;;;;N;;;;;
+1D1CB;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA;So;0;L;;;;;N;;;;;
+1D1CC;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-1;So;0;L;;;;;N;;;;;
+1D1CD;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-2;So;0;L;;;;;N;;;;;
+1D1CE;MUSICAL SYMBOL TEMPUS IMPERFECTUM CUM PROLATIONE IMPERFECTA DIMINUTION-3;So;0;L;;;;;N;;;;;
+1D1CF;MUSICAL SYMBOL CROIX;So;0;L;;;;;N;;;;;
+1D1D0;MUSICAL SYMBOL GREGORIAN C CLEF;So;0;L;;;;;N;;;;;
+1D1D1;MUSICAL SYMBOL GREGORIAN F CLEF;So;0;L;;;;;N;;;;;
+1D1D2;MUSICAL SYMBOL SQUARE B;So;0;L;;;;;N;;;;;
+1D1D3;MUSICAL SYMBOL VIRGA;So;0;L;;;;;N;;;;;
+1D1D4;MUSICAL SYMBOL PODATUS;So;0;L;;;;;N;;;;;
+1D1D5;MUSICAL SYMBOL CLIVIS;So;0;L;;;;;N;;;;;
+1D1D6;MUSICAL SYMBOL SCANDICUS;So;0;L;;;;;N;;;;;
+1D1D7;MUSICAL SYMBOL CLIMACUS;So;0;L;;;;;N;;;;;
+1D1D8;MUSICAL SYMBOL TORCULUS;So;0;L;;;;;N;;;;;
+1D1D9;MUSICAL SYMBOL PORRECTUS;So;0;L;;;;;N;;;;;
+1D1DA;MUSICAL SYMBOL PORRECTUS FLEXUS;So;0;L;;;;;N;;;;;
+1D1DB;MUSICAL SYMBOL SCANDICUS FLEXUS;So;0;L;;;;;N;;;;;
+1D1DC;MUSICAL SYMBOL TORCULUS RESUPINUS;So;0;L;;;;;N;;;;;
+1D1DD;MUSICAL SYMBOL PES SUBPUNCTIS;So;0;L;;;;;N;;;;;
+1D200;GREEK VOCAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;
+1D201;GREEK VOCAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;
+1D202;GREEK VOCAL NOTATION SYMBOL-3;So;0;ON;;;;;N;;;;;
+1D203;GREEK VOCAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;;
+1D204;GREEK VOCAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;;
+1D205;GREEK VOCAL NOTATION SYMBOL-6;So;0;ON;;;;;N;;;;;
+1D206;GREEK VOCAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;;
+1D207;GREEK VOCAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;;
+1D208;GREEK VOCAL NOTATION SYMBOL-9;So;0;ON;;;;;N;;;;;
+1D209;GREEK VOCAL NOTATION SYMBOL-10;So;0;ON;;;;;N;;;;;
+1D20A;GREEK VOCAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;;
+1D20B;GREEK VOCAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;;
+1D20C;GREEK VOCAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;;
+1D20D;GREEK VOCAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;;
+1D20E;GREEK VOCAL NOTATION SYMBOL-15;So;0;ON;;;;;N;;;;;
+1D20F;GREEK VOCAL NOTATION SYMBOL-16;So;0;ON;;;;;N;;;;;
+1D210;GREEK VOCAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;;
+1D211;GREEK VOCAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;;
+1D212;GREEK VOCAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;;
+1D213;GREEK VOCAL NOTATION SYMBOL-20;So;0;ON;;;;;N;;;;;
+1D214;GREEK VOCAL NOTATION SYMBOL-21;So;0;ON;;;;;N;;;;;
+1D215;GREEK VOCAL NOTATION SYMBOL-22;So;0;ON;;;;;N;;;;;
+1D216;GREEK VOCAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;;
+1D217;GREEK VOCAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;;
+1D218;GREEK VOCAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;;
+1D219;GREEK VOCAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;;
+1D21A;GREEK VOCAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;;
+1D21B;GREEK VOCAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;;
+1D21C;GREEK VOCAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;;
+1D21D;GREEK INSTRUMENTAL NOTATION SYMBOL-1;So;0;ON;;;;;N;;;;;
+1D21E;GREEK INSTRUMENTAL NOTATION SYMBOL-2;So;0;ON;;;;;N;;;;;
+1D21F;GREEK INSTRUMENTAL NOTATION SYMBOL-4;So;0;ON;;;;;N;;;;;
+1D220;GREEK INSTRUMENTAL NOTATION SYMBOL-5;So;0;ON;;;;;N;;;;;
+1D221;GREEK INSTRUMENTAL NOTATION SYMBOL-7;So;0;ON;;;;;N;;;;;
+1D222;GREEK INSTRUMENTAL NOTATION SYMBOL-8;So;0;ON;;;;;N;;;;;
+1D223;GREEK INSTRUMENTAL NOTATION SYMBOL-11;So;0;ON;;;;;N;;;;;
+1D224;GREEK INSTRUMENTAL NOTATION SYMBOL-12;So;0;ON;;;;;N;;;;;
+1D225;GREEK INSTRUMENTAL NOTATION SYMBOL-13;So;0;ON;;;;;N;;;;;
+1D226;GREEK INSTRUMENTAL NOTATION SYMBOL-14;So;0;ON;;;;;N;;;;;
+1D227;GREEK INSTRUMENTAL NOTATION SYMBOL-17;So;0;ON;;;;;N;;;;;
+1D228;GREEK INSTRUMENTAL NOTATION SYMBOL-18;So;0;ON;;;;;N;;;;;
+1D229;GREEK INSTRUMENTAL NOTATION SYMBOL-19;So;0;ON;;;;;N;;;;;
+1D22A;GREEK INSTRUMENTAL NOTATION SYMBOL-23;So;0;ON;;;;;N;;;;;
+1D22B;GREEK INSTRUMENTAL NOTATION SYMBOL-24;So;0;ON;;;;;N;;;;;
+1D22C;GREEK INSTRUMENTAL NOTATION SYMBOL-25;So;0;ON;;;;;N;;;;;
+1D22D;GREEK INSTRUMENTAL NOTATION SYMBOL-26;So;0;ON;;;;;N;;;;;
+1D22E;GREEK INSTRUMENTAL NOTATION SYMBOL-27;So;0;ON;;;;;N;;;;;
+1D22F;GREEK INSTRUMENTAL NOTATION SYMBOL-29;So;0;ON;;;;;N;;;;;
+1D230;GREEK INSTRUMENTAL NOTATION SYMBOL-30;So;0;ON;;;;;N;;;;;
+1D231;GREEK INSTRUMENTAL NOTATION SYMBOL-32;So;0;ON;;;;;N;;;;;
+1D232;GREEK INSTRUMENTAL NOTATION SYMBOL-36;So;0;ON;;;;;N;;;;;
+1D233;GREEK INSTRUMENTAL NOTATION SYMBOL-37;So;0;ON;;;;;N;;;;;
+1D234;GREEK INSTRUMENTAL NOTATION SYMBOL-38;So;0;ON;;;;;N;;;;;
+1D235;GREEK INSTRUMENTAL NOTATION SYMBOL-39;So;0;ON;;;;;N;;;;;
+1D236;GREEK INSTRUMENTAL NOTATION SYMBOL-40;So;0;ON;;;;;N;;;;;
+1D237;GREEK INSTRUMENTAL NOTATION SYMBOL-42;So;0;ON;;;;;N;;;;;
+1D238;GREEK INSTRUMENTAL NOTATION SYMBOL-43;So;0;ON;;;;;N;;;;;
+1D239;GREEK INSTRUMENTAL NOTATION SYMBOL-45;So;0;ON;;;;;N;;;;;
+1D23A;GREEK INSTRUMENTAL NOTATION SYMBOL-47;So;0;ON;;;;;N;;;;;
+1D23B;GREEK INSTRUMENTAL NOTATION SYMBOL-48;So;0;ON;;;;;N;;;;;
+1D23C;GREEK INSTRUMENTAL NOTATION SYMBOL-49;So;0;ON;;;;;N;;;;;
+1D23D;GREEK INSTRUMENTAL NOTATION SYMBOL-50;So;0;ON;;;;;N;;;;;
+1D23E;GREEK INSTRUMENTAL NOTATION SYMBOL-51;So;0;ON;;;;;N;;;;;
+1D23F;GREEK INSTRUMENTAL NOTATION SYMBOL-52;So;0;ON;;;;;N;;;;;
+1D240;GREEK INSTRUMENTAL NOTATION SYMBOL-53;So;0;ON;;;;;N;;;;;
+1D241;GREEK INSTRUMENTAL NOTATION SYMBOL-54;So;0;ON;;;;;N;;;;;
+1D242;COMBINING GREEK MUSICAL TRISEME;Mn;230;NSM;;;;;N;;;;;
+1D243;COMBINING GREEK MUSICAL TETRASEME;Mn;230;NSM;;;;;N;;;;;
+1D244;COMBINING GREEK MUSICAL PENTASEME;Mn;230;NSM;;;;;N;;;;;
+1D245;GREEK MUSICAL LEIMMA;So;0;ON;;;;;N;;;;;
+1D300;MONOGRAM FOR EARTH;So;0;ON;;;;;N;;ren *;;;
+1D301;DIGRAM FOR HEAVENLY EARTH;So;0;ON;;;;;N;;tian ren *;;;
+1D302;DIGRAM FOR HUMAN EARTH;So;0;ON;;;;;N;;di ren *;;;
+1D303;DIGRAM FOR EARTHLY HEAVEN;So;0;ON;;;;;N;;ren tian *;;;
+1D304;DIGRAM FOR EARTHLY HUMAN;So;0;ON;;;;;N;;ren di *;;;
+1D305;DIGRAM FOR EARTH;So;0;ON;;;;;N;;ren ren *;;;
+1D306;TETRAGRAM FOR CENTRE;So;0;ON;;;;;N;;;;;
+1D307;TETRAGRAM FOR FULL CIRCLE;So;0;ON;;;;;N;;;;;
+1D308;TETRAGRAM FOR MIRED;So;0;ON;;;;;N;;;;;
+1D309;TETRAGRAM FOR BARRIER;So;0;ON;;;;;N;;;;;
+1D30A;TETRAGRAM FOR KEEPING SMALL;So;0;ON;;;;;N;;;;;
+1D30B;TETRAGRAM FOR CONTRARIETY;So;0;ON;;;;;N;;;;;
+1D30C;TETRAGRAM FOR ASCENT;So;0;ON;;;;;N;;;;;
+1D30D;TETRAGRAM FOR OPPOSITION;So;0;ON;;;;;N;;;;;
+1D30E;TETRAGRAM FOR BRANCHING OUT;So;0;ON;;;;;N;;;;;
+1D30F;TETRAGRAM FOR DEFECTIVENESS OR DISTORTION;So;0;ON;;;;;N;;;;;
+1D310;TETRAGRAM FOR DIVERGENCE;So;0;ON;;;;;N;;;;;
+1D311;TETRAGRAM FOR YOUTHFULNESS;So;0;ON;;;;;N;;;;;
+1D312;TETRAGRAM FOR INCREASE;So;0;ON;;;;;N;;;;;
+1D313;TETRAGRAM FOR PENETRATION;So;0;ON;;;;;N;;;;;
+1D314;TETRAGRAM FOR REACH;So;0;ON;;;;;N;;;;;
+1D315;TETRAGRAM FOR CONTACT;So;0;ON;;;;;N;;;;;
+1D316;TETRAGRAM FOR HOLDING BACK;So;0;ON;;;;;N;;;;;
+1D317;TETRAGRAM FOR WAITING;So;0;ON;;;;;N;;;;;
+1D318;TETRAGRAM FOR FOLLOWING;So;0;ON;;;;;N;;;;;
+1D319;TETRAGRAM FOR ADVANCE;So;0;ON;;;;;N;;;;;
+1D31A;TETRAGRAM FOR RELEASE;So;0;ON;;;;;N;;;;;
+1D31B;TETRAGRAM FOR RESISTANCE;So;0;ON;;;;;N;;;;;
+1D31C;TETRAGRAM FOR EASE;So;0;ON;;;;;N;;;;;
+1D31D;TETRAGRAM FOR JOY;So;0;ON;;;;;N;;;;;
+1D31E;TETRAGRAM FOR CONTENTION;So;0;ON;;;;;N;;;;;
+1D31F;TETRAGRAM FOR ENDEAVOUR;So;0;ON;;;;;N;;;;;
+1D320;TETRAGRAM FOR DUTIES;So;0;ON;;;;;N;;;;;
+1D321;TETRAGRAM FOR CHANGE;So;0;ON;;;;;N;;;;;
+1D322;TETRAGRAM FOR DECISIVENESS;So;0;ON;;;;;N;;;;;
+1D323;TETRAGRAM FOR BOLD RESOLUTION;So;0;ON;;;;;N;;;;;
+1D324;TETRAGRAM FOR PACKING;So;0;ON;;;;;N;;;;;
+1D325;TETRAGRAM FOR LEGION;So;0;ON;;;;;N;;;;;
+1D326;TETRAGRAM FOR CLOSENESS;So;0;ON;;;;;N;;;;;
+1D327;TETRAGRAM FOR KINSHIP;So;0;ON;;;;;N;;;;;
+1D328;TETRAGRAM FOR GATHERING;So;0;ON;;;;;N;;;;;
+1D329;TETRAGRAM FOR STRENGTH;So;0;ON;;;;;N;;;;;
+1D32A;TETRAGRAM FOR PURITY;So;0;ON;;;;;N;;;;;
+1D32B;TETRAGRAM FOR FULLNESS;So;0;ON;;;;;N;;;;;
+1D32C;TETRAGRAM FOR RESIDENCE;So;0;ON;;;;;N;;;;;
+1D32D;TETRAGRAM FOR LAW OR MODEL;So;0;ON;;;;;N;;;;;
+1D32E;TETRAGRAM FOR RESPONSE;So;0;ON;;;;;N;;;;;
+1D32F;TETRAGRAM FOR GOING TO MEET;So;0;ON;;;;;N;;;;;
+1D330;TETRAGRAM FOR ENCOUNTERS;So;0;ON;;;;;N;;;;;
+1D331;TETRAGRAM FOR STOVE;So;0;ON;;;;;N;;;;;
+1D332;TETRAGRAM FOR GREATNESS;So;0;ON;;;;;N;;;;;
+1D333;TETRAGRAM FOR ENLARGEMENT;So;0;ON;;;;;N;;;;;
+1D334;TETRAGRAM FOR PATTERN;So;0;ON;;;;;N;;;;;
+1D335;TETRAGRAM FOR RITUAL;So;0;ON;;;;;N;;;;;
+1D336;TETRAGRAM FOR FLIGHT;So;0;ON;;;;;N;;;;;
+1D337;TETRAGRAM FOR VASTNESS OR WASTING;So;0;ON;;;;;N;;;;;
+1D338;TETRAGRAM FOR CONSTANCY;So;0;ON;;;;;N;;;;;
+1D339;TETRAGRAM FOR MEASURE;So;0;ON;;;;;N;;;;;
+1D33A;TETRAGRAM FOR ETERNITY;So;0;ON;;;;;N;;;;;
+1D33B;TETRAGRAM FOR UNITY;So;0;ON;;;;;N;;;;;
+1D33C;TETRAGRAM FOR DIMINISHMENT;So;0;ON;;;;;N;;;;;
+1D33D;TETRAGRAM FOR CLOSED MOUTH;So;0;ON;;;;;N;;;;;
+1D33E;TETRAGRAM FOR GUARDEDNESS;So;0;ON;;;;;N;;;;;
+1D33F;TETRAGRAM FOR GATHERING IN;So;0;ON;;;;;N;;;;;
+1D340;TETRAGRAM FOR MASSING;So;0;ON;;;;;N;;;;;
+1D341;TETRAGRAM FOR ACCUMULATION;So;0;ON;;;;;N;;;;;
+1D342;TETRAGRAM FOR EMBELLISHMENT;So;0;ON;;;;;N;;;;;
+1D343;TETRAGRAM FOR DOUBT;So;0;ON;;;;;N;;;;;
+1D344;TETRAGRAM FOR WATCH;So;0;ON;;;;;N;;;;;
+1D345;TETRAGRAM FOR SINKING;So;0;ON;;;;;N;;;;;
+1D346;TETRAGRAM FOR INNER;So;0;ON;;;;;N;;;;;
+1D347;TETRAGRAM FOR DEPARTURE;So;0;ON;;;;;N;;;;;
+1D348;TETRAGRAM FOR DARKENING;So;0;ON;;;;;N;;;;;
+1D349;TETRAGRAM FOR DIMMING;So;0;ON;;;;;N;;;;;
+1D34A;TETRAGRAM FOR EXHAUSTION;So;0;ON;;;;;N;;;;;
+1D34B;TETRAGRAM FOR SEVERANCE;So;0;ON;;;;;N;;;;;
+1D34C;TETRAGRAM FOR STOPPAGE;So;0;ON;;;;;N;;;;;
+1D34D;TETRAGRAM FOR HARDNESS;So;0;ON;;;;;N;;;;;
+1D34E;TETRAGRAM FOR COMPLETION;So;0;ON;;;;;N;;;;;
+1D34F;TETRAGRAM FOR CLOSURE;So;0;ON;;;;;N;;;;;
+1D350;TETRAGRAM FOR FAILURE;So;0;ON;;;;;N;;;;;
+1D351;TETRAGRAM FOR AGGRAVATION;So;0;ON;;;;;N;;;;;
+1D352;TETRAGRAM FOR COMPLIANCE;So;0;ON;;;;;N;;;;;
+1D353;TETRAGRAM FOR ON THE VERGE;So;0;ON;;;;;N;;;;;
+1D354;TETRAGRAM FOR DIFFICULTIES;So;0;ON;;;;;N;;;;;
+1D355;TETRAGRAM FOR LABOURING;So;0;ON;;;;;N;;;;;
+1D356;TETRAGRAM FOR FOSTERING;So;0;ON;;;;;N;;;;;
+1D360;COUNTING ROD UNIT DIGIT ONE;No;0;L;;;;1;N;;;;;
+1D361;COUNTING ROD UNIT DIGIT TWO;No;0;L;;;;2;N;;;;;
+1D362;COUNTING ROD UNIT DIGIT THREE;No;0;L;;;;3;N;;;;;
+1D363;COUNTING ROD UNIT DIGIT FOUR;No;0;L;;;;4;N;;;;;
+1D364;COUNTING ROD UNIT DIGIT FIVE;No;0;L;;;;5;N;;;;;
+1D365;COUNTING ROD UNIT DIGIT SIX;No;0;L;;;;6;N;;;;;
+1D366;COUNTING ROD UNIT DIGIT SEVEN;No;0;L;;;;7;N;;;;;
+1D367;COUNTING ROD UNIT DIGIT EIGHT;No;0;L;;;;8;N;;;;;
+1D368;COUNTING ROD UNIT DIGIT NINE;No;0;L;;;;9;N;;;;;
+1D369;COUNTING ROD TENS DIGIT ONE;No;0;L;;;;10;N;;;;;
+1D36A;COUNTING ROD TENS DIGIT TWO;No;0;L;;;;20;N;;;;;
+1D36B;COUNTING ROD TENS DIGIT THREE;No;0;L;;;;30;N;;;;;
+1D36C;COUNTING ROD TENS DIGIT FOUR;No;0;L;;;;40;N;;;;;
+1D36D;COUNTING ROD TENS DIGIT FIVE;No;0;L;;;;50;N;;;;;
+1D36E;COUNTING ROD TENS DIGIT SIX;No;0;L;;;;60;N;;;;;
+1D36F;COUNTING ROD TENS DIGIT SEVEN;No;0;L;;;;70;N;;;;;
+1D370;COUNTING ROD TENS DIGIT EIGHT;No;0;L;;;;80;N;;;;;
+1D371;COUNTING ROD TENS DIGIT NINE;No;0;L;;;;90;N;;;;;
+1D400;MATHEMATICAL BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D401;MATHEMATICAL BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D402;MATHEMATICAL BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D403;MATHEMATICAL BOLD CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D404;MATHEMATICAL BOLD CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D405;MATHEMATICAL BOLD CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D406;MATHEMATICAL BOLD CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D407;MATHEMATICAL BOLD CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D408;MATHEMATICAL BOLD CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D409;MATHEMATICAL BOLD CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D40A;MATHEMATICAL BOLD CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D40B;MATHEMATICAL BOLD CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D40C;MATHEMATICAL BOLD CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D40D;MATHEMATICAL BOLD CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D40E;MATHEMATICAL BOLD CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D40F;MATHEMATICAL BOLD CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D410;MATHEMATICAL BOLD CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D411;MATHEMATICAL BOLD CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D412;MATHEMATICAL BOLD CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D413;MATHEMATICAL BOLD CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D414;MATHEMATICAL BOLD CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D415;MATHEMATICAL BOLD CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D416;MATHEMATICAL BOLD CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D417;MATHEMATICAL BOLD CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D418;MATHEMATICAL BOLD CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D419;MATHEMATICAL BOLD CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D41A;MATHEMATICAL BOLD SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D41B;MATHEMATICAL BOLD SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D41C;MATHEMATICAL BOLD SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D41D;MATHEMATICAL BOLD SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D41E;MATHEMATICAL BOLD SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D41F;MATHEMATICAL BOLD SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D420;MATHEMATICAL BOLD SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D421;MATHEMATICAL BOLD SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D422;MATHEMATICAL BOLD SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D423;MATHEMATICAL BOLD SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D424;MATHEMATICAL BOLD SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D425;MATHEMATICAL BOLD SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D426;MATHEMATICAL BOLD SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D427;MATHEMATICAL BOLD SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D428;MATHEMATICAL BOLD SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D429;MATHEMATICAL BOLD SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D42A;MATHEMATICAL BOLD SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D42B;MATHEMATICAL BOLD SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D42C;MATHEMATICAL BOLD SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D42D;MATHEMATICAL BOLD SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D42E;MATHEMATICAL BOLD SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D42F;MATHEMATICAL BOLD SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D430;MATHEMATICAL BOLD SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D431;MATHEMATICAL BOLD SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D432;MATHEMATICAL BOLD SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D433;MATHEMATICAL BOLD SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D434;MATHEMATICAL ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D435;MATHEMATICAL ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D436;MATHEMATICAL ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D437;MATHEMATICAL ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D438;MATHEMATICAL ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D439;MATHEMATICAL ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D43A;MATHEMATICAL ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D43B;MATHEMATICAL ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D43C;MATHEMATICAL ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D43D;MATHEMATICAL ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D43E;MATHEMATICAL ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D43F;MATHEMATICAL ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D440;MATHEMATICAL ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D441;MATHEMATICAL ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D442;MATHEMATICAL ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D443;MATHEMATICAL ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D444;MATHEMATICAL ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D445;MATHEMATICAL ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D446;MATHEMATICAL ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D447;MATHEMATICAL ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D448;MATHEMATICAL ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D449;MATHEMATICAL ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D44A;MATHEMATICAL ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D44B;MATHEMATICAL ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D44C;MATHEMATICAL ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D44D;MATHEMATICAL ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D44E;MATHEMATICAL ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D44F;MATHEMATICAL ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D450;MATHEMATICAL ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D451;MATHEMATICAL ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D452;MATHEMATICAL ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D453;MATHEMATICAL ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D454;MATHEMATICAL ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D456;MATHEMATICAL ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D457;MATHEMATICAL ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D458;MATHEMATICAL ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D459;MATHEMATICAL ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D45A;MATHEMATICAL ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D45B;MATHEMATICAL ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D45C;MATHEMATICAL ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D45D;MATHEMATICAL ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D45E;MATHEMATICAL ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D45F;MATHEMATICAL ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D460;MATHEMATICAL ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D461;MATHEMATICAL ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D462;MATHEMATICAL ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D463;MATHEMATICAL ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D464;MATHEMATICAL ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D465;MATHEMATICAL ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D466;MATHEMATICAL ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D467;MATHEMATICAL ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D468;MATHEMATICAL BOLD ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D469;MATHEMATICAL BOLD ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D46A;MATHEMATICAL BOLD ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D46B;MATHEMATICAL BOLD ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D46C;MATHEMATICAL BOLD ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D46D;MATHEMATICAL BOLD ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D46E;MATHEMATICAL BOLD ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D46F;MATHEMATICAL BOLD ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D470;MATHEMATICAL BOLD ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D471;MATHEMATICAL BOLD ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D472;MATHEMATICAL BOLD ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D473;MATHEMATICAL BOLD ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D474;MATHEMATICAL BOLD ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D475;MATHEMATICAL BOLD ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D476;MATHEMATICAL BOLD ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D477;MATHEMATICAL BOLD ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D478;MATHEMATICAL BOLD ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D479;MATHEMATICAL BOLD ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D47A;MATHEMATICAL BOLD ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D47B;MATHEMATICAL BOLD ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D47C;MATHEMATICAL BOLD ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D47D;MATHEMATICAL BOLD ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D47E;MATHEMATICAL BOLD ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D47F;MATHEMATICAL BOLD ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D480;MATHEMATICAL BOLD ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D481;MATHEMATICAL BOLD ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D482;MATHEMATICAL BOLD ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D483;MATHEMATICAL BOLD ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D484;MATHEMATICAL BOLD ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D485;MATHEMATICAL BOLD ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D486;MATHEMATICAL BOLD ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D487;MATHEMATICAL BOLD ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D488;MATHEMATICAL BOLD ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D489;MATHEMATICAL BOLD ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D48A;MATHEMATICAL BOLD ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D48B;MATHEMATICAL BOLD ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D48C;MATHEMATICAL BOLD ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D48D;MATHEMATICAL BOLD ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D48E;MATHEMATICAL BOLD ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D48F;MATHEMATICAL BOLD ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D490;MATHEMATICAL BOLD ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D491;MATHEMATICAL BOLD ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D492;MATHEMATICAL BOLD ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D493;MATHEMATICAL BOLD ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D494;MATHEMATICAL BOLD ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D495;MATHEMATICAL BOLD ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D496;MATHEMATICAL BOLD ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D497;MATHEMATICAL BOLD ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D498;MATHEMATICAL BOLD ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D499;MATHEMATICAL BOLD ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D49A;MATHEMATICAL BOLD ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D49B;MATHEMATICAL BOLD ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D49C;MATHEMATICAL SCRIPT CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D49E;MATHEMATICAL SCRIPT CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D49F;MATHEMATICAL SCRIPT CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D4A2;MATHEMATICAL SCRIPT CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D4A5;MATHEMATICAL SCRIPT CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D4A6;MATHEMATICAL SCRIPT CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D4A9;MATHEMATICAL SCRIPT CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D4AA;MATHEMATICAL SCRIPT CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D4AB;MATHEMATICAL SCRIPT CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D4AC;MATHEMATICAL SCRIPT CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D4AE;MATHEMATICAL SCRIPT CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D4AF;MATHEMATICAL SCRIPT CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D4B0;MATHEMATICAL SCRIPT CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D4B1;MATHEMATICAL SCRIPT CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D4B2;MATHEMATICAL SCRIPT CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D4B3;MATHEMATICAL SCRIPT CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D4B4;MATHEMATICAL SCRIPT CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D4B5;MATHEMATICAL SCRIPT CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D4B6;MATHEMATICAL SCRIPT SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D4B7;MATHEMATICAL SCRIPT SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D4B8;MATHEMATICAL SCRIPT SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D4B9;MATHEMATICAL SCRIPT SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D4BB;MATHEMATICAL SCRIPT SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D4BD;MATHEMATICAL SCRIPT SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D4BE;MATHEMATICAL SCRIPT SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D4BF;MATHEMATICAL SCRIPT SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D4C0;MATHEMATICAL SCRIPT SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D4C1;MATHEMATICAL SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D4C2;MATHEMATICAL SCRIPT SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D4C3;MATHEMATICAL SCRIPT SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D4C5;MATHEMATICAL SCRIPT SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D4C6;MATHEMATICAL SCRIPT SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D4C7;MATHEMATICAL SCRIPT SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D4C8;MATHEMATICAL SCRIPT SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D4C9;MATHEMATICAL SCRIPT SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D4CA;MATHEMATICAL SCRIPT SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D4CB;MATHEMATICAL SCRIPT SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D4CC;MATHEMATICAL SCRIPT SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D4CD;MATHEMATICAL SCRIPT SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D4CE;MATHEMATICAL SCRIPT SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D4CF;MATHEMATICAL SCRIPT SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D4D0;MATHEMATICAL BOLD SCRIPT CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D4D1;MATHEMATICAL BOLD SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D4D2;MATHEMATICAL BOLD SCRIPT CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D4D3;MATHEMATICAL BOLD SCRIPT CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D4D4;MATHEMATICAL BOLD SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D4D5;MATHEMATICAL BOLD SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D4D6;MATHEMATICAL BOLD SCRIPT CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D4D7;MATHEMATICAL BOLD SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D4D8;MATHEMATICAL BOLD SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D4D9;MATHEMATICAL BOLD SCRIPT CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D4DA;MATHEMATICAL BOLD SCRIPT CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D4DB;MATHEMATICAL BOLD SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D4DC;MATHEMATICAL BOLD SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D4DD;MATHEMATICAL BOLD SCRIPT CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D4DE;MATHEMATICAL BOLD SCRIPT CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D4DF;MATHEMATICAL BOLD SCRIPT CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D4E0;MATHEMATICAL BOLD SCRIPT CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D4E1;MATHEMATICAL BOLD SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D4E2;MATHEMATICAL BOLD SCRIPT CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D4E3;MATHEMATICAL BOLD SCRIPT CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D4E4;MATHEMATICAL BOLD SCRIPT CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D4E5;MATHEMATICAL BOLD SCRIPT CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D4E6;MATHEMATICAL BOLD SCRIPT CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D4E7;MATHEMATICAL BOLD SCRIPT CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D4E8;MATHEMATICAL BOLD SCRIPT CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D4E9;MATHEMATICAL BOLD SCRIPT CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D4EA;MATHEMATICAL BOLD SCRIPT SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D4EB;MATHEMATICAL BOLD SCRIPT SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D4EC;MATHEMATICAL BOLD SCRIPT SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D4ED;MATHEMATICAL BOLD SCRIPT SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D4EE;MATHEMATICAL BOLD SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D4EF;MATHEMATICAL BOLD SCRIPT SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D4F0;MATHEMATICAL BOLD SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D4F1;MATHEMATICAL BOLD SCRIPT SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D4F2;MATHEMATICAL BOLD SCRIPT SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D4F3;MATHEMATICAL BOLD SCRIPT SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D4F4;MATHEMATICAL BOLD SCRIPT SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D4F5;MATHEMATICAL BOLD SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D4F6;MATHEMATICAL BOLD SCRIPT SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D4F7;MATHEMATICAL BOLD SCRIPT SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D4F8;MATHEMATICAL BOLD SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D4F9;MATHEMATICAL BOLD SCRIPT SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D4FA;MATHEMATICAL BOLD SCRIPT SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D4FB;MATHEMATICAL BOLD SCRIPT SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D4FC;MATHEMATICAL BOLD SCRIPT SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D4FD;MATHEMATICAL BOLD SCRIPT SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D4FE;MATHEMATICAL BOLD SCRIPT SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D4FF;MATHEMATICAL BOLD SCRIPT SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D500;MATHEMATICAL BOLD SCRIPT SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D501;MATHEMATICAL BOLD SCRIPT SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D502;MATHEMATICAL BOLD SCRIPT SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D503;MATHEMATICAL BOLD SCRIPT SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D504;MATHEMATICAL FRAKTUR CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D505;MATHEMATICAL FRAKTUR CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D507;MATHEMATICAL FRAKTUR CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D508;MATHEMATICAL FRAKTUR CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D509;MATHEMATICAL FRAKTUR CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D50A;MATHEMATICAL FRAKTUR CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D50D;MATHEMATICAL FRAKTUR CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D50E;MATHEMATICAL FRAKTUR CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D50F;MATHEMATICAL FRAKTUR CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D510;MATHEMATICAL FRAKTUR CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D511;MATHEMATICAL FRAKTUR CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D512;MATHEMATICAL FRAKTUR CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D513;MATHEMATICAL FRAKTUR CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D514;MATHEMATICAL FRAKTUR CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D516;MATHEMATICAL FRAKTUR CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D517;MATHEMATICAL FRAKTUR CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D518;MATHEMATICAL FRAKTUR CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D519;MATHEMATICAL FRAKTUR CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D51A;MATHEMATICAL FRAKTUR CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D51B;MATHEMATICAL FRAKTUR CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D51C;MATHEMATICAL FRAKTUR CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D51E;MATHEMATICAL FRAKTUR SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D51F;MATHEMATICAL FRAKTUR SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D520;MATHEMATICAL FRAKTUR SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D521;MATHEMATICAL FRAKTUR SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D522;MATHEMATICAL FRAKTUR SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D523;MATHEMATICAL FRAKTUR SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D524;MATHEMATICAL FRAKTUR SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D525;MATHEMATICAL FRAKTUR SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D526;MATHEMATICAL FRAKTUR SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D527;MATHEMATICAL FRAKTUR SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D528;MATHEMATICAL FRAKTUR SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D529;MATHEMATICAL FRAKTUR SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D52A;MATHEMATICAL FRAKTUR SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D52B;MATHEMATICAL FRAKTUR SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D52C;MATHEMATICAL FRAKTUR SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D52D;MATHEMATICAL FRAKTUR SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D52E;MATHEMATICAL FRAKTUR SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D52F;MATHEMATICAL FRAKTUR SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D530;MATHEMATICAL FRAKTUR SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D531;MATHEMATICAL FRAKTUR SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D532;MATHEMATICAL FRAKTUR SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D533;MATHEMATICAL FRAKTUR SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D534;MATHEMATICAL FRAKTUR SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D535;MATHEMATICAL FRAKTUR SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D536;MATHEMATICAL FRAKTUR SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D537;MATHEMATICAL FRAKTUR SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D538;MATHEMATICAL DOUBLE-STRUCK CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D539;MATHEMATICAL DOUBLE-STRUCK CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D53B;MATHEMATICAL DOUBLE-STRUCK CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D53C;MATHEMATICAL DOUBLE-STRUCK CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D53D;MATHEMATICAL DOUBLE-STRUCK CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D53E;MATHEMATICAL DOUBLE-STRUCK CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D540;MATHEMATICAL DOUBLE-STRUCK CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D541;MATHEMATICAL DOUBLE-STRUCK CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D542;MATHEMATICAL DOUBLE-STRUCK CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D543;MATHEMATICAL DOUBLE-STRUCK CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D544;MATHEMATICAL DOUBLE-STRUCK CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D546;MATHEMATICAL DOUBLE-STRUCK CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D54A;MATHEMATICAL DOUBLE-STRUCK CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D54B;MATHEMATICAL DOUBLE-STRUCK CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D54C;MATHEMATICAL DOUBLE-STRUCK CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D54D;MATHEMATICAL DOUBLE-STRUCK CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D54E;MATHEMATICAL DOUBLE-STRUCK CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D54F;MATHEMATICAL DOUBLE-STRUCK CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D550;MATHEMATICAL DOUBLE-STRUCK CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D552;MATHEMATICAL DOUBLE-STRUCK SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D553;MATHEMATICAL DOUBLE-STRUCK SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D554;MATHEMATICAL DOUBLE-STRUCK SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D555;MATHEMATICAL DOUBLE-STRUCK SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D556;MATHEMATICAL DOUBLE-STRUCK SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D557;MATHEMATICAL DOUBLE-STRUCK SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D558;MATHEMATICAL DOUBLE-STRUCK SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D559;MATHEMATICAL DOUBLE-STRUCK SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D55A;MATHEMATICAL DOUBLE-STRUCK SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D55B;MATHEMATICAL DOUBLE-STRUCK SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D55C;MATHEMATICAL DOUBLE-STRUCK SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D55D;MATHEMATICAL DOUBLE-STRUCK SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D55E;MATHEMATICAL DOUBLE-STRUCK SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D55F;MATHEMATICAL DOUBLE-STRUCK SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D560;MATHEMATICAL DOUBLE-STRUCK SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D561;MATHEMATICAL DOUBLE-STRUCK SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D562;MATHEMATICAL DOUBLE-STRUCK SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D563;MATHEMATICAL DOUBLE-STRUCK SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D564;MATHEMATICAL DOUBLE-STRUCK SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D565;MATHEMATICAL DOUBLE-STRUCK SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D566;MATHEMATICAL DOUBLE-STRUCK SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D567;MATHEMATICAL DOUBLE-STRUCK SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D568;MATHEMATICAL DOUBLE-STRUCK SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D569;MATHEMATICAL DOUBLE-STRUCK SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D56A;MATHEMATICAL DOUBLE-STRUCK SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D56B;MATHEMATICAL DOUBLE-STRUCK SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D56C;MATHEMATICAL BOLD FRAKTUR CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D56D;MATHEMATICAL BOLD FRAKTUR CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D56E;MATHEMATICAL BOLD FRAKTUR CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D56F;MATHEMATICAL BOLD FRAKTUR CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D570;MATHEMATICAL BOLD FRAKTUR CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D571;MATHEMATICAL BOLD FRAKTUR CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D572;MATHEMATICAL BOLD FRAKTUR CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D573;MATHEMATICAL BOLD FRAKTUR CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D574;MATHEMATICAL BOLD FRAKTUR CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D575;MATHEMATICAL BOLD FRAKTUR CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D576;MATHEMATICAL BOLD FRAKTUR CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D577;MATHEMATICAL BOLD FRAKTUR CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D578;MATHEMATICAL BOLD FRAKTUR CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D579;MATHEMATICAL BOLD FRAKTUR CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D57A;MATHEMATICAL BOLD FRAKTUR CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D57B;MATHEMATICAL BOLD FRAKTUR CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D57C;MATHEMATICAL BOLD FRAKTUR CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D57D;MATHEMATICAL BOLD FRAKTUR CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D57E;MATHEMATICAL BOLD FRAKTUR CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D57F;MATHEMATICAL BOLD FRAKTUR CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D580;MATHEMATICAL BOLD FRAKTUR CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D581;MATHEMATICAL BOLD FRAKTUR CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D582;MATHEMATICAL BOLD FRAKTUR CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D583;MATHEMATICAL BOLD FRAKTUR CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D584;MATHEMATICAL BOLD FRAKTUR CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D585;MATHEMATICAL BOLD FRAKTUR CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D586;MATHEMATICAL BOLD FRAKTUR SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D587;MATHEMATICAL BOLD FRAKTUR SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D588;MATHEMATICAL BOLD FRAKTUR SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D589;MATHEMATICAL BOLD FRAKTUR SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D58A;MATHEMATICAL BOLD FRAKTUR SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D58B;MATHEMATICAL BOLD FRAKTUR SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D58C;MATHEMATICAL BOLD FRAKTUR SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D58D;MATHEMATICAL BOLD FRAKTUR SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D58E;MATHEMATICAL BOLD FRAKTUR SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D58F;MATHEMATICAL BOLD FRAKTUR SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D590;MATHEMATICAL BOLD FRAKTUR SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D591;MATHEMATICAL BOLD FRAKTUR SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D592;MATHEMATICAL BOLD FRAKTUR SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D593;MATHEMATICAL BOLD FRAKTUR SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D594;MATHEMATICAL BOLD FRAKTUR SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D595;MATHEMATICAL BOLD FRAKTUR SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D596;MATHEMATICAL BOLD FRAKTUR SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D597;MATHEMATICAL BOLD FRAKTUR SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D598;MATHEMATICAL BOLD FRAKTUR SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D599;MATHEMATICAL BOLD FRAKTUR SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D59A;MATHEMATICAL BOLD FRAKTUR SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D59B;MATHEMATICAL BOLD FRAKTUR SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D59C;MATHEMATICAL BOLD FRAKTUR SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D59D;MATHEMATICAL BOLD FRAKTUR SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D59E;MATHEMATICAL BOLD FRAKTUR SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D59F;MATHEMATICAL BOLD FRAKTUR SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D5A0;MATHEMATICAL SANS-SERIF CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D5A1;MATHEMATICAL SANS-SERIF CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D5A2;MATHEMATICAL SANS-SERIF CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D5A3;MATHEMATICAL SANS-SERIF CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D5A4;MATHEMATICAL SANS-SERIF CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D5A5;MATHEMATICAL SANS-SERIF CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D5A6;MATHEMATICAL SANS-SERIF CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D5A7;MATHEMATICAL SANS-SERIF CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D5A8;MATHEMATICAL SANS-SERIF CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D5A9;MATHEMATICAL SANS-SERIF CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D5AA;MATHEMATICAL SANS-SERIF CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D5AB;MATHEMATICAL SANS-SERIF CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D5AC;MATHEMATICAL SANS-SERIF CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D5AD;MATHEMATICAL SANS-SERIF CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D5AE;MATHEMATICAL SANS-SERIF CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D5AF;MATHEMATICAL SANS-SERIF CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D5B0;MATHEMATICAL SANS-SERIF CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D5B1;MATHEMATICAL SANS-SERIF CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D5B2;MATHEMATICAL SANS-SERIF CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D5B3;MATHEMATICAL SANS-SERIF CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D5B4;MATHEMATICAL SANS-SERIF CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D5B5;MATHEMATICAL SANS-SERIF CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D5B6;MATHEMATICAL SANS-SERIF CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D5B7;MATHEMATICAL SANS-SERIF CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D5B8;MATHEMATICAL SANS-SERIF CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D5B9;MATHEMATICAL SANS-SERIF CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D5BA;MATHEMATICAL SANS-SERIF SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D5BB;MATHEMATICAL SANS-SERIF SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D5BC;MATHEMATICAL SANS-SERIF SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D5BD;MATHEMATICAL SANS-SERIF SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D5BE;MATHEMATICAL SANS-SERIF SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D5BF;MATHEMATICAL SANS-SERIF SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D5C0;MATHEMATICAL SANS-SERIF SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D5C1;MATHEMATICAL SANS-SERIF SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D5C2;MATHEMATICAL SANS-SERIF SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D5C3;MATHEMATICAL SANS-SERIF SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D5C4;MATHEMATICAL SANS-SERIF SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D5C5;MATHEMATICAL SANS-SERIF SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D5C6;MATHEMATICAL SANS-SERIF SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D5C7;MATHEMATICAL SANS-SERIF SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D5C8;MATHEMATICAL SANS-SERIF SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D5C9;MATHEMATICAL SANS-SERIF SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D5CA;MATHEMATICAL SANS-SERIF SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D5CB;MATHEMATICAL SANS-SERIF SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D5CC;MATHEMATICAL SANS-SERIF SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D5CD;MATHEMATICAL SANS-SERIF SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D5CE;MATHEMATICAL SANS-SERIF SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D5CF;MATHEMATICAL SANS-SERIF SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D5D0;MATHEMATICAL SANS-SERIF SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D5D1;MATHEMATICAL SANS-SERIF SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D5D2;MATHEMATICAL SANS-SERIF SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D5D3;MATHEMATICAL SANS-SERIF SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D5D4;MATHEMATICAL SANS-SERIF BOLD CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D5D5;MATHEMATICAL SANS-SERIF BOLD CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D5D6;MATHEMATICAL SANS-SERIF BOLD CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D5D7;MATHEMATICAL SANS-SERIF BOLD CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D5D8;MATHEMATICAL SANS-SERIF BOLD CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D5D9;MATHEMATICAL SANS-SERIF BOLD CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D5DA;MATHEMATICAL SANS-SERIF BOLD CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D5DB;MATHEMATICAL SANS-SERIF BOLD CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D5DC;MATHEMATICAL SANS-SERIF BOLD CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D5DD;MATHEMATICAL SANS-SERIF BOLD CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D5DE;MATHEMATICAL SANS-SERIF BOLD CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D5DF;MATHEMATICAL SANS-SERIF BOLD CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D5E0;MATHEMATICAL SANS-SERIF BOLD CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D5E1;MATHEMATICAL SANS-SERIF BOLD CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D5E2;MATHEMATICAL SANS-SERIF BOLD CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D5E3;MATHEMATICAL SANS-SERIF BOLD CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D5E4;MATHEMATICAL SANS-SERIF BOLD CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D5E5;MATHEMATICAL SANS-SERIF BOLD CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D5E6;MATHEMATICAL SANS-SERIF BOLD CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D5E7;MATHEMATICAL SANS-SERIF BOLD CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D5E8;MATHEMATICAL SANS-SERIF BOLD CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D5E9;MATHEMATICAL SANS-SERIF BOLD CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D5EA;MATHEMATICAL SANS-SERIF BOLD CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D5EB;MATHEMATICAL SANS-SERIF BOLD CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D5EC;MATHEMATICAL SANS-SERIF BOLD CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D5ED;MATHEMATICAL SANS-SERIF BOLD CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D5EE;MATHEMATICAL SANS-SERIF BOLD SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D5EF;MATHEMATICAL SANS-SERIF BOLD SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D5F0;MATHEMATICAL SANS-SERIF BOLD SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D5F1;MATHEMATICAL SANS-SERIF BOLD SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D5F2;MATHEMATICAL SANS-SERIF BOLD SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D5F3;MATHEMATICAL SANS-SERIF BOLD SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D5F4;MATHEMATICAL SANS-SERIF BOLD SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D5F5;MATHEMATICAL SANS-SERIF BOLD SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D5F6;MATHEMATICAL SANS-SERIF BOLD SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D5F7;MATHEMATICAL SANS-SERIF BOLD SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D5F8;MATHEMATICAL SANS-SERIF BOLD SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D5F9;MATHEMATICAL SANS-SERIF BOLD SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D5FA;MATHEMATICAL SANS-SERIF BOLD SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D5FB;MATHEMATICAL SANS-SERIF BOLD SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D5FC;MATHEMATICAL SANS-SERIF BOLD SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D5FD;MATHEMATICAL SANS-SERIF BOLD SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D5FE;MATHEMATICAL SANS-SERIF BOLD SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D5FF;MATHEMATICAL SANS-SERIF BOLD SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D600;MATHEMATICAL SANS-SERIF BOLD SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D601;MATHEMATICAL SANS-SERIF BOLD SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D602;MATHEMATICAL SANS-SERIF BOLD SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D603;MATHEMATICAL SANS-SERIF BOLD SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D604;MATHEMATICAL SANS-SERIF BOLD SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D605;MATHEMATICAL SANS-SERIF BOLD SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D606;MATHEMATICAL SANS-SERIF BOLD SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D607;MATHEMATICAL SANS-SERIF BOLD SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D608;MATHEMATICAL SANS-SERIF ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D609;MATHEMATICAL SANS-SERIF ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D60A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D60B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D60C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D60D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D60E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D60F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D610;MATHEMATICAL SANS-SERIF ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D611;MATHEMATICAL SANS-SERIF ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D612;MATHEMATICAL SANS-SERIF ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D613;MATHEMATICAL SANS-SERIF ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D614;MATHEMATICAL SANS-SERIF ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D615;MATHEMATICAL SANS-SERIF ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D616;MATHEMATICAL SANS-SERIF ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D617;MATHEMATICAL SANS-SERIF ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D618;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D619;MATHEMATICAL SANS-SERIF ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D61A;MATHEMATICAL SANS-SERIF ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D61B;MATHEMATICAL SANS-SERIF ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D61C;MATHEMATICAL SANS-SERIF ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D61D;MATHEMATICAL SANS-SERIF ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D61E;MATHEMATICAL SANS-SERIF ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D61F;MATHEMATICAL SANS-SERIF ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D620;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D621;MATHEMATICAL SANS-SERIF ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D622;MATHEMATICAL SANS-SERIF ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D623;MATHEMATICAL SANS-SERIF ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D624;MATHEMATICAL SANS-SERIF ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D625;MATHEMATICAL SANS-SERIF ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D626;MATHEMATICAL SANS-SERIF ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D627;MATHEMATICAL SANS-SERIF ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D628;MATHEMATICAL SANS-SERIF ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D629;MATHEMATICAL SANS-SERIF ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D62A;MATHEMATICAL SANS-SERIF ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D62B;MATHEMATICAL SANS-SERIF ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D62C;MATHEMATICAL SANS-SERIF ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D62D;MATHEMATICAL SANS-SERIF ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D62E;MATHEMATICAL SANS-SERIF ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D62F;MATHEMATICAL SANS-SERIF ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D630;MATHEMATICAL SANS-SERIF ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D631;MATHEMATICAL SANS-SERIF ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D632;MATHEMATICAL SANS-SERIF ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D633;MATHEMATICAL SANS-SERIF ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D634;MATHEMATICAL SANS-SERIF ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D635;MATHEMATICAL SANS-SERIF ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D636;MATHEMATICAL SANS-SERIF ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D637;MATHEMATICAL SANS-SERIF ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D638;MATHEMATICAL SANS-SERIF ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D639;MATHEMATICAL SANS-SERIF ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D63A;MATHEMATICAL SANS-SERIF ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D63B;MATHEMATICAL SANS-SERIF ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D63C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D63D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D63E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D63F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D640;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D641;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D642;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D643;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D644;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D645;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D646;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D647;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D648;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D649;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D64A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D64B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D64C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D64D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D64E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D64F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D650;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D651;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D652;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D653;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D654;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D655;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D656;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D657;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D658;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D659;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D65A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D65B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D65C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D65D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D65E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D65F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D660;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D661;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D662;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D663;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D664;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D665;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D666;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D667;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D668;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D669;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D66A;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D66B;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D66C;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D66D;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D66E;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D66F;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D670;MATHEMATICAL MONOSPACE CAPITAL A;Lu;0;L;<font> 0041;;;;N;;;;;
+1D671;MATHEMATICAL MONOSPACE CAPITAL B;Lu;0;L;<font> 0042;;;;N;;;;;
+1D672;MATHEMATICAL MONOSPACE CAPITAL C;Lu;0;L;<font> 0043;;;;N;;;;;
+1D673;MATHEMATICAL MONOSPACE CAPITAL D;Lu;0;L;<font> 0044;;;;N;;;;;
+1D674;MATHEMATICAL MONOSPACE CAPITAL E;Lu;0;L;<font> 0045;;;;N;;;;;
+1D675;MATHEMATICAL MONOSPACE CAPITAL F;Lu;0;L;<font> 0046;;;;N;;;;;
+1D676;MATHEMATICAL MONOSPACE CAPITAL G;Lu;0;L;<font> 0047;;;;N;;;;;
+1D677;MATHEMATICAL MONOSPACE CAPITAL H;Lu;0;L;<font> 0048;;;;N;;;;;
+1D678;MATHEMATICAL MONOSPACE CAPITAL I;Lu;0;L;<font> 0049;;;;N;;;;;
+1D679;MATHEMATICAL MONOSPACE CAPITAL J;Lu;0;L;<font> 004A;;;;N;;;;;
+1D67A;MATHEMATICAL MONOSPACE CAPITAL K;Lu;0;L;<font> 004B;;;;N;;;;;
+1D67B;MATHEMATICAL MONOSPACE CAPITAL L;Lu;0;L;<font> 004C;;;;N;;;;;
+1D67C;MATHEMATICAL MONOSPACE CAPITAL M;Lu;0;L;<font> 004D;;;;N;;;;;
+1D67D;MATHEMATICAL MONOSPACE CAPITAL N;Lu;0;L;<font> 004E;;;;N;;;;;
+1D67E;MATHEMATICAL MONOSPACE CAPITAL O;Lu;0;L;<font> 004F;;;;N;;;;;
+1D67F;MATHEMATICAL MONOSPACE CAPITAL P;Lu;0;L;<font> 0050;;;;N;;;;;
+1D680;MATHEMATICAL MONOSPACE CAPITAL Q;Lu;0;L;<font> 0051;;;;N;;;;;
+1D681;MATHEMATICAL MONOSPACE CAPITAL R;Lu;0;L;<font> 0052;;;;N;;;;;
+1D682;MATHEMATICAL MONOSPACE CAPITAL S;Lu;0;L;<font> 0053;;;;N;;;;;
+1D683;MATHEMATICAL MONOSPACE CAPITAL T;Lu;0;L;<font> 0054;;;;N;;;;;
+1D684;MATHEMATICAL MONOSPACE CAPITAL U;Lu;0;L;<font> 0055;;;;N;;;;;
+1D685;MATHEMATICAL MONOSPACE CAPITAL V;Lu;0;L;<font> 0056;;;;N;;;;;
+1D686;MATHEMATICAL MONOSPACE CAPITAL W;Lu;0;L;<font> 0057;;;;N;;;;;
+1D687;MATHEMATICAL MONOSPACE CAPITAL X;Lu;0;L;<font> 0058;;;;N;;;;;
+1D688;MATHEMATICAL MONOSPACE CAPITAL Y;Lu;0;L;<font> 0059;;;;N;;;;;
+1D689;MATHEMATICAL MONOSPACE CAPITAL Z;Lu;0;L;<font> 005A;;;;N;;;;;
+1D68A;MATHEMATICAL MONOSPACE SMALL A;Ll;0;L;<font> 0061;;;;N;;;;;
+1D68B;MATHEMATICAL MONOSPACE SMALL B;Ll;0;L;<font> 0062;;;;N;;;;;
+1D68C;MATHEMATICAL MONOSPACE SMALL C;Ll;0;L;<font> 0063;;;;N;;;;;
+1D68D;MATHEMATICAL MONOSPACE SMALL D;Ll;0;L;<font> 0064;;;;N;;;;;
+1D68E;MATHEMATICAL MONOSPACE SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+1D68F;MATHEMATICAL MONOSPACE SMALL F;Ll;0;L;<font> 0066;;;;N;;;;;
+1D690;MATHEMATICAL MONOSPACE SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+1D691;MATHEMATICAL MONOSPACE SMALL H;Ll;0;L;<font> 0068;;;;N;;;;;
+1D692;MATHEMATICAL MONOSPACE SMALL I;Ll;0;L;<font> 0069;;;;N;;;;;
+1D693;MATHEMATICAL MONOSPACE SMALL J;Ll;0;L;<font> 006A;;;;N;;;;;
+1D694;MATHEMATICAL MONOSPACE SMALL K;Ll;0;L;<font> 006B;;;;N;;;;;
+1D695;MATHEMATICAL MONOSPACE SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+1D696;MATHEMATICAL MONOSPACE SMALL M;Ll;0;L;<font> 006D;;;;N;;;;;
+1D697;MATHEMATICAL MONOSPACE SMALL N;Ll;0;L;<font> 006E;;;;N;;;;;
+1D698;MATHEMATICAL MONOSPACE SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+1D699;MATHEMATICAL MONOSPACE SMALL P;Ll;0;L;<font> 0070;;;;N;;;;;
+1D69A;MATHEMATICAL MONOSPACE SMALL Q;Ll;0;L;<font> 0071;;;;N;;;;;
+1D69B;MATHEMATICAL MONOSPACE SMALL R;Ll;0;L;<font> 0072;;;;N;;;;;
+1D69C;MATHEMATICAL MONOSPACE SMALL S;Ll;0;L;<font> 0073;;;;N;;;;;
+1D69D;MATHEMATICAL MONOSPACE SMALL T;Ll;0;L;<font> 0074;;;;N;;;;;
+1D69E;MATHEMATICAL MONOSPACE SMALL U;Ll;0;L;<font> 0075;;;;N;;;;;
+1D69F;MATHEMATICAL MONOSPACE SMALL V;Ll;0;L;<font> 0076;;;;N;;;;;
+1D6A0;MATHEMATICAL MONOSPACE SMALL W;Ll;0;L;<font> 0077;;;;N;;;;;
+1D6A1;MATHEMATICAL MONOSPACE SMALL X;Ll;0;L;<font> 0078;;;;N;;;;;
+1D6A2;MATHEMATICAL MONOSPACE SMALL Y;Ll;0;L;<font> 0079;;;;N;;;;;
+1D6A3;MATHEMATICAL MONOSPACE SMALL Z;Ll;0;L;<font> 007A;;;;N;;;;;
+1D6A4;MATHEMATICAL ITALIC SMALL DOTLESS I;Ll;0;L;<font> 0131;;;;N;;;;;
+1D6A5;MATHEMATICAL ITALIC SMALL DOTLESS J;Ll;0;L;<font> 0237;;;;N;;;;;
+1D6A8;MATHEMATICAL BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D6A9;MATHEMATICAL BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D6AA;MATHEMATICAL BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D6AB;MATHEMATICAL BOLD CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D6AC;MATHEMATICAL BOLD CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D6AD;MATHEMATICAL BOLD CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D6AE;MATHEMATICAL BOLD CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D6AF;MATHEMATICAL BOLD CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D6B0;MATHEMATICAL BOLD CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D6B1;MATHEMATICAL BOLD CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D6B2;MATHEMATICAL BOLD CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D6B3;MATHEMATICAL BOLD CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D6B4;MATHEMATICAL BOLD CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D6B5;MATHEMATICAL BOLD CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D6B6;MATHEMATICAL BOLD CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D6B7;MATHEMATICAL BOLD CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D6B8;MATHEMATICAL BOLD CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D6B9;MATHEMATICAL BOLD CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D6BA;MATHEMATICAL BOLD CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D6BB;MATHEMATICAL BOLD CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D6BC;MATHEMATICAL BOLD CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D6BD;MATHEMATICAL BOLD CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D6BE;MATHEMATICAL BOLD CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D6BF;MATHEMATICAL BOLD CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D6C0;MATHEMATICAL BOLD CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D6C1;MATHEMATICAL BOLD NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D6C2;MATHEMATICAL BOLD SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D6C3;MATHEMATICAL BOLD SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D6C4;MATHEMATICAL BOLD SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D6C5;MATHEMATICAL BOLD SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D6C6;MATHEMATICAL BOLD SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D6C7;MATHEMATICAL BOLD SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D6C8;MATHEMATICAL BOLD SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D6C9;MATHEMATICAL BOLD SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D6CA;MATHEMATICAL BOLD SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D6CB;MATHEMATICAL BOLD SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D6CC;MATHEMATICAL BOLD SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D6CD;MATHEMATICAL BOLD SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D6CE;MATHEMATICAL BOLD SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D6CF;MATHEMATICAL BOLD SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D6D0;MATHEMATICAL BOLD SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D6D1;MATHEMATICAL BOLD SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D6D2;MATHEMATICAL BOLD SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D6D3;MATHEMATICAL BOLD SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D6D4;MATHEMATICAL BOLD SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D6D5;MATHEMATICAL BOLD SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D6D6;MATHEMATICAL BOLD SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D6D7;MATHEMATICAL BOLD SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D6D8;MATHEMATICAL BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D6D9;MATHEMATICAL BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D6DA;MATHEMATICAL BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D6DB;MATHEMATICAL BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;;
+1D6DC;MATHEMATICAL BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D6DD;MATHEMATICAL BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D6DE;MATHEMATICAL BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D6DF;MATHEMATICAL BOLD PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D6E0;MATHEMATICAL BOLD RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D6E1;MATHEMATICAL BOLD PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D6E2;MATHEMATICAL ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D6E3;MATHEMATICAL ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D6E4;MATHEMATICAL ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D6E5;MATHEMATICAL ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D6E6;MATHEMATICAL ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D6E7;MATHEMATICAL ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D6E8;MATHEMATICAL ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D6E9;MATHEMATICAL ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D6EA;MATHEMATICAL ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D6EB;MATHEMATICAL ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D6EC;MATHEMATICAL ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D6ED;MATHEMATICAL ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D6EE;MATHEMATICAL ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D6EF;MATHEMATICAL ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D6F0;MATHEMATICAL ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D6F1;MATHEMATICAL ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D6F2;MATHEMATICAL ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D6F3;MATHEMATICAL ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D6F4;MATHEMATICAL ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D6F5;MATHEMATICAL ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D6F6;MATHEMATICAL ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D6F7;MATHEMATICAL ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D6F8;MATHEMATICAL ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D6F9;MATHEMATICAL ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D6FA;MATHEMATICAL ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D6FB;MATHEMATICAL ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D6FC;MATHEMATICAL ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D6FD;MATHEMATICAL ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D6FE;MATHEMATICAL ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D6FF;MATHEMATICAL ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D700;MATHEMATICAL ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D701;MATHEMATICAL ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D702;MATHEMATICAL ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D703;MATHEMATICAL ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D704;MATHEMATICAL ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D705;MATHEMATICAL ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D706;MATHEMATICAL ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D707;MATHEMATICAL ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D708;MATHEMATICAL ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D709;MATHEMATICAL ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D70A;MATHEMATICAL ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D70B;MATHEMATICAL ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D70C;MATHEMATICAL ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D70D;MATHEMATICAL ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D70E;MATHEMATICAL ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D70F;MATHEMATICAL ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D710;MATHEMATICAL ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D711;MATHEMATICAL ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D712;MATHEMATICAL ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D713;MATHEMATICAL ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D714;MATHEMATICAL ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D715;MATHEMATICAL ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;;
+1D716;MATHEMATICAL ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D717;MATHEMATICAL ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D718;MATHEMATICAL ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D719;MATHEMATICAL ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D71A;MATHEMATICAL ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D71B;MATHEMATICAL ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D71C;MATHEMATICAL BOLD ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D71D;MATHEMATICAL BOLD ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D71E;MATHEMATICAL BOLD ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D71F;MATHEMATICAL BOLD ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D720;MATHEMATICAL BOLD ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D721;MATHEMATICAL BOLD ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D722;MATHEMATICAL BOLD ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D723;MATHEMATICAL BOLD ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D724;MATHEMATICAL BOLD ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D725;MATHEMATICAL BOLD ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D726;MATHEMATICAL BOLD ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D727;MATHEMATICAL BOLD ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D728;MATHEMATICAL BOLD ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D729;MATHEMATICAL BOLD ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D72A;MATHEMATICAL BOLD ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D72B;MATHEMATICAL BOLD ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D72C;MATHEMATICAL BOLD ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D72D;MATHEMATICAL BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D72E;MATHEMATICAL BOLD ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D72F;MATHEMATICAL BOLD ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D730;MATHEMATICAL BOLD ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D731;MATHEMATICAL BOLD ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D732;MATHEMATICAL BOLD ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D733;MATHEMATICAL BOLD ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D734;MATHEMATICAL BOLD ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D735;MATHEMATICAL BOLD ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D736;MATHEMATICAL BOLD ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D737;MATHEMATICAL BOLD ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D738;MATHEMATICAL BOLD ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D739;MATHEMATICAL BOLD ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D73A;MATHEMATICAL BOLD ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D73B;MATHEMATICAL BOLD ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D73C;MATHEMATICAL BOLD ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D73D;MATHEMATICAL BOLD ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D73E;MATHEMATICAL BOLD ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D73F;MATHEMATICAL BOLD ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D740;MATHEMATICAL BOLD ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D741;MATHEMATICAL BOLD ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D742;MATHEMATICAL BOLD ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D743;MATHEMATICAL BOLD ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D744;MATHEMATICAL BOLD ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D745;MATHEMATICAL BOLD ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D746;MATHEMATICAL BOLD ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D747;MATHEMATICAL BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D748;MATHEMATICAL BOLD ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D749;MATHEMATICAL BOLD ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D74A;MATHEMATICAL BOLD ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D74B;MATHEMATICAL BOLD ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D74C;MATHEMATICAL BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D74D;MATHEMATICAL BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D74E;MATHEMATICAL BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D74F;MATHEMATICAL BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;;
+1D750;MATHEMATICAL BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D751;MATHEMATICAL BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D752;MATHEMATICAL BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D753;MATHEMATICAL BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D754;MATHEMATICAL BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D755;MATHEMATICAL BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D756;MATHEMATICAL SANS-SERIF BOLD CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D757;MATHEMATICAL SANS-SERIF BOLD CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D758;MATHEMATICAL SANS-SERIF BOLD CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D759;MATHEMATICAL SANS-SERIF BOLD CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D75A;MATHEMATICAL SANS-SERIF BOLD CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D75B;MATHEMATICAL SANS-SERIF BOLD CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D75C;MATHEMATICAL SANS-SERIF BOLD CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D75D;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D75E;MATHEMATICAL SANS-SERIF BOLD CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D75F;MATHEMATICAL SANS-SERIF BOLD CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D760;MATHEMATICAL SANS-SERIF BOLD CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D761;MATHEMATICAL SANS-SERIF BOLD CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D762;MATHEMATICAL SANS-SERIF BOLD CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D763;MATHEMATICAL SANS-SERIF BOLD CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D764;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D765;MATHEMATICAL SANS-SERIF BOLD CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D766;MATHEMATICAL SANS-SERIF BOLD CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D767;MATHEMATICAL SANS-SERIF BOLD CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D768;MATHEMATICAL SANS-SERIF BOLD CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D769;MATHEMATICAL SANS-SERIF BOLD CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D76A;MATHEMATICAL SANS-SERIF BOLD CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D76B;MATHEMATICAL SANS-SERIF BOLD CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D76C;MATHEMATICAL SANS-SERIF BOLD CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D76D;MATHEMATICAL SANS-SERIF BOLD CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D76E;MATHEMATICAL SANS-SERIF BOLD CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D76F;MATHEMATICAL SANS-SERIF BOLD NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D770;MATHEMATICAL SANS-SERIF BOLD SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D771;MATHEMATICAL SANS-SERIF BOLD SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D772;MATHEMATICAL SANS-SERIF BOLD SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D773;MATHEMATICAL SANS-SERIF BOLD SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D774;MATHEMATICAL SANS-SERIF BOLD SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D775;MATHEMATICAL SANS-SERIF BOLD SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D776;MATHEMATICAL SANS-SERIF BOLD SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D777;MATHEMATICAL SANS-SERIF BOLD SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D778;MATHEMATICAL SANS-SERIF BOLD SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D779;MATHEMATICAL SANS-SERIF BOLD SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D77A;MATHEMATICAL SANS-SERIF BOLD SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D77B;MATHEMATICAL SANS-SERIF BOLD SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D77C;MATHEMATICAL SANS-SERIF BOLD SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D77D;MATHEMATICAL SANS-SERIF BOLD SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D77E;MATHEMATICAL SANS-SERIF BOLD SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D77F;MATHEMATICAL SANS-SERIF BOLD SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D780;MATHEMATICAL SANS-SERIF BOLD SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D781;MATHEMATICAL SANS-SERIF BOLD SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D782;MATHEMATICAL SANS-SERIF BOLD SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D783;MATHEMATICAL SANS-SERIF BOLD SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D784;MATHEMATICAL SANS-SERIF BOLD SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D785;MATHEMATICAL SANS-SERIF BOLD SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D786;MATHEMATICAL SANS-SERIF BOLD SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D787;MATHEMATICAL SANS-SERIF BOLD SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D788;MATHEMATICAL SANS-SERIF BOLD SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D789;MATHEMATICAL SANS-SERIF BOLD PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;;
+1D78A;MATHEMATICAL SANS-SERIF BOLD EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D78B;MATHEMATICAL SANS-SERIF BOLD THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D78C;MATHEMATICAL SANS-SERIF BOLD KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D78D;MATHEMATICAL SANS-SERIF BOLD PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D78E;MATHEMATICAL SANS-SERIF BOLD RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D78F;MATHEMATICAL SANS-SERIF BOLD PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D790;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ALPHA;Lu;0;L;<font> 0391;;;;N;;;;;
+1D791;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL BETA;Lu;0;L;<font> 0392;;;;N;;;;;
+1D792;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL GAMMA;Lu;0;L;<font> 0393;;;;N;;;;;
+1D793;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL DELTA;Lu;0;L;<font> 0394;;;;N;;;;;
+1D794;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL EPSILON;Lu;0;L;<font> 0395;;;;N;;;;;
+1D795;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ZETA;Lu;0;L;<font> 0396;;;;N;;;;;
+1D796;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL ETA;Lu;0;L;<font> 0397;;;;N;;;;;
+1D797;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA;Lu;0;L;<font> 0398;;;;N;;;;;
+1D798;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL IOTA;Lu;0;L;<font> 0399;;;;N;;;;;
+1D799;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL KAPPA;Lu;0;L;<font> 039A;;;;N;;;;;
+1D79A;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL LAMDA;Lu;0;L;<font> 039B;;;;N;;;;;
+1D79B;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL MU;Lu;0;L;<font> 039C;;;;N;;;;;
+1D79C;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL NU;Lu;0;L;<font> 039D;;;;N;;;;;
+1D79D;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL XI;Lu;0;L;<font> 039E;;;;N;;;;;
+1D79E;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMICRON;Lu;0;L;<font> 039F;;;;N;;;;;
+1D79F;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PI;Lu;0;L;<font> 03A0;;;;N;;;;;
+1D7A0;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL RHO;Lu;0;L;<font> 03A1;;;;N;;;;;
+1D7A1;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL THETA SYMBOL;Lu;0;L;<font> 03F4;;;;N;;;;;
+1D7A2;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL SIGMA;Lu;0;L;<font> 03A3;;;;N;;;;;
+1D7A3;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL TAU;Lu;0;L;<font> 03A4;;;;N;;;;;
+1D7A4;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL UPSILON;Lu;0;L;<font> 03A5;;;;N;;;;;
+1D7A5;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PHI;Lu;0;L;<font> 03A6;;;;N;;;;;
+1D7A6;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL CHI;Lu;0;L;<font> 03A7;;;;N;;;;;
+1D7A7;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL PSI;Lu;0;L;<font> 03A8;;;;N;;;;;
+1D7A8;MATHEMATICAL SANS-SERIF BOLD ITALIC CAPITAL OMEGA;Lu;0;L;<font> 03A9;;;;N;;;;;
+1D7A9;MATHEMATICAL SANS-SERIF BOLD ITALIC NABLA;Sm;0;L;<font> 2207;;;;N;;;;;
+1D7AA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ALPHA;Ll;0;L;<font> 03B1;;;;N;;;;;
+1D7AB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL BETA;Ll;0;L;<font> 03B2;;;;N;;;;;
+1D7AC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL GAMMA;Ll;0;L;<font> 03B3;;;;N;;;;;
+1D7AD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL DELTA;Ll;0;L;<font> 03B4;;;;N;;;;;
+1D7AE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL EPSILON;Ll;0;L;<font> 03B5;;;;N;;;;;
+1D7AF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ZETA;Ll;0;L;<font> 03B6;;;;N;;;;;
+1D7B0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL ETA;Ll;0;L;<font> 03B7;;;;N;;;;;
+1D7B1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL THETA;Ll;0;L;<font> 03B8;;;;N;;;;;
+1D7B2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL IOTA;Ll;0;L;<font> 03B9;;;;N;;;;;
+1D7B3;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL KAPPA;Ll;0;L;<font> 03BA;;;;N;;;;;
+1D7B4;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL LAMDA;Ll;0;L;<font> 03BB;;;;N;;;;;
+1D7B5;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL MU;Ll;0;L;<font> 03BC;;;;N;;;;;
+1D7B6;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL NU;Ll;0;L;<font> 03BD;;;;N;;;;;
+1D7B7;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL XI;Ll;0;L;<font> 03BE;;;;N;;;;;
+1D7B8;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMICRON;Ll;0;L;<font> 03BF;;;;N;;;;;
+1D7B9;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PI;Ll;0;L;<font> 03C0;;;;N;;;;;
+1D7BA;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL RHO;Ll;0;L;<font> 03C1;;;;N;;;;;
+1D7BB;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL FINAL SIGMA;Ll;0;L;<font> 03C2;;;;N;;;;;
+1D7BC;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL SIGMA;Ll;0;L;<font> 03C3;;;;N;;;;;
+1D7BD;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL TAU;Ll;0;L;<font> 03C4;;;;N;;;;;
+1D7BE;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL UPSILON;Ll;0;L;<font> 03C5;;;;N;;;;;
+1D7BF;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PHI;Ll;0;L;<font> 03C6;;;;N;;;;;
+1D7C0;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL CHI;Ll;0;L;<font> 03C7;;;;N;;;;;
+1D7C1;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL PSI;Ll;0;L;<font> 03C8;;;;N;;;;;
+1D7C2;MATHEMATICAL SANS-SERIF BOLD ITALIC SMALL OMEGA;Ll;0;L;<font> 03C9;;;;N;;;;;
+1D7C3;MATHEMATICAL SANS-SERIF BOLD ITALIC PARTIAL DIFFERENTIAL;Sm;0;L;<font> 2202;;;;Y;;;;;
+1D7C4;MATHEMATICAL SANS-SERIF BOLD ITALIC EPSILON SYMBOL;Ll;0;L;<font> 03F5;;;;N;;;;;
+1D7C5;MATHEMATICAL SANS-SERIF BOLD ITALIC THETA SYMBOL;Ll;0;L;<font> 03D1;;;;N;;;;;
+1D7C6;MATHEMATICAL SANS-SERIF BOLD ITALIC KAPPA SYMBOL;Ll;0;L;<font> 03F0;;;;N;;;;;
+1D7C7;MATHEMATICAL SANS-SERIF BOLD ITALIC PHI SYMBOL;Ll;0;L;<font> 03D5;;;;N;;;;;
+1D7C8;MATHEMATICAL SANS-SERIF BOLD ITALIC RHO SYMBOL;Ll;0;L;<font> 03F1;;;;N;;;;;
+1D7C9;MATHEMATICAL SANS-SERIF BOLD ITALIC PI SYMBOL;Ll;0;L;<font> 03D6;;;;N;;;;;
+1D7CA;MATHEMATICAL BOLD CAPITAL DIGAMMA;Lu;0;L;<font> 03DC;;;;N;;;;;
+1D7CB;MATHEMATICAL BOLD SMALL DIGAMMA;Ll;0;L;<font> 03DD;;;;N;;;;;
+1D7CE;MATHEMATICAL BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7CF;MATHEMATICAL BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7D0;MATHEMATICAL BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7D1;MATHEMATICAL BOLD DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7D2;MATHEMATICAL BOLD DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7D3;MATHEMATICAL BOLD DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7D4;MATHEMATICAL BOLD DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7D5;MATHEMATICAL BOLD DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7D6;MATHEMATICAL BOLD DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7D7;MATHEMATICAL BOLD DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D7D8;MATHEMATICAL DOUBLE-STRUCK DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7D9;MATHEMATICAL DOUBLE-STRUCK DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7DA;MATHEMATICAL DOUBLE-STRUCK DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7DB;MATHEMATICAL DOUBLE-STRUCK DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7DC;MATHEMATICAL DOUBLE-STRUCK DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7DD;MATHEMATICAL DOUBLE-STRUCK DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7DE;MATHEMATICAL DOUBLE-STRUCK DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7DF;MATHEMATICAL DOUBLE-STRUCK DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7E0;MATHEMATICAL DOUBLE-STRUCK DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7E1;MATHEMATICAL DOUBLE-STRUCK DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D7E2;MATHEMATICAL SANS-SERIF DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7E3;MATHEMATICAL SANS-SERIF DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7E4;MATHEMATICAL SANS-SERIF DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7E5;MATHEMATICAL SANS-SERIF DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7E6;MATHEMATICAL SANS-SERIF DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7E7;MATHEMATICAL SANS-SERIF DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7E8;MATHEMATICAL SANS-SERIF DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7E9;MATHEMATICAL SANS-SERIF DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7EA;MATHEMATICAL SANS-SERIF DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7EB;MATHEMATICAL SANS-SERIF DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D7EC;MATHEMATICAL SANS-SERIF BOLD DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7ED;MATHEMATICAL SANS-SERIF BOLD DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7EE;MATHEMATICAL SANS-SERIF BOLD DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7EF;MATHEMATICAL SANS-SERIF BOLD DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7F0;MATHEMATICAL SANS-SERIF BOLD DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7F1;MATHEMATICAL SANS-SERIF BOLD DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7F2;MATHEMATICAL SANS-SERIF BOLD DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7F3;MATHEMATICAL SANS-SERIF BOLD DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7F4;MATHEMATICAL SANS-SERIF BOLD DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7F5;MATHEMATICAL SANS-SERIF BOLD DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+1D7F6;MATHEMATICAL MONOSPACE DIGIT ZERO;Nd;0;EN;<font> 0030;0;0;0;N;;;;;
+1D7F7;MATHEMATICAL MONOSPACE DIGIT ONE;Nd;0;EN;<font> 0031;1;1;1;N;;;;;
+1D7F8;MATHEMATICAL MONOSPACE DIGIT TWO;Nd;0;EN;<font> 0032;2;2;2;N;;;;;
+1D7F9;MATHEMATICAL MONOSPACE DIGIT THREE;Nd;0;EN;<font> 0033;3;3;3;N;;;;;
+1D7FA;MATHEMATICAL MONOSPACE DIGIT FOUR;Nd;0;EN;<font> 0034;4;4;4;N;;;;;
+1D7FB;MATHEMATICAL MONOSPACE DIGIT FIVE;Nd;0;EN;<font> 0035;5;5;5;N;;;;;
+1D7FC;MATHEMATICAL MONOSPACE DIGIT SIX;Nd;0;EN;<font> 0036;6;6;6;N;;;;;
+1D7FD;MATHEMATICAL MONOSPACE DIGIT SEVEN;Nd;0;EN;<font> 0037;7;7;7;N;;;;;
+1D7FE;MATHEMATICAL MONOSPACE DIGIT EIGHT;Nd;0;EN;<font> 0038;8;8;8;N;;;;;
+1D7FF;MATHEMATICAL MONOSPACE DIGIT NINE;Nd;0;EN;<font> 0039;9;9;9;N;;;;;
+20000;<CJK Ideograph Extension B, First>;Lo;0;L;;;;;N;;;;;
+2A6D6;<CJK Ideograph Extension B, Last>;Lo;0;L;;;;;N;;;;;
+2F800;CJK COMPATIBILITY IDEOGRAPH-2F800;Lo;0;L;4E3D;;;;N;;;;;
+2F801;CJK COMPATIBILITY IDEOGRAPH-2F801;Lo;0;L;4E38;;;;N;;;;;
+2F802;CJK COMPATIBILITY IDEOGRAPH-2F802;Lo;0;L;4E41;;;;N;;;;;
+2F803;CJK COMPATIBILITY IDEOGRAPH-2F803;Lo;0;L;20122;;;;N;;;;;
+2F804;CJK COMPATIBILITY IDEOGRAPH-2F804;Lo;0;L;4F60;;;;N;;;;;
+2F805;CJK COMPATIBILITY IDEOGRAPH-2F805;Lo;0;L;4FAE;;;;N;;;;;
+2F806;CJK COMPATIBILITY IDEOGRAPH-2F806;Lo;0;L;4FBB;;;;N;;;;;
+2F807;CJK COMPATIBILITY IDEOGRAPH-2F807;Lo;0;L;5002;;;;N;;;;;
+2F808;CJK COMPATIBILITY IDEOGRAPH-2F808;Lo;0;L;507A;;;;N;;;;;
+2F809;CJK COMPATIBILITY IDEOGRAPH-2F809;Lo;0;L;5099;;;;N;;;;;
+2F80A;CJK COMPATIBILITY IDEOGRAPH-2F80A;Lo;0;L;50E7;;;;N;;;;;
+2F80B;CJK COMPATIBILITY IDEOGRAPH-2F80B;Lo;0;L;50CF;;;;N;;;;;
+2F80C;CJK COMPATIBILITY IDEOGRAPH-2F80C;Lo;0;L;349E;;;;N;;;;;
+2F80D;CJK COMPATIBILITY IDEOGRAPH-2F80D;Lo;0;L;2063A;;;;N;;;;;
+2F80E;CJK COMPATIBILITY IDEOGRAPH-2F80E;Lo;0;L;514D;;;;N;;;;;
+2F80F;CJK COMPATIBILITY IDEOGRAPH-2F80F;Lo;0;L;5154;;;;N;;;;;
+2F810;CJK COMPATIBILITY IDEOGRAPH-2F810;Lo;0;L;5164;;;;N;;;;;
+2F811;CJK COMPATIBILITY IDEOGRAPH-2F811;Lo;0;L;5177;;;;N;;;;;
+2F812;CJK COMPATIBILITY IDEOGRAPH-2F812;Lo;0;L;2051C;;;;N;;;;;
+2F813;CJK COMPATIBILITY IDEOGRAPH-2F813;Lo;0;L;34B9;;;;N;;;;;
+2F814;CJK COMPATIBILITY IDEOGRAPH-2F814;Lo;0;L;5167;;;;N;;;;;
+2F815;CJK COMPATIBILITY IDEOGRAPH-2F815;Lo;0;L;518D;;;;N;;;;;
+2F816;CJK COMPATIBILITY IDEOGRAPH-2F816;Lo;0;L;2054B;;;;N;;;;;
+2F817;CJK COMPATIBILITY IDEOGRAPH-2F817;Lo;0;L;5197;;;;N;;;;;
+2F818;CJK COMPATIBILITY IDEOGRAPH-2F818;Lo;0;L;51A4;;;;N;;;;;
+2F819;CJK COMPATIBILITY IDEOGRAPH-2F819;Lo;0;L;4ECC;;;;N;;;;;
+2F81A;CJK COMPATIBILITY IDEOGRAPH-2F81A;Lo;0;L;51AC;;;;N;;;;;
+2F81B;CJK COMPATIBILITY IDEOGRAPH-2F81B;Lo;0;L;51B5;;;;N;;;;;
+2F81C;CJK COMPATIBILITY IDEOGRAPH-2F81C;Lo;0;L;291DF;;;;N;;;;;
+2F81D;CJK COMPATIBILITY IDEOGRAPH-2F81D;Lo;0;L;51F5;;;;N;;;;;
+2F81E;CJK COMPATIBILITY IDEOGRAPH-2F81E;Lo;0;L;5203;;;;N;;;;;
+2F81F;CJK COMPATIBILITY IDEOGRAPH-2F81F;Lo;0;L;34DF;;;;N;;;;;
+2F820;CJK COMPATIBILITY IDEOGRAPH-2F820;Lo;0;L;523B;;;;N;;;;;
+2F821;CJK COMPATIBILITY IDEOGRAPH-2F821;Lo;0;L;5246;;;;N;;;;;
+2F822;CJK COMPATIBILITY IDEOGRAPH-2F822;Lo;0;L;5272;;;;N;;;;;
+2F823;CJK COMPATIBILITY IDEOGRAPH-2F823;Lo;0;L;5277;;;;N;;;;;
+2F824;CJK COMPATIBILITY IDEOGRAPH-2F824;Lo;0;L;3515;;;;N;;;;;
+2F825;CJK COMPATIBILITY IDEOGRAPH-2F825;Lo;0;L;52C7;;;;N;;;;;
+2F826;CJK COMPATIBILITY IDEOGRAPH-2F826;Lo;0;L;52C9;;;;N;;;;;
+2F827;CJK COMPATIBILITY IDEOGRAPH-2F827;Lo;0;L;52E4;;;;N;;;;;
+2F828;CJK COMPATIBILITY IDEOGRAPH-2F828;Lo;0;L;52FA;;;;N;;;;;
+2F829;CJK COMPATIBILITY IDEOGRAPH-2F829;Lo;0;L;5305;;;;N;;;;;
+2F82A;CJK COMPATIBILITY IDEOGRAPH-2F82A;Lo;0;L;5306;;;;N;;;;;
+2F82B;CJK COMPATIBILITY IDEOGRAPH-2F82B;Lo;0;L;5317;;;;N;;;;;
+2F82C;CJK COMPATIBILITY IDEOGRAPH-2F82C;Lo;0;L;5349;;;;N;;;;;
+2F82D;CJK COMPATIBILITY IDEOGRAPH-2F82D;Lo;0;L;5351;;;;N;;;;;
+2F82E;CJK COMPATIBILITY IDEOGRAPH-2F82E;Lo;0;L;535A;;;;N;;;;;
+2F82F;CJK COMPATIBILITY IDEOGRAPH-2F82F;Lo;0;L;5373;;;;N;;;;;
+2F830;CJK COMPATIBILITY IDEOGRAPH-2F830;Lo;0;L;537D;;;;N;;;;;
+2F831;CJK COMPATIBILITY IDEOGRAPH-2F831;Lo;0;L;537F;;;;N;;;;;
+2F832;CJK COMPATIBILITY IDEOGRAPH-2F832;Lo;0;L;537F;;;;N;;;;;
+2F833;CJK COMPATIBILITY IDEOGRAPH-2F833;Lo;0;L;537F;;;;N;;;;;
+2F834;CJK COMPATIBILITY IDEOGRAPH-2F834;Lo;0;L;20A2C;;;;N;;;;;
+2F835;CJK COMPATIBILITY IDEOGRAPH-2F835;Lo;0;L;7070;;;;N;;;;;
+2F836;CJK COMPATIBILITY IDEOGRAPH-2F836;Lo;0;L;53CA;;;;N;;;;;
+2F837;CJK COMPATIBILITY IDEOGRAPH-2F837;Lo;0;L;53DF;;;;N;;;;;
+2F838;CJK COMPATIBILITY IDEOGRAPH-2F838;Lo;0;L;20B63;;;;N;;;;;
+2F839;CJK COMPATIBILITY IDEOGRAPH-2F839;Lo;0;L;53EB;;;;N;;;;;
+2F83A;CJK COMPATIBILITY IDEOGRAPH-2F83A;Lo;0;L;53F1;;;;N;;;;;
+2F83B;CJK COMPATIBILITY IDEOGRAPH-2F83B;Lo;0;L;5406;;;;N;;;;;
+2F83C;CJK COMPATIBILITY IDEOGRAPH-2F83C;Lo;0;L;549E;;;;N;;;;;
+2F83D;CJK COMPATIBILITY IDEOGRAPH-2F83D;Lo;0;L;5438;;;;N;;;;;
+2F83E;CJK COMPATIBILITY IDEOGRAPH-2F83E;Lo;0;L;5448;;;;N;;;;;
+2F83F;CJK COMPATIBILITY IDEOGRAPH-2F83F;Lo;0;L;5468;;;;N;;;;;
+2F840;CJK COMPATIBILITY IDEOGRAPH-2F840;Lo;0;L;54A2;;;;N;;;;;
+2F841;CJK COMPATIBILITY IDEOGRAPH-2F841;Lo;0;L;54F6;;;;N;;;;;
+2F842;CJK COMPATIBILITY IDEOGRAPH-2F842;Lo;0;L;5510;;;;N;;;;;
+2F843;CJK COMPATIBILITY IDEOGRAPH-2F843;Lo;0;L;5553;;;;N;;;;;
+2F844;CJK COMPATIBILITY IDEOGRAPH-2F844;Lo;0;L;5563;;;;N;;;;;
+2F845;CJK COMPATIBILITY IDEOGRAPH-2F845;Lo;0;L;5584;;;;N;;;;;
+2F846;CJK COMPATIBILITY IDEOGRAPH-2F846;Lo;0;L;5584;;;;N;;;;;
+2F847;CJK COMPATIBILITY IDEOGRAPH-2F847;Lo;0;L;5599;;;;N;;;;;
+2F848;CJK COMPATIBILITY IDEOGRAPH-2F848;Lo;0;L;55AB;;;;N;;;;;
+2F849;CJK COMPATIBILITY IDEOGRAPH-2F849;Lo;0;L;55B3;;;;N;;;;;
+2F84A;CJK COMPATIBILITY IDEOGRAPH-2F84A;Lo;0;L;55C2;;;;N;;;;;
+2F84B;CJK COMPATIBILITY IDEOGRAPH-2F84B;Lo;0;L;5716;;;;N;;;;;
+2F84C;CJK COMPATIBILITY IDEOGRAPH-2F84C;Lo;0;L;5606;;;;N;;;;;
+2F84D;CJK COMPATIBILITY IDEOGRAPH-2F84D;Lo;0;L;5717;;;;N;;;;;
+2F84E;CJK COMPATIBILITY IDEOGRAPH-2F84E;Lo;0;L;5651;;;;N;;;;;
+2F84F;CJK COMPATIBILITY IDEOGRAPH-2F84F;Lo;0;L;5674;;;;N;;;;;
+2F850;CJK COMPATIBILITY IDEOGRAPH-2F850;Lo;0;L;5207;;;;N;;;;;
+2F851;CJK COMPATIBILITY IDEOGRAPH-2F851;Lo;0;L;58EE;;;;N;;;;;
+2F852;CJK COMPATIBILITY IDEOGRAPH-2F852;Lo;0;L;57CE;;;;N;;;;;
+2F853;CJK COMPATIBILITY IDEOGRAPH-2F853;Lo;0;L;57F4;;;;N;;;;;
+2F854;CJK COMPATIBILITY IDEOGRAPH-2F854;Lo;0;L;580D;;;;N;;;;;
+2F855;CJK COMPATIBILITY IDEOGRAPH-2F855;Lo;0;L;578B;;;;N;;;;;
+2F856;CJK COMPATIBILITY IDEOGRAPH-2F856;Lo;0;L;5832;;;;N;;;;;
+2F857;CJK COMPATIBILITY IDEOGRAPH-2F857;Lo;0;L;5831;;;;N;;;;;
+2F858;CJK COMPATIBILITY IDEOGRAPH-2F858;Lo;0;L;58AC;;;;N;;;;;
+2F859;CJK COMPATIBILITY IDEOGRAPH-2F859;Lo;0;L;214E4;;;;N;;;;;
+2F85A;CJK COMPATIBILITY IDEOGRAPH-2F85A;Lo;0;L;58F2;;;;N;;;;;
+2F85B;CJK COMPATIBILITY IDEOGRAPH-2F85B;Lo;0;L;58F7;;;;N;;;;;
+2F85C;CJK COMPATIBILITY IDEOGRAPH-2F85C;Lo;0;L;5906;;;;N;;;;;
+2F85D;CJK COMPATIBILITY IDEOGRAPH-2F85D;Lo;0;L;591A;;;;N;;;;;
+2F85E;CJK COMPATIBILITY IDEOGRAPH-2F85E;Lo;0;L;5922;;;;N;;;;;
+2F85F;CJK COMPATIBILITY IDEOGRAPH-2F85F;Lo;0;L;5962;;;;N;;;;;
+2F860;CJK COMPATIBILITY IDEOGRAPH-2F860;Lo;0;L;216A8;;;;N;;;;;
+2F861;CJK COMPATIBILITY IDEOGRAPH-2F861;Lo;0;L;216EA;;;;N;;;;;
+2F862;CJK COMPATIBILITY IDEOGRAPH-2F862;Lo;0;L;59EC;;;;N;;;;;
+2F863;CJK COMPATIBILITY IDEOGRAPH-2F863;Lo;0;L;5A1B;;;;N;;;;;
+2F864;CJK COMPATIBILITY IDEOGRAPH-2F864;Lo;0;L;5A27;;;;N;;;;;
+2F865;CJK COMPATIBILITY IDEOGRAPH-2F865;Lo;0;L;59D8;;;;N;;;;;
+2F866;CJK COMPATIBILITY IDEOGRAPH-2F866;Lo;0;L;5A66;;;;N;;;;;
+2F867;CJK COMPATIBILITY IDEOGRAPH-2F867;Lo;0;L;36EE;;;;N;;;;;
+2F868;CJK COMPATIBILITY IDEOGRAPH-2F868;Lo;0;L;36FC;;;;N;;;;;
+2F869;CJK COMPATIBILITY IDEOGRAPH-2F869;Lo;0;L;5B08;;;;N;;;;;
+2F86A;CJK COMPATIBILITY IDEOGRAPH-2F86A;Lo;0;L;5B3E;;;;N;;;;;
+2F86B;CJK COMPATIBILITY IDEOGRAPH-2F86B;Lo;0;L;5B3E;;;;N;;;;;
+2F86C;CJK COMPATIBILITY IDEOGRAPH-2F86C;Lo;0;L;219C8;;;;N;;;;;
+2F86D;CJK COMPATIBILITY IDEOGRAPH-2F86D;Lo;0;L;5BC3;;;;N;;;;;
+2F86E;CJK COMPATIBILITY IDEOGRAPH-2F86E;Lo;0;L;5BD8;;;;N;;;;;
+2F86F;CJK COMPATIBILITY IDEOGRAPH-2F86F;Lo;0;L;5BE7;;;;N;;;;;
+2F870;CJK COMPATIBILITY IDEOGRAPH-2F870;Lo;0;L;5BF3;;;;N;;;;;
+2F871;CJK COMPATIBILITY IDEOGRAPH-2F871;Lo;0;L;21B18;;;;N;;;;;
+2F872;CJK COMPATIBILITY IDEOGRAPH-2F872;Lo;0;L;5BFF;;;;N;;;;;
+2F873;CJK COMPATIBILITY IDEOGRAPH-2F873;Lo;0;L;5C06;;;;N;;;;;
+2F874;CJK COMPATIBILITY IDEOGRAPH-2F874;Lo;0;L;5F53;;;;N;;;;;
+2F875;CJK COMPATIBILITY IDEOGRAPH-2F875;Lo;0;L;5C22;;;;N;;;;;
+2F876;CJK COMPATIBILITY IDEOGRAPH-2F876;Lo;0;L;3781;;;;N;;;;;
+2F877;CJK COMPATIBILITY IDEOGRAPH-2F877;Lo;0;L;5C60;;;;N;;;;;
+2F878;CJK COMPATIBILITY IDEOGRAPH-2F878;Lo;0;L;5C6E;;;;N;;;;;
+2F879;CJK COMPATIBILITY IDEOGRAPH-2F879;Lo;0;L;5CC0;;;;N;;;;;
+2F87A;CJK COMPATIBILITY IDEOGRAPH-2F87A;Lo;0;L;5C8D;;;;N;;;;;
+2F87B;CJK COMPATIBILITY IDEOGRAPH-2F87B;Lo;0;L;21DE4;;;;N;;;;;
+2F87C;CJK COMPATIBILITY IDEOGRAPH-2F87C;Lo;0;L;5D43;;;;N;;;;;
+2F87D;CJK COMPATIBILITY IDEOGRAPH-2F87D;Lo;0;L;21DE6;;;;N;;;;;
+2F87E;CJK COMPATIBILITY IDEOGRAPH-2F87E;Lo;0;L;5D6E;;;;N;;;;;
+2F87F;CJK COMPATIBILITY IDEOGRAPH-2F87F;Lo;0;L;5D6B;;;;N;;;;;
+2F880;CJK COMPATIBILITY IDEOGRAPH-2F880;Lo;0;L;5D7C;;;;N;;;;;
+2F881;CJK COMPATIBILITY IDEOGRAPH-2F881;Lo;0;L;5DE1;;;;N;;;;;
+2F882;CJK COMPATIBILITY IDEOGRAPH-2F882;Lo;0;L;5DE2;;;;N;;;;;
+2F883;CJK COMPATIBILITY IDEOGRAPH-2F883;Lo;0;L;382F;;;;N;;;;;
+2F884;CJK COMPATIBILITY IDEOGRAPH-2F884;Lo;0;L;5DFD;;;;N;;;;;
+2F885;CJK COMPATIBILITY IDEOGRAPH-2F885;Lo;0;L;5E28;;;;N;;;;;
+2F886;CJK COMPATIBILITY IDEOGRAPH-2F886;Lo;0;L;5E3D;;;;N;;;;;
+2F887;CJK COMPATIBILITY IDEOGRAPH-2F887;Lo;0;L;5E69;;;;N;;;;;
+2F888;CJK COMPATIBILITY IDEOGRAPH-2F888;Lo;0;L;3862;;;;N;;;;;
+2F889;CJK COMPATIBILITY IDEOGRAPH-2F889;Lo;0;L;22183;;;;N;;;;;
+2F88A;CJK COMPATIBILITY IDEOGRAPH-2F88A;Lo;0;L;387C;;;;N;;;;;
+2F88B;CJK COMPATIBILITY IDEOGRAPH-2F88B;Lo;0;L;5EB0;;;;N;;;;;
+2F88C;CJK COMPATIBILITY IDEOGRAPH-2F88C;Lo;0;L;5EB3;;;;N;;;;;
+2F88D;CJK COMPATIBILITY IDEOGRAPH-2F88D;Lo;0;L;5EB6;;;;N;;;;;
+2F88E;CJK COMPATIBILITY IDEOGRAPH-2F88E;Lo;0;L;5ECA;;;;N;;;;;
+2F88F;CJK COMPATIBILITY IDEOGRAPH-2F88F;Lo;0;L;2A392;;;;N;;;;;
+2F890;CJK COMPATIBILITY IDEOGRAPH-2F890;Lo;0;L;5EFE;;;;N;;;;;
+2F891;CJK COMPATIBILITY IDEOGRAPH-2F891;Lo;0;L;22331;;;;N;;;;;
+2F892;CJK COMPATIBILITY IDEOGRAPH-2F892;Lo;0;L;22331;;;;N;;;;;
+2F893;CJK COMPATIBILITY IDEOGRAPH-2F893;Lo;0;L;8201;;;;N;;;;;
+2F894;CJK COMPATIBILITY IDEOGRAPH-2F894;Lo;0;L;5F22;;;;N;;;;;
+2F895;CJK COMPATIBILITY IDEOGRAPH-2F895;Lo;0;L;5F22;;;;N;;;;;
+2F896;CJK COMPATIBILITY IDEOGRAPH-2F896;Lo;0;L;38C7;;;;N;;;;;
+2F897;CJK COMPATIBILITY IDEOGRAPH-2F897;Lo;0;L;232B8;;;;N;;;;;
+2F898;CJK COMPATIBILITY IDEOGRAPH-2F898;Lo;0;L;261DA;;;;N;;;;;
+2F899;CJK COMPATIBILITY IDEOGRAPH-2F899;Lo;0;L;5F62;;;;N;;;;;
+2F89A;CJK COMPATIBILITY IDEOGRAPH-2F89A;Lo;0;L;5F6B;;;;N;;;;;
+2F89B;CJK COMPATIBILITY IDEOGRAPH-2F89B;Lo;0;L;38E3;;;;N;;;;;
+2F89C;CJK COMPATIBILITY IDEOGRAPH-2F89C;Lo;0;L;5F9A;;;;N;;;;;
+2F89D;CJK COMPATIBILITY IDEOGRAPH-2F89D;Lo;0;L;5FCD;;;;N;;;;;
+2F89E;CJK COMPATIBILITY IDEOGRAPH-2F89E;Lo;0;L;5FD7;;;;N;;;;;
+2F89F;CJK COMPATIBILITY IDEOGRAPH-2F89F;Lo;0;L;5FF9;;;;N;;;;;
+2F8A0;CJK COMPATIBILITY IDEOGRAPH-2F8A0;Lo;0;L;6081;;;;N;;;;;
+2F8A1;CJK COMPATIBILITY IDEOGRAPH-2F8A1;Lo;0;L;393A;;;;N;;;;;
+2F8A2;CJK COMPATIBILITY IDEOGRAPH-2F8A2;Lo;0;L;391C;;;;N;;;;;
+2F8A3;CJK COMPATIBILITY IDEOGRAPH-2F8A3;Lo;0;L;6094;;;;N;;;;;
+2F8A4;CJK COMPATIBILITY IDEOGRAPH-2F8A4;Lo;0;L;226D4;;;;N;;;;;
+2F8A5;CJK COMPATIBILITY IDEOGRAPH-2F8A5;Lo;0;L;60C7;;;;N;;;;;
+2F8A6;CJK COMPATIBILITY IDEOGRAPH-2F8A6;Lo;0;L;6148;;;;N;;;;;
+2F8A7;CJK COMPATIBILITY IDEOGRAPH-2F8A7;Lo;0;L;614C;;;;N;;;;;
+2F8A8;CJK COMPATIBILITY IDEOGRAPH-2F8A8;Lo;0;L;614E;;;;N;;;;;
+2F8A9;CJK COMPATIBILITY IDEOGRAPH-2F8A9;Lo;0;L;614C;;;;N;;;;;
+2F8AA;CJK COMPATIBILITY IDEOGRAPH-2F8AA;Lo;0;L;617A;;;;N;;;;;
+2F8AB;CJK COMPATIBILITY IDEOGRAPH-2F8AB;Lo;0;L;618E;;;;N;;;;;
+2F8AC;CJK COMPATIBILITY IDEOGRAPH-2F8AC;Lo;0;L;61B2;;;;N;;;;;
+2F8AD;CJK COMPATIBILITY IDEOGRAPH-2F8AD;Lo;0;L;61A4;;;;N;;;;;
+2F8AE;CJK COMPATIBILITY IDEOGRAPH-2F8AE;Lo;0;L;61AF;;;;N;;;;;
+2F8AF;CJK COMPATIBILITY IDEOGRAPH-2F8AF;Lo;0;L;61DE;;;;N;;;;;
+2F8B0;CJK COMPATIBILITY IDEOGRAPH-2F8B0;Lo;0;L;61F2;;;;N;;;;;
+2F8B1;CJK COMPATIBILITY IDEOGRAPH-2F8B1;Lo;0;L;61F6;;;;N;;;;;
+2F8B2;CJK COMPATIBILITY IDEOGRAPH-2F8B2;Lo;0;L;6210;;;;N;;;;;
+2F8B3;CJK COMPATIBILITY IDEOGRAPH-2F8B3;Lo;0;L;621B;;;;N;;;;;
+2F8B4;CJK COMPATIBILITY IDEOGRAPH-2F8B4;Lo;0;L;625D;;;;N;;;;;
+2F8B5;CJK COMPATIBILITY IDEOGRAPH-2F8B5;Lo;0;L;62B1;;;;N;;;;;
+2F8B6;CJK COMPATIBILITY IDEOGRAPH-2F8B6;Lo;0;L;62D4;;;;N;;;;;
+2F8B7;CJK COMPATIBILITY IDEOGRAPH-2F8B7;Lo;0;L;6350;;;;N;;;;;
+2F8B8;CJK COMPATIBILITY IDEOGRAPH-2F8B8;Lo;0;L;22B0C;;;;N;;;;;
+2F8B9;CJK COMPATIBILITY IDEOGRAPH-2F8B9;Lo;0;L;633D;;;;N;;;;;
+2F8BA;CJK COMPATIBILITY IDEOGRAPH-2F8BA;Lo;0;L;62FC;;;;N;;;;;
+2F8BB;CJK COMPATIBILITY IDEOGRAPH-2F8BB;Lo;0;L;6368;;;;N;;;;;
+2F8BC;CJK COMPATIBILITY IDEOGRAPH-2F8BC;Lo;0;L;6383;;;;N;;;;;
+2F8BD;CJK COMPATIBILITY IDEOGRAPH-2F8BD;Lo;0;L;63E4;;;;N;;;;;
+2F8BE;CJK COMPATIBILITY IDEOGRAPH-2F8BE;Lo;0;L;22BF1;;;;N;;;;;
+2F8BF;CJK COMPATIBILITY IDEOGRAPH-2F8BF;Lo;0;L;6422;;;;N;;;;;
+2F8C0;CJK COMPATIBILITY IDEOGRAPH-2F8C0;Lo;0;L;63C5;;;;N;;;;;
+2F8C1;CJK COMPATIBILITY IDEOGRAPH-2F8C1;Lo;0;L;63A9;;;;N;;;;;
+2F8C2;CJK COMPATIBILITY IDEOGRAPH-2F8C2;Lo;0;L;3A2E;;;;N;;;;;
+2F8C3;CJK COMPATIBILITY IDEOGRAPH-2F8C3;Lo;0;L;6469;;;;N;;;;;
+2F8C4;CJK COMPATIBILITY IDEOGRAPH-2F8C4;Lo;0;L;647E;;;;N;;;;;
+2F8C5;CJK COMPATIBILITY IDEOGRAPH-2F8C5;Lo;0;L;649D;;;;N;;;;;
+2F8C6;CJK COMPATIBILITY IDEOGRAPH-2F8C6;Lo;0;L;6477;;;;N;;;;;
+2F8C7;CJK COMPATIBILITY IDEOGRAPH-2F8C7;Lo;0;L;3A6C;;;;N;;;;;
+2F8C8;CJK COMPATIBILITY IDEOGRAPH-2F8C8;Lo;0;L;654F;;;;N;;;;;
+2F8C9;CJK COMPATIBILITY IDEOGRAPH-2F8C9;Lo;0;L;656C;;;;N;;;;;
+2F8CA;CJK COMPATIBILITY IDEOGRAPH-2F8CA;Lo;0;L;2300A;;;;N;;;;;
+2F8CB;CJK COMPATIBILITY IDEOGRAPH-2F8CB;Lo;0;L;65E3;;;;N;;;;;
+2F8CC;CJK COMPATIBILITY IDEOGRAPH-2F8CC;Lo;0;L;66F8;;;;N;;;;;
+2F8CD;CJK COMPATIBILITY IDEOGRAPH-2F8CD;Lo;0;L;6649;;;;N;;;;;
+2F8CE;CJK COMPATIBILITY IDEOGRAPH-2F8CE;Lo;0;L;3B19;;;;N;;;;;
+2F8CF;CJK COMPATIBILITY IDEOGRAPH-2F8CF;Lo;0;L;6691;;;;N;;;;;
+2F8D0;CJK COMPATIBILITY IDEOGRAPH-2F8D0;Lo;0;L;3B08;;;;N;;;;;
+2F8D1;CJK COMPATIBILITY IDEOGRAPH-2F8D1;Lo;0;L;3AE4;;;;N;;;;;
+2F8D2;CJK COMPATIBILITY IDEOGRAPH-2F8D2;Lo;0;L;5192;;;;N;;;;;
+2F8D3;CJK COMPATIBILITY IDEOGRAPH-2F8D3;Lo;0;L;5195;;;;N;;;;;
+2F8D4;CJK COMPATIBILITY IDEOGRAPH-2F8D4;Lo;0;L;6700;;;;N;;;;;
+2F8D5;CJK COMPATIBILITY IDEOGRAPH-2F8D5;Lo;0;L;669C;;;;N;;;;;
+2F8D6;CJK COMPATIBILITY IDEOGRAPH-2F8D6;Lo;0;L;80AD;;;;N;;;;;
+2F8D7;CJK COMPATIBILITY IDEOGRAPH-2F8D7;Lo;0;L;43D9;;;;N;;;;;
+2F8D8;CJK COMPATIBILITY IDEOGRAPH-2F8D8;Lo;0;L;6717;;;;N;;;;;
+2F8D9;CJK COMPATIBILITY IDEOGRAPH-2F8D9;Lo;0;L;671B;;;;N;;;;;
+2F8DA;CJK COMPATIBILITY IDEOGRAPH-2F8DA;Lo;0;L;6721;;;;N;;;;;
+2F8DB;CJK COMPATIBILITY IDEOGRAPH-2F8DB;Lo;0;L;675E;;;;N;;;;;
+2F8DC;CJK COMPATIBILITY IDEOGRAPH-2F8DC;Lo;0;L;6753;;;;N;;;;;
+2F8DD;CJK COMPATIBILITY IDEOGRAPH-2F8DD;Lo;0;L;233C3;;;;N;;;;;
+2F8DE;CJK COMPATIBILITY IDEOGRAPH-2F8DE;Lo;0;L;3B49;;;;N;;;;;
+2F8DF;CJK COMPATIBILITY IDEOGRAPH-2F8DF;Lo;0;L;67FA;;;;N;;;;;
+2F8E0;CJK COMPATIBILITY IDEOGRAPH-2F8E0;Lo;0;L;6785;;;;N;;;;;
+2F8E1;CJK COMPATIBILITY IDEOGRAPH-2F8E1;Lo;0;L;6852;;;;N;;;;;
+2F8E2;CJK COMPATIBILITY IDEOGRAPH-2F8E2;Lo;0;L;6885;;;;N;;;;;
+2F8E3;CJK COMPATIBILITY IDEOGRAPH-2F8E3;Lo;0;L;2346D;;;;N;;;;;
+2F8E4;CJK COMPATIBILITY IDEOGRAPH-2F8E4;Lo;0;L;688E;;;;N;;;;;
+2F8E5;CJK COMPATIBILITY IDEOGRAPH-2F8E5;Lo;0;L;681F;;;;N;;;;;
+2F8E6;CJK COMPATIBILITY IDEOGRAPH-2F8E6;Lo;0;L;6914;;;;N;;;;;
+2F8E7;CJK COMPATIBILITY IDEOGRAPH-2F8E7;Lo;0;L;3B9D;;;;N;;;;;
+2F8E8;CJK COMPATIBILITY IDEOGRAPH-2F8E8;Lo;0;L;6942;;;;N;;;;;
+2F8E9;CJK COMPATIBILITY IDEOGRAPH-2F8E9;Lo;0;L;69A3;;;;N;;;;;
+2F8EA;CJK COMPATIBILITY IDEOGRAPH-2F8EA;Lo;0;L;69EA;;;;N;;;;;
+2F8EB;CJK COMPATIBILITY IDEOGRAPH-2F8EB;Lo;0;L;6AA8;;;;N;;;;;
+2F8EC;CJK COMPATIBILITY IDEOGRAPH-2F8EC;Lo;0;L;236A3;;;;N;;;;;
+2F8ED;CJK COMPATIBILITY IDEOGRAPH-2F8ED;Lo;0;L;6ADB;;;;N;;;;;
+2F8EE;CJK COMPATIBILITY IDEOGRAPH-2F8EE;Lo;0;L;3C18;;;;N;;;;;
+2F8EF;CJK COMPATIBILITY IDEOGRAPH-2F8EF;Lo;0;L;6B21;;;;N;;;;;
+2F8F0;CJK COMPATIBILITY IDEOGRAPH-2F8F0;Lo;0;L;238A7;;;;N;;;;;
+2F8F1;CJK COMPATIBILITY IDEOGRAPH-2F8F1;Lo;0;L;6B54;;;;N;;;;;
+2F8F2;CJK COMPATIBILITY IDEOGRAPH-2F8F2;Lo;0;L;3C4E;;;;N;;;;;
+2F8F3;CJK COMPATIBILITY IDEOGRAPH-2F8F3;Lo;0;L;6B72;;;;N;;;;;
+2F8F4;CJK COMPATIBILITY IDEOGRAPH-2F8F4;Lo;0;L;6B9F;;;;N;;;;;
+2F8F5;CJK COMPATIBILITY IDEOGRAPH-2F8F5;Lo;0;L;6BBA;;;;N;;;;;
+2F8F6;CJK COMPATIBILITY IDEOGRAPH-2F8F6;Lo;0;L;6BBB;;;;N;;;;;
+2F8F7;CJK COMPATIBILITY IDEOGRAPH-2F8F7;Lo;0;L;23A8D;;;;N;;;;;
+2F8F8;CJK COMPATIBILITY IDEOGRAPH-2F8F8;Lo;0;L;21D0B;;;;N;;;;;
+2F8F9;CJK COMPATIBILITY IDEOGRAPH-2F8F9;Lo;0;L;23AFA;;;;N;;;;;
+2F8FA;CJK COMPATIBILITY IDEOGRAPH-2F8FA;Lo;0;L;6C4E;;;;N;;;;;
+2F8FB;CJK COMPATIBILITY IDEOGRAPH-2F8FB;Lo;0;L;23CBC;;;;N;;;;;
+2F8FC;CJK COMPATIBILITY IDEOGRAPH-2F8FC;Lo;0;L;6CBF;;;;N;;;;;
+2F8FD;CJK COMPATIBILITY IDEOGRAPH-2F8FD;Lo;0;L;6CCD;;;;N;;;;;
+2F8FE;CJK COMPATIBILITY IDEOGRAPH-2F8FE;Lo;0;L;6C67;;;;N;;;;;
+2F8FF;CJK COMPATIBILITY IDEOGRAPH-2F8FF;Lo;0;L;6D16;;;;N;;;;;
+2F900;CJK COMPATIBILITY IDEOGRAPH-2F900;Lo;0;L;6D3E;;;;N;;;;;
+2F901;CJK COMPATIBILITY IDEOGRAPH-2F901;Lo;0;L;6D77;;;;N;;;;;
+2F902;CJK COMPATIBILITY IDEOGRAPH-2F902;Lo;0;L;6D41;;;;N;;;;;
+2F903;CJK COMPATIBILITY IDEOGRAPH-2F903;Lo;0;L;6D69;;;;N;;;;;
+2F904;CJK COMPATIBILITY IDEOGRAPH-2F904;Lo;0;L;6D78;;;;N;;;;;
+2F905;CJK COMPATIBILITY IDEOGRAPH-2F905;Lo;0;L;6D85;;;;N;;;;;
+2F906;CJK COMPATIBILITY IDEOGRAPH-2F906;Lo;0;L;23D1E;;;;N;;;;;
+2F907;CJK COMPATIBILITY IDEOGRAPH-2F907;Lo;0;L;6D34;;;;N;;;;;
+2F908;CJK COMPATIBILITY IDEOGRAPH-2F908;Lo;0;L;6E2F;;;;N;;;;;
+2F909;CJK COMPATIBILITY IDEOGRAPH-2F909;Lo;0;L;6E6E;;;;N;;;;;
+2F90A;CJK COMPATIBILITY IDEOGRAPH-2F90A;Lo;0;L;3D33;;;;N;;;;;
+2F90B;CJK COMPATIBILITY IDEOGRAPH-2F90B;Lo;0;L;6ECB;;;;N;;;;;
+2F90C;CJK COMPATIBILITY IDEOGRAPH-2F90C;Lo;0;L;6EC7;;;;N;;;;;
+2F90D;CJK COMPATIBILITY IDEOGRAPH-2F90D;Lo;0;L;23ED1;;;;N;;;;;
+2F90E;CJK COMPATIBILITY IDEOGRAPH-2F90E;Lo;0;L;6DF9;;;;N;;;;;
+2F90F;CJK COMPATIBILITY IDEOGRAPH-2F90F;Lo;0;L;6F6E;;;;N;;;;;
+2F910;CJK COMPATIBILITY IDEOGRAPH-2F910;Lo;0;L;23F5E;;;;N;;;;;
+2F911;CJK COMPATIBILITY IDEOGRAPH-2F911;Lo;0;L;23F8E;;;;N;;;;;
+2F912;CJK COMPATIBILITY IDEOGRAPH-2F912;Lo;0;L;6FC6;;;;N;;;;;
+2F913;CJK COMPATIBILITY IDEOGRAPH-2F913;Lo;0;L;7039;;;;N;;;;;
+2F914;CJK COMPATIBILITY IDEOGRAPH-2F914;Lo;0;L;701E;;;;N;;;;;
+2F915;CJK COMPATIBILITY IDEOGRAPH-2F915;Lo;0;L;701B;;;;N;;;;;
+2F916;CJK COMPATIBILITY IDEOGRAPH-2F916;Lo;0;L;3D96;;;;N;;;;;
+2F917;CJK COMPATIBILITY IDEOGRAPH-2F917;Lo;0;L;704A;;;;N;;;;;
+2F918;CJK COMPATIBILITY IDEOGRAPH-2F918;Lo;0;L;707D;;;;N;;;;;
+2F919;CJK COMPATIBILITY IDEOGRAPH-2F919;Lo;0;L;7077;;;;N;;;;;
+2F91A;CJK COMPATIBILITY IDEOGRAPH-2F91A;Lo;0;L;70AD;;;;N;;;;;
+2F91B;CJK COMPATIBILITY IDEOGRAPH-2F91B;Lo;0;L;20525;;;;N;;;;;
+2F91C;CJK COMPATIBILITY IDEOGRAPH-2F91C;Lo;0;L;7145;;;;N;;;;;
+2F91D;CJK COMPATIBILITY IDEOGRAPH-2F91D;Lo;0;L;24263;;;;N;;;;;
+2F91E;CJK COMPATIBILITY IDEOGRAPH-2F91E;Lo;0;L;719C;;;;N;;;;;
+2F91F;CJK COMPATIBILITY IDEOGRAPH-2F91F;Lo;0;L;243AB;;;;N;;;;;
+2F920;CJK COMPATIBILITY IDEOGRAPH-2F920;Lo;0;L;7228;;;;N;;;;;
+2F921;CJK COMPATIBILITY IDEOGRAPH-2F921;Lo;0;L;7235;;;;N;;;;;
+2F922;CJK COMPATIBILITY IDEOGRAPH-2F922;Lo;0;L;7250;;;;N;;;;;
+2F923;CJK COMPATIBILITY IDEOGRAPH-2F923;Lo;0;L;24608;;;;N;;;;;
+2F924;CJK COMPATIBILITY IDEOGRAPH-2F924;Lo;0;L;7280;;;;N;;;;;
+2F925;CJK COMPATIBILITY IDEOGRAPH-2F925;Lo;0;L;7295;;;;N;;;;;
+2F926;CJK COMPATIBILITY IDEOGRAPH-2F926;Lo;0;L;24735;;;;N;;;;;
+2F927;CJK COMPATIBILITY IDEOGRAPH-2F927;Lo;0;L;24814;;;;N;;;;;
+2F928;CJK COMPATIBILITY IDEOGRAPH-2F928;Lo;0;L;737A;;;;N;;;;;
+2F929;CJK COMPATIBILITY IDEOGRAPH-2F929;Lo;0;L;738B;;;;N;;;;;
+2F92A;CJK COMPATIBILITY IDEOGRAPH-2F92A;Lo;0;L;3EAC;;;;N;;;;;
+2F92B;CJK COMPATIBILITY IDEOGRAPH-2F92B;Lo;0;L;73A5;;;;N;;;;;
+2F92C;CJK COMPATIBILITY IDEOGRAPH-2F92C;Lo;0;L;3EB8;;;;N;;;;;
+2F92D;CJK COMPATIBILITY IDEOGRAPH-2F92D;Lo;0;L;3EB8;;;;N;;;;;
+2F92E;CJK COMPATIBILITY IDEOGRAPH-2F92E;Lo;0;L;7447;;;;N;;;;;
+2F92F;CJK COMPATIBILITY IDEOGRAPH-2F92F;Lo;0;L;745C;;;;N;;;;;
+2F930;CJK COMPATIBILITY IDEOGRAPH-2F930;Lo;0;L;7471;;;;N;;;;;
+2F931;CJK COMPATIBILITY IDEOGRAPH-2F931;Lo;0;L;7485;;;;N;;;;;
+2F932;CJK COMPATIBILITY IDEOGRAPH-2F932;Lo;0;L;74CA;;;;N;;;;;
+2F933;CJK COMPATIBILITY IDEOGRAPH-2F933;Lo;0;L;3F1B;;;;N;;;;;
+2F934;CJK COMPATIBILITY IDEOGRAPH-2F934;Lo;0;L;7524;;;;N;;;;;
+2F935;CJK COMPATIBILITY IDEOGRAPH-2F935;Lo;0;L;24C36;;;;N;;;;;
+2F936;CJK COMPATIBILITY IDEOGRAPH-2F936;Lo;0;L;753E;;;;N;;;;;
+2F937;CJK COMPATIBILITY IDEOGRAPH-2F937;Lo;0;L;24C92;;;;N;;;;;
+2F938;CJK COMPATIBILITY IDEOGRAPH-2F938;Lo;0;L;7570;;;;N;;;;;
+2F939;CJK COMPATIBILITY IDEOGRAPH-2F939;Lo;0;L;2219F;;;;N;;;;;
+2F93A;CJK COMPATIBILITY IDEOGRAPH-2F93A;Lo;0;L;7610;;;;N;;;;;
+2F93B;CJK COMPATIBILITY IDEOGRAPH-2F93B;Lo;0;L;24FA1;;;;N;;;;;
+2F93C;CJK COMPATIBILITY IDEOGRAPH-2F93C;Lo;0;L;24FB8;;;;N;;;;;
+2F93D;CJK COMPATIBILITY IDEOGRAPH-2F93D;Lo;0;L;25044;;;;N;;;;;
+2F93E;CJK COMPATIBILITY IDEOGRAPH-2F93E;Lo;0;L;3FFC;;;;N;;;;;
+2F93F;CJK COMPATIBILITY IDEOGRAPH-2F93F;Lo;0;L;4008;;;;N;;;;;
+2F940;CJK COMPATIBILITY IDEOGRAPH-2F940;Lo;0;L;76F4;;;;N;;;;;
+2F941;CJK COMPATIBILITY IDEOGRAPH-2F941;Lo;0;L;250F3;;;;N;;;;;
+2F942;CJK COMPATIBILITY IDEOGRAPH-2F942;Lo;0;L;250F2;;;;N;;;;;
+2F943;CJK COMPATIBILITY IDEOGRAPH-2F943;Lo;0;L;25119;;;;N;;;;;
+2F944;CJK COMPATIBILITY IDEOGRAPH-2F944;Lo;0;L;25133;;;;N;;;;;
+2F945;CJK COMPATIBILITY IDEOGRAPH-2F945;Lo;0;L;771E;;;;N;;;;;
+2F946;CJK COMPATIBILITY IDEOGRAPH-2F946;Lo;0;L;771F;;;;N;;;;;
+2F947;CJK COMPATIBILITY IDEOGRAPH-2F947;Lo;0;L;771F;;;;N;;;;;
+2F948;CJK COMPATIBILITY IDEOGRAPH-2F948;Lo;0;L;774A;;;;N;;;;;
+2F949;CJK COMPATIBILITY IDEOGRAPH-2F949;Lo;0;L;4039;;;;N;;;;;
+2F94A;CJK COMPATIBILITY IDEOGRAPH-2F94A;Lo;0;L;778B;;;;N;;;;;
+2F94B;CJK COMPATIBILITY IDEOGRAPH-2F94B;Lo;0;L;4046;;;;N;;;;;
+2F94C;CJK COMPATIBILITY IDEOGRAPH-2F94C;Lo;0;L;4096;;;;N;;;;;
+2F94D;CJK COMPATIBILITY IDEOGRAPH-2F94D;Lo;0;L;2541D;;;;N;;;;;
+2F94E;CJK COMPATIBILITY IDEOGRAPH-2F94E;Lo;0;L;784E;;;;N;;;;;
+2F94F;CJK COMPATIBILITY IDEOGRAPH-2F94F;Lo;0;L;788C;;;;N;;;;;
+2F950;CJK COMPATIBILITY IDEOGRAPH-2F950;Lo;0;L;78CC;;;;N;;;;;
+2F951;CJK COMPATIBILITY IDEOGRAPH-2F951;Lo;0;L;40E3;;;;N;;;;;
+2F952;CJK COMPATIBILITY IDEOGRAPH-2F952;Lo;0;L;25626;;;;N;;;;;
+2F953;CJK COMPATIBILITY IDEOGRAPH-2F953;Lo;0;L;7956;;;;N;;;;;
+2F954;CJK COMPATIBILITY IDEOGRAPH-2F954;Lo;0;L;2569A;;;;N;;;;;
+2F955;CJK COMPATIBILITY IDEOGRAPH-2F955;Lo;0;L;256C5;;;;N;;;;;
+2F956;CJK COMPATIBILITY IDEOGRAPH-2F956;Lo;0;L;798F;;;;N;;;;;
+2F957;CJK COMPATIBILITY IDEOGRAPH-2F957;Lo;0;L;79EB;;;;N;;;;;
+2F958;CJK COMPATIBILITY IDEOGRAPH-2F958;Lo;0;L;412F;;;;N;;;;;
+2F959;CJK COMPATIBILITY IDEOGRAPH-2F959;Lo;0;L;7A40;;;;N;;;;;
+2F95A;CJK COMPATIBILITY IDEOGRAPH-2F95A;Lo;0;L;7A4A;;;;N;;;;;
+2F95B;CJK COMPATIBILITY IDEOGRAPH-2F95B;Lo;0;L;7A4F;;;;N;;;;;
+2F95C;CJK COMPATIBILITY IDEOGRAPH-2F95C;Lo;0;L;2597C;;;;N;;;;;
+2F95D;CJK COMPATIBILITY IDEOGRAPH-2F95D;Lo;0;L;25AA7;;;;N;;;;;
+2F95E;CJK COMPATIBILITY IDEOGRAPH-2F95E;Lo;0;L;25AA7;;;;N;;;;;
+2F95F;CJK COMPATIBILITY IDEOGRAPH-2F95F;Lo;0;L;7AEE;;;;N;;;;;
+2F960;CJK COMPATIBILITY IDEOGRAPH-2F960;Lo;0;L;4202;;;;N;;;;;
+2F961;CJK COMPATIBILITY IDEOGRAPH-2F961;Lo;0;L;25BAB;;;;N;;;;;
+2F962;CJK COMPATIBILITY IDEOGRAPH-2F962;Lo;0;L;7BC6;;;;N;;;;;
+2F963;CJK COMPATIBILITY IDEOGRAPH-2F963;Lo;0;L;7BC9;;;;N;;;;;
+2F964;CJK COMPATIBILITY IDEOGRAPH-2F964;Lo;0;L;4227;;;;N;;;;;
+2F965;CJK COMPATIBILITY IDEOGRAPH-2F965;Lo;0;L;25C80;;;;N;;;;;
+2F966;CJK COMPATIBILITY IDEOGRAPH-2F966;Lo;0;L;7CD2;;;;N;;;;;
+2F967;CJK COMPATIBILITY IDEOGRAPH-2F967;Lo;0;L;42A0;;;;N;;;;;
+2F968;CJK COMPATIBILITY IDEOGRAPH-2F968;Lo;0;L;7CE8;;;;N;;;;;
+2F969;CJK COMPATIBILITY IDEOGRAPH-2F969;Lo;0;L;7CE3;;;;N;;;;;
+2F96A;CJK COMPATIBILITY IDEOGRAPH-2F96A;Lo;0;L;7D00;;;;N;;;;;
+2F96B;CJK COMPATIBILITY IDEOGRAPH-2F96B;Lo;0;L;25F86;;;;N;;;;;
+2F96C;CJK COMPATIBILITY IDEOGRAPH-2F96C;Lo;0;L;7D63;;;;N;;;;;
+2F96D;CJK COMPATIBILITY IDEOGRAPH-2F96D;Lo;0;L;4301;;;;N;;;;;
+2F96E;CJK COMPATIBILITY IDEOGRAPH-2F96E;Lo;0;L;7DC7;;;;N;;;;;
+2F96F;CJK COMPATIBILITY IDEOGRAPH-2F96F;Lo;0;L;7E02;;;;N;;;;;
+2F970;CJK COMPATIBILITY IDEOGRAPH-2F970;Lo;0;L;7E45;;;;N;;;;;
+2F971;CJK COMPATIBILITY IDEOGRAPH-2F971;Lo;0;L;4334;;;;N;;;;;
+2F972;CJK COMPATIBILITY IDEOGRAPH-2F972;Lo;0;L;26228;;;;N;;;;;
+2F973;CJK COMPATIBILITY IDEOGRAPH-2F973;Lo;0;L;26247;;;;N;;;;;
+2F974;CJK COMPATIBILITY IDEOGRAPH-2F974;Lo;0;L;4359;;;;N;;;;;
+2F975;CJK COMPATIBILITY IDEOGRAPH-2F975;Lo;0;L;262D9;;;;N;;;;;
+2F976;CJK COMPATIBILITY IDEOGRAPH-2F976;Lo;0;L;7F7A;;;;N;;;;;
+2F977;CJK COMPATIBILITY IDEOGRAPH-2F977;Lo;0;L;2633E;;;;N;;;;;
+2F978;CJK COMPATIBILITY IDEOGRAPH-2F978;Lo;0;L;7F95;;;;N;;;;;
+2F979;CJK COMPATIBILITY IDEOGRAPH-2F979;Lo;0;L;7FFA;;;;N;;;;;
+2F97A;CJK COMPATIBILITY IDEOGRAPH-2F97A;Lo;0;L;8005;;;;N;;;;;
+2F97B;CJK COMPATIBILITY IDEOGRAPH-2F97B;Lo;0;L;264DA;;;;N;;;;;
+2F97C;CJK COMPATIBILITY IDEOGRAPH-2F97C;Lo;0;L;26523;;;;N;;;;;
+2F97D;CJK COMPATIBILITY IDEOGRAPH-2F97D;Lo;0;L;8060;;;;N;;;;;
+2F97E;CJK COMPATIBILITY IDEOGRAPH-2F97E;Lo;0;L;265A8;;;;N;;;;;
+2F97F;CJK COMPATIBILITY IDEOGRAPH-2F97F;Lo;0;L;8070;;;;N;;;;;
+2F980;CJK COMPATIBILITY IDEOGRAPH-2F980;Lo;0;L;2335F;;;;N;;;;;
+2F981;CJK COMPATIBILITY IDEOGRAPH-2F981;Lo;0;L;43D5;;;;N;;;;;
+2F982;CJK COMPATIBILITY IDEOGRAPH-2F982;Lo;0;L;80B2;;;;N;;;;;
+2F983;CJK COMPATIBILITY IDEOGRAPH-2F983;Lo;0;L;8103;;;;N;;;;;
+2F984;CJK COMPATIBILITY IDEOGRAPH-2F984;Lo;0;L;440B;;;;N;;;;;
+2F985;CJK COMPATIBILITY IDEOGRAPH-2F985;Lo;0;L;813E;;;;N;;;;;
+2F986;CJK COMPATIBILITY IDEOGRAPH-2F986;Lo;0;L;5AB5;;;;N;;;;;
+2F987;CJK COMPATIBILITY IDEOGRAPH-2F987;Lo;0;L;267A7;;;;N;;;;;
+2F988;CJK COMPATIBILITY IDEOGRAPH-2F988;Lo;0;L;267B5;;;;N;;;;;
+2F989;CJK COMPATIBILITY IDEOGRAPH-2F989;Lo;0;L;23393;;;;N;;;;;
+2F98A;CJK COMPATIBILITY IDEOGRAPH-2F98A;Lo;0;L;2339C;;;;N;;;;;
+2F98B;CJK COMPATIBILITY IDEOGRAPH-2F98B;Lo;0;L;8201;;;;N;;;;;
+2F98C;CJK COMPATIBILITY IDEOGRAPH-2F98C;Lo;0;L;8204;;;;N;;;;;
+2F98D;CJK COMPATIBILITY IDEOGRAPH-2F98D;Lo;0;L;8F9E;;;;N;;;;;
+2F98E;CJK COMPATIBILITY IDEOGRAPH-2F98E;Lo;0;L;446B;;;;N;;;;;
+2F98F;CJK COMPATIBILITY IDEOGRAPH-2F98F;Lo;0;L;8291;;;;N;;;;;
+2F990;CJK COMPATIBILITY IDEOGRAPH-2F990;Lo;0;L;828B;;;;N;;;;;
+2F991;CJK COMPATIBILITY IDEOGRAPH-2F991;Lo;0;L;829D;;;;N;;;;;
+2F992;CJK COMPATIBILITY IDEOGRAPH-2F992;Lo;0;L;52B3;;;;N;;;;;
+2F993;CJK COMPATIBILITY IDEOGRAPH-2F993;Lo;0;L;82B1;;;;N;;;;;
+2F994;CJK COMPATIBILITY IDEOGRAPH-2F994;Lo;0;L;82B3;;;;N;;;;;
+2F995;CJK COMPATIBILITY IDEOGRAPH-2F995;Lo;0;L;82BD;;;;N;;;;;
+2F996;CJK COMPATIBILITY IDEOGRAPH-2F996;Lo;0;L;82E6;;;;N;;;;;
+2F997;CJK COMPATIBILITY IDEOGRAPH-2F997;Lo;0;L;26B3C;;;;N;;;;;
+2F998;CJK COMPATIBILITY IDEOGRAPH-2F998;Lo;0;L;82E5;;;;N;;;;;
+2F999;CJK COMPATIBILITY IDEOGRAPH-2F999;Lo;0;L;831D;;;;N;;;;;
+2F99A;CJK COMPATIBILITY IDEOGRAPH-2F99A;Lo;0;L;8363;;;;N;;;;;
+2F99B;CJK COMPATIBILITY IDEOGRAPH-2F99B;Lo;0;L;83AD;;;;N;;;;;
+2F99C;CJK COMPATIBILITY IDEOGRAPH-2F99C;Lo;0;L;8323;;;;N;;;;;
+2F99D;CJK COMPATIBILITY IDEOGRAPH-2F99D;Lo;0;L;83BD;;;;N;;;;;
+2F99E;CJK COMPATIBILITY IDEOGRAPH-2F99E;Lo;0;L;83E7;;;;N;;;;;
+2F99F;CJK COMPATIBILITY IDEOGRAPH-2F99F;Lo;0;L;8457;;;;N;;;;;
+2F9A0;CJK COMPATIBILITY IDEOGRAPH-2F9A0;Lo;0;L;8353;;;;N;;;;;
+2F9A1;CJK COMPATIBILITY IDEOGRAPH-2F9A1;Lo;0;L;83CA;;;;N;;;;;
+2F9A2;CJK COMPATIBILITY IDEOGRAPH-2F9A2;Lo;0;L;83CC;;;;N;;;;;
+2F9A3;CJK COMPATIBILITY IDEOGRAPH-2F9A3;Lo;0;L;83DC;;;;N;;;;;
+2F9A4;CJK COMPATIBILITY IDEOGRAPH-2F9A4;Lo;0;L;26C36;;;;N;;;;;
+2F9A5;CJK COMPATIBILITY IDEOGRAPH-2F9A5;Lo;0;L;26D6B;;;;N;;;;;
+2F9A6;CJK COMPATIBILITY IDEOGRAPH-2F9A6;Lo;0;L;26CD5;;;;N;;;;;
+2F9A7;CJK COMPATIBILITY IDEOGRAPH-2F9A7;Lo;0;L;452B;;;;N;;;;;
+2F9A8;CJK COMPATIBILITY IDEOGRAPH-2F9A8;Lo;0;L;84F1;;;;N;;;;;
+2F9A9;CJK COMPATIBILITY IDEOGRAPH-2F9A9;Lo;0;L;84F3;;;;N;;;;;
+2F9AA;CJK COMPATIBILITY IDEOGRAPH-2F9AA;Lo;0;L;8516;;;;N;;;;;
+2F9AB;CJK COMPATIBILITY IDEOGRAPH-2F9AB;Lo;0;L;273CA;;;;N;;;;;
+2F9AC;CJK COMPATIBILITY IDEOGRAPH-2F9AC;Lo;0;L;8564;;;;N;;;;;
+2F9AD;CJK COMPATIBILITY IDEOGRAPH-2F9AD;Lo;0;L;26F2C;;;;N;;;;;
+2F9AE;CJK COMPATIBILITY IDEOGRAPH-2F9AE;Lo;0;L;455D;;;;N;;;;;
+2F9AF;CJK COMPATIBILITY IDEOGRAPH-2F9AF;Lo;0;L;4561;;;;N;;;;;
+2F9B0;CJK COMPATIBILITY IDEOGRAPH-2F9B0;Lo;0;L;26FB1;;;;N;;;;;
+2F9B1;CJK COMPATIBILITY IDEOGRAPH-2F9B1;Lo;0;L;270D2;;;;N;;;;;
+2F9B2;CJK COMPATIBILITY IDEOGRAPH-2F9B2;Lo;0;L;456B;;;;N;;;;;
+2F9B3;CJK COMPATIBILITY IDEOGRAPH-2F9B3;Lo;0;L;8650;;;;N;;;;;
+2F9B4;CJK COMPATIBILITY IDEOGRAPH-2F9B4;Lo;0;L;865C;;;;N;;;;;
+2F9B5;CJK COMPATIBILITY IDEOGRAPH-2F9B5;Lo;0;L;8667;;;;N;;;;;
+2F9B6;CJK COMPATIBILITY IDEOGRAPH-2F9B6;Lo;0;L;8669;;;;N;;;;;
+2F9B7;CJK COMPATIBILITY IDEOGRAPH-2F9B7;Lo;0;L;86A9;;;;N;;;;;
+2F9B8;CJK COMPATIBILITY IDEOGRAPH-2F9B8;Lo;0;L;8688;;;;N;;;;;
+2F9B9;CJK COMPATIBILITY IDEOGRAPH-2F9B9;Lo;0;L;870E;;;;N;;;;;
+2F9BA;CJK COMPATIBILITY IDEOGRAPH-2F9BA;Lo;0;L;86E2;;;;N;;;;;
+2F9BB;CJK COMPATIBILITY IDEOGRAPH-2F9BB;Lo;0;L;8779;;;;N;;;;;
+2F9BC;CJK COMPATIBILITY IDEOGRAPH-2F9BC;Lo;0;L;8728;;;;N;;;;;
+2F9BD;CJK COMPATIBILITY IDEOGRAPH-2F9BD;Lo;0;L;876B;;;;N;;;;;
+2F9BE;CJK COMPATIBILITY IDEOGRAPH-2F9BE;Lo;0;L;8786;;;;N;;;;;
+2F9BF;CJK COMPATIBILITY IDEOGRAPH-2F9BF;Lo;0;L;45D7;;;;N;;;;;
+2F9C0;CJK COMPATIBILITY IDEOGRAPH-2F9C0;Lo;0;L;87E1;;;;N;;;;;
+2F9C1;CJK COMPATIBILITY IDEOGRAPH-2F9C1;Lo;0;L;8801;;;;N;;;;;
+2F9C2;CJK COMPATIBILITY IDEOGRAPH-2F9C2;Lo;0;L;45F9;;;;N;;;;;
+2F9C3;CJK COMPATIBILITY IDEOGRAPH-2F9C3;Lo;0;L;8860;;;;N;;;;;
+2F9C4;CJK COMPATIBILITY IDEOGRAPH-2F9C4;Lo;0;L;8863;;;;N;;;;;
+2F9C5;CJK COMPATIBILITY IDEOGRAPH-2F9C5;Lo;0;L;27667;;;;N;;;;;
+2F9C6;CJK COMPATIBILITY IDEOGRAPH-2F9C6;Lo;0;L;88D7;;;;N;;;;;
+2F9C7;CJK COMPATIBILITY IDEOGRAPH-2F9C7;Lo;0;L;88DE;;;;N;;;;;
+2F9C8;CJK COMPATIBILITY IDEOGRAPH-2F9C8;Lo;0;L;4635;;;;N;;;;;
+2F9C9;CJK COMPATIBILITY IDEOGRAPH-2F9C9;Lo;0;L;88FA;;;;N;;;;;
+2F9CA;CJK COMPATIBILITY IDEOGRAPH-2F9CA;Lo;0;L;34BB;;;;N;;;;;
+2F9CB;CJK COMPATIBILITY IDEOGRAPH-2F9CB;Lo;0;L;278AE;;;;N;;;;;
+2F9CC;CJK COMPATIBILITY IDEOGRAPH-2F9CC;Lo;0;L;27966;;;;N;;;;;
+2F9CD;CJK COMPATIBILITY IDEOGRAPH-2F9CD;Lo;0;L;46BE;;;;N;;;;;
+2F9CE;CJK COMPATIBILITY IDEOGRAPH-2F9CE;Lo;0;L;46C7;;;;N;;;;;
+2F9CF;CJK COMPATIBILITY IDEOGRAPH-2F9CF;Lo;0;L;8AA0;;;;N;;;;;
+2F9D0;CJK COMPATIBILITY IDEOGRAPH-2F9D0;Lo;0;L;8AED;;;;N;;;;;
+2F9D1;CJK COMPATIBILITY IDEOGRAPH-2F9D1;Lo;0;L;8B8A;;;;N;;;;;
+2F9D2;CJK COMPATIBILITY IDEOGRAPH-2F9D2;Lo;0;L;8C55;;;;N;;;;;
+2F9D3;CJK COMPATIBILITY IDEOGRAPH-2F9D3;Lo;0;L;27CA8;;;;N;;;;;
+2F9D4;CJK COMPATIBILITY IDEOGRAPH-2F9D4;Lo;0;L;8CAB;;;;N;;;;;
+2F9D5;CJK COMPATIBILITY IDEOGRAPH-2F9D5;Lo;0;L;8CC1;;;;N;;;;;
+2F9D6;CJK COMPATIBILITY IDEOGRAPH-2F9D6;Lo;0;L;8D1B;;;;N;;;;;
+2F9D7;CJK COMPATIBILITY IDEOGRAPH-2F9D7;Lo;0;L;8D77;;;;N;;;;;
+2F9D8;CJK COMPATIBILITY IDEOGRAPH-2F9D8;Lo;0;L;27F2F;;;;N;;;;;
+2F9D9;CJK COMPATIBILITY IDEOGRAPH-2F9D9;Lo;0;L;20804;;;;N;;;;;
+2F9DA;CJK COMPATIBILITY IDEOGRAPH-2F9DA;Lo;0;L;8DCB;;;;N;;;;;
+2F9DB;CJK COMPATIBILITY IDEOGRAPH-2F9DB;Lo;0;L;8DBC;;;;N;;;;;
+2F9DC;CJK COMPATIBILITY IDEOGRAPH-2F9DC;Lo;0;L;8DF0;;;;N;;;;;
+2F9DD;CJK COMPATIBILITY IDEOGRAPH-2F9DD;Lo;0;L;208DE;;;;N;;;;;
+2F9DE;CJK COMPATIBILITY IDEOGRAPH-2F9DE;Lo;0;L;8ED4;;;;N;;;;;
+2F9DF;CJK COMPATIBILITY IDEOGRAPH-2F9DF;Lo;0;L;8F38;;;;N;;;;;
+2F9E0;CJK COMPATIBILITY IDEOGRAPH-2F9E0;Lo;0;L;285D2;;;;N;;;;;
+2F9E1;CJK COMPATIBILITY IDEOGRAPH-2F9E1;Lo;0;L;285ED;;;;N;;;;;
+2F9E2;CJK COMPATIBILITY IDEOGRAPH-2F9E2;Lo;0;L;9094;;;;N;;;;;
+2F9E3;CJK COMPATIBILITY IDEOGRAPH-2F9E3;Lo;0;L;90F1;;;;N;;;;;
+2F9E4;CJK COMPATIBILITY IDEOGRAPH-2F9E4;Lo;0;L;9111;;;;N;;;;;
+2F9E5;CJK COMPATIBILITY IDEOGRAPH-2F9E5;Lo;0;L;2872E;;;;N;;;;;
+2F9E6;CJK COMPATIBILITY IDEOGRAPH-2F9E6;Lo;0;L;911B;;;;N;;;;;
+2F9E7;CJK COMPATIBILITY IDEOGRAPH-2F9E7;Lo;0;L;9238;;;;N;;;;;
+2F9E8;CJK COMPATIBILITY IDEOGRAPH-2F9E8;Lo;0;L;92D7;;;;N;;;;;
+2F9E9;CJK COMPATIBILITY IDEOGRAPH-2F9E9;Lo;0;L;92D8;;;;N;;;;;
+2F9EA;CJK COMPATIBILITY IDEOGRAPH-2F9EA;Lo;0;L;927C;;;;N;;;;;
+2F9EB;CJK COMPATIBILITY IDEOGRAPH-2F9EB;Lo;0;L;93F9;;;;N;;;;;
+2F9EC;CJK COMPATIBILITY IDEOGRAPH-2F9EC;Lo;0;L;9415;;;;N;;;;;
+2F9ED;CJK COMPATIBILITY IDEOGRAPH-2F9ED;Lo;0;L;28BFA;;;;N;;;;;
+2F9EE;CJK COMPATIBILITY IDEOGRAPH-2F9EE;Lo;0;L;958B;;;;N;;;;;
+2F9EF;CJK COMPATIBILITY IDEOGRAPH-2F9EF;Lo;0;L;4995;;;;N;;;;;
+2F9F0;CJK COMPATIBILITY IDEOGRAPH-2F9F0;Lo;0;L;95B7;;;;N;;;;;
+2F9F1;CJK COMPATIBILITY IDEOGRAPH-2F9F1;Lo;0;L;28D77;;;;N;;;;;
+2F9F2;CJK COMPATIBILITY IDEOGRAPH-2F9F2;Lo;0;L;49E6;;;;N;;;;;
+2F9F3;CJK COMPATIBILITY IDEOGRAPH-2F9F3;Lo;0;L;96C3;;;;N;;;;;
+2F9F4;CJK COMPATIBILITY IDEOGRAPH-2F9F4;Lo;0;L;5DB2;;;;N;;;;;
+2F9F5;CJK COMPATIBILITY IDEOGRAPH-2F9F5;Lo;0;L;9723;;;;N;;;;;
+2F9F6;CJK COMPATIBILITY IDEOGRAPH-2F9F6;Lo;0;L;29145;;;;N;;;;;
+2F9F7;CJK COMPATIBILITY IDEOGRAPH-2F9F7;Lo;0;L;2921A;;;;N;;;;;
+2F9F8;CJK COMPATIBILITY IDEOGRAPH-2F9F8;Lo;0;L;4A6E;;;;N;;;;;
+2F9F9;CJK COMPATIBILITY IDEOGRAPH-2F9F9;Lo;0;L;4A76;;;;N;;;;;
+2F9FA;CJK COMPATIBILITY IDEOGRAPH-2F9FA;Lo;0;L;97E0;;;;N;;;;;
+2F9FB;CJK COMPATIBILITY IDEOGRAPH-2F9FB;Lo;0;L;2940A;;;;N;;;;;
+2F9FC;CJK COMPATIBILITY IDEOGRAPH-2F9FC;Lo;0;L;4AB2;;;;N;;;;;
+2F9FD;CJK COMPATIBILITY IDEOGRAPH-2F9FD;Lo;0;L;29496;;;;N;;;;;
+2F9FE;CJK COMPATIBILITY IDEOGRAPH-2F9FE;Lo;0;L;980B;;;;N;;;;;
+2F9FF;CJK COMPATIBILITY IDEOGRAPH-2F9FF;Lo;0;L;980B;;;;N;;;;;
+2FA00;CJK COMPATIBILITY IDEOGRAPH-2FA00;Lo;0;L;9829;;;;N;;;;;
+2FA01;CJK COMPATIBILITY IDEOGRAPH-2FA01;Lo;0;L;295B6;;;;N;;;;;
+2FA02;CJK COMPATIBILITY IDEOGRAPH-2FA02;Lo;0;L;98E2;;;;N;;;;;
+2FA03;CJK COMPATIBILITY IDEOGRAPH-2FA03;Lo;0;L;4B33;;;;N;;;;;
+2FA04;CJK COMPATIBILITY IDEOGRAPH-2FA04;Lo;0;L;9929;;;;N;;;;;
+2FA05;CJK COMPATIBILITY IDEOGRAPH-2FA05;Lo;0;L;99A7;;;;N;;;;;
+2FA06;CJK COMPATIBILITY IDEOGRAPH-2FA06;Lo;0;L;99C2;;;;N;;;;;
+2FA07;CJK COMPATIBILITY IDEOGRAPH-2FA07;Lo;0;L;99FE;;;;N;;;;;
+2FA08;CJK COMPATIBILITY IDEOGRAPH-2FA08;Lo;0;L;4BCE;;;;N;;;;;
+2FA09;CJK COMPATIBILITY IDEOGRAPH-2FA09;Lo;0;L;29B30;;;;N;;;;;
+2FA0A;CJK COMPATIBILITY IDEOGRAPH-2FA0A;Lo;0;L;9B12;;;;N;;;;;
+2FA0B;CJK COMPATIBILITY IDEOGRAPH-2FA0B;Lo;0;L;9C40;;;;N;;;;;
+2FA0C;CJK COMPATIBILITY IDEOGRAPH-2FA0C;Lo;0;L;9CFD;;;;N;;;;;
+2FA0D;CJK COMPATIBILITY IDEOGRAPH-2FA0D;Lo;0;L;4CCE;;;;N;;;;;
+2FA0E;CJK COMPATIBILITY IDEOGRAPH-2FA0E;Lo;0;L;4CED;;;;N;;;;;
+2FA0F;CJK COMPATIBILITY IDEOGRAPH-2FA0F;Lo;0;L;9D67;;;;N;;;;;
+2FA10;CJK COMPATIBILITY IDEOGRAPH-2FA10;Lo;0;L;2A0CE;;;;N;;;;;
+2FA11;CJK COMPATIBILITY IDEOGRAPH-2FA11;Lo;0;L;4CF8;;;;N;;;;;
+2FA12;CJK COMPATIBILITY IDEOGRAPH-2FA12;Lo;0;L;2A105;;;;N;;;;;
+2FA13;CJK COMPATIBILITY IDEOGRAPH-2FA13;Lo;0;L;2A20E;;;;N;;;;;
+2FA14;CJK COMPATIBILITY IDEOGRAPH-2FA14;Lo;0;L;2A291;;;;N;;;;;
+2FA15;CJK COMPATIBILITY IDEOGRAPH-2FA15;Lo;0;L;9EBB;;;;N;;;;;
+2FA16;CJK COMPATIBILITY IDEOGRAPH-2FA16;Lo;0;L;4D56;;;;N;;;;;
+2FA17;CJK COMPATIBILITY IDEOGRAPH-2FA17;Lo;0;L;9EF9;;;;N;;;;;
+2FA18;CJK COMPATIBILITY IDEOGRAPH-2FA18;Lo;0;L;9EFE;;;;N;;;;;
+2FA19;CJK COMPATIBILITY IDEOGRAPH-2FA19;Lo;0;L;9F05;;;;N;;;;;
+2FA1A;CJK COMPATIBILITY IDEOGRAPH-2FA1A;Lo;0;L;9F0F;;;;N;;;;;
+2FA1B;CJK COMPATIBILITY IDEOGRAPH-2FA1B;Lo;0;L;9F16;;;;N;;;;;
+2FA1C;CJK COMPATIBILITY IDEOGRAPH-2FA1C;Lo;0;L;9F3B;;;;N;;;;;
+2FA1D;CJK COMPATIBILITY IDEOGRAPH-2FA1D;Lo;0;L;2A600;;;;N;;;;;
+E0001;LANGUAGE TAG;Cf;0;BN;;;;;N;;;;;
+E0020;TAG SPACE;Cf;0;BN;;;;;N;;;;;
+E0021;TAG EXCLAMATION MARK;Cf;0;BN;;;;;N;;;;;
+E0022;TAG QUOTATION MARK;Cf;0;BN;;;;;N;;;;;
+E0023;TAG NUMBER SIGN;Cf;0;BN;;;;;N;;;;;
+E0024;TAG DOLLAR SIGN;Cf;0;BN;;;;;N;;;;;
+E0025;TAG PERCENT SIGN;Cf;0;BN;;;;;N;;;;;
+E0026;TAG AMPERSAND;Cf;0;BN;;;;;N;;;;;
+E0027;TAG APOSTROPHE;Cf;0;BN;;;;;N;;;;;
+E0028;TAG LEFT PARENTHESIS;Cf;0;BN;;;;;N;;;;;
+E0029;TAG RIGHT PARENTHESIS;Cf;0;BN;;;;;N;;;;;
+E002A;TAG ASTERISK;Cf;0;BN;;;;;N;;;;;
+E002B;TAG PLUS SIGN;Cf;0;BN;;;;;N;;;;;
+E002C;TAG COMMA;Cf;0;BN;;;;;N;;;;;
+E002D;TAG HYPHEN-MINUS;Cf;0;BN;;;;;N;;;;;
+E002E;TAG FULL STOP;Cf;0;BN;;;;;N;;;;;
+E002F;TAG SOLIDUS;Cf;0;BN;;;;;N;;;;;
+E0030;TAG DIGIT ZERO;Cf;0;BN;;;;;N;;;;;
+E0031;TAG DIGIT ONE;Cf;0;BN;;;;;N;;;;;
+E0032;TAG DIGIT TWO;Cf;0;BN;;;;;N;;;;;
+E0033;TAG DIGIT THREE;Cf;0;BN;;;;;N;;;;;
+E0034;TAG DIGIT FOUR;Cf;0;BN;;;;;N;;;;;
+E0035;TAG DIGIT FIVE;Cf;0;BN;;;;;N;;;;;
+E0036;TAG DIGIT SIX;Cf;0;BN;;;;;N;;;;;
+E0037;TAG DIGIT SEVEN;Cf;0;BN;;;;;N;;;;;
+E0038;TAG DIGIT EIGHT;Cf;0;BN;;;;;N;;;;;
+E0039;TAG DIGIT NINE;Cf;0;BN;;;;;N;;;;;
+E003A;TAG COLON;Cf;0;BN;;;;;N;;;;;
+E003B;TAG SEMICOLON;Cf;0;BN;;;;;N;;;;;
+E003C;TAG LESS-THAN SIGN;Cf;0;BN;;;;;N;;;;;
+E003D;TAG EQUALS SIGN;Cf;0;BN;;;;;N;;;;;
+E003E;TAG GREATER-THAN SIGN;Cf;0;BN;;;;;N;;;;;
+E003F;TAG QUESTION MARK;Cf;0;BN;;;;;N;;;;;
+E0040;TAG COMMERCIAL AT;Cf;0;BN;;;;;N;;;;;
+E0041;TAG LATIN CAPITAL LETTER A;Cf;0;BN;;;;;N;;;;;
+E0042;TAG LATIN CAPITAL LETTER B;Cf;0;BN;;;;;N;;;;;
+E0043;TAG LATIN CAPITAL LETTER C;Cf;0;BN;;;;;N;;;;;
+E0044;TAG LATIN CAPITAL LETTER D;Cf;0;BN;;;;;N;;;;;
+E0045;TAG LATIN CAPITAL LETTER E;Cf;0;BN;;;;;N;;;;;
+E0046;TAG LATIN CAPITAL LETTER F;Cf;0;BN;;;;;N;;;;;
+E0047;TAG LATIN CAPITAL LETTER G;Cf;0;BN;;;;;N;;;;;
+E0048;TAG LATIN CAPITAL LETTER H;Cf;0;BN;;;;;N;;;;;
+E0049;TAG LATIN CAPITAL LETTER I;Cf;0;BN;;;;;N;;;;;
+E004A;TAG LATIN CAPITAL LETTER J;Cf;0;BN;;;;;N;;;;;
+E004B;TAG LATIN CAPITAL LETTER K;Cf;0;BN;;;;;N;;;;;
+E004C;TAG LATIN CAPITAL LETTER L;Cf;0;BN;;;;;N;;;;;
+E004D;TAG LATIN CAPITAL LETTER M;Cf;0;BN;;;;;N;;;;;
+E004E;TAG LATIN CAPITAL LETTER N;Cf;0;BN;;;;;N;;;;;
+E004F;TAG LATIN CAPITAL LETTER O;Cf;0;BN;;;;;N;;;;;
+E0050;TAG LATIN CAPITAL LETTER P;Cf;0;BN;;;;;N;;;;;
+E0051;TAG LATIN CAPITAL LETTER Q;Cf;0;BN;;;;;N;;;;;
+E0052;TAG LATIN CAPITAL LETTER R;Cf;0;BN;;;;;N;;;;;
+E0053;TAG LATIN CAPITAL LETTER S;Cf;0;BN;;;;;N;;;;;
+E0054;TAG LATIN CAPITAL LETTER T;Cf;0;BN;;;;;N;;;;;
+E0055;TAG LATIN CAPITAL LETTER U;Cf;0;BN;;;;;N;;;;;
+E0056;TAG LATIN CAPITAL LETTER V;Cf;0;BN;;;;;N;;;;;
+E0057;TAG LATIN CAPITAL LETTER W;Cf;0;BN;;;;;N;;;;;
+E0058;TAG LATIN CAPITAL LETTER X;Cf;0;BN;;;;;N;;;;;
+E0059;TAG LATIN CAPITAL LETTER Y;Cf;0;BN;;;;;N;;;;;
+E005A;TAG LATIN CAPITAL LETTER Z;Cf;0;BN;;;;;N;;;;;
+E005B;TAG LEFT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;;
+E005C;TAG REVERSE SOLIDUS;Cf;0;BN;;;;;N;;;;;
+E005D;TAG RIGHT SQUARE BRACKET;Cf;0;BN;;;;;N;;;;;
+E005E;TAG CIRCUMFLEX ACCENT;Cf;0;BN;;;;;N;;;;;
+E005F;TAG LOW LINE;Cf;0;BN;;;;;N;;;;;
+E0060;TAG GRAVE ACCENT;Cf;0;BN;;;;;N;;;;;
+E0061;TAG LATIN SMALL LETTER A;Cf;0;BN;;;;;N;;;;;
+E0062;TAG LATIN SMALL LETTER B;Cf;0;BN;;;;;N;;;;;
+E0063;TAG LATIN SMALL LETTER C;Cf;0;BN;;;;;N;;;;;
+E0064;TAG LATIN SMALL LETTER D;Cf;0;BN;;;;;N;;;;;
+E0065;TAG LATIN SMALL LETTER E;Cf;0;BN;;;;;N;;;;;
+E0066;TAG LATIN SMALL LETTER F;Cf;0;BN;;;;;N;;;;;
+E0067;TAG LATIN SMALL LETTER G;Cf;0;BN;;;;;N;;;;;
+E0068;TAG LATIN SMALL LETTER H;Cf;0;BN;;;;;N;;;;;
+E0069;TAG LATIN SMALL LETTER I;Cf;0;BN;;;;;N;;;;;
+E006A;TAG LATIN SMALL LETTER J;Cf;0;BN;;;;;N;;;;;
+E006B;TAG LATIN SMALL LETTER K;Cf;0;BN;;;;;N;;;;;
+E006C;TAG LATIN SMALL LETTER L;Cf;0;BN;;;;;N;;;;;
+E006D;TAG LATIN SMALL LETTER M;Cf;0;BN;;;;;N;;;;;
+E006E;TAG LATIN SMALL LETTER N;Cf;0;BN;;;;;N;;;;;
+E006F;TAG LATIN SMALL LETTER O;Cf;0;BN;;;;;N;;;;;
+E0070;TAG LATIN SMALL LETTER P;Cf;0;BN;;;;;N;;;;;
+E0071;TAG LATIN SMALL LETTER Q;Cf;0;BN;;;;;N;;;;;
+E0072;TAG LATIN SMALL LETTER R;Cf;0;BN;;;;;N;;;;;
+E0073;TAG LATIN SMALL LETTER S;Cf;0;BN;;;;;N;;;;;
+E0074;TAG LATIN SMALL LETTER T;Cf;0;BN;;;;;N;;;;;
+E0075;TAG LATIN SMALL LETTER U;Cf;0;BN;;;;;N;;;;;
+E0076;TAG LATIN SMALL LETTER V;Cf;0;BN;;;;;N;;;;;
+E0077;TAG LATIN SMALL LETTER W;Cf;0;BN;;;;;N;;;;;
+E0078;TAG LATIN SMALL LETTER X;Cf;0;BN;;;;;N;;;;;
+E0079;TAG LATIN SMALL LETTER Y;Cf;0;BN;;;;;N;;;;;
+E007A;TAG LATIN SMALL LETTER Z;Cf;0;BN;;;;;N;;;;;
+E007B;TAG LEFT CURLY BRACKET;Cf;0;BN;;;;;N;;;;;
+E007C;TAG VERTICAL LINE;Cf;0;BN;;;;;N;;;;;
+E007D;TAG RIGHT CURLY BRACKET;Cf;0;BN;;;;;N;;;;;
+E007E;TAG TILDE;Cf;0;BN;;;;;N;;;;;
+E007F;CANCEL TAG;Cf;0;BN;;;;;N;;;;;
+E0100;VARIATION SELECTOR-17;Mn;0;NSM;;;;;N;;;;;
+E0101;VARIATION SELECTOR-18;Mn;0;NSM;;;;;N;;;;;
+E0102;VARIATION SELECTOR-19;Mn;0;NSM;;;;;N;;;;;
+E0103;VARIATION SELECTOR-20;Mn;0;NSM;;;;;N;;;;;
+E0104;VARIATION SELECTOR-21;Mn;0;NSM;;;;;N;;;;;
+E0105;VARIATION SELECTOR-22;Mn;0;NSM;;;;;N;;;;;
+E0106;VARIATION SELECTOR-23;Mn;0;NSM;;;;;N;;;;;
+E0107;VARIATION SELECTOR-24;Mn;0;NSM;;;;;N;;;;;
+E0108;VARIATION SELECTOR-25;Mn;0;NSM;;;;;N;;;;;
+E0109;VARIATION SELECTOR-26;Mn;0;NSM;;;;;N;;;;;
+E010A;VARIATION SELECTOR-27;Mn;0;NSM;;;;;N;;;;;
+E010B;VARIATION SELECTOR-28;Mn;0;NSM;;;;;N;;;;;
+E010C;VARIATION SELECTOR-29;Mn;0;NSM;;;;;N;;;;;
+E010D;VARIATION SELECTOR-30;Mn;0;NSM;;;;;N;;;;;
+E010E;VARIATION SELECTOR-31;Mn;0;NSM;;;;;N;;;;;
+E010F;VARIATION SELECTOR-32;Mn;0;NSM;;;;;N;;;;;
+E0110;VARIATION SELECTOR-33;Mn;0;NSM;;;;;N;;;;;
+E0111;VARIATION SELECTOR-34;Mn;0;NSM;;;;;N;;;;;
+E0112;VARIATION SELECTOR-35;Mn;0;NSM;;;;;N;;;;;
+E0113;VARIATION SELECTOR-36;Mn;0;NSM;;;;;N;;;;;
+E0114;VARIATION SELECTOR-37;Mn;0;NSM;;;;;N;;;;;
+E0115;VARIATION SELECTOR-38;Mn;0;NSM;;;;;N;;;;;
+E0116;VARIATION SELECTOR-39;Mn;0;NSM;;;;;N;;;;;
+E0117;VARIATION SELECTOR-40;Mn;0;NSM;;;;;N;;;;;
+E0118;VARIATION SELECTOR-41;Mn;0;NSM;;;;;N;;;;;
+E0119;VARIATION SELECTOR-42;Mn;0;NSM;;;;;N;;;;;
+E011A;VARIATION SELECTOR-43;Mn;0;NSM;;;;;N;;;;;
+E011B;VARIATION SELECTOR-44;Mn;0;NSM;;;;;N;;;;;
+E011C;VARIATION SELECTOR-45;Mn;0;NSM;;;;;N;;;;;
+E011D;VARIATION SELECTOR-46;Mn;0;NSM;;;;;N;;;;;
+E011E;VARIATION SELECTOR-47;Mn;0;NSM;;;;;N;;;;;
+E011F;VARIATION SELECTOR-48;Mn;0;NSM;;;;;N;;;;;
+E0120;VARIATION SELECTOR-49;Mn;0;NSM;;;;;N;;;;;
+E0121;VARIATION SELECTOR-50;Mn;0;NSM;;;;;N;;;;;
+E0122;VARIATION SELECTOR-51;Mn;0;NSM;;;;;N;;;;;
+E0123;VARIATION SELECTOR-52;Mn;0;NSM;;;;;N;;;;;
+E0124;VARIATION SELECTOR-53;Mn;0;NSM;;;;;N;;;;;
+E0125;VARIATION SELECTOR-54;Mn;0;NSM;;;;;N;;;;;
+E0126;VARIATION SELECTOR-55;Mn;0;NSM;;;;;N;;;;;
+E0127;VARIATION SELECTOR-56;Mn;0;NSM;;;;;N;;;;;
+E0128;VARIATION SELECTOR-57;Mn;0;NSM;;;;;N;;;;;
+E0129;VARIATION SELECTOR-58;Mn;0;NSM;;;;;N;;;;;
+E012A;VARIATION SELECTOR-59;Mn;0;NSM;;;;;N;;;;;
+E012B;VARIATION SELECTOR-60;Mn;0;NSM;;;;;N;;;;;
+E012C;VARIATION SELECTOR-61;Mn;0;NSM;;;;;N;;;;;
+E012D;VARIATION SELECTOR-62;Mn;0;NSM;;;;;N;;;;;
+E012E;VARIATION SELECTOR-63;Mn;0;NSM;;;;;N;;;;;
+E012F;VARIATION SELECTOR-64;Mn;0;NSM;;;;;N;;;;;
+E0130;VARIATION SELECTOR-65;Mn;0;NSM;;;;;N;;;;;
+E0131;VARIATION SELECTOR-66;Mn;0;NSM;;;;;N;;;;;
+E0132;VARIATION SELECTOR-67;Mn;0;NSM;;;;;N;;;;;
+E0133;VARIATION SELECTOR-68;Mn;0;NSM;;;;;N;;;;;
+E0134;VARIATION SELECTOR-69;Mn;0;NSM;;;;;N;;;;;
+E0135;VARIATION SELECTOR-70;Mn;0;NSM;;;;;N;;;;;
+E0136;VARIATION SELECTOR-71;Mn;0;NSM;;;;;N;;;;;
+E0137;VARIATION SELECTOR-72;Mn;0;NSM;;;;;N;;;;;
+E0138;VARIATION SELECTOR-73;Mn;0;NSM;;;;;N;;;;;
+E0139;VARIATION SELECTOR-74;Mn;0;NSM;;;;;N;;;;;
+E013A;VARIATION SELECTOR-75;Mn;0;NSM;;;;;N;;;;;
+E013B;VARIATION SELECTOR-76;Mn;0;NSM;;;;;N;;;;;
+E013C;VARIATION SELECTOR-77;Mn;0;NSM;;;;;N;;;;;
+E013D;VARIATION SELECTOR-78;Mn;0;NSM;;;;;N;;;;;
+E013E;VARIATION SELECTOR-79;Mn;0;NSM;;;;;N;;;;;
+E013F;VARIATION SELECTOR-80;Mn;0;NSM;;;;;N;;;;;
+E0140;VARIATION SELECTOR-81;Mn;0;NSM;;;;;N;;;;;
+E0141;VARIATION SELECTOR-82;Mn;0;NSM;;;;;N;;;;;
+E0142;VARIATION SELECTOR-83;Mn;0;NSM;;;;;N;;;;;
+E0143;VARIATION SELECTOR-84;Mn;0;NSM;;;;;N;;;;;
+E0144;VARIATION SELECTOR-85;Mn;0;NSM;;;;;N;;;;;
+E0145;VARIATION SELECTOR-86;Mn;0;NSM;;;;;N;;;;;
+E0146;VARIATION SELECTOR-87;Mn;0;NSM;;;;;N;;;;;
+E0147;VARIATION SELECTOR-88;Mn;0;NSM;;;;;N;;;;;
+E0148;VARIATION SELECTOR-89;Mn;0;NSM;;;;;N;;;;;
+E0149;VARIATION SELECTOR-90;Mn;0;NSM;;;;;N;;;;;
+E014A;VARIATION SELECTOR-91;Mn;0;NSM;;;;;N;;;;;
+E014B;VARIATION SELECTOR-92;Mn;0;NSM;;;;;N;;;;;
+E014C;VARIATION SELECTOR-93;Mn;0;NSM;;;;;N;;;;;
+E014D;VARIATION SELECTOR-94;Mn;0;NSM;;;;;N;;;;;
+E014E;VARIATION SELECTOR-95;Mn;0;NSM;;;;;N;;;;;
+E014F;VARIATION SELECTOR-96;Mn;0;NSM;;;;;N;;;;;
+E0150;VARIATION SELECTOR-97;Mn;0;NSM;;;;;N;;;;;
+E0151;VARIATION SELECTOR-98;Mn;0;NSM;;;;;N;;;;;
+E0152;VARIATION SELECTOR-99;Mn;0;NSM;;;;;N;;;;;
+E0153;VARIATION SELECTOR-100;Mn;0;NSM;;;;;N;;;;;
+E0154;VARIATION SELECTOR-101;Mn;0;NSM;;;;;N;;;;;
+E0155;VARIATION SELECTOR-102;Mn;0;NSM;;;;;N;;;;;
+E0156;VARIATION SELECTOR-103;Mn;0;NSM;;;;;N;;;;;
+E0157;VARIATION SELECTOR-104;Mn;0;NSM;;;;;N;;;;;
+E0158;VARIATION SELECTOR-105;Mn;0;NSM;;;;;N;;;;;
+E0159;VARIATION SELECTOR-106;Mn;0;NSM;;;;;N;;;;;
+E015A;VARIATION SELECTOR-107;Mn;0;NSM;;;;;N;;;;;
+E015B;VARIATION SELECTOR-108;Mn;0;NSM;;;;;N;;;;;
+E015C;VARIATION SELECTOR-109;Mn;0;NSM;;;;;N;;;;;
+E015D;VARIATION SELECTOR-110;Mn;0;NSM;;;;;N;;;;;
+E015E;VARIATION SELECTOR-111;Mn;0;NSM;;;;;N;;;;;
+E015F;VARIATION SELECTOR-112;Mn;0;NSM;;;;;N;;;;;
+E0160;VARIATION SELECTOR-113;Mn;0;NSM;;;;;N;;;;;
+E0161;VARIATION SELECTOR-114;Mn;0;NSM;;;;;N;;;;;
+E0162;VARIATION SELECTOR-115;Mn;0;NSM;;;;;N;;;;;
+E0163;VARIATION SELECTOR-116;Mn;0;NSM;;;;;N;;;;;
+E0164;VARIATION SELECTOR-117;Mn;0;NSM;;;;;N;;;;;
+E0165;VARIATION SELECTOR-118;Mn;0;NSM;;;;;N;;;;;
+E0166;VARIATION SELECTOR-119;Mn;0;NSM;;;;;N;;;;;
+E0167;VARIATION SELECTOR-120;Mn;0;NSM;;;;;N;;;;;
+E0168;VARIATION SELECTOR-121;Mn;0;NSM;;;;;N;;;;;
+E0169;VARIATION SELECTOR-122;Mn;0;NSM;;;;;N;;;;;
+E016A;VARIATION SELECTOR-123;Mn;0;NSM;;;;;N;;;;;
+E016B;VARIATION SELECTOR-124;Mn;0;NSM;;;;;N;;;;;
+E016C;VARIATION SELECTOR-125;Mn;0;NSM;;;;;N;;;;;
+E016D;VARIATION SELECTOR-126;Mn;0;NSM;;;;;N;;;;;
+E016E;VARIATION SELECTOR-127;Mn;0;NSM;;;;;N;;;;;
+E016F;VARIATION SELECTOR-128;Mn;0;NSM;;;;;N;;;;;
+E0170;VARIATION SELECTOR-129;Mn;0;NSM;;;;;N;;;;;
+E0171;VARIATION SELECTOR-130;Mn;0;NSM;;;;;N;;;;;
+E0172;VARIATION SELECTOR-131;Mn;0;NSM;;;;;N;;;;;
+E0173;VARIATION SELECTOR-132;Mn;0;NSM;;;;;N;;;;;
+E0174;VARIATION SELECTOR-133;Mn;0;NSM;;;;;N;;;;;
+E0175;VARIATION SELECTOR-134;Mn;0;NSM;;;;;N;;;;;
+E0176;VARIATION SELECTOR-135;Mn;0;NSM;;;;;N;;;;;
+E0177;VARIATION SELECTOR-136;Mn;0;NSM;;;;;N;;;;;
+E0178;VARIATION SELECTOR-137;Mn;0;NSM;;;;;N;;;;;
+E0179;VARIATION SELECTOR-138;Mn;0;NSM;;;;;N;;;;;
+E017A;VARIATION SELECTOR-139;Mn;0;NSM;;;;;N;;;;;
+E017B;VARIATION SELECTOR-140;Mn;0;NSM;;;;;N;;;;;
+E017C;VARIATION SELECTOR-141;Mn;0;NSM;;;;;N;;;;;
+E017D;VARIATION SELECTOR-142;Mn;0;NSM;;;;;N;;;;;
+E017E;VARIATION SELECTOR-143;Mn;0;NSM;;;;;N;;;;;
+E017F;VARIATION SELECTOR-144;Mn;0;NSM;;;;;N;;;;;
+E0180;VARIATION SELECTOR-145;Mn;0;NSM;;;;;N;;;;;
+E0181;VARIATION SELECTOR-146;Mn;0;NSM;;;;;N;;;;;
+E0182;VARIATION SELECTOR-147;Mn;0;NSM;;;;;N;;;;;
+E0183;VARIATION SELECTOR-148;Mn;0;NSM;;;;;N;;;;;
+E0184;VARIATION SELECTOR-149;Mn;0;NSM;;;;;N;;;;;
+E0185;VARIATION SELECTOR-150;Mn;0;NSM;;;;;N;;;;;
+E0186;VARIATION SELECTOR-151;Mn;0;NSM;;;;;N;;;;;
+E0187;VARIATION SELECTOR-152;Mn;0;NSM;;;;;N;;;;;
+E0188;VARIATION SELECTOR-153;Mn;0;NSM;;;;;N;;;;;
+E0189;VARIATION SELECTOR-154;Mn;0;NSM;;;;;N;;;;;
+E018A;VARIATION SELECTOR-155;Mn;0;NSM;;;;;N;;;;;
+E018B;VARIATION SELECTOR-156;Mn;0;NSM;;;;;N;;;;;
+E018C;VARIATION SELECTOR-157;Mn;0;NSM;;;;;N;;;;;
+E018D;VARIATION SELECTOR-158;Mn;0;NSM;;;;;N;;;;;
+E018E;VARIATION SELECTOR-159;Mn;0;NSM;;;;;N;;;;;
+E018F;VARIATION SELECTOR-160;Mn;0;NSM;;;;;N;;;;;
+E0190;VARIATION SELECTOR-161;Mn;0;NSM;;;;;N;;;;;
+E0191;VARIATION SELECTOR-162;Mn;0;NSM;;;;;N;;;;;
+E0192;VARIATION SELECTOR-163;Mn;0;NSM;;;;;N;;;;;
+E0193;VARIATION SELECTOR-164;Mn;0;NSM;;;;;N;;;;;
+E0194;VARIATION SELECTOR-165;Mn;0;NSM;;;;;N;;;;;
+E0195;VARIATION SELECTOR-166;Mn;0;NSM;;;;;N;;;;;
+E0196;VARIATION SELECTOR-167;Mn;0;NSM;;;;;N;;;;;
+E0197;VARIATION SELECTOR-168;Mn;0;NSM;;;;;N;;;;;
+E0198;VARIATION SELECTOR-169;Mn;0;NSM;;;;;N;;;;;
+E0199;VARIATION SELECTOR-170;Mn;0;NSM;;;;;N;;;;;
+E019A;VARIATION SELECTOR-171;Mn;0;NSM;;;;;N;;;;;
+E019B;VARIATION SELECTOR-172;Mn;0;NSM;;;;;N;;;;;
+E019C;VARIATION SELECTOR-173;Mn;0;NSM;;;;;N;;;;;
+E019D;VARIATION SELECTOR-174;Mn;0;NSM;;;;;N;;;;;
+E019E;VARIATION SELECTOR-175;Mn;0;NSM;;;;;N;;;;;
+E019F;VARIATION SELECTOR-176;Mn;0;NSM;;;;;N;;;;;
+E01A0;VARIATION SELECTOR-177;Mn;0;NSM;;;;;N;;;;;
+E01A1;VARIATION SELECTOR-178;Mn;0;NSM;;;;;N;;;;;
+E01A2;VARIATION SELECTOR-179;Mn;0;NSM;;;;;N;;;;;
+E01A3;VARIATION SELECTOR-180;Mn;0;NSM;;;;;N;;;;;
+E01A4;VARIATION SELECTOR-181;Mn;0;NSM;;;;;N;;;;;
+E01A5;VARIATION SELECTOR-182;Mn;0;NSM;;;;;N;;;;;
+E01A6;VARIATION SELECTOR-183;Mn;0;NSM;;;;;N;;;;;
+E01A7;VARIATION SELECTOR-184;Mn;0;NSM;;;;;N;;;;;
+E01A8;VARIATION SELECTOR-185;Mn;0;NSM;;;;;N;;;;;
+E01A9;VARIATION SELECTOR-186;Mn;0;NSM;;;;;N;;;;;
+E01AA;VARIATION SELECTOR-187;Mn;0;NSM;;;;;N;;;;;
+E01AB;VARIATION SELECTOR-188;Mn;0;NSM;;;;;N;;;;;
+E01AC;VARIATION SELECTOR-189;Mn;0;NSM;;;;;N;;;;;
+E01AD;VARIATION SELECTOR-190;Mn;0;NSM;;;;;N;;;;;
+E01AE;VARIATION SELECTOR-191;Mn;0;NSM;;;;;N;;;;;
+E01AF;VARIATION SELECTOR-192;Mn;0;NSM;;;;;N;;;;;
+E01B0;VARIATION SELECTOR-193;Mn;0;NSM;;;;;N;;;;;
+E01B1;VARIATION SELECTOR-194;Mn;0;NSM;;;;;N;;;;;
+E01B2;VARIATION SELECTOR-195;Mn;0;NSM;;;;;N;;;;;
+E01B3;VARIATION SELECTOR-196;Mn;0;NSM;;;;;N;;;;;
+E01B4;VARIATION SELECTOR-197;Mn;0;NSM;;;;;N;;;;;
+E01B5;VARIATION SELECTOR-198;Mn;0;NSM;;;;;N;;;;;
+E01B6;VARIATION SELECTOR-199;Mn;0;NSM;;;;;N;;;;;
+E01B7;VARIATION SELECTOR-200;Mn;0;NSM;;;;;N;;;;;
+E01B8;VARIATION SELECTOR-201;Mn;0;NSM;;;;;N;;;;;
+E01B9;VARIATION SELECTOR-202;Mn;0;NSM;;;;;N;;;;;
+E01BA;VARIATION SELECTOR-203;Mn;0;NSM;;;;;N;;;;;
+E01BB;VARIATION SELECTOR-204;Mn;0;NSM;;;;;N;;;;;
+E01BC;VARIATION SELECTOR-205;Mn;0;NSM;;;;;N;;;;;
+E01BD;VARIATION SELECTOR-206;Mn;0;NSM;;;;;N;;;;;
+E01BE;VARIATION SELECTOR-207;Mn;0;NSM;;;;;N;;;;;
+E01BF;VARIATION SELECTOR-208;Mn;0;NSM;;;;;N;;;;;
+E01C0;VARIATION SELECTOR-209;Mn;0;NSM;;;;;N;;;;;
+E01C1;VARIATION SELECTOR-210;Mn;0;NSM;;;;;N;;;;;
+E01C2;VARIATION SELECTOR-211;Mn;0;NSM;;;;;N;;;;;
+E01C3;VARIATION SELECTOR-212;Mn;0;NSM;;;;;N;;;;;
+E01C4;VARIATION SELECTOR-213;Mn;0;NSM;;;;;N;;;;;
+E01C5;VARIATION SELECTOR-214;Mn;0;NSM;;;;;N;;;;;
+E01C6;VARIATION SELECTOR-215;Mn;0;NSM;;;;;N;;;;;
+E01C7;VARIATION SELECTOR-216;Mn;0;NSM;;;;;N;;;;;
+E01C8;VARIATION SELECTOR-217;Mn;0;NSM;;;;;N;;;;;
+E01C9;VARIATION SELECTOR-218;Mn;0;NSM;;;;;N;;;;;
+E01CA;VARIATION SELECTOR-219;Mn;0;NSM;;;;;N;;;;;
+E01CB;VARIATION SELECTOR-220;Mn;0;NSM;;;;;N;;;;;
+E01CC;VARIATION SELECTOR-221;Mn;0;NSM;;;;;N;;;;;
+E01CD;VARIATION SELECTOR-222;Mn;0;NSM;;;;;N;;;;;
+E01CE;VARIATION SELECTOR-223;Mn;0;NSM;;;;;N;;;;;
+E01CF;VARIATION SELECTOR-224;Mn;0;NSM;;;;;N;;;;;
+E01D0;VARIATION SELECTOR-225;Mn;0;NSM;;;;;N;;;;;
+E01D1;VARIATION SELECTOR-226;Mn;0;NSM;;;;;N;;;;;
+E01D2;VARIATION SELECTOR-227;Mn;0;NSM;;;;;N;;;;;
+E01D3;VARIATION SELECTOR-228;Mn;0;NSM;;;;;N;;;;;
+E01D4;VARIATION SELECTOR-229;Mn;0;NSM;;;;;N;;;;;
+E01D5;VARIATION SELECTOR-230;Mn;0;NSM;;;;;N;;;;;
+E01D6;VARIATION SELECTOR-231;Mn;0;NSM;;;;;N;;;;;
+E01D7;VARIATION SELECTOR-232;Mn;0;NSM;;;;;N;;;;;
+E01D8;VARIATION SELECTOR-233;Mn;0;NSM;;;;;N;;;;;
+E01D9;VARIATION SELECTOR-234;Mn;0;NSM;;;;;N;;;;;
+E01DA;VARIATION SELECTOR-235;Mn;0;NSM;;;;;N;;;;;
+E01DB;VARIATION SELECTOR-236;Mn;0;NSM;;;;;N;;;;;
+E01DC;VARIATION SELECTOR-237;Mn;0;NSM;;;;;N;;;;;
+E01DD;VARIATION SELECTOR-238;Mn;0;NSM;;;;;N;;;;;
+E01DE;VARIATION SELECTOR-239;Mn;0;NSM;;;;;N;;;;;
+E01DF;VARIATION SELECTOR-240;Mn;0;NSM;;;;;N;;;;;
+E01E0;VARIATION SELECTOR-241;Mn;0;NSM;;;;;N;;;;;
+E01E1;VARIATION SELECTOR-242;Mn;0;NSM;;;;;N;;;;;
+E01E2;VARIATION SELECTOR-243;Mn;0;NSM;;;;;N;;;;;
+E01E3;VARIATION SELECTOR-244;Mn;0;NSM;;;;;N;;;;;
+E01E4;VARIATION SELECTOR-245;Mn;0;NSM;;;;;N;;;;;
+E01E5;VARIATION SELECTOR-246;Mn;0;NSM;;;;;N;;;;;
+E01E6;VARIATION SELECTOR-247;Mn;0;NSM;;;;;N;;;;;
+E01E7;VARIATION SELECTOR-248;Mn;0;NSM;;;;;N;;;;;
+E01E8;VARIATION SELECTOR-249;Mn;0;NSM;;;;;N;;;;;
+E01E9;VARIATION SELECTOR-250;Mn;0;NSM;;;;;N;;;;;
+E01EA;VARIATION SELECTOR-251;Mn;0;NSM;;;;;N;;;;;
+E01EB;VARIATION SELECTOR-252;Mn;0;NSM;;;;;N;;;;;
+E01EC;VARIATION SELECTOR-253;Mn;0;NSM;;;;;N;;;;;
+E01ED;VARIATION SELECTOR-254;Mn;0;NSM;;;;;N;;;;;
+E01EE;VARIATION SELECTOR-255;Mn;0;NSM;;;;;N;;;;;
+E01EF;VARIATION SELECTOR-256;Mn;0;NSM;;;;;N;;;;;
+F0000;<Plane 15 Private Use, First>;Co;0;L;;;;;N;;;;;
+FFFFD;<Plane 15 Private Use, Last>;Co;0;L;;;;;N;;;;;
+100000;<Plane 16 Private Use, First>;Co;0;L;;;;;N;;;;;
+10FFFD;<Plane 16 Private Use, Last>;Co;0;L;;;;;N;;;;;
Binary file srctools/readtype/documentation/Unicode Character Data and Line Break data Update History.doc has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/readtype/group/bld.inf	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,31 @@
+// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Base tools (e.g. petran)
+// 
+//
+
+/**
+ @file
+*/
+
+
+PRJ_PLATFORMS
+TOOLS2
+
+
+PRJ_MMPFILES
+readtype.mmp
+
+PRJ_TESTMMPFILES
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/readtype/group/readtype.mmp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,23 @@
+// Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+//
+
+
+TARGET			readtype.exe
+TARGETTYPE		exe
+SOURCEPATH	../../readtype
+SOURCE			 readtype.cpp
+OS_LAYER_SYSTEMINCLUDE_SYMBIAN
+
+VENDORID 0x70000001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/readtype/group/readtype.mrp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,10 @@
+component       dev_build_srctools_readtype
+
+source          /src/tools/build/srctools/readtype
+exports         /src/tools/build/srctools/readtype/group
+binary          /src/tools/build/srctools/readtype/group all
+
+notes_source \component_defs\release.src
+
+ipr T
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/readtype/readtype.cpp	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,868 @@
+// Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// Reads a Unicode character type data file (such as UnicodeData-3.0.0.txt or a file containing locale-specific overrides)
+// and writes C++ definitions of tables containing the information.
+// Usage: readtype <input-file> <output-file> { <locale-name> }.
+// <input-file>: either the standard Unicode character data file (e.g., UnicodeData-3.0.0.txt) or a file containing
+// overriding information for a certain locale, in the same format as the standard file, but with ranges for which
+// there is no data given in the form:
+// 0041;;;;;;;;;;;;;;
+// 006A;<No Data First>;;;;;;;;;;;;;
+// FFFF;<No Data Last>;;;;;;;;;;;;;
+// (in this example, these entries show that there is no overriding data for the character 0041 and range
+// 006A..FFFF inclusive).
+// Both single entries with no data and ranges with no data must have nothing in the third field (category).
+// <output-file>: the C++ source file to be output: this file becomes \e32\unicode\unitable.cpp, or an overriding
+// file in \e32\lsrc; there are none of these yet.
+// <locale-name>: a an optional name to be inserted into identifiers in the output file: omit this for the standard
+// data set; use names like 'Turkish', 'Japanese', etc., for locales.
+// 
+//
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef _UNICODE
+#define _UNICODE
+#endif
+
+#include <unicode.h>
+
+// don't use unicode.h::TUnicodeDataRange, since its for 16-bit, and deprecated
+struct TUnicodeDataRange32	// Only used inside this cpp.
+	{
+	TUint32 iRangeStart;	// Unicode value of the start of the range of characters
+	TInt16 iIndex;			// index into an array of character information structures (-1 means data no available)
+	};
+
+const int PlaneCount = 17;
+TUnicodePlane ThePlanesInReadType[PlaneCount];
+
+// Tables to convert names used in the data file to categories defined in TChar.
+struct CatInfo
+	{
+	const char* iName;
+	TChar::TCategory iCat;
+	};
+
+static const CatInfo TheCatInfo[] =
+	{
+	{ "Lu", TChar::ELuCategory },
+	{ "Ll", TChar::ELlCategory },
+	{ "Lt", TChar::ELtCategory },
+	{ "Lo", TChar::ELoCategory },
+	{ "Lm", TChar::ELmCategory },
+	{ "Mn", TChar::EMnCategory },
+	{ "Mc", TChar::EMcCategory },
+	{ "Me", TChar::EMeCategory },
+	{ "Nd", TChar::ENdCategory },
+	{ "Nl", TChar::ENlCategory },
+	{ "No", TChar::ENoCategory },
+	{ "Pc", TChar::EPcCategory },
+	{ "Pd", TChar::EPdCategory },
+	{ "Ps", TChar::EPsCategory },
+	{ "Pe", TChar::EPeCategory },
+	{ "Pi", TChar::EPiCategory },
+	{ "Pf", TChar::EPfCategory },
+	{ "Po", TChar::EPoCategory },
+	{ "Sm", TChar::ESmCategory },
+	{ "Sc", TChar::EScCategory },
+	{ "Sk", TChar::ESkCategory },
+	{ "So", TChar::ESoCategory },
+	{ "Zs", TChar::EZsCategory },
+	{ "Zl", TChar::EZlCategory },
+	{ "Zp", TChar::EZpCategory },
+	{ "Cc", TChar::ECcCategory },
+	{ "Cf", TChar::ECfCategory },
+	{ "Cs", TChar::ECsCategory },
+	{ "Co", TChar::ECoCategory },
+	{ "Cn", TChar::ECnCategory }
+	};
+const int TheCategories = sizeof(TheCatInfo) / sizeof(TheCatInfo[0]);
+
+struct BdCatInfo
+	{
+	const char* iName;
+	TChar::TBdCategory iBdCat;
+	};
+
+static const BdCatInfo TheBdCatInfo[] =
+	{
+	{ "L", TChar::ELeftToRight },
+	{ "LRE", TChar::ELeftToRightEmbedding },
+	{ "LRO", TChar::ELeftToRightOverride },
+	{ "R", TChar::ERightToLeft },
+	{ "AL", TChar::ERightToLeftArabic }, 
+	{ "RLE", TChar::ERightToLeftEmbedding },
+	{ "RLO", TChar::ERightToLeftOverride },
+	{ "PDF", TChar::EPopDirectionalFormat },
+	{ "EN", TChar::EEuropeanNumber }, 
+	{ "ES", TChar::EEuropeanNumberSeparator }, 
+	{ "ET", TChar::EEuropeanNumberTerminator },  
+	{ "AN", TChar::EArabicNumber }, 
+	{ "CS", TChar::ECommonNumberSeparator }, 
+	{ "NSM", TChar::ENonSpacingMark },
+	{ "BN", TChar::EBoundaryNeutral }, 
+	{ "B", TChar::EParagraphSeparator },
+	{ "S", TChar::ESegmentSeparator },
+	{ "WS", TChar::EWhitespace }, 
+	{ "ON", TChar::EOtherNeutral }, 
+	};
+const int TheBdCategories = sizeof(TheBdCatInfo) / sizeof(TheBdCatInfo[0]);
+
+// Class derived from TUnicodeData to provide constructor etc.
+class Data: public TUnicodeData
+	{
+	public:
+	Data();
+	TBool operator==(const Data& c) const;
+	TBool operator!=(const Data& c) const { return !(*this == c); }
+	void Write();
+	};
+
+// The character information table.
+const int MaxDatas = 1000;
+Data TheData[MaxDatas];
+int Datas = 0;
+
+// The range table, containing indices to the character information table.
+const int MaxRanges = 4000;
+TUnicodeDataRange32 TheRange[MaxRanges];
+int Ranges = 0;
+
+// The exhaustive index table, containing indices from every 16-bit value to the character information table.
+int TheIndex[0x110000];
+
+// The special tables for characters in the range 0..255.
+TUint16 LowerCaseTable[256];
+TUint16 FoldTable[256];
+
+// The special table for characters in the range 0xFF00..0xFFFF
+TUint16 CjkWidthFoldTable[256];
+
+/*
+The composition table. The compositions are stored as a word made up from the composition tag (high byte) and
+the number of components (low byte), the Unicode value of the composed character, then the Unicode values of
+the components.
+
+Two tables are created containing the indices of compositions. One of these is sorted by
+composed character, one by decomposition. This enables quick conversions to be made in both directions.
+*/
+const int MaxCompositionWords = 14000;
+TUint32 CompositionBuffer[MaxCompositionWords];
+int CompositionWords = 0;
+const int MaxCompositions = 8000;
+TInt16 Compose[MaxCompositions];		// composition buffer indices, sorted by composed character
+TInt16 Decompose[MaxCompositions];		// composition buffer indices, sorted by decomposition
+int Compositions = 0;
+int trie_data[0x110000];					// used to build the trie
+
+FILE *input_file;
+FILE *output_file;
+const char *input_filename;
+const char *output_filename;
+
+// Convert a hex string to an integer.
+static int hex(const char *s)
+	{
+	int x = 0;
+	while (*s)
+		{
+		int n = *s;
+		if (n >= '0' && n <= '9')
+			n -= '0';
+		else if (n >= 'A' && n <= 'F')
+			n -= 'A' - 10;
+		else if (n >= 'a' && n <= 'f')
+			n -= 'a' - 10;
+		else
+			break;
+		x = x * 16 + n;
+
+		s++;
+		}
+	return x;
+	}
+
+static TChar::TCategory Category(const char* aName,bool aWarn)
+	{
+	for (int i = 0; i < TheCategories; i++)
+		if (!strcmp(aName,TheCatInfo[i].iName))
+			return TheCatInfo[i].iCat;
+	if (aWarn)
+		fprintf(stderr,"unknown category %s\n",aName);
+	return (TChar::TCategory)(-1);
+	}
+
+static TChar::TBdCategory BdCategory(const char* aName,bool aWarn)
+	{
+	for (int i = 0; i < TheBdCategories; i++)
+		if (!strcmp(aName,TheBdCatInfo[i].iName))
+			return TheBdCatInfo[i].iBdCat;
+	if (aWarn)
+		fprintf(stderr,"unknown bidirectional category %s\n",aName);
+	return (TChar::TBdCategory)(-1);
+	}
+
+// Write an aggregate initialiser for a Data object to the output file.
+void Data::Write()
+	{
+	fprintf(output_file,"{ %d, %d, %d, %d, %d, %d }",
+			(int)iCategory,
+			(int)iBdCategory,
+			(int)iCombiningClass,
+			(int)iDigitOffset,
+			(int)iCaseOffset,
+			(int)iFlags);
+	}
+
+/*
+Add a new entry to the range table. If the category is the illegal value -1 store -1 as the
+index; this feature is used when creating character data for specific locales, which mostly
+consists of ranges for which the data is held in the main table, and is marked in this way
+as unspecified in the locale table.
+*/
+void add_range(Data& info,TInt code)
+	{
+	// Get an index to the character info; add a new entry if necessary.
+	int index = -1;
+	if (info.iCategory != TChar::TCategory(0xFF))
+		{
+		for (int i = 0; i < Datas && index == -1; i++)
+			if (TheData[i] == info)
+				index = i;
+		if (index == -1)
+			{
+			if (Datas >= MaxDatas)
+				{
+				fprintf(stderr,"too many Datas: > %d\n",MaxDatas);
+				exit(1);
+				}
+			TheData[index = Datas++] = info;
+			}
+		}
+
+	// Add the entry to the range table.
+	if (Ranges >= MaxRanges)
+		{
+		fprintf(stderr,"too many Ranges: > %d, when processing U+%x\n", MaxRanges, code);
+		exit(1);
+		}
+	TheRange[Ranges].iRangeStart = code;
+	TheRange[Ranges].iIndex = (TInt16)index;
+	Ranges++;
+	}
+
+// Write a table of "entries" integers each of "entry_size" bytes.
+int write_table(const void *table,const char *name,
+				int entries,int input_entry_size,int output_entry_size,
+				int entry_signed,int entries_per_row,int write_array_size)
+	{
+	const char *type = entry_signed ? "TInt" : "TUint";
+	const int bits = output_entry_size * 8;
+
+	/*
+	There is a choice here whether or not the number of entries in the array is written:
+	either <name>[<size>] or <name>[] is written. The latter method is used where the header
+	says <name>[] so that compilers like GCC don't moan about type mismatches.
+	*/
+	if (entries == 0)
+		{
+		// In case that given plane has no character.
+		fprintf(output_file,"const %s%d * const %s = NULL;\n",type,bits,name);
+		return 0;
+		}
+	if (write_array_size)
+		fprintf(output_file,"const %s%d %s[%d] = \n\t{",type,bits,name,entries);
+	else
+		fprintf(output_file,"const %s%d %s[] = \n\t{ // %d entries",type,bits,name,entries);
+
+	const unsigned char *p = (const unsigned char *)table;
+	for (int i = 0; i < entries; i++, p += input_entry_size)
+		{
+		if (i % entries_per_row == 0)
+			fprintf(output_file,"\n\t");
+		if (output_entry_size == 1)
+			fprintf(output_file,"0x%02x",(int)(*p));
+		else if (output_entry_size == 2)
+			fprintf(output_file,"0x%04x",(int)(*((TUint16 *)p)));
+		else if (output_entry_size == 4)
+			fprintf(output_file,"0x%08x",(int)(*((TUint32 *)p)));
+		else
+			{
+			fprintf(stderr,"illegal output entry size: %d\n",output_entry_size);
+			exit(1);
+			}
+		if (i < entries - 1)
+			fputc(',',output_file);
+		// comment for easy read
+		//if ((i+1) % entries_per_row == 0)
+		//	fprintf(output_file, "\t// U+%X-U+%X (%d-%d)", i+1-entries_per_row, i, i+1-entries_per_row, i);
+		}
+	fprintf(output_file,"\n\t};\n");
+
+	return entries * output_entry_size;
+	}
+
+/*
+Create and write a trie representing the data in 'aTheIndex'
+The trie is of two levels, the first level indexed by the high 'aBlockBits' bits of the
+character code, the second by the low bits. There is one wrinkle; if the index value, which is 16 bits,
+has its top bit set, it is not an index but the actual data value for all entries in that block.
+
+Thus the way to get the value for a code is:
+
+int index = trie_index[code >> aBlockBits];
+if (index & 0x8000)
+	value = index & ~0x8000;
+else
+	value = aTrieData[code & (1 << (16 - aBlockBits))];
+
+The data size in bytes is returned.
+The argument 'aWrite' determines whether the data is written or not.
+The arguments 'aTrie1Name' and 'aTrie2Name' are used as variable names in generated unitable.cpp.
+*/
+int write_trie(int aOutputEntrySize,int aBlockBits,bool aWrite, int *aTheIndex, int *aTrieData, char *aTrie1Name, char *aTrie2Name)
+	{
+	int n = 0; // number of entries used in trie_data
+
+	int block_size = 1 << aBlockBits;
+	int blocks = 1 << (16 - aBlockBits);
+
+	int* trie_index = new int[blocks];
+	int* block = new int[block_size];
+
+	for (int block_index = 0; block_index < blocks; block_index++)
+		{
+		// Write the data for the current block.
+		int block_start = block_index * block_size;
+		bool all_the_same = true;
+		for (int code = 0; code < block_size; code++)
+			{
+			block[code] = aTheIndex[block_start + code];
+			if (block[code] != block[0])
+				all_the_same = false;
+			}
+
+		// Try to find a match for it.
+		int insert_at;
+		if (all_the_same)
+			trie_index[block_index] = block[0] | 0x8000;
+		else
+			{
+			for (insert_at = 0; insert_at < n; insert_at++)
+				{
+				int entries = n - insert_at;
+				if (entries > block_size)
+					entries = block_size;
+				int bytes = entries * sizeof(int);
+				if (memcmp(block,aTrieData + insert_at,bytes) == 0)
+					break;
+				}
+
+			memcpy(aTrieData + insert_at,block,block_size * sizeof(int));
+			if (insert_at + block_size > n)
+				n = insert_at + block_size;
+			trie_index[block_index] = insert_at;
+			}
+		}
+
+	if (aWrite)
+		{
+		write_table(trie_index,aTrie1Name,blocks,4,2,false,16,true);
+		write_table(aTrieData,aTrie2Name,n,4,aOutputEntrySize,false,32,true);
+		}
+
+	delete [] trie_index;
+	delete [] block;
+
+	return blocks * 2 + n * aOutputEntrySize;
+	}
+
+// Write the best possible 2-level trie for all planes, trying block sizes of 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096 and 8192
+// @return Data size in bytes.
+int write_trie()
+	{
+	int byteCount = 0;
+	for (int plane=0; plane<PlaneCount; plane++)
+		{
+		int best_data_size = 1 << 30;
+		int best_bits = 0;
+
+		int outputEntrySize = 2;
+		char trie1Name[255];
+		char trie2Name[255];
+		sprintf(trie1Name, "ThePlane%02dTrieIndex1", plane);
+		sprintf(trie2Name, "ThePlane%02dTrieIndex2", plane);
+		int *theIndex = TheIndex + plane * 0x10000;
+		int *trieData = trie_data + plane * 0x10000;
+
+		for (int cur_bits = 3; cur_bits < 14; cur_bits++)
+			{
+			int cur_data_size = write_trie(outputEntrySize, cur_bits, false, theIndex, trieData, trie1Name, trie2Name);
+			if (cur_data_size < best_data_size)
+				{
+				best_bits = cur_bits;
+				best_data_size = cur_data_size;
+				}
+			}
+
+		byteCount += write_trie(outputEntrySize, best_bits, true, theIndex, trieData, trie1Name, trie2Name);
+		ThePlanesInReadType[plane].iCodesPerBlock = (TUint8) best_bits;
+		ThePlanesInReadType[plane].iMaskForCodePoint = (TUint16) ((1 << (best_bits)) - 1);
+		ThePlanesInReadType[plane].iMaskForBlock = (TUint16) (~(ThePlanesInReadType[plane].iMaskForCodePoint));
+		}
+	return byteCount;
+	}
+
+/*
+Compare entries in the decompose table for the purpose of sorting them. The entries are indices
+into the starting words of compositions stored in the composition buffer.
+*/
+int compare_decompositions(const void *p,const void *q)
+	{
+	// Get the indexes.
+	TInt16 index1 = *((const TInt16 *)p);
+	TInt16 index2 = *((const TInt16 *)q);
+
+	// Compare the two composition strings.
+	return TUnicode::Compare((TUint16 *)&CompositionBuffer[index1 + 2], CompositionBuffer[index1 + 1]*2,
+							 (TUint16 *)&CompositionBuffer[index2 + 2], CompositionBuffer[index2 + 1]*2);
+	}
+ 
+// Write the output file.
+void write_output()
+	{
+	int data_bytes = 0;
+
+	// Write the comment at the top of the file
+	fprintf(output_file, "// Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).\n");
+	fprintf(output_file, "// All rights reserved.\n");
+	fprintf(output_file, "// This component and the accompanying materials are made available\n");
+	fprintf(output_file, "// under the terms of the License \"Eclipse Public License v1.0\"\n");
+	fprintf(output_file, "// which accompanies this distribution, and is available\n");
+	fprintf(output_file, "// at the URL \"http://www.eclipse.org/legal/epl-v10.html\".\n");
+	fprintf(output_file, "//\n");
+	fprintf(output_file, "// Initial Contributors:\n");
+	fprintf(output_file, "// Nokia Corporation - initial contribution.\n");
+	fprintf(output_file, "//\n");
+	fprintf(output_file, "// Contributors:\n");
+	fprintf(output_file, "//\n");
+	fprintf(output_file, "// Description:\n");
+
+	fprintf(output_file,
+			"// Unicode character information tables.\n"
+			"// Written by the READTYPE program.\n"
+			"// Please read the 'Unicode Character Data and Line Break data Update History.doc' file for detailed history of updates to this file.\n"
+			"// This file was generated by the READTYPE tool using UCD 5.0.\n"
+			"// The contents of this file were generated automatically. Please do not edit this manually.\n"
+			"//\n"
+			"//\n"
+			"\n");
+
+	// Write the directive to include the header file.
+	fprintf(output_file,"#include <unicode.h>\n\n");
+
+	// Export two variables for unicode.cpp.
+	fprintf(output_file, "\n");
+	fprintf(output_file, "// Declarations for tables held in unitable.cpp and used by unicode.cpp.\n");
+	fprintf(output_file, "extern const TStandardUnicodeDataSet TheStandardUnicodeDataSet[];\n");
+	fprintf(output_file, "extern const TUnicodePlane ThePlanes[17];\n\n\n");
+
+	// Write the trie data.
+	data_bytes += write_trie();
+
+	// Write the character information table.
+	fprintf(output_file,"static const TUnicodeData TheUnicodeData[] =\n\t{ // %d entries\n", Datas);
+	int i;
+	for (i = 0; i < Datas; i++)
+		{
+		fputc('\t',output_file);
+		TheData[i].Write();
+		if (i < Datas - 1)
+			fputc(',',output_file);
+		fprintf(output_file, "\t// 0x%X (%d)", i, i);
+		fputc('\n',output_file);
+		}
+	fprintf(output_file,"\t};\n\n");
+	data_bytes += Datas * sizeof(Data);
+
+	// write plane properties
+	fprintf(output_file, "const TUnicodePlane ThePlanes[%d] =\n\t{\n", PlaneCount);
+	int plane;
+	for (plane=0; plane<=16; plane++)
+		{
+		fprintf(output_file, "\t{%d, 0x%04X, 0x%04X }",
+			ThePlanesInReadType[plane].iCodesPerBlock, ThePlanesInReadType[plane].iMaskForBlock, ThePlanesInReadType[plane].iMaskForCodePoint);
+		if (plane < 16)
+			fprintf(output_file, ",\n");
+		}
+	fprintf(output_file, "\n\t};\n\n");
+	data_bytes += 5*PlaneCount;
+
+	// Write a data structure referring to the trie data.
+	fprintf(output_file,"const TStandardUnicodeDataSet TheStandardUnicodeDataSet[] =\n\t{ // %d entries\n", PlaneCount);
+	for (plane=0; plane<=16; plane++)
+		{
+		fprintf(output_file,"\t{ ThePlane%02dTrieIndex1, ThePlane%02dTrieIndex2, TheUnicodeData }", plane, plane);
+		if (plane < 16)
+			fprintf(output_file, ",\n");
+		}
+	fprintf(output_file, "\n\t};\n\n");
+	data_bytes += 12*PlaneCount;
+
+	// Convert the fold table to lower case.
+	for (i = 0; i < 256; i++)
+		FoldTable[i] = LowerCaseTable[FoldTable[i]];
+
+	// Make 00A0 (non-break space) fold to space.
+	FoldTable[0xA0] = 0x20;
+
+	// Make unassigned characters in the CJK width fold table fold to themselves.
+	for (i = 0; i < 256; i++)
+		if (CjkWidthFoldTable[i] == 0)
+			CjkWidthFoldTable[i] = (TUint16)(0xFF00 + i);
+
+	// Write the special tables
+	data_bytes += write_table(FoldTable,"TUnicode::FoldTable",256,2,2,false,16,true);
+	data_bytes += write_table(CjkWidthFoldTable,"TUnicode::CjkWidthFoldTable",256,2,2,false,16,true);
+
+	// Write the number of data bytes at the end of the file.
+	fprintf(output_file,"\n// The tables and structures contain %d bytes of data.\n",data_bytes);
+	}
+
+int main(int argc,char **argv)
+	{
+	if (argc < 2)
+		{
+		fputs("usage: readtype <input-file> <output-file>",stderr);
+		exit(1);
+		}
+
+	input_filename = argv[1];
+	output_filename = argv[2];
+
+	// Locale support in previous version is deprecated.
+
+	input_file = fopen(input_filename,"r");
+	if (!input_file)
+		{
+		fprintf(stderr,"cannot open input file %s\n",input_filename);
+		exit(1);
+		}
+	output_file = fopen(output_filename,"w");
+	if (!output_file)
+		{
+		fprintf(stderr,"cannot open output file %s\n",output_filename);
+		exit(1);
+		}
+
+	Data range_info;		// attributes of the current range
+	Data unassigned_info;	// attributes used for unassigned characters; the default constructor
+							// sets the category to Cn, bidirectional category to L, everything else to 0.
+	TBool first = true;
+	
+	char line[1024];
+	const int Fields = 15;
+	char *field[Fields];
+	TInt prev_code = 0;
+	while (fgets(line,sizeof(line),input_file))
+		{
+		// Strip trailing newline if any.
+		int length = strlen(line);
+		if (length && line[length - 1] == '\n')
+			line[length - 1] = 0;
+
+		// Parse into fields.
+		int n = 1;
+		field[0] = line;
+		for (char *p = line; *p; p++)
+			if (*p == ';' && n < Fields)
+				{
+				*p = 0;
+				field[n++] = p + 1;
+				}
+
+		// Ignore the line if there is only one field.
+		if (n == 1)
+			continue;
+
+		// Extract fields of interest.
+
+		// Field 0: Unicode value in hexadecimal.
+		int code = hex(field[0]);
+
+		// Field 2: Category.
+		Data cur_info;
+		cur_info.iCategory = (TUint8)Category(field[2], true);
+
+		// Field 3: Combining class.
+		cur_info.iCombiningClass = (TUint8)atoi(field[3]);
+		
+		// Field 4: Bidirectional category.
+		cur_info.iBdCategory = (TUint8)BdCategory(field[4], true);
+
+		// Prepare to determine the folded version (converted to lower case, stripped of accents).
+		int folded_code = code;
+
+		// Field 5: Character decomposition.
+		if (field[5][0])
+			{
+			int components = 0;
+			const int MaxComponents = 18;		// FDFA; ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM has 18 components!
+			TUint32 component[MaxComponents];
+
+			// Extract the tag if any.
+			char *p = field[5];
+			const char *tag = NULL;
+			if (field[5][0] == '<')
+				{
+				tag = ++p;
+				while (*p && *p != '>')
+					p++;
+				if (!*p)
+					{
+					fprintf(stderr,"syntax error: missing > on the line for code %x\n",code);
+					exit(1);
+					}
+				*p++ = 0;
+				}
+
+			// Read the components.
+			while (*p)
+				{
+				while (*p == ' ')
+					p++;
+				if (components >= MaxComponents)
+					{
+					fprintf(stderr,"decomposition of %x has too many components: increase MaxComponents\n",code);
+					exit(1);
+					}
+				component[components++] = hex(p);
+				while (*p && *p != ' ')
+					p++;
+				}
+
+			// Store the composition if it has a null tag and is therefore canonical.
+			if (tag == NULL)
+				{
+				// Put its index into the tables.
+				if (Compositions >= MaxCompositions)
+					{
+					fprintf(stderr,"too many compositions (at code %x): increase MaxCompositions\n",code);
+					exit(1);
+					}
+				if (CompositionWords >= 65535)
+					{
+					fprintf(stderr, "too many compositions (at code %x): need 32 bit!?\n", code);
+					exit(1);
+					}
+				Compose[Compositions] = Decompose[Compositions] = (TInt16)CompositionWords;
+				Compositions++;
+
+				// Put it into the composition buffer.
+				if (CompositionWords + 2 + components >= MaxCompositionWords)
+					{
+					fprintf(stderr,"too many compositions (at code %x): increase MaxCompositionWords\n",code);
+					exit(1);
+					}
+				CompositionBuffer[CompositionWords++] = code;
+				CompositionBuffer[CompositionWords++] = components;
+				for (int i = 0; i < components; i++)
+					CompositionBuffer[CompositionWords++] = component[i];
+				}
+			
+			// Store the code used in the ordinary and CJK fold tables.
+			if (components > 0)
+				{
+				if (code < 256)
+					{
+					if (tag == NULL)
+						folded_code = component[0];
+					}
+				else if (code >= 0xFF00 && code <= 0xFFEE)	// tag will always be <wide> or <narrow>
+					folded_code = component[0];
+				}
+			}
+
+		// Field 8. Numeric value.
+		if (field[8][0])
+			{
+			if (field[8][1] == '/' || field[8][2] == '/')		// fractions
+				cur_info.iFlags |= TUnicodeData::EFraction;
+			else
+				{
+				int value = atoi(field[8]);
+				if (value >= 0 && value <= 255)
+					{
+					cur_info.iDigitOffset = (TUint8)((value - (code & 255)) & 255);
+					cur_info.iFlags |= TUnicodeData::ESmallNumeric;
+					}
+				else if (value == 500)
+					cur_info.iFlags |= TUnicodeData::EFiveHundred;
+				else if (value == 1000)
+					cur_info.iFlags |= TUnicodeData::EOneThousand;
+				else if (value == 5000)
+					cur_info.iFlags |= TUnicodeData::EFiveThousand;
+				else if (value == 10000)
+					cur_info.iFlags |= TUnicodeData::ETenThousand;
+				else if (value == 100000)
+					cur_info.iFlags |= TUnicodeData::EHundredThousand;
+				else
+					fprintf(stderr,"Warning: U+%X has a large numeric property with unrepresentable value %d. Ignored.\n",code,value);
+				}
+			}
+
+		// Field 9: Mirrored property.
+		if (field[9][0] == 'Y')
+			cur_info.iFlags |= TUnicodeData::EMirrored;
+
+		// Fields 12, 13, 14: Case variants.
+		int uc = code, lc = code, tc = code;
+		if (field[12][0])
+			{
+			uc = hex(field[12]);
+			int uc_offset = uc - code;
+			if (abs(uc_offset) > 32767)
+				{
+				fprintf(stderr, "Warning: offset to upper case is too large: code %X, upper case %X, offset %X. Ignored!\n", code, uc, uc_offset);
+				}
+			else
+				{
+				cur_info.iFlags |= TUnicodeData::EHasUpperCase;
+				cur_info.iCaseOffset = (TInt16)(-uc_offset);
+				if (code<0x10000 && uc>0x10000 || code>0x10000 && uc<0x10000)
+					fprintf(stderr, "Info: %X and its upper case %X locate at different planes.\n");
+				}
+			}
+		if (field[13][0])
+			{
+			lc = hex(field[13]);
+			int lc_offset = lc - code;
+			if (abs(lc_offset) > 32767)
+				{
+				fprintf(stderr, "Warning: offset to lower case is too large: code %X, lower case %X, offset %X. Ignored!\n", code, lc, lc_offset);
+				}
+			else
+				{
+				cur_info.iFlags |= TUnicodeData::EHasLowerCase;
+				cur_info.iCaseOffset = (TInt16)lc_offset;
+				if (code<0x10000 && lc>0x10000 || code>0x10000 && lc<0x10000)
+					fprintf(stderr, "Info: %X and its lower case %X locate at different planes.\n");
+				}
+			}
+		if (field[14][0])
+			tc = hex(field[14]);
+		if (tc != lc && tc != uc)
+			cur_info.iFlags |= TUnicodeData::EHasTitleCase;
+
+		// If this code is < 256 fill in the entries in the special tables.
+		if (code < 256)
+			{
+			LowerCaseTable[code] = (TUint16)lc;
+			FoldTable[code] = (TUint16)folded_code;
+			}
+
+		// If the code is >= 0xFF00 fill in the entry in the CJK width folding table.
+		else if (code >= 0xFF00 && code <= 0xFFFF)
+			CjkWidthFoldTable[code & 0xFF] = (TUint16)folded_code;
+
+		/*
+		If there was a gap between this code and the previous one, write an 'unassigned' range,
+		unless this character is actually the end of a range not fully listed (like the CJK ideographs
+		from 4E00 to 9FA5 inclusive), in which case the character name will end in ' Last>'.
+		*/
+		if (code - prev_code > 1)
+			{
+			TBool last_in_range = false;
+			int name_length = strlen(field[1]);
+			if (name_length >= 6 && !strcmp(field[1] + name_length - 6," Last>"))
+				last_in_range = TRUE;
+			if (!last_in_range)
+				{
+				add_range(unassigned_info,prev_code + 1);
+				range_info = unassigned_info;
+				}
+			}
+
+		// Write the range.
+		if (first || cur_info != range_info)
+			{
+			add_range(cur_info,code);
+			range_info = cur_info;
+			}
+
+		first = false;
+		prev_code = code;
+		}
+
+	/*
+	If there was a gap at the end of the encoding (there is at present; FFFE and FFFF are not Unicode characters)
+	write an 'unassigned' range.
+	*/
+	if (prev_code < 0xFFFF)
+		add_range(unassigned_info,prev_code + 1);
+
+	// Write an array of indices from Unicode character values to character data sets.
+	for (int i = 0; i < Ranges; i++)
+		{
+		TUint32 end = i < Ranges - 1 ? TheRange[i + 1].iRangeStart : 0x110000;
+		for (TUint32 j = TheRange[i].iRangeStart; j < end; j++)
+			TheIndex[j] = TheRange[i].iIndex;
+		}
+
+	// Write the output file.
+	write_output();
+	printf("\nDone.\n");
+
+	return 0;
+	}
+
+Data::Data()
+	{
+	iCategory = TChar::ECnCategory;
+	iBdCategory = TChar::ELeftToRight;
+	iCombiningClass = 0;
+	iDigitOffset = 0;
+	iCaseOffset = 0;
+	iFlags = 0;
+	}
+
+TBool Data::operator==(const Data& c) const
+	{
+	return iCategory == c.iCategory &&
+		   iBdCategory == c.iBdCategory &&
+		   iCombiningClass == c.iCombiningClass &&
+		   iDigitOffset == c.iDigitOffset &&
+		   iCaseOffset == c.iCaseOffset &&
+		   iFlags == c.iFlags;
+	}
+
+/*
+This function is copied from unicode.cpp: having it here saves me having to link in unicode.cpp and
+unitable.cpp, which is probably the file we're trying to write!
+*/
+TInt TUnicode::Compare(const TUint16 *aString1,TInt aLength1,const TUint16 *aString2,TInt aLength2)
+	{
+	for (TInt i = 0; i < aLength1 || i < aLength2; i++, aString1++, aString2++)
+		{
+		TInt x = i < aLength1 ? *aString1 : -1;
+		TInt y = i < aLength2 ? *aString2 : -1;
+		if (x != y)
+			return x - y;
+		}
+	return 0;
+	}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/readtype/unicodedata-3.0.0.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,10618 @@
+0000;<control>;Cc;0;BN;;;;;N;NULL;;;;
+0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;;;
+0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;;
+0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;;
+0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;;
+0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;;
+0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;;
+0007;<control>;Cc;0;BN;;;;;N;BELL;;;;
+0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;;
+0009;<control>;Cc;0;S;;;;;N;HORIZONTAL TABULATION;;;;
+000A;<control>;Cc;0;B;;;;;N;LINE FEED;;;;
+000B;<control>;Cc;0;S;;;;;N;VERTICAL TABULATION;;;;
+000C;<control>;Cc;0;WS;;;;;N;FORM FEED;;;;
+000D;<control>;Cc;0;B;;;;;N;CARRIAGE RETURN;;;;
+000E;<control>;Cc;0;BN;;;;;N;SHIFT OUT;;;;
+000F;<control>;Cc;0;BN;;;;;N;SHIFT IN;;;;
+0010;<control>;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;;
+0011;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;;
+0012;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;;
+0013;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;;
+0014;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;;
+0015;<control>;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;;
+0016;<control>;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;;
+0017;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;;
+0018;<control>;Cc;0;BN;;;;;N;CANCEL;;;;
+0019;<control>;Cc;0;BN;;;;;N;END OF MEDIUM;;;;
+001A;<control>;Cc;0;BN;;;;;N;SUBSTITUTE;;;;
+001B;<control>;Cc;0;BN;;;;;N;ESCAPE;;;;
+001C;<control>;Cc;0;B;;;;;N;FILE SEPARATOR;;;;
+001D;<control>;Cc;0;B;;;;;N;GROUP SEPARATOR;;;;
+001E;<control>;Cc;0;B;;;;;N;RECORD SEPARATOR;;;;
+001F;<control>;Cc;0;S;;;;;N;UNIT SEPARATOR;;;;
+0020;SPACE;Zs;0;WS;;;;;N;;;;;
+0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;
+0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;;
+0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;;
+0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+0026;AMPERSAND;Po;0;ON;;;;;N;;;;;
+0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;
+0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
+0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
+002A;ASTERISK;Po;0;ON;;;;;N;;;;;
+002B;PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+002C;COMMA;Po;0;CS;;;;;N;;;;;
+002D;HYPHEN-MINUS;Pd;0;ET;;;;;N;;;;;
+002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
+002F;SOLIDUS;Po;0;ES;;;;;N;SLASH;;;;
+0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
+0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
+0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
+0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;;
+0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;;
+0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;;
+0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;;
+0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;;
+0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;;
+0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;;
+003A;COLON;Po;0;CS;;;;;N;;;;;
+003B;SEMICOLON;Po;0;ON;;;;;N;;;;;
+003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
+003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;
+0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;
+0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;
+0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;
+0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;
+0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064;
+0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065;
+0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066;
+0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067;
+0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068;
+0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069;
+004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A;
+004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B;
+004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C;
+004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D;
+004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E;
+004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F;
+0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070;
+0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071;
+0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072;
+0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073;
+0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074;
+0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075;
+0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076;
+0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077;
+0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078;
+0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079;
+005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A;
+005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;
+005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;;
+005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;;
+005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;;
+005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;;
+0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;;
+0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041
+0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042
+0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043
+0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044
+0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045
+0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046
+0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047
+0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048
+0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049
+006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A
+006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B
+006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C
+006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D
+006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E
+006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F
+0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050
+0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051
+0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052
+0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053
+0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054
+0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055
+0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056
+0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057
+0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058
+0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059
+007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A
+007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;;
+007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;;
+007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;;
+007E;TILDE;Sm;0;ON;;;;;N;;;;;
+007F;<control>;Cc;0;BN;;;;;N;DELETE;;;;
+0080;<control>;Cc;0;BN;;;;;N;;;;;
+0081;<control>;Cc;0;BN;;;;;N;;;;;
+0082;<control>;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;;
+0083;<control>;Cc;0;BN;;;;;N;NO BREAK HERE;;;;
+0084;<control>;Cc;0;BN;;;;;N;INDEX;;;;
+0085;<control>;Cc;0;B;;;;;N;NEXT LINE;;;;
+0086;<control>;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;;
+0087;<control>;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;;
+0088;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;;
+0089;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;;
+008A;<control>;Cc;0;BN;;;;;N;LINE TABULATION SET;;;;
+008B;<control>;Cc;0;BN;;;;;N;PARTIAL LINE DOWN;;;;
+008C;<control>;Cc;0;BN;;;;;N;PARTIAL LINE UP;;;;
+008D;<control>;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;;
+008E;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;;
+008F;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;;
+0090;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;;
+0091;<control>;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;;
+0092;<control>;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;;
+0093;<control>;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;;
+0094;<control>;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;;
+0095;<control>;Cc;0;BN;;;;;N;MESSAGE WAITING;;;;
+0096;<control>;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;;
+0097;<control>;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;;
+0098;<control>;Cc;0;BN;;;;;N;START OF STRING;;;;
+0099;<control>;Cc;0;BN;;;;;N;;;;;
+009A;<control>;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;;
+009B;<control>;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;;
+009C;<control>;Cc;0;BN;;;;;N;STRING TERMINATOR;;;;
+009D;<control>;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;;
+009E;<control>;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;;
+009F;<control>;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;;
+00A0;NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;
+00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;;
+00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;;
+00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;
+00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;
+00A7;SECTION SIGN;So;0;ON;;;;;N;;;;;
+00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;;
+00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;
+00AA;FEMININE ORDINAL INDICATOR;Ll;0;L;<super> 0061;;;;N;;;;;
+00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;*;;;
+00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
+00AD;SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
+00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
+00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
+00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
+00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;
+00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;2;2;2;N;SUPERSCRIPT DIGIT TWO;;;;
+00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;3;3;3;N;SUPERSCRIPT DIGIT THREE;;;;
+00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;;
+00B5;MICRO SIGN;Ll;0;L;<compat> 03BC;;;;N;;;039C;;039C
+00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;;
+00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;;
+00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;1;1;1;N;SUPERSCRIPT DIGIT ONE;;;;
+00BA;MASCULINE ORDINAL INDICATOR;Ll;0;L;<super> 006F;;;;N;;;;;
+00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;*;;;
+00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;
+00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;
+00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;;
+00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;;
+00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0;
+00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1;
+00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2;
+00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3;
+00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4;
+00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5;
+00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;ash *;;00E6;
+00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7;
+00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8;
+00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9;
+00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA;
+00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB;
+00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC;
+00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED;
+00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE;
+00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF;
+00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0;
+00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1;
+00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2;
+00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3;
+00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4;
+00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5;
+00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6;
+00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;;
+00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8;
+00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9;
+00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA;
+00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB;
+00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC;
+00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD;
+00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE;
+00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;;
+00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0
+00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1
+00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2
+00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3
+00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4
+00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5
+00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;ash *;00C6;;00C6
+00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7
+00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8
+00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9
+00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA
+00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB
+00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC
+00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD
+00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE
+00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF
+00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0
+00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1
+00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2
+00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3
+00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4
+00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5
+00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6
+00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8
+00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9
+00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA
+00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB
+00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC
+00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD
+00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE
+00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178
+0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101;
+0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100
+0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103;
+0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102
+0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105;
+0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104
+0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107;
+0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106
+0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109;
+0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108
+010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B;
+010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A
+010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D;
+010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C
+010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F;
+010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E
+0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111;
+0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110
+0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113;
+0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112
+0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115;
+0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114
+0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117;
+0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116
+0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119;
+0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118
+011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B;
+011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A
+011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D;
+011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C
+011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F;
+011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E
+0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121;
+0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120
+0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123;
+0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122
+0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125;
+0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124
+0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127;
+0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126
+0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129;
+0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128
+012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B;
+012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A
+012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D;
+012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C
+012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F;
+012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E
+0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069;
+0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049
+0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133;
+0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132
+0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135;
+0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134
+0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137;
+0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136
+0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;;
+0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A;
+013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139
+013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C;
+013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B
+013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E;
+013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D
+013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140;
+0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F
+0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142;
+0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141
+0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144;
+0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143
+0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146;
+0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145
+0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148;
+0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147
+0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;;
+014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B;
+014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A
+014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D;
+014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C
+014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F;
+014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E
+0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151;
+0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150
+0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153;
+0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152
+0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155;
+0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154
+0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157;
+0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156
+0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159;
+0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158
+015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B;
+015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A
+015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D;
+015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C
+015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;*;;015F;
+015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;*;015E;;015E
+0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161;
+0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160
+0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;*;;0163;
+0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;*;0162;;0162
+0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165;
+0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164
+0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167;
+0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166
+0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169;
+0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168
+016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B;
+016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A
+016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D;
+016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C
+016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F;
+016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E
+0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171;
+0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170
+0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173;
+0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172
+0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175;
+0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174
+0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177;
+0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176
+0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF;
+0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A;
+017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179
+017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C;
+017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B
+017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;
+017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D
+017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053
+0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;;
+0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;
+0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;
+0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182
+0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185;
+0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184
+0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254;
+0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188;
+0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187
+0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;*;;0256;
+018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257;
+018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C;
+018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B
+018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;;
+018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD;
+018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259;
+0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B;
+0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192;
+0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191
+0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260;
+0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263;
+0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;hwair;01F6;;01F6
+0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269;
+0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
+0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
+0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
+019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;;
+019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
+019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
+019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
+019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;;;
+019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;*;;0275;
+01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1;
+01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0
+01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;gha;;01A3;
+01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;gha;01A2;;01A2
+01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5;
+01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4
+01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;;;0280;
+01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8;
+01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7
+01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283;
+01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;;
+01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;;
+01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD;
+01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC
+01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288;
+01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0;
+01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF
+01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A;
+01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B;
+01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4;
+01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3
+01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6;
+01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5
+01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292;
+01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9;
+01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8
+01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;;
+01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;;
+01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD;
+01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC
+01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;;
+01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7
+01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;;
+01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;;
+01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;;
+01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;;
+01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5
+01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;
+01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5
+01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8
+01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;
+01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8
+01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB
+01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;
+01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB
+01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE;
+01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD
+01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0;
+01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF
+01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2;
+01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1
+01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4;
+01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3
+01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6;
+01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5
+01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8;
+01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7
+01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA;
+01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9
+01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC;
+01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB
+01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E
+01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF;
+01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE
+01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1;
+01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0
+01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;ash *;;01E3;
+01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;ash *;01E2;;01E2
+01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5;
+01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4
+01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7;
+01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6
+01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9;
+01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8
+01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB;
+01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA
+01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED;
+01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC
+01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF;
+01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE
+01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;;
+01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2
+01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;
+01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2
+01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5;
+01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4
+01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195;
+01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF;
+01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9;
+01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8
+01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB;
+01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA
+01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;ash *;;01FD;
+01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;ash *;01FC;;01FC
+01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF;
+01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE
+0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201;
+0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200
+0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203;
+0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202
+0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205;
+0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204
+0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207;
+0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206
+0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209;
+0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208
+020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B;
+020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A
+020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D;
+020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C
+020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F;
+020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E
+0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211;
+0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210
+0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213;
+0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212
+0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215;
+0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214
+0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217;
+0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216
+0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;*;;0219;
+0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;*;0218;;0218
+021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;*;;021B;
+021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;*;021A;;021A
+021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D;
+021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C
+021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F;
+021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E
+0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223;
+0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222
+0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225;
+0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224
+0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227;
+0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226
+0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229;
+0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228
+022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B;
+022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A
+022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D;
+022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C
+022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F;
+022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E
+0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231;
+0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230
+0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233;
+0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232
+0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;;
+0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;;
+0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;;
+0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181
+0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186
+0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;;
+0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189
+0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A
+0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;;
+0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F
+025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;;
+025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190
+025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;;
+025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;;
+025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;;
+025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;;
+0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193
+0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;;
+0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;;
+0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194
+0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;;
+0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;;
+0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;;
+0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;
+0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
+0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
+026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;;
+026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;;
+026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
+026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;
+026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C
+0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;;
+0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D
+0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;
+0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;
+0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F
+0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;;
+0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;;
+0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;;
+0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;;
+027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;
+027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;;
+027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;
+027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;
+0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;01A6;;01A6
+0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;;
+0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;;
+0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9
+0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;;
+0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;;
+0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;
+0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;;
+0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE
+0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;;
+028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1
+028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2
+028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;;
+028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;
+028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;
+028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;
+0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;;
+0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
+0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
+0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
+0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
+0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
+0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;;
+0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;;
+029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;;
+029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;;
+029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;;
+029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;;
+029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;;
+029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;;
+02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;;
+02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;;
+02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;;
+02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;;
+02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;;
+02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;;
+02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;;
+02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;;
+02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;;
+02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
+02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
+02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;
+02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;
+02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;;
+02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;;
+02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;;
+02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;;
+02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;;
+02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;;
+02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;;
+02B9;MODIFIER LETTER PRIME;Sk;0;ON;;;;;N;;;;;
+02BA;MODIFIER LETTER DOUBLE PRIME;Sk;0;ON;;;;;N;;;;;
+02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;;
+02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;;
+02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;;
+02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;;
+02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;;
+02C7;CARON;Sk;0;ON;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;;
+02C8;MODIFIER LETTER VERTICAL LINE;Sk;0;ON;;;;;N;;;;;
+02C9;MODIFIER LETTER MACRON;Sk;0;ON;;;;;N;;Mandarin Chinese first tone;;;
+02CA;MODIFIER LETTER ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;;
+02CB;MODIFIER LETTER GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;;
+02CC;MODIFIER LETTER LOW VERTICAL LINE;Sk;0;ON;;;;;N;;;;;
+02CD;MODIFIER LETTER LOW MACRON;Sk;0;ON;;;;;N;;;;;
+02CE;MODIFIER LETTER LOW GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;;
+02CF;MODIFIER LETTER LOW ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;;
+02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;;
+02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;;
+02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;;
+02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;;
+02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D8;BREVE;Sk;0;ON;<compat> 0020 0306;;;;N;SPACING BREVE;;;;
+02D9;DOT ABOVE;Sk;0;ON;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;;
+02DA;RING ABOVE;Sk;0;ON;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;;
+02DB;OGONEK;Sk;0;ON;<compat> 0020 0328;;;;N;SPACING OGONEK;;;;
+02DC;SMALL TILDE;Sk;0;ON;<compat> 0020 0303;;;;N;SPACING TILDE;;;;
+02DD;DOUBLE ACUTE ACCENT;Sk;0;ON;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;;
+02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;;
+02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;;
+02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;;
+02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;;
+02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;;
+02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;;
+02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;;
+02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
+02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
+02EC;MODIFIER LETTER VOICING;Sk;0;ON;;;;;N;;;;;
+02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;;
+02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;;
+0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;Varia;;;
+0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;Oxia;;;
+0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;;
+0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;;
+0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;;
+0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;;
+0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;Vrachy;;;
+0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;;
+0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;Dialytika;;;
+0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;;
+030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;;
+030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;;
+030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;;
+030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;Tonos;;;
+030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;;
+030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;;
+0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;;
+0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;;
+0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;;
+0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;Psili;;;
+0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;;
+0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;;
+0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;;
+0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;;
+0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;;
+0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;;
+031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;;
+031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;;
+031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;;
+031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;;
+031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;;
+031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;;
+0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;;
+0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;;
+0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;;
+0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;;
+0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;;
+0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;;
+0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;;
+0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;;
+0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;;
+0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;;
+032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;;
+032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;;
+032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;;
+032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;;
+032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;;
+032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;;
+0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;;
+0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;;
+0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;;
+0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;;
+0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;;
+0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;;
+0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;;
+0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;;
+0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;;
+0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;;
+033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;;
+033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;;
+033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;;
+033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;;
+033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;;
+033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;;
+0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;;
+0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;;
+0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;;
+0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;;
+0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;;
+0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399
+0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
+0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;;
+0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;;
+034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;;
+034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;;
+034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;;
+034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;;
+0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;;
+0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;;
+0374;GREEK NUMERAL SIGN;Sk;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;
+0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;Aristeri keraia;;;
+037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;
+037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;Erotimatiko;;;
+0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;;
+0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;;
+0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC;
+0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;;
+0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD;
+0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE;
+038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF;
+038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC;
+038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD;
+038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE;
+0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;;
+0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1;
+0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2;
+0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3;
+0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4;
+0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5;
+0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6;
+0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7;
+0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;
+0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9;
+039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA;
+039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB;
+039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC;
+039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD;
+039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE;
+039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF;
+03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0;
+03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;
+03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
+03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4;
+03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5;
+03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6;
+03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7;
+03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8;
+03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9;
+03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;
+03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;
+03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386
+03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388
+03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389
+03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A
+03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;;
+03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391
+03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392
+03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393
+03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394
+03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395
+03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396
+03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397
+03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398
+03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399
+03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A
+03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B
+03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C
+03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D
+03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E
+03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F
+03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0
+03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1
+03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4
+03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5
+03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6
+03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7
+03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8
+03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9
+03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA
+03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB
+03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C
+03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E
+03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F
+03D0;GREEK BETA SYMBOL;Ll;0;L;<compat> 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392
+03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398
+03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;<compat> 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;
+03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;;
+03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;
+03D5;GREEK PHI SYMBOL;Ll;0;L;<compat> 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6
+03D6;GREEK PI SYMBOL;Ll;0;L;<compat> 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0
+03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;;;
+03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB;
+03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA
+03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD;
+03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC
+03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF;
+03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE
+03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1;
+03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0
+03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3;
+03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2
+03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5;
+03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4
+03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7;
+03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6
+03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9;
+03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8
+03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB;
+03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA
+03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED;
+03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC
+03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF;
+03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE
+03F0;GREEK KAPPA SYMBOL;Ll;0;L;<compat> 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A
+03F1;GREEK RHO SYMBOL;Ll;0;L;<compat> 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1
+03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;<compat> 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03A3;;03A3
+03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;;;
+0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450;
+0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
+0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452;
+0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453;
+0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454;
+0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455;
+0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456;
+0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457;
+0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458;
+0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459;
+040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A;
+040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B;
+040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C;
+040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D;
+040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E;
+040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F;
+0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430;
+0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431;
+0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432;
+0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433;
+0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434;
+0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435;
+0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436;
+0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437;
+0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438;
+0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439;
+041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A;
+041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B;
+041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C;
+041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D;
+041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E;
+041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F;
+0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440;
+0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441;
+0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442;
+0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443;
+0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444;
+0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445;
+0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446;
+0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447;
+0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448;
+0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449;
+042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A;
+042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B;
+042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C;
+042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D;
+042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E;
+042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F;
+0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410
+0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411
+0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412
+0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413
+0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414
+0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415
+0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416
+0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417
+0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418
+0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419
+043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A
+043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B
+043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C
+043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D
+043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E
+043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F
+0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420
+0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421
+0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422
+0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423
+0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424
+0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425
+0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426
+0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427
+0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428
+0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429
+044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
+044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B
+044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C
+044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D
+044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E
+044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F
+0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400
+0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401
+0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402
+0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403
+0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404
+0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
+0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406
+0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407
+0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408
+0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409
+045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A
+045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B
+045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C
+045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D
+045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E
+045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F
+0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461;
+0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460
+0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463;
+0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462
+0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465;
+0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464
+0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467;
+0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466
+0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469;
+0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468
+046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B;
+046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A
+046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D;
+046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C
+046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F;
+046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E
+0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471;
+0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470
+0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473;
+0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472
+0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475;
+0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474
+0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477;
+0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476
+0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479;
+0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478
+047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B;
+047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A
+047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D;
+047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C
+047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F;
+047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E
+0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481;
+0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480
+0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;;
+0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;;
+0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;
+0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;
+0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;
+0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;;
+0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
+048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D;
+048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C
+048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F;
+048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E
+0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491;
+0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490
+0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493;
+0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492
+0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495;
+0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494
+0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497;
+0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496
+0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499;
+0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498
+049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B;
+049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A
+049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D;
+049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C
+049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F;
+049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E
+04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1;
+04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0
+04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3;
+04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2
+04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5;
+04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4
+04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7;
+04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6
+04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9;
+04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8
+04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB;
+04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA
+04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD;
+04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC
+04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF;
+04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE
+04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1;
+04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0
+04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3;
+04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2
+04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5;
+04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4
+04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7;
+04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6
+04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9;
+04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8
+04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB;
+04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA
+04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD;
+04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC
+04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;
+04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE
+04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;;
+04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;
+04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1
+04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;
+04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3
+04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8;
+04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7
+04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC;
+04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB
+04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;
+04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0
+04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;
+04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2
+04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5;
+04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4
+04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7;
+04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6
+04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9;
+04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8
+04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB;
+04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA
+04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD;
+04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC
+04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF;
+04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE
+04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1;
+04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0
+04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3;
+04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2
+04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5;
+04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4
+04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7;
+04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6
+04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9;
+04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8
+04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB;
+04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA
+04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED;
+04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC
+04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF;
+04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE
+04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1;
+04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0
+04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3;
+04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
+04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
+04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
+04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
+04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
+0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;
+0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;
+0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;
+0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564;
+0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565;
+0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566;
+0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567;
+0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568;
+0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569;
+053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A;
+053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B;
+053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C;
+053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D;
+053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E;
+053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F;
+0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570;
+0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571;
+0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572;
+0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573;
+0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574;
+0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575;
+0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576;
+0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577;
+0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578;
+0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579;
+054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A;
+054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B;
+054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C;
+054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D;
+054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E;
+054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F;
+0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580;
+0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581;
+0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582;
+0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583;
+0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584;
+0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585;
+0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586;
+0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;;
+055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;;
+055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;;
+055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;
+055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;
+055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;
+0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531
+0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532
+0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533
+0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534
+0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535
+0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536
+0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537
+0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538
+0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539
+056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A
+056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B
+056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C
+056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D
+056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E
+056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F
+0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540
+0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541
+0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542
+0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543
+0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544
+0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545
+0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546
+0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547
+0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548
+0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549
+057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A
+057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B
+057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C
+057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D
+057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E
+057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F
+0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550
+0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551
+0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552
+0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553
+0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554
+0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555
+0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556
+0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;
+0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
+058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;;
+0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;;
+0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;;
+0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;;
+0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;;
+0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;;
+0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;*;;;
+0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;;
+0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;*;;;
+0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;;
+059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;;
+059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;;
+059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;;
+059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;;
+059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;;
+059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;;
+05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;;
+05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;;
+05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;;
+05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;;
+05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;*;;;
+05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;;
+05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;;
+05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;*;;;
+05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;;
+05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;*;;;
+05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;;
+05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;;
+05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;;
+05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;;
+05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;;
+05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;;
+05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;;
+05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;;
+05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;;
+05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;;
+05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;;
+05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;;
+05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;;
+05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;;
+05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;;
+05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;;
+05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;or shuruq;;;
+05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;*;;;
+05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;;
+05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;;
+05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;*;;;
+05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;;
+05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;;
+05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;*;;;
+05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;;
+05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
+05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
+05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;;
+05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;;
+05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;;
+05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;;
+05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;;
+05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;;
+05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;;
+05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;;
+05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;;
+05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;
+05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;;
+05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
+05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;;
+05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;;
+05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;;
+05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;;
+05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;;
+05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;;
+05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;;
+05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;
+05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;
+05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;
+05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;
+05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;
+05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
+05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;
+05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;
+060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;;
+061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;
+061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;
+0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;;
+0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
+0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;;
+0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;;
+0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;;
+0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;;
+0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;;
+0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;;
+0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;;
+062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;;
+062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;;
+062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;;
+062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;;
+062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;;
+062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;;
+0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;;
+0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;;
+0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;;
+0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;;
+0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;;
+0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;;
+0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;;
+0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;;
+0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;;
+063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;;
+0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;;
+0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;;
+0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;;
+0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;;
+0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;;
+0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;;
+0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;;
+0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;;
+0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;;
+064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;;
+064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;;
+064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;;
+064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;;
+064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;;
+064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;;
+0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;;
+0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;;
+0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;;
+0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;;
+0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;;
+0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
+0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
+0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
+0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
+0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
+0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
+0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
+0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
+0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
+0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
+066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
+066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;;
+066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;;
+0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;;
+0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;;
+0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;;
+0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;;
+0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;;
+0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL;<compat> 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;;
+0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL;<compat> 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;;
+0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL;<compat> 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;;
+0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL;<compat> 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;;
+0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;;
+067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;;
+067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;;
+067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;;
+067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;;
+067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;;
+067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;;
+0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;;
+0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;;
+0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;;
+0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;;
+0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;;
+0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;;
+0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;;
+0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;;
+0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;;
+0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;;
+068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
+068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;;
+068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;;
+068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;;
+068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;;
+0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;;
+0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;;
+0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;;
+0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;;
+0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;;
+0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;;
+0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;;
+0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;;
+0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;;
+069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;;
+06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;;
+06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;;
+06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;;
+06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;;
+06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;;
+06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;;
+06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;;
+06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;;
+06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;;
+06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;;
+06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;;
+06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;*;;;
+06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;;
+06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;;
+06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;;
+06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;;
+06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;;
+06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;;
+06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;;
+06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;;
+06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;;
+06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;;
+06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;;
+06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;;
+06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;;
+06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;;
+06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;;
+06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;;
+06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;;
+06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;;
+06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;;
+06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;;
+06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;;
+06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;*;;;
+06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;;
+06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;;
+06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;;
+06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;;
+06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;;
+06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;;
+06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;;
+06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;;
+06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;;
+06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;;
+06DD;ARABIC END OF AYAH;Me;0;NSM;;;;;N;;;;;
+06DE;ARABIC START OF RUB EL HIZB;Me;0;NSM;;;;;N;;;;;
+06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;;
+06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;;
+06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;;
+06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;;
+06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;;
+06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;;
+06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;;
+06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;;
+06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;;
+06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;;
+06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;;
+06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;;
+06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;;
+06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;;
+06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;;
+06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;;
+06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;;
+06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;;
+06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;;
+06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;;
+06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;;
+06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;;
+06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;;
+06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;;
+06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;;
+06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;;
+06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;;
+0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;;
+0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
+0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
+0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;;
+0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;;
+0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;;
+0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
+0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
+0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
+0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
+070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;;
+070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;;
+070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;;
+070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;;
+070F;SYRIAC ABBREVIATION MARK;Cf;0;BN;;;;;N;;;;;
+0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;;
+0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;;
+0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;;
+0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;;
+0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;;
+0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;;
+0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;;
+0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;;
+0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;;
+071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;;
+071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;;
+071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;;
+071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;;
+071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;;
+0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;;
+0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;;
+0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;;
+0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;;
+0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;;
+0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;;
+0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;;
+0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;;
+0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;;
+0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;;
+072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;;
+072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;;
+072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;;
+0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;;
+0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;;
+0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;;
+0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;;
+0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;;
+0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;;
+0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;;
+073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;;
+073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;;
+073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;;
+073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;;
+0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;;
+0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;;
+0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;;
+0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;;
+0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;;
+074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;;
+0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;;
+0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;;
+0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;;
+0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;;
+0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;;
+0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;;
+0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;;
+0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;;
+078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;;
+078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;;
+078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;;
+078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;;
+078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;;
+078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;;
+0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;;
+0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;;
+0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;;
+0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;;
+0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;;
+0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;;
+0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;;
+0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;;
+0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;;
+079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;;
+079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;;
+079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;;
+079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;;
+079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;;
+079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;;
+07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;;
+07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;;
+07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;;
+07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;;
+07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;;
+07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;;
+07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;;
+07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;;
+07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;;
+07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;;
+07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;;
+07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;;
+07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;;
+07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;;
+07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;;
+07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;;
+07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;;
+0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;;
+0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
+0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;;
+0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;;
+0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;;
+090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;;
+090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;;
+090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;;
+090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;;
+0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;;
+0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;;
+0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;;
+0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;;
+0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;;
+0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;;
+0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;;
+0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;
+091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;;
+091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;
+091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;;
+091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;
+091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;
+091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;;
+0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;;
+0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;;
+0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;;
+0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;;
+092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;;
+092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;
+092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;;
+092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;
+092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;;
+092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;;
+0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;;
+0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;;
+0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;;
+0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;;
+0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;;
+0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;;
+0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;;
+093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
+0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;;
+0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
+094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;;
+0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;;
+0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;;
+0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
+0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
+0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;;
+0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;;
+095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;;
+095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;;
+095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;;
+095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;;
+095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;;
+095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;;
+0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;;
+0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;;
+0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;;
+0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;;
+0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;;
+0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;;
+098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;;
+098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;;
+0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;;
+0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;;
+0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;;
+0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;;
+0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;;
+0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;;
+099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;;
+099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;;
+099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;;
+099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;;
+099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;;
+099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;;
+09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;;
+09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;;
+09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;;
+09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;;
+09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;;
+09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;;
+09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;;
+09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;;
+09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;;
+09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;;
+09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;;
+09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;;
+09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;;
+09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;;
+09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;;
+09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;;
+09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;;
+09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;;
+09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;;
+09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
+09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
+09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
+09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
+09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;;
+09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;;
+09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;;
+09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;;
+09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;;
+09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;;
+09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;;
+09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;;
+09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;;N;;;;;
+09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;;
+09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;;
+0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;;
+0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;;
+0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;;
+0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;;
+0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;;
+0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;;
+0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;;
+0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;;
+0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;;
+0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;;
+0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;;
+0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;;
+0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;;
+0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;;
+0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;;
+0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;;
+0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;;
+0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;;
+0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;;
+0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;;
+0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;;
+0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;;
+0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
+0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;
+0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;
+0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;
+0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;;
+0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;;
+0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;;
+0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;;
+0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;
+0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
+0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
+0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;;
+0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;;
+0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;;
+0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;;
+0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;;
+0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;;
+0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;;
+0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;;
+0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;;
+0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;;
+0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;;
+0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;;
+0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;;
+0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;;
+0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;;
+0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;;
+0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;;
+0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;;
+0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;;
+0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;;
+0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;;
+0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
+0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;;
+0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;;
+0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;;
+0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;;
+0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;;
+0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;;
+0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;;
+0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;;
+0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;;
+0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;;
+0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;;
+0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;;
+0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;;
+0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;;
+0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;;
+0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;;
+0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;;
+0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;;
+0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;;
+0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;;
+0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;;
+0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;;
+0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;;
+0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;;
+0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;;
+0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;;
+0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;;
+0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
+0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
+0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
+0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
+0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;
+0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;;
+0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;;
+0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;;
+0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0B83;TAMIL SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;;
+0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;;
+0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;;
+0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;;
+0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;;
+0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;;
+0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;;
+0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;;
+0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;;
+0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;;
+0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;;
+0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;;
+0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;;
+0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;;
+0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;;
+0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;;
+0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;;
+0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;;
+0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;;
+0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;;
+0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;;
+0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;;
+0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;;
+0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;;
+0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;;
+0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;;
+0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
+0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
+0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
+0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
+0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
+0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;;
+0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
+0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
+0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;;
+0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
+0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;
+0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;
+0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;
+0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;;
+0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;;
+0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;;
+0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;;
+0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;;
+0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;;
+0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;;
+0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;;
+0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;;
+0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;;
+0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;;
+0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;;
+0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;;
+0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;;
+0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;;
+0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;;
+0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;;
+0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;;
+0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;;
+0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;;
+0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;;
+0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;;
+0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;;
+0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;;
+0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;;
+0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;;
+0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;;
+0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;;
+0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;;
+0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;;
+0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;;
+0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;;
+0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;;
+0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
+0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
+0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
+0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;;
+0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
+0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;;
+0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;;
+0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
+0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;
+0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;
+0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;;
+0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;;
+0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;;
+0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;;
+0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;;
+0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;;
+0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;;
+0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;;
+0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;;
+0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;;
+0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;;
+0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;;
+0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;;
+0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;;
+0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;;
+0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;;
+0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;;
+0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;;
+0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;;
+0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;;
+0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;;
+0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;;
+0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;;
+0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;;
+0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;;
+0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;;
+0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;;
+0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0CBF;KANNADA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;;
+0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0CC6;KANNADA VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;;
+0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;;
+0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;;
+0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;;
+0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
+0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
+0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;
+0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;
+0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;;
+0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;;
+0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;;
+0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;;
+0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;;
+0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;;
+0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;;
+0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;;
+0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;;
+0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;;
+0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;;
+0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;;
+0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;;
+0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;;
+0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;;
+0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;;
+0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;;
+0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;;
+0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;;
+0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;;
+0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;;
+0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;;
+0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;;
+0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;;
+0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;;
+0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;;
+0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;;
+0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;;
+0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;;
+0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;;
+0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;;
+0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;;
+0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;;
+0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;;
+0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;;
+0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;;
+0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;;
+0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;;
+0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;;
+0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;
+0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
+0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
+0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;;
+0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;;
+0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;
+0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;;
+0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;;
+0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;;
+0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;;
+0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;;
+0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;;
+0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;;
+0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;;
+0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;;
+0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;;
+0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;;
+0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;;
+0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;;
+0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;;
+0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;;
+0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;;
+0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;;
+0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;;
+0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;;
+0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;;
+0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
+0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
+0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
+0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
+0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
+0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;;
+0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
+0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
+0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
+0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;;
+0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
+0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
+0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;;
+0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
+0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
+0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;;
+0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
+0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
+0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;;
+0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;;
+0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;;
+0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;;
+0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;;
+0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;;
+0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;;
+0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;;
+0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;;
+0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;;
+0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;;
+0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;;
+0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;;
+0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;;
+0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;;
+0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;;
+0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
+0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;;
+0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;;
+0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;;
+0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;;
+0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;;
+0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;;
+0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;;
+0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;;
+0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;;
+0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;;
+0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;;
+0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;;
+0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;;
+0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;;
+0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;;
+0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;;
+0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;;
+0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;;
+0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;;
+0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;;
+0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;;
+0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;;
+0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;;
+0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;;
+0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;;
+0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;;
+0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;;
+0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;;
+0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;;
+0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;;
+0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;;
+0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;;
+0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;;
+0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;;
+0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;;
+0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;;
+0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;;
+0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;;
+0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;;
+0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;;
+0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;;
+0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;;
+0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;;
+0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;;
+0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;;
+0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;;
+0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;;
+0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;;
+0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;paiyan noi;;;
+0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;;
+0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;;
+0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;;
+0E33;THAI CHARACTER SARA AM;Lo;0;L;<compat> 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;
+0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;;
+0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;;
+0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;;
+0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;sara uue;;;
+0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;;
+0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;;
+0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;;
+0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;;
+0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;;
+0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;;
+0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;;
+0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;sara ai mai muan;;;
+0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;sara ai mai malai;;;
+0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;lakkhang yao;;;
+0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;mai yamok;;;
+0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;mai taikhu;;;
+0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;;
+0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;;
+0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;;
+0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;;
+0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;;
+0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;nikkhahit;;;
+0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;;
+0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;;
+0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;;
+0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;;
+0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;;
+0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;;
+0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;;
+0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;;
+0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;;
+0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;;
+0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;;
+0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;;
+0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;;
+0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;;
+0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;;
+0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;;
+0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;;
+0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;;
+0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;;
+0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;;
+0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;;
+0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;;
+0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;;
+0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;;
+0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;;
+0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;;
+0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;;
+0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;;
+0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;;
+0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;;
+0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;;
+0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;;
+0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;;
+0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;;
+0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
+0EB3;LAO VOWEL SIGN AM;Lo;0;L;<compat> 0ECD 0EB2;;;;N;;;;;
+0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
+0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
+0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;;
+0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;;
+0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;;
+0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;;
+0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;;
+0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;;
+0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;;
+0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;;
+0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;
+0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;;
+0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;;
+0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;;
+0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;;
+0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;;
+0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;;
+0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;;
+0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;;
+0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;;
+0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;;
+0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;;
+0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;;
+0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;;
+0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;;
+0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;yik go dun ma;;;
+0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;;
+0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;;
+0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;;
+0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;drul shey;;;
+0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;;
+0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;;
+0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;tsek;;;
+0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;<noBreak> 0F0B;;;;N;;tsek tar;;;
+0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;shey;;;
+0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;nyi shey;;;
+0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;;
+0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;;
+0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;rinchen pung shey;;;
+0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;;
+0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;;
+0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;TIBETAN COMMA;ter tsek;;;
+0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;;
+0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;;
+0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;;
+0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;kyu pa;;;
+0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;dong tsu;;;
+0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;;
+0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;;
+0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;;
+0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;;
+0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;;
+0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;;
+0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;;N;;;;;
+0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;;N;;;;;
+0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;;N;;;;;
+0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;;N;;;;;
+0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;;N;;;;;
+0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;;N;;;;;
+0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;;N;;;;;
+0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;;N;;;;;
+0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;;N;;;;;
+0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;;N;;;;;
+0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;;
+0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;nge zung nyi da;;;
+0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;;
+0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;nge zung gor ta;;;
+0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;;
+0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;tsa tru;;;
+0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;N;;gug ta yun;;;
+0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;N;;gug ta ye;;;
+0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;N;TIBETAN LEFT BRACE;ang kang yun;;;
+0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;N;TIBETAN RIGHT BRACE;ang kang ye;;;
+0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;yar tse;;;
+0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;mar tse;;;
+0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;
+0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;;
+0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;;
+0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;;
+0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;;
+0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;;
+0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;;
+0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;;
+0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;;
+0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;;
+0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;;
+0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;;
+0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;;
+0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;;
+0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;;
+0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;;
+0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;;
+0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;;
+0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;;
+0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;;
+0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;;
+0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;;
+0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;;
+0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;;
+0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;;
+0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;;
+0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;;
+0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;;
+0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;;
+0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;*;;;
+0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;;
+0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;;
+0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;;
+0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;;
+0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;
+0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;
+0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;*;;;
+0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;;
+0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;;
+0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;;
+0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;;
+0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;;
+0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;;
+0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM;<compat> 0FB2 0F81;;;;N;;;;;
+0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;;
+0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM;<compat> 0FB3 0F81;;;;N;;;;;
+0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;;
+0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;;
+0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;;
+0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;;
+0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;je su nga ro;;;
+0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;nam chey;;;
+0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;;
+0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;;
+0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;nyi da na da;;;
+0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;nan de;;;
+0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;;
+0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;;
+0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;ji ta;;;
+0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;yang ta;;;
+0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;che tsa chen;;;
+0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;chu chen;;;
+0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;tru chen ging;;;
+0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;tru me ging;;;
+0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;;
+0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;;
+0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;;
+0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;;
+0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;;
+0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;;
+0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;;
+0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;;
+0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;;
+0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;;
+0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;;
+0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;;
+0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;;
+0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;;
+0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;;
+0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;;
+0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;;
+0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;;
+0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;;
+0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;;
+0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;;
+0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;;
+0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;;
+0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;;
+0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;;
+0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;;
+0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;;
+0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;;
+0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;*;;;
+0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;;
+0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;;
+0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;;
+0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;*;;;
+0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;*;;;
+0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;;
+0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;;
+0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;;
+0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;;
+0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;;
+0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;;
+0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;;
+0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;*;;;
+0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;*;;;
+0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;*;;;
+0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;kuruka;;;
+0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;kuruka shi mik chen;;;
+0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;;
+0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;;
+0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;chang tyu;;;
+0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;bub chey;;;
+0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;drilbu;;;
+0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;dorje;;;
+0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;pema den;;;
+0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;dorje gya dram;;;
+0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;phurba;;;
+0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;norbu;;;
+0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;norbu nyi khyi;;;
+0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;;
+0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;;
+0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;;;;
+1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;;
+1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;;
+1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;;
+1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;;
+1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;;
+1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;;
+1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;;
+1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;;
+1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;;
+1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;;
+100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;;
+100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;;
+100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;;
+100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;;
+100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;;
+100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;;
+1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;;
+1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;;
+1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;;
+1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;;
+1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;;
+1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;;
+1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;;
+1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;;
+1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;;
+1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;;
+101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;;
+101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;;
+101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;;
+101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;;
+101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;;
+101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;;
+1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;;
+1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;;
+1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;;
+1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;;
+1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;;
+1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;;
+1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;;
+1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;;
+102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;;
+102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;;
+1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;;
+104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;;
+104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;;
+104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;;
+104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;;
+104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;;
+1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;;
+1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;;
+1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;;
+10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;;
+10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;;
+10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;;
+10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;;
+10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;;
+10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;;
+10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;;
+10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;;
+10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;;
+10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;;
+10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;;
+10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;;
+10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;;
+10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
+10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
+10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
+10D3;GEORGIAN LETTER DON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;;
+10D4;GEORGIAN LETTER EN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;;
+10D5;GEORGIAN LETTER VIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;;
+10D6;GEORGIAN LETTER ZEN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;;
+10D7;GEORGIAN LETTER TAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;;
+10D8;GEORGIAN LETTER IN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;;
+10D9;GEORGIAN LETTER KAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;;
+10DA;GEORGIAN LETTER LAS;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;;
+10DB;GEORGIAN LETTER MAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;;
+10DC;GEORGIAN LETTER NAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;;
+10DD;GEORGIAN LETTER ON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;;
+10DE;GEORGIAN LETTER PAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;;
+10DF;GEORGIAN LETTER ZHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;;
+10E0;GEORGIAN LETTER RAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;;
+10E1;GEORGIAN LETTER SAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;;
+10E2;GEORGIAN LETTER TAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;;
+10E3;GEORGIAN LETTER UN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;;
+10E4;GEORGIAN LETTER PHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;;
+10E5;GEORGIAN LETTER KHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;;
+10E6;GEORGIAN LETTER GHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;;
+10E7;GEORGIAN LETTER QAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;;
+10E8;GEORGIAN LETTER SHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;;
+10E9;GEORGIAN LETTER CHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;;
+10EA;GEORGIAN LETTER CAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;;
+10EB;GEORGIAN LETTER JIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;;
+10EC;GEORGIAN LETTER CIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;;
+10ED;GEORGIAN LETTER CHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;;
+10EE;GEORGIAN LETTER XAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;;
+10EF;GEORGIAN LETTER JHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;;
+10F0;GEORGIAN LETTER HAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;;
+10F1;GEORGIAN LETTER HE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;;
+10F2;GEORGIAN LETTER HIE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;;
+10F3;GEORGIAN LETTER WE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;;
+10F4;GEORGIAN LETTER HAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;;
+10F5;GEORGIAN LETTER HOE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;;
+10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
+10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
+1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
+1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
+1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
+1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;dd *;;;
+1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;r *;;;
+1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
+1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
+1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;bb *;;;
+1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
+110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
+110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;;
+110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
+110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;jj *;;;
+110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
+110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
+1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
+1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
+1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
+1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
+1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;;
+1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
+1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;;
+1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
+1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
+1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
+111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;;
+111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;;
+111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
+111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
+111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
+111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;;
+1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;;
+1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;;
+1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;;
+1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;;
+112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;;
+112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;;
+112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
+1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;;
+1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
+1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;;
+1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;;
+1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;;
+1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;;
+113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;;
+113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;;
+113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;;
+113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
+113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;;
+113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
+1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
+1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;;
+1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;;
+1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;;
+1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;;
+1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
+1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
+1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;;
+1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;;
+114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;;
+114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;;
+114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;;
+114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;;
+114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
+1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;;
+1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
+1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;;
+1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;;
+1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
+1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
+1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;;
+1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;;
+1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;;
+1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;;
+1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;;
+1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;;
+1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;;
+1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;;
+1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;;
+1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;;
+116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;;
+116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;;
+116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;;
+116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;;
+116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;;
+116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;;
+1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;;
+1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;;
+1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;;
+1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;;
+1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;;
+1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;;
+1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;;
+1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;;
+1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;;
+1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;;
+117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;;
+117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;;
+117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;;
+117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;;
+117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;;
+117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;;
+1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;;
+1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;;
+1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;;
+1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;;
+1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;;
+1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;;
+1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;;
+1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;;
+1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;;
+1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;;
+118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;;
+118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;;
+118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;;
+118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;;
+118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;;
+118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;;
+1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;;
+1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;;
+1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;;
+1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;;
+1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;;
+1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;;
+1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;;
+1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;;
+1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;;
+1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;;
+119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;;
+119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;;
+119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;;
+119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;;
+119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;;
+119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;;
+11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;;
+11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;;
+11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;;
+11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
+11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
+11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;gs *;;;
+11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
+11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;nj *;;;
+11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;nh *;;;
+11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
+11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;l *;;;
+11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;lg *;;;
+11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;lm *;;;
+11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;lb *;;;
+11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;ls *;;;
+11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;lt *;;;
+11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;lp *;;;
+11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;lh *;;;
+11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
+11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
+11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;bs *;;;
+11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
+11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
+11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;ng *;;;
+11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
+11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
+11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
+11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
+11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
+11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
+11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;;
+11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
+11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
+11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;;
+11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;;
+11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;;
+11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
+11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;;
+11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;;
+11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
+11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;;
+11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;;
+11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
+11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;;
+11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;;
+11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;;
+11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
+11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;;
+11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;;
+11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;;
+11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
+11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;;
+11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
+11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
+11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
+11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
+11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;;
+11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;;
+11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
+11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
+11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
+11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;;
+11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;;
+11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;;
+11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;;
+11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;;
+1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;;
+1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;;
+1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
+1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;;
+120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;;
+120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;;
+1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;;
+1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;;
+1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;;
+1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;;
+1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;;
+1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;;
+1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;;
+1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;;
+1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;;
+121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;;
+121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;;
+1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;;
+1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;;
+1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;;
+1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;;
+1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;;
+1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;;
+1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;;
+1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;;
+1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;;
+122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;;
+122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;;
+122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;;
+1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;;
+1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;;
+1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;;
+1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;;
+123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;;
+123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;;
+123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;;
+1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;;
+1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;;
+1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;;
+1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;;
+1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;;
+1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;;
+1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;;
+124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;;
+124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;;
+124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;;
+124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;;
+1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;;
+1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;;
+1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;;
+1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;;
+1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;;
+1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;;
+1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;;
+1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;;
+125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;;
+125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;;
+125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;;
+125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;;
+1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;;
+1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;;
+1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;;
+1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;;
+126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;;
+126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;;
+126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;;
+1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;;
+1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;;
+1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;;
+1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;;
+127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;;
+127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;;
+1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;;
+1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;;
+1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;;
+1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;;
+1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;;
+1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;;
+1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;;
+128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;;
+128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;;
+128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;;
+128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;;
+1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;;
+1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;;
+1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;;
+1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;;
+1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;;
+129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;;
+129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;;
+129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;;
+12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;;
+12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;;
+12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;;
+12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;;
+12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;;
+12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;;
+12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;;
+12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;;
+12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;;
+12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
+12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;;
+12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;;
+12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;;
+12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;;
+12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;;
+12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;;
+12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;;
+12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;;
+12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;;
+12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;;
+12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;;
+12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;;
+12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;;
+12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;;
+12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;;
+12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;;
+12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;;
+12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;;
+12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;;
+12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;;
+12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
+12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;;
+12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;;
+12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;;
+12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;;
+12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;;
+12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;;
+12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;;
+12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;;
+12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;;
+12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;;
+12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;;
+12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;;
+12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;;
+12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;;
+12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;;
+12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;;
+12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
+12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;;
+12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;;
+12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;;
+12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;;
+12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
+12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
+12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
+12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;;
+12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;;
+12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
+12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
+12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;;
+1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;;
+1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;;
+1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;;
+1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;;
+1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;;
+1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;;
+130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
+130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;;
+1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;;
+1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;;
+1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;;
+1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;;
+1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
+1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
+131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
+131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;;
+131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;;
+131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
+131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;;
+1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;;
+1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;;
+1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;;
+1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;;
+1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;;
+1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;;
+1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;;
+1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
+1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
+132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;;
+132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;;
+132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;;
+132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
+132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
+132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;;
+1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;;
+1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;;
+1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;;
+1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;;
+1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;;
+1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;;
+1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;;
+1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;;
+1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;;
+1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;;
+133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;;
+133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;;
+133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;;
+133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;;
+133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;;
+133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;;
+1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;;
+1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;;
+1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;;
+1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;;
+1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;;
+1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;;
+1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;;
+1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;;
+134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;;
+134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;;
+134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;;
+1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;;
+1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;;
+1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;;
+1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;;
+1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;;
+1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;;
+135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;;
+1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;;
+1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;;
+1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;;
+1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;;
+1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;;
+1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;;
+1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;;
+1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+1369;ETHIOPIC DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+136A;ETHIOPIC DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+136B;ETHIOPIC DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+136C;ETHIOPIC DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+136D;ETHIOPIC DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+136E;ETHIOPIC DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+136F;ETHIOPIC DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1370;ETHIOPIC DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1371;ETHIOPIC DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;;
+1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;;
+1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;;
+1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;;
+1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;;
+1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
+1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
+137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;;
+137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;;
+137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
+13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;;
+13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;;
+13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;;
+13A3;CHEROKEE LETTER O;Lo;0;L;;;;;N;;;;;
+13A4;CHEROKEE LETTER U;Lo;0;L;;;;;N;;;;;
+13A5;CHEROKEE LETTER V;Lo;0;L;;;;;N;;;;;
+13A6;CHEROKEE LETTER GA;Lo;0;L;;;;;N;;;;;
+13A7;CHEROKEE LETTER KA;Lo;0;L;;;;;N;;;;;
+13A8;CHEROKEE LETTER GE;Lo;0;L;;;;;N;;;;;
+13A9;CHEROKEE LETTER GI;Lo;0;L;;;;;N;;;;;
+13AA;CHEROKEE LETTER GO;Lo;0;L;;;;;N;;;;;
+13AB;CHEROKEE LETTER GU;Lo;0;L;;;;;N;;;;;
+13AC;CHEROKEE LETTER GV;Lo;0;L;;;;;N;;;;;
+13AD;CHEROKEE LETTER HA;Lo;0;L;;;;;N;;;;;
+13AE;CHEROKEE LETTER HE;Lo;0;L;;;;;N;;;;;
+13AF;CHEROKEE LETTER HI;Lo;0;L;;;;;N;;;;;
+13B0;CHEROKEE LETTER HO;Lo;0;L;;;;;N;;;;;
+13B1;CHEROKEE LETTER HU;Lo;0;L;;;;;N;;;;;
+13B2;CHEROKEE LETTER HV;Lo;0;L;;;;;N;;;;;
+13B3;CHEROKEE LETTER LA;Lo;0;L;;;;;N;;;;;
+13B4;CHEROKEE LETTER LE;Lo;0;L;;;;;N;;;;;
+13B5;CHEROKEE LETTER LI;Lo;0;L;;;;;N;;;;;
+13B6;CHEROKEE LETTER LO;Lo;0;L;;;;;N;;;;;
+13B7;CHEROKEE LETTER LU;Lo;0;L;;;;;N;;;;;
+13B8;CHEROKEE LETTER LV;Lo;0;L;;;;;N;;;;;
+13B9;CHEROKEE LETTER MA;Lo;0;L;;;;;N;;;;;
+13BA;CHEROKEE LETTER ME;Lo;0;L;;;;;N;;;;;
+13BB;CHEROKEE LETTER MI;Lo;0;L;;;;;N;;;;;
+13BC;CHEROKEE LETTER MO;Lo;0;L;;;;;N;;;;;
+13BD;CHEROKEE LETTER MU;Lo;0;L;;;;;N;;;;;
+13BE;CHEROKEE LETTER NA;Lo;0;L;;;;;N;;;;;
+13BF;CHEROKEE LETTER HNA;Lo;0;L;;;;;N;;;;;
+13C0;CHEROKEE LETTER NAH;Lo;0;L;;;;;N;;;;;
+13C1;CHEROKEE LETTER NE;Lo;0;L;;;;;N;;;;;
+13C2;CHEROKEE LETTER NI;Lo;0;L;;;;;N;;;;;
+13C3;CHEROKEE LETTER NO;Lo;0;L;;;;;N;;;;;
+13C4;CHEROKEE LETTER NU;Lo;0;L;;;;;N;;;;;
+13C5;CHEROKEE LETTER NV;Lo;0;L;;;;;N;;;;;
+13C6;CHEROKEE LETTER QUA;Lo;0;L;;;;;N;;;;;
+13C7;CHEROKEE LETTER QUE;Lo;0;L;;;;;N;;;;;
+13C8;CHEROKEE LETTER QUI;Lo;0;L;;;;;N;;;;;
+13C9;CHEROKEE LETTER QUO;Lo;0;L;;;;;N;;;;;
+13CA;CHEROKEE LETTER QUU;Lo;0;L;;;;;N;;;;;
+13CB;CHEROKEE LETTER QUV;Lo;0;L;;;;;N;;;;;
+13CC;CHEROKEE LETTER SA;Lo;0;L;;;;;N;;;;;
+13CD;CHEROKEE LETTER S;Lo;0;L;;;;;N;;;;;
+13CE;CHEROKEE LETTER SE;Lo;0;L;;;;;N;;;;;
+13CF;CHEROKEE LETTER SI;Lo;0;L;;;;;N;;;;;
+13D0;CHEROKEE LETTER SO;Lo;0;L;;;;;N;;;;;
+13D1;CHEROKEE LETTER SU;Lo;0;L;;;;;N;;;;;
+13D2;CHEROKEE LETTER SV;Lo;0;L;;;;;N;;;;;
+13D3;CHEROKEE LETTER DA;Lo;0;L;;;;;N;;;;;
+13D4;CHEROKEE LETTER TA;Lo;0;L;;;;;N;;;;;
+13D5;CHEROKEE LETTER DE;Lo;0;L;;;;;N;;;;;
+13D6;CHEROKEE LETTER TE;Lo;0;L;;;;;N;;;;;
+13D7;CHEROKEE LETTER DI;Lo;0;L;;;;;N;;;;;
+13D8;CHEROKEE LETTER TI;Lo;0;L;;;;;N;;;;;
+13D9;CHEROKEE LETTER DO;Lo;0;L;;;;;N;;;;;
+13DA;CHEROKEE LETTER DU;Lo;0;L;;;;;N;;;;;
+13DB;CHEROKEE LETTER DV;Lo;0;L;;;;;N;;;;;
+13DC;CHEROKEE LETTER DLA;Lo;0;L;;;;;N;;;;;
+13DD;CHEROKEE LETTER TLA;Lo;0;L;;;;;N;;;;;
+13DE;CHEROKEE LETTER TLE;Lo;0;L;;;;;N;;;;;
+13DF;CHEROKEE LETTER TLI;Lo;0;L;;;;;N;;;;;
+13E0;CHEROKEE LETTER TLO;Lo;0;L;;;;;N;;;;;
+13E1;CHEROKEE LETTER TLU;Lo;0;L;;;;;N;;;;;
+13E2;CHEROKEE LETTER TLV;Lo;0;L;;;;;N;;;;;
+13E3;CHEROKEE LETTER TSA;Lo;0;L;;;;;N;;;;;
+13E4;CHEROKEE LETTER TSE;Lo;0;L;;;;;N;;;;;
+13E5;CHEROKEE LETTER TSI;Lo;0;L;;;;;N;;;;;
+13E6;CHEROKEE LETTER TSO;Lo;0;L;;;;;N;;;;;
+13E7;CHEROKEE LETTER TSU;Lo;0;L;;;;;N;;;;;
+13E8;CHEROKEE LETTER TSV;Lo;0;L;;;;;N;;;;;
+13E9;CHEROKEE LETTER WA;Lo;0;L;;;;;N;;;;;
+13EA;CHEROKEE LETTER WE;Lo;0;L;;;;;N;;;;;
+13EB;CHEROKEE LETTER WI;Lo;0;L;;;;;N;;;;;
+13EC;CHEROKEE LETTER WO;Lo;0;L;;;;;N;;;;;
+13ED;CHEROKEE LETTER WU;Lo;0;L;;;;;N;;;;;
+13EE;CHEROKEE LETTER WV;Lo;0;L;;;;;N;;;;;
+13EF;CHEROKEE LETTER YA;Lo;0;L;;;;;N;;;;;
+13F0;CHEROKEE LETTER YE;Lo;0;L;;;;;N;;;;;
+13F1;CHEROKEE LETTER YI;Lo;0;L;;;;;N;;;;;
+13F2;CHEROKEE LETTER YO;Lo;0;L;;;;;N;;;;;
+13F3;CHEROKEE LETTER YU;Lo;0;L;;;;;N;;;;;
+13F4;CHEROKEE LETTER YV;Lo;0;L;;;;;N;;;;;
+1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;;
+1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;;
+1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;;
+1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;;
+1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;;
+1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;;
+1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;;
+1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;;
+1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;;
+140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;;
+140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;;
+140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;;
+140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;;
+140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;;
+140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;;
+1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;;
+1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;;
+1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;;
+1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;;
+1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;;
+1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;;
+1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;;
+1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;;
+1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;;
+1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;;
+141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;;
+141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;;
+141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;;
+141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;;
+141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;;
+1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;;
+1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;;
+1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;;
+1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;;
+1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;;
+1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;;
+1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;;
+1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;;
+1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;;
+1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;;
+142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;;
+142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;;
+142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;;
+142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;;
+142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;;
+142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;;
+1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;;
+1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;;
+1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;;
+1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;;
+1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;;
+1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;;
+1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;;
+1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;;
+1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;;
+1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;;
+143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;;
+143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;;
+143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;;
+143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;;
+143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;;
+143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;;
+1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;;
+1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;;
+1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;;
+1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;;
+1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;;
+1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;;
+1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;;
+1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;;
+1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;;
+1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;;
+144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;;
+144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;;
+144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;;
+144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;;
+144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;;
+144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;;
+1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;;
+1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;;
+1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;;
+1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;;
+1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;;
+1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;;
+1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;;
+1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;;
+1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;;
+1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;;
+145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;;
+145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;;
+145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;;
+145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;;
+145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;;
+145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;;
+1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;;
+1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;;
+1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;;
+1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;;
+1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;;
+1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;;
+1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;;
+1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;;
+1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;;
+1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;;
+146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;;
+146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;;
+146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;;
+146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;;
+146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;;
+146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;;
+1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;;
+1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;;
+1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;;
+1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;;
+1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;;
+1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;;
+1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;;
+1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;;
+1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;;
+1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;;
+147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;;
+147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;;
+147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;;
+147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;;
+147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;;
+147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;;
+1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;;
+1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;;
+1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;;
+1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;;
+1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;;
+1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;;
+1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;;
+1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;;
+1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;;
+1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;;
+148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;;
+148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;;
+148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;;
+148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;;
+148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;;
+148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;;
+1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;;
+1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;;
+1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;;
+1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;;
+1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;;
+1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;;
+1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;;
+1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;;
+1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;;
+1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;;
+149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;;
+149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;;
+149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;;
+149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;;
+149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;;
+149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;;
+14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;;
+14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;;
+14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;;
+14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;;
+14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;;
+14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;;
+14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;;
+14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;;
+14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;;
+14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;;
+14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;;
+14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;;
+14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;;
+14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;;
+14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;;
+14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;;
+14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;;
+14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;;
+14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;;
+14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;;
+14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;;
+14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;;
+14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;;
+14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;;
+14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;;
+14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;;
+14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;;
+14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;;
+14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;;
+14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;;
+14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;;
+14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;;
+14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;;
+14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;;
+14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;;
+14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;;
+14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;;
+14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;;
+14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;;
+14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;;
+14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;;
+14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;;
+14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;;
+14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;;
+14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;;
+14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;;
+14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;;
+14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;;
+14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;;
+14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;;
+14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;;
+14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;;
+14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;;
+14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;;
+14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;;
+14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;;
+14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;;
+14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;;
+14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;;
+14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;;
+14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;;
+14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;;
+14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;;
+14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;;
+14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;;
+14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;;
+14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;;
+14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;;
+14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;;
+14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;;
+14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;;
+14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;;
+14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;;
+14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;;
+14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;;
+14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;;
+14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;;
+14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;;
+14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;;
+14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;;
+14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;;
+14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;;
+14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;;
+14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;;
+14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;;
+14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;;
+14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;;
+14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;;
+14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;;
+14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;;
+14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;;
+14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;;
+14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;;
+14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;;
+14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;;
+14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;;
+1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;;
+1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;;
+1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;;
+1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;;
+1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;;
+1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;;
+1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;;
+1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;;
+1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;;
+1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;;
+150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;;
+150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;;
+150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;;
+150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;;
+150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;;
+150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;;
+1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;;
+1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;;
+1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;;
+1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;;
+1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;;
+1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;;
+1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;;
+1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;;
+1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;;
+1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;;
+151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;;
+151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;;
+151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;;
+151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;;
+151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;;
+151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;;
+1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;;
+1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;;
+1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;;
+1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;;
+1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;;
+1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;;
+1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;;
+1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;;
+1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;;
+1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;;
+152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;;
+152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;;
+152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;;
+152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;;
+152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;;
+152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;;
+1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;;
+1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;;
+1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;;
+1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;;
+1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;;
+1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;;
+1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;;
+1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;;
+1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;;
+1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;;
+153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;;
+153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;;
+153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;;
+153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;;
+153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;;
+153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;;
+1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;;
+1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;;
+1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;;
+1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;;
+1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;;
+1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;;
+1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;;
+1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;;
+1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;;
+1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;;
+154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;;
+154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;;
+154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;;
+154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;;
+154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;;
+154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;;
+1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;;
+1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;;
+1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;;
+1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;;
+1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;;
+1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;;
+1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;;
+1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;;
+1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;;
+1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;;
+155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;;
+155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;;
+155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;;
+155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;;
+155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;;
+155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;;
+1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;;
+1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;;
+1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;;
+1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;;
+1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;;
+1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;;
+1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;;
+1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;;
+1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;;
+1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;;
+156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;;
+156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;;
+156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;;
+156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;;
+156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;;
+156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;;
+1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;;
+1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;;
+1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;;
+1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;;
+1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;;
+1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;;
+1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;;
+1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;;
+1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;;
+1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;;
+157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;;
+157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;;
+157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;;
+157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;;
+157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;;
+157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;;
+1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;;
+1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;;
+1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;;
+1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;;
+1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;;
+1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;;
+1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;;
+1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;;
+1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;;
+1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;;
+158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;;
+158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;;
+158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;;
+158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;;
+158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;;
+158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;;
+1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;;
+1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;;
+1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;;
+1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;;
+1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;;
+1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;;
+1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;;
+1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;;
+1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;;
+1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;;
+159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;;
+159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;;
+159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;;
+159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;;
+159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;;
+159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;;
+15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;;
+15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;;
+15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;;
+15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;;
+15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;;
+15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;;
+15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;;
+15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;;
+15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;;
+15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;;
+15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;;
+15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;;
+15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;;
+15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;;
+15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;;
+15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;;
+15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;;
+15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;;
+15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;;
+15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;;
+15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;;
+15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;;
+15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;;
+15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;;
+15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;;
+15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;;
+15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;;
+15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;;
+15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;;
+15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;;
+15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;;
+15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;;
+15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;;
+15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;;
+15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;;
+15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;;
+15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;;
+15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;;
+15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;;
+15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;;
+15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;;
+15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;;
+15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;;
+15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;;
+15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;;
+15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;;
+15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;;
+15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;;
+15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;;
+15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;;
+15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;;
+15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;;
+15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;;
+15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;;
+15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;;
+15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;;
+15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;;
+15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;;
+15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;;
+15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;;
+15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;;
+15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;;
+15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;;
+15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;;
+15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;;
+15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;;
+15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;;
+15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;;
+15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;;
+15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;;
+15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;;
+15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;;
+15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;;
+15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;;
+15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;;
+15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;;
+15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;;
+15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;;
+15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;;
+15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;;
+15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;;
+15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;;
+15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;;
+15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;;
+15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;;
+15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;;
+15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;;
+15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;;
+15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;;
+15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;;
+15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;;
+15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;;
+15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;;
+15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;;
+15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;;
+15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;;
+1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;;
+1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;;
+1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;;
+1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;;
+1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;;
+1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;;
+1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;;
+1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;;
+1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;;
+1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;;
+160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;;
+160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;;
+160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;;
+160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;;
+160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;;
+160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;;
+1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;;
+1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;;
+1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;;
+1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;;
+1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;;
+1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;;
+1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;;
+1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;;
+1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;;
+1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;;
+161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;;
+161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;;
+161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;;
+161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;;
+161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;;
+161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;;
+1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;;
+1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;;
+1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;;
+1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;;
+1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;;
+1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;;
+1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;;
+1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;;
+1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;;
+1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;;
+162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;;
+162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;;
+162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;;
+162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;;
+162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;;
+162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;;
+1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;;
+1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;;
+1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;;
+1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;;
+1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;;
+1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;;
+1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;;
+1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;;
+1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;;
+1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;;
+163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;;
+163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;;
+163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;;
+163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;;
+163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;;
+163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;;
+1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;;
+1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;;
+1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;;
+1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;;
+1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;;
+1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;;
+1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;;
+1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;;
+1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;;
+1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;;
+164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;;
+164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;;
+164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;;
+164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;;
+164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;;
+164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;;
+1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;;
+1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;;
+1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;;
+1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;;
+1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;;
+1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;;
+1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;;
+1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;;
+1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;;
+1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;;
+165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;;
+165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;;
+165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;;
+165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;;
+165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;;
+165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;;
+1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;;
+1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;;
+1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;;
+1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;;
+1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;;
+1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;;
+1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;;
+1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;;
+1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;;
+1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;;
+166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;;
+166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;;
+166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;;
+166D;CANADIAN SYLLABICS CHI SIGN;Po;0;L;;;;;N;;;;;
+166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;;
+166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;;
+1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;;
+1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;;
+1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;;
+1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;;
+1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;;
+1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;;
+1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;;
+1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;;
+1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;;
+1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;;
+1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;;
+1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;;
+1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;;
+1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;;
+1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;;
+1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;;
+1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;;
+168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;;
+168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;;
+168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;;
+168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;;
+168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;;
+168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;;
+1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;;
+1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;;
+1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;;
+1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;;
+1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;;
+1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;;
+1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;;
+1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;;
+1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;;
+1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;;
+169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;;
+169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;N;;;;;
+169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;N;;;;;
+16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;;
+16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;;
+16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;;
+16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;;
+16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;;
+16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;;
+16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;;
+16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;;
+16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;;
+16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;;
+16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;;
+16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;;
+16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;;
+16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;;
+16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;;
+16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;;
+16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;;
+16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;;
+16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;;
+16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;;
+16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;;
+16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;;
+16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;;
+16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;;
+16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;;
+16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;;
+16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;;
+16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;;
+16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;;
+16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;;
+16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;;
+16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;;
+16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;;
+16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;;
+16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;;
+16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;;
+16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;;
+16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;;
+16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;;
+16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;;
+16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;;
+16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;;
+16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;;
+16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;;
+16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;;
+16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;;
+16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;;
+16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;;
+16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;;
+16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;;
+16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;;
+16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;;
+16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;;
+16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;;
+16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;;
+16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;;
+16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;;
+16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;;
+16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;;
+16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;;
+16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;;
+16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;;
+16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;;
+16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;;
+16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;;
+16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;;
+16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;;
+16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;;
+16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;;
+16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;;
+16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;;
+16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;;
+16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;;
+16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;;
+16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;;
+16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;;
+16EE;RUNIC ARLAUG SYMBOL;No;0;L;;;;17;N;;golden number 17;;;
+16EF;RUNIC TVIMADUR SYMBOL;No;0;L;;;;18;N;;golden number 18;;;
+16F0;RUNIC BELGTHOR SYMBOL;No;0;L;;;;19;N;;golden number 19;;;
+1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;;
+1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;;
+1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;;
+1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;;
+1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;;
+1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;;
+1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;;
+1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;;
+1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;;
+1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;;
+178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;;
+178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;;
+178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;;
+178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;;
+178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;;
+178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;;
+1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;;
+1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;;
+1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;;
+1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;;
+1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;;
+1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;;
+1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;;
+1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;;
+1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;;
+1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;;
+179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;;
+179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;;
+179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;;
+179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;;
+179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;;
+179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;;
+17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;;
+17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;;
+17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;;
+17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;;;;
+17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;;;;
+17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;;
+17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;;
+17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;;
+17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;;
+17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;;
+17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;;
+17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;;
+17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;;
+17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;;
+17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;;
+17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;;
+17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;;
+17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;;
+17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;;
+17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;;
+17B4;KHMER VOWEL INHERENT AQ;Mc;0;L;;;;;N;;;;;
+17B5;KHMER VOWEL INHERENT AA;Mc;0;L;;;;;N;;;;;
+17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
+17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
+17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;;
+17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;;
+17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;;
+17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;;
+17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;;
+17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;;
+17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;;
+17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;;
+17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;;
+17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;;
+17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;;
+17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;;
+17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;;
+17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;;
+17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;;
+17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;;
+17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;;
+17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;;;;
+17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;;
+17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;;
+17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;;
+17D7;KHMER SIGN LEK TOO;Po;0;L;;;;;N;;;;;
+17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;;;;
+17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;;
+17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;;
+17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;;
+17DC;KHMER SIGN AVAKRAHASANYA;Po;0;L;;;;;N;;;;;
+17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;;
+1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;;
+1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;;
+1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;;
+1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;;
+1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;;
+1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
+1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;;
+1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;;
+1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;;
+180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;;
+180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Cf;0;BN;;;;;N;;;;;
+180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Cf;0;BN;;;;;N;;;;;
+180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Cf;0;BN;;;;;N;;;;;
+180E;MONGOLIAN VOWEL SEPARATOR;Cf;0;BN;;;;;N;;;;;
+1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;;
+1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;;
+1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;;
+1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;;
+1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;;
+1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;;
+1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;;
+1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;;
+1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;;
+1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;;
+182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;;
+182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;;
+182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;;
+182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;;
+182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;;
+182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;;
+1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;;
+1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;;
+1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;;
+1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;;
+1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;;
+1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;;
+1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;;
+1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;;
+183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;;
+183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;;
+183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;;
+1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;;
+1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;;
+1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;;
+1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;;
+1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;;
+1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;;
+1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;;
+1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;;
+1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;;
+1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;;
+184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;;
+184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;;
+184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;;
+184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;;
+184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;;
+184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;;
+1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;;
+1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;;
+1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;;
+1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;;
+1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;;
+1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;;
+1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;;
+1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;;
+1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;;
+1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;;
+185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;;
+185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;;
+185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;;
+185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;;
+185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;;
+185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;;
+1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;;
+1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;;
+1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;;
+1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;;
+1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;;
+1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;;
+1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;;
+1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;;
+1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;;
+1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;;
+186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;;
+186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;;
+186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;;
+186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;;
+186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;;
+186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;;
+1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;;
+1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;;
+1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;;
+1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;;
+1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;;
+1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;;
+1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;;
+1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;;
+1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;;
+1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;;
+1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;;
+1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;;
+1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;;
+1885;MONGOLIAN LETTER ALI GALI BALUDA;Lo;0;L;;;;;N;;;;;
+1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Lo;0;L;;;;;N;;;;;
+1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;;
+1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;;
+1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;;
+188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;;
+188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;;
+188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;;
+188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;;
+188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;;
+188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;;
+1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;;
+1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;;
+1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;;
+1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;;
+1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;;
+1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;;
+1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;;
+1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;;
+1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;;
+189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;;
+189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;;
+189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;;
+189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;;
+189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;;
+18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;;
+18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;;
+18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;;
+18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;;
+18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;;
+18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;;
+18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;;
+18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;;
+18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;;
+1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
+1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
+1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
+1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02
+1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05;
+1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04
+1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07;
+1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06
+1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09;
+1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08
+1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B;
+1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A
+1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D;
+1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C
+1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F;
+1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E
+1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11;
+1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10
+1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13;
+1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12
+1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15;
+1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14
+1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17;
+1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16
+1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19;
+1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18
+1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B;
+1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A
+1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D;
+1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C
+1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F;
+1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E
+1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21;
+1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20
+1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23;
+1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22
+1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25;
+1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24
+1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27;
+1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26
+1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29;
+1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28
+1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B;
+1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A
+1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D;
+1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C
+1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F;
+1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E
+1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31;
+1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30
+1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33;
+1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32
+1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35;
+1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34
+1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37;
+1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36
+1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39;
+1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38
+1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B;
+1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A
+1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D;
+1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C
+1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F;
+1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E
+1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41;
+1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40
+1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43;
+1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42
+1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45;
+1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44
+1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47;
+1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46
+1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49;
+1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48
+1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B;
+1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A
+1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D;
+1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C
+1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F;
+1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E
+1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51;
+1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50
+1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53;
+1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52
+1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55;
+1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54
+1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57;
+1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56
+1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59;
+1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58
+1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B;
+1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A
+1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D;
+1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C
+1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F;
+1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E
+1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61;
+1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60
+1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63;
+1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62
+1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65;
+1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64
+1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67;
+1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66
+1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69;
+1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68
+1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B;
+1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A
+1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D;
+1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C
+1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F;
+1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E
+1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71;
+1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70
+1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73;
+1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72
+1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75;
+1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74
+1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77;
+1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76
+1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79;
+1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78
+1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B;
+1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A
+1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D;
+1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C
+1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F;
+1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E
+1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81;
+1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80
+1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83;
+1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82
+1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85;
+1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84
+1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87;
+1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86
+1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89;
+1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88
+1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B;
+1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A
+1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D;
+1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C
+1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F;
+1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E
+1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91;
+1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90
+1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93;
+1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92
+1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95;
+1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94
+1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;;
+1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;;
+1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;;
+1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;
+1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;
+1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60
+1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;
+1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0
+1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;
+1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2
+1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5;
+1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4
+1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7;
+1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6
+1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9;
+1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8
+1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB;
+1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA
+1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD;
+1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC
+1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF;
+1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE
+1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1;
+1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0
+1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3;
+1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2
+1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5;
+1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4
+1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7;
+1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6
+1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9;
+1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8
+1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB;
+1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA
+1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD;
+1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC
+1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF;
+1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE
+1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1;
+1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0
+1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3;
+1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2
+1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5;
+1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4
+1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7;
+1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6
+1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9;
+1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8
+1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB;
+1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA
+1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD;
+1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC
+1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF;
+1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE
+1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1;
+1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0
+1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3;
+1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2
+1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5;
+1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4
+1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7;
+1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6
+1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9;
+1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8
+1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB;
+1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA
+1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD;
+1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC
+1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF;
+1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE
+1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1;
+1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0
+1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3;
+1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2
+1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5;
+1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4
+1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7;
+1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6
+1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9;
+1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8
+1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB;
+1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA
+1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED;
+1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC
+1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF;
+1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE
+1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1;
+1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0
+1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3;
+1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2
+1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5;
+1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4
+1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7;
+1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6
+1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;
+1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8
+1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08
+1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09
+1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A
+1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B
+1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C
+1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D
+1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E
+1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F
+1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00;
+1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01;
+1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02;
+1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03;
+1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04;
+1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05;
+1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06;
+1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07;
+1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18
+1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19
+1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A
+1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B
+1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C
+1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D
+1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10;
+1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11;
+1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12;
+1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13;
+1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14;
+1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15;
+1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28
+1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29
+1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A
+1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B
+1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C
+1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D
+1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E
+1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F
+1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20;
+1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21;
+1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22;
+1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23;
+1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24;
+1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25;
+1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26;
+1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27;
+1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38
+1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39
+1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A
+1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B
+1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C
+1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D
+1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E
+1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F
+1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30;
+1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31;
+1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32;
+1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33;
+1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34;
+1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35;
+1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36;
+1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37;
+1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48
+1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49
+1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A
+1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B
+1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C
+1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D
+1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40;
+1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41;
+1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42;
+1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43;
+1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44;
+1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45;
+1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;;
+1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59
+1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;;
+1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B
+1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;;
+1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D
+1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;;
+1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F
+1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51;
+1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53;
+1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55;
+1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57;
+1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68
+1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69
+1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A
+1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B
+1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C
+1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D
+1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E
+1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F
+1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60;
+1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61;
+1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62;
+1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63;
+1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64;
+1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65;
+1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66;
+1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67;
+1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA
+1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB
+1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8
+1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9
+1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA
+1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB
+1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA
+1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB
+1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8
+1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9
+1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA
+1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB
+1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA
+1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB
+1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88
+1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89
+1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A
+1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B
+1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C
+1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D
+1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E
+1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F
+1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80;
+1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81;
+1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82;
+1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83;
+1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84;
+1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85;
+1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86;
+1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87;
+1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98
+1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99
+1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A
+1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B
+1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C
+1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D
+1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E
+1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F
+1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90;
+1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91;
+1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92;
+1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93;
+1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94;
+1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95;
+1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96;
+1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97;
+1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8
+1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9
+1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA
+1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB
+1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC
+1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD
+1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE
+1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF
+1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0;
+1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1;
+1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2;
+1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3;
+1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4;
+1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5;
+1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6;
+1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7;
+1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8
+1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9
+1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;;
+1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC
+1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;;
+1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;;
+1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;;
+1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0;
+1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1;
+1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70;
+1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71;
+1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3;
+1FBD;GREEK KORONIS;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399
+1FBF;GREEK PSILI;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FC0;GREEK PERISPOMENI;Sk;0;ON;<compat> 0020 0342;;;;N;;;;;
+1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;;
+1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;;
+1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC
+1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;;
+1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;;
+1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;;
+1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72;
+1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73;
+1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74;
+1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75;
+1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3;
+1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;;
+1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;;
+1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;;
+1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8
+1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9
+1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;;
+1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;;
+1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;;
+1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;;
+1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0;
+1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1;
+1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76;
+1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77;
+1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;;
+1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;;
+1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;;
+1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8
+1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9
+1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;;
+1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;;
+1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;;
+1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC
+1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;;
+1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;;
+1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0;
+1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1;
+1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A;
+1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B;
+1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5;
+1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;;
+1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;;
+1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;;
+1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;;
+1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC
+1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;;
+1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;;
+1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;;
+1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78;
+1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79;
+1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C;
+1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D;
+1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3;
+1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;;
+1FFE;GREEK DASIA;Sk;0;ON;<compat> 0020 0314;;;;N;;;;;
+2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;;
+2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;;
+2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2007;FIGURE SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
+2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200B;ZERO WIDTH SPACE;Zs;0;BN;;;;;N;;;;;
+200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;;
+200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;;
+200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;
+200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;;
+2010;HYPHEN;Pd;0;ON;;;;;N;;;;;
+2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;;
+2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;;
+2013;EN DASH;Pd;0;ON;;;;;N;;;;;
+2014;EM DASH;Pd;0;ON;;;;;N;;;;;
+2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;;
+2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;;
+2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;;
+2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;;
+2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;;
+201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;;
+201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;;
+201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;;
+201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;;
+201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;;
+201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;;
+2020;DAGGER;Po;0;ON;;;;;N;;;;;
+2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;;
+2022;BULLET;Po;0;ON;;;;;N;;;;;
+2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;;
+2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;;
+2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;;
+2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;;
+2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;;
+2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;;
+2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;;
+202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;;
+202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;;
+202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;;
+202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;;
+202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;;
+202F;NARROW NO-BREAK SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
+2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
+2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
+2032;PRIME;Po;0;ET;;;;;N;;;;;
+2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;;
+2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;;
+2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;;
+2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;;
+2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;;
+2038;CARET;Po;0;ON;;;;;N;;;;;
+2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;;
+203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;;
+203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;;
+203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;;
+203D;INTERROBANG;Po;0;ON;;;;;N;;;;;
+203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;;
+203F;UNDERTIE;Pc;0;ON;;;;;N;;Enotikon;;;
+2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;;
+2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;
+2042;ASTERISM;Po;0;ON;;;;;N;;;;;
+2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;
+2044;FRACTION SLASH;Sm;0;ON;;;;;N;;;;;
+2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;
+2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;
+2048;QUESTION EXCLAMATION MARK;Po;0;ON;<compat> 003F 0021;;;;N;;;;;
+2049;EXCLAMATION QUESTION MARK;Po;0;ON;<compat> 0021 003F;;;;N;;;;;
+204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;;
+204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;;
+204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;;
+204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;;
+206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
+206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
+206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
+206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
+206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
+206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
+2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;0;0;0;N;SUPERSCRIPT DIGIT ZERO;;;;
+2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;4;4;4;N;SUPERSCRIPT DIGIT FOUR;;;;
+2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;5;5;5;N;SUPERSCRIPT DIGIT FIVE;;;;
+2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;6;6;6;N;SUPERSCRIPT DIGIT SIX;;;;
+2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;7;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
+2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;8;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
+2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;9;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
+207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET;<super> 002B;;;;N;;;;;
+207B;SUPERSCRIPT MINUS;Sm;0;ET;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
+207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
+207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
+207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
+207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;L;<super> 006E;;;;N;;;;;
+2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;0;0;0;N;SUBSCRIPT DIGIT ZERO;;;;
+2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;1;1;1;N;SUBSCRIPT DIGIT ONE;;;;
+2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;2;2;2;N;SUBSCRIPT DIGIT TWO;;;;
+2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;3;3;3;N;SUBSCRIPT DIGIT THREE;;;;
+2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;4;4;4;N;SUBSCRIPT DIGIT FOUR;;;;
+2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;5;5;5;N;SUBSCRIPT DIGIT FIVE;;;;
+2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;6;6;6;N;SUBSCRIPT DIGIT SIX;;;;
+2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;7;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
+2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;8;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
+2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;9;9;9;N;SUBSCRIPT DIGIT NINE;;;;
+208A;SUBSCRIPT PLUS SIGN;Sm;0;ET;<sub> 002B;;;;N;;;;;
+208B;SUBSCRIPT MINUS;Sm;0;ET;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
+208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
+208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
+208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
+20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
+20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
+20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;;
+20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;;
+20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;;
+20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;;
+20A9;WON SIGN;Sc;0;ET;;;;;N;;;;;
+20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;;
+20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;;
+20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;;
+20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;;
+20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;;
+20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;;
+20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
+20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
+20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
+20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;;
+20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;;
+20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;;
+20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;;
+20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;;
+20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;;
+20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;;
+20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;;
+20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;;
+20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;;
+20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;;
+20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;;
+20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;;
+20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;;
+20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;;
+20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;;
+20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;;
+2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;;
+2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;;
+2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
+2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;;
+2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;;
+2105;CARE OF;So;0;ON;<compat> 0063 002F 006F;;;;N;;;;;
+2106;CADA UNA;So;0;ON;<compat> 0063 002F 0075;;;;N;;;;;
+2107;EULER CONSTANT;Lu;0;L;<compat> 0190;;;;N;EULERS;;;;
+2108;SCRUPLE;So;0;ON;;;;;N;;;;;
+2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;;
+210A;SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+210B;SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;SCRIPT H;;;;
+210C;BLACK-LETTER CAPITAL H;Lu;0;L;<font> 0048;;;;N;BLACK-LETTER H;;;;
+210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L;<font> 0048;;;;N;DOUBLE-STRUCK H;;;;
+210E;PLANCK CONSTANT;Ll;0;L;<font> 0068;;;;N;;;;;
+210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;;
+2110;SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;SCRIPT I;;;;
+2111;BLACK-LETTER CAPITAL I;Lu;0;L;<font> 0049;;;;N;BLACK-LETTER I;;;;
+2112;SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;SCRIPT L;;;;
+2113;SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;;
+2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L;<font> 004E;;;;N;DOUBLE-STRUCK N;;;;
+2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;;
+2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;;
+2118;SCRIPT CAPITAL P;So;0;ON;;;;;N;SCRIPT P;;;;
+2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L;<font> 0050;;;;N;DOUBLE-STRUCK P;;;;
+211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;;
+211B;SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;SCRIPT R;;;;
+211C;BLACK-LETTER CAPITAL R;Lu;0;L;<font> 0052;;;;N;BLACK-LETTER R;;;;
+211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L;<font> 0052;;;;N;DOUBLE-STRUCK R;;;;
+211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;;
+211F;RESPONSE;So;0;ON;;;;;N;;;;;
+2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;;
+2121;TELEPHONE SIGN;So;0;ON;<compat> 0054 0045 004C;;;;N;T E L SYMBOL;;;;
+2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;;
+2123;VERSICLE;So;0;ON;;;;;N;;;;;
+2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;;
+2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;;
+2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9;
+2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;;
+2128;BLACK-LETTER CAPITAL Z;Lu;0;L;<font> 005A;;;;N;BLACK-LETTER Z;;;;
+2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;;
+212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B;
+212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5;
+212C;SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;SCRIPT B;;;;
+212D;BLACK-LETTER CAPITAL C;Lu;0;L;<font> 0043;;;;N;BLACK-LETTER C;;;;
+212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;;
+212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;;
+2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;;
+2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;;
+2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;;
+2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;
+2136;BET SYMBOL;Lo;0;L;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;;
+2137;GIMEL SYMBOL;Lo;0;L;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;;
+2138;DALET SYMBOL;Lo;0;L;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;;
+2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;;
+213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;;
+2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
+2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
+2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
+2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;;
+2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;;
+2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;;
+2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;;
+215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;;
+215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;;
+215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;;
+215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;;
+215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;;
+215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;;
+2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170;
+2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171;
+2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172;
+2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173;
+2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174;
+2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175;
+2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176;
+2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177;
+2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178;
+2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179;
+216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A;
+216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B;
+216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C;
+216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D;
+216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E;
+216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F;
+2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160
+2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161
+2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162
+2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163
+2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164
+2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165
+2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166
+2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167
+2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168
+2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169
+217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A
+217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B
+217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C
+217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D
+217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E
+217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F
+2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;
+2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;
+2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;
+2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Nl;0;L;;;;;N;;;;;
+2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
+2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
+2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
+2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;;
+2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
+2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;;
+2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;;
+2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;;
+2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;;
+2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;;
+219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;;
+219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;;
+219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;;
+219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;;
+219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;;
+219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;;
+21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;;
+21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;;
+21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;;
+21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;;
+21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;;
+21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;;
+21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;;
+21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;;
+21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;;
+21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;;
+21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;;
+21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;;
+21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;;
+21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;;
+21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;;
+21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;;
+21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;;
+21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;;
+21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;;
+21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;;
+21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;;
+21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;;
+21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;;
+21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;;
+21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;;
+21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;;
+21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;;
+21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;;
+21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;;
+21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;;
+21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;;
+21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;;
+21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;;
+21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;;
+21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;;
+21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;;
+21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;;
+21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;;
+21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;;
+21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;;
+21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;;
+21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;;
+21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;;
+21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;;
+21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;;
+21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;;
+21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;;
+21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;;
+21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;;
+21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;;
+21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;;
+21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;;
+21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;;
+21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;;
+21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;;
+21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;;
+21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;;
+21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;;
+21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;;
+21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;;
+21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;;
+21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;;
+21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;;
+21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;;
+21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;;
+21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;;
+21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;;
+21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;;
+21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;;
+21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
+21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;;
+21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;;
+21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
+21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;;
+21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
+21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
+21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;;
+2200;FOR ALL;Sm;0;ON;;;;;N;;;;;
+2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;;
+2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;;
+2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;;
+2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;;
+2205;EMPTY SET;Sm;0;ON;;;;;N;;;;;
+2206;INCREMENT;Sm;0;ON;;;;;N;;;;;
+2207;NABLA;Sm;0;ON;;;;;N;;;;;
+2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;;
+220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;;
+220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220E;END OF PROOF;Sm;0;ON;;;;;N;;;;;
+220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
+2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
+2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
+2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;;
+2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
+2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2216;SET MINUS;Sm;0;ON;;;;;Y;;;;;
+2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;;
+221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;;
+221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;;
+221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;;
+221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;;
+221E;INFINITY;Sm;0;ON;;;;;N;;;;;
+221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;;
+2220;ANGLE;Sm;0;ON;;;;;Y;;;;;
+2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;;
+2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;;
+2223;DIVIDES;Sm;0;ON;;;;;N;;;;;
+2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;;
+2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;;
+2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2229;INTERSECTION;Sm;0;ON;;;;;N;;;;;
+222A;UNION;Sm;0;ON;;;;;N;;;;;
+222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;;
+222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;;
+222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;;
+2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;;
+2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2234;THEREFORE;Sm;0;ON;;;;;N;;;;;
+2235;BECAUSE;Sm;0;ON;;;;;N;;;;;
+2236;RATIO;Sm;0;ON;;;;;N;;;;;
+2237;PROPORTION;Sm;0;ON;;;;;N;;;;;
+2238;DOT MINUS;Sm;0;ON;;;;;N;;;;;
+2239;EXCESS;Sm;0;ON;;;;;Y;;;;;
+223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;;
+223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;;
+223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;lazy S;;;
+223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;;
+223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;;
+2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;;
+2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;;
+2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;;
+2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;;
+2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;;
+224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;;
+224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;;
+2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;;
+2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;;
+2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;;
+2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;;
+2259;ESTIMATES;Sm;0;ON;;;;;N;;;;;
+225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;;
+225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;;
+225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;;
+225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;;
+225E;MEASURED BY;Sm;0;ON;;;;;N;;;;;
+225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;;
+2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;;
+2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;;
+2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;;
+2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;;
+2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;;
+2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;;
+2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;;
+2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;;
+226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;;
+226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;;
+226C;BETWEEN;Sm;0;ON;;;;;N;;;;;
+226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;;
+226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;;
+226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;;
+2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;;
+2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;;
+2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;;
+2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;;
+2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;;
+2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;;
+2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;;
+2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;;
+2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;;
+2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;;
+227A;PRECEDES;Sm;0;ON;;;;;Y;;;;;
+227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;;
+2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;;
+2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;;
+2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;;
+2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;;
+2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;;
+2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;;
+2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;;
+228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;;
+228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;;
+228C;MULTISET;Sm;0;ON;;;;;Y;;;;;
+228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;;
+228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;;
+228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;;
+2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;;
+2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;;
+2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;;
+2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;;
+229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;;
+229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;;
+229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;;
+22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;;
+22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
+22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;;
+22A5;UP TACK;Sm;0;ON;;;;;N;;;;;
+22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;;
+22A7;MODELS;Sm;0;ON;;;;;Y;;;;;
+22A8;TRUE;Sm;0;ON;;;;;Y;;;;;
+22A9;FORCES;Sm;0;ON;;;;;Y;;;;;
+22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;;
+22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;;
+22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;;
+22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;;
+22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;;
+22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;;
+22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;;
+22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;;
+22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;;
+22BB;XOR;Sm;0;ON;;;;;N;;;;;
+22BC;NAND;Sm;0;ON;;;;;N;;;;;
+22BD;NOR;Sm;0;ON;;;;;N;;;;;
+22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;;
+22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;;
+22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;;
+22C8;BOWTIE;Sm;0;ON;;;;;N;;;;;
+22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;;
+22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;;
+22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;;
+22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;;
+22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;;
+22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;;
+22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;;
+22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;;
+22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;;
+22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;;
+22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;;
+22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;;
+22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;;
+22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;;
+22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;;
+22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;;
+22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;;
+22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;;
+22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;;
+22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;;
+22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;;
+22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;;
+22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;;
+22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;;
+2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;;
+2302;HOUSE;So;0;ON;;;;;N;;;;;
+2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;;
+2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;;
+2305;PROJECTIVE;So;0;ON;;;;;N;;;;;
+2306;PERSPECTIVE;So;0;ON;;;;;N;;;;;
+2307;WAVY LINE;So;0;ON;;;;;N;;;;;
+2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;;
+2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;;
+230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;;
+230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;;
+230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;;
+230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;;
+2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;;
+2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;;
+2312;ARC;So;0;ON;;;;;N;;;;;
+2313;SEGMENT;So;0;ON;;;;;N;;;;;
+2314;SECTOR;So;0;ON;;;;;N;;;;;
+2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;;
+2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;;
+2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;;
+2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;;
+2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;;
+231A;WATCH;So;0;ON;;;;;N;;;;;
+231B;HOURGLASS;So;0;ON;;;;;N;;;;;
+231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;;
+231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;;
+231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;;
+231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;;
+2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2322;FROWN;So;0;ON;;;;;N;;;;;
+2323;SMILE;So;0;ON;;;;;N;;;;;
+2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;;
+2325;OPTION KEY;So;0;ON;;;;;N;;;;;
+2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;;
+2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;;
+2328;KEYBOARD;So;0;ON;;;;;N;;;;;
+2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;;
+232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;;
+232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;;
+232C;BENZENE RING;So;0;ON;;;;;N;;;;;
+232D;CYLINDRICITY;So;0;ON;;;;;N;;;;;
+232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;;
+232F;SYMMETRY;So;0;ON;;;;;N;;;;;
+2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;;
+2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;;
+2332;CONICAL TAPER;So;0;ON;;;;;N;;;;;
+2333;SLOPE;So;0;ON;;;;;N;;;;;
+2334;COUNTERBORE;So;0;ON;;;;;N;;;;;
+2335;COUNTERSINK;So;0;ON;;;;;N;;;;;
+2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;;
+2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;;
+2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;;
+2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;;
+233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;;
+233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;;
+233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;;
+233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;;
+233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;;
+233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;;
+2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;;
+2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;;
+2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;;
+2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;;
+2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;;
+2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;;
+2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;;
+2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;;
+2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;;
+2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;;
+234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;*;;;
+234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;;
+234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;;
+234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;;
+234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;*;;;
+234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;;
+2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;;
+2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;*;;;
+2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;;
+2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;;
+2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;;
+2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;*;;;
+2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;;
+2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;;
+2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;;
+2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;;
+235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;;
+235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;;
+235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;;
+235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;;
+235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;;
+235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;;
+2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;;
+2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;*;;;
+2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;;
+2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;;
+2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;;
+2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;;
+2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;;
+2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;;
+2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;;
+2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;;
+236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;;
+236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;;
+236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;;
+236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;;
+236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;;
+236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;;
+2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;;
+2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;;
+2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;;
+2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;;
+2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;;
+2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;;
+2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;;
+2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;;
+2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;;
+2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;;
+237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;;
+237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;;
+237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;;
+237E;BELL SYMBOL;So;0;ON;;;;;N;;;;;
+237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;;
+2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;;
+2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
+2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
+2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;;
+2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;;
+2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;;
+2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;;
+2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;;
+2388;HELM SYMBOL;So;0;ON;;;;;N;;;;;
+2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;pause;;;
+238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;break;;;
+238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;escape;;;
+238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;;
+238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;;
+238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;;
+238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
+2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
+2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
+2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
+2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;;
+2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;;
+2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;;
+2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;;
+2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;;
+2398;NEXT PAGE;So;0;ON;;;;;N;;;;;
+2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
+239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
+2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
+2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
+2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
+2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;;
+2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;;
+2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;;
+2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;;
+2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;;
+2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;;
+2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;;
+240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;;
+240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;;
+240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;;
+240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;;
+240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;;
+240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;;
+2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;;
+2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;;
+2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;;
+2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;;
+2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;;
+2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;;
+2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;;
+2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;;
+2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;;
+2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;;
+241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;;
+241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;;
+241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;;
+241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;;
+241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;;
+241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;;
+2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;;
+2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;;
+2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;;
+2423;OPEN BOX;So;0;ON;;;;;N;;;;;
+2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;;
+2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;;
+2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;;
+2440;OCR HOOK;So;0;ON;;;;;N;;;;;
+2441;OCR CHAIR;So;0;ON;;;;;N;;;;;
+2442;OCR FORK;So;0;ON;;;;;N;;;;;
+2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;;
+2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;;
+2445;OCR BOW TIE;So;0;ON;;;;;N;;;;;
+2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;;
+2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;;
+2448;OCR DASH;So;0;ON;;;;;N;;;;;
+2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;
+244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;
+2460;CIRCLED DIGIT ONE;No;0;EN;<circle> 0031;;1;1;N;;;;;
+2461;CIRCLED DIGIT TWO;No;0;EN;<circle> 0032;;2;2;N;;;;;
+2462;CIRCLED DIGIT THREE;No;0;EN;<circle> 0033;;3;3;N;;;;;
+2463;CIRCLED DIGIT FOUR;No;0;EN;<circle> 0034;;4;4;N;;;;;
+2464;CIRCLED DIGIT FIVE;No;0;EN;<circle> 0035;;5;5;N;;;;;
+2465;CIRCLED DIGIT SIX;No;0;EN;<circle> 0036;;6;6;N;;;;;
+2466;CIRCLED DIGIT SEVEN;No;0;EN;<circle> 0037;;7;7;N;;;;;
+2467;CIRCLED DIGIT EIGHT;No;0;EN;<circle> 0038;;8;8;N;;;;;
+2468;CIRCLED DIGIT NINE;No;0;EN;<circle> 0039;;9;9;N;;;;;
+2469;CIRCLED NUMBER TEN;No;0;EN;<circle> 0031 0030;;;10;N;;;;;
+246A;CIRCLED NUMBER ELEVEN;No;0;EN;<circle> 0031 0031;;;11;N;;;;;
+246B;CIRCLED NUMBER TWELVE;No;0;EN;<circle> 0031 0032;;;12;N;;;;;
+246C;CIRCLED NUMBER THIRTEEN;No;0;EN;<circle> 0031 0033;;;13;N;;;;;
+246D;CIRCLED NUMBER FOURTEEN;No;0;EN;<circle> 0031 0034;;;14;N;;;;;
+246E;CIRCLED NUMBER FIFTEEN;No;0;EN;<circle> 0031 0035;;;15;N;;;;;
+246F;CIRCLED NUMBER SIXTEEN;No;0;EN;<circle> 0031 0036;;;16;N;;;;;
+2470;CIRCLED NUMBER SEVENTEEN;No;0;EN;<circle> 0031 0037;;;17;N;;;;;
+2471;CIRCLED NUMBER EIGHTEEN;No;0;EN;<circle> 0031 0038;;;18;N;;;;;
+2472;CIRCLED NUMBER NINETEEN;No;0;EN;<circle> 0031 0039;;;19;N;;;;;
+2473;CIRCLED NUMBER TWENTY;No;0;EN;<circle> 0032 0030;;;20;N;;;;;
+2474;PARENTHESIZED DIGIT ONE;No;0;EN;<compat> 0028 0031 0029;;1;1;N;;;;;
+2475;PARENTHESIZED DIGIT TWO;No;0;EN;<compat> 0028 0032 0029;;2;2;N;;;;;
+2476;PARENTHESIZED DIGIT THREE;No;0;EN;<compat> 0028 0033 0029;;3;3;N;;;;;
+2477;PARENTHESIZED DIGIT FOUR;No;0;EN;<compat> 0028 0034 0029;;4;4;N;;;;;
+2478;PARENTHESIZED DIGIT FIVE;No;0;EN;<compat> 0028 0035 0029;;5;5;N;;;;;
+2479;PARENTHESIZED DIGIT SIX;No;0;EN;<compat> 0028 0036 0029;;6;6;N;;;;;
+247A;PARENTHESIZED DIGIT SEVEN;No;0;EN;<compat> 0028 0037 0029;;7;7;N;;;;;
+247B;PARENTHESIZED DIGIT EIGHT;No;0;EN;<compat> 0028 0038 0029;;8;8;N;;;;;
+247C;PARENTHESIZED DIGIT NINE;No;0;EN;<compat> 0028 0039 0029;;9;9;N;;;;;
+247D;PARENTHESIZED NUMBER TEN;No;0;EN;<compat> 0028 0031 0030 0029;;;10;N;;;;;
+247E;PARENTHESIZED NUMBER ELEVEN;No;0;EN;<compat> 0028 0031 0031 0029;;;11;N;;;;;
+247F;PARENTHESIZED NUMBER TWELVE;No;0;EN;<compat> 0028 0031 0032 0029;;;12;N;;;;;
+2480;PARENTHESIZED NUMBER THIRTEEN;No;0;EN;<compat> 0028 0031 0033 0029;;;13;N;;;;;
+2481;PARENTHESIZED NUMBER FOURTEEN;No;0;EN;<compat> 0028 0031 0034 0029;;;14;N;;;;;
+2482;PARENTHESIZED NUMBER FIFTEEN;No;0;EN;<compat> 0028 0031 0035 0029;;;15;N;;;;;
+2483;PARENTHESIZED NUMBER SIXTEEN;No;0;EN;<compat> 0028 0031 0036 0029;;;16;N;;;;;
+2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;EN;<compat> 0028 0031 0037 0029;;;17;N;;;;;
+2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;EN;<compat> 0028 0031 0038 0029;;;18;N;;;;;
+2486;PARENTHESIZED NUMBER NINETEEN;No;0;EN;<compat> 0028 0031 0039 0029;;;19;N;;;;;
+2487;PARENTHESIZED NUMBER TWENTY;No;0;EN;<compat> 0028 0032 0030 0029;;;20;N;;;;;
+2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;
+2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;
+248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;
+248B;DIGIT FOUR FULL STOP;No;0;EN;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;;
+248C;DIGIT FIVE FULL STOP;No;0;EN;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;;
+248D;DIGIT SIX FULL STOP;No;0;EN;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;;
+248E;DIGIT SEVEN FULL STOP;No;0;EN;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;;
+248F;DIGIT EIGHT FULL STOP;No;0;EN;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;;
+2490;DIGIT NINE FULL STOP;No;0;EN;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;;
+2491;NUMBER TEN FULL STOP;No;0;EN;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;;
+2492;NUMBER ELEVEN FULL STOP;No;0;EN;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;;
+2493;NUMBER TWELVE FULL STOP;No;0;EN;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;;
+2494;NUMBER THIRTEEN FULL STOP;No;0;EN;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;;
+2495;NUMBER FOURTEEN FULL STOP;No;0;EN;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;;
+2496;NUMBER FIFTEEN FULL STOP;No;0;EN;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;;
+2497;NUMBER SIXTEEN FULL STOP;No;0;EN;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;;
+2498;NUMBER SEVENTEEN FULL STOP;No;0;EN;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;;
+2499;NUMBER EIGHTEEN FULL STOP;No;0;EN;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;;
+249A;NUMBER NINETEEN FULL STOP;No;0;EN;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;;
+249B;NUMBER TWENTY FULL STOP;No;0;EN;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;;
+249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L;<compat> 0028 0061 0029;;;;N;;;;;
+249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L;<compat> 0028 0062 0029;;;;N;;;;;
+249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L;<compat> 0028 0063 0029;;;;N;;;;;
+249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L;<compat> 0028 0064 0029;;;;N;;;;;
+24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L;<compat> 0028 0065 0029;;;;N;;;;;
+24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L;<compat> 0028 0066 0029;;;;N;;;;;
+24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L;<compat> 0028 0067 0029;;;;N;;;;;
+24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L;<compat> 0028 0068 0029;;;;N;;;;;
+24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L;<compat> 0028 0069 0029;;;;N;;;;;
+24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L;<compat> 0028 006A 0029;;;;N;;;;;
+24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L;<compat> 0028 006B 0029;;;;N;;;;;
+24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L;<compat> 0028 006C 0029;;;;N;;;;;
+24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L;<compat> 0028 006D 0029;;;;N;;;;;
+24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L;<compat> 0028 006E 0029;;;;N;;;;;
+24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L;<compat> 0028 006F 0029;;;;N;;;;;
+24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L;<compat> 0028 0070 0029;;;;N;;;;;
+24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L;<compat> 0028 0071 0029;;;;N;;;;;
+24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L;<compat> 0028 0072 0029;;;;N;;;;;
+24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L;<compat> 0028 0073 0029;;;;N;;;;;
+24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L;<compat> 0028 0074 0029;;;;N;;;;;
+24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L;<compat> 0028 0075 0029;;;;N;;;;;
+24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L;<compat> 0028 0076 0029;;;;N;;;;;
+24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L;<compat> 0028 0077 0029;;;;N;;;;;
+24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L;<compat> 0028 0078 0029;;;;N;;;;;
+24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L;<compat> 0028 0079 0029;;;;N;;;;;
+24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L;<compat> 0028 007A 0029;;;;N;;;;;
+24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L;<circle> 0041;;;;N;;;;24D0;
+24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L;<circle> 0042;;;;N;;;;24D1;
+24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;24D2;
+24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L;<circle> 0044;;;;N;;;;24D3;
+24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L;<circle> 0045;;;;N;;;;24D4;
+24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L;<circle> 0046;;;;N;;;;24D5;
+24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L;<circle> 0047;;;;N;;;;24D6;
+24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L;<circle> 0048;;;;N;;;;24D7;
+24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L;<circle> 0049;;;;N;;;;24D8;
+24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L;<circle> 004A;;;;N;;;;24D9;
+24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L;<circle> 004B;;;;N;;;;24DA;
+24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L;<circle> 004C;;;;N;;;;24DB;
+24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L;<circle> 004D;;;;N;;;;24DC;
+24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L;<circle> 004E;;;;N;;;;24DD;
+24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L;<circle> 004F;;;;N;;;;24DE;
+24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L;<circle> 0050;;;;N;;;;24DF;
+24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L;<circle> 0051;;;;N;;;;24E0;
+24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;24E1;
+24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L;<circle> 0053;;;;N;;;;24E2;
+24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L;<circle> 0054;;;;N;;;;24E3;
+24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L;<circle> 0055;;;;N;;;;24E4;
+24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L;<circle> 0056;;;;N;;;;24E5;
+24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L;<circle> 0057;;;;N;;;;24E6;
+24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L;<circle> 0058;;;;N;;;;24E7;
+24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L;<circle> 0059;;;;N;;;;24E8;
+24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L;<circle> 005A;;;;N;;;;24E9;
+24D0;CIRCLED LATIN SMALL LETTER A;So;0;L;<circle> 0061;;;;N;;;24B6;;24B6
+24D1;CIRCLED LATIN SMALL LETTER B;So;0;L;<circle> 0062;;;;N;;;24B7;;24B7
+24D2;CIRCLED LATIN SMALL LETTER C;So;0;L;<circle> 0063;;;;N;;;24B8;;24B8
+24D3;CIRCLED LATIN SMALL LETTER D;So;0;L;<circle> 0064;;;;N;;;24B9;;24B9
+24D4;CIRCLED LATIN SMALL LETTER E;So;0;L;<circle> 0065;;;;N;;;24BA;;24BA
+24D5;CIRCLED LATIN SMALL LETTER F;So;0;L;<circle> 0066;;;;N;;;24BB;;24BB
+24D6;CIRCLED LATIN SMALL LETTER G;So;0;L;<circle> 0067;;;;N;;;24BC;;24BC
+24D7;CIRCLED LATIN SMALL LETTER H;So;0;L;<circle> 0068;;;;N;;;24BD;;24BD
+24D8;CIRCLED LATIN SMALL LETTER I;So;0;L;<circle> 0069;;;;N;;;24BE;;24BE
+24D9;CIRCLED LATIN SMALL LETTER J;So;0;L;<circle> 006A;;;;N;;;24BF;;24BF
+24DA;CIRCLED LATIN SMALL LETTER K;So;0;L;<circle> 006B;;;;N;;;24C0;;24C0
+24DB;CIRCLED LATIN SMALL LETTER L;So;0;L;<circle> 006C;;;;N;;;24C1;;24C1
+24DC;CIRCLED LATIN SMALL LETTER M;So;0;L;<circle> 006D;;;;N;;;24C2;;24C2
+24DD;CIRCLED LATIN SMALL LETTER N;So;0;L;<circle> 006E;;;;N;;;24C3;;24C3
+24DE;CIRCLED LATIN SMALL LETTER O;So;0;L;<circle> 006F;;;;N;;;24C4;;24C4
+24DF;CIRCLED LATIN SMALL LETTER P;So;0;L;<circle> 0070;;;;N;;;24C5;;24C5
+24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L;<circle> 0071;;;;N;;;24C6;;24C6
+24E1;CIRCLED LATIN SMALL LETTER R;So;0;L;<circle> 0072;;;;N;;;24C7;;24C7
+24E2;CIRCLED LATIN SMALL LETTER S;So;0;L;<circle> 0073;;;;N;;;24C8;;24C8
+24E3;CIRCLED LATIN SMALL LETTER T;So;0;L;<circle> 0074;;;;N;;;24C9;;24C9
+24E4;CIRCLED LATIN SMALL LETTER U;So;0;L;<circle> 0075;;;;N;;;24CA;;24CA
+24E5;CIRCLED LATIN SMALL LETTER V;So;0;L;<circle> 0076;;;;N;;;24CB;;24CB
+24E6;CIRCLED LATIN SMALL LETTER W;So;0;L;<circle> 0077;;;;N;;;24CC;;24CC
+24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD
+24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE
+24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF
+24EA;CIRCLED DIGIT ZERO;No;0;EN;<circle> 0030;;0;0;N;;;;;
+2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;;
+2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;;
+2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;;
+2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;;
+2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;;
+2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;;
+2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;;
+2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;;
+2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;;
+2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;;
+250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;;
+250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;;
+250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;;
+250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;;
+250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;;
+250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;;
+2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;;
+2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;;
+2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;;
+2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;;
+2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;;
+2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;;
+2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;;
+2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;;
+2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;;
+2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;;
+251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;;
+251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;;
+251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;;
+251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;;
+251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;;
+251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;;
+2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;;
+2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;;
+2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;;
+2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;;
+2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;;
+2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;;
+2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;;
+2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;;
+2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;;
+252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;;
+252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;;
+252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;;
+252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;;
+252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;;
+252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;;
+2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;;
+2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;;
+2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;;
+2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;;
+2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;;
+2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;;
+2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;;
+2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;;
+2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;;
+2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;;
+253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;;
+253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;;
+253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;;
+253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;;
+253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;;
+253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;;
+2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;;
+2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;;
+2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;;
+2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;;
+2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;;
+2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;;
+2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;;
+2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;;
+2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;;
+254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;;
+254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;;
+254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;;
+254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;;
+254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;;
+254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;;
+2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;;
+2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;;
+2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;;
+2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;;
+2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;;
+2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;;
+2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;;
+2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;;
+2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;;
+2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;;
+255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;;
+255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;;
+255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;;
+255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;;
+255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;;
+255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;;
+2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;;
+2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;;
+2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;;
+2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;;
+2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;;
+2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;;
+2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;;
+2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;;
+2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;;
+2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;;
+256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;;
+256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;;
+256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;;
+256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;;
+256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;;
+256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;;
+2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;;
+2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;;
+2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;;
+2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;;
+2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;;
+2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;;
+2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;;
+2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;;
+2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;;
+2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;;
+257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;;
+257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;;
+257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;;
+257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;;
+257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;;
+257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;;
+2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;;
+2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2588;FULL BLOCK;So;0;ON;;;;;N;;;;;
+2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;;
+258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;;
+258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
+2591;LIGHT SHADE;So;0;ON;;;;;N;;;;;
+2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+2593;DARK SHADE;So;0;ON;;;;;N;;;;;
+2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;;
+25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;;
+25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
+25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;;
+25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;
+25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;
+25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;;
+25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;;
+25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;;
+25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;;
+25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;;
+25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;;
+25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;;
+25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;;
+25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;;
+25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;;
+25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;;
+25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;;
+25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;;
+25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;;
+25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;;
+25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;;
+25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;;
+25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;;
+25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;;
+25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;;
+25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;;
+25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;;
+25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;;
+25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;;
+25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
+25C9;FISHEYE;So;0;ON;;;;;N;;;;;
+25CA;LOZENGE;So;0;ON;;;;;N;;;;;
+25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;;
+25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25CE;BULLSEYE;So;0;ON;;;;;N;;;;;
+25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;;
+25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E6;WHITE BULLET;So;0;ON;;;;;N;;;;;
+25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;;
+25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;;
+25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;;
+25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;;
+25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;;
+25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+2601;CLOUD;So;0;ON;;;;;N;;;;;
+2602;UMBRELLA;So;0;ON;;;;;N;;;;;
+2603;SNOWMAN;So;0;ON;;;;;N;;;;;
+2604;COMET;So;0;ON;;;;;N;;;;;
+2605;BLACK STAR;So;0;ON;;;;;N;;;;;
+2606;WHITE STAR;So;0;ON;;;;;N;;;;;
+2607;LIGHTNING;So;0;ON;;;;;N;;;;;
+2608;THUNDERSTORM;So;0;ON;;;;;N;;;;;
+2609;SUN;So;0;ON;;;;;N;;;;;
+260A;ASCENDING NODE;So;0;ON;;;;;N;;;;;
+260B;DESCENDING NODE;So;0;ON;;;;;N;;;;;
+260C;CONJUNCTION;So;0;ON;;;;;N;;;;;
+260D;OPPOSITION;So;0;ON;;;;;N;;;;;
+260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;;
+260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;;
+2610;BALLOT BOX;So;0;ON;;;;;N;;;;;
+2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;;
+2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;;
+2613;SALTIRE;So;0;ON;;;;;N;;;;;
+2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;
+261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
+2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;
+2621;CAUTION SIGN;So;0;ON;;;;;N;;;;;
+2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;;
+2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;;
+2624;CADUCEUS;So;0;ON;;;;;N;;;;;
+2625;ANKH;So;0;ON;;;;;N;;;;;
+2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;;
+2627;CHI RHO;So;0;ON;;;;;N;;;;;
+2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;;
+2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;;
+262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;;
+262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;;
+262C;ADI SHAKTI;So;0;ON;;;;;N;;;;;
+262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;;
+262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;;
+262F;YIN YANG;So;0;ON;;;;;N;;;;;
+2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;;
+2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;;
+2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;;
+2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;;
+2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;;
+2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;;
+2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;;
+2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
+2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;;
+2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;;
+263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;;
+263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;;
+263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263F;MERCURY;So;0;ON;;;;;N;;;;;
+2640;FEMALE SIGN;So;0;ON;;;;;N;;;;;
+2641;EARTH;So;0;ON;;;;;N;;;;;
+2642;MALE SIGN;So;0;ON;;;;;N;;;;;
+2643;JUPITER;So;0;ON;;;;;N;;;;;
+2644;SATURN;So;0;ON;;;;;N;;;;;
+2645;URANUS;So;0;ON;;;;;N;;;;;
+2646;NEPTUNE;So;0;ON;;;;;N;;;;;
+2647;PLUTO;So;0;ON;;;;;N;;;;;
+2648;ARIES;So;0;ON;;;;;N;;;;;
+2649;TAURUS;So;0;ON;;;;;N;;;;;
+264A;GEMINI;So;0;ON;;;;;N;;;;;
+264B;CANCER;So;0;ON;;;;;N;;;;;
+264C;LEO;So;0;ON;;;;;N;;;;;
+264D;VIRGO;So;0;ON;;;;;N;;;;;
+264E;LIBRA;So;0;ON;;;;;N;;;;;
+264F;SCORPIUS;So;0;ON;;;;;N;;;;;
+2650;SAGITTARIUS;So;0;ON;;;;;N;;;;;
+2651;CAPRICORN;So;0;ON;;;;;N;;;;;
+2652;AQUARIUS;So;0;ON;;;;;N;;;;;
+2653;PISCES;So;0;ON;;;;;N;;;;;
+2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;;
+2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;;
+2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;;
+2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;;
+2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;;
+265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;;
+265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;;
+265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;;
+265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;;
+265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;;
+2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;;
+2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;;
+2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;;
+2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;;
+2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;;
+2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;;
+2668;HOT SPRINGS;So;0;ON;;;;;N;;;;;
+2669;QUARTER NOTE;So;0;ON;;;;;N;;;;;
+266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;;
+266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;;
+266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;;
+266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;;
+266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;;
+266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;;
+2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
+2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
+2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
+2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;;
+2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;;
+2707;TAPE DRIVE;So;0;ON;;;;;N;;;;;
+2708;AIRPLANE;So;0;ON;;;;;N;;;;;
+2709;ENVELOPE;So;0;ON;;;;;N;;;;;
+270C;VICTORY HAND;So;0;ON;;;;;N;;;;;
+270D;WRITING HAND;So;0;ON;;;;;N;;;;;
+270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+270F;PENCIL;So;0;ON;;;;;N;;;;;
+2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+2711;WHITE NIB;So;0;ON;;;;;N;;;;;
+2712;BLACK NIB;So;0;ON;;;;;N;;;;;
+2713;CHECK MARK;So;0;ON;;;;;N;;;;;
+2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
+2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2717;BALLOT X;So;0;ON;;;;;N;;;;;
+2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;;
+2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;;
+271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;
+271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;;
+271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;;
+271D;LATIN CROSS;So;0;ON;;;;;N;;;;;
+271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;
+271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;;
+2720;MALTESE CROSS;So;0;ON;;;;;N;;;;;
+2721;STAR OF DAVID;So;0;ON;;;;;N;;;;;
+2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
+272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;;
+272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;;
+272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;;
+272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;;
+2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;;
+2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;;
+2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;;
+273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;;
+273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;;
+2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;;
+2744;SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2747;SPARKLE;So;0;ON;;;;;N;;;;;
+2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;;
+2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;;
+2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;;
+2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;;
+2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;;
+2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;;
+2766;FLORAL HEART;So;0;ON;;;;;N;;;;;
+2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;;
+2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;;
+2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;;
+2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;;
+277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;;
+277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;;
+277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;;
+277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;;
+277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;;
+277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;;
+2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;;
+2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;;
+2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;;
+2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;;
+2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;;
+2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;;
+2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;;
+2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;;
+278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;;
+278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;;
+278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;;
+278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;;
+278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;;
+278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;;
+2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;;
+2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;;
+2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;;
+2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;;
+2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;;
+279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;;
+279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;;
+279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;;
+279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;;
+279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;;
+279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;;
+27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;;
+27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;;
+27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;;
+27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;;
+27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;;
+27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;;
+27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;;
+27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;;
+27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;;
+27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;;
+27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;;
+27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;;
+27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;;
+27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;;
+27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;;
+27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
+27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
+27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
+2800;BRAILLE PATTERN BLANK;So;0;ON;;;;;N;;;;;
+2801;BRAILLE PATTERN DOTS-1;So;0;ON;;;;;N;;;;;
+2802;BRAILLE PATTERN DOTS-2;So;0;ON;;;;;N;;;;;
+2803;BRAILLE PATTERN DOTS-12;So;0;ON;;;;;N;;;;;
+2804;BRAILLE PATTERN DOTS-3;So;0;ON;;;;;N;;;;;
+2805;BRAILLE PATTERN DOTS-13;So;0;ON;;;;;N;;;;;
+2806;BRAILLE PATTERN DOTS-23;So;0;ON;;;;;N;;;;;
+2807;BRAILLE PATTERN DOTS-123;So;0;ON;;;;;N;;;;;
+2808;BRAILLE PATTERN DOTS-4;So;0;ON;;;;;N;;;;;
+2809;BRAILLE PATTERN DOTS-14;So;0;ON;;;;;N;;;;;
+280A;BRAILLE PATTERN DOTS-24;So;0;ON;;;;;N;;;;;
+280B;BRAILLE PATTERN DOTS-124;So;0;ON;;;;;N;;;;;
+280C;BRAILLE PATTERN DOTS-34;So;0;ON;;;;;N;;;;;
+280D;BRAILLE PATTERN DOTS-134;So;0;ON;;;;;N;;;;;
+280E;BRAILLE PATTERN DOTS-234;So;0;ON;;;;;N;;;;;
+280F;BRAILLE PATTERN DOTS-1234;So;0;ON;;;;;N;;;;;
+2810;BRAILLE PATTERN DOTS-5;So;0;ON;;;;;N;;;;;
+2811;BRAILLE PATTERN DOTS-15;So;0;ON;;;;;N;;;;;
+2812;BRAILLE PATTERN DOTS-25;So;0;ON;;;;;N;;;;;
+2813;BRAILLE PATTERN DOTS-125;So;0;ON;;;;;N;;;;;
+2814;BRAILLE PATTERN DOTS-35;So;0;ON;;;;;N;;;;;
+2815;BRAILLE PATTERN DOTS-135;So;0;ON;;;;;N;;;;;
+2816;BRAILLE PATTERN DOTS-235;So;0;ON;;;;;N;;;;;
+2817;BRAILLE PATTERN DOTS-1235;So;0;ON;;;;;N;;;;;
+2818;BRAILLE PATTERN DOTS-45;So;0;ON;;;;;N;;;;;
+2819;BRAILLE PATTERN DOTS-145;So;0;ON;;;;;N;;;;;
+281A;BRAILLE PATTERN DOTS-245;So;0;ON;;;;;N;;;;;
+281B;BRAILLE PATTERN DOTS-1245;So;0;ON;;;;;N;;;;;
+281C;BRAILLE PATTERN DOTS-345;So;0;ON;;;;;N;;;;;
+281D;BRAILLE PATTERN DOTS-1345;So;0;ON;;;;;N;;;;;
+281E;BRAILLE PATTERN DOTS-2345;So;0;ON;;;;;N;;;;;
+281F;BRAILLE PATTERN DOTS-12345;So;0;ON;;;;;N;;;;;
+2820;BRAILLE PATTERN DOTS-6;So;0;ON;;;;;N;;;;;
+2821;BRAILLE PATTERN DOTS-16;So;0;ON;;;;;N;;;;;
+2822;BRAILLE PATTERN DOTS-26;So;0;ON;;;;;N;;;;;
+2823;BRAILLE PATTERN DOTS-126;So;0;ON;;;;;N;;;;;
+2824;BRAILLE PATTERN DOTS-36;So;0;ON;;;;;N;;;;;
+2825;BRAILLE PATTERN DOTS-136;So;0;ON;;;;;N;;;;;
+2826;BRAILLE PATTERN DOTS-236;So;0;ON;;;;;N;;;;;
+2827;BRAILLE PATTERN DOTS-1236;So;0;ON;;;;;N;;;;;
+2828;BRAILLE PATTERN DOTS-46;So;0;ON;;;;;N;;;;;
+2829;BRAILLE PATTERN DOTS-146;So;0;ON;;;;;N;;;;;
+282A;BRAILLE PATTERN DOTS-246;So;0;ON;;;;;N;;;;;
+282B;BRAILLE PATTERN DOTS-1246;So;0;ON;;;;;N;;;;;
+282C;BRAILLE PATTERN DOTS-346;So;0;ON;;;;;N;;;;;
+282D;BRAILLE PATTERN DOTS-1346;So;0;ON;;;;;N;;;;;
+282E;BRAILLE PATTERN DOTS-2346;So;0;ON;;;;;N;;;;;
+282F;BRAILLE PATTERN DOTS-12346;So;0;ON;;;;;N;;;;;
+2830;BRAILLE PATTERN DOTS-56;So;0;ON;;;;;N;;;;;
+2831;BRAILLE PATTERN DOTS-156;So;0;ON;;;;;N;;;;;
+2832;BRAILLE PATTERN DOTS-256;So;0;ON;;;;;N;;;;;
+2833;BRAILLE PATTERN DOTS-1256;So;0;ON;;;;;N;;;;;
+2834;BRAILLE PATTERN DOTS-356;So;0;ON;;;;;N;;;;;
+2835;BRAILLE PATTERN DOTS-1356;So;0;ON;;;;;N;;;;;
+2836;BRAILLE PATTERN DOTS-2356;So;0;ON;;;;;N;;;;;
+2837;BRAILLE PATTERN DOTS-12356;So;0;ON;;;;;N;;;;;
+2838;BRAILLE PATTERN DOTS-456;So;0;ON;;;;;N;;;;;
+2839;BRAILLE PATTERN DOTS-1456;So;0;ON;;;;;N;;;;;
+283A;BRAILLE PATTERN DOTS-2456;So;0;ON;;;;;N;;;;;
+283B;BRAILLE PATTERN DOTS-12456;So;0;ON;;;;;N;;;;;
+283C;BRAILLE PATTERN DOTS-3456;So;0;ON;;;;;N;;;;;
+283D;BRAILLE PATTERN DOTS-13456;So;0;ON;;;;;N;;;;;
+283E;BRAILLE PATTERN DOTS-23456;So;0;ON;;;;;N;;;;;
+283F;BRAILLE PATTERN DOTS-123456;So;0;ON;;;;;N;;;;;
+2840;BRAILLE PATTERN DOTS-7;So;0;ON;;;;;N;;;;;
+2841;BRAILLE PATTERN DOTS-17;So;0;ON;;;;;N;;;;;
+2842;BRAILLE PATTERN DOTS-27;So;0;ON;;;;;N;;;;;
+2843;BRAILLE PATTERN DOTS-127;So;0;ON;;;;;N;;;;;
+2844;BRAILLE PATTERN DOTS-37;So;0;ON;;;;;N;;;;;
+2845;BRAILLE PATTERN DOTS-137;So;0;ON;;;;;N;;;;;
+2846;BRAILLE PATTERN DOTS-237;So;0;ON;;;;;N;;;;;
+2847;BRAILLE PATTERN DOTS-1237;So;0;ON;;;;;N;;;;;
+2848;BRAILLE PATTERN DOTS-47;So;0;ON;;;;;N;;;;;
+2849;BRAILLE PATTERN DOTS-147;So;0;ON;;;;;N;;;;;
+284A;BRAILLE PATTERN DOTS-247;So;0;ON;;;;;N;;;;;
+284B;BRAILLE PATTERN DOTS-1247;So;0;ON;;;;;N;;;;;
+284C;BRAILLE PATTERN DOTS-347;So;0;ON;;;;;N;;;;;
+284D;BRAILLE PATTERN DOTS-1347;So;0;ON;;;;;N;;;;;
+284E;BRAILLE PATTERN DOTS-2347;So;0;ON;;;;;N;;;;;
+284F;BRAILLE PATTERN DOTS-12347;So;0;ON;;;;;N;;;;;
+2850;BRAILLE PATTERN DOTS-57;So;0;ON;;;;;N;;;;;
+2851;BRAILLE PATTERN DOTS-157;So;0;ON;;;;;N;;;;;
+2852;BRAILLE PATTERN DOTS-257;So;0;ON;;;;;N;;;;;
+2853;BRAILLE PATTERN DOTS-1257;So;0;ON;;;;;N;;;;;
+2854;BRAILLE PATTERN DOTS-357;So;0;ON;;;;;N;;;;;
+2855;BRAILLE PATTERN DOTS-1357;So;0;ON;;;;;N;;;;;
+2856;BRAILLE PATTERN DOTS-2357;So;0;ON;;;;;N;;;;;
+2857;BRAILLE PATTERN DOTS-12357;So;0;ON;;;;;N;;;;;
+2858;BRAILLE PATTERN DOTS-457;So;0;ON;;;;;N;;;;;
+2859;BRAILLE PATTERN DOTS-1457;So;0;ON;;;;;N;;;;;
+285A;BRAILLE PATTERN DOTS-2457;So;0;ON;;;;;N;;;;;
+285B;BRAILLE PATTERN DOTS-12457;So;0;ON;;;;;N;;;;;
+285C;BRAILLE PATTERN DOTS-3457;So;0;ON;;;;;N;;;;;
+285D;BRAILLE PATTERN DOTS-13457;So;0;ON;;;;;N;;;;;
+285E;BRAILLE PATTERN DOTS-23457;So;0;ON;;;;;N;;;;;
+285F;BRAILLE PATTERN DOTS-123457;So;0;ON;;;;;N;;;;;
+2860;BRAILLE PATTERN DOTS-67;So;0;ON;;;;;N;;;;;
+2861;BRAILLE PATTERN DOTS-167;So;0;ON;;;;;N;;;;;
+2862;BRAILLE PATTERN DOTS-267;So;0;ON;;;;;N;;;;;
+2863;BRAILLE PATTERN DOTS-1267;So;0;ON;;;;;N;;;;;
+2864;BRAILLE PATTERN DOTS-367;So;0;ON;;;;;N;;;;;
+2865;BRAILLE PATTERN DOTS-1367;So;0;ON;;;;;N;;;;;
+2866;BRAILLE PATTERN DOTS-2367;So;0;ON;;;;;N;;;;;
+2867;BRAILLE PATTERN DOTS-12367;So;0;ON;;;;;N;;;;;
+2868;BRAILLE PATTERN DOTS-467;So;0;ON;;;;;N;;;;;
+2869;BRAILLE PATTERN DOTS-1467;So;0;ON;;;;;N;;;;;
+286A;BRAILLE PATTERN DOTS-2467;So;0;ON;;;;;N;;;;;
+286B;BRAILLE PATTERN DOTS-12467;So;0;ON;;;;;N;;;;;
+286C;BRAILLE PATTERN DOTS-3467;So;0;ON;;;;;N;;;;;
+286D;BRAILLE PATTERN DOTS-13467;So;0;ON;;;;;N;;;;;
+286E;BRAILLE PATTERN DOTS-23467;So;0;ON;;;;;N;;;;;
+286F;BRAILLE PATTERN DOTS-123467;So;0;ON;;;;;N;;;;;
+2870;BRAILLE PATTERN DOTS-567;So;0;ON;;;;;N;;;;;
+2871;BRAILLE PATTERN DOTS-1567;So;0;ON;;;;;N;;;;;
+2872;BRAILLE PATTERN DOTS-2567;So;0;ON;;;;;N;;;;;
+2873;BRAILLE PATTERN DOTS-12567;So;0;ON;;;;;N;;;;;
+2874;BRAILLE PATTERN DOTS-3567;So;0;ON;;;;;N;;;;;
+2875;BRAILLE PATTERN DOTS-13567;So;0;ON;;;;;N;;;;;
+2876;BRAILLE PATTERN DOTS-23567;So;0;ON;;;;;N;;;;;
+2877;BRAILLE PATTERN DOTS-123567;So;0;ON;;;;;N;;;;;
+2878;BRAILLE PATTERN DOTS-4567;So;0;ON;;;;;N;;;;;
+2879;BRAILLE PATTERN DOTS-14567;So;0;ON;;;;;N;;;;;
+287A;BRAILLE PATTERN DOTS-24567;So;0;ON;;;;;N;;;;;
+287B;BRAILLE PATTERN DOTS-124567;So;0;ON;;;;;N;;;;;
+287C;BRAILLE PATTERN DOTS-34567;So;0;ON;;;;;N;;;;;
+287D;BRAILLE PATTERN DOTS-134567;So;0;ON;;;;;N;;;;;
+287E;BRAILLE PATTERN DOTS-234567;So;0;ON;;;;;N;;;;;
+287F;BRAILLE PATTERN DOTS-1234567;So;0;ON;;;;;N;;;;;
+2880;BRAILLE PATTERN DOTS-8;So;0;ON;;;;;N;;;;;
+2881;BRAILLE PATTERN DOTS-18;So;0;ON;;;;;N;;;;;
+2882;BRAILLE PATTERN DOTS-28;So;0;ON;;;;;N;;;;;
+2883;BRAILLE PATTERN DOTS-128;So;0;ON;;;;;N;;;;;
+2884;BRAILLE PATTERN DOTS-38;So;0;ON;;;;;N;;;;;
+2885;BRAILLE PATTERN DOTS-138;So;0;ON;;;;;N;;;;;
+2886;BRAILLE PATTERN DOTS-238;So;0;ON;;;;;N;;;;;
+2887;BRAILLE PATTERN DOTS-1238;So;0;ON;;;;;N;;;;;
+2888;BRAILLE PATTERN DOTS-48;So;0;ON;;;;;N;;;;;
+2889;BRAILLE PATTERN DOTS-148;So;0;ON;;;;;N;;;;;
+288A;BRAILLE PATTERN DOTS-248;So;0;ON;;;;;N;;;;;
+288B;BRAILLE PATTERN DOTS-1248;So;0;ON;;;;;N;;;;;
+288C;BRAILLE PATTERN DOTS-348;So;0;ON;;;;;N;;;;;
+288D;BRAILLE PATTERN DOTS-1348;So;0;ON;;;;;N;;;;;
+288E;BRAILLE PATTERN DOTS-2348;So;0;ON;;;;;N;;;;;
+288F;BRAILLE PATTERN DOTS-12348;So;0;ON;;;;;N;;;;;
+2890;BRAILLE PATTERN DOTS-58;So;0;ON;;;;;N;;;;;
+2891;BRAILLE PATTERN DOTS-158;So;0;ON;;;;;N;;;;;
+2892;BRAILLE PATTERN DOTS-258;So;0;ON;;;;;N;;;;;
+2893;BRAILLE PATTERN DOTS-1258;So;0;ON;;;;;N;;;;;
+2894;BRAILLE PATTERN DOTS-358;So;0;ON;;;;;N;;;;;
+2895;BRAILLE PATTERN DOTS-1358;So;0;ON;;;;;N;;;;;
+2896;BRAILLE PATTERN DOTS-2358;So;0;ON;;;;;N;;;;;
+2897;BRAILLE PATTERN DOTS-12358;So;0;ON;;;;;N;;;;;
+2898;BRAILLE PATTERN DOTS-458;So;0;ON;;;;;N;;;;;
+2899;BRAILLE PATTERN DOTS-1458;So;0;ON;;;;;N;;;;;
+289A;BRAILLE PATTERN DOTS-2458;So;0;ON;;;;;N;;;;;
+289B;BRAILLE PATTERN DOTS-12458;So;0;ON;;;;;N;;;;;
+289C;BRAILLE PATTERN DOTS-3458;So;0;ON;;;;;N;;;;;
+289D;BRAILLE PATTERN DOTS-13458;So;0;ON;;;;;N;;;;;
+289E;BRAILLE PATTERN DOTS-23458;So;0;ON;;;;;N;;;;;
+289F;BRAILLE PATTERN DOTS-123458;So;0;ON;;;;;N;;;;;
+28A0;BRAILLE PATTERN DOTS-68;So;0;ON;;;;;N;;;;;
+28A1;BRAILLE PATTERN DOTS-168;So;0;ON;;;;;N;;;;;
+28A2;BRAILLE PATTERN DOTS-268;So;0;ON;;;;;N;;;;;
+28A3;BRAILLE PATTERN DOTS-1268;So;0;ON;;;;;N;;;;;
+28A4;BRAILLE PATTERN DOTS-368;So;0;ON;;;;;N;;;;;
+28A5;BRAILLE PATTERN DOTS-1368;So;0;ON;;;;;N;;;;;
+28A6;BRAILLE PATTERN DOTS-2368;So;0;ON;;;;;N;;;;;
+28A7;BRAILLE PATTERN DOTS-12368;So;0;ON;;;;;N;;;;;
+28A8;BRAILLE PATTERN DOTS-468;So;0;ON;;;;;N;;;;;
+28A9;BRAILLE PATTERN DOTS-1468;So;0;ON;;;;;N;;;;;
+28AA;BRAILLE PATTERN DOTS-2468;So;0;ON;;;;;N;;;;;
+28AB;BRAILLE PATTERN DOTS-12468;So;0;ON;;;;;N;;;;;
+28AC;BRAILLE PATTERN DOTS-3468;So;0;ON;;;;;N;;;;;
+28AD;BRAILLE PATTERN DOTS-13468;So;0;ON;;;;;N;;;;;
+28AE;BRAILLE PATTERN DOTS-23468;So;0;ON;;;;;N;;;;;
+28AF;BRAILLE PATTERN DOTS-123468;So;0;ON;;;;;N;;;;;
+28B0;BRAILLE PATTERN DOTS-568;So;0;ON;;;;;N;;;;;
+28B1;BRAILLE PATTERN DOTS-1568;So;0;ON;;;;;N;;;;;
+28B2;BRAILLE PATTERN DOTS-2568;So;0;ON;;;;;N;;;;;
+28B3;BRAILLE PATTERN DOTS-12568;So;0;ON;;;;;N;;;;;
+28B4;BRAILLE PATTERN DOTS-3568;So;0;ON;;;;;N;;;;;
+28B5;BRAILLE PATTERN DOTS-13568;So;0;ON;;;;;N;;;;;
+28B6;BRAILLE PATTERN DOTS-23568;So;0;ON;;;;;N;;;;;
+28B7;BRAILLE PATTERN DOTS-123568;So;0;ON;;;;;N;;;;;
+28B8;BRAILLE PATTERN DOTS-4568;So;0;ON;;;;;N;;;;;
+28B9;BRAILLE PATTERN DOTS-14568;So;0;ON;;;;;N;;;;;
+28BA;BRAILLE PATTERN DOTS-24568;So;0;ON;;;;;N;;;;;
+28BB;BRAILLE PATTERN DOTS-124568;So;0;ON;;;;;N;;;;;
+28BC;BRAILLE PATTERN DOTS-34568;So;0;ON;;;;;N;;;;;
+28BD;BRAILLE PATTERN DOTS-134568;So;0;ON;;;;;N;;;;;
+28BE;BRAILLE PATTERN DOTS-234568;So;0;ON;;;;;N;;;;;
+28BF;BRAILLE PATTERN DOTS-1234568;So;0;ON;;;;;N;;;;;
+28C0;BRAILLE PATTERN DOTS-78;So;0;ON;;;;;N;;;;;
+28C1;BRAILLE PATTERN DOTS-178;So;0;ON;;;;;N;;;;;
+28C2;BRAILLE PATTERN DOTS-278;So;0;ON;;;;;N;;;;;
+28C3;BRAILLE PATTERN DOTS-1278;So;0;ON;;;;;N;;;;;
+28C4;BRAILLE PATTERN DOTS-378;So;0;ON;;;;;N;;;;;
+28C5;BRAILLE PATTERN DOTS-1378;So;0;ON;;;;;N;;;;;
+28C6;BRAILLE PATTERN DOTS-2378;So;0;ON;;;;;N;;;;;
+28C7;BRAILLE PATTERN DOTS-12378;So;0;ON;;;;;N;;;;;
+28C8;BRAILLE PATTERN DOTS-478;So;0;ON;;;;;N;;;;;
+28C9;BRAILLE PATTERN DOTS-1478;So;0;ON;;;;;N;;;;;
+28CA;BRAILLE PATTERN DOTS-2478;So;0;ON;;;;;N;;;;;
+28CB;BRAILLE PATTERN DOTS-12478;So;0;ON;;;;;N;;;;;
+28CC;BRAILLE PATTERN DOTS-3478;So;0;ON;;;;;N;;;;;
+28CD;BRAILLE PATTERN DOTS-13478;So;0;ON;;;;;N;;;;;
+28CE;BRAILLE PATTERN DOTS-23478;So;0;ON;;;;;N;;;;;
+28CF;BRAILLE PATTERN DOTS-123478;So;0;ON;;;;;N;;;;;
+28D0;BRAILLE PATTERN DOTS-578;So;0;ON;;;;;N;;;;;
+28D1;BRAILLE PATTERN DOTS-1578;So;0;ON;;;;;N;;;;;
+28D2;BRAILLE PATTERN DOTS-2578;So;0;ON;;;;;N;;;;;
+28D3;BRAILLE PATTERN DOTS-12578;So;0;ON;;;;;N;;;;;
+28D4;BRAILLE PATTERN DOTS-3578;So;0;ON;;;;;N;;;;;
+28D5;BRAILLE PATTERN DOTS-13578;So;0;ON;;;;;N;;;;;
+28D6;BRAILLE PATTERN DOTS-23578;So;0;ON;;;;;N;;;;;
+28D7;BRAILLE PATTERN DOTS-123578;So;0;ON;;;;;N;;;;;
+28D8;BRAILLE PATTERN DOTS-4578;So;0;ON;;;;;N;;;;;
+28D9;BRAILLE PATTERN DOTS-14578;So;0;ON;;;;;N;;;;;
+28DA;BRAILLE PATTERN DOTS-24578;So;0;ON;;;;;N;;;;;
+28DB;BRAILLE PATTERN DOTS-124578;So;0;ON;;;;;N;;;;;
+28DC;BRAILLE PATTERN DOTS-34578;So;0;ON;;;;;N;;;;;
+28DD;BRAILLE PATTERN DOTS-134578;So;0;ON;;;;;N;;;;;
+28DE;BRAILLE PATTERN DOTS-234578;So;0;ON;;;;;N;;;;;
+28DF;BRAILLE PATTERN DOTS-1234578;So;0;ON;;;;;N;;;;;
+28E0;BRAILLE PATTERN DOTS-678;So;0;ON;;;;;N;;;;;
+28E1;BRAILLE PATTERN DOTS-1678;So;0;ON;;;;;N;;;;;
+28E2;BRAILLE PATTERN DOTS-2678;So;0;ON;;;;;N;;;;;
+28E3;BRAILLE PATTERN DOTS-12678;So;0;ON;;;;;N;;;;;
+28E4;BRAILLE PATTERN DOTS-3678;So;0;ON;;;;;N;;;;;
+28E5;BRAILLE PATTERN DOTS-13678;So;0;ON;;;;;N;;;;;
+28E6;BRAILLE PATTERN DOTS-23678;So;0;ON;;;;;N;;;;;
+28E7;BRAILLE PATTERN DOTS-123678;So;0;ON;;;;;N;;;;;
+28E8;BRAILLE PATTERN DOTS-4678;So;0;ON;;;;;N;;;;;
+28E9;BRAILLE PATTERN DOTS-14678;So;0;ON;;;;;N;;;;;
+28EA;BRAILLE PATTERN DOTS-24678;So;0;ON;;;;;N;;;;;
+28EB;BRAILLE PATTERN DOTS-124678;So;0;ON;;;;;N;;;;;
+28EC;BRAILLE PATTERN DOTS-34678;So;0;ON;;;;;N;;;;;
+28ED;BRAILLE PATTERN DOTS-134678;So;0;ON;;;;;N;;;;;
+28EE;BRAILLE PATTERN DOTS-234678;So;0;ON;;;;;N;;;;;
+28EF;BRAILLE PATTERN DOTS-1234678;So;0;ON;;;;;N;;;;;
+28F0;BRAILLE PATTERN DOTS-5678;So;0;ON;;;;;N;;;;;
+28F1;BRAILLE PATTERN DOTS-15678;So;0;ON;;;;;N;;;;;
+28F2;BRAILLE PATTERN DOTS-25678;So;0;ON;;;;;N;;;;;
+28F3;BRAILLE PATTERN DOTS-125678;So;0;ON;;;;;N;;;;;
+28F4;BRAILLE PATTERN DOTS-35678;So;0;ON;;;;;N;;;;;
+28F5;BRAILLE PATTERN DOTS-135678;So;0;ON;;;;;N;;;;;
+28F6;BRAILLE PATTERN DOTS-235678;So;0;ON;;;;;N;;;;;
+28F7;BRAILLE PATTERN DOTS-1235678;So;0;ON;;;;;N;;;;;
+28F8;BRAILLE PATTERN DOTS-45678;So;0;ON;;;;;N;;;;;
+28F9;BRAILLE PATTERN DOTS-145678;So;0;ON;;;;;N;;;;;
+28FA;BRAILLE PATTERN DOTS-245678;So;0;ON;;;;;N;;;;;
+28FB;BRAILLE PATTERN DOTS-1245678;So;0;ON;;;;;N;;;;;
+28FC;BRAILLE PATTERN DOTS-345678;So;0;ON;;;;;N;;;;;
+28FD;BRAILLE PATTERN DOTS-1345678;So;0;ON;;;;;N;;;;;
+28FE;BRAILLE PATTERN DOTS-2345678;So;0;ON;;;;;N;;;;;
+28FF;BRAILLE PATTERN DOTS-12345678;So;0;ON;;;;;N;;;;;
+2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
+2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
+2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
+2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;;
+2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;;
+2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;;
+2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;;
+2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;;
+2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;;
+2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;;
+2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;;
+2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;;
+2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;;
+2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;;
+2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;;
+2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;;
+2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;;
+2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;;
+2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;;
+2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;;
+2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;;
+2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;;
+2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;;
+2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;;
+2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;;
+2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;;
+2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;;
+2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;;
+2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;;
+2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;;
+2E9F;CJK RADICAL MOTHER;So;0;ON;<compat> 6BCD;;;;N;;;;;
+2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;;
+2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;;
+2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;;
+2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;;
+2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;;
+2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;;
+2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;;
+2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;;
+2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;;
+2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;;
+2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;;
+2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;;
+2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;;
+2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;;
+2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;;
+2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;;
+2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;;
+2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;;
+2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;;
+2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;;
+2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;;
+2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;;
+2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;;
+2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;;
+2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;;
+2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;;
+2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;;
+2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;;
+2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;;
+2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;;
+2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;;
+2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;;
+2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;;
+2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;;
+2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;;
+2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;;
+2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;;
+2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;;
+2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;;
+2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;;
+2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;;
+2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;;
+2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;;
+2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;;
+2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;;
+2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;;
+2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;;
+2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;;
+2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;;
+2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;;
+2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;;
+2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;;
+2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;;
+2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;;
+2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;;
+2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;;
+2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;;
+2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;;
+2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;;
+2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;;
+2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;;
+2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;;
+2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;;
+2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;;
+2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;;
+2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;;
+2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;;
+2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;;
+2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;;
+2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;;
+2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;;
+2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;;
+2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;;
+2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;;
+2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;;
+2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
+2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
+2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
+2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
+2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
+2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
+2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;;
+2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;;
+2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON;<compat> 9F9F;;;;N;;;;;
+2F00;KANGXI RADICAL ONE;So;0;ON;<compat> 4E00;;;;N;;;;;
+2F01;KANGXI RADICAL LINE;So;0;ON;<compat> 4E28;;;;N;;;;;
+2F02;KANGXI RADICAL DOT;So;0;ON;<compat> 4E36;;;;N;;;;;
+2F03;KANGXI RADICAL SLASH;So;0;ON;<compat> 4E3F;;;;N;;;;;
+2F04;KANGXI RADICAL SECOND;So;0;ON;<compat> 4E59;;;;N;;;;;
+2F05;KANGXI RADICAL HOOK;So;0;ON;<compat> 4E85;;;;N;;;;;
+2F06;KANGXI RADICAL TWO;So;0;ON;<compat> 4E8C;;;;N;;;;;
+2F07;KANGXI RADICAL LID;So;0;ON;<compat> 4EA0;;;;N;;;;;
+2F08;KANGXI RADICAL MAN;So;0;ON;<compat> 4EBA;;;;N;;;;;
+2F09;KANGXI RADICAL LEGS;So;0;ON;<compat> 513F;;;;N;;;;;
+2F0A;KANGXI RADICAL ENTER;So;0;ON;<compat> 5165;;;;N;;;;;
+2F0B;KANGXI RADICAL EIGHT;So;0;ON;<compat> 516B;;;;N;;;;;
+2F0C;KANGXI RADICAL DOWN BOX;So;0;ON;<compat> 5182;;;;N;;;;;
+2F0D;KANGXI RADICAL COVER;So;0;ON;<compat> 5196;;;;N;;;;;
+2F0E;KANGXI RADICAL ICE;So;0;ON;<compat> 51AB;;;;N;;;;;
+2F0F;KANGXI RADICAL TABLE;So;0;ON;<compat> 51E0;;;;N;;;;;
+2F10;KANGXI RADICAL OPEN BOX;So;0;ON;<compat> 51F5;;;;N;;;;;
+2F11;KANGXI RADICAL KNIFE;So;0;ON;<compat> 5200;;;;N;;;;;
+2F12;KANGXI RADICAL POWER;So;0;ON;<compat> 529B;;;;N;;;;;
+2F13;KANGXI RADICAL WRAP;So;0;ON;<compat> 52F9;;;;N;;;;;
+2F14;KANGXI RADICAL SPOON;So;0;ON;<compat> 5315;;;;N;;;;;
+2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON;<compat> 531A;;;;N;;;;;
+2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON;<compat> 5338;;;;N;;;;;
+2F17;KANGXI RADICAL TEN;So;0;ON;<compat> 5341;;;;N;;;;;
+2F18;KANGXI RADICAL DIVINATION;So;0;ON;<compat> 535C;;;;N;;;;;
+2F19;KANGXI RADICAL SEAL;So;0;ON;<compat> 5369;;;;N;;;;;
+2F1A;KANGXI RADICAL CLIFF;So;0;ON;<compat> 5382;;;;N;;;;;
+2F1B;KANGXI RADICAL PRIVATE;So;0;ON;<compat> 53B6;;;;N;;;;;
+2F1C;KANGXI RADICAL AGAIN;So;0;ON;<compat> 53C8;;;;N;;;;;
+2F1D;KANGXI RADICAL MOUTH;So;0;ON;<compat> 53E3;;;;N;;;;;
+2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON;<compat> 56D7;;;;N;;;;;
+2F1F;KANGXI RADICAL EARTH;So;0;ON;<compat> 571F;;;;N;;;;;
+2F20;KANGXI RADICAL SCHOLAR;So;0;ON;<compat> 58EB;;;;N;;;;;
+2F21;KANGXI RADICAL GO;So;0;ON;<compat> 5902;;;;N;;;;;
+2F22;KANGXI RADICAL GO SLOWLY;So;0;ON;<compat> 590A;;;;N;;;;;
+2F23;KANGXI RADICAL EVENING;So;0;ON;<compat> 5915;;;;N;;;;;
+2F24;KANGXI RADICAL BIG;So;0;ON;<compat> 5927;;;;N;;;;;
+2F25;KANGXI RADICAL WOMAN;So;0;ON;<compat> 5973;;;;N;;;;;
+2F26;KANGXI RADICAL CHILD;So;0;ON;<compat> 5B50;;;;N;;;;;
+2F27;KANGXI RADICAL ROOF;So;0;ON;<compat> 5B80;;;;N;;;;;
+2F28;KANGXI RADICAL INCH;So;0;ON;<compat> 5BF8;;;;N;;;;;
+2F29;KANGXI RADICAL SMALL;So;0;ON;<compat> 5C0F;;;;N;;;;;
+2F2A;KANGXI RADICAL LAME;So;0;ON;<compat> 5C22;;;;N;;;;;
+2F2B;KANGXI RADICAL CORPSE;So;0;ON;<compat> 5C38;;;;N;;;;;
+2F2C;KANGXI RADICAL SPROUT;So;0;ON;<compat> 5C6E;;;;N;;;;;
+2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON;<compat> 5C71;;;;N;;;;;
+2F2E;KANGXI RADICAL RIVER;So;0;ON;<compat> 5DDB;;;;N;;;;;
+2F2F;KANGXI RADICAL WORK;So;0;ON;<compat> 5DE5;;;;N;;;;;
+2F30;KANGXI RADICAL ONESELF;So;0;ON;<compat> 5DF1;;;;N;;;;;
+2F31;KANGXI RADICAL TURBAN;So;0;ON;<compat> 5DFE;;;;N;;;;;
+2F32;KANGXI RADICAL DRY;So;0;ON;<compat> 5E72;;;;N;;;;;
+2F33;KANGXI RADICAL SHORT THREAD;So;0;ON;<compat> 5E7A;;;;N;;;;;
+2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON;<compat> 5E7F;;;;N;;;;;
+2F35;KANGXI RADICAL LONG STRIDE;So;0;ON;<compat> 5EF4;;;;N;;;;;
+2F36;KANGXI RADICAL TWO HANDS;So;0;ON;<compat> 5EFE;;;;N;;;;;
+2F37;KANGXI RADICAL SHOOT;So;0;ON;<compat> 5F0B;;;;N;;;;;
+2F38;KANGXI RADICAL BOW;So;0;ON;<compat> 5F13;;;;N;;;;;
+2F39;KANGXI RADICAL SNOUT;So;0;ON;<compat> 5F50;;;;N;;;;;
+2F3A;KANGXI RADICAL BRISTLE;So;0;ON;<compat> 5F61;;;;N;;;;;
+2F3B;KANGXI RADICAL STEP;So;0;ON;<compat> 5F73;;;;N;;;;;
+2F3C;KANGXI RADICAL HEART;So;0;ON;<compat> 5FC3;;;;N;;;;;
+2F3D;KANGXI RADICAL HALBERD;So;0;ON;<compat> 6208;;;;N;;;;;
+2F3E;KANGXI RADICAL DOOR;So;0;ON;<compat> 6236;;;;N;;;;;
+2F3F;KANGXI RADICAL HAND;So;0;ON;<compat> 624B;;;;N;;;;;
+2F40;KANGXI RADICAL BRANCH;So;0;ON;<compat> 652F;;;;N;;;;;
+2F41;KANGXI RADICAL RAP;So;0;ON;<compat> 6534;;;;N;;;;;
+2F42;KANGXI RADICAL SCRIPT;So;0;ON;<compat> 6587;;;;N;;;;;
+2F43;KANGXI RADICAL DIPPER;So;0;ON;<compat> 6597;;;;N;;;;;
+2F44;KANGXI RADICAL AXE;So;0;ON;<compat> 65A4;;;;N;;;;;
+2F45;KANGXI RADICAL SQUARE;So;0;ON;<compat> 65B9;;;;N;;;;;
+2F46;KANGXI RADICAL NOT;So;0;ON;<compat> 65E0;;;;N;;;;;
+2F47;KANGXI RADICAL SUN;So;0;ON;<compat> 65E5;;;;N;;;;;
+2F48;KANGXI RADICAL SAY;So;0;ON;<compat> 66F0;;;;N;;;;;
+2F49;KANGXI RADICAL MOON;So;0;ON;<compat> 6708;;;;N;;;;;
+2F4A;KANGXI RADICAL TREE;So;0;ON;<compat> 6728;;;;N;;;;;
+2F4B;KANGXI RADICAL LACK;So;0;ON;<compat> 6B20;;;;N;;;;;
+2F4C;KANGXI RADICAL STOP;So;0;ON;<compat> 6B62;;;;N;;;;;
+2F4D;KANGXI RADICAL DEATH;So;0;ON;<compat> 6B79;;;;N;;;;;
+2F4E;KANGXI RADICAL WEAPON;So;0;ON;<compat> 6BB3;;;;N;;;;;
+2F4F;KANGXI RADICAL DO NOT;So;0;ON;<compat> 6BCB;;;;N;;;;;
+2F50;KANGXI RADICAL COMPARE;So;0;ON;<compat> 6BD4;;;;N;;;;;
+2F51;KANGXI RADICAL FUR;So;0;ON;<compat> 6BDB;;;;N;;;;;
+2F52;KANGXI RADICAL CLAN;So;0;ON;<compat> 6C0F;;;;N;;;;;
+2F53;KANGXI RADICAL STEAM;So;0;ON;<compat> 6C14;;;;N;;;;;
+2F54;KANGXI RADICAL WATER;So;0;ON;<compat> 6C34;;;;N;;;;;
+2F55;KANGXI RADICAL FIRE;So;0;ON;<compat> 706B;;;;N;;;;;
+2F56;KANGXI RADICAL CLAW;So;0;ON;<compat> 722A;;;;N;;;;;
+2F57;KANGXI RADICAL FATHER;So;0;ON;<compat> 7236;;;;N;;;;;
+2F58;KANGXI RADICAL DOUBLE X;So;0;ON;<compat> 723B;;;;N;;;;;
+2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON;<compat> 723F;;;;N;;;;;
+2F5A;KANGXI RADICAL SLICE;So;0;ON;<compat> 7247;;;;N;;;;;
+2F5B;KANGXI RADICAL FANG;So;0;ON;<compat> 7259;;;;N;;;;;
+2F5C;KANGXI RADICAL COW;So;0;ON;<compat> 725B;;;;N;;;;;
+2F5D;KANGXI RADICAL DOG;So;0;ON;<compat> 72AC;;;;N;;;;;
+2F5E;KANGXI RADICAL PROFOUND;So;0;ON;<compat> 7384;;;;N;;;;;
+2F5F;KANGXI RADICAL JADE;So;0;ON;<compat> 7389;;;;N;;;;;
+2F60;KANGXI RADICAL MELON;So;0;ON;<compat> 74DC;;;;N;;;;;
+2F61;KANGXI RADICAL TILE;So;0;ON;<compat> 74E6;;;;N;;;;;
+2F62;KANGXI RADICAL SWEET;So;0;ON;<compat> 7518;;;;N;;;;;
+2F63;KANGXI RADICAL LIFE;So;0;ON;<compat> 751F;;;;N;;;;;
+2F64;KANGXI RADICAL USE;So;0;ON;<compat> 7528;;;;N;;;;;
+2F65;KANGXI RADICAL FIELD;So;0;ON;<compat> 7530;;;;N;;;;;
+2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON;<compat> 758B;;;;N;;;;;
+2F67;KANGXI RADICAL SICKNESS;So;0;ON;<compat> 7592;;;;N;;;;;
+2F68;KANGXI RADICAL DOTTED TENT;So;0;ON;<compat> 7676;;;;N;;;;;
+2F69;KANGXI RADICAL WHITE;So;0;ON;<compat> 767D;;;;N;;;;;
+2F6A;KANGXI RADICAL SKIN;So;0;ON;<compat> 76AE;;;;N;;;;;
+2F6B;KANGXI RADICAL DISH;So;0;ON;<compat> 76BF;;;;N;;;;;
+2F6C;KANGXI RADICAL EYE;So;0;ON;<compat> 76EE;;;;N;;;;;
+2F6D;KANGXI RADICAL SPEAR;So;0;ON;<compat> 77DB;;;;N;;;;;
+2F6E;KANGXI RADICAL ARROW;So;0;ON;<compat> 77E2;;;;N;;;;;
+2F6F;KANGXI RADICAL STONE;So;0;ON;<compat> 77F3;;;;N;;;;;
+2F70;KANGXI RADICAL SPIRIT;So;0;ON;<compat> 793A;;;;N;;;;;
+2F71;KANGXI RADICAL TRACK;So;0;ON;<compat> 79B8;;;;N;;;;;
+2F72;KANGXI RADICAL GRAIN;So;0;ON;<compat> 79BE;;;;N;;;;;
+2F73;KANGXI RADICAL CAVE;So;0;ON;<compat> 7A74;;;;N;;;;;
+2F74;KANGXI RADICAL STAND;So;0;ON;<compat> 7ACB;;;;N;;;;;
+2F75;KANGXI RADICAL BAMBOO;So;0;ON;<compat> 7AF9;;;;N;;;;;
+2F76;KANGXI RADICAL RICE;So;0;ON;<compat> 7C73;;;;N;;;;;
+2F77;KANGXI RADICAL SILK;So;0;ON;<compat> 7CF8;;;;N;;;;;
+2F78;KANGXI RADICAL JAR;So;0;ON;<compat> 7F36;;;;N;;;;;
+2F79;KANGXI RADICAL NET;So;0;ON;<compat> 7F51;;;;N;;;;;
+2F7A;KANGXI RADICAL SHEEP;So;0;ON;<compat> 7F8A;;;;N;;;;;
+2F7B;KANGXI RADICAL FEATHER;So;0;ON;<compat> 7FBD;;;;N;;;;;
+2F7C;KANGXI RADICAL OLD;So;0;ON;<compat> 8001;;;;N;;;;;
+2F7D;KANGXI RADICAL AND;So;0;ON;<compat> 800C;;;;N;;;;;
+2F7E;KANGXI RADICAL PLOW;So;0;ON;<compat> 8012;;;;N;;;;;
+2F7F;KANGXI RADICAL EAR;So;0;ON;<compat> 8033;;;;N;;;;;
+2F80;KANGXI RADICAL BRUSH;So;0;ON;<compat> 807F;;;;N;;;;;
+2F81;KANGXI RADICAL MEAT;So;0;ON;<compat> 8089;;;;N;;;;;
+2F82;KANGXI RADICAL MINISTER;So;0;ON;<compat> 81E3;;;;N;;;;;
+2F83;KANGXI RADICAL SELF;So;0;ON;<compat> 81EA;;;;N;;;;;
+2F84;KANGXI RADICAL ARRIVE;So;0;ON;<compat> 81F3;;;;N;;;;;
+2F85;KANGXI RADICAL MORTAR;So;0;ON;<compat> 81FC;;;;N;;;;;
+2F86;KANGXI RADICAL TONGUE;So;0;ON;<compat> 820C;;;;N;;;;;
+2F87;KANGXI RADICAL OPPOSE;So;0;ON;<compat> 821B;;;;N;;;;;
+2F88;KANGXI RADICAL BOAT;So;0;ON;<compat> 821F;;;;N;;;;;
+2F89;KANGXI RADICAL STOPPING;So;0;ON;<compat> 826E;;;;N;;;;;
+2F8A;KANGXI RADICAL COLOR;So;0;ON;<compat> 8272;;;;N;;;;;
+2F8B;KANGXI RADICAL GRASS;So;0;ON;<compat> 8278;;;;N;;;;;
+2F8C;KANGXI RADICAL TIGER;So;0;ON;<compat> 864D;;;;N;;;;;
+2F8D;KANGXI RADICAL INSECT;So;0;ON;<compat> 866B;;;;N;;;;;
+2F8E;KANGXI RADICAL BLOOD;So;0;ON;<compat> 8840;;;;N;;;;;
+2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON;<compat> 884C;;;;N;;;;;
+2F90;KANGXI RADICAL CLOTHES;So;0;ON;<compat> 8863;;;;N;;;;;
+2F91;KANGXI RADICAL WEST;So;0;ON;<compat> 897E;;;;N;;;;;
+2F92;KANGXI RADICAL SEE;So;0;ON;<compat> 898B;;;;N;;;;;
+2F93;KANGXI RADICAL HORN;So;0;ON;<compat> 89D2;;;;N;;;;;
+2F94;KANGXI RADICAL SPEECH;So;0;ON;<compat> 8A00;;;;N;;;;;
+2F95;KANGXI RADICAL VALLEY;So;0;ON;<compat> 8C37;;;;N;;;;;
+2F96;KANGXI RADICAL BEAN;So;0;ON;<compat> 8C46;;;;N;;;;;
+2F97;KANGXI RADICAL PIG;So;0;ON;<compat> 8C55;;;;N;;;;;
+2F98;KANGXI RADICAL BADGER;So;0;ON;<compat> 8C78;;;;N;;;;;
+2F99;KANGXI RADICAL SHELL;So;0;ON;<compat> 8C9D;;;;N;;;;;
+2F9A;KANGXI RADICAL RED;So;0;ON;<compat> 8D64;;;;N;;;;;
+2F9B;KANGXI RADICAL RUN;So;0;ON;<compat> 8D70;;;;N;;;;;
+2F9C;KANGXI RADICAL FOOT;So;0;ON;<compat> 8DB3;;;;N;;;;;
+2F9D;KANGXI RADICAL BODY;So;0;ON;<compat> 8EAB;;;;N;;;;;
+2F9E;KANGXI RADICAL CART;So;0;ON;<compat> 8ECA;;;;N;;;;;
+2F9F;KANGXI RADICAL BITTER;So;0;ON;<compat> 8F9B;;;;N;;;;;
+2FA0;KANGXI RADICAL MORNING;So;0;ON;<compat> 8FB0;;;;N;;;;;
+2FA1;KANGXI RADICAL WALK;So;0;ON;<compat> 8FB5;;;;N;;;;;
+2FA2;KANGXI RADICAL CITY;So;0;ON;<compat> 9091;;;;N;;;;;
+2FA3;KANGXI RADICAL WINE;So;0;ON;<compat> 9149;;;;N;;;;;
+2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON;<compat> 91C6;;;;N;;;;;
+2FA5;KANGXI RADICAL VILLAGE;So;0;ON;<compat> 91CC;;;;N;;;;;
+2FA6;KANGXI RADICAL GOLD;So;0;ON;<compat> 91D1;;;;N;;;;;
+2FA7;KANGXI RADICAL LONG;So;0;ON;<compat> 9577;;;;N;;;;;
+2FA8;KANGXI RADICAL GATE;So;0;ON;<compat> 9580;;;;N;;;;;
+2FA9;KANGXI RADICAL MOUND;So;0;ON;<compat> 961C;;;;N;;;;;
+2FAA;KANGXI RADICAL SLAVE;So;0;ON;<compat> 96B6;;;;N;;;;;
+2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON;<compat> 96B9;;;;N;;;;;
+2FAC;KANGXI RADICAL RAIN;So;0;ON;<compat> 96E8;;;;N;;;;;
+2FAD;KANGXI RADICAL BLUE;So;0;ON;<compat> 9751;;;;N;;;;;
+2FAE;KANGXI RADICAL WRONG;So;0;ON;<compat> 975E;;;;N;;;;;
+2FAF;KANGXI RADICAL FACE;So;0;ON;<compat> 9762;;;;N;;;;;
+2FB0;KANGXI RADICAL LEATHER;So;0;ON;<compat> 9769;;;;N;;;;;
+2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON;<compat> 97CB;;;;N;;;;;
+2FB2;KANGXI RADICAL LEEK;So;0;ON;<compat> 97ED;;;;N;;;;;
+2FB3;KANGXI RADICAL SOUND;So;0;ON;<compat> 97F3;;;;N;;;;;
+2FB4;KANGXI RADICAL LEAF;So;0;ON;<compat> 9801;;;;N;;;;;
+2FB5;KANGXI RADICAL WIND;So;0;ON;<compat> 98A8;;;;N;;;;;
+2FB6;KANGXI RADICAL FLY;So;0;ON;<compat> 98DB;;;;N;;;;;
+2FB7;KANGXI RADICAL EAT;So;0;ON;<compat> 98DF;;;;N;;;;;
+2FB8;KANGXI RADICAL HEAD;So;0;ON;<compat> 9996;;;;N;;;;;
+2FB9;KANGXI RADICAL FRAGRANT;So;0;ON;<compat> 9999;;;;N;;;;;
+2FBA;KANGXI RADICAL HORSE;So;0;ON;<compat> 99AC;;;;N;;;;;
+2FBB;KANGXI RADICAL BONE;So;0;ON;<compat> 9AA8;;;;N;;;;;
+2FBC;KANGXI RADICAL TALL;So;0;ON;<compat> 9AD8;;;;N;;;;;
+2FBD;KANGXI RADICAL HAIR;So;0;ON;<compat> 9ADF;;;;N;;;;;
+2FBE;KANGXI RADICAL FIGHT;So;0;ON;<compat> 9B25;;;;N;;;;;
+2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON;<compat> 9B2F;;;;N;;;;;
+2FC0;KANGXI RADICAL CAULDRON;So;0;ON;<compat> 9B32;;;;N;;;;;
+2FC1;KANGXI RADICAL GHOST;So;0;ON;<compat> 9B3C;;;;N;;;;;
+2FC2;KANGXI RADICAL FISH;So;0;ON;<compat> 9B5A;;;;N;;;;;
+2FC3;KANGXI RADICAL BIRD;So;0;ON;<compat> 9CE5;;;;N;;;;;
+2FC4;KANGXI RADICAL SALT;So;0;ON;<compat> 9E75;;;;N;;;;;
+2FC5;KANGXI RADICAL DEER;So;0;ON;<compat> 9E7F;;;;N;;;;;
+2FC6;KANGXI RADICAL WHEAT;So;0;ON;<compat> 9EA5;;;;N;;;;;
+2FC7;KANGXI RADICAL HEMP;So;0;ON;<compat> 9EBB;;;;N;;;;;
+2FC8;KANGXI RADICAL YELLOW;So;0;ON;<compat> 9EC3;;;;N;;;;;
+2FC9;KANGXI RADICAL MILLET;So;0;ON;<compat> 9ECD;;;;N;;;;;
+2FCA;KANGXI RADICAL BLACK;So;0;ON;<compat> 9ED1;;;;N;;;;;
+2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON;<compat> 9EF9;;;;N;;;;;
+2FCC;KANGXI RADICAL FROG;So;0;ON;<compat> 9EFD;;;;N;;;;;
+2FCD;KANGXI RADICAL TRIPOD;So;0;ON;<compat> 9F0E;;;;N;;;;;
+2FCE;KANGXI RADICAL DRUM;So;0;ON;<compat> 9F13;;;;N;;;;;
+2FCF;KANGXI RADICAL RAT;So;0;ON;<compat> 9F20;;;;N;;;;;
+2FD0;KANGXI RADICAL NOSE;So;0;ON;<compat> 9F3B;;;;N;;;;;
+2FD1;KANGXI RADICAL EVEN;So;0;ON;<compat> 9F4A;;;;N;;;;;
+2FD2;KANGXI RADICAL TOOTH;So;0;ON;<compat> 9F52;;;;N;;;;;
+2FD3;KANGXI RADICAL DRAGON;So;0;ON;<compat> 9F8D;;;;N;;;;;
+2FD4;KANGXI RADICAL TURTLE;So;0;ON;<compat> 9F9C;;;;N;;;;;
+2FD5;KANGXI RADICAL FLUTE;So;0;ON;<compat> 9FA0;;;;N;;;;;
+2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;;
+2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;;
+2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;;
+2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;;
+2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;;
+2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;;
+2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;;
+2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;;
+2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;;
+2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;;
+2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;;
+2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;;
+3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;
+3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;;
+3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;;
+3003;DITTO MARK;Po;0;ON;;;;;N;;;;;
+3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;;
+3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;
+3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;;
+3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;;
+3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;;
+3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;;
+300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;;
+300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;;
+300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;;
+300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;;
+300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;;
+300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;;
+3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;;
+3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;;
+3012;POSTAL MARK;So;0;ON;;;;;N;;;;;
+3013;GETA MARK;So;0;ON;;;;;N;;;;;
+3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;;
+3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;;
+3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;;
+3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;;
+3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;;
+3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;;
+301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;;
+301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;;
+301C;WAVE DASH;Pd;0;ON;;;;;N;;;;;
+301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;;
+301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;;
+3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;;
+3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;;
+3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;;
+3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;;
+3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;;
+3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;;
+3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;;
+3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;;
+3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;;
+302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;;
+302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;;
+302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;;
+302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;;
+302E;HANGUL SINGLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
+302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
+3030;WAVY DASH;Pd;0;ON;;;;;N;;;;;
+3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;;
+3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;;
+3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
+3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
+3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;;
+3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;;
+3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;;
+3038;HANGZHOU NUMERAL TEN;Nl;0;L;<compat> 5341;;;10;N;;;;;
+3039;HANGZHOU NUMERAL TWENTY;Nl;0;L;<compat> 5344;;;20;N;;;;;
+303A;HANGZHOU NUMERAL THIRTY;Nl;0;L;<compat> 5345;;;30;N;;;;;
+303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;;
+303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;;
+3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;;
+3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;;
+3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;;
+3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;;
+3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;;
+304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;;
+304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;;
+304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;;
+304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;;
+304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;;
+3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;;
+3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;;
+3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;;
+3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;;
+3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;;
+3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;;
+3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;;
+3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;;
+3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;;
+3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;;
+305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;;
+305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;;
+305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;;
+305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;;
+305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;;
+305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;;
+3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;;
+3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;;
+3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;;
+3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;;
+3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;;
+3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;;
+3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;;
+3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;;
+3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;;
+306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;;
+306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;;
+306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;;
+306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;;
+306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;;
+306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;;
+3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;;
+3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;;
+3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;;
+3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;;
+3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;;
+3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;;
+3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;;
+3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;;
+3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;;
+3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;;
+307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;;
+307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;;
+307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;;
+307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;;
+307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;;
+307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;;
+3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;;
+3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;;
+3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;;
+3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;;
+3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;;
+3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;;
+3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;;
+308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;;
+308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;;
+308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;;
+308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;;
+308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;;
+3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;;
+3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;;
+3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;;
+3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;;
+3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;;
+3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;;
+309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;;
+309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON;<compat> 0020 3099;;;;N;;;;;
+309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON;<compat> 0020 309A;;;;N;;;;;
+309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;;
+30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;;
+30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;;
+30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;;
+30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;;
+30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;;
+30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;;
+30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;;
+30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;;
+30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;;
+30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;;
+30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;;
+30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;;
+30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;;
+30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;;
+30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;;
+30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;;
+30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;;
+30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;;
+30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;;
+30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;;
+30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;;
+30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;;
+30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;;
+30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;;
+30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;;
+30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;;
+30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;;
+30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;;
+30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;;
+30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;;
+30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;;
+30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;;
+30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;;
+30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;;
+30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;;
+30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;;
+30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;;
+30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;;
+30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;;
+30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;;
+30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;;
+30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;;
+30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;;
+30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;;
+30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;;
+30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;;
+30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;;
+30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;;
+30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;;
+30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;;
+30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;;
+30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;;
+30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;;
+30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;;
+30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;;
+30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;;
+30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;;
+30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;;
+30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;;
+30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;;
+30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;;
+30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;;
+30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;;
+30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;;
+30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;;
+30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;;
+30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;;
+30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;;
+30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;;
+30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;;
+30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;;
+30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;;
+30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;;
+30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;;
+30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
+30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
+30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;;
+30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
+30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
+30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
+30FB;KATAKANA MIDDLE DOT;Pc;0;ON;;;;;N;;;;;
+30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
+30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
+3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;;
+3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;;
+3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;;
+3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;;
+3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;;
+310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;;
+310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;;
+310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;;
+310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;;
+310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;;
+310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;;
+3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;;
+3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;;
+3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;;
+3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;;
+3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;;
+3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;;
+3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;;
+3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;;
+3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;;
+3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;;
+311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;;
+311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;;
+311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;;
+311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;;
+311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;;
+311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;;
+3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;;
+3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;;
+3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;;
+3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;;
+3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;;
+3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;;
+3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;;
+3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;;
+3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;;
+3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;;
+312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;
+312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
+312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
+3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
+3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
+3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
+3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;;
+3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;;
+3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;;
+3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;;
+3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;;
+3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;;
+313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;;
+313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;;
+313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;;
+313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;;
+313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;;
+313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;;
+3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;;
+3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;;
+3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;;
+3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;;
+3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;;
+3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;;
+3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;;
+3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;;
+3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;;
+3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;;
+314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;;
+314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;;
+314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;;
+314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;;
+314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;;
+314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;;
+3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;;
+3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;;
+3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;;
+3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;;
+3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;;
+3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;;
+3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;;
+3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;;
+3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;;
+3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;;
+315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;;
+315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;;
+315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;;
+315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;;
+315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;;
+315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;;
+3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;;
+3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;;
+3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;;
+3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;;
+3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;;
+3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;;
+3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;;
+3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;;
+3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;;
+3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;;
+316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;;
+316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;;
+316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;;
+316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;;
+316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;;
+316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;;
+3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;;
+3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;;
+3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;;
+3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;;
+3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;;
+3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;;
+3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;;
+3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;;
+3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;;
+3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;;
+317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;;
+317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;;
+317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;;
+317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;;
+317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;;
+317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;;
+3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;;
+3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;;
+3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;;
+3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;;
+3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;;
+3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;;
+3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;;
+3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;;
+3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;;
+3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;;
+318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;;
+318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;;
+318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;;
+318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;;
+318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
+3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;;
+3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;;
+3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;;N;KAERITEN ITI;Kaeriten;;;
+3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;;N;KAERITEN NI;Kaeriten;;;
+3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;;N;KAERITEN SAN;Kaeriten;;;
+3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;;N;KAERITEN SI;Kaeriten;;;
+3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;;
+3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;;
+3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;Kaeriten;;;
+3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;Kaeriten;;;
+319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;Kaeriten;;;
+319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;Kaeriten;;;
+319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;Kaeriten;;;
+319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;Kaeriten;;;
+319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;Kaeriten;;;
+319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;;
+31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;;
+31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;;
+31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;;
+31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;;
+31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;;
+31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;;
+31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;;
+31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;;
+31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;;
+31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;;
+31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;;
+31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;;
+31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;;
+31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;;
+31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;;
+31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;;
+31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;;
+31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;;
+31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;;
+31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;;
+31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;;
+31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;;
+31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;;
+31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;;
+3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;;
+3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;;
+3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;;
+3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;;
+3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;;
+3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;;
+3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;;
+3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;;
+3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;;
+3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;;
+320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;;
+320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;;
+320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;;
+320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;;
+320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;;
+320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;;
+3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;;
+3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;;
+3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;;
+3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;;
+3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;;
+3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;;
+3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;;
+3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;;
+3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;;
+3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;;
+321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;;
+321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;;
+321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;;
+3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;;N;;;;;
+3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;;N;;;;;
+3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;;N;;;;;
+3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;;N;;;;;
+3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;;N;;;;;
+3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;;N;;;;;
+3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;;N;;;;;
+3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;;N;;;;;
+3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;;N;;;;;
+3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;;N;;;;;
+322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;;
+322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;;
+322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;;
+322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;;
+322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;;
+322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;;
+3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;;
+3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;;
+3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;;
+3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;;
+3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;;
+3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;;
+3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;;
+3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;;
+3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;;
+3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;;
+323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;;
+323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;;
+323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;;
+323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;;
+323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;;
+323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;;
+3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;;
+3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;;
+3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;;
+3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;;
+3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;;
+3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;;
+3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;;
+3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;;
+3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;;
+3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;;
+3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;;
+3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;;
+3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;;
+3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;;
+326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;;
+326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;;
+326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;;
+326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;;
+326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;;
+326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;;
+3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;;
+3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;;
+3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;;
+3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;;
+3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;;
+3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;;
+3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;;
+3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;;
+3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;;
+3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;;
+327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;;
+327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
+327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
+3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
+3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
+3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;;
+3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;;
+3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;;
+3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;;
+3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;;
+3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;;
+3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;;
+3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;;
+328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;;
+328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;;
+328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;;
+328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;;
+328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;;
+328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;;
+3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;;
+3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;;
+3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;;
+3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;;
+3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;;
+3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;;
+3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;;
+3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;;
+3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;;
+3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;;
+329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;;
+329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;;
+329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;;
+329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;;
+329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;;
+329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;;
+32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;;
+32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;;
+32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;;
+32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;;
+32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;;
+32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;;
+32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;;
+32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;;
+32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;;
+32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;;
+32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;;
+32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;;
+32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;;
+32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;;
+32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;;
+32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;;
+32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;;
+32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;;
+32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;;
+32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;;
+32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;;
+32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;;
+32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;;
+32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;;
+32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;;
+32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;;
+32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;;
+32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;;
+32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;;
+32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;;
+32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;;
+32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;;
+32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;;
+32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;;
+32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;;
+32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;;
+32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;;
+32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;;
+32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;;
+32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;;
+32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;;
+32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;;
+32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;;
+32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;;
+32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;;
+32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;;
+32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;;
+32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;;
+32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;;
+32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;;
+32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;;
+32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;;
+32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;;
+32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;;
+32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;;
+32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;;
+32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;;
+32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;;
+32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;;
+32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;;
+32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;;
+32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;;
+32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;;
+32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;;
+32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;;
+32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;;
+32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;;
+32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;;
+32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;;
+32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;;
+32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;;
+32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;;
+32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;;
+32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;;
+32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;;
+32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;;
+3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;;
+3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;;
+3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;;
+3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;;
+3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;;
+3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;;
+3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;;
+3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;;
+3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;;
+3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;;
+330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;;
+330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;;
+330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;;
+330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;;
+330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;;
+330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;;
+3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;;
+3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;;
+3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;;
+3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;;
+3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;;
+3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;;
+3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;;
+3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;;
+3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;;
+3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;;
+331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;;
+331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;;
+331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;;
+331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;;
+331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;;
+331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;;
+3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;;
+3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;;
+3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;;
+3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;;
+3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;;
+3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;;
+3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;;
+3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;;
+3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;;
+3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;;
+332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;;
+332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;;
+332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;;
+332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;;
+332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;;
+332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;;
+3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;;
+3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;;
+3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;;
+3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;;
+3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;;
+3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;;
+3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;;
+3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;;
+3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;;
+3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;;
+333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;;
+333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;;
+333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;;
+333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;;
+333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;;
+333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;;
+3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;;
+3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;;
+3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;;
+3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;;
+3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;;
+3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;;
+3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;;
+3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;;
+3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;;
+3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;;
+334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;;
+334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;;
+334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;;
+334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;;
+334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;;
+334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;;
+3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;;
+3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;;
+3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;;
+3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;;
+3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;;
+3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;;
+3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;;
+3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;;
+3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;;
+3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;;
+335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;;
+335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;;
+335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;;
+335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;;
+335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;;
+335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;;
+3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;;
+3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;;
+3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;;
+3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;;
+3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;;
+3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;;
+3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;;
+3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;;
+3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;;
+3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;;
+336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;;
+336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;;
+336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;;
+336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;;
+336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;;
+336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;;
+3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;;
+3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;;
+3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;;
+3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;;
+3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;;
+3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;;
+3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;;
+337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;;
+337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;;
+337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;;
+337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;;
+337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;;
+3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;;
+3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;;
+3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;;
+3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;;
+3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;;
+3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;;
+3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;;
+3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;;
+3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;;
+3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;;
+338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;;
+338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;;
+338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;;
+338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;;
+338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;;
+338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;;
+3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;;
+3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;;
+3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;;
+3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;;
+3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;;
+3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;;
+3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;;
+3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;;
+3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;;
+3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;;
+339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;;
+339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;;
+339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;;
+339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;;
+339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;;
+339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;;
+33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;;
+33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;;
+33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;;
+33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;;
+33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;;
+33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;;
+33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;;
+33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;;
+33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;;
+33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;;
+33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;;
+33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;;
+33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;;
+33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;;
+33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;;
+33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;;
+33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;;
+33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;;
+33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;;
+33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;;
+33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;;
+33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;;
+33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;;
+33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;;
+33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;;
+33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;;
+33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;;
+33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;;
+33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;;
+33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;;
+33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;;
+33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;;
+33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;;
+33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;;
+33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;;
+33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;;
+33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;;
+33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;;
+33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;;
+33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;;
+33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;;
+33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;;
+33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;;
+33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;;
+33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;;
+33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;;
+33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;;
+33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;;
+33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;;
+33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;;
+33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;;
+33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;;
+33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;;
+33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;;
+33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;;
+33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;;
+33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;;
+33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;;
+33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;;
+33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;;
+33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;;
+33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;;
+33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;;
+33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;;
+33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;;
+33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;;
+33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;;
+33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;;
+33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;;
+33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;;
+33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;;
+33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;;
+33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;;
+33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;;
+33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;;
+33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;;
+33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;;
+33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;;
+33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;;
+33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;;
+33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;;
+33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;;
+33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;;
+33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;;
+33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;;
+33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;;
+33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;;
+33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;;
+33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;;
+33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;;
+33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;;
+33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;;
+33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;
+3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;;
+4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;
+4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
+9FA5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
+A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
+A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
+A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;;
+A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;;
+A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;;
+A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;;
+A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;;
+A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;;
+A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;;
+A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;;
+A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;;
+A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;;
+A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;;
+A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;;
+A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;;
+A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;;
+A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;;
+A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;;
+A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;;
+A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;;
+A015;YI SYLLABLE WU;Lo;0;L;;;;;N;;;;;
+A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;;
+A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;;
+A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;;
+A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;;
+A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;;
+A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;;
+A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;;
+A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;;
+A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;;
+A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;;
+A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;;
+A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;;
+A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;;
+A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;;
+A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;;
+A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;;
+A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;;
+A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;;
+A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;;
+A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;;
+A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;;
+A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;;
+A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;;
+A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;;
+A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;;
+A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;;
+A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;;
+A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;;
+A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;;
+A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;;
+A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;;
+A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;;
+A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;;
+A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;;
+A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;;
+A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;;
+A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;;
+A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;;
+A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;;
+A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;;
+A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;;
+A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;;
+A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;;
+A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;;
+A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;;
+A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;;
+A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;;
+A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;;
+A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;;
+A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;;
+A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;;
+A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;;
+A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;;
+A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;;
+A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;;
+A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;;
+A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;;
+A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;;
+A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;;
+A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;;
+A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;;
+A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;;
+A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;;
+A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;;
+A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;;
+A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;;
+A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;;
+A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;;
+A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;;
+A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;;
+A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;;
+A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;;
+A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;;
+A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;;
+A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;;
+A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;;
+A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;;
+A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;;
+A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;;
+A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;;
+A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;;
+A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;;
+A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;;
+A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;;
+A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;;
+A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;;
+A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;;
+A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;;
+A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;;
+A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;;
+A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;;
+A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;;
+A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;;
+A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;;
+A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;;
+A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;;
+A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;;
+A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;;
+A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;;
+A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;;
+A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;;
+A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;;
+A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;;
+A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;;
+A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;;
+A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;;
+A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;;
+A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;;
+A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;;
+A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;;
+A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;;
+A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;;
+A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;;
+A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;;
+A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;;
+A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;;
+A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;;
+A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;;
+A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;;
+A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;;
+A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;;
+A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;;
+A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;;
+A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;;
+A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;;
+A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;;
+A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;;
+A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;;
+A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;;
+A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;;
+A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;;
+A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;;
+A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;;
+A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;;
+A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;;
+A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;;
+A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;;
+A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;;
+A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;;
+A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;;
+A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;;
+A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;;
+A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;;
+A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;;
+A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;;
+A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;;
+A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;;
+A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;;
+A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;;
+A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;;
+A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;;
+A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;;
+A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;;
+A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;;
+A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;;
+A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;;
+A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;;
+A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;;
+A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;;
+A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;;
+A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;;
+A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;;
+A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;;
+A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;;
+A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;;
+A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;;
+A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;;
+A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;;
+A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;;
+A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;;
+A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;;
+A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;;
+A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;;
+A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;;
+A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;;
+A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;;
+A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;;
+A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;;
+A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;;
+A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;;
+A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;;
+A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;;
+A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;;
+A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;;
+A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;;
+A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;;
+A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;;
+A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;;
+A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;;
+A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;;
+A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;;
+A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;;
+A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;;
+A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;;
+A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;;
+A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;;
+A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;;
+A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;;
+A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;;
+A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;;
+A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;;
+A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;;
+A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;;
+A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;;
+A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;;
+A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;;
+A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;;
+A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;;
+A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;;
+A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;;
+A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;;
+A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;;
+A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;;
+A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;;
+A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;;
+A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;;
+A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;;
+A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;;
+A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;;
+A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;;
+A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;;
+A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;;
+A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;;
+A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;;
+A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;;
+A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;;
+A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;;
+A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;;
+A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;;
+A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;;
+A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;;
+A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;;
+A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;;
+A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;;
+A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;;
+A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;;
+A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;;
+A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;;
+A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;;
+A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;;
+A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;;
+A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;;
+A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;;
+A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;;
+A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;;
+A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;;
+A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;;
+A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;;
+A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;;
+A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;;
+A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;;
+A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;;
+A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;;
+A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;;
+A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;;
+A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;;
+A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;;
+A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;;
+A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
+A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;;
+A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;;
+A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;;
+A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;;
+A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;;
+A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;;
+A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
+A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;;
+A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;;
+A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;;
+A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;;
+A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;;
+A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;;
+A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
+A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;;
+A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;;
+A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
+A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;;
+A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;;
+A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;;
+A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
+A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;;
+A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;;
+A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;;
+A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;;
+A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;;
+A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;;
+A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;;
+A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;;
+A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;;
+A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;;
+A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;;
+A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;;
+A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;;
+A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;;
+A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;;
+A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;;
+A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;;
+A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;;
+A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;;
+A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;;
+A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;;
+A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;;
+A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;;
+A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;;
+A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;;
+A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;;
+A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;;
+A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;;
+A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;;
+A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;;
+A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;;
+A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;;
+A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;;
+A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;;
+A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;;
+A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;;
+A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;;
+A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;;
+A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;;
+A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;;
+A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;;
+A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;;
+A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;;
+A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;;
+A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;;
+A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;;
+A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;;
+A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;;
+A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;;
+A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;;
+A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;;
+A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;;
+A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;;
+A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;;
+A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;;
+A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;;
+A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;;
+A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;;
+A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;;
+A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;;
+A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;;
+A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;;
+A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;;
+A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;;
+A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;;
+A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;;
+A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;;
+A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;;
+A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;;
+A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;;
+A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;;
+A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;;
+A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;;
+A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;;
+A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;;
+A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;;
+A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;;
+A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;;
+A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;;
+A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;;
+A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;;
+A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;;
+A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;;
+A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;;
+A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;;
+A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;;
+A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;;
+A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;;
+A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;;
+A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;;
+A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;;
+A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;;
+A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;;
+A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;;
+A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;;
+A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;;
+A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;;
+A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;;
+A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;;
+A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;;
+A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;;
+A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;;
+A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;;
+A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;;
+A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;;
+A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;;
+A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;;
+A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;;
+A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;;
+A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;;
+A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;;
+A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;;
+A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;;
+A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;;
+A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;;
+A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;;
+A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;;
+A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;;
+A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;;
+A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;;
+A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;;
+A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;;
+A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;;
+A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;;
+A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;;
+A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;;
+A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;;
+A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;;
+A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;;
+A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;;
+A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;;
+A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;;
+A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;;
+A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;;
+A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;;
+A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;;
+A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;;
+A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;;
+A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;;
+A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;;
+A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;;
+A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;;
+A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;;
+A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;;
+A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;;
+A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;;
+A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;;
+A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;;
+A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;;
+A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;;
+A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;;
+A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;;
+A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;;
+A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;;
+A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;;
+A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;;
+A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;;
+A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;;
+A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;;
+A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;;
+A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;;
+A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;;
+A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;;
+A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;;
+A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;;
+A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;;
+A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;;
+A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;;
+A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;;
+A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;;
+A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;;
+A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;;
+A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;;
+A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;;
+A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;;
+A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;;
+A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;;
+A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;;
+A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;;
+A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;;
+A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
+A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;;
+A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;;
+A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;;
+A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;;
+A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;;
+A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
+A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;;
+A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;;
+A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;;
+A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;;
+A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;;
+A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;;
+A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;;
+A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;;
+A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;;
+A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;;
+A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
+A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;;
+A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;;
+A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;;
+A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
+A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;;
+A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;;
+A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;;
+A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;;
+A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;;
+A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;;
+A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;;
+A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;;
+A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;;
+A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;;
+A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;;
+A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;;
+A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;;
+A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;;
+A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;;
+A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;;
+A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;;
+A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;;
+A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;;
+A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;;
+A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;;
+A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;;
+A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;;
+A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;;
+A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;;
+A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;;
+A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;;
+A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;;
+A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;;
+A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;;
+A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;;
+A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;;
+A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;;
+A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;;
+A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;;
+A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;;
+A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;;
+A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;;
+A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;;
+A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;;
+A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;;
+A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;;
+A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;;
+A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;;
+A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;;
+A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;;
+A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;;
+A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;;
+A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;;
+A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;;
+A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;;
+A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;;
+A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;;
+A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;;
+A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;;
+A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;;
+A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;;
+A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;;
+A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;;
+A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;;
+A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;;
+A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;;
+A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;;
+A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;;
+A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;;
+A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;;
+A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;;
+A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;;
+A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;;
+A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;;
+A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;;
+A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;;
+A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;;
+A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;;
+A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;;
+A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;;
+A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;;
+A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;;
+A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;;
+A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;;
+A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;;
+A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;;
+A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;;
+A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;;
+A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;;
+A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;;
+A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;;
+A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;;
+A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;;
+A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;;
+A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;;
+A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;;
+A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;;
+A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;;
+A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;;
+A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;;
+A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;;
+A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;;
+A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;;
+A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;;
+A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;;
+A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;;
+A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;;
+A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;;
+A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;;
+A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;;
+A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;;
+A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;;
+A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;;
+A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;;
+A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;;
+A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;;
+A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;;
+A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;;
+A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;;
+A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;;
+A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;;
+A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;;
+A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;;
+A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;;
+A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;;
+A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;;
+A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;;
+A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;;
+A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;;
+A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;;
+A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;;
+A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;;
+A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;;
+A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;;
+A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;;
+A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;;
+A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;;
+A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;;
+A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;;
+A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;;
+A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;;
+A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;;
+A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;;
+A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;;
+A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;;
+A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;;
+A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;;
+A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;;
+A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;;
+A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;;
+A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;;
+A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;;
+A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;;
+A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
+A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;;
+A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;;
+A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;;
+A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;;
+A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;;
+A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;;
+A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;;
+A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
+A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;;
+A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;;
+A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
+A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;;
+A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;;
+A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
+A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;;
+A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;;
+A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
+A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;;
+A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;;
+A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;;
+A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;;
+A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;;
+A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;;
+A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;;
+A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;;
+A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;;
+A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;;
+A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;;
+A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;;
+A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;;
+A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;;
+A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;;
+A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;;
+A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;;
+A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;;
+A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;;
+A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;;
+A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;;
+A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;;
+A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;;
+A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;;
+A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;;
+A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;;
+A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;;
+A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;;
+A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;;
+A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;;
+A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;;
+A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;;
+A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;;
+A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;;
+A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;;
+A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;;
+A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;;
+A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;;
+A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;;
+A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;;
+A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;;
+A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;;
+A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;;
+A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;;
+A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;;
+A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;;
+A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;;
+A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;;
+A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;;
+A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;;
+A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;;
+A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;;
+A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;;
+A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;;
+A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;;
+A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;;
+A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;;
+A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;;
+A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;;
+A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;;
+A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;;
+A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;;
+A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;;
+A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;;
+A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;;
+A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;;
+A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;;
+A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
+A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;;
+A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;;
+A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;;
+A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;;
+A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;;
+A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;;
+A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
+A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;;
+A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;;
+A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;;
+A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
+A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;;
+A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;;
+A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
+A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;;
+A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;;
+A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;;
+A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
+A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;;
+A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;;
+A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;;
+A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;;
+A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;;
+A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;;
+A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;;
+A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;;
+A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;;
+A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;;
+A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;;
+A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;;
+A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;;
+A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;;
+A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;;
+A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;;
+A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;;
+A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;;
+A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;;
+A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;;
+A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;;
+A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;;
+A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;;
+A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;;
+A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;;
+A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;;
+A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;;
+A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;;
+A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;;
+A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;;
+A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;;
+A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;;
+A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
+A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;;
+A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;;
+A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;;
+A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;;
+A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;;
+A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;;
+A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;;
+A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
+A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;;
+A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;;
+A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;;
+A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
+A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;;
+A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;;
+A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
+A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;;
+A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;;
+A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;;
+A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;;
+A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;;
+A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;;
+A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;;
+A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;;
+A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;;
+A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;;
+A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;;
+A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;;
+A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;;
+A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;;
+A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;;
+A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;;
+A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;;
+A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;;
+A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;;
+A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;;
+A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;;
+A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;;
+A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;;
+A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;;
+A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;;
+A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;;
+A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;;
+A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;;
+A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;;
+A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;;
+A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;;
+A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;;
+A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;;
+A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;;
+A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;;
+A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;;
+A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;;
+A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;;
+A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;;
+A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;;
+A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;;
+A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;;
+A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;;
+A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;;
+A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;;
+A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;;
+A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;;
+A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;;
+A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;;
+A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;;
+A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;;
+A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;;
+A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;;
+A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;;
+A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;;
+A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;;
+A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;;
+A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;;
+A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;;
+A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;;
+A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;;
+A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;;
+A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;;
+A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;;
+A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;;
+A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;;
+A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;;
+A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;;
+A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;;
+A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;;
+A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;;
+A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;;
+A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;;
+A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;;
+A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;;
+A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;;
+A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;;
+A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;;
+A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;;
+A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;;
+A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;;
+A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;;
+A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;;
+A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;;
+A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;;
+A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;;
+A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;;
+A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;;
+A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;;
+A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;;
+A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;;
+A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;;
+A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;;
+A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;;
+A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;;
+A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;;
+A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;;
+A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;;
+A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;;
+A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;;
+A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;;
+A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;;
+A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;;
+A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;;
+A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;;
+A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;;
+A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;;
+A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;;
+A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;;
+A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;;
+A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;;
+A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;;
+A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;;
+A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;;
+A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;;
+A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;;
+A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;;
+A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;;
+A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;;
+A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;;
+A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;;
+A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;;
+A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;;
+A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;;
+A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;;
+A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;;
+A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;;
+A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;;
+A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;;
+A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;;
+A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;;
+A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;;
+A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;;
+A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;;
+A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;;
+A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;;
+A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;;
+A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;;
+A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;;
+A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;;
+A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;;
+A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;;
+A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;;
+A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;;
+A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;;
+A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;;
+A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;;
+A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;;
+A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;;
+A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;;
+A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;;
+A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;;
+A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;;
+A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;;
+A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;;
+A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;;
+A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;;
+A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;;
+A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;;
+A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;;
+A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;;
+A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;;
+A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;;
+A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;;
+A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;;
+A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;;
+A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;;
+A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;;
+A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;;
+A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;;
+A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;;
+A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;;
+A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;;
+A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;;
+A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;;
+A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;;
+A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;;
+A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;;
+A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;;
+A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;;
+A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;;
+A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;;
+A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;;
+A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;;
+A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;;
+A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;;
+A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;;
+A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;;
+A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;;
+A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;;
+A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;;
+A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;;
+A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;;
+A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;;
+A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;;
+A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;;
+A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;;
+A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;;
+A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;;
+A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;;
+A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;;
+A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;;
+A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;;
+A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;;
+A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;;
+A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;;
+A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;;
+A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;;
+A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;;
+A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;;
+A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;;
+A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;;
+A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;;
+A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;;
+A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;;
+A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;;
+A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;;
+A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;;
+A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;;
+A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;;
+A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;;
+A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;;
+A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;;
+A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;;
+A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;;
+A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;;
+A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;;
+A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;;
+A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;;
+A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;;
+A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;;
+A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;;
+A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;;
+A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;;
+A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;;
+A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;;
+A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;;
+A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;;
+A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;;
+A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;;
+A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;;
+A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;;
+A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;;
+A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;;
+A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;;
+A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;;
+A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;;
+A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;;
+A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;;
+A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;;
+A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;;
+A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;;
+A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;;
+A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;;
+A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;;
+A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;;
+A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;;
+A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;;
+A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;;
+A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;;
+A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;;
+A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;;
+A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;;
+A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;;
+A491;YI RADICAL LI;So;0;ON;;;;;N;;;;;
+A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;;
+A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;;
+A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;;
+A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;;
+A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;;
+A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;;
+A498;YI RADICAL MI;So;0;ON;;;;;N;;;;;
+A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;;
+A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;;
+A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;;
+A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;;
+A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;;
+A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;;
+A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;;
+A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;;
+A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;;
+A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;;
+A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;;
+A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;;
+A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;;
+A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;;
+A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;;
+A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;;
+A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;;
+A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;;
+A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;;
+A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;;
+A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;;
+A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;;
+A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;;
+A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;;
+A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;;
+A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;;
+A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;;
+A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;;
+A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;;
+A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;;
+A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;;
+A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;;
+A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;;
+A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;;
+A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;;
+A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;;
+A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;;
+A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;;
+A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;;
+A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;;
+A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;;
+AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+D800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DB7F;<Non Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+E000;<Private Use, First>;Co;0;L;;;;;N;;;;;
+F8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;;
+F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;;
+F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;;
+F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;;
+F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;;
+F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;;
+F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;;
+F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;;
+F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;;
+F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;;
+F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;;
+F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;;
+F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;;
+F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;;
+F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;;
+F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;;
+F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;;
+F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;;
+F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;;
+F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;;
+F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;;
+F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;;
+F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;;
+F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;;
+F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;;
+F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;;
+F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;;
+F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;;
+F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;;
+F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;;
+F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;;
+F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;;
+F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;;
+F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;;
+F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;;
+F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;;
+F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;;
+F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;;
+F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;;
+F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;;
+F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;;
+F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;;
+F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;;
+F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;;
+F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;;
+F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;;
+F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;;
+F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;;
+F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;;
+F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;;
+F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;;
+F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;;
+F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;;
+F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;;
+F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;;
+F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;;
+F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;;
+F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;;
+F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;;
+F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;;
+F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;;
+F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;;
+F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;;
+F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;;
+F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;;
+F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;;
+F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;;
+F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;;
+F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;;
+F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;;
+F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;;
+F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;;
+F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;;
+F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;;
+F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;;
+F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;;
+F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;;
+F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;;
+F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;;
+F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;;
+F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;;
+F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;;
+F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;96FB;;;;N;;;;;
+F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;;
+F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;;
+F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;;
+F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;;
+F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;;
+F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;;
+F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;;
+F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;;
+F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;;
+F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;;
+F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;;
+F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;;
+F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;;
+F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;;
+F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;;
+F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;;
+F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;;
+F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;;
+F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;;
+F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;;
+F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;;
+F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;;
+F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;;
+F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;;
+F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;;
+F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;;N;;;;;
+F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;;
+F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;;
+F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;;
+F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;;
+F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;;
+F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;;
+F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;;
+F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;;N;;;;;
+F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;;
+F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;;
+F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;;
+F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;;
+F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;;N;;;;;
+F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;;
+F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;;
+F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;;
+F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;;
+F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;;
+F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;;
+F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;;
+F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;;
+F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;;
+F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;;
+F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;;
+F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;;
+F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;;
+F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;;
+F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;;
+F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;;
+F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;;
+F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;;
+F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;;
+F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;;
+F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;;
+F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;;
+F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;;
+F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;;
+F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;;
+F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;;
+F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;;
+F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;;
+F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;;
+F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;;
+F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;;
+F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;;
+F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;;
+F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;;
+F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;;
+F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;;
+F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;;
+F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;;
+F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;;
+F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;;
+F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;;
+F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;;
+F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;;
+F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;;
+F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;;
+F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;;
+F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;;
+F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;;
+F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;;
+F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;;
+F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;;
+F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;;
+F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;;
+F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;;
+F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;;
+F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;;
+F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;;
+F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;;N;;;;;
+F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;;
+F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;;
+F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;;
+F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;;
+F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;;
+F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;;
+F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;;
+F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;;
+F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;;
+F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;;
+F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;;
+F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;;
+F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;;
+F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;;
+F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;;
+F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;;
+F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;;
+F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;;
+F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;;
+F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;;
+F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;;
+F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;;
+F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;;
+F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;;
+F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;;
+F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;;
+F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;;
+F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;;
+F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;;
+F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;;
+F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;;N;;;;;
+F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;;
+F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;;N;;;;;
+F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;;
+F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;;
+F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;;
+F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;;
+F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;;
+F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;;
+F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;;
+F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;;
+F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;;
+F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;;
+F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;;
+F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;;
+F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;;
+F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;;
+F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;;
+F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;;
+F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;;
+F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;;
+F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;;
+F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;;
+F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;;
+F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;;
+F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;;
+F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;;
+F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;;
+F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;;
+F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;;
+F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;;
+F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;;
+F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;;
+F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;;
+F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;;
+F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;;
+F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;;
+F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;;
+F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;;
+F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;;
+F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;;
+F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;;
+F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;;
+F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;;
+F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;;N;;;;;
+F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;;
+F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;;
+FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;;
+FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;;
+FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;;
+FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;;
+FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;;
+FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;;
+FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;;
+FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;;
+FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;;
+FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;;
+FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;;
+FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;;
+FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;;
+FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;;
+FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;;
+FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;;
+FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;;
+FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;;
+FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;;
+FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;;
+FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;;
+FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;;
+FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;;
+FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;;
+FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;;
+FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;;
+FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;;
+FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;;
+FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;;
+FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;;
+FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;;
+FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;*;;;
+FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;;
+FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;;
+FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;;
+FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;*;;;
+FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;;
+FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;;
+FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;;
+FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;;
+FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;;
+FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;;
+FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;;
+FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;;
+FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;;
+FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;;
+FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
+FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
+FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
+FB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;;
+FB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;;
+FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;;
+FB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;;
+FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;;
+FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;;
+FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;;
+FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;;
+FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;;
+FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;;
+FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;;
+FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;;
+FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;;
+FB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;;
+FB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;;
+FB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;;
+FB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;;
+FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;;
+FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
+FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
+FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
+FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ET;<font> 002B;;;;N;;;;;
+FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
+FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
+FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;;
+FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;;
+FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;;
+FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;;
+FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;;
+FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;;
+FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;;
+FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;;
+FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;;
+FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;;
+FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;;
+FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;;
+FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;;
+FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;;
+FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;;
+FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;;
+FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;;
+FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;;
+FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;;
+FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;;
+FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;;
+FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;;
+FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;;
+FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;;
+FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;;
+FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;;
+FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;;
+FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;;
+FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;;
+FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;;
+FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;;
+FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL;<isolated> 0671;;;;N;;;;;
+FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL;<final> 0671;;;;N;;;;;
+FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL;<isolated> 067B;;;;N;;;;;
+FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL;<final> 067B;;;;N;;;;;
+FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL;<initial> 067B;;;;N;;;;;
+FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL;<medial> 067B;;;;N;;;;;
+FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL;<isolated> 067E;;;;N;;;;;
+FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL;<final> 067E;;;;N;;;;;
+FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL;<initial> 067E;;;;N;;;;;
+FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL;<medial> 067E;;;;N;;;;;
+FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0680;;;;N;;;;;
+FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL;<final> 0680;;;;N;;;;;
+FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL;<initial> 0680;;;;N;;;;;
+FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL;<medial> 0680;;;;N;;;;;
+FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067A;;;;N;;;;;
+FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL;<final> 067A;;;;N;;;;;
+FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL;<initial> 067A;;;;N;;;;;
+FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL;<medial> 067A;;;;N;;;;;
+FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067F;;;;N;;;;;
+FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL;<final> 067F;;;;N;;;;;
+FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL;<initial> 067F;;;;N;;;;;
+FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL;<medial> 067F;;;;N;;;;;
+FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL;<isolated> 0679;;;;N;;;;;
+FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL;<final> 0679;;;;N;;;;;
+FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL;<initial> 0679;;;;N;;;;;
+FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL;<medial> 0679;;;;N;;;;;
+FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL;<isolated> 06A4;;;;N;;;;;
+FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL;<final> 06A4;;;;N;;;;;
+FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL;<initial> 06A4;;;;N;;;;;
+FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL;<medial> 06A4;;;;N;;;;;
+FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A6;;;;N;;;;;
+FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL;<final> 06A6;;;;N;;;;;
+FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL;<initial> 06A6;;;;N;;;;;
+FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A6;;;;N;;;;;
+FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL;<isolated> 0684;;;;N;;;;;
+FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL;<final> 0684;;;;N;;;;;
+FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL;<initial> 0684;;;;N;;;;;
+FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL;<medial> 0684;;;;N;;;;;
+FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL;<isolated> 0683;;;;N;;;;;
+FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL;<final> 0683;;;;N;;;;;
+FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL;<initial> 0683;;;;N;;;;;
+FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL;<medial> 0683;;;;N;;;;;
+FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL;<isolated> 0686;;;;N;;;;;
+FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL;<final> 0686;;;;N;;;;;
+FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL;<initial> 0686;;;;N;;;;;
+FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL;<medial> 0686;;;;N;;;;;
+FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0687;;;;N;;;;;
+FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL;<final> 0687;;;;N;;;;;
+FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL;<initial> 0687;;;;N;;;;;
+FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL;<medial> 0687;;;;N;;;;;
+FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068D;;;;N;;;;;
+FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL;<final> 068D;;;;N;;;;;
+FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068C;;;;N;;;;;
+FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL;<final> 068C;;;;N;;;;;
+FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL;<isolated> 068E;;;;N;;;;;
+FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL;<final> 068E;;;;N;;;;;
+FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL;<isolated> 0688;;;;N;;;;;
+FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL;<final> 0688;;;;N;;;;;
+FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL;<isolated> 0698;;;;N;;;;;
+FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL;<final> 0698;;;;N;;;;;
+FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL;<isolated> 0691;;;;N;;;;;
+FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL;<final> 0691;;;;N;;;;;
+FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A9;;;;N;;;;;
+FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL;<final> 06A9;;;;N;;;;;
+FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL;<initial> 06A9;;;;N;;;;;
+FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A9;;;;N;;;;;
+FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL;<isolated> 06AF;;;;N;;;;;
+FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL;<final> 06AF;;;;N;;;;;
+FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL;<initial> 06AF;;;;N;;;;;
+FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL;<medial> 06AF;;;;N;;;;;
+FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL;<isolated> 06B3;;;;N;;;;;
+FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL;<final> 06B3;;;;N;;;;;
+FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL;<initial> 06B3;;;;N;;;;;
+FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL;<medial> 06B3;;;;N;;;;;
+FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL;<isolated> 06B1;;;;N;;;;;
+FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL;<final> 06B1;;;;N;;;;;
+FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL;<initial> 06B1;;;;N;;;;;
+FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL;<medial> 06B1;;;;N;;;;;
+FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL;<isolated> 06BA;;;;N;;;;;
+FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL;<final> 06BA;;;;N;;;;;
+FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL;<isolated> 06BB;;;;N;;;;;
+FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL;<final> 06BB;;;;N;;;;;
+FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL;<initial> 06BB;;;;N;;;;;
+FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL;<medial> 06BB;;;;N;;;;;
+FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06C0;;;;N;;;;;
+FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL;<final> 06C0;;;;N;;;;;
+FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL;<isolated> 06C1;;;;N;;;;;
+FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL;<final> 06C1;;;;N;;;;;
+FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL;<initial> 06C1;;;;N;;;;;
+FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL;<medial> 06C1;;;;N;;;;;
+FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL;<isolated> 06BE;;;;N;;;;;
+FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL;<final> 06BE;;;;N;;;;;
+FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL;<initial> 06BE;;;;N;;;;;
+FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL;<medial> 06BE;;;;N;;;;;
+FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL;<isolated> 06D2;;;;N;;;;;
+FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL;<final> 06D2;;;;N;;;;;
+FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06D3;;;;N;;;;;
+FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 06D3;;;;N;;;;;
+FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL;<isolated> 06AD;;;;N;;;;;
+FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL;<final> 06AD;;;;N;;;;;
+FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL;<initial> 06AD;;;;N;;;;;
+FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL;<medial> 06AD;;;;N;;;;;
+FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL;<isolated> 06C7;;;;N;;;;;
+FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL;<final> 06C7;;;;N;;;;;
+FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL;<isolated> 06C6;;;;N;;;;;
+FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL;<final> 06C6;;;;N;;;;;
+FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL;<isolated> 06C8;;;;N;;;;;
+FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL;<final> 06C8;;;;N;;;;;
+FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0677;;;;N;;;;;
+FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL;<isolated> 06CB;;;;N;;;;;
+FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL;<final> 06CB;;;;N;;;;;
+FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL;<isolated> 06C5;;;;N;;;;;
+FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL;<final> 06C5;;;;N;;;;;
+FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL;<isolated> 06C9;;;;N;;;;;
+FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL;<final> 06C9;;;;N;;;;;
+FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL;<isolated> 06D0;;;;N;;;;;
+FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL;<final> 06D0;;;;N;;;;;
+FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL;<initial> 06D0;;;;N;;;;;
+FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL;<medial> 06D0;;;;N;;;;;
+FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0649;;;;N;;;;;
+FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL;<medial> 0649;;;;N;;;;;
+FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0626 0627;;;;N;;;;;
+FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL;<final> 0626 0627;;;;N;;;;;
+FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D5;;;;N;;;;;
+FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL;<final> 0626 06D5;;;;N;;;;;
+FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL;<isolated> 0626 0648;;;;N;;;;;
+FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL;<final> 0626 0648;;;;N;;;;;
+FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C7;;;;N;;;;;
+FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL;<final> 0626 06C7;;;;N;;;;;
+FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C6;;;;N;;;;;
+FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL;<final> 0626 06C6;;;;N;;;;;
+FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C8;;;;N;;;;;
+FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL;<final> 0626 06C8;;;;N;;;;;
+FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D0;;;;N;;;;;
+FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL;<final> 0626 06D0;;;;N;;;;;
+FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL;<initial> 0626 06D0;;;;N;;;;;
+FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0626 0649;;;;N;;;;;
+FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL;<isolated> 06CC;;;;N;;;;;
+FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL;<final> 06CC;;;;N;;;;;
+FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL;<initial> 06CC;;;;N;;;;;
+FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL;<medial> 06CC;;;;N;;;;;
+FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 062C;;;;N;;;;;
+FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0626 062D;;;;N;;;;;
+FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 0645;;;;N;;;;;
+FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0626 064A;;;;N;;;;;
+FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 062C;;;;N;;;;;
+FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062D;;;;N;;;;;
+FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062E;;;;N;;;;;
+FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 0645;;;;N;;;;;
+FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0628 0649;;;;N;;;;;
+FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0628 064A;;;;N;;;;;
+FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 062C;;;;N;;;;;
+FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062D;;;;N;;;;;
+FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062E;;;;N;;;;;
+FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 0645;;;;N;;;;;
+FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062A 0649;;;;N;;;;;
+FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062A 064A;;;;N;;;;;
+FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 062C;;;;N;;;;;
+FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 0645;;;;N;;;;;
+FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062B 0649;;;;N;;;;;
+FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062B 064A;;;;N;;;;;
+FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062C 062D;;;;N;;;;;
+FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C 0645;;;;N;;;;;
+FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 062C;;;;N;;;;;
+FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 0645;;;;N;;;;;
+FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 062C;;;;N;;;;;
+FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062E 062D;;;;N;;;;;
+FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 0645;;;;N;;;;;
+FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 062C;;;;N;;;;;
+FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062D;;;;N;;;;;
+FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062E;;;;N;;;;;
+FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 0645;;;;N;;;;;
+FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0635 062D;;;;N;;;;;
+FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0645;;;;N;;;;;
+FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 062C;;;;N;;;;;
+FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062D;;;;N;;;;;
+FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062E;;;;N;;;;;
+FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 0645;;;;N;;;;;
+FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0637 062D;;;;N;;;;;
+FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0637 0645;;;;N;;;;;
+FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0638 0645;;;;N;;;;;
+FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 062C;;;;N;;;;;
+FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 0645;;;;N;;;;;
+FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 062C;;;;N;;;;;
+FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 0645;;;;N;;;;;
+FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 062C;;;;N;;;;;
+FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062D;;;;N;;;;;
+FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062E;;;;N;;;;;
+FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 0645;;;;N;;;;;
+FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0641 0649;;;;N;;;;;
+FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0641 064A;;;;N;;;;;
+FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0642 062D;;;;N;;;;;
+FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0642 0645;;;;N;;;;;
+FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0642 0649;;;;N;;;;;
+FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0642 064A;;;;N;;;;;
+FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0643 0627;;;;N;;;;;
+FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 062C;;;;N;;;;;
+FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062D;;;;N;;;;;
+FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062E;;;;N;;;;;
+FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0644;;;;N;;;;;
+FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0645;;;;N;;;;;
+FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0643 0649;;;;N;;;;;
+FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0643 064A;;;;N;;;;;
+FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 062C;;;;N;;;;;
+FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062D;;;;N;;;;;
+FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062E;;;;N;;;;;
+FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 0645;;;;N;;;;;
+FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0644 0649;;;;N;;;;;
+FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0644 064A;;;;N;;;;;
+FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 062C;;;;N;;;;;
+FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D;;;;N;;;;;
+FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062E;;;;N;;;;;
+FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 0645;;;;N;;;;;
+FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0645 0649;;;;N;;;;;
+FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0645 064A;;;;N;;;;;
+FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 062C;;;;N;;;;;
+FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062D;;;;N;;;;;
+FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062E;;;;N;;;;;
+FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 0645;;;;N;;;;;
+FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0646 0649;;;;N;;;;;
+FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0646 064A;;;;N;;;;;
+FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 062C;;;;N;;;;;
+FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 0645;;;;N;;;;;
+FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0647 0649;;;;N;;;;;
+FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0647 064A;;;;N;;;;;
+FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 062C;;;;N;;;;;
+FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062D;;;;N;;;;;
+FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062E;;;;N;;;;;
+FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 0645;;;;N;;;;;
+FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 064A 0649;;;;N;;;;;
+FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A 064A;;;;N;;;;;
+FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0630 0670;;;;N;;;;;
+FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0631 0670;;;;N;;;;;
+FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0649 0670;;;;N;;;;;
+FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C 0651;;;;N;;;;;
+FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D 0651;;;;N;;;;;
+FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E 0651;;;;N;;;;;
+FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F 0651;;;;N;;;;;
+FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650 0651;;;;N;;;;;
+FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651 0670;;;;N;;;;;
+FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL;<final> 0626 0631;;;;N;;;;;
+FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0626 0632;;;;N;;;;;
+FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL;<final> 0626 0645;;;;N;;;;;
+FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL;<final> 0626 0646;;;;N;;;;;
+FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL;<final> 0626 064A;;;;N;;;;;
+FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL;<final> 0628 0631;;;;N;;;;;
+FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0628 0632;;;;N;;;;;
+FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0628 0645;;;;N;;;;;
+FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL;<final> 0628 0646;;;;N;;;;;
+FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0628 0649;;;;N;;;;;
+FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 064A;;;;N;;;;;
+FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL;<final> 062A 0631;;;;N;;;;;
+FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062A 0632;;;;N;;;;;
+FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062A 0645;;;;N;;;;;
+FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062A 0646;;;;N;;;;;
+FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0649;;;;N;;;;;
+FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 064A;;;;N;;;;;
+FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL;<final> 062B 0631;;;;N;;;;;
+FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062B 0632;;;;N;;;;;
+FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062B 0645;;;;N;;;;;
+FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062B 0646;;;;N;;;;;
+FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062B 0649;;;;N;;;;;
+FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062B 064A;;;;N;;;;;
+FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0641 0649;;;;N;;;;;
+FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 064A;;;;N;;;;;
+FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0642 0649;;;;N;;;;;
+FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 064A;;;;N;;;;;
+FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL;<final> 0643 0627;;;;N;;;;;
+FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL;<final> 0643 0644;;;;N;;;;;
+FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645;;;;N;;;;;
+FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0643 0649;;;;N;;;;;
+FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 064A;;;;N;;;;;
+FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 0645;;;;N;;;;;
+FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 0649;;;;N;;;;;
+FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 064A;;;;N;;;;;
+FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0645 0627;;;;N;;;;;
+FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0645 0645;;;;N;;;;;
+FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL;<final> 0646 0631;;;;N;;;;;
+FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0646 0632;;;;N;;;;;
+FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 0645;;;;N;;;;;
+FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL;<final> 0646 0646;;;;N;;;;;
+FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0649;;;;N;;;;;
+FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 064A;;;;N;;;;;
+FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL;<final> 0649 0670;;;;N;;;;;
+FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL;<final> 064A 0631;;;;N;;;;;
+FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 064A 0632;;;;N;;;;;
+FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645;;;;N;;;;;
+FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL;<final> 064A 0646;;;;N;;;;;
+FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 064A 0649;;;;N;;;;;
+FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 064A;;;;N;;;;;
+FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0626 062C;;;;N;;;;;
+FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0626 062D;;;;N;;;;;
+FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0626 062E;;;;N;;;;;
+FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0626 0645;;;;N;;;;;
+FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0626 0647;;;;N;;;;;
+FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0628 062C;;;;N;;;;;
+FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0628 062D;;;;N;;;;;
+FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0628 062E;;;;N;;;;;
+FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0628 0645;;;;N;;;;;
+FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0628 0647;;;;N;;;;;
+FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C;;;;N;;;;;
+FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 062D;;;;N;;;;;
+FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 062E;;;;N;;;;;
+FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645;;;;N;;;;;
+FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 062A 0647;;;;N;;;;;
+FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062B 0645;;;;N;;;;;
+FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 062D;;;;N;;;;;
+FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062C 0645;;;;N;;;;;
+FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062D 062C;;;;N;;;;;
+FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062D 0645;;;;N;;;;;
+FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062E 062C;;;;N;;;;;
+FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062E 0645;;;;N;;;;;
+FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062C;;;;N;;;;;
+FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062D;;;;N;;;;;
+FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0633 062E;;;;N;;;;;
+FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645;;;;N;;;;;
+FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D;;;;N;;;;;
+FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0635 062E;;;;N;;;;;
+FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645;;;;N;;;;;
+FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062C;;;;N;;;;;
+FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0636 062D;;;;N;;;;;
+FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0636 062E;;;;N;;;;;
+FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 0645;;;;N;;;;;
+FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 062D;;;;N;;;;;
+FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0638 0645;;;;N;;;;;
+FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C;;;;N;;;;;
+FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645;;;;N;;;;;
+FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 063A 062C;;;;N;;;;;
+FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 063A 0645;;;;N;;;;;
+FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062C;;;;N;;;;;
+FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0641 062D;;;;N;;;;;
+FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0641 062E;;;;N;;;;;
+FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 0645;;;;N;;;;;
+FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 062D;;;;N;;;;;
+FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0642 0645;;;;N;;;;;
+FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0643 062C;;;;N;;;;;
+FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0643 062D;;;;N;;;;;
+FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0643 062E;;;;N;;;;;
+FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL;<initial> 0643 0644;;;;N;;;;;
+FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645;;;;N;;;;;
+FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C;;;;N;;;;;
+FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 062D;;;;N;;;;;
+FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0644 062E;;;;N;;;;;
+FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 0645;;;;N;;;;;
+FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0644 0647;;;;N;;;;;
+FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C;;;;N;;;;;
+FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062D;;;;N;;;;;
+FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062E;;;;N;;;;;
+FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 0645;;;;N;;;;;
+FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C;;;;N;;;;;
+FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062D;;;;N;;;;;
+FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0646 062E;;;;N;;;;;
+FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 0645;;;;N;;;;;
+FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0646 0647;;;;N;;;;;
+FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 062C;;;;N;;;;;
+FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645;;;;N;;;;;
+FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL;<initial> 0647 0670;;;;N;;;;;
+FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 064A 062C;;;;N;;;;;
+FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 064A 062D;;;;N;;;;;
+FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 064A 062E;;;;N;;;;;
+FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645;;;;N;;;;;
+FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 064A 0647;;;;N;;;;;
+FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0626 0645;;;;N;;;;;
+FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0626 0647;;;;N;;;;;
+FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0628 0645;;;;N;;;;;
+FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0628 0647;;;;N;;;;;
+FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062A 0645;;;;N;;;;;
+FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062A 0647;;;;N;;;;;
+FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062B 0645;;;;N;;;;;
+FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062B 0647;;;;N;;;;;
+FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 0645;;;;N;;;;;
+FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0633 0647;;;;N;;;;;
+FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 0645;;;;N;;;;;
+FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0634 0647;;;;N;;;;;
+FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL;<medial> 0643 0644;;;;N;;;;;
+FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0643 0645;;;;N;;;;;
+FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0644 0645;;;;N;;;;;
+FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0646 0645;;;;N;;;;;
+FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0646 0647;;;;N;;;;;
+FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 064A 0645;;;;N;;;;;
+FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 064A 0647;;;;N;;;;;
+FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E 0651;;;;N;;;;;
+FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F 0651;;;;N;;;;;
+FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650 0651;;;;N;;;;;
+FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0637 0649;;;;N;;;;;
+FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0637 064A;;;;N;;;;;
+FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0639 0649;;;;N;;;;;
+FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0639 064A;;;;N;;;;;
+FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 063A 0649;;;;N;;;;;
+FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 063A 064A;;;;N;;;;;
+FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0633 0649;;;;N;;;;;
+FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0633 064A;;;;N;;;;;
+FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0634 0649;;;;N;;;;;
+FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0634 064A;;;;N;;;;;
+FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062D 0649;;;;N;;;;;
+FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062D 064A;;;;N;;;;;
+FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062C 0649;;;;N;;;;;
+FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062C 064A;;;;N;;;;;
+FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062E 0649;;;;N;;;;;
+FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062E 064A;;;;N;;;;;
+FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0649;;;;N;;;;;
+FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0635 064A;;;;N;;;;;
+FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0636 0649;;;;N;;;;;
+FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0636 064A;;;;N;;;;;
+FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 062C;;;;N;;;;;
+FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062D;;;;N;;;;;
+FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062E;;;;N;;;;;
+FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 0645;;;;N;;;;;
+FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0634 0631;;;;N;;;;;
+FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0633 0631;;;;N;;;;;
+FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0635 0631;;;;N;;;;;
+FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0636 0631;;;;N;;;;;
+FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0637 0649;;;;N;;;;;
+FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 064A;;;;N;;;;;
+FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0649;;;;N;;;;;
+FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 064A;;;;N;;;;;
+FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0649;;;;N;;;;;
+FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 064A;;;;N;;;;;
+FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 0649;;;;N;;;;;
+FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 064A;;;;N;;;;;
+FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0634 0649;;;;N;;;;;
+FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 064A;;;;N;;;;;
+FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0649;;;;N;;;;;
+FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 064A;;;;N;;;;;
+FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0649;;;;N;;;;;
+FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 064A;;;;N;;;;;
+FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062E 0649;;;;N;;;;;
+FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062E 064A;;;;N;;;;;
+FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0635 0649;;;;N;;;;;
+FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 064A;;;;N;;;;;
+FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 0649;;;;N;;;;;
+FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 064A;;;;N;;;;;
+FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL;<final> 0634 062C;;;;N;;;;;
+FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL;<final> 0634 062D;;;;N;;;;;
+FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 062E;;;;N;;;;;
+FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645;;;;N;;;;;
+FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0634 0631;;;;N;;;;;
+FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0633 0631;;;;N;;;;;
+FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL;<final> 0635 0631;;;;N;;;;;
+FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL;<final> 0636 0631;;;;N;;;;;
+FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062C;;;;N;;;;;
+FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0634 062D;;;;N;;;;;
+FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 062E;;;;N;;;;;
+FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645;;;;N;;;;;
+FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0633 0647;;;;N;;;;;
+FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0634 0647;;;;N;;;;;
+FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645;;;;N;;;;;
+FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 062C;;;;N;;;;;
+FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062D;;;;N;;;;;
+FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062E;;;;N;;;;;
+FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 062C;;;;N;;;;;
+FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062D;;;;N;;;;;
+FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062E;;;;N;;;;;
+FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0637 0645;;;;N;;;;;
+FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0638 0645;;;;N;;;;;
+FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL;<final> 0627 064B;;;;N;;;;;
+FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0627 064B;;;;N;;;;;
+FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
+FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
+FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C 0645;;;;N;;;;;
+FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL;<final> 062A 062D 062C;;;;N;;;;;
+FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 062C;;;;N;;;;;
+FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 0645;;;;N;;;;;
+FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062E 0645;;;;N;;;;;
+FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062C;;;;N;;;;;
+FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062D;;;;N;;;;;
+FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062E;;;;N;;;;;
+FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 062C 0645 062D;;;;N;;;;;
+FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 0645 062D;;;;N;;;;;
+FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 0645 064A;;;;N;;;;;
+FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0645 0649;;;;N;;;;;
+FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062D 062C;;;;N;;;;;
+FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062C 062D;;;;N;;;;;
+FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062C 0649;;;;N;;;;;
+FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0633 0645 062D;;;;N;;;;;
+FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062D;;;;N;;;;;
+FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062C;;;;N;;;;;
+FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0633 0645 0645;;;;N;;;;;
+FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 0645;;;;N;;;;;
+FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL;<final> 0635 062D 062D;;;;N;;;;;
+FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D 062D;;;;N;;;;;
+FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0635 0645 0645;;;;N;;;;;
+FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 062D 0645;;;;N;;;;;
+FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062D 0645;;;;N;;;;;
+FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062C 064A;;;;N;;;;;
+FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 0645 062E;;;;N;;;;;
+FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 0645 062E;;;;N;;;;;
+FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645 0645;;;;N;;;;;
+FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645 0645;;;;N;;;;;
+FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 062D 0649;;;;N;;;;;
+FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0636 062E 0645;;;;N;;;;;
+FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062E 0645;;;;N;;;;;
+FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0637 0645 062D;;;;N;;;;;
+FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 0645 062D;;;;N;;;;;
+FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645 0645;;;;N;;;;;
+FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 0645 064A;;;;N;;;;;
+FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 062C 0645;;;;N;;;;;
+FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 0645 0645;;;;N;;;;;
+FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645 0645;;;;N;;;;;
+FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0645 0649;;;;N;;;;;
+FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 063A 0645 0645;;;;N;;;;;
+FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 0645 064A;;;;N;;;;;
+FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0645 0649;;;;N;;;;;
+FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0641 062E 0645;;;;N;;;;;
+FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062E 0645;;;;N;;;;;
+FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0642 0645 062D;;;;N;;;;;
+FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0642 0645 0645;;;;N;;;;;
+FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062D 0645;;;;N;;;;;
+FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062D 064A;;;;N;;;;;
+FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 062D 0649;;;;N;;;;;
+FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 062C;;;;N;;;;;
+FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 062C;;;;N;;;;;
+FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062E 0645;;;;N;;;;;
+FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062E 0645;;;;N;;;;;
+FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0644 0645 062D;;;;N;;;;;
+FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 0645 062D;;;;N;;;;;
+FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 062C;;;;N;;;;;
+FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 0645;;;;N;;;;;
+FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062D 064A;;;;N;;;;;
+FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062D;;;;N;;;;;
+FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C 0645;;;;N;;;;;
+FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 062C;;;;N;;;;;
+FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 0645;;;;N;;;;;
+FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062E;;;;N;;;;;
+FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 062C;;;;N;;;;;
+FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 0645;;;;N;;;;;
+FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062D 0645;;;;N;;;;;
+FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062D 0649;;;;N;;;;;
+FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 062C 0645;;;;N;;;;;
+FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C 0645;;;;N;;;;;
+FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062C 0649;;;;N;;;;;
+FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 0645 064A;;;;N;;;;;
+FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0645 0649;;;;N;;;;;
+FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645 0645;;;;N;;;;;
+FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645 0645;;;;N;;;;;
+FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062E 064A;;;;N;;;;;
+FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062C 064A;;;;N;;;;;
+FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062C 0649;;;;N;;;;;
+FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062E 064A;;;;N;;;;;
+FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062E 0649;;;;N;;;;;
+FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 0645 064A;;;;N;;;;;
+FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0645 0649;;;;N;;;;;
+FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 0645 064A;;;;N;;;;;
+FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 062D 0649;;;;N;;;;;
+FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0645 0649;;;;N;;;;;
+FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062E 0649;;;;N;;;;;
+FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 062D 064A;;;;N;;;;;
+FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062D 064A;;;;N;;;;;
+FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 062D 064A;;;;N;;;;;
+FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062C 064A;;;;N;;;;;
+FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 0645 064A;;;;N;;;;;
+FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062D 064A;;;;N;;;;;
+FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062C 064A;;;;N;;;;;
+FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 0645 064A;;;;N;;;;;
+FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 0645 064A;;;;N;;;;;
+FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 0645 064A;;;;N;;;;;
+FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062D 064A;;;;N;;;;;
+FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 0645 062D;;;;N;;;;;
+FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062D 0645;;;;N;;;;;
+FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 0645 064A;;;;N;;;;;
+FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 0645 064A;;;;N;;;;;
+FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062C 062D;;;;N;;;;;
+FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062E 064A;;;;N;;;;;
+FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 0645;;;;N;;;;;
+FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645 0645;;;;N;;;;;
+FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 0645;;;;N;;;;;
+FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0646 062C 062D;;;;N;;;;;
+FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 062D 064A;;;;N;;;;;
+FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 062C 064A;;;;N;;;;;
+FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062C 064A;;;;N;;;;;
+FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 0645 064A;;;;N;;;;;
+FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062D 064A;;;;N;;;;;
+FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645 0645;;;;N;;;;;
+FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C 0645;;;;N;;;;;
+FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645 0645;;;;N;;;;;
+FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 062E 064A;;;;N;;;;;
+FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062C 064A;;;;N;;;;;
+FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 06D2;;;;N;;;;;
+FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0642 0644 06D2;;;;N;;;;;
+FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL;<isolated> 0627 0644 0644 0647;;;;N;;;;;
+FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL;<isolated> 0627 0643 0628 0631;;;;N;;;;;
+FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D 0645 062F;;;;N;;;;;
+FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0639 0645;;;;N;;;;;
+FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL;<isolated> 0631 0633 0648 0644;;;;N;;;;;
+FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL;<isolated> 0639 0644 064A 0647;;;;N;;;;;
+FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL;<isolated> 0648 0633 0644 0645;;;;N;;;;;
+FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0649;;;;N;;;;;
+FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;;
+FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
+FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
+FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
+FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
+FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;;
+FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;;
+FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;;
+FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;;
+FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;;
+FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;;
+FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;;
+FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;;
+FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;;
+FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;;
+FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;;
+FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;;
+FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;;
+FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;;
+FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;;
+FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;;
+FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;;
+FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;;
+FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;;
+FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;;
+FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;;
+FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;;
+FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;;
+FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;;
+FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;;
+FE50;SMALL COMMA;Po;0;CS;<small> 002C;;;;N;;;;;
+FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;;
+FE52;SMALL FULL STOP;Po;0;CS;<small> 002E;;;;N;SMALL PERIOD;;;;
+FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;;
+FE55;SMALL COLON;Po;0;CS;<small> 003A;;;;N;;;;;
+FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
+FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
+FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
+FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;N;SMALL OPENING PARENTHESIS;;;;
+FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;N;SMALL CLOSING PARENTHESIS;;;;
+FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;N;SMALL OPENING CURLY BRACKET;;;;
+FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;;
+FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;;
+FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
+FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;;
+FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
+FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
+FE62;SMALL PLUS SIGN;Sm;0;ET;<small> 002B;;;;N;;;;;
+FE63;SMALL HYPHEN-MINUS;Pd;0;ET;<small> 002D;;;;N;;;;;
+FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;N;;;;;
+FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;N;;;;;
+FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
+FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
+FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;;
+FE6A;SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;;
+FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;;
+FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;;
+FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;;
+FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;;
+FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;;
+FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;;
+FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;;
+FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;;
+FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;;
+FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;;
+FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;;
+FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;;
+FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;;
+FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;;
+FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;;
+FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;;
+FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;;
+FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;;
+FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;;
+FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;;
+FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;;
+FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;;
+FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;;
+FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;;
+FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;;
+FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;;
+FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;;
+FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;;
+FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;;
+FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;;
+FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;;
+FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;;
+FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;;
+FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;;
+FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;;
+FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;;
+FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;;
+FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;;
+FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;;
+FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;;
+FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;;
+FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;;
+FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;;
+FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;;
+FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;
+FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;
+FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;
+FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;
+FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;;
+FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;;
+FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;;
+FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;;
+FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;;
+FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;;
+FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;;
+FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;;
+FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;;
+FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;;
+FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;;
+FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;;
+FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;;
+FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;;
+FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;;
+FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;;
+FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;;
+FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;;
+FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;;
+FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;;
+FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;
+FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;
+FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;
+FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;
+FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;;
+FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;;
+FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;;
+FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;;
+FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;;
+FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;;
+FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;;
+FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;;
+FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;;
+FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;;
+FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;;
+FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;;
+FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;;
+FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;;
+FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;;
+FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;;
+FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;;
+FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;;
+FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;;
+FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;;
+FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;;
+FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;;
+FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;;
+FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;;
+FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;;
+FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;;
+FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;;
+FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;;
+FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;;
+FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;;
+FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;;
+FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;;
+FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;;
+FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;;
+FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;;
+FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;;
+FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;;
+FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;;
+FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;;
+FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;;
+FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;;
+FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;;
+FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;;
+FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;;
+FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;;
+FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;;
+FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;;
+FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;;
+FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;;
+FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;;
+FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;;
+FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;;
+FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;;
+FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;;
+FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;;
+FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;;
+FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;;
+FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;;
+FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;;
+FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;;
+FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;;
+FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;;
+FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;;
+FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;;
+FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;;
+FF03;FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;;
+FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET;<wide> 0024;;;;N;;;;;
+FF05;FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;;
+FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;;
+FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;
+FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;N;FULLWIDTH OPENING PARENTHESIS;;;;
+FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;N;FULLWIDTH CLOSING PARENTHESIS;;;;
+FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
+FF0B;FULLWIDTH PLUS SIGN;Sm;0;ET;<wide> 002B;;;;N;;;;;
+FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;;
+FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ET;<wide> 002D;;;;N;;;;;
+FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
+FF0F;FULLWIDTH SOLIDUS;Po;0;ES;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
+FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
+FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
+FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
+FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;;
+FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;;
+FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;;
+FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;;
+FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;;
+FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;;
+FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;;
+FF1A;FULLWIDTH COLON;Po;0;CS;<wide> 003A;;;;N;;;;;
+FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;;
+FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;N;;;;;
+FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;;
+FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;N;;;;;
+FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;;
+FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;;
+FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41;
+FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42;
+FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43;
+FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44;
+FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45;
+FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46;
+FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47;
+FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48;
+FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49;
+FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A;
+FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B;
+FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C;
+FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D;
+FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E;
+FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F;
+FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50;
+FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51;
+FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52;
+FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53;
+FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54;
+FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55;
+FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56;
+FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57;
+FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58;
+FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59;
+FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A;
+FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;N;FULLWIDTH OPENING SQUARE BRACKET;;;;
+FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;;
+FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;N;FULLWIDTH CLOSING SQUARE BRACKET;;;;
+FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;;
+FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;;
+FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;;
+FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21
+FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22
+FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23
+FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24
+FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25
+FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26
+FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27
+FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28
+FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29
+FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A
+FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B
+FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C
+FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D
+FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E
+FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F
+FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30
+FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31
+FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32
+FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33
+FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34
+FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35
+FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36
+FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37
+FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38
+FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39
+FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A
+FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;N;FULLWIDTH OPENING CURLY BRACKET;;;;
+FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;;
+FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;N;FULLWIDTH CLOSING CURLY BRACKET;;;;
+FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;;
+FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;;
+FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;N;HALFWIDTH OPENING CORNER BRACKET;;;;
+FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;N;HALFWIDTH CLOSING CORNER BRACKET;;;;
+FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
+FF65;HALFWIDTH KATAKANA MIDDLE DOT;Pc;0;ON;<narrow> 30FB;;;;N;;;;;
+FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
+FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
+FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
+FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;;
+FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;;
+FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;;
+FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;;
+FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;;
+FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;;
+FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;;
+FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;;
+FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;;
+FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;;
+FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;;
+FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;;
+FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;;
+FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;;
+FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;;
+FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;;
+FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;;
+FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;;
+FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;;
+FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;;
+FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;;
+FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;;
+FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;;
+FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;;
+FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;;
+FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;;
+FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;;
+FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;;
+FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;;
+FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;;
+FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;;
+FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;;
+FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;;
+FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;;
+FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;;
+FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;;
+FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;;
+FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;;
+FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;;
+FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;;
+FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;;
+FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;;
+FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;;
+FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;;
+FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;;
+FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;;
+FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;;
+FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;;
+FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;;
+FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;;
+FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;;
+FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;;
+FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;;
+FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;halfwidth katakana-hiragana voiced sound mark;;;
+FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;halfwidth katakana-hiragana semi-voiced sound mark;;;
+FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;;
+FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;;
+FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;;
+FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
+FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;;
+FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;;
+FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;;
+FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;;
+FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;;
+FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;;
+FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;;
+FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;;
+FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;;
+FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;;
+FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;;
+FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;;
+FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;;
+FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;;
+FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;;
+FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;;
+FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;;
+FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;;
+FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;;
+FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;;
+FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;;
+FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;;
+FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;;
+FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;;
+FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;;
+FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;;
+FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;;
+FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;;
+FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;;
+FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;;
+FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;;
+FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;;
+FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;;
+FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;;
+FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;;
+FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;;
+FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;;
+FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;;
+FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;;
+FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;;
+FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;;
+FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;;
+FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;;
+FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;;
+FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;;
+FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;;
+FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;;
+FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;
+FFE0;FULLWIDTH CENT SIGN;Sc;0;ET;<wide> 00A2;;;;N;;;;;
+FFE1;FULLWIDTH POUND SIGN;Sc;0;ET;<wide> 00A3;;;;N;;;;;
+FFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;;
+FFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;*;;;
+FFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;;
+FFE5;FULLWIDTH YEN SIGN;Sc;0;ET;<wide> 00A5;;;;N;;;;;
+FFE6;FULLWIDTH WON SIGN;Sc;0;ET;<wide> 20A9;;;;N;;;;;
+FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON;<narrow> 2502;;;;N;;;;;
+FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;;
+FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;;
+FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;;
+FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;
+FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;
+FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;
+FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;BN;;;;;N;;;;;
+FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;BN;;;;;N;;;;;
+FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;BN;;;;;N;;;;;
+FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/readtype/unicodedata-3.0.0_IndicCharsFrom_5.0.txt	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,10651 @@
+0000;<control>;Cc;0;BN;;;;;N;NULL;;;;
+0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;;;
+0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;;
+0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;;
+0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;;
+0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;;
+0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;;
+0007;<control>;Cc;0;BN;;;;;N;BELL;;;;
+0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;;
+0009;<control>;Cc;0;S;;;;;N;HORIZONTAL TABULATION;;;;
+000A;<control>;Cc;0;B;;;;;N;LINE FEED;;;;
+000B;<control>;Cc;0;S;;;;;N;VERTICAL TABULATION;;;;
+000C;<control>;Cc;0;WS;;;;;N;FORM FEED;;;;
+000D;<control>;Cc;0;B;;;;;N;CARRIAGE RETURN;;;;
+000E;<control>;Cc;0;BN;;;;;N;SHIFT OUT;;;;
+000F;<control>;Cc;0;BN;;;;;N;SHIFT IN;;;;
+0010;<control>;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;;
+0011;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;;
+0012;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;;
+0013;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;;
+0014;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;;
+0015;<control>;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;;
+0016;<control>;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;;
+0017;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;;
+0018;<control>;Cc;0;BN;;;;;N;CANCEL;;;;
+0019;<control>;Cc;0;BN;;;;;N;END OF MEDIUM;;;;
+001A;<control>;Cc;0;BN;;;;;N;SUBSTITUTE;;;;
+001B;<control>;Cc;0;BN;;;;;N;ESCAPE;;;;
+001C;<control>;Cc;0;B;;;;;N;FILE SEPARATOR;;;;
+001D;<control>;Cc;0;B;;;;;N;GROUP SEPARATOR;;;;
+001E;<control>;Cc;0;B;;;;;N;RECORD SEPARATOR;;;;
+001F;<control>;Cc;0;S;;;;;N;UNIT SEPARATOR;;;;
+0020;SPACE;Zs;0;WS;;;;;N;;;;;
+0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;
+0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;;
+0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;;
+0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+0026;AMPERSAND;Po;0;ON;;;;;N;;;;;
+0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;
+0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
+0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
+002A;ASTERISK;Po;0;ON;;;;;N;;;;;
+002B;PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+002C;COMMA;Po;0;CS;;;;;N;;;;;
+002D;HYPHEN-MINUS;Pd;0;ET;;;;;N;;;;;
+002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
+002F;SOLIDUS;Po;0;ES;;;;;N;SLASH;;;;
+0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
+0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
+0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
+0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;;
+0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;;
+0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;;
+0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;;
+0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;;
+0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;;
+0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;;
+003A;COLON;Po;0;CS;;;;;N;;;;;
+003B;SEMICOLON;Po;0;ON;;;;;N;;;;;
+003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
+003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;
+0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;
+0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;
+0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;
+0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;
+0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064;
+0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065;
+0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066;
+0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067;
+0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068;
+0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069;
+004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A;
+004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B;
+004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C;
+004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D;
+004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E;
+004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F;
+0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070;
+0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071;
+0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072;
+0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073;
+0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074;
+0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075;
+0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076;
+0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077;
+0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078;
+0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079;
+005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A;
+005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;
+005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;;
+005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;;
+005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;;
+005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;;
+0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;;
+0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041
+0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042
+0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043
+0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044
+0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045
+0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046
+0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047
+0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048
+0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049
+006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A
+006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B
+006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C
+006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D
+006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E
+006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F
+0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050
+0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051
+0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052
+0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053
+0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054
+0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055
+0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056
+0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057
+0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058
+0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059
+007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A
+007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;;
+007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;;
+007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;;
+007E;TILDE;Sm;0;ON;;;;;N;;;;;
+007F;<control>;Cc;0;BN;;;;;N;DELETE;;;;
+0080;<control>;Cc;0;BN;;;;;N;;;;;
+0081;<control>;Cc;0;BN;;;;;N;;;;;
+0082;<control>;Cc;0;BN;;;;;N;BREAK PERMITTED HERE;;;;
+0083;<control>;Cc;0;BN;;;;;N;NO BREAK HERE;;;;
+0084;<control>;Cc;0;BN;;;;;N;INDEX;;;;
+0085;<control>;Cc;0;B;;;;;N;NEXT LINE;;;;
+0086;<control>;Cc;0;BN;;;;;N;START OF SELECTED AREA;;;;
+0087;<control>;Cc;0;BN;;;;;N;END OF SELECTED AREA;;;;
+0088;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION SET;;;;
+0089;<control>;Cc;0;BN;;;;;N;CHARACTER TABULATION WITH JUSTIFICATION;;;;
+008A;<control>;Cc;0;BN;;;;;N;LINE TABULATION SET;;;;
+008B;<control>;Cc;0;BN;;;;;N;PARTIAL LINE DOWN;;;;
+008C;<control>;Cc;0;BN;;;;;N;PARTIAL LINE UP;;;;
+008D;<control>;Cc;0;BN;;;;;N;REVERSE LINE FEED;;;;
+008E;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT TWO;;;;
+008F;<control>;Cc;0;BN;;;;;N;SINGLE SHIFT THREE;;;;
+0090;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL STRING;;;;
+0091;<control>;Cc;0;BN;;;;;N;PRIVATE USE ONE;;;;
+0092;<control>;Cc;0;BN;;;;;N;PRIVATE USE TWO;;;;
+0093;<control>;Cc;0;BN;;;;;N;SET TRANSMIT STATE;;;;
+0094;<control>;Cc;0;BN;;;;;N;CANCEL CHARACTER;;;;
+0095;<control>;Cc;0;BN;;;;;N;MESSAGE WAITING;;;;
+0096;<control>;Cc;0;BN;;;;;N;START OF GUARDED AREA;;;;
+0097;<control>;Cc;0;BN;;;;;N;END OF GUARDED AREA;;;;
+0098;<control>;Cc;0;BN;;;;;N;START OF STRING;;;;
+0099;<control>;Cc;0;BN;;;;;N;;;;;
+009A;<control>;Cc;0;BN;;;;;N;SINGLE CHARACTER INTRODUCER;;;;
+009B;<control>;Cc;0;BN;;;;;N;CONTROL SEQUENCE INTRODUCER;;;;
+009C;<control>;Cc;0;BN;;;;;N;STRING TERMINATOR;;;;
+009D;<control>;Cc;0;BN;;;;;N;OPERATING SYSTEM COMMAND;;;;
+009E;<control>;Cc;0;BN;;;;;N;PRIVACY MESSAGE;;;;
+009F;<control>;Cc;0;BN;;;;;N;APPLICATION PROGRAM COMMAND;;;;
+00A0;NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;
+00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;;
+00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;;
+00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;
+00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;
+00A7;SECTION SIGN;So;0;ON;;;;;N;;;;;
+00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;;
+00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;
+00AA;FEMININE ORDINAL INDICATOR;Ll;0;L;<super> 0061;;;;N;;;;;
+00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;*;;;
+00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
+00AD;SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
+00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
+00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
+00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
+00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;
+00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;2;2;2;N;SUPERSCRIPT DIGIT TWO;;;;
+00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;3;3;3;N;SUPERSCRIPT DIGIT THREE;;;;
+00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;;
+00B5;MICRO SIGN;Ll;0;L;<compat> 03BC;;;;N;;;039C;;039C
+00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;;
+00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;;
+00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;1;1;1;N;SUPERSCRIPT DIGIT ONE;;;;
+00BA;MASCULINE ORDINAL INDICATOR;Ll;0;L;<super> 006F;;;;N;;;;;
+00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;*;;;
+00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;
+00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;
+00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;;
+00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;;
+00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0;
+00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1;
+00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2;
+00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3;
+00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4;
+00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5;
+00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;ash *;;00E6;
+00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7;
+00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8;
+00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9;
+00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA;
+00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB;
+00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC;
+00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED;
+00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE;
+00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF;
+00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0;
+00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1;
+00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2;
+00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3;
+00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4;
+00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5;
+00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6;
+00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;;
+00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8;
+00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9;
+00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA;
+00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB;
+00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC;
+00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD;
+00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE;
+00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;;
+00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0
+00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1
+00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2
+00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3
+00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4
+00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5
+00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;ash *;00C6;;00C6
+00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7
+00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8
+00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9
+00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA
+00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB
+00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC
+00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD
+00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE
+00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF
+00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0
+00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1
+00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2
+00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3
+00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4
+00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5
+00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6
+00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8
+00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9
+00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA
+00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB
+00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC
+00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD
+00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE
+00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178
+0100;LATIN CAPITAL LETTER A WITH MACRON;Lu;0;L;0041 0304;;;;N;LATIN CAPITAL LETTER A MACRON;;;0101;
+0101;LATIN SMALL LETTER A WITH MACRON;Ll;0;L;0061 0304;;;;N;LATIN SMALL LETTER A MACRON;;0100;;0100
+0102;LATIN CAPITAL LETTER A WITH BREVE;Lu;0;L;0041 0306;;;;N;LATIN CAPITAL LETTER A BREVE;;;0103;
+0103;LATIN SMALL LETTER A WITH BREVE;Ll;0;L;0061 0306;;;;N;LATIN SMALL LETTER A BREVE;;0102;;0102
+0104;LATIN CAPITAL LETTER A WITH OGONEK;Lu;0;L;0041 0328;;;;N;LATIN CAPITAL LETTER A OGONEK;;;0105;
+0105;LATIN SMALL LETTER A WITH OGONEK;Ll;0;L;0061 0328;;;;N;LATIN SMALL LETTER A OGONEK;;0104;;0104
+0106;LATIN CAPITAL LETTER C WITH ACUTE;Lu;0;L;0043 0301;;;;N;LATIN CAPITAL LETTER C ACUTE;;;0107;
+0107;LATIN SMALL LETTER C WITH ACUTE;Ll;0;L;0063 0301;;;;N;LATIN SMALL LETTER C ACUTE;;0106;;0106
+0108;LATIN CAPITAL LETTER C WITH CIRCUMFLEX;Lu;0;L;0043 0302;;;;N;LATIN CAPITAL LETTER C CIRCUMFLEX;;;0109;
+0109;LATIN SMALL LETTER C WITH CIRCUMFLEX;Ll;0;L;0063 0302;;;;N;LATIN SMALL LETTER C CIRCUMFLEX;;0108;;0108
+010A;LATIN CAPITAL LETTER C WITH DOT ABOVE;Lu;0;L;0043 0307;;;;N;LATIN CAPITAL LETTER C DOT;;;010B;
+010B;LATIN SMALL LETTER C WITH DOT ABOVE;Ll;0;L;0063 0307;;;;N;LATIN SMALL LETTER C DOT;;010A;;010A
+010C;LATIN CAPITAL LETTER C WITH CARON;Lu;0;L;0043 030C;;;;N;LATIN CAPITAL LETTER C HACEK;;;010D;
+010D;LATIN SMALL LETTER C WITH CARON;Ll;0;L;0063 030C;;;;N;LATIN SMALL LETTER C HACEK;;010C;;010C
+010E;LATIN CAPITAL LETTER D WITH CARON;Lu;0;L;0044 030C;;;;N;LATIN CAPITAL LETTER D HACEK;;;010F;
+010F;LATIN SMALL LETTER D WITH CARON;Ll;0;L;0064 030C;;;;N;LATIN SMALL LETTER D HACEK;;010E;;010E
+0110;LATIN CAPITAL LETTER D WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D BAR;;;0111;
+0111;LATIN SMALL LETTER D WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER D BAR;;0110;;0110
+0112;LATIN CAPITAL LETTER E WITH MACRON;Lu;0;L;0045 0304;;;;N;LATIN CAPITAL LETTER E MACRON;;;0113;
+0113;LATIN SMALL LETTER E WITH MACRON;Ll;0;L;0065 0304;;;;N;LATIN SMALL LETTER E MACRON;;0112;;0112
+0114;LATIN CAPITAL LETTER E WITH BREVE;Lu;0;L;0045 0306;;;;N;LATIN CAPITAL LETTER E BREVE;;;0115;
+0115;LATIN SMALL LETTER E WITH BREVE;Ll;0;L;0065 0306;;;;N;LATIN SMALL LETTER E BREVE;;0114;;0114
+0116;LATIN CAPITAL LETTER E WITH DOT ABOVE;Lu;0;L;0045 0307;;;;N;LATIN CAPITAL LETTER E DOT;;;0117;
+0117;LATIN SMALL LETTER E WITH DOT ABOVE;Ll;0;L;0065 0307;;;;N;LATIN SMALL LETTER E DOT;;0116;;0116
+0118;LATIN CAPITAL LETTER E WITH OGONEK;Lu;0;L;0045 0328;;;;N;LATIN CAPITAL LETTER E OGONEK;;;0119;
+0119;LATIN SMALL LETTER E WITH OGONEK;Ll;0;L;0065 0328;;;;N;LATIN SMALL LETTER E OGONEK;;0118;;0118
+011A;LATIN CAPITAL LETTER E WITH CARON;Lu;0;L;0045 030C;;;;N;LATIN CAPITAL LETTER E HACEK;;;011B;
+011B;LATIN SMALL LETTER E WITH CARON;Ll;0;L;0065 030C;;;;N;LATIN SMALL LETTER E HACEK;;011A;;011A
+011C;LATIN CAPITAL LETTER G WITH CIRCUMFLEX;Lu;0;L;0047 0302;;;;N;LATIN CAPITAL LETTER G CIRCUMFLEX;;;011D;
+011D;LATIN SMALL LETTER G WITH CIRCUMFLEX;Ll;0;L;0067 0302;;;;N;LATIN SMALL LETTER G CIRCUMFLEX;;011C;;011C
+011E;LATIN CAPITAL LETTER G WITH BREVE;Lu;0;L;0047 0306;;;;N;LATIN CAPITAL LETTER G BREVE;;;011F;
+011F;LATIN SMALL LETTER G WITH BREVE;Ll;0;L;0067 0306;;;;N;LATIN SMALL LETTER G BREVE;;011E;;011E
+0120;LATIN CAPITAL LETTER G WITH DOT ABOVE;Lu;0;L;0047 0307;;;;N;LATIN CAPITAL LETTER G DOT;;;0121;
+0121;LATIN SMALL LETTER G WITH DOT ABOVE;Ll;0;L;0067 0307;;;;N;LATIN SMALL LETTER G DOT;;0120;;0120
+0122;LATIN CAPITAL LETTER G WITH CEDILLA;Lu;0;L;0047 0327;;;;N;LATIN CAPITAL LETTER G CEDILLA;;;0123;
+0123;LATIN SMALL LETTER G WITH CEDILLA;Ll;0;L;0067 0327;;;;N;LATIN SMALL LETTER G CEDILLA;;0122;;0122
+0124;LATIN CAPITAL LETTER H WITH CIRCUMFLEX;Lu;0;L;0048 0302;;;;N;LATIN CAPITAL LETTER H CIRCUMFLEX;;;0125;
+0125;LATIN SMALL LETTER H WITH CIRCUMFLEX;Ll;0;L;0068 0302;;;;N;LATIN SMALL LETTER H CIRCUMFLEX;;0124;;0124
+0126;LATIN CAPITAL LETTER H WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER H BAR;;;0127;
+0127;LATIN SMALL LETTER H WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER H BAR;;0126;;0126
+0128;LATIN CAPITAL LETTER I WITH TILDE;Lu;0;L;0049 0303;;;;N;LATIN CAPITAL LETTER I TILDE;;;0129;
+0129;LATIN SMALL LETTER I WITH TILDE;Ll;0;L;0069 0303;;;;N;LATIN SMALL LETTER I TILDE;;0128;;0128
+012A;LATIN CAPITAL LETTER I WITH MACRON;Lu;0;L;0049 0304;;;;N;LATIN CAPITAL LETTER I MACRON;;;012B;
+012B;LATIN SMALL LETTER I WITH MACRON;Ll;0;L;0069 0304;;;;N;LATIN SMALL LETTER I MACRON;;012A;;012A
+012C;LATIN CAPITAL LETTER I WITH BREVE;Lu;0;L;0049 0306;;;;N;LATIN CAPITAL LETTER I BREVE;;;012D;
+012D;LATIN SMALL LETTER I WITH BREVE;Ll;0;L;0069 0306;;;;N;LATIN SMALL LETTER I BREVE;;012C;;012C
+012E;LATIN CAPITAL LETTER I WITH OGONEK;Lu;0;L;0049 0328;;;;N;LATIN CAPITAL LETTER I OGONEK;;;012F;
+012F;LATIN SMALL LETTER I WITH OGONEK;Ll;0;L;0069 0328;;;;N;LATIN SMALL LETTER I OGONEK;;012E;;012E
+0130;LATIN CAPITAL LETTER I WITH DOT ABOVE;Lu;0;L;0049 0307;;;;N;LATIN CAPITAL LETTER I DOT;;;0069;
+0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049
+0132;LATIN CAPITAL LIGATURE IJ;Lu;0;L;<compat> 0049 004A;;;;N;LATIN CAPITAL LETTER I J;;;0133;
+0133;LATIN SMALL LIGATURE IJ;Ll;0;L;<compat> 0069 006A;;;;N;LATIN SMALL LETTER I J;;0132;;0132
+0134;LATIN CAPITAL LETTER J WITH CIRCUMFLEX;Lu;0;L;004A 0302;;;;N;LATIN CAPITAL LETTER J CIRCUMFLEX;;;0135;
+0135;LATIN SMALL LETTER J WITH CIRCUMFLEX;Ll;0;L;006A 0302;;;;N;LATIN SMALL LETTER J CIRCUMFLEX;;0134;;0134
+0136;LATIN CAPITAL LETTER K WITH CEDILLA;Lu;0;L;004B 0327;;;;N;LATIN CAPITAL LETTER K CEDILLA;;;0137;
+0137;LATIN SMALL LETTER K WITH CEDILLA;Ll;0;L;006B 0327;;;;N;LATIN SMALL LETTER K CEDILLA;;0136;;0136
+0138;LATIN SMALL LETTER KRA;Ll;0;L;;;;;N;;Greenlandic;;;
+0139;LATIN CAPITAL LETTER L WITH ACUTE;Lu;0;L;004C 0301;;;;N;LATIN CAPITAL LETTER L ACUTE;;;013A;
+013A;LATIN SMALL LETTER L WITH ACUTE;Ll;0;L;006C 0301;;;;N;LATIN SMALL LETTER L ACUTE;;0139;;0139
+013B;LATIN CAPITAL LETTER L WITH CEDILLA;Lu;0;L;004C 0327;;;;N;LATIN CAPITAL LETTER L CEDILLA;;;013C;
+013C;LATIN SMALL LETTER L WITH CEDILLA;Ll;0;L;006C 0327;;;;N;LATIN SMALL LETTER L CEDILLA;;013B;;013B
+013D;LATIN CAPITAL LETTER L WITH CARON;Lu;0;L;004C 030C;;;;N;LATIN CAPITAL LETTER L HACEK;;;013E;
+013E;LATIN SMALL LETTER L WITH CARON;Ll;0;L;006C 030C;;;;N;LATIN SMALL LETTER L HACEK;;013D;;013D
+013F;LATIN CAPITAL LETTER L WITH MIDDLE DOT;Lu;0;L;<compat> 004C 00B7;;;;N;;;;0140;
+0140;LATIN SMALL LETTER L WITH MIDDLE DOT;Ll;0;L;<compat> 006C 00B7;;;;N;;;013F;;013F
+0141;LATIN CAPITAL LETTER L WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER L SLASH;;;0142;
+0142;LATIN SMALL LETTER L WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER L SLASH;;0141;;0141
+0143;LATIN CAPITAL LETTER N WITH ACUTE;Lu;0;L;004E 0301;;;;N;LATIN CAPITAL LETTER N ACUTE;;;0144;
+0144;LATIN SMALL LETTER N WITH ACUTE;Ll;0;L;006E 0301;;;;N;LATIN SMALL LETTER N ACUTE;;0143;;0143
+0145;LATIN CAPITAL LETTER N WITH CEDILLA;Lu;0;L;004E 0327;;;;N;LATIN CAPITAL LETTER N CEDILLA;;;0146;
+0146;LATIN SMALL LETTER N WITH CEDILLA;Ll;0;L;006E 0327;;;;N;LATIN SMALL LETTER N CEDILLA;;0145;;0145
+0147;LATIN CAPITAL LETTER N WITH CARON;Lu;0;L;004E 030C;;;;N;LATIN CAPITAL LETTER N HACEK;;;0148;
+0148;LATIN SMALL LETTER N WITH CARON;Ll;0;L;006E 030C;;;;N;LATIN SMALL LETTER N HACEK;;0147;;0147
+0149;LATIN SMALL LETTER N PRECEDED BY APOSTROPHE;Ll;0;L;<compat> 02BC 006E;;;;N;LATIN SMALL LETTER APOSTROPHE N;;;;
+014A;LATIN CAPITAL LETTER ENG;Lu;0;L;;;;;N;;Sami;;014B;
+014B;LATIN SMALL LETTER ENG;Ll;0;L;;;;;N;;Sami;014A;;014A
+014C;LATIN CAPITAL LETTER O WITH MACRON;Lu;0;L;004F 0304;;;;N;LATIN CAPITAL LETTER O MACRON;;;014D;
+014D;LATIN SMALL LETTER O WITH MACRON;Ll;0;L;006F 0304;;;;N;LATIN SMALL LETTER O MACRON;;014C;;014C
+014E;LATIN CAPITAL LETTER O WITH BREVE;Lu;0;L;004F 0306;;;;N;LATIN CAPITAL LETTER O BREVE;;;014F;
+014F;LATIN SMALL LETTER O WITH BREVE;Ll;0;L;006F 0306;;;;N;LATIN SMALL LETTER O BREVE;;014E;;014E
+0150;LATIN CAPITAL LETTER O WITH DOUBLE ACUTE;Lu;0;L;004F 030B;;;;N;LATIN CAPITAL LETTER O DOUBLE ACUTE;;;0151;
+0151;LATIN SMALL LETTER O WITH DOUBLE ACUTE;Ll;0;L;006F 030B;;;;N;LATIN SMALL LETTER O DOUBLE ACUTE;;0150;;0150
+0152;LATIN CAPITAL LIGATURE OE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O E;;;0153;
+0153;LATIN SMALL LIGATURE OE;Ll;0;L;;;;;N;LATIN SMALL LETTER O E;;0152;;0152
+0154;LATIN CAPITAL LETTER R WITH ACUTE;Lu;0;L;0052 0301;;;;N;LATIN CAPITAL LETTER R ACUTE;;;0155;
+0155;LATIN SMALL LETTER R WITH ACUTE;Ll;0;L;0072 0301;;;;N;LATIN SMALL LETTER R ACUTE;;0154;;0154
+0156;LATIN CAPITAL LETTER R WITH CEDILLA;Lu;0;L;0052 0327;;;;N;LATIN CAPITAL LETTER R CEDILLA;;;0157;
+0157;LATIN SMALL LETTER R WITH CEDILLA;Ll;0;L;0072 0327;;;;N;LATIN SMALL LETTER R CEDILLA;;0156;;0156
+0158;LATIN CAPITAL LETTER R WITH CARON;Lu;0;L;0052 030C;;;;N;LATIN CAPITAL LETTER R HACEK;;;0159;
+0159;LATIN SMALL LETTER R WITH CARON;Ll;0;L;0072 030C;;;;N;LATIN SMALL LETTER R HACEK;;0158;;0158
+015A;LATIN CAPITAL LETTER S WITH ACUTE;Lu;0;L;0053 0301;;;;N;LATIN CAPITAL LETTER S ACUTE;;;015B;
+015B;LATIN SMALL LETTER S WITH ACUTE;Ll;0;L;0073 0301;;;;N;LATIN SMALL LETTER S ACUTE;;015A;;015A
+015C;LATIN CAPITAL LETTER S WITH CIRCUMFLEX;Lu;0;L;0053 0302;;;;N;LATIN CAPITAL LETTER S CIRCUMFLEX;;;015D;
+015D;LATIN SMALL LETTER S WITH CIRCUMFLEX;Ll;0;L;0073 0302;;;;N;LATIN SMALL LETTER S CIRCUMFLEX;;015C;;015C
+015E;LATIN CAPITAL LETTER S WITH CEDILLA;Lu;0;L;0053 0327;;;;N;LATIN CAPITAL LETTER S CEDILLA;*;;015F;
+015F;LATIN SMALL LETTER S WITH CEDILLA;Ll;0;L;0073 0327;;;;N;LATIN SMALL LETTER S CEDILLA;*;015E;;015E
+0160;LATIN CAPITAL LETTER S WITH CARON;Lu;0;L;0053 030C;;;;N;LATIN CAPITAL LETTER S HACEK;;;0161;
+0161;LATIN SMALL LETTER S WITH CARON;Ll;0;L;0073 030C;;;;N;LATIN SMALL LETTER S HACEK;;0160;;0160
+0162;LATIN CAPITAL LETTER T WITH CEDILLA;Lu;0;L;0054 0327;;;;N;LATIN CAPITAL LETTER T CEDILLA;*;;0163;
+0163;LATIN SMALL LETTER T WITH CEDILLA;Ll;0;L;0074 0327;;;;N;LATIN SMALL LETTER T CEDILLA;*;0162;;0162
+0164;LATIN CAPITAL LETTER T WITH CARON;Lu;0;L;0054 030C;;;;N;LATIN CAPITAL LETTER T HACEK;;;0165;
+0165;LATIN SMALL LETTER T WITH CARON;Ll;0;L;0074 030C;;;;N;LATIN SMALL LETTER T HACEK;;0164;;0164
+0166;LATIN CAPITAL LETTER T WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T BAR;;;0167;
+0167;LATIN SMALL LETTER T WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER T BAR;;0166;;0166
+0168;LATIN CAPITAL LETTER U WITH TILDE;Lu;0;L;0055 0303;;;;N;LATIN CAPITAL LETTER U TILDE;;;0169;
+0169;LATIN SMALL LETTER U WITH TILDE;Ll;0;L;0075 0303;;;;N;LATIN SMALL LETTER U TILDE;;0168;;0168
+016A;LATIN CAPITAL LETTER U WITH MACRON;Lu;0;L;0055 0304;;;;N;LATIN CAPITAL LETTER U MACRON;;;016B;
+016B;LATIN SMALL LETTER U WITH MACRON;Ll;0;L;0075 0304;;;;N;LATIN SMALL LETTER U MACRON;;016A;;016A
+016C;LATIN CAPITAL LETTER U WITH BREVE;Lu;0;L;0055 0306;;;;N;LATIN CAPITAL LETTER U BREVE;;;016D;
+016D;LATIN SMALL LETTER U WITH BREVE;Ll;0;L;0075 0306;;;;N;LATIN SMALL LETTER U BREVE;;016C;;016C
+016E;LATIN CAPITAL LETTER U WITH RING ABOVE;Lu;0;L;0055 030A;;;;N;LATIN CAPITAL LETTER U RING;;;016F;
+016F;LATIN SMALL LETTER U WITH RING ABOVE;Ll;0;L;0075 030A;;;;N;LATIN SMALL LETTER U RING;;016E;;016E
+0170;LATIN CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0055 030B;;;;N;LATIN CAPITAL LETTER U DOUBLE ACUTE;;;0171;
+0171;LATIN SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0075 030B;;;;N;LATIN SMALL LETTER U DOUBLE ACUTE;;0170;;0170
+0172;LATIN CAPITAL LETTER U WITH OGONEK;Lu;0;L;0055 0328;;;;N;LATIN CAPITAL LETTER U OGONEK;;;0173;
+0173;LATIN SMALL LETTER U WITH OGONEK;Ll;0;L;0075 0328;;;;N;LATIN SMALL LETTER U OGONEK;;0172;;0172
+0174;LATIN CAPITAL LETTER W WITH CIRCUMFLEX;Lu;0;L;0057 0302;;;;N;LATIN CAPITAL LETTER W CIRCUMFLEX;;;0175;
+0175;LATIN SMALL LETTER W WITH CIRCUMFLEX;Ll;0;L;0077 0302;;;;N;LATIN SMALL LETTER W CIRCUMFLEX;;0174;;0174
+0176;LATIN CAPITAL LETTER Y WITH CIRCUMFLEX;Lu;0;L;0059 0302;;;;N;LATIN CAPITAL LETTER Y CIRCUMFLEX;;;0177;
+0177;LATIN SMALL LETTER Y WITH CIRCUMFLEX;Ll;0;L;0079 0302;;;;N;LATIN SMALL LETTER Y CIRCUMFLEX;;0176;;0176
+0178;LATIN CAPITAL LETTER Y WITH DIAERESIS;Lu;0;L;0059 0308;;;;N;LATIN CAPITAL LETTER Y DIAERESIS;;;00FF;
+0179;LATIN CAPITAL LETTER Z WITH ACUTE;Lu;0;L;005A 0301;;;;N;LATIN CAPITAL LETTER Z ACUTE;;;017A;
+017A;LATIN SMALL LETTER Z WITH ACUTE;Ll;0;L;007A 0301;;;;N;LATIN SMALL LETTER Z ACUTE;;0179;;0179
+017B;LATIN CAPITAL LETTER Z WITH DOT ABOVE;Lu;0;L;005A 0307;;;;N;LATIN CAPITAL LETTER Z DOT;;;017C;
+017C;LATIN SMALL LETTER Z WITH DOT ABOVE;Ll;0;L;007A 0307;;;;N;LATIN SMALL LETTER Z DOT;;017B;;017B
+017D;LATIN CAPITAL LETTER Z WITH CARON;Lu;0;L;005A 030C;;;;N;LATIN CAPITAL LETTER Z HACEK;;;017E;
+017E;LATIN SMALL LETTER Z WITH CARON;Ll;0;L;007A 030C;;;;N;LATIN SMALL LETTER Z HACEK;;017D;;017D
+017F;LATIN SMALL LETTER LONG S;Ll;0;L;<compat> 0073;;;;N;;;0053;;0053
+0180;LATIN SMALL LETTER B WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER B BAR;;;;
+0181;LATIN CAPITAL LETTER B WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B HOOK;;;0253;
+0182;LATIN CAPITAL LETTER B WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER B TOPBAR;;;0183;
+0183;LATIN SMALL LETTER B WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER B TOPBAR;;0182;;0182
+0184;LATIN CAPITAL LETTER TONE SIX;Lu;0;L;;;;;N;;;;0185;
+0185;LATIN SMALL LETTER TONE SIX;Ll;0;L;;;;;N;;;0184;;0184
+0186;LATIN CAPITAL LETTER OPEN O;Lu;0;L;;;;;N;;;;0254;
+0187;LATIN CAPITAL LETTER C WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER C HOOK;;;0188;
+0188;LATIN SMALL LETTER C WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER C HOOK;;0187;;0187
+0189;LATIN CAPITAL LETTER AFRICAN D;Lu;0;L;;;;;N;;*;;0256;
+018A;LATIN CAPITAL LETTER D WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D HOOK;;;0257;
+018B;LATIN CAPITAL LETTER D WITH TOPBAR;Lu;0;L;;;;;N;LATIN CAPITAL LETTER D TOPBAR;;;018C;
+018C;LATIN SMALL LETTER D WITH TOPBAR;Ll;0;L;;;;;N;LATIN SMALL LETTER D TOPBAR;;018B;;018B
+018D;LATIN SMALL LETTER TURNED DELTA;Ll;0;L;;;;;N;;;;;
+018E;LATIN CAPITAL LETTER REVERSED E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER TURNED E;;;01DD;
+018F;LATIN CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;0259;
+0190;LATIN CAPITAL LETTER OPEN E;Lu;0;L;;;;;N;LATIN CAPITAL LETTER EPSILON;;;025B;
+0191;LATIN CAPITAL LETTER F WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER F HOOK;;;0192;
+0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191
+0193;LATIN CAPITAL LETTER G WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G HOOK;;;0260;
+0194;LATIN CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;0263;
+0195;LATIN SMALL LETTER HV;Ll;0;L;;;;;N;LATIN SMALL LETTER H V;hwair;01F6;;01F6
+0196;LATIN CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;0269;
+0197;LATIN CAPITAL LETTER I WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED I;;;0268;
+0198;LATIN CAPITAL LETTER K WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER K HOOK;;;0199;
+0199;LATIN SMALL LETTER K WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER K HOOK;;0198;;0198
+019A;LATIN SMALL LETTER L WITH BAR;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED L;;;;
+019B;LATIN SMALL LETTER LAMBDA WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED LAMBDA;;;;
+019C;LATIN CAPITAL LETTER TURNED M;Lu;0;L;;;;;N;;;;026F;
+019D;LATIN CAPITAL LETTER N WITH LEFT HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER N HOOK;;;0272;
+019E;LATIN SMALL LETTER N WITH LONG RIGHT LEG;Ll;0;L;;;;;N;;;;;
+019F;LATIN CAPITAL LETTER O WITH MIDDLE TILDE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER BARRED O;*;;0275;
+01A0;LATIN CAPITAL LETTER O WITH HORN;Lu;0;L;004F 031B;;;;N;LATIN CAPITAL LETTER O HORN;;;01A1;
+01A1;LATIN SMALL LETTER O WITH HORN;Ll;0;L;006F 031B;;;;N;LATIN SMALL LETTER O HORN;;01A0;;01A0
+01A2;LATIN CAPITAL LETTER OI;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O I;gha;;01A3;
+01A3;LATIN SMALL LETTER OI;Ll;0;L;;;;;N;LATIN SMALL LETTER O I;gha;01A2;;01A2
+01A4;LATIN CAPITAL LETTER P WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER P HOOK;;;01A5;
+01A5;LATIN SMALL LETTER P WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER P HOOK;;01A4;;01A4
+01A6;LATIN LETTER YR;Lu;0;L;;;;;N;LATIN LETTER Y R;;;0280;
+01A7;LATIN CAPITAL LETTER TONE TWO;Lu;0;L;;;;;N;;;;01A8;
+01A8;LATIN SMALL LETTER TONE TWO;Ll;0;L;;;;;N;;;01A7;;01A7
+01A9;LATIN CAPITAL LETTER ESH;Lu;0;L;;;;;N;;;;0283;
+01AA;LATIN LETTER REVERSED ESH LOOP;Ll;0;L;;;;;N;;;;;
+01AB;LATIN SMALL LETTER T WITH PALATAL HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T PALATAL HOOK;;;;
+01AC;LATIN CAPITAL LETTER T WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T HOOK;;;01AD;
+01AD;LATIN SMALL LETTER T WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T HOOK;;01AC;;01AC
+01AE;LATIN CAPITAL LETTER T WITH RETROFLEX HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER T RETROFLEX HOOK;;;0288;
+01AF;LATIN CAPITAL LETTER U WITH HORN;Lu;0;L;0055 031B;;;;N;LATIN CAPITAL LETTER U HORN;;;01B0;
+01B0;LATIN SMALL LETTER U WITH HORN;Ll;0;L;0075 031B;;;;N;LATIN SMALL LETTER U HORN;;01AF;;01AF
+01B1;LATIN CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;028A;
+01B2;LATIN CAPITAL LETTER V WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER SCRIPT V;;;028B;
+01B3;LATIN CAPITAL LETTER Y WITH HOOK;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Y HOOK;;;01B4;
+01B4;LATIN SMALL LETTER Y WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Y HOOK;;01B3;;01B3
+01B5;LATIN CAPITAL LETTER Z WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER Z BAR;;;01B6;
+01B6;LATIN SMALL LETTER Z WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER Z BAR;;01B5;;01B5
+01B7;LATIN CAPITAL LETTER EZH;Lu;0;L;;;;;N;LATIN CAPITAL LETTER YOGH;;;0292;
+01B8;LATIN CAPITAL LETTER EZH REVERSED;Lu;0;L;;;;;N;LATIN CAPITAL LETTER REVERSED YOGH;;;01B9;
+01B9;LATIN SMALL LETTER EZH REVERSED;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED YOGH;;01B8;;01B8
+01BA;LATIN SMALL LETTER EZH WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH WITH TAIL;;;;
+01BB;LATIN LETTER TWO WITH STROKE;Lo;0;L;;;;;N;LATIN LETTER TWO BAR;;;;
+01BC;LATIN CAPITAL LETTER TONE FIVE;Lu;0;L;;;;;N;;;;01BD;
+01BD;LATIN SMALL LETTER TONE FIVE;Ll;0;L;;;;;N;;;01BC;;01BC
+01BE;LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER INVERTED GLOTTAL STOP BAR;;;;
+01BF;LATIN LETTER WYNN;Ll;0;L;;;;;N;;;01F7;;01F7
+01C0;LATIN LETTER DENTAL CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE;;;;
+01C1;LATIN LETTER LATERAL CLICK;Lo;0;L;;;;;N;LATIN LETTER DOUBLE PIPE;;;;
+01C2;LATIN LETTER ALVEOLAR CLICK;Lo;0;L;;;;;N;LATIN LETTER PIPE DOUBLE BAR;;;;
+01C3;LATIN LETTER RETROFLEX CLICK;Lo;0;L;;;;;N;LATIN LETTER EXCLAMATION MARK;;;;
+01C4;LATIN CAPITAL LETTER DZ WITH CARON;Lu;0;L;<compat> 0044 017D;;;;N;LATIN CAPITAL LETTER D Z HACEK;;;01C6;01C5
+01C5;LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON;Lt;0;L;<compat> 0044 017E;;;;N;LATIN LETTER CAPITAL D SMALL Z HACEK;;01C4;01C6;
+01C6;LATIN SMALL LETTER DZ WITH CARON;Ll;0;L;<compat> 0064 017E;;;;N;LATIN SMALL LETTER D Z HACEK;;01C4;;01C5
+01C7;LATIN CAPITAL LETTER LJ;Lu;0;L;<compat> 004C 004A;;;;N;LATIN CAPITAL LETTER L J;;;01C9;01C8
+01C8;LATIN CAPITAL LETTER L WITH SMALL LETTER J;Lt;0;L;<compat> 004C 006A;;;;N;LATIN LETTER CAPITAL L SMALL J;;01C7;01C9;
+01C9;LATIN SMALL LETTER LJ;Ll;0;L;<compat> 006C 006A;;;;N;LATIN SMALL LETTER L J;;01C7;;01C8
+01CA;LATIN CAPITAL LETTER NJ;Lu;0;L;<compat> 004E 004A;;;;N;LATIN CAPITAL LETTER N J;;;01CC;01CB
+01CB;LATIN CAPITAL LETTER N WITH SMALL LETTER J;Lt;0;L;<compat> 004E 006A;;;;N;LATIN LETTER CAPITAL N SMALL J;;01CA;01CC;
+01CC;LATIN SMALL LETTER NJ;Ll;0;L;<compat> 006E 006A;;;;N;LATIN SMALL LETTER N J;;01CA;;01CB
+01CD;LATIN CAPITAL LETTER A WITH CARON;Lu;0;L;0041 030C;;;;N;LATIN CAPITAL LETTER A HACEK;;;01CE;
+01CE;LATIN SMALL LETTER A WITH CARON;Ll;0;L;0061 030C;;;;N;LATIN SMALL LETTER A HACEK;;01CD;;01CD
+01CF;LATIN CAPITAL LETTER I WITH CARON;Lu;0;L;0049 030C;;;;N;LATIN CAPITAL LETTER I HACEK;;;01D0;
+01D0;LATIN SMALL LETTER I WITH CARON;Ll;0;L;0069 030C;;;;N;LATIN SMALL LETTER I HACEK;;01CF;;01CF
+01D1;LATIN CAPITAL LETTER O WITH CARON;Lu;0;L;004F 030C;;;;N;LATIN CAPITAL LETTER O HACEK;;;01D2;
+01D2;LATIN SMALL LETTER O WITH CARON;Ll;0;L;006F 030C;;;;N;LATIN SMALL LETTER O HACEK;;01D1;;01D1
+01D3;LATIN CAPITAL LETTER U WITH CARON;Lu;0;L;0055 030C;;;;N;LATIN CAPITAL LETTER U HACEK;;;01D4;
+01D4;LATIN SMALL LETTER U WITH CARON;Ll;0;L;0075 030C;;;;N;LATIN SMALL LETTER U HACEK;;01D3;;01D3
+01D5;LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON;Lu;0;L;00DC 0304;;;;N;LATIN CAPITAL LETTER U DIAERESIS MACRON;;;01D6;
+01D6;LATIN SMALL LETTER U WITH DIAERESIS AND MACRON;Ll;0;L;00FC 0304;;;;N;LATIN SMALL LETTER U DIAERESIS MACRON;;01D5;;01D5
+01D7;LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE;Lu;0;L;00DC 0301;;;;N;LATIN CAPITAL LETTER U DIAERESIS ACUTE;;;01D8;
+01D8;LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE;Ll;0;L;00FC 0301;;;;N;LATIN SMALL LETTER U DIAERESIS ACUTE;;01D7;;01D7
+01D9;LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON;Lu;0;L;00DC 030C;;;;N;LATIN CAPITAL LETTER U DIAERESIS HACEK;;;01DA;
+01DA;LATIN SMALL LETTER U WITH DIAERESIS AND CARON;Ll;0;L;00FC 030C;;;;N;LATIN SMALL LETTER U DIAERESIS HACEK;;01D9;;01D9
+01DB;LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE;Lu;0;L;00DC 0300;;;;N;LATIN CAPITAL LETTER U DIAERESIS GRAVE;;;01DC;
+01DC;LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE;Ll;0;L;00FC 0300;;;;N;LATIN SMALL LETTER U DIAERESIS GRAVE;;01DB;;01DB
+01DD;LATIN SMALL LETTER TURNED E;Ll;0;L;;;;;N;;;018E;;018E
+01DE;LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON;Lu;0;L;00C4 0304;;;;N;LATIN CAPITAL LETTER A DIAERESIS MACRON;;;01DF;
+01DF;LATIN SMALL LETTER A WITH DIAERESIS AND MACRON;Ll;0;L;00E4 0304;;;;N;LATIN SMALL LETTER A DIAERESIS MACRON;;01DE;;01DE
+01E0;LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON;Lu;0;L;0226 0304;;;;N;LATIN CAPITAL LETTER A DOT MACRON;;;01E1;
+01E1;LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON;Ll;0;L;0227 0304;;;;N;LATIN SMALL LETTER A DOT MACRON;;01E0;;01E0
+01E2;LATIN CAPITAL LETTER AE WITH MACRON;Lu;0;L;00C6 0304;;;;N;LATIN CAPITAL LETTER A E MACRON;ash *;;01E3;
+01E3;LATIN SMALL LETTER AE WITH MACRON;Ll;0;L;00E6 0304;;;;N;LATIN SMALL LETTER A E MACRON;ash *;01E2;;01E2
+01E4;LATIN CAPITAL LETTER G WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER G BAR;;;01E5;
+01E5;LATIN SMALL LETTER G WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER G BAR;;01E4;;01E4
+01E6;LATIN CAPITAL LETTER G WITH CARON;Lu;0;L;0047 030C;;;;N;LATIN CAPITAL LETTER G HACEK;;;01E7;
+01E7;LATIN SMALL LETTER G WITH CARON;Ll;0;L;0067 030C;;;;N;LATIN SMALL LETTER G HACEK;;01E6;;01E6
+01E8;LATIN CAPITAL LETTER K WITH CARON;Lu;0;L;004B 030C;;;;N;LATIN CAPITAL LETTER K HACEK;;;01E9;
+01E9;LATIN SMALL LETTER K WITH CARON;Ll;0;L;006B 030C;;;;N;LATIN SMALL LETTER K HACEK;;01E8;;01E8
+01EA;LATIN CAPITAL LETTER O WITH OGONEK;Lu;0;L;004F 0328;;;;N;LATIN CAPITAL LETTER O OGONEK;;;01EB;
+01EB;LATIN SMALL LETTER O WITH OGONEK;Ll;0;L;006F 0328;;;;N;LATIN SMALL LETTER O OGONEK;;01EA;;01EA
+01EC;LATIN CAPITAL LETTER O WITH OGONEK AND MACRON;Lu;0;L;01EA 0304;;;;N;LATIN CAPITAL LETTER O OGONEK MACRON;;;01ED;
+01ED;LATIN SMALL LETTER O WITH OGONEK AND MACRON;Ll;0;L;01EB 0304;;;;N;LATIN SMALL LETTER O OGONEK MACRON;;01EC;;01EC
+01EE;LATIN CAPITAL LETTER EZH WITH CARON;Lu;0;L;01B7 030C;;;;N;LATIN CAPITAL LETTER YOGH HACEK;;;01EF;
+01EF;LATIN SMALL LETTER EZH WITH CARON;Ll;0;L;0292 030C;;;;N;LATIN SMALL LETTER YOGH HACEK;;01EE;;01EE
+01F0;LATIN SMALL LETTER J WITH CARON;Ll;0;L;006A 030C;;;;N;LATIN SMALL LETTER J HACEK;;;;
+01F1;LATIN CAPITAL LETTER DZ;Lu;0;L;<compat> 0044 005A;;;;N;;;;01F3;01F2
+01F2;LATIN CAPITAL LETTER D WITH SMALL LETTER Z;Lt;0;L;<compat> 0044 007A;;;;N;;;01F1;01F3;
+01F3;LATIN SMALL LETTER DZ;Ll;0;L;<compat> 0064 007A;;;;N;;;01F1;;01F2
+01F4;LATIN CAPITAL LETTER G WITH ACUTE;Lu;0;L;0047 0301;;;;N;;;;01F5;
+01F5;LATIN SMALL LETTER G WITH ACUTE;Ll;0;L;0067 0301;;;;N;;;01F4;;01F4
+01F6;LATIN CAPITAL LETTER HWAIR;Lu;0;L;;;;;N;;;;0195;
+01F7;LATIN CAPITAL LETTER WYNN;Lu;0;L;;;;;N;;;;01BF;
+01F8;LATIN CAPITAL LETTER N WITH GRAVE;Lu;0;L;004E 0300;;;;N;;;;01F9;
+01F9;LATIN SMALL LETTER N WITH GRAVE;Ll;0;L;006E 0300;;;;N;;;01F8;;01F8
+01FA;LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE;Lu;0;L;00C5 0301;;;;N;;;;01FB;
+01FB;LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE;Ll;0;L;00E5 0301;;;;N;;;01FA;;01FA
+01FC;LATIN CAPITAL LETTER AE WITH ACUTE;Lu;0;L;00C6 0301;;;;N;;ash *;;01FD;
+01FD;LATIN SMALL LETTER AE WITH ACUTE;Ll;0;L;00E6 0301;;;;N;;ash *;01FC;;01FC
+01FE;LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;Lu;0;L;00D8 0301;;;;N;;;;01FF;
+01FF;LATIN SMALL LETTER O WITH STROKE AND ACUTE;Ll;0;L;00F8 0301;;;;N;;;01FE;;01FE
+0200;LATIN CAPITAL LETTER A WITH DOUBLE GRAVE;Lu;0;L;0041 030F;;;;N;;;;0201;
+0201;LATIN SMALL LETTER A WITH DOUBLE GRAVE;Ll;0;L;0061 030F;;;;N;;;0200;;0200
+0202;LATIN CAPITAL LETTER A WITH INVERTED BREVE;Lu;0;L;0041 0311;;;;N;;;;0203;
+0203;LATIN SMALL LETTER A WITH INVERTED BREVE;Ll;0;L;0061 0311;;;;N;;;0202;;0202
+0204;LATIN CAPITAL LETTER E WITH DOUBLE GRAVE;Lu;0;L;0045 030F;;;;N;;;;0205;
+0205;LATIN SMALL LETTER E WITH DOUBLE GRAVE;Ll;0;L;0065 030F;;;;N;;;0204;;0204
+0206;LATIN CAPITAL LETTER E WITH INVERTED BREVE;Lu;0;L;0045 0311;;;;N;;;;0207;
+0207;LATIN SMALL LETTER E WITH INVERTED BREVE;Ll;0;L;0065 0311;;;;N;;;0206;;0206
+0208;LATIN CAPITAL LETTER I WITH DOUBLE GRAVE;Lu;0;L;0049 030F;;;;N;;;;0209;
+0209;LATIN SMALL LETTER I WITH DOUBLE GRAVE;Ll;0;L;0069 030F;;;;N;;;0208;;0208
+020A;LATIN CAPITAL LETTER I WITH INVERTED BREVE;Lu;0;L;0049 0311;;;;N;;;;020B;
+020B;LATIN SMALL LETTER I WITH INVERTED BREVE;Ll;0;L;0069 0311;;;;N;;;020A;;020A
+020C;LATIN CAPITAL LETTER O WITH DOUBLE GRAVE;Lu;0;L;004F 030F;;;;N;;;;020D;
+020D;LATIN SMALL LETTER O WITH DOUBLE GRAVE;Ll;0;L;006F 030F;;;;N;;;020C;;020C
+020E;LATIN CAPITAL LETTER O WITH INVERTED BREVE;Lu;0;L;004F 0311;;;;N;;;;020F;
+020F;LATIN SMALL LETTER O WITH INVERTED BREVE;Ll;0;L;006F 0311;;;;N;;;020E;;020E
+0210;LATIN CAPITAL LETTER R WITH DOUBLE GRAVE;Lu;0;L;0052 030F;;;;N;;;;0211;
+0211;LATIN SMALL LETTER R WITH DOUBLE GRAVE;Ll;0;L;0072 030F;;;;N;;;0210;;0210
+0212;LATIN CAPITAL LETTER R WITH INVERTED BREVE;Lu;0;L;0052 0311;;;;N;;;;0213;
+0213;LATIN SMALL LETTER R WITH INVERTED BREVE;Ll;0;L;0072 0311;;;;N;;;0212;;0212
+0214;LATIN CAPITAL LETTER U WITH DOUBLE GRAVE;Lu;0;L;0055 030F;;;;N;;;;0215;
+0215;LATIN SMALL LETTER U WITH DOUBLE GRAVE;Ll;0;L;0075 030F;;;;N;;;0214;;0214
+0216;LATIN CAPITAL LETTER U WITH INVERTED BREVE;Lu;0;L;0055 0311;;;;N;;;;0217;
+0217;LATIN SMALL LETTER U WITH INVERTED BREVE;Ll;0;L;0075 0311;;;;N;;;0216;;0216
+0218;LATIN CAPITAL LETTER S WITH COMMA BELOW;Lu;0;L;0053 0326;;;;N;;*;;0219;
+0219;LATIN SMALL LETTER S WITH COMMA BELOW;Ll;0;L;0073 0326;;;;N;;*;0218;;0218
+021A;LATIN CAPITAL LETTER T WITH COMMA BELOW;Lu;0;L;0054 0326;;;;N;;*;;021B;
+021B;LATIN SMALL LETTER T WITH COMMA BELOW;Ll;0;L;0074 0326;;;;N;;*;021A;;021A
+021C;LATIN CAPITAL LETTER YOGH;Lu;0;L;;;;;N;;;;021D;
+021D;LATIN SMALL LETTER YOGH;Ll;0;L;;;;;N;;;021C;;021C
+021E;LATIN CAPITAL LETTER H WITH CARON;Lu;0;L;0048 030C;;;;N;;;;021F;
+021F;LATIN SMALL LETTER H WITH CARON;Ll;0;L;0068 030C;;;;N;;;021E;;021E
+0222;LATIN CAPITAL LETTER OU;Lu;0;L;;;;;N;;;;0223;
+0223;LATIN SMALL LETTER OU;Ll;0;L;;;;;N;;;0222;;0222
+0224;LATIN CAPITAL LETTER Z WITH HOOK;Lu;0;L;;;;;N;;;;0225;
+0225;LATIN SMALL LETTER Z WITH HOOK;Ll;0;L;;;;;N;;;0224;;0224
+0226;LATIN CAPITAL LETTER A WITH DOT ABOVE;Lu;0;L;0041 0307;;;;N;;;;0227;
+0227;LATIN SMALL LETTER A WITH DOT ABOVE;Ll;0;L;0061 0307;;;;N;;;0226;;0226
+0228;LATIN CAPITAL LETTER E WITH CEDILLA;Lu;0;L;0045 0327;;;;N;;;;0229;
+0229;LATIN SMALL LETTER E WITH CEDILLA;Ll;0;L;0065 0327;;;;N;;;0228;;0228
+022A;LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON;Lu;0;L;00D6 0304;;;;N;;;;022B;
+022B;LATIN SMALL LETTER O WITH DIAERESIS AND MACRON;Ll;0;L;00F6 0304;;;;N;;;022A;;022A
+022C;LATIN CAPITAL LETTER O WITH TILDE AND MACRON;Lu;0;L;00D5 0304;;;;N;;;;022D;
+022D;LATIN SMALL LETTER O WITH TILDE AND MACRON;Ll;0;L;00F5 0304;;;;N;;;022C;;022C
+022E;LATIN CAPITAL LETTER O WITH DOT ABOVE;Lu;0;L;004F 0307;;;;N;;;;022F;
+022F;LATIN SMALL LETTER O WITH DOT ABOVE;Ll;0;L;006F 0307;;;;N;;;022E;;022E
+0230;LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON;Lu;0;L;022E 0304;;;;N;;;;0231;
+0231;LATIN SMALL LETTER O WITH DOT ABOVE AND MACRON;Ll;0;L;022F 0304;;;;N;;;0230;;0230
+0232;LATIN CAPITAL LETTER Y WITH MACRON;Lu;0;L;0059 0304;;;;N;;;;0233;
+0233;LATIN SMALL LETTER Y WITH MACRON;Ll;0;L;0079 0304;;;;N;;;0232;;0232
+0250;LATIN SMALL LETTER TURNED A;Ll;0;L;;;;;N;;;;;
+0251;LATIN SMALL LETTER ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT A;;;;
+0252;LATIN SMALL LETTER TURNED ALPHA;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED SCRIPT A;;;;
+0253;LATIN SMALL LETTER B WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER B HOOK;;0181;;0181
+0254;LATIN SMALL LETTER OPEN O;Ll;0;L;;;;;N;;;0186;;0186
+0255;LATIN SMALL LETTER C WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER C CURL;;;;
+0256;LATIN SMALL LETTER D WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER D RETROFLEX HOOK;;0189;;0189
+0257;LATIN SMALL LETTER D WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER D HOOK;;018A;;018A
+0258;LATIN SMALL LETTER REVERSED E;Ll;0;L;;;;;N;;;;;
+0259;LATIN SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;018F;;018F
+025A;LATIN SMALL LETTER SCHWA WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCHWA HOOK;;;;
+025B;LATIN SMALL LETTER OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER EPSILON;;0190;;0190
+025C;LATIN SMALL LETTER REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON;;;;
+025D;LATIN SMALL LETTER REVERSED OPEN E WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED EPSILON HOOK;;;;
+025E;LATIN SMALL LETTER CLOSED REVERSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED REVERSED EPSILON;;;;
+025F;LATIN SMALL LETTER DOTLESS J WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR;;;;
+0260;LATIN SMALL LETTER G WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER G HOOK;;0193;;0193
+0261;LATIN SMALL LETTER SCRIPT G;Ll;0;L;;;;;N;;;;;
+0262;LATIN LETTER SMALL CAPITAL G;Ll;0;L;;;;;N;;;;;
+0263;LATIN SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0194;;0194
+0264;LATIN SMALL LETTER RAMS HORN;Ll;0;L;;;;;N;LATIN SMALL LETTER BABY GAMMA;;;;
+0265;LATIN SMALL LETTER TURNED H;Ll;0;L;;;;;N;;;;;
+0266;LATIN SMALL LETTER H WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER H HOOK;;;;
+0267;LATIN SMALL LETTER HENG WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER HENG HOOK;;;;
+0268;LATIN SMALL LETTER I WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER BARRED I;;0197;;0197
+0269;LATIN SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0196;;0196
+026A;LATIN LETTER SMALL CAPITAL I;Ll;0;L;;;;;N;;;;;
+026B;LATIN SMALL LETTER L WITH MIDDLE TILDE;Ll;0;L;;;;;N;;;;;
+026C;LATIN SMALL LETTER L WITH BELT;Ll;0;L;;;;;N;LATIN SMALL LETTER L BELT;;;;
+026D;LATIN SMALL LETTER L WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER L RETROFLEX HOOK;;;;
+026E;LATIN SMALL LETTER LEZH;Ll;0;L;;;;;N;LATIN SMALL LETTER L YOGH;;;;
+026F;LATIN SMALL LETTER TURNED M;Ll;0;L;;;;;N;;;019C;;019C
+0270;LATIN SMALL LETTER TURNED M WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+0271;LATIN SMALL LETTER M WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER M HOOK;;;;
+0272;LATIN SMALL LETTER N WITH LEFT HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N HOOK;;019D;;019D
+0273;LATIN SMALL LETTER N WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER N RETROFLEX HOOK;;;;
+0274;LATIN LETTER SMALL CAPITAL N;Ll;0;L;;;;;N;;;;;
+0275;LATIN SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;019F;;019F
+0276;LATIN LETTER SMALL CAPITAL OE;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL O E;;;;
+0277;LATIN SMALL LETTER CLOSED OMEGA;Ll;0;L;;;;;N;;;;;
+0278;LATIN SMALL LETTER PHI;Ll;0;L;;;;;N;;;;;
+0279;LATIN SMALL LETTER TURNED R;Ll;0;L;;;;;N;;;;;
+027A;LATIN SMALL LETTER TURNED R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027B;LATIN SMALL LETTER TURNED R WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER TURNED R HOOK;;;;
+027C;LATIN SMALL LETTER R WITH LONG LEG;Ll;0;L;;;;;N;;;;;
+027D;LATIN SMALL LETTER R WITH TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER R HOOK;;;;
+027E;LATIN SMALL LETTER R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER FISHHOOK R;;;;
+027F;LATIN SMALL LETTER REVERSED R WITH FISHHOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER REVERSED FISHHOOK R;;;;
+0280;LATIN LETTER SMALL CAPITAL R;Ll;0;L;;;;;N;;;01A6;;01A6
+0281;LATIN LETTER SMALL CAPITAL INVERTED R;Ll;0;L;;;;;N;;;;;
+0282;LATIN SMALL LETTER S WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER S HOOK;;;;
+0283;LATIN SMALL LETTER ESH;Ll;0;L;;;;;N;;;01A9;;01A9
+0284;LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER DOTLESS J BAR HOOK;;;;
+0285;LATIN SMALL LETTER SQUAT REVERSED ESH;Ll;0;L;;;;;N;;;;;
+0286;LATIN SMALL LETTER ESH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER ESH CURL;;;;
+0287;LATIN SMALL LETTER TURNED T;Ll;0;L;;;;;N;;;;;
+0288;LATIN SMALL LETTER T WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER T RETROFLEX HOOK;;01AE;;01AE
+0289;LATIN SMALL LETTER U BAR;Ll;0;L;;;;;N;;;;;
+028A;LATIN SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;01B1;;01B1
+028B;LATIN SMALL LETTER V WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT V;;01B2;;01B2
+028C;LATIN SMALL LETTER TURNED V;Ll;0;L;;;;;N;;;;;
+028D;LATIN SMALL LETTER TURNED W;Ll;0;L;;;;;N;;;;;
+028E;LATIN SMALL LETTER TURNED Y;Ll;0;L;;;;;N;;;;;
+028F;LATIN LETTER SMALL CAPITAL Y;Ll;0;L;;;;;N;;;;;
+0290;LATIN SMALL LETTER Z WITH RETROFLEX HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Z RETROFLEX HOOK;;;;
+0291;LATIN SMALL LETTER Z WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER Z CURL;;;;
+0292;LATIN SMALL LETTER EZH;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH;;01B7;;01B7
+0293;LATIN SMALL LETTER EZH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER YOGH CURL;;;;
+0294;LATIN LETTER GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+0295;LATIN LETTER PHARYNGEAL VOICED FRICATIVE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP;;;;
+0296;LATIN LETTER INVERTED GLOTTAL STOP;Ll;0;L;;;;;N;;;;;
+0297;LATIN LETTER STRETCHED C;Ll;0;L;;;;;N;;;;;
+0298;LATIN LETTER BILABIAL CLICK;Ll;0;L;;;;;N;LATIN LETTER BULLSEYE;;;;
+0299;LATIN LETTER SMALL CAPITAL B;Ll;0;L;;;;;N;;;;;
+029A;LATIN SMALL LETTER CLOSED OPEN E;Ll;0;L;;;;;N;LATIN SMALL LETTER CLOSED EPSILON;;;;
+029B;LATIN LETTER SMALL CAPITAL G WITH HOOK;Ll;0;L;;;;;N;LATIN LETTER SMALL CAPITAL G HOOK;;;;
+029C;LATIN LETTER SMALL CAPITAL H;Ll;0;L;;;;;N;;;;;
+029D;LATIN SMALL LETTER J WITH CROSSED-TAIL;Ll;0;L;;;;;N;LATIN SMALL LETTER CROSSED-TAIL J;;;;
+029E;LATIN SMALL LETTER TURNED K;Ll;0;L;;;;;N;;;;;
+029F;LATIN LETTER SMALL CAPITAL L;Ll;0;L;;;;;N;;;;;
+02A0;LATIN SMALL LETTER Q WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER Q HOOK;;;;
+02A1;LATIN LETTER GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER GLOTTAL STOP BAR;;;;
+02A2;LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE;Ll;0;L;;;;;N;LATIN LETTER REVERSED GLOTTAL STOP BAR;;;;
+02A3;LATIN SMALL LETTER DZ DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z;;;;
+02A4;LATIN SMALL LETTER DEZH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER D YOGH;;;;
+02A5;LATIN SMALL LETTER DZ DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER D Z CURL;;;;
+02A6;LATIN SMALL LETTER TS DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T S;;;;
+02A7;LATIN SMALL LETTER TESH DIGRAPH;Ll;0;L;;;;;N;LATIN SMALL LETTER T ESH;;;;
+02A8;LATIN SMALL LETTER TC DIGRAPH WITH CURL;Ll;0;L;;;;;N;LATIN SMALL LETTER T C CURL;;;;
+02A9;LATIN SMALL LETTER FENG DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AA;LATIN SMALL LETTER LS DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AB;LATIN SMALL LETTER LZ DIGRAPH;Ll;0;L;;;;;N;;;;;
+02AC;LATIN LETTER BILABIAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
+02AD;LATIN LETTER BIDENTAL PERCUSSIVE;Ll;0;L;;;;;N;;;;;
+02B0;MODIFIER LETTER SMALL H;Lm;0;L;<super> 0068;;;;N;;;;;
+02B1;MODIFIER LETTER SMALL H WITH HOOK;Lm;0;L;<super> 0266;;;;N;MODIFIER LETTER SMALL H HOOK;;;;
+02B2;MODIFIER LETTER SMALL J;Lm;0;L;<super> 006A;;;;N;;;;;
+02B3;MODIFIER LETTER SMALL R;Lm;0;L;<super> 0072;;;;N;;;;;
+02B4;MODIFIER LETTER SMALL TURNED R;Lm;0;L;<super> 0279;;;;N;;;;;
+02B5;MODIFIER LETTER SMALL TURNED R WITH HOOK;Lm;0;L;<super> 027B;;;;N;MODIFIER LETTER SMALL TURNED R HOOK;;;;
+02B6;MODIFIER LETTER SMALL CAPITAL INVERTED R;Lm;0;L;<super> 0281;;;;N;;;;;
+02B7;MODIFIER LETTER SMALL W;Lm;0;L;<super> 0077;;;;N;;;;;
+02B8;MODIFIER LETTER SMALL Y;Lm;0;L;<super> 0079;;;;N;;;;;
+02B9;MODIFIER LETTER PRIME;Sk;0;ON;;;;;N;;;;;
+02BA;MODIFIER LETTER DOUBLE PRIME;Sk;0;ON;;;;;N;;;;;
+02BB;MODIFIER LETTER TURNED COMMA;Lm;0;L;;;;;N;;;;;
+02BC;MODIFIER LETTER APOSTROPHE;Lm;0;L;;;;;N;;;;;
+02BD;MODIFIER LETTER REVERSED COMMA;Lm;0;L;;;;;N;;;;;
+02BE;MODIFIER LETTER RIGHT HALF RING;Lm;0;L;;;;;N;;;;;
+02BF;MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+02C0;MODIFIER LETTER GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C1;MODIFIER LETTER REVERSED GLOTTAL STOP;Lm;0;L;;;;;N;;;;;
+02C2;MODIFIER LETTER LEFT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C3;MODIFIER LETTER RIGHT ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C4;MODIFIER LETTER UP ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C5;MODIFIER LETTER DOWN ARROWHEAD;Sk;0;ON;;;;;N;;;;;
+02C6;MODIFIER LETTER CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER CIRCUMFLEX;;;;
+02C7;CARON;Sk;0;ON;;;;;N;MODIFIER LETTER HACEK;Mandarin Chinese third tone;;;
+02C8;MODIFIER LETTER VERTICAL LINE;Sk;0;ON;;;;;N;;;;;
+02C9;MODIFIER LETTER MACRON;Sk;0;ON;;;;;N;;Mandarin Chinese first tone;;;
+02CA;MODIFIER LETTER ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER ACUTE;Mandarin Chinese second tone;;;
+02CB;MODIFIER LETTER GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER GRAVE;Mandarin Chinese fourth tone;;;
+02CC;MODIFIER LETTER LOW VERTICAL LINE;Sk;0;ON;;;;;N;;;;;
+02CD;MODIFIER LETTER LOW MACRON;Sk;0;ON;;;;;N;;;;;
+02CE;MODIFIER LETTER LOW GRAVE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW GRAVE;;;;
+02CF;MODIFIER LETTER LOW ACUTE ACCENT;Sk;0;ON;;;;;N;MODIFIER LETTER LOW ACUTE;;;;
+02D0;MODIFIER LETTER TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+02D1;MODIFIER LETTER HALF TRIANGULAR COLON;Lm;0;L;;;;;N;;;;;
+02D2;MODIFIER LETTER CENTRED RIGHT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED RIGHT HALF RING;;;;
+02D3;MODIFIER LETTER CENTRED LEFT HALF RING;Sk;0;ON;;;;;N;MODIFIER LETTER CENTERED LEFT HALF RING;;;;
+02D4;MODIFIER LETTER UP TACK;Sk;0;ON;;;;;N;;;;;
+02D5;MODIFIER LETTER DOWN TACK;Sk;0;ON;;;;;N;;;;;
+02D6;MODIFIER LETTER PLUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D7;MODIFIER LETTER MINUS SIGN;Sk;0;ON;;;;;N;;;;;
+02D8;BREVE;Sk;0;ON;<compat> 0020 0306;;;;N;SPACING BREVE;;;;
+02D9;DOT ABOVE;Sk;0;ON;<compat> 0020 0307;;;;N;SPACING DOT ABOVE;Mandarin Chinese light tone;;;
+02DA;RING ABOVE;Sk;0;ON;<compat> 0020 030A;;;;N;SPACING RING ABOVE;;;;
+02DB;OGONEK;Sk;0;ON;<compat> 0020 0328;;;;N;SPACING OGONEK;;;;
+02DC;SMALL TILDE;Sk;0;ON;<compat> 0020 0303;;;;N;SPACING TILDE;;;;
+02DD;DOUBLE ACUTE ACCENT;Sk;0;ON;<compat> 0020 030B;;;;N;SPACING DOUBLE ACUTE;;;;
+02DE;MODIFIER LETTER RHOTIC HOOK;Sk;0;ON;;;;;N;;;;;
+02DF;MODIFIER LETTER CROSS ACCENT;Sk;0;ON;;;;;N;;;;;
+02E0;MODIFIER LETTER SMALL GAMMA;Lm;0;L;<super> 0263;;;;N;;;;;
+02E1;MODIFIER LETTER SMALL L;Lm;0;L;<super> 006C;;;;N;;;;;
+02E2;MODIFIER LETTER SMALL S;Lm;0;L;<super> 0073;;;;N;;;;;
+02E3;MODIFIER LETTER SMALL X;Lm;0;L;<super> 0078;;;;N;;;;;
+02E4;MODIFIER LETTER SMALL REVERSED GLOTTAL STOP;Lm;0;L;<super> 0295;;;;N;;;;;
+02E5;MODIFIER LETTER EXTRA-HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E6;MODIFIER LETTER HIGH TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E7;MODIFIER LETTER MID TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E8;MODIFIER LETTER LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+02E9;MODIFIER LETTER EXTRA-LOW TONE BAR;Sk;0;ON;;;;;N;;;;;
+02EA;MODIFIER LETTER YIN DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
+02EB;MODIFIER LETTER YANG DEPARTING TONE MARK;Sk;0;ON;;;;;N;;;;;
+02EC;MODIFIER LETTER VOICING;Sk;0;ON;;;;;N;;;;;
+02ED;MODIFIER LETTER UNASPIRATED;Sk;0;ON;;;;;N;;;;;
+02EE;MODIFIER LETTER DOUBLE APOSTROPHE;Lm;0;L;;;;;N;;;;;
+0300;COMBINING GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING GRAVE;Varia;;;
+0301;COMBINING ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING ACUTE;Oxia;;;
+0302;COMBINING CIRCUMFLEX ACCENT;Mn;230;NSM;;;;;N;NON-SPACING CIRCUMFLEX;;;;
+0303;COMBINING TILDE;Mn;230;NSM;;;;;N;NON-SPACING TILDE;;;;
+0304;COMBINING MACRON;Mn;230;NSM;;;;;N;NON-SPACING MACRON;;;;
+0305;COMBINING OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING OVERSCORE;;;;
+0306;COMBINING BREVE;Mn;230;NSM;;;;;N;NON-SPACING BREVE;Vrachy;;;
+0307;COMBINING DOT ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOT ABOVE;;;;
+0308;COMBINING DIAERESIS;Mn;230;NSM;;;;;N;NON-SPACING DIAERESIS;Dialytika;;;
+0309;COMBINING HOOK ABOVE;Mn;230;NSM;;;;;N;NON-SPACING HOOK ABOVE;;;;
+030A;COMBINING RING ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RING ABOVE;;;;
+030B;COMBINING DOUBLE ACUTE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE ACUTE;;;;
+030C;COMBINING CARON;Mn;230;NSM;;;;;N;NON-SPACING HACEK;;;;
+030D;COMBINING VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL LINE ABOVE;Tonos;;;
+030E;COMBINING DOUBLE VERTICAL LINE ABOVE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE VERTICAL LINE ABOVE;;;;
+030F;COMBINING DOUBLE GRAVE ACCENT;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE GRAVE;;;;
+0310;COMBINING CANDRABINDU;Mn;230;NSM;;;;;N;NON-SPACING CANDRABINDU;;;;
+0311;COMBINING INVERTED BREVE;Mn;230;NSM;;;;;N;NON-SPACING INVERTED BREVE;;;;
+0312;COMBINING TURNED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING TURNED COMMA ABOVE;;;;
+0313;COMBINING COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING COMMA ABOVE;Psili;;;
+0314;COMBINING REVERSED COMMA ABOVE;Mn;230;NSM;;;;;N;NON-SPACING REVERSED COMMA ABOVE;Dasia;;;
+0315;COMBINING COMMA ABOVE RIGHT;Mn;232;NSM;;;;;N;NON-SPACING COMMA ABOVE RIGHT;;;;
+0316;COMBINING GRAVE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING GRAVE BELOW;;;;
+0317;COMBINING ACUTE ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING ACUTE BELOW;;;;
+0318;COMBINING LEFT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT TACK BELOW;;;;
+0319;COMBINING RIGHT TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT TACK BELOW;;;;
+031A;COMBINING LEFT ANGLE ABOVE;Mn;232;NSM;;;;;N;NON-SPACING LEFT ANGLE ABOVE;;;;
+031B;COMBINING HORN;Mn;216;NSM;;;;;N;NON-SPACING HORN;;;;
+031C;COMBINING LEFT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING LEFT HALF RING BELOW;;;;
+031D;COMBINING UP TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING UP TACK BELOW;;;;
+031E;COMBINING DOWN TACK BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOWN TACK BELOW;;;;
+031F;COMBINING PLUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING PLUS SIGN BELOW;;;;
+0320;COMBINING MINUS SIGN BELOW;Mn;220;NSM;;;;;N;NON-SPACING MINUS SIGN BELOW;;;;
+0321;COMBINING PALATALIZED HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING PALATALIZED HOOK BELOW;;;;
+0322;COMBINING RETROFLEX HOOK BELOW;Mn;202;NSM;;;;;N;NON-SPACING RETROFLEX HOOK BELOW;;;;
+0323;COMBINING DOT BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOT BELOW;;;;
+0324;COMBINING DIAERESIS BELOW;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE DOT BELOW;;;;
+0325;COMBINING RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RING BELOW;;;;
+0326;COMBINING COMMA BELOW;Mn;220;NSM;;;;;N;NON-SPACING COMMA BELOW;;;;
+0327;COMBINING CEDILLA;Mn;202;NSM;;;;;N;NON-SPACING CEDILLA;;;;
+0328;COMBINING OGONEK;Mn;202;NSM;;;;;N;NON-SPACING OGONEK;;;;
+0329;COMBINING VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;NON-SPACING VERTICAL LINE BELOW;;;;
+032A;COMBINING BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BRIDGE BELOW;;;;
+032B;COMBINING INVERTED DOUBLE ARCH BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED DOUBLE ARCH BELOW;;;;
+032C;COMBINING CARON BELOW;Mn;220;NSM;;;;;N;NON-SPACING HACEK BELOW;;;;
+032D;COMBINING CIRCUMFLEX ACCENT BELOW;Mn;220;NSM;;;;;N;NON-SPACING CIRCUMFLEX BELOW;;;;
+032E;COMBINING BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING BREVE BELOW;;;;
+032F;COMBINING INVERTED BREVE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BREVE BELOW;;;;
+0330;COMBINING TILDE BELOW;Mn;220;NSM;;;;;N;NON-SPACING TILDE BELOW;;;;
+0331;COMBINING MACRON BELOW;Mn;220;NSM;;;;;N;NON-SPACING MACRON BELOW;;;;
+0332;COMBINING LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING UNDERSCORE;;;;
+0333;COMBINING DOUBLE LOW LINE;Mn;220;NSM;;;;;N;NON-SPACING DOUBLE UNDERSCORE;;;;
+0334;COMBINING TILDE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING TILDE OVERLAY;;;;
+0335;COMBINING SHORT STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT BAR OVERLAY;;;;
+0336;COMBINING LONG STROKE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG BAR OVERLAY;;;;
+0337;COMBINING SHORT SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT SLASH OVERLAY;;;;
+0338;COMBINING LONG SOLIDUS OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG SLASH OVERLAY;;;;
+0339;COMBINING RIGHT HALF RING BELOW;Mn;220;NSM;;;;;N;NON-SPACING RIGHT HALF RING BELOW;;;;
+033A;COMBINING INVERTED BRIDGE BELOW;Mn;220;NSM;;;;;N;NON-SPACING INVERTED BRIDGE BELOW;;;;
+033B;COMBINING SQUARE BELOW;Mn;220;NSM;;;;;N;NON-SPACING SQUARE BELOW;;;;
+033C;COMBINING SEAGULL BELOW;Mn;220;NSM;;;;;N;NON-SPACING SEAGULL BELOW;;;;
+033D;COMBINING X ABOVE;Mn;230;NSM;;;;;N;NON-SPACING X ABOVE;;;;
+033E;COMBINING VERTICAL TILDE;Mn;230;NSM;;;;;N;NON-SPACING VERTICAL TILDE;;;;
+033F;COMBINING DOUBLE OVERLINE;Mn;230;NSM;;;;;N;NON-SPACING DOUBLE OVERSCORE;;;;
+0340;COMBINING GRAVE TONE MARK;Mn;230;NSM;0300;;;;N;NON-SPACING GRAVE TONE MARK;Vietnamese;;;
+0341;COMBINING ACUTE TONE MARK;Mn;230;NSM;0301;;;;N;NON-SPACING ACUTE TONE MARK;Vietnamese;;;
+0342;COMBINING GREEK PERISPOMENI;Mn;230;NSM;;;;;N;;;;;
+0343;COMBINING GREEK KORONIS;Mn;230;NSM;0313;;;;N;;;;;
+0344;COMBINING GREEK DIALYTIKA TONOS;Mn;230;NSM;0308 0301;;;;N;GREEK NON-SPACING DIAERESIS TONOS;;;;
+0345;COMBINING GREEK YPOGEGRAMMENI;Mn;240;NSM;;;;;N;GREEK NON-SPACING IOTA BELOW;;0399;;0399
+0346;COMBINING BRIDGE ABOVE;Mn;230;NSM;;;;;N;;;;;
+0347;COMBINING EQUALS SIGN BELOW;Mn;220;NSM;;;;;N;;;;;
+0348;COMBINING DOUBLE VERTICAL LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+0349;COMBINING LEFT ANGLE BELOW;Mn;220;NSM;;;;;N;;;;;
+034A;COMBINING NOT TILDE ABOVE;Mn;230;NSM;;;;;N;;;;;
+034B;COMBINING HOMOTHETIC ABOVE;Mn;230;NSM;;;;;N;;;;;
+034C;COMBINING ALMOST EQUAL TO ABOVE;Mn;230;NSM;;;;;N;;;;;
+034D;COMBINING LEFT RIGHT ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+034E;COMBINING UPWARDS ARROW BELOW;Mn;220;NSM;;;;;N;;;;;
+0360;COMBINING DOUBLE TILDE;Mn;234;NSM;;;;;N;;;;;
+0361;COMBINING DOUBLE INVERTED BREVE;Mn;234;NSM;;;;;N;;;;;
+0362;COMBINING DOUBLE RIGHTWARDS ARROW BELOW;Mn;233;NSM;;;;;N;;;;;
+0374;GREEK NUMERAL SIGN;Sk;0;ON;02B9;;;;N;GREEK UPPER NUMERAL SIGN;Dexia keraia;;;
+0375;GREEK LOWER NUMERAL SIGN;Sk;0;ON;;;;;N;;Aristeri keraia;;;
+037A;GREEK YPOGEGRAMMENI;Lm;0;L;<compat> 0020 0345;;;;N;GREEK SPACING IOTA BELOW;;;;
+037E;GREEK QUESTION MARK;Po;0;ON;003B;;;;N;;Erotimatiko;;;
+0384;GREEK TONOS;Sk;0;ON;<compat> 0020 0301;;;;N;GREEK SPACING TONOS;;;;
+0385;GREEK DIALYTIKA TONOS;Sk;0;ON;00A8 0301;;;;N;GREEK SPACING DIAERESIS TONOS;;;;
+0386;GREEK CAPITAL LETTER ALPHA WITH TONOS;Lu;0;L;0391 0301;;;;N;GREEK CAPITAL LETTER ALPHA TONOS;;;03AC;
+0387;GREEK ANO TELEIA;Po;0;ON;00B7;;;;N;;;;;
+0388;GREEK CAPITAL LETTER EPSILON WITH TONOS;Lu;0;L;0395 0301;;;;N;GREEK CAPITAL LETTER EPSILON TONOS;;;03AD;
+0389;GREEK CAPITAL LETTER ETA WITH TONOS;Lu;0;L;0397 0301;;;;N;GREEK CAPITAL LETTER ETA TONOS;;;03AE;
+038A;GREEK CAPITAL LETTER IOTA WITH TONOS;Lu;0;L;0399 0301;;;;N;GREEK CAPITAL LETTER IOTA TONOS;;;03AF;
+038C;GREEK CAPITAL LETTER OMICRON WITH TONOS;Lu;0;L;039F 0301;;;;N;GREEK CAPITAL LETTER OMICRON TONOS;;;03CC;
+038E;GREEK CAPITAL LETTER UPSILON WITH TONOS;Lu;0;L;03A5 0301;;;;N;GREEK CAPITAL LETTER UPSILON TONOS;;;03CD;
+038F;GREEK CAPITAL LETTER OMEGA WITH TONOS;Lu;0;L;03A9 0301;;;;N;GREEK CAPITAL LETTER OMEGA TONOS;;;03CE;
+0390;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS;Ll;0;L;03CA 0301;;;;N;GREEK SMALL LETTER IOTA DIAERESIS TONOS;;;;
+0391;GREEK CAPITAL LETTER ALPHA;Lu;0;L;;;;;N;;;;03B1;
+0392;GREEK CAPITAL LETTER BETA;Lu;0;L;;;;;N;;;;03B2;
+0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3;
+0394;GREEK CAPITAL LETTER DELTA;Lu;0;L;;;;;N;;;;03B4;
+0395;GREEK CAPITAL LETTER EPSILON;Lu;0;L;;;;;N;;;;03B5;
+0396;GREEK CAPITAL LETTER ZETA;Lu;0;L;;;;;N;;;;03B6;
+0397;GREEK CAPITAL LETTER ETA;Lu;0;L;;;;;N;;;;03B7;
+0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;
+0399;GREEK CAPITAL LETTER IOTA;Lu;0;L;;;;;N;;;;03B9;
+039A;GREEK CAPITAL LETTER KAPPA;Lu;0;L;;;;;N;;;;03BA;
+039B;GREEK CAPITAL LETTER LAMDA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER LAMBDA;;;03BB;
+039C;GREEK CAPITAL LETTER MU;Lu;0;L;;;;;N;;;;03BC;
+039D;GREEK CAPITAL LETTER NU;Lu;0;L;;;;;N;;;;03BD;
+039E;GREEK CAPITAL LETTER XI;Lu;0;L;;;;;N;;;;03BE;
+039F;GREEK CAPITAL LETTER OMICRON;Lu;0;L;;;;;N;;;;03BF;
+03A0;GREEK CAPITAL LETTER PI;Lu;0;L;;;;;N;;;;03C0;
+03A1;GREEK CAPITAL LETTER RHO;Lu;0;L;;;;;N;;;;03C1;
+03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
+03A4;GREEK CAPITAL LETTER TAU;Lu;0;L;;;;;N;;;;03C4;
+03A5;GREEK CAPITAL LETTER UPSILON;Lu;0;L;;;;;N;;;;03C5;
+03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6;
+03A7;GREEK CAPITAL LETTER CHI;Lu;0;L;;;;;N;;;;03C7;
+03A8;GREEK CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;03C8;
+03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9;
+03AA;GREEK CAPITAL LETTER IOTA WITH DIALYTIKA;Lu;0;L;0399 0308;;;;N;GREEK CAPITAL LETTER IOTA DIAERESIS;;;03CA;
+03AB;GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA;Lu;0;L;03A5 0308;;;;N;GREEK CAPITAL LETTER UPSILON DIAERESIS;;;03CB;
+03AC;GREEK SMALL LETTER ALPHA WITH TONOS;Ll;0;L;03B1 0301;;;;N;GREEK SMALL LETTER ALPHA TONOS;;0386;;0386
+03AD;GREEK SMALL LETTER EPSILON WITH TONOS;Ll;0;L;03B5 0301;;;;N;GREEK SMALL LETTER EPSILON TONOS;;0388;;0388
+03AE;GREEK SMALL LETTER ETA WITH TONOS;Ll;0;L;03B7 0301;;;;N;GREEK SMALL LETTER ETA TONOS;;0389;;0389
+03AF;GREEK SMALL LETTER IOTA WITH TONOS;Ll;0;L;03B9 0301;;;;N;GREEK SMALL LETTER IOTA TONOS;;038A;;038A
+03B0;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS;Ll;0;L;03CB 0301;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS TONOS;;;;
+03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391
+03B2;GREEK SMALL LETTER BETA;Ll;0;L;;;;;N;;;0392;;0392
+03B3;GREEK SMALL LETTER GAMMA;Ll;0;L;;;;;N;;;0393;;0393
+03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394
+03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395
+03B6;GREEK SMALL LETTER ZETA;Ll;0;L;;;;;N;;;0396;;0396
+03B7;GREEK SMALL LETTER ETA;Ll;0;L;;;;;N;;;0397;;0397
+03B8;GREEK SMALL LETTER THETA;Ll;0;L;;;;;N;;;0398;;0398
+03B9;GREEK SMALL LETTER IOTA;Ll;0;L;;;;;N;;;0399;;0399
+03BA;GREEK SMALL LETTER KAPPA;Ll;0;L;;;;;N;;;039A;;039A
+03BB;GREEK SMALL LETTER LAMDA;Ll;0;L;;;;;N;GREEK SMALL LETTER LAMBDA;;039B;;039B
+03BC;GREEK SMALL LETTER MU;Ll;0;L;;;;;N;;;039C;;039C
+03BD;GREEK SMALL LETTER NU;Ll;0;L;;;;;N;;;039D;;039D
+03BE;GREEK SMALL LETTER XI;Ll;0;L;;;;;N;;;039E;;039E
+03BF;GREEK SMALL LETTER OMICRON;Ll;0;L;;;;;N;;;039F;;039F
+03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0
+03C1;GREEK SMALL LETTER RHO;Ll;0;L;;;;;N;;;03A1;;03A1
+03C2;GREEK SMALL LETTER FINAL SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4
+03C5;GREEK SMALL LETTER UPSILON;Ll;0;L;;;;;N;;;03A5;;03A5
+03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6
+03C7;GREEK SMALL LETTER CHI;Ll;0;L;;;;;N;;;03A7;;03A7
+03C8;GREEK SMALL LETTER PSI;Ll;0;L;;;;;N;;;03A8;;03A8
+03C9;GREEK SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;03A9;;03A9
+03CA;GREEK SMALL LETTER IOTA WITH DIALYTIKA;Ll;0;L;03B9 0308;;;;N;GREEK SMALL LETTER IOTA DIAERESIS;;03AA;;03AA
+03CB;GREEK SMALL LETTER UPSILON WITH DIALYTIKA;Ll;0;L;03C5 0308;;;;N;GREEK SMALL LETTER UPSILON DIAERESIS;;03AB;;03AB
+03CC;GREEK SMALL LETTER OMICRON WITH TONOS;Ll;0;L;03BF 0301;;;;N;GREEK SMALL LETTER OMICRON TONOS;;038C;;038C
+03CD;GREEK SMALL LETTER UPSILON WITH TONOS;Ll;0;L;03C5 0301;;;;N;GREEK SMALL LETTER UPSILON TONOS;;038E;;038E
+03CE;GREEK SMALL LETTER OMEGA WITH TONOS;Ll;0;L;03C9 0301;;;;N;GREEK SMALL LETTER OMEGA TONOS;;038F;;038F
+03D0;GREEK BETA SYMBOL;Ll;0;L;<compat> 03B2;;;;N;GREEK SMALL LETTER CURLED BETA;;0392;;0392
+03D1;GREEK THETA SYMBOL;Ll;0;L;<compat> 03B8;;;;N;GREEK SMALL LETTER SCRIPT THETA;;0398;;0398
+03D2;GREEK UPSILON WITH HOOK SYMBOL;Lu;0;L;<compat> 03A5;;;;N;GREEK CAPITAL LETTER UPSILON HOOK;;;;
+03D3;GREEK UPSILON WITH ACUTE AND HOOK SYMBOL;Lu;0;L;03D2 0301;;;;N;GREEK CAPITAL LETTER UPSILON HOOK TONOS;;;;
+03D4;GREEK UPSILON WITH DIAERESIS AND HOOK SYMBOL;Lu;0;L;03D2 0308;;;;N;GREEK CAPITAL LETTER UPSILON HOOK DIAERESIS;;;;
+03D5;GREEK PHI SYMBOL;Ll;0;L;<compat> 03C6;;;;N;GREEK SMALL LETTER SCRIPT PHI;;03A6;;03A6
+03D6;GREEK PI SYMBOL;Ll;0;L;<compat> 03C0;;;;N;GREEK SMALL LETTER OMEGA PI;;03A0;;03A0
+03D7;GREEK KAI SYMBOL;Ll;0;L;;;;;N;;;;;
+03DA;GREEK LETTER STIGMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER STIGMA;;;03DB;
+03DB;GREEK SMALL LETTER STIGMA;Ll;0;L;;;;;N;;;03DA;;03DA
+03DC;GREEK LETTER DIGAMMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DIGAMMA;;;03DD;
+03DD;GREEK SMALL LETTER DIGAMMA;Ll;0;L;;;;;N;;;03DC;;03DC
+03DE;GREEK LETTER KOPPA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KOPPA;;;03DF;
+03DF;GREEK SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;03DE;;03DE
+03E0;GREEK LETTER SAMPI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SAMPI;;;03E1;
+03E1;GREEK SMALL LETTER SAMPI;Ll;0;L;;;;;N;;;03E0;;03E0
+03E2;COPTIC CAPITAL LETTER SHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHEI;;;03E3;
+03E3;COPTIC SMALL LETTER SHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER SHEI;;03E2;;03E2
+03E4;COPTIC CAPITAL LETTER FEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER FEI;;;03E5;
+03E5;COPTIC SMALL LETTER FEI;Ll;0;L;;;;;N;GREEK SMALL LETTER FEI;;03E4;;03E4
+03E6;COPTIC CAPITAL LETTER KHEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER KHEI;;;03E7;
+03E7;COPTIC SMALL LETTER KHEI;Ll;0;L;;;;;N;GREEK SMALL LETTER KHEI;;03E6;;03E6
+03E8;COPTIC CAPITAL LETTER HORI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER HORI;;;03E9;
+03E9;COPTIC SMALL LETTER HORI;Ll;0;L;;;;;N;GREEK SMALL LETTER HORI;;03E8;;03E8
+03EA;COPTIC CAPITAL LETTER GANGIA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER GANGIA;;;03EB;
+03EB;COPTIC SMALL LETTER GANGIA;Ll;0;L;;;;;N;GREEK SMALL LETTER GANGIA;;03EA;;03EA
+03EC;COPTIC CAPITAL LETTER SHIMA;Lu;0;L;;;;;N;GREEK CAPITAL LETTER SHIMA;;;03ED;
+03ED;COPTIC SMALL LETTER SHIMA;Ll;0;L;;;;;N;GREEK SMALL LETTER SHIMA;;03EC;;03EC
+03EE;COPTIC CAPITAL LETTER DEI;Lu;0;L;;;;;N;GREEK CAPITAL LETTER DEI;;;03EF;
+03EF;COPTIC SMALL LETTER DEI;Ll;0;L;;;;;N;GREEK SMALL LETTER DEI;;03EE;;03EE
+03F0;GREEK KAPPA SYMBOL;Ll;0;L;<compat> 03BA;;;;N;GREEK SMALL LETTER SCRIPT KAPPA;;039A;;039A
+03F1;GREEK RHO SYMBOL;Ll;0;L;<compat> 03C1;;;;N;GREEK SMALL LETTER TAILED RHO;;03A1;;03A1
+03F2;GREEK LUNATE SIGMA SYMBOL;Ll;0;L;<compat> 03C2;;;;N;GREEK SMALL LETTER LUNATE SIGMA;;03A3;;03A3
+03F3;GREEK LETTER YOT;Ll;0;L;;;;;N;;;;;
+0400;CYRILLIC CAPITAL LETTER IE WITH GRAVE;Lu;0;L;0415 0300;;;;N;;;;0450;
+0401;CYRILLIC CAPITAL LETTER IO;Lu;0;L;0415 0308;;;;N;;;;0451;
+0402;CYRILLIC CAPITAL LETTER DJE;Lu;0;L;;;;;N;;Serbocroatian;;0452;
+0403;CYRILLIC CAPITAL LETTER GJE;Lu;0;L;0413 0301;;;;N;;;;0453;
+0404;CYRILLIC CAPITAL LETTER UKRAINIAN IE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER E;;;0454;
+0405;CYRILLIC CAPITAL LETTER DZE;Lu;0;L;;;;;N;;;;0455;
+0406;CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER I;;;0456;
+0407;CYRILLIC CAPITAL LETTER YI;Lu;0;L;0406 0308;;;;N;;Ukrainian;;0457;
+0408;CYRILLIC CAPITAL LETTER JE;Lu;0;L;;;;;N;;;;0458;
+0409;CYRILLIC CAPITAL LETTER LJE;Lu;0;L;;;;;N;;;;0459;
+040A;CYRILLIC CAPITAL LETTER NJE;Lu;0;L;;;;;N;;;;045A;
+040B;CYRILLIC CAPITAL LETTER TSHE;Lu;0;L;;;;;N;;Serbocroatian;;045B;
+040C;CYRILLIC CAPITAL LETTER KJE;Lu;0;L;041A 0301;;;;N;;;;045C;
+040D;CYRILLIC CAPITAL LETTER I WITH GRAVE;Lu;0;L;0418 0300;;;;N;;;;045D;
+040E;CYRILLIC CAPITAL LETTER SHORT U;Lu;0;L;0423 0306;;;;N;;Byelorussian;;045E;
+040F;CYRILLIC CAPITAL LETTER DZHE;Lu;0;L;;;;;N;;;;045F;
+0410;CYRILLIC CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0430;
+0411;CYRILLIC CAPITAL LETTER BE;Lu;0;L;;;;;N;;;;0431;
+0412;CYRILLIC CAPITAL LETTER VE;Lu;0;L;;;;;N;;;;0432;
+0413;CYRILLIC CAPITAL LETTER GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE;;;0433;
+0414;CYRILLIC CAPITAL LETTER DE;Lu;0;L;;;;;N;;;;0434;
+0415;CYRILLIC CAPITAL LETTER IE;Lu;0;L;;;;;N;;;;0435;
+0416;CYRILLIC CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;0436;
+0417;CYRILLIC CAPITAL LETTER ZE;Lu;0;L;;;;;N;;;;0437;
+0418;CYRILLIC CAPITAL LETTER I;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER II;;;0438;
+0419;CYRILLIC CAPITAL LETTER SHORT I;Lu;0;L;0418 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT II;;;0439;
+041A;CYRILLIC CAPITAL LETTER KA;Lu;0;L;;;;;N;;;;043A;
+041B;CYRILLIC CAPITAL LETTER EL;Lu;0;L;;;;;N;;;;043B;
+041C;CYRILLIC CAPITAL LETTER EM;Lu;0;L;;;;;N;;;;043C;
+041D;CYRILLIC CAPITAL LETTER EN;Lu;0;L;;;;;N;;;;043D;
+041E;CYRILLIC CAPITAL LETTER O;Lu;0;L;;;;;N;;;;043E;
+041F;CYRILLIC CAPITAL LETTER PE;Lu;0;L;;;;;N;;;;043F;
+0420;CYRILLIC CAPITAL LETTER ER;Lu;0;L;;;;;N;;;;0440;
+0421;CYRILLIC CAPITAL LETTER ES;Lu;0;L;;;;;N;;;;0441;
+0422;CYRILLIC CAPITAL LETTER TE;Lu;0;L;;;;;N;;;;0442;
+0423;CYRILLIC CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0443;
+0424;CYRILLIC CAPITAL LETTER EF;Lu;0;L;;;;;N;;;;0444;
+0425;CYRILLIC CAPITAL LETTER HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA;;;0445;
+0426;CYRILLIC CAPITAL LETTER TSE;Lu;0;L;;;;;N;;;;0446;
+0427;CYRILLIC CAPITAL LETTER CHE;Lu;0;L;;;;;N;;;;0447;
+0428;CYRILLIC CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0448;
+0429;CYRILLIC CAPITAL LETTER SHCHA;Lu;0;L;;;;;N;;;;0449;
+042A;CYRILLIC CAPITAL LETTER HARD SIGN;Lu;0;L;;;;;N;;;;044A;
+042B;CYRILLIC CAPITAL LETTER YERU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER YERI;;;044B;
+042C;CYRILLIC CAPITAL LETTER SOFT SIGN;Lu;0;L;;;;;N;;;;044C;
+042D;CYRILLIC CAPITAL LETTER E;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED E;;;044D;
+042E;CYRILLIC CAPITAL LETTER YU;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IU;;;044E;
+042F;CYRILLIC CAPITAL LETTER YA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IA;;;044F;
+0430;CYRILLIC SMALL LETTER A;Ll;0;L;;;;;N;;;0410;;0410
+0431;CYRILLIC SMALL LETTER BE;Ll;0;L;;;;;N;;;0411;;0411
+0432;CYRILLIC SMALL LETTER VE;Ll;0;L;;;;;N;;;0412;;0412
+0433;CYRILLIC SMALL LETTER GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE;;0413;;0413
+0434;CYRILLIC SMALL LETTER DE;Ll;0;L;;;;;N;;;0414;;0414
+0435;CYRILLIC SMALL LETTER IE;Ll;0;L;;;;;N;;;0415;;0415
+0436;CYRILLIC SMALL LETTER ZHE;Ll;0;L;;;;;N;;;0416;;0416
+0437;CYRILLIC SMALL LETTER ZE;Ll;0;L;;;;;N;;;0417;;0417
+0438;CYRILLIC SMALL LETTER I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER II;;0418;;0418
+0439;CYRILLIC SMALL LETTER SHORT I;Ll;0;L;0438 0306;;;;N;CYRILLIC SMALL LETTER SHORT II;;0419;;0419
+043A;CYRILLIC SMALL LETTER KA;Ll;0;L;;;;;N;;;041A;;041A
+043B;CYRILLIC SMALL LETTER EL;Ll;0;L;;;;;N;;;041B;;041B
+043C;CYRILLIC SMALL LETTER EM;Ll;0;L;;;;;N;;;041C;;041C
+043D;CYRILLIC SMALL LETTER EN;Ll;0;L;;;;;N;;;041D;;041D
+043E;CYRILLIC SMALL LETTER O;Ll;0;L;;;;;N;;;041E;;041E
+043F;CYRILLIC SMALL LETTER PE;Ll;0;L;;;;;N;;;041F;;041F
+0440;CYRILLIC SMALL LETTER ER;Ll;0;L;;;;;N;;;0420;;0420
+0441;CYRILLIC SMALL LETTER ES;Ll;0;L;;;;;N;;;0421;;0421
+0442;CYRILLIC SMALL LETTER TE;Ll;0;L;;;;;N;;;0422;;0422
+0443;CYRILLIC SMALL LETTER U;Ll;0;L;;;;;N;;;0423;;0423
+0444;CYRILLIC SMALL LETTER EF;Ll;0;L;;;;;N;;;0424;;0424
+0445;CYRILLIC SMALL LETTER HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA;;0425;;0425
+0446;CYRILLIC SMALL LETTER TSE;Ll;0;L;;;;;N;;;0426;;0426
+0447;CYRILLIC SMALL LETTER CHE;Ll;0;L;;;;;N;;;0427;;0427
+0448;CYRILLIC SMALL LETTER SHA;Ll;0;L;;;;;N;;;0428;;0428
+0449;CYRILLIC SMALL LETTER SHCHA;Ll;0;L;;;;;N;;;0429;;0429
+044A;CYRILLIC SMALL LETTER HARD SIGN;Ll;0;L;;;;;N;;;042A;;042A
+044B;CYRILLIC SMALL LETTER YERU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER YERI;;042B;;042B
+044C;CYRILLIC SMALL LETTER SOFT SIGN;Ll;0;L;;;;;N;;;042C;;042C
+044D;CYRILLIC SMALL LETTER E;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED E;;042D;;042D
+044E;CYRILLIC SMALL LETTER YU;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IU;;042E;;042E
+044F;CYRILLIC SMALL LETTER YA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IA;;042F;;042F
+0450;CYRILLIC SMALL LETTER IE WITH GRAVE;Ll;0;L;0435 0300;;;;N;;;0400;;0400
+0451;CYRILLIC SMALL LETTER IO;Ll;0;L;0435 0308;;;;N;;;0401;;0401
+0452;CYRILLIC SMALL LETTER DJE;Ll;0;L;;;;;N;;Serbocroatian;0402;;0402
+0453;CYRILLIC SMALL LETTER GJE;Ll;0;L;0433 0301;;;;N;;;0403;;0403
+0454;CYRILLIC SMALL LETTER UKRAINIAN IE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER E;;0404;;0404
+0455;CYRILLIC SMALL LETTER DZE;Ll;0;L;;;;;N;;;0405;;0405
+0456;CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER I;;0406;;0406
+0457;CYRILLIC SMALL LETTER YI;Ll;0;L;0456 0308;;;;N;;Ukrainian;0407;;0407
+0458;CYRILLIC SMALL LETTER JE;Ll;0;L;;;;;N;;;0408;;0408
+0459;CYRILLIC SMALL LETTER LJE;Ll;0;L;;;;;N;;;0409;;0409
+045A;CYRILLIC SMALL LETTER NJE;Ll;0;L;;;;;N;;;040A;;040A
+045B;CYRILLIC SMALL LETTER TSHE;Ll;0;L;;;;;N;;Serbocroatian;040B;;040B
+045C;CYRILLIC SMALL LETTER KJE;Ll;0;L;043A 0301;;;;N;;;040C;;040C
+045D;CYRILLIC SMALL LETTER I WITH GRAVE;Ll;0;L;0438 0300;;;;N;;;040D;;040D
+045E;CYRILLIC SMALL LETTER SHORT U;Ll;0;L;0443 0306;;;;N;;Byelorussian;040E;;040E
+045F;CYRILLIC SMALL LETTER DZHE;Ll;0;L;;;;;N;;;040F;;040F
+0460;CYRILLIC CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;0461;
+0461;CYRILLIC SMALL LETTER OMEGA;Ll;0;L;;;;;N;;;0460;;0460
+0462;CYRILLIC CAPITAL LETTER YAT;Lu;0;L;;;;;N;;;;0463;
+0463;CYRILLIC SMALL LETTER YAT;Ll;0;L;;;;;N;;;0462;;0462
+0464;CYRILLIC CAPITAL LETTER IOTIFIED E;Lu;0;L;;;;;N;;;;0465;
+0465;CYRILLIC SMALL LETTER IOTIFIED E;Ll;0;L;;;;;N;;;0464;;0464
+0466;CYRILLIC CAPITAL LETTER LITTLE YUS;Lu;0;L;;;;;N;;;;0467;
+0467;CYRILLIC SMALL LETTER LITTLE YUS;Ll;0;L;;;;;N;;;0466;;0466
+0468;CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS;Lu;0;L;;;;;N;;;;0469;
+0469;CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS;Ll;0;L;;;;;N;;;0468;;0468
+046A;CYRILLIC CAPITAL LETTER BIG YUS;Lu;0;L;;;;;N;;;;046B;
+046B;CYRILLIC SMALL LETTER BIG YUS;Ll;0;L;;;;;N;;;046A;;046A
+046C;CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS;Lu;0;L;;;;;N;;;;046D;
+046D;CYRILLIC SMALL LETTER IOTIFIED BIG YUS;Ll;0;L;;;;;N;;;046C;;046C
+046E;CYRILLIC CAPITAL LETTER KSI;Lu;0;L;;;;;N;;;;046F;
+046F;CYRILLIC SMALL LETTER KSI;Ll;0;L;;;;;N;;;046E;;046E
+0470;CYRILLIC CAPITAL LETTER PSI;Lu;0;L;;;;;N;;;;0471;
+0471;CYRILLIC SMALL LETTER PSI;Ll;0;L;;;;;N;;;0470;;0470
+0472;CYRILLIC CAPITAL LETTER FITA;Lu;0;L;;;;;N;;;;0473;
+0473;CYRILLIC SMALL LETTER FITA;Ll;0;L;;;;;N;;;0472;;0472
+0474;CYRILLIC CAPITAL LETTER IZHITSA;Lu;0;L;;;;;N;;;;0475;
+0475;CYRILLIC SMALL LETTER IZHITSA;Ll;0;L;;;;;N;;;0474;;0474
+0476;CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Lu;0;L;0474 030F;;;;N;CYRILLIC CAPITAL LETTER IZHITSA DOUBLE GRAVE;;;0477;
+0477;CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT;Ll;0;L;0475 030F;;;;N;CYRILLIC SMALL LETTER IZHITSA DOUBLE GRAVE;;0476;;0476
+0478;CYRILLIC CAPITAL LETTER UK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER UK DIGRAPH;;;0479;
+0479;CYRILLIC SMALL LETTER UK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER UK DIGRAPH;;0478;;0478
+047A;CYRILLIC CAPITAL LETTER ROUND OMEGA;Lu;0;L;;;;;N;;;;047B;
+047B;CYRILLIC SMALL LETTER ROUND OMEGA;Ll;0;L;;;;;N;;;047A;;047A
+047C;CYRILLIC CAPITAL LETTER OMEGA WITH TITLO;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER OMEGA TITLO;;;047D;
+047D;CYRILLIC SMALL LETTER OMEGA WITH TITLO;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER OMEGA TITLO;;047C;;047C
+047E;CYRILLIC CAPITAL LETTER OT;Lu;0;L;;;;;N;;;;047F;
+047F;CYRILLIC SMALL LETTER OT;Ll;0;L;;;;;N;;;047E;;047E
+0480;CYRILLIC CAPITAL LETTER KOPPA;Lu;0;L;;;;;N;;;;0481;
+0481;CYRILLIC SMALL LETTER KOPPA;Ll;0;L;;;;;N;;;0480;;0480
+0482;CYRILLIC THOUSANDS SIGN;So;0;L;;;;;N;;;;;
+0483;COMBINING CYRILLIC TITLO;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING TITLO;;;;
+0484;COMBINING CYRILLIC PALATALIZATION;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PALATALIZATION;;;;
+0485;COMBINING CYRILLIC DASIA PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING DASIA PNEUMATA;;;;
+0486;COMBINING CYRILLIC PSILI PNEUMATA;Mn;230;NSM;;;;;N;CYRILLIC NON-SPACING PSILI PNEUMATA;;;;
+0488;COMBINING CYRILLIC HUNDRED THOUSANDS SIGN;Me;0;NSM;;;;;N;;;;;
+0489;COMBINING CYRILLIC MILLIONS SIGN;Me;0;NSM;;;;;N;;;;;
+048C;CYRILLIC CAPITAL LETTER SEMISOFT SIGN;Lu;0;L;;;;;N;;;;048D;
+048D;CYRILLIC SMALL LETTER SEMISOFT SIGN;Ll;0;L;;;;;N;;;048C;;048C
+048E;CYRILLIC CAPITAL LETTER ER WITH TICK;Lu;0;L;;;;;N;;;;048F;
+048F;CYRILLIC SMALL LETTER ER WITH TICK;Ll;0;L;;;;;N;;;048E;;048E
+0490;CYRILLIC CAPITAL LETTER GHE WITH UPTURN;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE WITH UPTURN;;;0491;
+0491;CYRILLIC SMALL LETTER GHE WITH UPTURN;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE WITH UPTURN;;0490;;0490
+0492;CYRILLIC CAPITAL LETTER GHE WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE BAR;;;0493;
+0493;CYRILLIC SMALL LETTER GHE WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE BAR;;0492;;0492
+0494;CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER GE HOOK;;;0495;
+0495;CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER GE HOOK;;0494;;0494
+0496;CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZHE WITH RIGHT DESCENDER;;;0497;
+0497;CYRILLIC SMALL LETTER ZHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZHE WITH RIGHT DESCENDER;;0496;;0496
+0498;CYRILLIC CAPITAL LETTER ZE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ZE CEDILLA;;;0499;
+0499;CYRILLIC SMALL LETTER ZE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ZE CEDILLA;;0498;;0498
+049A;CYRILLIC CAPITAL LETTER KA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA WITH RIGHT DESCENDER;;;049B;
+049B;CYRILLIC SMALL LETTER KA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA WITH RIGHT DESCENDER;;049A;;049A
+049C;CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA VERTICAL BAR;;;049D;
+049D;CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA VERTICAL BAR;;049C;;049C
+049E;CYRILLIC CAPITAL LETTER KA WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA BAR;;;049F;
+049F;CYRILLIC SMALL LETTER KA WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA BAR;;049E;;049E
+04A0;CYRILLIC CAPITAL LETTER BASHKIR KA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER REVERSED GE KA;;;04A1;
+04A1;CYRILLIC SMALL LETTER BASHKIR KA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER REVERSED GE KA;;04A0;;04A0
+04A2;CYRILLIC CAPITAL LETTER EN WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN WITH RIGHT DESCENDER;;;04A3;
+04A3;CYRILLIC SMALL LETTER EN WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN WITH RIGHT DESCENDER;;04A2;;04A2
+04A4;CYRILLIC CAPITAL LIGATURE EN GHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN GE;;;04A5;
+04A5;CYRILLIC SMALL LIGATURE EN GHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN GE;;04A4;;04A4
+04A6;CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER PE HOOK;Abkhasian;;04A7;
+04A7;CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER PE HOOK;Abkhasian;04A6;;04A6
+04A8;CYRILLIC CAPITAL LETTER ABKHASIAN HA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER O HOOK;;;04A9;
+04A9;CYRILLIC SMALL LETTER ABKHASIAN HA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER O HOOK;;04A8;;04A8
+04AA;CYRILLIC CAPITAL LETTER ES WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER ES CEDILLA;;;04AB;
+04AB;CYRILLIC SMALL LETTER ES WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER ES CEDILLA;;04AA;;04AA
+04AC;CYRILLIC CAPITAL LETTER TE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE WITH RIGHT DESCENDER;;;04AD;
+04AD;CYRILLIC SMALL LETTER TE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE WITH RIGHT DESCENDER;;04AC;;04AC
+04AE;CYRILLIC CAPITAL LETTER STRAIGHT U;Lu;0;L;;;;;N;;;;04AF;
+04AF;CYRILLIC SMALL LETTER STRAIGHT U;Ll;0;L;;;;;N;;;04AE;;04AE
+04B0;CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER STRAIGHT U BAR;;;04B1;
+04B1;CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER STRAIGHT U BAR;;04B0;;04B0
+04B2;CYRILLIC CAPITAL LETTER HA WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KHA WITH RIGHT DESCENDER;;;04B3;
+04B3;CYRILLIC SMALL LETTER HA WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KHA WITH RIGHT DESCENDER;;04B2;;04B2
+04B4;CYRILLIC CAPITAL LIGATURE TE TSE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER TE TSE;Abkhasian;;04B5;
+04B5;CYRILLIC SMALL LIGATURE TE TSE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER TE TSE;Abkhasian;04B4;;04B4
+04B6;CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH RIGHT DESCENDER;;;04B7;
+04B7;CYRILLIC SMALL LETTER CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH RIGHT DESCENDER;;04B6;;04B6
+04B8;CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE VERTICAL BAR;;;04B9;
+04B9;CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE VERTICAL BAR;;04B8;;04B8
+04BA;CYRILLIC CAPITAL LETTER SHHA;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER H;;;04BB;
+04BB;CYRILLIC SMALL LETTER SHHA;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER H;;04BA;;04BA
+04BC;CYRILLIC CAPITAL LETTER ABKHASIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK;;;04BD;
+04BD;CYRILLIC SMALL LETTER ABKHASIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK;;04BC;;04BC
+04BE;CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER IE HOOK OGONEK;;;04BF;
+04BF;CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER IE HOOK OGONEK;;04BE;;04BE
+04C0;CYRILLIC LETTER PALOCHKA;Lu;0;L;;;;;N;CYRILLIC LETTER I;;;;
+04C1;CYRILLIC CAPITAL LETTER ZHE WITH BREVE;Lu;0;L;0416 0306;;;;N;CYRILLIC CAPITAL LETTER SHORT ZHE;;;04C2;
+04C2;CYRILLIC SMALL LETTER ZHE WITH BREVE;Ll;0;L;0436 0306;;;;N;CYRILLIC SMALL LETTER SHORT ZHE;;04C1;;04C1
+04C3;CYRILLIC CAPITAL LETTER KA WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER KA HOOK;;;04C4;
+04C4;CYRILLIC SMALL LETTER KA WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER KA HOOK;;04C3;;04C3
+04C7;CYRILLIC CAPITAL LETTER EN WITH HOOK;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER EN HOOK;;;04C8;
+04C8;CYRILLIC SMALL LETTER EN WITH HOOK;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER EN HOOK;;04C7;;04C7
+04CB;CYRILLIC CAPITAL LETTER KHAKASSIAN CHE;Lu;0;L;;;;;N;CYRILLIC CAPITAL LETTER CHE WITH LEFT DESCENDER;;;04CC;
+04CC;CYRILLIC SMALL LETTER KHAKASSIAN CHE;Ll;0;L;;;;;N;CYRILLIC SMALL LETTER CHE WITH LEFT DESCENDER;;04CB;;04CB
+04D0;CYRILLIC CAPITAL LETTER A WITH BREVE;Lu;0;L;0410 0306;;;;N;;;;04D1;
+04D1;CYRILLIC SMALL LETTER A WITH BREVE;Ll;0;L;0430 0306;;;;N;;;04D0;;04D0
+04D2;CYRILLIC CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0410 0308;;;;N;;;;04D3;
+04D3;CYRILLIC SMALL LETTER A WITH DIAERESIS;Ll;0;L;0430 0308;;;;N;;;04D2;;04D2
+04D4;CYRILLIC CAPITAL LIGATURE A IE;Lu;0;L;;;;;N;;;;04D5;
+04D5;CYRILLIC SMALL LIGATURE A IE;Ll;0;L;;;;;N;;;04D4;;04D4
+04D6;CYRILLIC CAPITAL LETTER IE WITH BREVE;Lu;0;L;0415 0306;;;;N;;;;04D7;
+04D7;CYRILLIC SMALL LETTER IE WITH BREVE;Ll;0;L;0435 0306;;;;N;;;04D6;;04D6
+04D8;CYRILLIC CAPITAL LETTER SCHWA;Lu;0;L;;;;;N;;;;04D9;
+04D9;CYRILLIC SMALL LETTER SCHWA;Ll;0;L;;;;;N;;;04D8;;04D8
+04DA;CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;Lu;0;L;04D8 0308;;;;N;;;;04DB;
+04DB;CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;Ll;0;L;04D9 0308;;;;N;;;04DA;;04DA
+04DC;CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS;Lu;0;L;0416 0308;;;;N;;;;04DD;
+04DD;CYRILLIC SMALL LETTER ZHE WITH DIAERESIS;Ll;0;L;0436 0308;;;;N;;;04DC;;04DC
+04DE;CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS;Lu;0;L;0417 0308;;;;N;;;;04DF;
+04DF;CYRILLIC SMALL LETTER ZE WITH DIAERESIS;Ll;0;L;0437 0308;;;;N;;;04DE;;04DE
+04E0;CYRILLIC CAPITAL LETTER ABKHASIAN DZE;Lu;0;L;;;;;N;;;;04E1;
+04E1;CYRILLIC SMALL LETTER ABKHASIAN DZE;Ll;0;L;;;;;N;;;04E0;;04E0
+04E2;CYRILLIC CAPITAL LETTER I WITH MACRON;Lu;0;L;0418 0304;;;;N;;;;04E3;
+04E3;CYRILLIC SMALL LETTER I WITH MACRON;Ll;0;L;0438 0304;;;;N;;;04E2;;04E2
+04E4;CYRILLIC CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0418 0308;;;;N;;;;04E5;
+04E5;CYRILLIC SMALL LETTER I WITH DIAERESIS;Ll;0;L;0438 0308;;;;N;;;04E4;;04E4
+04E6;CYRILLIC CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;041E 0308;;;;N;;;;04E7;
+04E7;CYRILLIC SMALL LETTER O WITH DIAERESIS;Ll;0;L;043E 0308;;;;N;;;04E6;;04E6
+04E8;CYRILLIC CAPITAL LETTER BARRED O;Lu;0;L;;;;;N;;;;04E9;
+04E9;CYRILLIC SMALL LETTER BARRED O;Ll;0;L;;;;;N;;;04E8;;04E8
+04EA;CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;Lu;0;L;04E8 0308;;;;N;;;;04EB;
+04EB;CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;Ll;0;L;04E9 0308;;;;N;;;04EA;;04EA
+04EC;CYRILLIC CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;042D 0308;;;;N;;;;04ED;
+04ED;CYRILLIC SMALL LETTER E WITH DIAERESIS;Ll;0;L;044D 0308;;;;N;;;04EC;;04EC
+04EE;CYRILLIC CAPITAL LETTER U WITH MACRON;Lu;0;L;0423 0304;;;;N;;;;04EF;
+04EF;CYRILLIC SMALL LETTER U WITH MACRON;Ll;0;L;0443 0304;;;;N;;;04EE;;04EE
+04F0;CYRILLIC CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0423 0308;;;;N;;;;04F1;
+04F1;CYRILLIC SMALL LETTER U WITH DIAERESIS;Ll;0;L;0443 0308;;;;N;;;04F0;;04F0
+04F2;CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE;Lu;0;L;0423 030B;;;;N;;;;04F3;
+04F3;CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE;Ll;0;L;0443 030B;;;;N;;;04F2;;04F2
+04F4;CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS;Lu;0;L;0427 0308;;;;N;;;;04F5;
+04F5;CYRILLIC SMALL LETTER CHE WITH DIAERESIS;Ll;0;L;0447 0308;;;;N;;;04F4;;04F4
+04F8;CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS;Lu;0;L;042B 0308;;;;N;;;;04F9;
+04F9;CYRILLIC SMALL LETTER YERU WITH DIAERESIS;Ll;0;L;044B 0308;;;;N;;;04F8;;04F8
+0531;ARMENIAN CAPITAL LETTER AYB;Lu;0;L;;;;;N;;;;0561;
+0532;ARMENIAN CAPITAL LETTER BEN;Lu;0;L;;;;;N;;;;0562;
+0533;ARMENIAN CAPITAL LETTER GIM;Lu;0;L;;;;;N;;;;0563;
+0534;ARMENIAN CAPITAL LETTER DA;Lu;0;L;;;;;N;;;;0564;
+0535;ARMENIAN CAPITAL LETTER ECH;Lu;0;L;;;;;N;;;;0565;
+0536;ARMENIAN CAPITAL LETTER ZA;Lu;0;L;;;;;N;;;;0566;
+0537;ARMENIAN CAPITAL LETTER EH;Lu;0;L;;;;;N;;;;0567;
+0538;ARMENIAN CAPITAL LETTER ET;Lu;0;L;;;;;N;;;;0568;
+0539;ARMENIAN CAPITAL LETTER TO;Lu;0;L;;;;;N;;;;0569;
+053A;ARMENIAN CAPITAL LETTER ZHE;Lu;0;L;;;;;N;;;;056A;
+053B;ARMENIAN CAPITAL LETTER INI;Lu;0;L;;;;;N;;;;056B;
+053C;ARMENIAN CAPITAL LETTER LIWN;Lu;0;L;;;;;N;;;;056C;
+053D;ARMENIAN CAPITAL LETTER XEH;Lu;0;L;;;;;N;;;;056D;
+053E;ARMENIAN CAPITAL LETTER CA;Lu;0;L;;;;;N;;;;056E;
+053F;ARMENIAN CAPITAL LETTER KEN;Lu;0;L;;;;;N;;;;056F;
+0540;ARMENIAN CAPITAL LETTER HO;Lu;0;L;;;;;N;;;;0570;
+0541;ARMENIAN CAPITAL LETTER JA;Lu;0;L;;;;;N;;;;0571;
+0542;ARMENIAN CAPITAL LETTER GHAD;Lu;0;L;;;;;N;ARMENIAN CAPITAL LETTER LAD;;;0572;
+0543;ARMENIAN CAPITAL LETTER CHEH;Lu;0;L;;;;;N;;;;0573;
+0544;ARMENIAN CAPITAL LETTER MEN;Lu;0;L;;;;;N;;;;0574;
+0545;ARMENIAN CAPITAL LETTER YI;Lu;0;L;;;;;N;;;;0575;
+0546;ARMENIAN CAPITAL LETTER NOW;Lu;0;L;;;;;N;;;;0576;
+0547;ARMENIAN CAPITAL LETTER SHA;Lu;0;L;;;;;N;;;;0577;
+0548;ARMENIAN CAPITAL LETTER VO;Lu;0;L;;;;;N;;;;0578;
+0549;ARMENIAN CAPITAL LETTER CHA;Lu;0;L;;;;;N;;;;0579;
+054A;ARMENIAN CAPITAL LETTER PEH;Lu;0;L;;;;;N;;;;057A;
+054B;ARMENIAN CAPITAL LETTER JHEH;Lu;0;L;;;;;N;;;;057B;
+054C;ARMENIAN CAPITAL LETTER RA;Lu;0;L;;;;;N;;;;057C;
+054D;ARMENIAN CAPITAL LETTER SEH;Lu;0;L;;;;;N;;;;057D;
+054E;ARMENIAN CAPITAL LETTER VEW;Lu;0;L;;;;;N;;;;057E;
+054F;ARMENIAN CAPITAL LETTER TIWN;Lu;0;L;;;;;N;;;;057F;
+0550;ARMENIAN CAPITAL LETTER REH;Lu;0;L;;;;;N;;;;0580;
+0551;ARMENIAN CAPITAL LETTER CO;Lu;0;L;;;;;N;;;;0581;
+0552;ARMENIAN CAPITAL LETTER YIWN;Lu;0;L;;;;;N;;;;0582;
+0553;ARMENIAN CAPITAL LETTER PIWR;Lu;0;L;;;;;N;;;;0583;
+0554;ARMENIAN CAPITAL LETTER KEH;Lu;0;L;;;;;N;;;;0584;
+0555;ARMENIAN CAPITAL LETTER OH;Lu;0;L;;;;;N;;;;0585;
+0556;ARMENIAN CAPITAL LETTER FEH;Lu;0;L;;;;;N;;;;0586;
+0559;ARMENIAN MODIFIER LETTER LEFT HALF RING;Lm;0;L;;;;;N;;;;;
+055A;ARMENIAN APOSTROPHE;Po;0;L;;;;;N;ARMENIAN MODIFIER LETTER RIGHT HALF RING;;;;
+055B;ARMENIAN EMPHASIS MARK;Po;0;L;;;;;N;;;;;
+055C;ARMENIAN EXCLAMATION MARK;Po;0;L;;;;;N;;;;;
+055D;ARMENIAN COMMA;Po;0;L;;;;;N;;;;;
+055E;ARMENIAN QUESTION MARK;Po;0;L;;;;;N;;;;;
+055F;ARMENIAN ABBREVIATION MARK;Po;0;L;;;;;N;;;;;
+0561;ARMENIAN SMALL LETTER AYB;Ll;0;L;;;;;N;;;0531;;0531
+0562;ARMENIAN SMALL LETTER BEN;Ll;0;L;;;;;N;;;0532;;0532
+0563;ARMENIAN SMALL LETTER GIM;Ll;0;L;;;;;N;;;0533;;0533
+0564;ARMENIAN SMALL LETTER DA;Ll;0;L;;;;;N;;;0534;;0534
+0565;ARMENIAN SMALL LETTER ECH;Ll;0;L;;;;;N;;;0535;;0535
+0566;ARMENIAN SMALL LETTER ZA;Ll;0;L;;;;;N;;;0536;;0536
+0567;ARMENIAN SMALL LETTER EH;Ll;0;L;;;;;N;;;0537;;0537
+0568;ARMENIAN SMALL LETTER ET;Ll;0;L;;;;;N;;;0538;;0538
+0569;ARMENIAN SMALL LETTER TO;Ll;0;L;;;;;N;;;0539;;0539
+056A;ARMENIAN SMALL LETTER ZHE;Ll;0;L;;;;;N;;;053A;;053A
+056B;ARMENIAN SMALL LETTER INI;Ll;0;L;;;;;N;;;053B;;053B
+056C;ARMENIAN SMALL LETTER LIWN;Ll;0;L;;;;;N;;;053C;;053C
+056D;ARMENIAN SMALL LETTER XEH;Ll;0;L;;;;;N;;;053D;;053D
+056E;ARMENIAN SMALL LETTER CA;Ll;0;L;;;;;N;;;053E;;053E
+056F;ARMENIAN SMALL LETTER KEN;Ll;0;L;;;;;N;;;053F;;053F
+0570;ARMENIAN SMALL LETTER HO;Ll;0;L;;;;;N;;;0540;;0540
+0571;ARMENIAN SMALL LETTER JA;Ll;0;L;;;;;N;;;0541;;0541
+0572;ARMENIAN SMALL LETTER GHAD;Ll;0;L;;;;;N;ARMENIAN SMALL LETTER LAD;;0542;;0542
+0573;ARMENIAN SMALL LETTER CHEH;Ll;0;L;;;;;N;;;0543;;0543
+0574;ARMENIAN SMALL LETTER MEN;Ll;0;L;;;;;N;;;0544;;0544
+0575;ARMENIAN SMALL LETTER YI;Ll;0;L;;;;;N;;;0545;;0545
+0576;ARMENIAN SMALL LETTER NOW;Ll;0;L;;;;;N;;;0546;;0546
+0577;ARMENIAN SMALL LETTER SHA;Ll;0;L;;;;;N;;;0547;;0547
+0578;ARMENIAN SMALL LETTER VO;Ll;0;L;;;;;N;;;0548;;0548
+0579;ARMENIAN SMALL LETTER CHA;Ll;0;L;;;;;N;;;0549;;0549
+057A;ARMENIAN SMALL LETTER PEH;Ll;0;L;;;;;N;;;054A;;054A
+057B;ARMENIAN SMALL LETTER JHEH;Ll;0;L;;;;;N;;;054B;;054B
+057C;ARMENIAN SMALL LETTER RA;Ll;0;L;;;;;N;;;054C;;054C
+057D;ARMENIAN SMALL LETTER SEH;Ll;0;L;;;;;N;;;054D;;054D
+057E;ARMENIAN SMALL LETTER VEW;Ll;0;L;;;;;N;;;054E;;054E
+057F;ARMENIAN SMALL LETTER TIWN;Ll;0;L;;;;;N;;;054F;;054F
+0580;ARMENIAN SMALL LETTER REH;Ll;0;L;;;;;N;;;0550;;0550
+0581;ARMENIAN SMALL LETTER CO;Ll;0;L;;;;;N;;;0551;;0551
+0582;ARMENIAN SMALL LETTER YIWN;Ll;0;L;;;;;N;;;0552;;0552
+0583;ARMENIAN SMALL LETTER PIWR;Ll;0;L;;;;;N;;;0553;;0553
+0584;ARMENIAN SMALL LETTER KEH;Ll;0;L;;;;;N;;;0554;;0554
+0585;ARMENIAN SMALL LETTER OH;Ll;0;L;;;;;N;;;0555;;0555
+0586;ARMENIAN SMALL LETTER FEH;Ll;0;L;;;;;N;;;0556;;0556
+0587;ARMENIAN SMALL LIGATURE ECH YIWN;Ll;0;L;<compat> 0565 0582;;;;N;;;;;
+0589;ARMENIAN FULL STOP;Po;0;L;;;;;N;ARMENIAN PERIOD;;;;
+058A;ARMENIAN HYPHEN;Pd;0;ON;;;;;N;;;;;
+0591;HEBREW ACCENT ETNAHTA;Mn;220;NSM;;;;;N;;;;;
+0592;HEBREW ACCENT SEGOL;Mn;230;NSM;;;;;N;;;;;
+0593;HEBREW ACCENT SHALSHELET;Mn;230;NSM;;;;;N;;;;;
+0594;HEBREW ACCENT ZAQEF QATAN;Mn;230;NSM;;;;;N;;;;;
+0595;HEBREW ACCENT ZAQEF GADOL;Mn;230;NSM;;;;;N;;;;;
+0596;HEBREW ACCENT TIPEHA;Mn;220;NSM;;;;;N;;*;;;
+0597;HEBREW ACCENT REVIA;Mn;230;NSM;;;;;N;;;;;
+0598;HEBREW ACCENT ZARQA;Mn;230;NSM;;;;;N;;*;;;
+0599;HEBREW ACCENT PASHTA;Mn;230;NSM;;;;;N;;;;;
+059A;HEBREW ACCENT YETIV;Mn;222;NSM;;;;;N;;;;;
+059B;HEBREW ACCENT TEVIR;Mn;220;NSM;;;;;N;;;;;
+059C;HEBREW ACCENT GERESH;Mn;230;NSM;;;;;N;;;;;
+059D;HEBREW ACCENT GERESH MUQDAM;Mn;230;NSM;;;;;N;;;;;
+059E;HEBREW ACCENT GERSHAYIM;Mn;230;NSM;;;;;N;;;;;
+059F;HEBREW ACCENT QARNEY PARA;Mn;230;NSM;;;;;N;;;;;
+05A0;HEBREW ACCENT TELISHA GEDOLA;Mn;230;NSM;;;;;N;;;;;
+05A1;HEBREW ACCENT PAZER;Mn;230;NSM;;;;;N;;;;;
+05A3;HEBREW ACCENT MUNAH;Mn;220;NSM;;;;;N;;;;;
+05A4;HEBREW ACCENT MAHAPAKH;Mn;220;NSM;;;;;N;;;;;
+05A5;HEBREW ACCENT MERKHA;Mn;220;NSM;;;;;N;;*;;;
+05A6;HEBREW ACCENT MERKHA KEFULA;Mn;220;NSM;;;;;N;;;;;
+05A7;HEBREW ACCENT DARGA;Mn;220;NSM;;;;;N;;;;;
+05A8;HEBREW ACCENT QADMA;Mn;230;NSM;;;;;N;;*;;;
+05A9;HEBREW ACCENT TELISHA QETANA;Mn;230;NSM;;;;;N;;;;;
+05AA;HEBREW ACCENT YERAH BEN YOMO;Mn;220;NSM;;;;;N;;*;;;
+05AB;HEBREW ACCENT OLE;Mn;230;NSM;;;;;N;;;;;
+05AC;HEBREW ACCENT ILUY;Mn;230;NSM;;;;;N;;;;;
+05AD;HEBREW ACCENT DEHI;Mn;222;NSM;;;;;N;;;;;
+05AE;HEBREW ACCENT ZINOR;Mn;228;NSM;;;;;N;;;;;
+05AF;HEBREW MARK MASORA CIRCLE;Mn;230;NSM;;;;;N;;;;;
+05B0;HEBREW POINT SHEVA;Mn;10;NSM;;;;;N;;;;;
+05B1;HEBREW POINT HATAF SEGOL;Mn;11;NSM;;;;;N;;;;;
+05B2;HEBREW POINT HATAF PATAH;Mn;12;NSM;;;;;N;;;;;
+05B3;HEBREW POINT HATAF QAMATS;Mn;13;NSM;;;;;N;;;;;
+05B4;HEBREW POINT HIRIQ;Mn;14;NSM;;;;;N;;;;;
+05B5;HEBREW POINT TSERE;Mn;15;NSM;;;;;N;;;;;
+05B6;HEBREW POINT SEGOL;Mn;16;NSM;;;;;N;;;;;
+05B7;HEBREW POINT PATAH;Mn;17;NSM;;;;;N;;;;;
+05B8;HEBREW POINT QAMATS;Mn;18;NSM;;;;;N;;;;;
+05B9;HEBREW POINT HOLAM;Mn;19;NSM;;;;;N;;;;;
+05BB;HEBREW POINT QUBUTS;Mn;20;NSM;;;;;N;;;;;
+05BC;HEBREW POINT DAGESH OR MAPIQ;Mn;21;NSM;;;;;N;HEBREW POINT DAGESH;or shuruq;;;
+05BD;HEBREW POINT METEG;Mn;22;NSM;;;;;N;;*;;;
+05BE;HEBREW PUNCTUATION MAQAF;Po;0;R;;;;;N;;;;;
+05BF;HEBREW POINT RAFE;Mn;23;NSM;;;;;N;;;;;
+05C0;HEBREW PUNCTUATION PASEQ;Po;0;R;;;;;N;HEBREW POINT PASEQ;*;;;
+05C1;HEBREW POINT SHIN DOT;Mn;24;NSM;;;;;N;;;;;
+05C2;HEBREW POINT SIN DOT;Mn;25;NSM;;;;;N;;;;;
+05C3;HEBREW PUNCTUATION SOF PASUQ;Po;0;R;;;;;N;;*;;;
+05C4;HEBREW MARK UPPER DOT;Mn;230;NSM;;;;;N;;;;;
+05D0;HEBREW LETTER ALEF;Lo;0;R;;;;;N;;;;;
+05D1;HEBREW LETTER BET;Lo;0;R;;;;;N;;;;;
+05D2;HEBREW LETTER GIMEL;Lo;0;R;;;;;N;;;;;
+05D3;HEBREW LETTER DALET;Lo;0;R;;;;;N;;;;;
+05D4;HEBREW LETTER HE;Lo;0;R;;;;;N;;;;;
+05D5;HEBREW LETTER VAV;Lo;0;R;;;;;N;;;;;
+05D6;HEBREW LETTER ZAYIN;Lo;0;R;;;;;N;;;;;
+05D7;HEBREW LETTER HET;Lo;0;R;;;;;N;;;;;
+05D8;HEBREW LETTER TET;Lo;0;R;;;;;N;;;;;
+05D9;HEBREW LETTER YOD;Lo;0;R;;;;;N;;;;;
+05DA;HEBREW LETTER FINAL KAF;Lo;0;R;;;;;N;;;;;
+05DB;HEBREW LETTER KAF;Lo;0;R;;;;;N;;;;;
+05DC;HEBREW LETTER LAMED;Lo;0;R;;;;;N;;;;;
+05DD;HEBREW LETTER FINAL MEM;Lo;0;R;;;;;N;;;;;
+05DE;HEBREW LETTER MEM;Lo;0;R;;;;;N;;;;;
+05DF;HEBREW LETTER FINAL NUN;Lo;0;R;;;;;N;;;;;
+05E0;HEBREW LETTER NUN;Lo;0;R;;;;;N;;;;;
+05E1;HEBREW LETTER SAMEKH;Lo;0;R;;;;;N;;;;;
+05E2;HEBREW LETTER AYIN;Lo;0;R;;;;;N;;;;;
+05E3;HEBREW LETTER FINAL PE;Lo;0;R;;;;;N;;;;;
+05E4;HEBREW LETTER PE;Lo;0;R;;;;;N;;;;;
+05E5;HEBREW LETTER FINAL TSADI;Lo;0;R;;;;;N;;;;;
+05E6;HEBREW LETTER TSADI;Lo;0;R;;;;;N;;;;;
+05E7;HEBREW LETTER QOF;Lo;0;R;;;;;N;;;;;
+05E8;HEBREW LETTER RESH;Lo;0;R;;;;;N;;;;;
+05E9;HEBREW LETTER SHIN;Lo;0;R;;;;;N;;;;;
+05EA;HEBREW LETTER TAV;Lo;0;R;;;;;N;;;;;
+05F0;HEBREW LIGATURE YIDDISH DOUBLE VAV;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE VAV;;;;
+05F1;HEBREW LIGATURE YIDDISH VAV YOD;Lo;0;R;;;;;N;HEBREW LETTER VAV YOD;;;;
+05F2;HEBREW LIGATURE YIDDISH DOUBLE YOD;Lo;0;R;;;;;N;HEBREW LETTER DOUBLE YOD;;;;
+05F3;HEBREW PUNCTUATION GERESH;Po;0;R;;;;;N;;;;;
+05F4;HEBREW PUNCTUATION GERSHAYIM;Po;0;R;;;;;N;;;;;
+060C;ARABIC COMMA;Po;0;CS;;;;;N;;;;;
+061B;ARABIC SEMICOLON;Po;0;AL;;;;;N;;;;;
+061F;ARABIC QUESTION MARK;Po;0;AL;;;;;N;;;;;
+0621;ARABIC LETTER HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH;;;;
+0622;ARABIC LETTER ALEF WITH MADDA ABOVE;Lo;0;AL;0627 0653;;;;N;ARABIC LETTER MADDAH ON ALEF;;;;
+0623;ARABIC LETTER ALEF WITH HAMZA ABOVE;Lo;0;AL;0627 0654;;;;N;ARABIC LETTER HAMZAH ON ALEF;;;;
+0624;ARABIC LETTER WAW WITH HAMZA ABOVE;Lo;0;AL;0648 0654;;;;N;ARABIC LETTER HAMZAH ON WAW;;;;
+0625;ARABIC LETTER ALEF WITH HAMZA BELOW;Lo;0;AL;0627 0655;;;;N;ARABIC LETTER HAMZAH UNDER ALEF;;;;
+0626;ARABIC LETTER YEH WITH HAMZA ABOVE;Lo;0;AL;064A 0654;;;;N;ARABIC LETTER HAMZAH ON YA;;;;
+0627;ARABIC LETTER ALEF;Lo;0;AL;;;;;N;;;;;
+0628;ARABIC LETTER BEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA;;;;
+0629;ARABIC LETTER TEH MARBUTA;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH;;;;
+062A;ARABIC LETTER TEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA;;;;
+062B;ARABIC LETTER THEH;Lo;0;AL;;;;;N;ARABIC LETTER THAA;;;;
+062C;ARABIC LETTER JEEM;Lo;0;AL;;;;;N;;;;;
+062D;ARABIC LETTER HAH;Lo;0;AL;;;;;N;ARABIC LETTER HAA;;;;
+062E;ARABIC LETTER KHAH;Lo;0;AL;;;;;N;ARABIC LETTER KHAA;;;;
+062F;ARABIC LETTER DAL;Lo;0;AL;;;;;N;;;;;
+0630;ARABIC LETTER THAL;Lo;0;AL;;;;;N;;;;;
+0631;ARABIC LETTER REH;Lo;0;AL;;;;;N;ARABIC LETTER RA;;;;
+0632;ARABIC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+0633;ARABIC LETTER SEEN;Lo;0;AL;;;;;N;;;;;
+0634;ARABIC LETTER SHEEN;Lo;0;AL;;;;;N;;;;;
+0635;ARABIC LETTER SAD;Lo;0;AL;;;;;N;;;;;
+0636;ARABIC LETTER DAD;Lo;0;AL;;;;;N;;;;;
+0637;ARABIC LETTER TAH;Lo;0;AL;;;;;N;;;;;
+0638;ARABIC LETTER ZAH;Lo;0;AL;;;;;N;ARABIC LETTER DHAH;;;;
+0639;ARABIC LETTER AIN;Lo;0;AL;;;;;N;;;;;
+063A;ARABIC LETTER GHAIN;Lo;0;AL;;;;;N;;;;;
+0640;ARABIC TATWEEL;Lm;0;AL;;;;;N;;;;;
+0641;ARABIC LETTER FEH;Lo;0;AL;;;;;N;ARABIC LETTER FA;;;;
+0642;ARABIC LETTER QAF;Lo;0;AL;;;;;N;;;;;
+0643;ARABIC LETTER KAF;Lo;0;AL;;;;;N;ARABIC LETTER CAF;;;;
+0644;ARABIC LETTER LAM;Lo;0;AL;;;;;N;;;;;
+0645;ARABIC LETTER MEEM;Lo;0;AL;;;;;N;;;;;
+0646;ARABIC LETTER NOON;Lo;0;AL;;;;;N;;;;;
+0647;ARABIC LETTER HEH;Lo;0;AL;;;;;N;ARABIC LETTER HA;;;;
+0648;ARABIC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+0649;ARABIC LETTER ALEF MAKSURA;Lo;0;AL;;;;;N;ARABIC LETTER ALEF MAQSURAH;;;;
+064A;ARABIC LETTER YEH;Lo;0;AL;;;;;N;ARABIC LETTER YA;;;;
+064B;ARABIC FATHATAN;Mn;27;NSM;;;;;N;;;;;
+064C;ARABIC DAMMATAN;Mn;28;NSM;;;;;N;;;;;
+064D;ARABIC KASRATAN;Mn;29;NSM;;;;;N;;;;;
+064E;ARABIC FATHA;Mn;30;NSM;;;;;N;ARABIC FATHAH;;;;
+064F;ARABIC DAMMA;Mn;31;NSM;;;;;N;ARABIC DAMMAH;;;;
+0650;ARABIC KASRA;Mn;32;NSM;;;;;N;ARABIC KASRAH;;;;
+0651;ARABIC SHADDA;Mn;33;NSM;;;;;N;ARABIC SHADDAH;;;;
+0652;ARABIC SUKUN;Mn;34;NSM;;;;;N;;;;;
+0653;ARABIC MADDAH ABOVE;Mn;230;NSM;;;;;N;;;;;
+0654;ARABIC HAMZA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0655;ARABIC HAMZA BELOW;Mn;220;NSM;;;;;N;;;;;
+0660;ARABIC-INDIC DIGIT ZERO;Nd;0;AN;;0;0;0;N;;;;;
+0661;ARABIC-INDIC DIGIT ONE;Nd;0;AN;;1;1;1;N;;;;;
+0662;ARABIC-INDIC DIGIT TWO;Nd;0;AN;;2;2;2;N;;;;;
+0663;ARABIC-INDIC DIGIT THREE;Nd;0;AN;;3;3;3;N;;;;;
+0664;ARABIC-INDIC DIGIT FOUR;Nd;0;AN;;4;4;4;N;;;;;
+0665;ARABIC-INDIC DIGIT FIVE;Nd;0;AN;;5;5;5;N;;;;;
+0666;ARABIC-INDIC DIGIT SIX;Nd;0;AN;;6;6;6;N;;;;;
+0667;ARABIC-INDIC DIGIT SEVEN;Nd;0;AN;;7;7;7;N;;;;;
+0668;ARABIC-INDIC DIGIT EIGHT;Nd;0;AN;;8;8;8;N;;;;;
+0669;ARABIC-INDIC DIGIT NINE;Nd;0;AN;;9;9;9;N;;;;;
+066A;ARABIC PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+066B;ARABIC DECIMAL SEPARATOR;Po;0;AN;;;;;N;;;;;
+066C;ARABIC THOUSANDS SEPARATOR;Po;0;AN;;;;;N;;;;;
+066D;ARABIC FIVE POINTED STAR;Po;0;AL;;;;;N;;;;;
+0670;ARABIC LETTER SUPERSCRIPT ALEF;Mn;35;NSM;;;;;N;ARABIC ALEF ABOVE;;;;
+0671;ARABIC LETTER ALEF WASLA;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAT WASL ON ALEF;;;;
+0672;ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH ON ALEF;;;;
+0673;ARABIC LETTER ALEF WITH WAVY HAMZA BELOW;Lo;0;AL;;;;;N;ARABIC LETTER WAVY HAMZAH UNDER ALEF;;;;
+0674;ARABIC LETTER HIGH HAMZA;Lo;0;AL;;;;;N;ARABIC LETTER HIGH HAMZAH;;;;
+0675;ARABIC LETTER HIGH HAMZA ALEF;Lo;0;AL;<compat> 0627 0674;;;;N;ARABIC LETTER HIGH HAMZAH ALEF;;;;
+0676;ARABIC LETTER HIGH HAMZA WAW;Lo;0;AL;<compat> 0648 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW;;;;
+0677;ARABIC LETTER U WITH HAMZA ABOVE;Lo;0;AL;<compat> 06C7 0674;;;;N;ARABIC LETTER HIGH HAMZAH WAW WITH DAMMAH;;;;
+0678;ARABIC LETTER HIGH HAMZA YEH;Lo;0;AL;<compat> 064A 0674;;;;N;ARABIC LETTER HIGH HAMZAH YA;;;;
+0679;ARABIC LETTER TTEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH SMALL TAH;;;;
+067A;ARABIC LETTER TTEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH TWO DOTS VERTICAL ABOVE;;;;
+067B;ARABIC LETTER BEEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH TWO DOTS VERTICAL BELOW;;;;
+067C;ARABIC LETTER TEH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH RING;;;;
+067D;ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS ABOVE DOWNWARD;;;;
+067E;ARABIC LETTER PEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH THREE DOTS BELOW;;;;
+067F;ARABIC LETTER TEHEH;Lo;0;AL;;;;;N;ARABIC LETTER TAA WITH FOUR DOTS ABOVE;;;;
+0680;ARABIC LETTER BEHEH;Lo;0;AL;;;;;N;ARABIC LETTER BAA WITH FOUR DOTS BELOW;;;;
+0681;ARABIC LETTER HAH WITH HAMZA ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAMZAH ON HAA;;;;
+0682;ARABIC LETTER HAH WITH TWO DOTS VERTICAL ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH TWO DOTS VERTICAL ABOVE;;;;
+0683;ARABIC LETTER NYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS;;;;
+0684;ARABIC LETTER DYEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE TWO DOTS VERTICAL;;;;
+0685;ARABIC LETTER HAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH THREE DOTS ABOVE;;;;
+0686;ARABIC LETTER TCHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE THREE DOTS DOWNWARD;;;;
+0687;ARABIC LETTER TCHEHEH;Lo;0;AL;;;;;N;ARABIC LETTER HAA WITH MIDDLE FOUR DOTS;;;;
+0688;ARABIC LETTER DDAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH SMALL TAH;;;;
+0689;ARABIC LETTER DAL WITH RING;Lo;0;AL;;;;;N;;;;;
+068A;ARABIC LETTER DAL WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+068B;ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH;Lo;0;AL;;;;;N;;;;;
+068C;ARABIC LETTER DAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS ABOVE;;;;
+068D;ARABIC LETTER DDAHAL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH TWO DOTS BELOW;;;;
+068E;ARABIC LETTER DUL;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE;;;;
+068F;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS;Lo;0;AL;;;;;N;ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARD;;;;
+0690;ARABIC LETTER DAL WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+0691;ARABIC LETTER RREH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL TAH;;;;
+0692;ARABIC LETTER REH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V;;;;
+0693;ARABIC LETTER REH WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH RING;;;;
+0694;ARABIC LETTER REH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW;;;;
+0695;ARABIC LETTER REH WITH SMALL V BELOW;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH SMALL V BELOW;;;;
+0696;ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH DOT BELOW AND DOT ABOVE;;;;
+0697;ARABIC LETTER REH WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH TWO DOTS ABOVE;;;;
+0698;ARABIC LETTER JEH;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH THREE DOTS ABOVE;;;;
+0699;ARABIC LETTER REH WITH FOUR DOTS ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER RA WITH FOUR DOTS ABOVE;;;;
+069A;ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+069B;ARABIC LETTER SEEN WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+069C;ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+069D;ARABIC LETTER SAD WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+069E;ARABIC LETTER SAD WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+069F;ARABIC LETTER TAH WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A0;ARABIC LETTER AIN WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A1;ARABIC LETTER DOTLESS FEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS FA;;;;
+06A2;ARABIC LETTER FEH WITH DOT MOVED BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT MOVED BELOW;;;;
+06A3;ARABIC LETTER FEH WITH DOT BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH DOT BELOW;;;;
+06A4;ARABIC LETTER VEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS ABOVE;;;;
+06A5;ARABIC LETTER FEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH THREE DOTS BELOW;;;;
+06A6;ARABIC LETTER PEHEH;Lo;0;AL;;;;;N;ARABIC LETTER FA WITH FOUR DOTS ABOVE;;;;
+06A7;ARABIC LETTER QAF WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06A8;ARABIC LETTER QAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06A9;ARABIC LETTER KEHEH;Lo;0;AL;;;;;N;ARABIC LETTER OPEN CAF;;;;
+06AA;ARABIC LETTER SWASH KAF;Lo;0;AL;;;;;N;ARABIC LETTER SWASH CAF;;;;
+06AB;ARABIC LETTER KAF WITH RING;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH RING;;;;
+06AC;ARABIC LETTER KAF WITH DOT ABOVE;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH DOT ABOVE;;;;
+06AD;ARABIC LETTER NG;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS ABOVE;;;;
+06AE;ARABIC LETTER KAF WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER CAF WITH THREE DOTS BELOW;;;;
+06AF;ARABIC LETTER GAF;Lo;0;AL;;;;;N;;*;;;
+06B0;ARABIC LETTER GAF WITH RING;Lo;0;AL;;;;;N;;;;;
+06B1;ARABIC LETTER NGOEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS ABOVE;;;;
+06B2;ARABIC LETTER GAF WITH TWO DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+06B3;ARABIC LETTER GUEH;Lo;0;AL;;;;;N;ARABIC LETTER GAF WITH TWO DOTS VERTICAL BELOW;;;;
+06B4;ARABIC LETTER GAF WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06B5;ARABIC LETTER LAM WITH SMALL V;Lo;0;AL;;;;;N;;;;;
+06B6;ARABIC LETTER LAM WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06B7;ARABIC LETTER LAM WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06B8;ARABIC LETTER LAM WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;;;;;
+06B9;ARABIC LETTER NOON WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06BA;ARABIC LETTER NOON GHUNNA;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON;;;;
+06BB;ARABIC LETTER RNOON;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS NOON WITH SMALL TAH;;;;
+06BC;ARABIC LETTER NOON WITH RING;Lo;0;AL;;;;;N;;;;;
+06BD;ARABIC LETTER NOON WITH THREE DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06BE;ARABIC LETTER HEH DOACHASHMEE;Lo;0;AL;;;;;N;ARABIC LETTER KNOTTED HA;;;;
+06BF;ARABIC LETTER TCHEH WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06C0;ARABIC LETTER HEH WITH YEH ABOVE;Lo;0;AL;06D5 0654;;;;N;ARABIC LETTER HAMZAH ON HA;;;;
+06C1;ARABIC LETTER HEH GOAL;Lo;0;AL;;;;;N;ARABIC LETTER HA GOAL;;;;
+06C2;ARABIC LETTER HEH GOAL WITH HAMZA ABOVE;Lo;0;AL;06C1 0654;;;;N;ARABIC LETTER HAMZAH ON HA GOAL;;;;
+06C3;ARABIC LETTER TEH MARBUTA GOAL;Lo;0;AL;;;;;N;ARABIC LETTER TAA MARBUTAH GOAL;;;;
+06C4;ARABIC LETTER WAW WITH RING;Lo;0;AL;;;;;N;;;;;
+06C5;ARABIC LETTER KIRGHIZ OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH BAR;;;;
+06C6;ARABIC LETTER OE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH SMALL V;;;;
+06C7;ARABIC LETTER U;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH DAMMAH;;;;
+06C8;ARABIC LETTER YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH ALEF ABOVE;;;;
+06C9;ARABIC LETTER KIRGHIZ YU;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH INVERTED SMALL V;;;;
+06CA;ARABIC LETTER WAW WITH TWO DOTS ABOVE;Lo;0;AL;;;;;N;;;;;
+06CB;ARABIC LETTER VE;Lo;0;AL;;;;;N;ARABIC LETTER WAW WITH THREE DOTS ABOVE;;;;
+06CC;ARABIC LETTER FARSI YEH;Lo;0;AL;;;;;N;ARABIC LETTER DOTLESS YA;;;;
+06CD;ARABIC LETTER YEH WITH TAIL;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TAIL;;;;
+06CE;ARABIC LETTER YEH WITH SMALL V;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH SMALL V;;;;
+06CF;ARABIC LETTER WAW WITH DOT ABOVE;Lo;0;AL;;;;;N;;;;;
+06D0;ARABIC LETTER E;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH TWO DOTS VERTICAL BELOW;*;;;
+06D1;ARABIC LETTER YEH WITH THREE DOTS BELOW;Lo;0;AL;;;;;N;ARABIC LETTER YA WITH THREE DOTS BELOW;;;;
+06D2;ARABIC LETTER YEH BARREE;Lo;0;AL;;;;;N;ARABIC LETTER YA BARREE;;;;
+06D3;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE;Lo;0;AL;06D2 0654;;;;N;ARABIC LETTER HAMZAH ON YA BARREE;;;;
+06D4;ARABIC FULL STOP;Po;0;AL;;;;;N;ARABIC PERIOD;;;;
+06D5;ARABIC LETTER AE;Lo;0;AL;;;;;N;;;;;
+06D6;ARABIC SMALL HIGH LIGATURE SAD WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+06D7;ARABIC SMALL HIGH LIGATURE QAF WITH LAM WITH ALEF MAKSURA;Mn;230;NSM;;;;;N;;;;;
+06D8;ARABIC SMALL HIGH MEEM INITIAL FORM;Mn;230;NSM;;;;;N;;;;;
+06D9;ARABIC SMALL HIGH LAM ALEF;Mn;230;NSM;;;;;N;;;;;
+06DA;ARABIC SMALL HIGH JEEM;Mn;230;NSM;;;;;N;;;;;
+06DB;ARABIC SMALL HIGH THREE DOTS;Mn;230;NSM;;;;;N;;;;;
+06DC;ARABIC SMALL HIGH SEEN;Mn;230;NSM;;;;;N;;;;;
+06DD;ARABIC END OF AYAH;Me;0;NSM;;;;;N;;;;;
+06DE;ARABIC START OF RUB EL HIZB;Me;0;NSM;;;;;N;;;;;
+06DF;ARABIC SMALL HIGH ROUNDED ZERO;Mn;230;NSM;;;;;N;;;;;
+06E0;ARABIC SMALL HIGH UPRIGHT RECTANGULAR ZERO;Mn;230;NSM;;;;;N;;;;;
+06E1;ARABIC SMALL HIGH DOTLESS HEAD OF KHAH;Mn;230;NSM;;;;;N;;;;;
+06E2;ARABIC SMALL HIGH MEEM ISOLATED FORM;Mn;230;NSM;;;;;N;;;;;
+06E3;ARABIC SMALL LOW SEEN;Mn;220;NSM;;;;;N;;;;;
+06E4;ARABIC SMALL HIGH MADDA;Mn;230;NSM;;;;;N;;;;;
+06E5;ARABIC SMALL WAW;Lm;0;AL;;;;;N;;;;;
+06E6;ARABIC SMALL YEH;Lm;0;AL;;;;;N;;;;;
+06E7;ARABIC SMALL HIGH YEH;Mn;230;NSM;;;;;N;;;;;
+06E8;ARABIC SMALL HIGH NOON;Mn;230;NSM;;;;;N;;;;;
+06E9;ARABIC PLACE OF SAJDAH;So;0;ON;;;;;N;;;;;
+06EA;ARABIC EMPTY CENTRE LOW STOP;Mn;220;NSM;;;;;N;;;;;
+06EB;ARABIC EMPTY CENTRE HIGH STOP;Mn;230;NSM;;;;;N;;;;;
+06EC;ARABIC ROUNDED HIGH STOP WITH FILLED CENTRE;Mn;230;NSM;;;;;N;;;;;
+06ED;ARABIC SMALL LOW MEEM;Mn;220;NSM;;;;;N;;;;;
+06F0;EXTENDED ARABIC-INDIC DIGIT ZERO;Nd;0;EN;;0;0;0;N;EASTERN ARABIC-INDIC DIGIT ZERO;;;;
+06F1;EXTENDED ARABIC-INDIC DIGIT ONE;Nd;0;EN;;1;1;1;N;EASTERN ARABIC-INDIC DIGIT ONE;;;;
+06F2;EXTENDED ARABIC-INDIC DIGIT TWO;Nd;0;EN;;2;2;2;N;EASTERN ARABIC-INDIC DIGIT TWO;;;;
+06F3;EXTENDED ARABIC-INDIC DIGIT THREE;Nd;0;EN;;3;3;3;N;EASTERN ARABIC-INDIC DIGIT THREE;;;;
+06F4;EXTENDED ARABIC-INDIC DIGIT FOUR;Nd;0;EN;;4;4;4;N;EASTERN ARABIC-INDIC DIGIT FOUR;;;;
+06F5;EXTENDED ARABIC-INDIC DIGIT FIVE;Nd;0;EN;;5;5;5;N;EASTERN ARABIC-INDIC DIGIT FIVE;;;;
+06F6;EXTENDED ARABIC-INDIC DIGIT SIX;Nd;0;EN;;6;6;6;N;EASTERN ARABIC-INDIC DIGIT SIX;;;;
+06F7;EXTENDED ARABIC-INDIC DIGIT SEVEN;Nd;0;EN;;7;7;7;N;EASTERN ARABIC-INDIC DIGIT SEVEN;;;;
+06F8;EXTENDED ARABIC-INDIC DIGIT EIGHT;Nd;0;EN;;8;8;8;N;EASTERN ARABIC-INDIC DIGIT EIGHT;;;;
+06F9;EXTENDED ARABIC-INDIC DIGIT NINE;Nd;0;EN;;9;9;9;N;EASTERN ARABIC-INDIC DIGIT NINE;;;;
+06FA;ARABIC LETTER SHEEN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FB;ARABIC LETTER DAD WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FC;ARABIC LETTER GHAIN WITH DOT BELOW;Lo;0;AL;;;;;N;;;;;
+06FD;ARABIC SIGN SINDHI AMPERSAND;So;0;AL;;;;;N;;;;;
+06FE;ARABIC SIGN SINDHI POSTPOSITION MEN;So;0;AL;;;;;N;;;;;
+0700;SYRIAC END OF PARAGRAPH;Po;0;AL;;;;;N;;;;;
+0701;SYRIAC SUPRALINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
+0702;SYRIAC SUBLINEAR FULL STOP;Po;0;AL;;;;;N;;;;;
+0703;SYRIAC SUPRALINEAR COLON;Po;0;AL;;;;;N;;;;;
+0704;SYRIAC SUBLINEAR COLON;Po;0;AL;;;;;N;;;;;
+0705;SYRIAC HORIZONTAL COLON;Po;0;AL;;;;;N;;;;;
+0706;SYRIAC COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
+0707;SYRIAC COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
+0708;SYRIAC SUPRALINEAR COLON SKEWED LEFT;Po;0;AL;;;;;N;;;;;
+0709;SYRIAC SUBLINEAR COLON SKEWED RIGHT;Po;0;AL;;;;;N;;;;;
+070A;SYRIAC CONTRACTION;Po;0;AL;;;;;N;;;;;
+070B;SYRIAC HARKLEAN OBELUS;Po;0;AL;;;;;N;;;;;
+070C;SYRIAC HARKLEAN METOBELUS;Po;0;AL;;;;;N;;;;;
+070D;SYRIAC HARKLEAN ASTERISCUS;Po;0;AL;;;;;N;;;;;
+070F;SYRIAC ABBREVIATION MARK;Cf;0;BN;;;;;N;;;;;
+0710;SYRIAC LETTER ALAPH;Lo;0;AL;;;;;N;;;;;
+0711;SYRIAC LETTER SUPERSCRIPT ALAPH;Mn;36;NSM;;;;;N;;;;;
+0712;SYRIAC LETTER BETH;Lo;0;AL;;;;;N;;;;;
+0713;SYRIAC LETTER GAMAL;Lo;0;AL;;;;;N;;;;;
+0714;SYRIAC LETTER GAMAL GARSHUNI;Lo;0;AL;;;;;N;;;;;
+0715;SYRIAC LETTER DALATH;Lo;0;AL;;;;;N;;;;;
+0716;SYRIAC LETTER DOTLESS DALATH RISH;Lo;0;AL;;;;;N;;;;;
+0717;SYRIAC LETTER HE;Lo;0;AL;;;;;N;;;;;
+0718;SYRIAC LETTER WAW;Lo;0;AL;;;;;N;;;;;
+0719;SYRIAC LETTER ZAIN;Lo;0;AL;;;;;N;;;;;
+071A;SYRIAC LETTER HETH;Lo;0;AL;;;;;N;;;;;
+071B;SYRIAC LETTER TETH;Lo;0;AL;;;;;N;;;;;
+071C;SYRIAC LETTER TETH GARSHUNI;Lo;0;AL;;;;;N;;;;;
+071D;SYRIAC LETTER YUDH;Lo;0;AL;;;;;N;;;;;
+071E;SYRIAC LETTER YUDH HE;Lo;0;AL;;;;;N;;;;;
+071F;SYRIAC LETTER KAPH;Lo;0;AL;;;;;N;;;;;
+0720;SYRIAC LETTER LAMADH;Lo;0;AL;;;;;N;;;;;
+0721;SYRIAC LETTER MIM;Lo;0;AL;;;;;N;;;;;
+0722;SYRIAC LETTER NUN;Lo;0;AL;;;;;N;;;;;
+0723;SYRIAC LETTER SEMKATH;Lo;0;AL;;;;;N;;;;;
+0724;SYRIAC LETTER FINAL SEMKATH;Lo;0;AL;;;;;N;;;;;
+0725;SYRIAC LETTER E;Lo;0;AL;;;;;N;;;;;
+0726;SYRIAC LETTER PE;Lo;0;AL;;;;;N;;;;;
+0727;SYRIAC LETTER REVERSED PE;Lo;0;AL;;;;;N;;;;;
+0728;SYRIAC LETTER SADHE;Lo;0;AL;;;;;N;;;;;
+0729;SYRIAC LETTER QAPH;Lo;0;AL;;;;;N;;;;;
+072A;SYRIAC LETTER RISH;Lo;0;AL;;;;;N;;;;;
+072B;SYRIAC LETTER SHIN;Lo;0;AL;;;;;N;;;;;
+072C;SYRIAC LETTER TAW;Lo;0;AL;;;;;N;;;;;
+0730;SYRIAC PTHAHA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0731;SYRIAC PTHAHA BELOW;Mn;220;NSM;;;;;N;;;;;
+0732;SYRIAC PTHAHA DOTTED;Mn;230;NSM;;;;;N;;;;;
+0733;SYRIAC ZQAPHA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0734;SYRIAC ZQAPHA BELOW;Mn;220;NSM;;;;;N;;;;;
+0735;SYRIAC ZQAPHA DOTTED;Mn;230;NSM;;;;;N;;;;;
+0736;SYRIAC RBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+0737;SYRIAC RBASA BELOW;Mn;220;NSM;;;;;N;;;;;
+0738;SYRIAC DOTTED ZLAMA HORIZONTAL;Mn;220;NSM;;;;;N;;;;;
+0739;SYRIAC DOTTED ZLAMA ANGULAR;Mn;220;NSM;;;;;N;;;;;
+073A;SYRIAC HBASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+073B;SYRIAC HBASA BELOW;Mn;220;NSM;;;;;N;;;;;
+073C;SYRIAC HBASA-ESASA DOTTED;Mn;220;NSM;;;;;N;;;;;
+073D;SYRIAC ESASA ABOVE;Mn;230;NSM;;;;;N;;;;;
+073E;SYRIAC ESASA BELOW;Mn;220;NSM;;;;;N;;;;;
+073F;SYRIAC RWAHA;Mn;230;NSM;;;;;N;;;;;
+0740;SYRIAC FEMININE DOT;Mn;230;NSM;;;;;N;;;;;
+0741;SYRIAC QUSHSHAYA;Mn;230;NSM;;;;;N;;;;;
+0742;SYRIAC RUKKAKHA;Mn;220;NSM;;;;;N;;;;;
+0743;SYRIAC TWO VERTICAL DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+0744;SYRIAC TWO VERTICAL DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+0745;SYRIAC THREE DOTS ABOVE;Mn;230;NSM;;;;;N;;;;;
+0746;SYRIAC THREE DOTS BELOW;Mn;220;NSM;;;;;N;;;;;
+0747;SYRIAC OBLIQUE LINE ABOVE;Mn;230;NSM;;;;;N;;;;;
+0748;SYRIAC OBLIQUE LINE BELOW;Mn;220;NSM;;;;;N;;;;;
+0749;SYRIAC MUSIC;Mn;230;NSM;;;;;N;;;;;
+074A;SYRIAC BARREKH;Mn;230;NSM;;;;;N;;;;;
+0780;THAANA LETTER HAA;Lo;0;AL;;;;;N;;;;;
+0781;THAANA LETTER SHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0782;THAANA LETTER NOONU;Lo;0;AL;;;;;N;;;;;
+0783;THAANA LETTER RAA;Lo;0;AL;;;;;N;;;;;
+0784;THAANA LETTER BAA;Lo;0;AL;;;;;N;;;;;
+0785;THAANA LETTER LHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0786;THAANA LETTER KAAFU;Lo;0;AL;;;;;N;;;;;
+0787;THAANA LETTER ALIFU;Lo;0;AL;;;;;N;;;;;
+0788;THAANA LETTER VAAVU;Lo;0;AL;;;;;N;;;;;
+0789;THAANA LETTER MEEMU;Lo;0;AL;;;;;N;;;;;
+078A;THAANA LETTER FAAFU;Lo;0;AL;;;;;N;;;;;
+078B;THAANA LETTER DHAALU;Lo;0;AL;;;;;N;;;;;
+078C;THAANA LETTER THAA;Lo;0;AL;;;;;N;;;;;
+078D;THAANA LETTER LAAMU;Lo;0;AL;;;;;N;;;;;
+078E;THAANA LETTER GAAFU;Lo;0;AL;;;;;N;;;;;
+078F;THAANA LETTER GNAVIYANI;Lo;0;AL;;;;;N;;;;;
+0790;THAANA LETTER SEENU;Lo;0;AL;;;;;N;;;;;
+0791;THAANA LETTER DAVIYANI;Lo;0;AL;;;;;N;;;;;
+0792;THAANA LETTER ZAVIYANI;Lo;0;AL;;;;;N;;;;;
+0793;THAANA LETTER TAVIYANI;Lo;0;AL;;;;;N;;;;;
+0794;THAANA LETTER YAA;Lo;0;AL;;;;;N;;;;;
+0795;THAANA LETTER PAVIYANI;Lo;0;AL;;;;;N;;;;;
+0796;THAANA LETTER JAVIYANI;Lo;0;AL;;;;;N;;;;;
+0797;THAANA LETTER CHAVIYANI;Lo;0;AL;;;;;N;;;;;
+0798;THAANA LETTER TTAA;Lo;0;AL;;;;;N;;;;;
+0799;THAANA LETTER HHAA;Lo;0;AL;;;;;N;;;;;
+079A;THAANA LETTER KHAA;Lo;0;AL;;;;;N;;;;;
+079B;THAANA LETTER THAALU;Lo;0;AL;;;;;N;;;;;
+079C;THAANA LETTER ZAA;Lo;0;AL;;;;;N;;;;;
+079D;THAANA LETTER SHEENU;Lo;0;AL;;;;;N;;;;;
+079E;THAANA LETTER SAADHU;Lo;0;AL;;;;;N;;;;;
+079F;THAANA LETTER DAADHU;Lo;0;AL;;;;;N;;;;;
+07A0;THAANA LETTER TO;Lo;0;AL;;;;;N;;;;;
+07A1;THAANA LETTER ZO;Lo;0;AL;;;;;N;;;;;
+07A2;THAANA LETTER AINU;Lo;0;AL;;;;;N;;;;;
+07A3;THAANA LETTER GHAINU;Lo;0;AL;;;;;N;;;;;
+07A4;THAANA LETTER QAAFU;Lo;0;AL;;;;;N;;;;;
+07A5;THAANA LETTER WAAVU;Lo;0;AL;;;;;N;;;;;
+07A6;THAANA ABAFILI;Mn;0;NSM;;;;;N;;;;;
+07A7;THAANA AABAAFILI;Mn;0;NSM;;;;;N;;;;;
+07A8;THAANA IBIFILI;Mn;0;NSM;;;;;N;;;;;
+07A9;THAANA EEBEEFILI;Mn;0;NSM;;;;;N;;;;;
+07AA;THAANA UBUFILI;Mn;0;NSM;;;;;N;;;;;
+07AB;THAANA OOBOOFILI;Mn;0;NSM;;;;;N;;;;;
+07AC;THAANA EBEFILI;Mn;0;NSM;;;;;N;;;;;
+07AD;THAANA EYBEYFILI;Mn;0;NSM;;;;;N;;;;;
+07AE;THAANA OBOFILI;Mn;0;NSM;;;;;N;;;;;
+07AF;THAANA OABOAFILI;Mn;0;NSM;;;;;N;;;;;
+07B0;THAANA SUKUN;Mn;0;NSM;;;;;N;;;;;
+0901;DEVANAGARI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0902;DEVANAGARI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0903;DEVANAGARI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0904;DEVANAGARI LETTER SHORT A;Lo;0;L;;;;;N;;;;;
+0905;DEVANAGARI LETTER A;Lo;0;L;;;;;N;;;;;
+0906;DEVANAGARI LETTER AA;Lo;0;L;;;;;N;;;;;
+0907;DEVANAGARI LETTER I;Lo;0;L;;;;;N;;;;;
+0908;DEVANAGARI LETTER II;Lo;0;L;;;;;N;;;;;
+0909;DEVANAGARI LETTER U;Lo;0;L;;;;;N;;;;;
+090A;DEVANAGARI LETTER UU;Lo;0;L;;;;;N;;;;;
+090B;DEVANAGARI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+090C;DEVANAGARI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+090D;DEVANAGARI LETTER CANDRA E;Lo;0;L;;;;;N;;;;;
+090E;DEVANAGARI LETTER SHORT E;Lo;0;L;;;;;N;;;;;
+090F;DEVANAGARI LETTER E;Lo;0;L;;;;;N;;;;;
+0910;DEVANAGARI LETTER AI;Lo;0;L;;;;;N;;;;;
+0911;DEVANAGARI LETTER CANDRA O;Lo;0;L;;;;;N;;;;;
+0912;DEVANAGARI LETTER SHORT O;Lo;0;L;;;;;N;;;;;
+0913;DEVANAGARI LETTER O;Lo;0;L;;;;;N;;;;;
+0914;DEVANAGARI LETTER AU;Lo;0;L;;;;;N;;;;;
+0915;DEVANAGARI LETTER KA;Lo;0;L;;;;;N;;;;;
+0916;DEVANAGARI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0917;DEVANAGARI LETTER GA;Lo;0;L;;;;;N;;;;;
+0918;DEVANAGARI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0919;DEVANAGARI LETTER NGA;Lo;0;L;;;;;N;;;;;
+091A;DEVANAGARI LETTER CA;Lo;0;L;;;;;N;;;;;
+091B;DEVANAGARI LETTER CHA;Lo;0;L;;;;;N;;;;;
+091C;DEVANAGARI LETTER JA;Lo;0;L;;;;;N;;;;;
+091D;DEVANAGARI LETTER JHA;Lo;0;L;;;;;N;;;;;
+091E;DEVANAGARI LETTER NYA;Lo;0;L;;;;;N;;;;;
+091F;DEVANAGARI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0920;DEVANAGARI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0921;DEVANAGARI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0922;DEVANAGARI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0923;DEVANAGARI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0924;DEVANAGARI LETTER TA;Lo;0;L;;;;;N;;;;;
+0925;DEVANAGARI LETTER THA;Lo;0;L;;;;;N;;;;;
+0926;DEVANAGARI LETTER DA;Lo;0;L;;;;;N;;;;;
+0927;DEVANAGARI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0928;DEVANAGARI LETTER NA;Lo;0;L;;;;;N;;;;;
+0929;DEVANAGARI LETTER NNNA;Lo;0;L;0928 093C;;;;N;;;;;
+092A;DEVANAGARI LETTER PA;Lo;0;L;;;;;N;;;;;
+092B;DEVANAGARI LETTER PHA;Lo;0;L;;;;;N;;;;;
+092C;DEVANAGARI LETTER BA;Lo;0;L;;;;;N;;;;;
+092D;DEVANAGARI LETTER BHA;Lo;0;L;;;;;N;;;;;
+092E;DEVANAGARI LETTER MA;Lo;0;L;;;;;N;;;;;
+092F;DEVANAGARI LETTER YA;Lo;0;L;;;;;N;;;;;
+0930;DEVANAGARI LETTER RA;Lo;0;L;;;;;N;;;;;
+0931;DEVANAGARI LETTER RRA;Lo;0;L;0930 093C;;;;N;;;;;
+0932;DEVANAGARI LETTER LA;Lo;0;L;;;;;N;;;;;
+0933;DEVANAGARI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0934;DEVANAGARI LETTER LLLA;Lo;0;L;0933 093C;;;;N;;;;;
+0935;DEVANAGARI LETTER VA;Lo;0;L;;;;;N;;;;;
+0936;DEVANAGARI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0937;DEVANAGARI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0938;DEVANAGARI LETTER SA;Lo;0;L;;;;;N;;;;;
+0939;DEVANAGARI LETTER HA;Lo;0;L;;;;;N;;;;;
+093C;DEVANAGARI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+093D;DEVANAGARI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+093E;DEVANAGARI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+093F;DEVANAGARI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0940;DEVANAGARI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0941;DEVANAGARI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0942;DEVANAGARI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0943;DEVANAGARI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0944;DEVANAGARI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0945;DEVANAGARI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
+0946;DEVANAGARI VOWEL SIGN SHORT E;Mn;0;NSM;;;;;N;;;;;
+0947;DEVANAGARI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0948;DEVANAGARI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0949;DEVANAGARI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+094A;DEVANAGARI VOWEL SIGN SHORT O;Mc;0;L;;;;;N;;;;;
+094B;DEVANAGARI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+094C;DEVANAGARI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+094D;DEVANAGARI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0950;DEVANAGARI OM;Lo;0;L;;;;;N;;;;;
+0951;DEVANAGARI STRESS SIGN UDATTA;Mn;230;NSM;;;;;N;;;;;
+0952;DEVANAGARI STRESS SIGN ANUDATTA;Mn;220;NSM;;;;;N;;;;;
+0953;DEVANAGARI GRAVE ACCENT;Mn;230;NSM;;;;;N;;;;;
+0954;DEVANAGARI ACUTE ACCENT;Mn;230;NSM;;;;;N;;;;;
+0958;DEVANAGARI LETTER QA;Lo;0;L;0915 093C;;;;N;;;;;
+0959;DEVANAGARI LETTER KHHA;Lo;0;L;0916 093C;;;;N;;;;;
+095A;DEVANAGARI LETTER GHHA;Lo;0;L;0917 093C;;;;N;;;;;
+095B;DEVANAGARI LETTER ZA;Lo;0;L;091C 093C;;;;N;;;;;
+095C;DEVANAGARI LETTER DDDHA;Lo;0;L;0921 093C;;;;N;;;;;
+095D;DEVANAGARI LETTER RHA;Lo;0;L;0922 093C;;;;N;;;;;
+095E;DEVANAGARI LETTER FA;Lo;0;L;092B 093C;;;;N;;;;;
+095F;DEVANAGARI LETTER YYA;Lo;0;L;092F 093C;;;;N;;;;;
+0960;DEVANAGARI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0961;DEVANAGARI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0962;DEVANAGARI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0963;DEVANAGARI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0964;DEVANAGARI DANDA;Po;0;L;;;;;N;;;;;
+0965;DEVANAGARI DOUBLE DANDA;Po;0;L;;;;;N;;;;;
+0966;DEVANAGARI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0967;DEVANAGARI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0968;DEVANAGARI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0969;DEVANAGARI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+096A;DEVANAGARI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+096B;DEVANAGARI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+096C;DEVANAGARI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+096D;DEVANAGARI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+096E;DEVANAGARI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+096F;DEVANAGARI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0970;DEVANAGARI ABBREVIATION SIGN;Po;0;L;;;;;N;;;;;
+097B;DEVANAGARI LETTER GGA;Lo;0;L;;;;;N;;;;;
+097C;DEVANAGARI LETTER JJA;Lo;0;L;;;;;N;;;;;
+097D;DEVANAGARI LETTER GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+097E;DEVANAGARI LETTER DDDA;Lo;0;L;;;;;N;;;;;
+097F;DEVANAGARI LETTER BBA;Lo;0;L;;;;;N;;;;;
+0981;BENGALI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0982;BENGALI SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0983;BENGALI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0985;BENGALI LETTER A;Lo;0;L;;;;;N;;;;;
+0986;BENGALI LETTER AA;Lo;0;L;;;;;N;;;;;
+0987;BENGALI LETTER I;Lo;0;L;;;;;N;;;;;
+0988;BENGALI LETTER II;Lo;0;L;;;;;N;;;;;
+0989;BENGALI LETTER U;Lo;0;L;;;;;N;;;;;
+098A;BENGALI LETTER UU;Lo;0;L;;;;;N;;;;;
+098B;BENGALI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+098C;BENGALI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+098F;BENGALI LETTER E;Lo;0;L;;;;;N;;;;;
+0990;BENGALI LETTER AI;Lo;0;L;;;;;N;;;;;
+0993;BENGALI LETTER O;Lo;0;L;;;;;N;;;;;
+0994;BENGALI LETTER AU;Lo;0;L;;;;;N;;;;;
+0995;BENGALI LETTER KA;Lo;0;L;;;;;N;;;;;
+0996;BENGALI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0997;BENGALI LETTER GA;Lo;0;L;;;;;N;;;;;
+0998;BENGALI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0999;BENGALI LETTER NGA;Lo;0;L;;;;;N;;;;;
+099A;BENGALI LETTER CA;Lo;0;L;;;;;N;;;;;
+099B;BENGALI LETTER CHA;Lo;0;L;;;;;N;;;;;
+099C;BENGALI LETTER JA;Lo;0;L;;;;;N;;;;;
+099D;BENGALI LETTER JHA;Lo;0;L;;;;;N;;;;;
+099E;BENGALI LETTER NYA;Lo;0;L;;;;;N;;;;;
+099F;BENGALI LETTER TTA;Lo;0;L;;;;;N;;;;;
+09A0;BENGALI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+09A1;BENGALI LETTER DDA;Lo;0;L;;;;;N;;;;;
+09A2;BENGALI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+09A3;BENGALI LETTER NNA;Lo;0;L;;;;;N;;;;;
+09A4;BENGALI LETTER TA;Lo;0;L;;;;;N;;;;;
+09A5;BENGALI LETTER THA;Lo;0;L;;;;;N;;;;;
+09A6;BENGALI LETTER DA;Lo;0;L;;;;;N;;;;;
+09A7;BENGALI LETTER DHA;Lo;0;L;;;;;N;;;;;
+09A8;BENGALI LETTER NA;Lo;0;L;;;;;N;;;;;
+09AA;BENGALI LETTER PA;Lo;0;L;;;;;N;;;;;
+09AB;BENGALI LETTER PHA;Lo;0;L;;;;;N;;;;;
+09AC;BENGALI LETTER BA;Lo;0;L;;;;;N;;;;;
+09AD;BENGALI LETTER BHA;Lo;0;L;;;;;N;;;;;
+09AE;BENGALI LETTER MA;Lo;0;L;;;;;N;;;;;
+09AF;BENGALI LETTER YA;Lo;0;L;;;;;N;;;;;
+09B0;BENGALI LETTER RA;Lo;0;L;;;;;N;;;;;
+09B2;BENGALI LETTER LA;Lo;0;L;;;;;N;;;;;
+09B6;BENGALI LETTER SHA;Lo;0;L;;;;;N;;;;;
+09B7;BENGALI LETTER SSA;Lo;0;L;;;;;N;;;;;
+09B8;BENGALI LETTER SA;Lo;0;L;;;;;N;;;;;
+09B9;BENGALI LETTER HA;Lo;0;L;;;;;N;;;;;
+09BC;BENGALI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+09BD;BENGALI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+09BE;BENGALI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+09BF;BENGALI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+09C0;BENGALI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+09C1;BENGALI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+09C2;BENGALI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+09C3;BENGALI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+09C4;BENGALI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+09C7;BENGALI VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+09C8;BENGALI VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+09CB;BENGALI VOWEL SIGN O;Mc;0;L;09C7 09BE;;;;N;;;;;
+09CC;BENGALI VOWEL SIGN AU;Mc;0;L;09C7 09D7;;;;N;;;;;
+09CD;BENGALI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+09CE;BENGALI LETTER KHANDA TA;Lo;0;L;;;;;N;;;;;
+09D7;BENGALI AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+09DC;BENGALI LETTER RRA;Lo;0;L;09A1 09BC;;;;N;;;;;
+09DD;BENGALI LETTER RHA;Lo;0;L;09A2 09BC;;;;N;;;;;
+09DF;BENGALI LETTER YYA;Lo;0;L;09AF 09BC;;;;N;;;;;
+09E0;BENGALI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+09E1;BENGALI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+09E2;BENGALI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+09E3;BENGALI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+09E6;BENGALI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+09E7;BENGALI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+09E8;BENGALI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+09E9;BENGALI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+09EA;BENGALI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+09EB;BENGALI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+09EC;BENGALI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+09ED;BENGALI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+09EE;BENGALI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+09EF;BENGALI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+09F0;BENGALI LETTER RA WITH MIDDLE DIAGONAL;Lo;0;L;;;;;N;;Assamese;;;
+09F1;BENGALI LETTER RA WITH LOWER DIAGONAL;Lo;0;L;;;;;N;BENGALI LETTER VA WITH LOWER DIAGONAL;Assamese;;;
+09F2;BENGALI RUPEE MARK;Sc;0;ET;;;;;N;;;;;
+09F3;BENGALI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+09F4;BENGALI CURRENCY NUMERATOR ONE;No;0;L;;;;1;N;;;;;
+09F5;BENGALI CURRENCY NUMERATOR TWO;No;0;L;;;;2;N;;;;;
+09F6;BENGALI CURRENCY NUMERATOR THREE;No;0;L;;;;3;N;;;;;
+09F7;BENGALI CURRENCY NUMERATOR FOUR;No;0;L;;;;4;N;;;;;
+09F8;BENGALI CURRENCY NUMERATOR ONE LESS THAN THE DENOMINATOR;No;0;L;;;;;N;;;;;
+09F9;BENGALI CURRENCY DENOMINATOR SIXTEEN;No;0;L;;;;16;N;;;;;
+09FA;BENGALI ISSHAR;So;0;L;;;;;N;;;;;
+0A01;GURMUKHI SIGN ADAK BINDI;Mn;0;NSM;;;;;N;;;;;
+0A02;GURMUKHI SIGN BINDI;Mn;0;NSM;;;;;N;;;;;
+0A03;GURMUKHI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0A05;GURMUKHI LETTER A;Lo;0;L;;;;;N;;;;;
+0A06;GURMUKHI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A07;GURMUKHI LETTER I;Lo;0;L;;;;;N;;;;;
+0A08;GURMUKHI LETTER II;Lo;0;L;;;;;N;;;;;
+0A09;GURMUKHI LETTER U;Lo;0;L;;;;;N;;;;;
+0A0A;GURMUKHI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A0F;GURMUKHI LETTER EE;Lo;0;L;;;;;N;;;;;
+0A10;GURMUKHI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A13;GURMUKHI LETTER OO;Lo;0;L;;;;;N;;;;;
+0A14;GURMUKHI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A15;GURMUKHI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A16;GURMUKHI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A17;GURMUKHI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A18;GURMUKHI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A19;GURMUKHI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A1A;GURMUKHI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A1B;GURMUKHI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A1C;GURMUKHI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A1D;GURMUKHI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A1E;GURMUKHI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A1F;GURMUKHI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0A20;GURMUKHI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0A21;GURMUKHI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0A22;GURMUKHI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0A23;GURMUKHI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0A24;GURMUKHI LETTER TA;Lo;0;L;;;;;N;;;;;
+0A25;GURMUKHI LETTER THA;Lo;0;L;;;;;N;;;;;
+0A26;GURMUKHI LETTER DA;Lo;0;L;;;;;N;;;;;
+0A27;GURMUKHI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0A28;GURMUKHI LETTER NA;Lo;0;L;;;;;N;;;;;
+0A2A;GURMUKHI LETTER PA;Lo;0;L;;;;;N;;;;;
+0A2B;GURMUKHI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0A2C;GURMUKHI LETTER BA;Lo;0;L;;;;;N;;;;;
+0A2D;GURMUKHI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0A2E;GURMUKHI LETTER MA;Lo;0;L;;;;;N;;;;;
+0A2F;GURMUKHI LETTER YA;Lo;0;L;;;;;N;;;;;
+0A30;GURMUKHI LETTER RA;Lo;0;L;;;;;N;;;;;
+0A32;GURMUKHI LETTER LA;Lo;0;L;;;;;N;;;;;
+0A33;GURMUKHI LETTER LLA;Lo;0;L;0A32 0A3C;;;;N;;;;;
+0A35;GURMUKHI LETTER VA;Lo;0;L;;;;;N;;;;;
+0A36;GURMUKHI LETTER SHA;Lo;0;L;0A38 0A3C;;;;N;;;;;
+0A38;GURMUKHI LETTER SA;Lo;0;L;;;;;N;;;;;
+0A39;GURMUKHI LETTER HA;Lo;0;L;;;;;N;;;;;
+0A3C;GURMUKHI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0A3E;GURMUKHI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0A3F;GURMUKHI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0A40;GURMUKHI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0A41;GURMUKHI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0A42;GURMUKHI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0A47;GURMUKHI VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+0A48;GURMUKHI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0A4B;GURMUKHI VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
+0A4C;GURMUKHI VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0A4D;GURMUKHI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0A59;GURMUKHI LETTER KHHA;Lo;0;L;0A16 0A3C;;;;N;;;;;
+0A5A;GURMUKHI LETTER GHHA;Lo;0;L;0A17 0A3C;;;;N;;;;;
+0A5B;GURMUKHI LETTER ZA;Lo;0;L;0A1C 0A3C;;;;N;;;;;
+0A5C;GURMUKHI LETTER RRA;Lo;0;L;;;;;N;;;;;
+0A5E;GURMUKHI LETTER FA;Lo;0;L;0A2B 0A3C;;;;N;;;;;
+0A66;GURMUKHI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0A67;GURMUKHI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0A68;GURMUKHI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0A69;GURMUKHI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0A6A;GURMUKHI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0A6B;GURMUKHI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0A6C;GURMUKHI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0A6D;GURMUKHI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0A6E;GURMUKHI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0A6F;GURMUKHI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0A70;GURMUKHI TIPPI;Mn;0;NSM;;;;;N;;;;;
+0A71;GURMUKHI ADDAK;Mn;0;NSM;;;;;N;;;;;
+0A72;GURMUKHI IRI;Lo;0;L;;;;;N;;;;;
+0A73;GURMUKHI URA;Lo;0;L;;;;;N;;;;;
+0A74;GURMUKHI EK ONKAR;Lo;0;L;;;;;N;;;;;
+0A81;GUJARATI SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0A82;GUJARATI SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0A83;GUJARATI SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0A85;GUJARATI LETTER A;Lo;0;L;;;;;N;;;;;
+0A86;GUJARATI LETTER AA;Lo;0;L;;;;;N;;;;;
+0A87;GUJARATI LETTER I;Lo;0;L;;;;;N;;;;;
+0A88;GUJARATI LETTER II;Lo;0;L;;;;;N;;;;;
+0A89;GUJARATI LETTER U;Lo;0;L;;;;;N;;;;;
+0A8A;GUJARATI LETTER UU;Lo;0;L;;;;;N;;;;;
+0A8B;GUJARATI LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0A8C;GUJARATI LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0A8D;GUJARATI VOWEL CANDRA E;Lo;0;L;;;;;N;;;;;
+0A8F;GUJARATI LETTER E;Lo;0;L;;;;;N;;;;;
+0A90;GUJARATI LETTER AI;Lo;0;L;;;;;N;;;;;
+0A91;GUJARATI VOWEL CANDRA O;Lo;0;L;;;;;N;;;;;
+0A93;GUJARATI LETTER O;Lo;0;L;;;;;N;;;;;
+0A94;GUJARATI LETTER AU;Lo;0;L;;;;;N;;;;;
+0A95;GUJARATI LETTER KA;Lo;0;L;;;;;N;;;;;
+0A96;GUJARATI LETTER KHA;Lo;0;L;;;;;N;;;;;
+0A97;GUJARATI LETTER GA;Lo;0;L;;;;;N;;;;;
+0A98;GUJARATI LETTER GHA;Lo;0;L;;;;;N;;;;;
+0A99;GUJARATI LETTER NGA;Lo;0;L;;;;;N;;;;;
+0A9A;GUJARATI LETTER CA;Lo;0;L;;;;;N;;;;;
+0A9B;GUJARATI LETTER CHA;Lo;0;L;;;;;N;;;;;
+0A9C;GUJARATI LETTER JA;Lo;0;L;;;;;N;;;;;
+0A9D;GUJARATI LETTER JHA;Lo;0;L;;;;;N;;;;;
+0A9E;GUJARATI LETTER NYA;Lo;0;L;;;;;N;;;;;
+0A9F;GUJARATI LETTER TTA;Lo;0;L;;;;;N;;;;;
+0AA0;GUJARATI LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0AA1;GUJARATI LETTER DDA;Lo;0;L;;;;;N;;;;;
+0AA2;GUJARATI LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0AA3;GUJARATI LETTER NNA;Lo;0;L;;;;;N;;;;;
+0AA4;GUJARATI LETTER TA;Lo;0;L;;;;;N;;;;;
+0AA5;GUJARATI LETTER THA;Lo;0;L;;;;;N;;;;;
+0AA6;GUJARATI LETTER DA;Lo;0;L;;;;;N;;;;;
+0AA7;GUJARATI LETTER DHA;Lo;0;L;;;;;N;;;;;
+0AA8;GUJARATI LETTER NA;Lo;0;L;;;;;N;;;;;
+0AAA;GUJARATI LETTER PA;Lo;0;L;;;;;N;;;;;
+0AAB;GUJARATI LETTER PHA;Lo;0;L;;;;;N;;;;;
+0AAC;GUJARATI LETTER BA;Lo;0;L;;;;;N;;;;;
+0AAD;GUJARATI LETTER BHA;Lo;0;L;;;;;N;;;;;
+0AAE;GUJARATI LETTER MA;Lo;0;L;;;;;N;;;;;
+0AAF;GUJARATI LETTER YA;Lo;0;L;;;;;N;;;;;
+0AB0;GUJARATI LETTER RA;Lo;0;L;;;;;N;;;;;
+0AB2;GUJARATI LETTER LA;Lo;0;L;;;;;N;;;;;
+0AB3;GUJARATI LETTER LLA;Lo;0;L;;;;;N;;;;;
+0AB5;GUJARATI LETTER VA;Lo;0;L;;;;;N;;;;;
+0AB6;GUJARATI LETTER SHA;Lo;0;L;;;;;N;;;;;
+0AB7;GUJARATI LETTER SSA;Lo;0;L;;;;;N;;;;;
+0AB8;GUJARATI LETTER SA;Lo;0;L;;;;;N;;;;;
+0AB9;GUJARATI LETTER HA;Lo;0;L;;;;;N;;;;;
+0ABC;GUJARATI SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0ABD;GUJARATI SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0ABE;GUJARATI VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0ABF;GUJARATI VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0AC0;GUJARATI VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0AC1;GUJARATI VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0AC2;GUJARATI VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0AC3;GUJARATI VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0AC4;GUJARATI VOWEL SIGN VOCALIC RR;Mn;0;NSM;;;;;N;;;;;
+0AC5;GUJARATI VOWEL SIGN CANDRA E;Mn;0;NSM;;;;;N;;;;;
+0AC7;GUJARATI VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0AC8;GUJARATI VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+0AC9;GUJARATI VOWEL SIGN CANDRA O;Mc;0;L;;;;;N;;;;;
+0ACB;GUJARATI VOWEL SIGN O;Mc;0;L;;;;;N;;;;;
+0ACC;GUJARATI VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+0ACD;GUJARATI SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0AD0;GUJARATI OM;Lo;0;L;;;;;N;;;;;
+0AE0;GUJARATI LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0AE1;GUJARATI LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0AE2;GUJARATI VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0AE3;GUJARATI VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0AE6;GUJARATI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0AE7;GUJARATI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0AE8;GUJARATI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0AE9;GUJARATI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0AEA;GUJARATI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0AEB;GUJARATI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0AEC;GUJARATI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0AED;GUJARATI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0AEE;GUJARATI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0AEF;GUJARATI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0AF1;GUJARATI RUPEE SIGN;Sc;0;ET;;;;;N;;;;;
+0B01;ORIYA SIGN CANDRABINDU;Mn;0;NSM;;;;;N;;;;;
+0B02;ORIYA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0B03;ORIYA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0B05;ORIYA LETTER A;Lo;0;L;;;;;N;;;;;
+0B06;ORIYA LETTER AA;Lo;0;L;;;;;N;;;;;
+0B07;ORIYA LETTER I;Lo;0;L;;;;;N;;;;;
+0B08;ORIYA LETTER II;Lo;0;L;;;;;N;;;;;
+0B09;ORIYA LETTER U;Lo;0;L;;;;;N;;;;;
+0B0A;ORIYA LETTER UU;Lo;0;L;;;;;N;;;;;
+0B0B;ORIYA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0B0C;ORIYA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0B0F;ORIYA LETTER E;Lo;0;L;;;;;N;;;;;
+0B10;ORIYA LETTER AI;Lo;0;L;;;;;N;;;;;
+0B13;ORIYA LETTER O;Lo;0;L;;;;;N;;;;;
+0B14;ORIYA LETTER AU;Lo;0;L;;;;;N;;;;;
+0B15;ORIYA LETTER KA;Lo;0;L;;;;;N;;;;;
+0B16;ORIYA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0B17;ORIYA LETTER GA;Lo;0;L;;;;;N;;;;;
+0B18;ORIYA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0B19;ORIYA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B1A;ORIYA LETTER CA;Lo;0;L;;;;;N;;;;;
+0B1B;ORIYA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0B1C;ORIYA LETTER JA;Lo;0;L;;;;;N;;;;;
+0B1D;ORIYA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0B1E;ORIYA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B1F;ORIYA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0B20;ORIYA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0B21;ORIYA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0B22;ORIYA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0B23;ORIYA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0B24;ORIYA LETTER TA;Lo;0;L;;;;;N;;;;;
+0B25;ORIYA LETTER THA;Lo;0;L;;;;;N;;;;;
+0B26;ORIYA LETTER DA;Lo;0;L;;;;;N;;;;;
+0B27;ORIYA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0B28;ORIYA LETTER NA;Lo;0;L;;;;;N;;;;;
+0B2A;ORIYA LETTER PA;Lo;0;L;;;;;N;;;;;
+0B2B;ORIYA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0B2C;ORIYA LETTER BA;Lo;0;L;;;;;N;;;;;
+0B2D;ORIYA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0B2E;ORIYA LETTER MA;Lo;0;L;;;;;N;;;;;
+0B2F;ORIYA LETTER YA;Lo;0;L;;;;;N;;;;;
+0B30;ORIYA LETTER RA;Lo;0;L;;;;;N;;;;;
+0B32;ORIYA LETTER LA;Lo;0;L;;;;;N;;;;;
+0B33;ORIYA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0B35;ORIYA LETTER VA;Lo;0;L;;;;;N;;;;;
+0B36;ORIYA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0B37;ORIYA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0B38;ORIYA LETTER SA;Lo;0;L;;;;;N;;;;;
+0B39;ORIYA LETTER HA;Lo;0;L;;;;;N;;;;;
+0B3C;ORIYA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0B3D;ORIYA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0B3E;ORIYA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0B3F;ORIYA VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0B40;ORIYA VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0B41;ORIYA VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0B42;ORIYA VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0B43;ORIYA VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0B47;ORIYA VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0B48;ORIYA VOWEL SIGN AI;Mc;0;L;0B47 0B56;;;;N;;;;;
+0B4B;ORIYA VOWEL SIGN O;Mc;0;L;0B47 0B3E;;;;N;;;;;
+0B4C;ORIYA VOWEL SIGN AU;Mc;0;L;0B47 0B57;;;;N;;;;;
+0B4D;ORIYA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0B56;ORIYA AI LENGTH MARK;Mn;0;NSM;;;;;N;;;;;
+0B57;ORIYA AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0B5C;ORIYA LETTER RRA;Lo;0;L;0B21 0B3C;;;;N;;;;;
+0B5D;ORIYA LETTER RHA;Lo;0;L;0B22 0B3C;;;;N;;;;;
+0B5F;ORIYA LETTER YYA;Lo;0;L;;;;;N;;;;;
+0B60;ORIYA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0B61;ORIYA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0B66;ORIYA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0B67;ORIYA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0B68;ORIYA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0B69;ORIYA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0B6A;ORIYA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0B6B;ORIYA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0B6C;ORIYA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0B6D;ORIYA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0B6E;ORIYA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0B6F;ORIYA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0B70;ORIYA ISSHAR;So;0;L;;;;;N;;;;;
+0B71;ORIYA LETTER WA;Lo;0;L;;;;;N;;;;;
+0B82;TAMIL SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+0B83;TAMIL SIGN VISARGA;Lo;0;L;;;;;N;;;;;
+0B85;TAMIL LETTER A;Lo;0;L;;;;;N;;;;;
+0B86;TAMIL LETTER AA;Lo;0;L;;;;;N;;;;;
+0B87;TAMIL LETTER I;Lo;0;L;;;;;N;;;;;
+0B88;TAMIL LETTER II;Lo;0;L;;;;;N;;;;;
+0B89;TAMIL LETTER U;Lo;0;L;;;;;N;;;;;
+0B8A;TAMIL LETTER UU;Lo;0;L;;;;;N;;;;;
+0B8E;TAMIL LETTER E;Lo;0;L;;;;;N;;;;;
+0B8F;TAMIL LETTER EE;Lo;0;L;;;;;N;;;;;
+0B90;TAMIL LETTER AI;Lo;0;L;;;;;N;;;;;
+0B92;TAMIL LETTER O;Lo;0;L;;;;;N;;;;;
+0B93;TAMIL LETTER OO;Lo;0;L;;;;;N;;;;;
+0B94;TAMIL LETTER AU;Lo;0;L;0B92 0BD7;;;;N;;;;;
+0B95;TAMIL LETTER KA;Lo;0;L;;;;;N;;;;;
+0B99;TAMIL LETTER NGA;Lo;0;L;;;;;N;;;;;
+0B9A;TAMIL LETTER CA;Lo;0;L;;;;;N;;;;;
+0B9C;TAMIL LETTER JA;Lo;0;L;;;;;N;;;;;
+0B9E;TAMIL LETTER NYA;Lo;0;L;;;;;N;;;;;
+0B9F;TAMIL LETTER TTA;Lo;0;L;;;;;N;;;;;
+0BA3;TAMIL LETTER NNA;Lo;0;L;;;;;N;;;;;
+0BA4;TAMIL LETTER TA;Lo;0;L;;;;;N;;;;;
+0BA8;TAMIL LETTER NA;Lo;0;L;;;;;N;;;;;
+0BA9;TAMIL LETTER NNNA;Lo;0;L;;;;;N;;;;;
+0BAA;TAMIL LETTER PA;Lo;0;L;;;;;N;;;;;
+0BAE;TAMIL LETTER MA;Lo;0;L;;;;;N;;;;;
+0BAF;TAMIL LETTER YA;Lo;0;L;;;;;N;;;;;
+0BB0;TAMIL LETTER RA;Lo;0;L;;;;;N;;;;;
+0BB1;TAMIL LETTER RRA;Lo;0;L;;;;;N;;;;;
+0BB2;TAMIL LETTER LA;Lo;0;L;;;;;N;;;;;
+0BB3;TAMIL LETTER LLA;Lo;0;L;;;;;N;;;;;
+0BB4;TAMIL LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0BB5;TAMIL LETTER VA;Lo;0;L;;;;;N;;;;;
+0BB6;TAMIL LETTER SHA;Lo;0;L;;;;;N;;;;;
+0BB7;TAMIL LETTER SSA;Lo;0;L;;;;;N;;;;;
+0BB8;TAMIL LETTER SA;Lo;0;L;;;;;N;;;;;
+0BB9;TAMIL LETTER HA;Lo;0;L;;;;;N;;;;;
+0BBE;TAMIL VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0BBF;TAMIL VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0BC0;TAMIL VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0BC1;TAMIL VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0BC2;TAMIL VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0BC6;TAMIL VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0BC7;TAMIL VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0BC8;TAMIL VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0BCA;TAMIL VOWEL SIGN O;Mc;0;L;0BC6 0BBE;;;;N;;;;;
+0BCB;TAMIL VOWEL SIGN OO;Mc;0;L;0BC7 0BBE;;;;N;;;;;
+0BCC;TAMIL VOWEL SIGN AU;Mc;0;L;0BC6 0BD7;;;;N;;;;;
+0BCD;TAMIL SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0BD7;TAMIL AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0BE6;TAMIL DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0BE7;TAMIL DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0BE8;TAMIL DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0BE9;TAMIL DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0BEA;TAMIL DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0BEB;TAMIL DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0BEC;TAMIL DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0BED;TAMIL DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0BEE;TAMIL DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0BEF;TAMIL DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0BF0;TAMIL NUMBER TEN;No;0;L;;;;10;N;;;;;
+0BF1;TAMIL NUMBER ONE HUNDRED;No;0;L;;;;100;N;;;;;
+0BF2;TAMIL NUMBER ONE THOUSAND;No;0;L;;;;1000;N;;;;;
+0BF3;TAMIL DAY SIGN;So;0;ON;;;;;N;;Naal;;;
+0BF4;TAMIL MONTH SIGN;So;0;ON;;;;;N;;Maatham;;;
+0BF5;TAMIL YEAR SIGN;So;0;ON;;;;;N;;Varudam;;;
+0BF6;TAMIL DEBIT SIGN;So;0;ON;;;;;N;;Patru;;;
+0BF7;TAMIL CREDIT SIGN;So;0;ON;;;;;N;;Varavu;;;
+0BF8;TAMIL AS ABOVE SIGN;So;0;ON;;;;;N;;Merpadi;;;
+0BF9;TAMIL RUPEE SIGN;Sc;0;ET;;;;;N;;Rupai;;;
+0BFA;TAMIL NUMBER SIGN;So;0;ON;;;;;N;;Enn;;;
+0C01;TELUGU SIGN CANDRABINDU;Mc;0;L;;;;;N;;;;;
+0C02;TELUGU SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C03;TELUGU SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C05;TELUGU LETTER A;Lo;0;L;;;;;N;;;;;
+0C06;TELUGU LETTER AA;Lo;0;L;;;;;N;;;;;
+0C07;TELUGU LETTER I;Lo;0;L;;;;;N;;;;;
+0C08;TELUGU LETTER II;Lo;0;L;;;;;N;;;;;
+0C09;TELUGU LETTER U;Lo;0;L;;;;;N;;;;;
+0C0A;TELUGU LETTER UU;Lo;0;L;;;;;N;;;;;
+0C0B;TELUGU LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C0C;TELUGU LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C0E;TELUGU LETTER E;Lo;0;L;;;;;N;;;;;
+0C0F;TELUGU LETTER EE;Lo;0;L;;;;;N;;;;;
+0C10;TELUGU LETTER AI;Lo;0;L;;;;;N;;;;;
+0C12;TELUGU LETTER O;Lo;0;L;;;;;N;;;;;
+0C13;TELUGU LETTER OO;Lo;0;L;;;;;N;;;;;
+0C14;TELUGU LETTER AU;Lo;0;L;;;;;N;;;;;
+0C15;TELUGU LETTER KA;Lo;0;L;;;;;N;;;;;
+0C16;TELUGU LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C17;TELUGU LETTER GA;Lo;0;L;;;;;N;;;;;
+0C18;TELUGU LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C19;TELUGU LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C1A;TELUGU LETTER CA;Lo;0;L;;;;;N;;;;;
+0C1B;TELUGU LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C1C;TELUGU LETTER JA;Lo;0;L;;;;;N;;;;;
+0C1D;TELUGU LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C1E;TELUGU LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C1F;TELUGU LETTER TTA;Lo;0;L;;;;;N;;;;;
+0C20;TELUGU LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0C21;TELUGU LETTER DDA;Lo;0;L;;;;;N;;;;;
+0C22;TELUGU LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0C23;TELUGU LETTER NNA;Lo;0;L;;;;;N;;;;;
+0C24;TELUGU LETTER TA;Lo;0;L;;;;;N;;;;;
+0C25;TELUGU LETTER THA;Lo;0;L;;;;;N;;;;;
+0C26;TELUGU LETTER DA;Lo;0;L;;;;;N;;;;;
+0C27;TELUGU LETTER DHA;Lo;0;L;;;;;N;;;;;
+0C28;TELUGU LETTER NA;Lo;0;L;;;;;N;;;;;
+0C2A;TELUGU LETTER PA;Lo;0;L;;;;;N;;;;;
+0C2B;TELUGU LETTER PHA;Lo;0;L;;;;;N;;;;;
+0C2C;TELUGU LETTER BA;Lo;0;L;;;;;N;;;;;
+0C2D;TELUGU LETTER BHA;Lo;0;L;;;;;N;;;;;
+0C2E;TELUGU LETTER MA;Lo;0;L;;;;;N;;;;;
+0C2F;TELUGU LETTER YA;Lo;0;L;;;;;N;;;;;
+0C30;TELUGU LETTER RA;Lo;0;L;;;;;N;;;;;
+0C31;TELUGU LETTER RRA;Lo;0;L;;;;;N;;;;;
+0C32;TELUGU LETTER LA;Lo;0;L;;;;;N;;;;;
+0C33;TELUGU LETTER LLA;Lo;0;L;;;;;N;;;;;
+0C35;TELUGU LETTER VA;Lo;0;L;;;;;N;;;;;
+0C36;TELUGU LETTER SHA;Lo;0;L;;;;;N;;;;;
+0C37;TELUGU LETTER SSA;Lo;0;L;;;;;N;;;;;
+0C38;TELUGU LETTER SA;Lo;0;L;;;;;N;;;;;
+0C39;TELUGU LETTER HA;Lo;0;L;;;;;N;;;;;
+0C3E;TELUGU VOWEL SIGN AA;Mn;0;NSM;;;;;N;;;;;
+0C3F;TELUGU VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0C40;TELUGU VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0C41;TELUGU VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0C42;TELUGU VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0C43;TELUGU VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0C44;TELUGU VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0C46;TELUGU VOWEL SIGN E;Mn;0;NSM;;;;;N;;;;;
+0C47;TELUGU VOWEL SIGN EE;Mn;0;NSM;;;;;N;;;;;
+0C48;TELUGU VOWEL SIGN AI;Mn;0;NSM;0C46 0C56;;;;N;;;;;
+0C4A;TELUGU VOWEL SIGN O;Mn;0;NSM;;;;;N;;;;;
+0C4B;TELUGU VOWEL SIGN OO;Mn;0;NSM;;;;;N;;;;;
+0C4C;TELUGU VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0C4D;TELUGU SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0C55;TELUGU LENGTH MARK;Mn;84;NSM;;;;;N;;;;;
+0C56;TELUGU AI LENGTH MARK;Mn;91;NSM;;;;;N;;;;;
+0C60;TELUGU LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0C61;TELUGU LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0C66;TELUGU DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0C67;TELUGU DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0C68;TELUGU DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0C69;TELUGU DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0C6A;TELUGU DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0C6B;TELUGU DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0C6C;TELUGU DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0C6D;TELUGU DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0C6E;TELUGU DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0C6F;TELUGU DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0C82;KANNADA SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0C83;KANNADA SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0C85;KANNADA LETTER A;Lo;0;L;;;;;N;;;;;
+0C86;KANNADA LETTER AA;Lo;0;L;;;;;N;;;;;
+0C87;KANNADA LETTER I;Lo;0;L;;;;;N;;;;;
+0C88;KANNADA LETTER II;Lo;0;L;;;;;N;;;;;
+0C89;KANNADA LETTER U;Lo;0;L;;;;;N;;;;;
+0C8A;KANNADA LETTER UU;Lo;0;L;;;;;N;;;;;
+0C8B;KANNADA LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0C8C;KANNADA LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0C8E;KANNADA LETTER E;Lo;0;L;;;;;N;;;;;
+0C8F;KANNADA LETTER EE;Lo;0;L;;;;;N;;;;;
+0C90;KANNADA LETTER AI;Lo;0;L;;;;;N;;;;;
+0C92;KANNADA LETTER O;Lo;0;L;;;;;N;;;;;
+0C93;KANNADA LETTER OO;Lo;0;L;;;;;N;;;;;
+0C94;KANNADA LETTER AU;Lo;0;L;;;;;N;;;;;
+0C95;KANNADA LETTER KA;Lo;0;L;;;;;N;;;;;
+0C96;KANNADA LETTER KHA;Lo;0;L;;;;;N;;;;;
+0C97;KANNADA LETTER GA;Lo;0;L;;;;;N;;;;;
+0C98;KANNADA LETTER GHA;Lo;0;L;;;;;N;;;;;
+0C99;KANNADA LETTER NGA;Lo;0;L;;;;;N;;;;;
+0C9A;KANNADA LETTER CA;Lo;0;L;;;;;N;;;;;
+0C9B;KANNADA LETTER CHA;Lo;0;L;;;;;N;;;;;
+0C9C;KANNADA LETTER JA;Lo;0;L;;;;;N;;;;;
+0C9D;KANNADA LETTER JHA;Lo;0;L;;;;;N;;;;;
+0C9E;KANNADA LETTER NYA;Lo;0;L;;;;;N;;;;;
+0C9F;KANNADA LETTER TTA;Lo;0;L;;;;;N;;;;;
+0CA0;KANNADA LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0CA1;KANNADA LETTER DDA;Lo;0;L;;;;;N;;;;;
+0CA2;KANNADA LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0CA3;KANNADA LETTER NNA;Lo;0;L;;;;;N;;;;;
+0CA4;KANNADA LETTER TA;Lo;0;L;;;;;N;;;;;
+0CA5;KANNADA LETTER THA;Lo;0;L;;;;;N;;;;;
+0CA6;KANNADA LETTER DA;Lo;0;L;;;;;N;;;;;
+0CA7;KANNADA LETTER DHA;Lo;0;L;;;;;N;;;;;
+0CA8;KANNADA LETTER NA;Lo;0;L;;;;;N;;;;;
+0CAA;KANNADA LETTER PA;Lo;0;L;;;;;N;;;;;
+0CAB;KANNADA LETTER PHA;Lo;0;L;;;;;N;;;;;
+0CAC;KANNADA LETTER BA;Lo;0;L;;;;;N;;;;;
+0CAD;KANNADA LETTER BHA;Lo;0;L;;;;;N;;;;;
+0CAE;KANNADA LETTER MA;Lo;0;L;;;;;N;;;;;
+0CAF;KANNADA LETTER YA;Lo;0;L;;;;;N;;;;;
+0CB0;KANNADA LETTER RA;Lo;0;L;;;;;N;;;;;
+0CB1;KANNADA LETTER RRA;Lo;0;L;;;;;N;;;;;
+0CB2;KANNADA LETTER LA;Lo;0;L;;;;;N;;;;;
+0CB3;KANNADA LETTER LLA;Lo;0;L;;;;;N;;;;;
+0CB5;KANNADA LETTER VA;Lo;0;L;;;;;N;;;;;
+0CB6;KANNADA LETTER SHA;Lo;0;L;;;;;N;;;;;
+0CB7;KANNADA LETTER SSA;Lo;0;L;;;;;N;;;;;
+0CB8;KANNADA LETTER SA;Lo;0;L;;;;;N;;;;;
+0CB9;KANNADA LETTER HA;Lo;0;L;;;;;N;;;;;
+0CBC;KANNADA SIGN NUKTA;Mn;7;NSM;;;;;N;;;;;
+0CBD;KANNADA SIGN AVAGRAHA;Lo;0;L;;;;;N;;;;;
+0CBE;KANNADA VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0CBF;KANNADA VOWEL SIGN I;Mn;0;L;;;;;N;;;;;
+0CC0;KANNADA VOWEL SIGN II;Mc;0;L;0CBF 0CD5;;;;N;;;;;
+0CC1;KANNADA VOWEL SIGN U;Mc;0;L;;;;;N;;;;;
+0CC2;KANNADA VOWEL SIGN UU;Mc;0;L;;;;;N;;;;;
+0CC3;KANNADA VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+0CC4;KANNADA VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+0CC6;KANNADA VOWEL SIGN E;Mn;0;L;;;;;N;;;;;
+0CC7;KANNADA VOWEL SIGN EE;Mc;0;L;0CC6 0CD5;;;;N;;;;;
+0CC8;KANNADA VOWEL SIGN AI;Mc;0;L;0CC6 0CD6;;;;N;;;;;
+0CCA;KANNADA VOWEL SIGN O;Mc;0;L;0CC6 0CC2;;;;N;;;;;
+0CCB;KANNADA VOWEL SIGN OO;Mc;0;L;0CCA 0CD5;;;;N;;;;;
+0CCC;KANNADA VOWEL SIGN AU;Mn;0;NSM;;;;;N;;;;;
+0CCD;KANNADA SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0CD5;KANNADA LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CD6;KANNADA AI LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0CDE;KANNADA LETTER FA;Lo;0;L;;;;;N;;;;;
+0CE0;KANNADA LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0CE1;KANNADA LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0CE2;KANNADA VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+0CE3;KANNADA VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+0CE6;KANNADA DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0CE7;KANNADA DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0CE8;KANNADA DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0CE9;KANNADA DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0CEA;KANNADA DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0CEB;KANNADA DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0CEC;KANNADA DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0CED;KANNADA DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0CEE;KANNADA DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0CEF;KANNADA DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0CF1;KANNADA SIGN JIHVAMULIYA;So;0;ON;;;;;N;;;;;
+0CF2;KANNADA SIGN UPADHMANIYA;So;0;ON;;;;;N;;;;;
+0D02;MALAYALAM SIGN ANUSVARA;Mc;0;L;;;;;N;;;;;
+0D03;MALAYALAM SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+0D05;MALAYALAM LETTER A;Lo;0;L;;;;;N;;;;;
+0D06;MALAYALAM LETTER AA;Lo;0;L;;;;;N;;;;;
+0D07;MALAYALAM LETTER I;Lo;0;L;;;;;N;;;;;
+0D08;MALAYALAM LETTER II;Lo;0;L;;;;;N;;;;;
+0D09;MALAYALAM LETTER U;Lo;0;L;;;;;N;;;;;
+0D0A;MALAYALAM LETTER UU;Lo;0;L;;;;;N;;;;;
+0D0B;MALAYALAM LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+0D0C;MALAYALAM LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+0D0E;MALAYALAM LETTER E;Lo;0;L;;;;;N;;;;;
+0D0F;MALAYALAM LETTER EE;Lo;0;L;;;;;N;;;;;
+0D10;MALAYALAM LETTER AI;Lo;0;L;;;;;N;;;;;
+0D12;MALAYALAM LETTER O;Lo;0;L;;;;;N;;;;;
+0D13;MALAYALAM LETTER OO;Lo;0;L;;;;;N;;;;;
+0D14;MALAYALAM LETTER AU;Lo;0;L;;;;;N;;;;;
+0D15;MALAYALAM LETTER KA;Lo;0;L;;;;;N;;;;;
+0D16;MALAYALAM LETTER KHA;Lo;0;L;;;;;N;;;;;
+0D17;MALAYALAM LETTER GA;Lo;0;L;;;;;N;;;;;
+0D18;MALAYALAM LETTER GHA;Lo;0;L;;;;;N;;;;;
+0D19;MALAYALAM LETTER NGA;Lo;0;L;;;;;N;;;;;
+0D1A;MALAYALAM LETTER CA;Lo;0;L;;;;;N;;;;;
+0D1B;MALAYALAM LETTER CHA;Lo;0;L;;;;;N;;;;;
+0D1C;MALAYALAM LETTER JA;Lo;0;L;;;;;N;;;;;
+0D1D;MALAYALAM LETTER JHA;Lo;0;L;;;;;N;;;;;
+0D1E;MALAYALAM LETTER NYA;Lo;0;L;;;;;N;;;;;
+0D1F;MALAYALAM LETTER TTA;Lo;0;L;;;;;N;;;;;
+0D20;MALAYALAM LETTER TTHA;Lo;0;L;;;;;N;;;;;
+0D21;MALAYALAM LETTER DDA;Lo;0;L;;;;;N;;;;;
+0D22;MALAYALAM LETTER DDHA;Lo;0;L;;;;;N;;;;;
+0D23;MALAYALAM LETTER NNA;Lo;0;L;;;;;N;;;;;
+0D24;MALAYALAM LETTER TA;Lo;0;L;;;;;N;;;;;
+0D25;MALAYALAM LETTER THA;Lo;0;L;;;;;N;;;;;
+0D26;MALAYALAM LETTER DA;Lo;0;L;;;;;N;;;;;
+0D27;MALAYALAM LETTER DHA;Lo;0;L;;;;;N;;;;;
+0D28;MALAYALAM LETTER NA;Lo;0;L;;;;;N;;;;;
+0D2A;MALAYALAM LETTER PA;Lo;0;L;;;;;N;;;;;
+0D2B;MALAYALAM LETTER PHA;Lo;0;L;;;;;N;;;;;
+0D2C;MALAYALAM LETTER BA;Lo;0;L;;;;;N;;;;;
+0D2D;MALAYALAM LETTER BHA;Lo;0;L;;;;;N;;;;;
+0D2E;MALAYALAM LETTER MA;Lo;0;L;;;;;N;;;;;
+0D2F;MALAYALAM LETTER YA;Lo;0;L;;;;;N;;;;;
+0D30;MALAYALAM LETTER RA;Lo;0;L;;;;;N;;;;;
+0D31;MALAYALAM LETTER RRA;Lo;0;L;;;;;N;;;;;
+0D32;MALAYALAM LETTER LA;Lo;0;L;;;;;N;;;;;
+0D33;MALAYALAM LETTER LLA;Lo;0;L;;;;;N;;;;;
+0D34;MALAYALAM LETTER LLLA;Lo;0;L;;;;;N;;;;;
+0D35;MALAYALAM LETTER VA;Lo;0;L;;;;;N;;;;;
+0D36;MALAYALAM LETTER SHA;Lo;0;L;;;;;N;;;;;
+0D37;MALAYALAM LETTER SSA;Lo;0;L;;;;;N;;;;;
+0D38;MALAYALAM LETTER SA;Lo;0;L;;;;;N;;;;;
+0D39;MALAYALAM LETTER HA;Lo;0;L;;;;;N;;;;;
+0D3E;MALAYALAM VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+0D3F;MALAYALAM VOWEL SIGN I;Mc;0;L;;;;;N;;;;;
+0D40;MALAYALAM VOWEL SIGN II;Mc;0;L;;;;;N;;;;;
+0D41;MALAYALAM VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+0D42;MALAYALAM VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+0D43;MALAYALAM VOWEL SIGN VOCALIC R;Mn;0;NSM;;;;;N;;;;;
+0D46;MALAYALAM VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+0D47;MALAYALAM VOWEL SIGN EE;Mc;0;L;;;;;N;;;;;
+0D48;MALAYALAM VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+0D4A;MALAYALAM VOWEL SIGN O;Mc;0;L;0D46 0D3E;;;;N;;;;;
+0D4B;MALAYALAM VOWEL SIGN OO;Mc;0;L;0D47 0D3E;;;;N;;;;;
+0D4C;MALAYALAM VOWEL SIGN AU;Mc;0;L;0D46 0D57;;;;N;;;;;
+0D4D;MALAYALAM SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+0D57;MALAYALAM AU LENGTH MARK;Mc;0;L;;;;;N;;;;;
+0D60;MALAYALAM LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+0D61;MALAYALAM LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+0D66;MALAYALAM DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0D67;MALAYALAM DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0D68;MALAYALAM DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0D69;MALAYALAM DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0D6A;MALAYALAM DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0D6B;MALAYALAM DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0D6C;MALAYALAM DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0D6D;MALAYALAM DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0D6E;MALAYALAM DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0D6F;MALAYALAM DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0D82;SINHALA SIGN ANUSVARAYA;Mc;0;L;;;;;N;;;;;
+0D83;SINHALA SIGN VISARGAYA;Mc;0;L;;;;;N;;;;;
+0D85;SINHALA LETTER AYANNA;Lo;0;L;;;;;N;;;;;
+0D86;SINHALA LETTER AAYANNA;Lo;0;L;;;;;N;;;;;
+0D87;SINHALA LETTER AEYANNA;Lo;0;L;;;;;N;;;;;
+0D88;SINHALA LETTER AEEYANNA;Lo;0;L;;;;;N;;;;;
+0D89;SINHALA LETTER IYANNA;Lo;0;L;;;;;N;;;;;
+0D8A;SINHALA LETTER IIYANNA;Lo;0;L;;;;;N;;;;;
+0D8B;SINHALA LETTER UYANNA;Lo;0;L;;;;;N;;;;;
+0D8C;SINHALA LETTER UUYANNA;Lo;0;L;;;;;N;;;;;
+0D8D;SINHALA LETTER IRUYANNA;Lo;0;L;;;;;N;;;;;
+0D8E;SINHALA LETTER IRUUYANNA;Lo;0;L;;;;;N;;;;;
+0D8F;SINHALA LETTER ILUYANNA;Lo;0;L;;;;;N;;;;;
+0D90;SINHALA LETTER ILUUYANNA;Lo;0;L;;;;;N;;;;;
+0D91;SINHALA LETTER EYANNA;Lo;0;L;;;;;N;;;;;
+0D92;SINHALA LETTER EEYANNA;Lo;0;L;;;;;N;;;;;
+0D93;SINHALA LETTER AIYANNA;Lo;0;L;;;;;N;;;;;
+0D94;SINHALA LETTER OYANNA;Lo;0;L;;;;;N;;;;;
+0D95;SINHALA LETTER OOYANNA;Lo;0;L;;;;;N;;;;;
+0D96;SINHALA LETTER AUYANNA;Lo;0;L;;;;;N;;;;;
+0D9A;SINHALA LETTER ALPAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
+0D9B;SINHALA LETTER MAHAAPRAANA KAYANNA;Lo;0;L;;;;;N;;;;;
+0D9C;SINHALA LETTER ALPAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
+0D9D;SINHALA LETTER MAHAAPRAANA GAYANNA;Lo;0;L;;;;;N;;;;;
+0D9E;SINHALA LETTER KANTAJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
+0D9F;SINHALA LETTER SANYAKA GAYANNA;Lo;0;L;;;;;N;;;;;
+0DA0;SINHALA LETTER ALPAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
+0DA1;SINHALA LETTER MAHAAPRAANA CAYANNA;Lo;0;L;;;;;N;;;;;
+0DA2;SINHALA LETTER ALPAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA3;SINHALA LETTER MAHAAPRAANA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA4;SINHALA LETTER TAALUJA NAASIKYAYA;Lo;0;L;;;;;N;;;;;
+0DA5;SINHALA LETTER TAALUJA SANYOOGA NAAKSIKYAYA;Lo;0;L;;;;;N;;;;;
+0DA6;SINHALA LETTER SANYAKA JAYANNA;Lo;0;L;;;;;N;;;;;
+0DA7;SINHALA LETTER ALPAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
+0DA8;SINHALA LETTER MAHAAPRAANA TTAYANNA;Lo;0;L;;;;;N;;;;;
+0DA9;SINHALA LETTER ALPAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAA;SINHALA LETTER MAHAAPRAANA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAB;SINHALA LETTER MUURDHAJA NAYANNA;Lo;0;L;;;;;N;;;;;
+0DAC;SINHALA LETTER SANYAKA DDAYANNA;Lo;0;L;;;;;N;;;;;
+0DAD;SINHALA LETTER ALPAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
+0DAE;SINHALA LETTER MAHAAPRAANA TAYANNA;Lo;0;L;;;;;N;;;;;
+0DAF;SINHALA LETTER ALPAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB0;SINHALA LETTER MAHAAPRAANA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB1;SINHALA LETTER DANTAJA NAYANNA;Lo;0;L;;;;;N;;;;;
+0DB3;SINHALA LETTER SANYAKA DAYANNA;Lo;0;L;;;;;N;;;;;
+0DB4;SINHALA LETTER ALPAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
+0DB5;SINHALA LETTER MAHAAPRAANA PAYANNA;Lo;0;L;;;;;N;;;;;
+0DB6;SINHALA LETTER ALPAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DB7;SINHALA LETTER MAHAAPRAANA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DB8;SINHALA LETTER MAYANNA;Lo;0;L;;;;;N;;;;;
+0DB9;SINHALA LETTER AMBA BAYANNA;Lo;0;L;;;;;N;;;;;
+0DBA;SINHALA LETTER YAYANNA;Lo;0;L;;;;;N;;;;;
+0DBB;SINHALA LETTER RAYANNA;Lo;0;L;;;;;N;;;;;
+0DBD;SINHALA LETTER DANTAJA LAYANNA;Lo;0;L;;;;;N;;;;;
+0DC0;SINHALA LETTER VAYANNA;Lo;0;L;;;;;N;;;;;
+0DC1;SINHALA LETTER TAALUJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC2;SINHALA LETTER MUURDHAJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC3;SINHALA LETTER DANTAJA SAYANNA;Lo;0;L;;;;;N;;;;;
+0DC4;SINHALA LETTER HAYANNA;Lo;0;L;;;;;N;;;;;
+0DC5;SINHALA LETTER MUURDHAJA LAYANNA;Lo;0;L;;;;;N;;;;;
+0DC6;SINHALA LETTER FAYANNA;Lo;0;L;;;;;N;;;;;
+0DCA;SINHALA SIGN AL-LAKUNA;Mn;9;NSM;;;;;N;;;;;
+0DCF;SINHALA VOWEL SIGN AELA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD0;SINHALA VOWEL SIGN KETTI AEDA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD1;SINHALA VOWEL SIGN DIGA AEDA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD2;SINHALA VOWEL SIGN KETTI IS-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD3;SINHALA VOWEL SIGN DIGA IS-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD4;SINHALA VOWEL SIGN KETTI PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD6;SINHALA VOWEL SIGN DIGA PAA-PILLA;Mn;0;NSM;;;;;N;;;;;
+0DD8;SINHALA VOWEL SIGN GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
+0DD9;SINHALA VOWEL SIGN KOMBUVA;Mc;0;L;;;;;N;;;;;
+0DDA;SINHALA VOWEL SIGN DIGA KOMBUVA;Mc;0;L;0DD9 0DCA;;;;N;;;;;
+0DDB;SINHALA VOWEL SIGN KOMBU DEKA;Mc;0;L;;;;;N;;;;;
+0DDC;SINHALA VOWEL SIGN KOMBUVA HAA AELA-PILLA;Mc;0;L;0DD9 0DCF;;;;N;;;;;
+0DDD;SINHALA VOWEL SIGN KOMBUVA HAA DIGA AELA-PILLA;Mc;0;L;0DDC 0DCA;;;;N;;;;;
+0DDE;SINHALA VOWEL SIGN KOMBUVA HAA GAYANUKITTA;Mc;0;L;0DD9 0DDF;;;;N;;;;;
+0DDF;SINHALA VOWEL SIGN GAYANUKITTA;Mc;0;L;;;;;N;;;;;
+0DF2;SINHALA VOWEL SIGN DIGA GAETTA-PILLA;Mc;0;L;;;;;N;;;;;
+0DF3;SINHALA VOWEL SIGN DIGA GAYANUKITTA;Mc;0;L;;;;;N;;;;;
+0DF4;SINHALA PUNCTUATION KUNDDALIYA;Po;0;L;;;;;N;;;;;
+0E01;THAI CHARACTER KO KAI;Lo;0;L;;;;;N;THAI LETTER KO KAI;;;;
+0E02;THAI CHARACTER KHO KHAI;Lo;0;L;;;;;N;THAI LETTER KHO KHAI;;;;
+0E03;THAI CHARACTER KHO KHUAT;Lo;0;L;;;;;N;THAI LETTER KHO KHUAT;;;;
+0E04;THAI CHARACTER KHO KHWAI;Lo;0;L;;;;;N;THAI LETTER KHO KHWAI;;;;
+0E05;THAI CHARACTER KHO KHON;Lo;0;L;;;;;N;THAI LETTER KHO KHON;;;;
+0E06;THAI CHARACTER KHO RAKHANG;Lo;0;L;;;;;N;THAI LETTER KHO RAKHANG;;;;
+0E07;THAI CHARACTER NGO NGU;Lo;0;L;;;;;N;THAI LETTER NGO NGU;;;;
+0E08;THAI CHARACTER CHO CHAN;Lo;0;L;;;;;N;THAI LETTER CHO CHAN;;;;
+0E09;THAI CHARACTER CHO CHING;Lo;0;L;;;;;N;THAI LETTER CHO CHING;;;;
+0E0A;THAI CHARACTER CHO CHANG;Lo;0;L;;;;;N;THAI LETTER CHO CHANG;;;;
+0E0B;THAI CHARACTER SO SO;Lo;0;L;;;;;N;THAI LETTER SO SO;;;;
+0E0C;THAI CHARACTER CHO CHOE;Lo;0;L;;;;;N;THAI LETTER CHO CHOE;;;;
+0E0D;THAI CHARACTER YO YING;Lo;0;L;;;;;N;THAI LETTER YO YING;;;;
+0E0E;THAI CHARACTER DO CHADA;Lo;0;L;;;;;N;THAI LETTER DO CHADA;;;;
+0E0F;THAI CHARACTER TO PATAK;Lo;0;L;;;;;N;THAI LETTER TO PATAK;;;;
+0E10;THAI CHARACTER THO THAN;Lo;0;L;;;;;N;THAI LETTER THO THAN;;;;
+0E11;THAI CHARACTER THO NANGMONTHO;Lo;0;L;;;;;N;THAI LETTER THO NANGMONTHO;;;;
+0E12;THAI CHARACTER THO PHUTHAO;Lo;0;L;;;;;N;THAI LETTER THO PHUTHAO;;;;
+0E13;THAI CHARACTER NO NEN;Lo;0;L;;;;;N;THAI LETTER NO NEN;;;;
+0E14;THAI CHARACTER DO DEK;Lo;0;L;;;;;N;THAI LETTER DO DEK;;;;
+0E15;THAI CHARACTER TO TAO;Lo;0;L;;;;;N;THAI LETTER TO TAO;;;;
+0E16;THAI CHARACTER THO THUNG;Lo;0;L;;;;;N;THAI LETTER THO THUNG;;;;
+0E17;THAI CHARACTER THO THAHAN;Lo;0;L;;;;;N;THAI LETTER THO THAHAN;;;;
+0E18;THAI CHARACTER THO THONG;Lo;0;L;;;;;N;THAI LETTER THO THONG;;;;
+0E19;THAI CHARACTER NO NU;Lo;0;L;;;;;N;THAI LETTER NO NU;;;;
+0E1A;THAI CHARACTER BO BAIMAI;Lo;0;L;;;;;N;THAI LETTER BO BAIMAI;;;;
+0E1B;THAI CHARACTER PO PLA;Lo;0;L;;;;;N;THAI LETTER PO PLA;;;;
+0E1C;THAI CHARACTER PHO PHUNG;Lo;0;L;;;;;N;THAI LETTER PHO PHUNG;;;;
+0E1D;THAI CHARACTER FO FA;Lo;0;L;;;;;N;THAI LETTER FO FA;;;;
+0E1E;THAI CHARACTER PHO PHAN;Lo;0;L;;;;;N;THAI LETTER PHO PHAN;;;;
+0E1F;THAI CHARACTER FO FAN;Lo;0;L;;;;;N;THAI LETTER FO FAN;;;;
+0E20;THAI CHARACTER PHO SAMPHAO;Lo;0;L;;;;;N;THAI LETTER PHO SAMPHAO;;;;
+0E21;THAI CHARACTER MO MA;Lo;0;L;;;;;N;THAI LETTER MO MA;;;;
+0E22;THAI CHARACTER YO YAK;Lo;0;L;;;;;N;THAI LETTER YO YAK;;;;
+0E23;THAI CHARACTER RO RUA;Lo;0;L;;;;;N;THAI LETTER RO RUA;;;;
+0E24;THAI CHARACTER RU;Lo;0;L;;;;;N;THAI LETTER RU;;;;
+0E25;THAI CHARACTER LO LING;Lo;0;L;;;;;N;THAI LETTER LO LING;;;;
+0E26;THAI CHARACTER LU;Lo;0;L;;;;;N;THAI LETTER LU;;;;
+0E27;THAI CHARACTER WO WAEN;Lo;0;L;;;;;N;THAI LETTER WO WAEN;;;;
+0E28;THAI CHARACTER SO SALA;Lo;0;L;;;;;N;THAI LETTER SO SALA;;;;
+0E29;THAI CHARACTER SO RUSI;Lo;0;L;;;;;N;THAI LETTER SO RUSI;;;;
+0E2A;THAI CHARACTER SO SUA;Lo;0;L;;;;;N;THAI LETTER SO SUA;;;;
+0E2B;THAI CHARACTER HO HIP;Lo;0;L;;;;;N;THAI LETTER HO HIP;;;;
+0E2C;THAI CHARACTER LO CHULA;Lo;0;L;;;;;N;THAI LETTER LO CHULA;;;;
+0E2D;THAI CHARACTER O ANG;Lo;0;L;;;;;N;THAI LETTER O ANG;;;;
+0E2E;THAI CHARACTER HO NOKHUK;Lo;0;L;;;;;N;THAI LETTER HO NOK HUK;;;;
+0E2F;THAI CHARACTER PAIYANNOI;Lo;0;L;;;;;N;THAI PAI YAN NOI;paiyan noi;;;
+0E30;THAI CHARACTER SARA A;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA A;;;;
+0E31;THAI CHARACTER MAI HAN-AKAT;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI HAN-AKAT;;;;
+0E32;THAI CHARACTER SARA AA;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AA;;;;
+0E33;THAI CHARACTER SARA AM;Lo;0;L;<compat> 0E4D 0E32;;;;N;THAI VOWEL SIGN SARA AM;;;;
+0E34;THAI CHARACTER SARA I;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA I;;;;
+0E35;THAI CHARACTER SARA II;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA II;;;;
+0E36;THAI CHARACTER SARA UE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UE;;;;
+0E37;THAI CHARACTER SARA UEE;Mn;0;NSM;;;;;N;THAI VOWEL SIGN SARA UEE;sara uue;;;
+0E38;THAI CHARACTER SARA U;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA U;;;;
+0E39;THAI CHARACTER SARA UU;Mn;103;NSM;;;;;N;THAI VOWEL SIGN SARA UU;;;;
+0E3A;THAI CHARACTER PHINTHU;Mn;9;NSM;;;;;N;THAI VOWEL SIGN PHINTHU;;;;
+0E3F;THAI CURRENCY SYMBOL BAHT;Sc;0;ET;;;;;N;THAI BAHT SIGN;;;;
+0E40;THAI CHARACTER SARA E;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA E;;;;
+0E41;THAI CHARACTER SARA AE;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA AE;;;;
+0E42;THAI CHARACTER SARA O;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA O;;;;
+0E43;THAI CHARACTER SARA AI MAIMUAN;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MUAN;sara ai mai muan;;;
+0E44;THAI CHARACTER SARA AI MAIMALAI;Lo;0;L;;;;;N;THAI VOWEL SIGN SARA MAI MALAI;sara ai mai malai;;;
+0E45;THAI CHARACTER LAKKHANGYAO;Lo;0;L;;;;;N;THAI LAK KHANG YAO;lakkhang yao;;;
+0E46;THAI CHARACTER MAIYAMOK;Lm;0;L;;;;;N;THAI MAI YAMOK;mai yamok;;;
+0E47;THAI CHARACTER MAITAIKHU;Mn;0;NSM;;;;;N;THAI VOWEL SIGN MAI TAI KHU;mai taikhu;;;
+0E48;THAI CHARACTER MAI EK;Mn;107;NSM;;;;;N;THAI TONE MAI EK;;;;
+0E49;THAI CHARACTER MAI THO;Mn;107;NSM;;;;;N;THAI TONE MAI THO;;;;
+0E4A;THAI CHARACTER MAI TRI;Mn;107;NSM;;;;;N;THAI TONE MAI TRI;;;;
+0E4B;THAI CHARACTER MAI CHATTAWA;Mn;107;NSM;;;;;N;THAI TONE MAI CHATTAWA;;;;
+0E4C;THAI CHARACTER THANTHAKHAT;Mn;0;NSM;;;;;N;THAI THANTHAKHAT;;;;
+0E4D;THAI CHARACTER NIKHAHIT;Mn;0;NSM;;;;;N;THAI NIKKHAHIT;nikkhahit;;;
+0E4E;THAI CHARACTER YAMAKKAN;Mn;0;NSM;;;;;N;THAI YAMAKKAN;;;;
+0E4F;THAI CHARACTER FONGMAN;Po;0;L;;;;;N;THAI FONGMAN;;;;
+0E50;THAI DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0E51;THAI DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0E52;THAI DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0E53;THAI DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0E54;THAI DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0E55;THAI DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0E56;THAI DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0E57;THAI DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0E58;THAI DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0E59;THAI DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0E5A;THAI CHARACTER ANGKHANKHU;Po;0;L;;;;;N;THAI ANGKHANKHU;;;;
+0E5B;THAI CHARACTER KHOMUT;Po;0;L;;;;;N;THAI KHOMUT;;;;
+0E81;LAO LETTER KO;Lo;0;L;;;;;N;;;;;
+0E82;LAO LETTER KHO SUNG;Lo;0;L;;;;;N;;;;;
+0E84;LAO LETTER KHO TAM;Lo;0;L;;;;;N;;;;;
+0E87;LAO LETTER NGO;Lo;0;L;;;;;N;;;;;
+0E88;LAO LETTER CO;Lo;0;L;;;;;N;;;;;
+0E8A;LAO LETTER SO TAM;Lo;0;L;;;;;N;;;;;
+0E8D;LAO LETTER NYO;Lo;0;L;;;;;N;;;;;
+0E94;LAO LETTER DO;Lo;0;L;;;;;N;;;;;
+0E95;LAO LETTER TO;Lo;0;L;;;;;N;;;;;
+0E96;LAO LETTER THO SUNG;Lo;0;L;;;;;N;;;;;
+0E97;LAO LETTER THO TAM;Lo;0;L;;;;;N;;;;;
+0E99;LAO LETTER NO;Lo;0;L;;;;;N;;;;;
+0E9A;LAO LETTER BO;Lo;0;L;;;;;N;;;;;
+0E9B;LAO LETTER PO;Lo;0;L;;;;;N;;;;;
+0E9C;LAO LETTER PHO SUNG;Lo;0;L;;;;;N;;;;;
+0E9D;LAO LETTER FO TAM;Lo;0;L;;;;;N;;;;;
+0E9E;LAO LETTER PHO TAM;Lo;0;L;;;;;N;;;;;
+0E9F;LAO LETTER FO SUNG;Lo;0;L;;;;;N;;;;;
+0EA1;LAO LETTER MO;Lo;0;L;;;;;N;;;;;
+0EA2;LAO LETTER YO;Lo;0;L;;;;;N;;;;;
+0EA3;LAO LETTER LO LING;Lo;0;L;;;;;N;;;;;
+0EA5;LAO LETTER LO LOOT;Lo;0;L;;;;;N;;;;;
+0EA7;LAO LETTER WO;Lo;0;L;;;;;N;;;;;
+0EAA;LAO LETTER SO SUNG;Lo;0;L;;;;;N;;;;;
+0EAB;LAO LETTER HO SUNG;Lo;0;L;;;;;N;;;;;
+0EAD;LAO LETTER O;Lo;0;L;;;;;N;;;;;
+0EAE;LAO LETTER HO TAM;Lo;0;L;;;;;N;;;;;
+0EAF;LAO ELLIPSIS;Lo;0;L;;;;;N;;;;;
+0EB0;LAO VOWEL SIGN A;Lo;0;L;;;;;N;;;;;
+0EB1;LAO VOWEL SIGN MAI KAN;Mn;0;NSM;;;;;N;;;;;
+0EB2;LAO VOWEL SIGN AA;Lo;0;L;;;;;N;;;;;
+0EB3;LAO VOWEL SIGN AM;Lo;0;L;<compat> 0ECD 0EB2;;;;N;;;;;
+0EB4;LAO VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+0EB5;LAO VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+0EB6;LAO VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
+0EB7;LAO VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
+0EB8;LAO VOWEL SIGN U;Mn;118;NSM;;;;;N;;;;;
+0EB9;LAO VOWEL SIGN UU;Mn;118;NSM;;;;;N;;;;;
+0EBB;LAO VOWEL SIGN MAI KON;Mn;0;NSM;;;;;N;;;;;
+0EBC;LAO SEMIVOWEL SIGN LO;Mn;0;NSM;;;;;N;;;;;
+0EBD;LAO SEMIVOWEL SIGN NYO;Lo;0;L;;;;;N;;;;;
+0EC0;LAO VOWEL SIGN E;Lo;0;L;;;;;N;;;;;
+0EC1;LAO VOWEL SIGN EI;Lo;0;L;;;;;N;;;;;
+0EC2;LAO VOWEL SIGN O;Lo;0;L;;;;;N;;;;;
+0EC3;LAO VOWEL SIGN AY;Lo;0;L;;;;;N;;;;;
+0EC4;LAO VOWEL SIGN AI;Lo;0;L;;;;;N;;;;;
+0EC6;LAO KO LA;Lm;0;L;;;;;N;;;;;
+0EC8;LAO TONE MAI EK;Mn;122;NSM;;;;;N;;;;;
+0EC9;LAO TONE MAI THO;Mn;122;NSM;;;;;N;;;;;
+0ECA;LAO TONE MAI TI;Mn;122;NSM;;;;;N;;;;;
+0ECB;LAO TONE MAI CATAWA;Mn;122;NSM;;;;;N;;;;;
+0ECC;LAO CANCELLATION MARK;Mn;0;NSM;;;;;N;;;;;
+0ECD;LAO NIGGAHITA;Mn;0;NSM;;;;;N;;;;;
+0ED0;LAO DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0ED1;LAO DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0ED2;LAO DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0ED3;LAO DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0ED4;LAO DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0ED5;LAO DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0ED6;LAO DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0ED7;LAO DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0ED8;LAO DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0ED9;LAO DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0EDC;LAO HO NO;Lo;0;L;<compat> 0EAB 0E99;;;;N;;;;;
+0EDD;LAO HO MO;Lo;0;L;<compat> 0EAB 0EA1;;;;N;;;;;
+0F00;TIBETAN SYLLABLE OM;Lo;0;L;;;;;N;;;;;
+0F01;TIBETAN MARK GTER YIG MGO TRUNCATED A;So;0;L;;;;;N;;ter yik go a thung;;;
+0F02;TIBETAN MARK GTER YIG MGO -UM RNAM BCAD MA;So;0;L;;;;;N;;ter yik go wum nam chey ma;;;
+0F03;TIBETAN MARK GTER YIG MGO -UM GTER TSHEG MA;So;0;L;;;;;N;;ter yik go wum ter tsek ma;;;
+0F04;TIBETAN MARK INITIAL YIG MGO MDUN MA;Po;0;L;;;;;N;TIBETAN SINGLE ORNAMENT;yik go dun ma;;;
+0F05;TIBETAN MARK CLOSING YIG MGO SGAB MA;Po;0;L;;;;;N;;yik go kab ma;;;
+0F06;TIBETAN MARK CARET YIG MGO PHUR SHAD MA;Po;0;L;;;;;N;;yik go pur shey ma;;;
+0F07;TIBETAN MARK YIG MGO TSHEG SHAD MA;Po;0;L;;;;;N;;yik go tsek shey ma;;;
+0F08;TIBETAN MARK SBRUL SHAD;Po;0;L;;;;;N;TIBETAN RGYANSHAD;drul shey;;;
+0F09;TIBETAN MARK BSKUR YIG MGO;Po;0;L;;;;;N;;kur yik go;;;
+0F0A;TIBETAN MARK BKA- SHOG YIG MGO;Po;0;L;;;;;N;;ka sho yik go;;;
+0F0B;TIBETAN MARK INTERSYLLABIC TSHEG;Po;0;L;;;;;N;TIBETAN TSEG;tsek;;;
+0F0C;TIBETAN MARK DELIMITER TSHEG BSTAR;Po;0;L;<noBreak> 0F0B;;;;N;;tsek tar;;;
+0F0D;TIBETAN MARK SHAD;Po;0;L;;;;;N;TIBETAN SHAD;shey;;;
+0F0E;TIBETAN MARK NYIS SHAD;Po;0;L;;;;;N;TIBETAN DOUBLE SHAD;nyi shey;;;
+0F0F;TIBETAN MARK TSHEG SHAD;Po;0;L;;;;;N;;tsek shey;;;
+0F10;TIBETAN MARK NYIS TSHEG SHAD;Po;0;L;;;;;N;;nyi tsek shey;;;
+0F11;TIBETAN MARK RIN CHEN SPUNGS SHAD;Po;0;L;;;;;N;TIBETAN RINCHANPHUNGSHAD;rinchen pung shey;;;
+0F12;TIBETAN MARK RGYA GRAM SHAD;Po;0;L;;;;;N;;gya tram shey;;;
+0F13;TIBETAN MARK CARET -DZUD RTAGS ME LONG CAN;So;0;L;;;;;N;;dzu ta me long chen;;;
+0F14;TIBETAN MARK GTER TSHEG;So;0;L;;;;;N;TIBETAN COMMA;ter tsek;;;
+0F15;TIBETAN LOGOTYPE SIGN CHAD RTAGS;So;0;L;;;;;N;;che ta;;;
+0F16;TIBETAN LOGOTYPE SIGN LHAG RTAGS;So;0;L;;;;;N;;hlak ta;;;
+0F17;TIBETAN ASTROLOGICAL SIGN SGRA GCAN -CHAR RTAGS;So;0;L;;;;;N;;trachen char ta;;;
+0F18;TIBETAN ASTROLOGICAL SIGN -KHYUD PA;Mn;220;NSM;;;;;N;;kyu pa;;;
+0F19;TIBETAN ASTROLOGICAL SIGN SDONG TSHUGS;Mn;220;NSM;;;;;N;;dong tsu;;;
+0F1A;TIBETAN SIGN RDEL DKAR GCIG;So;0;L;;;;;N;;deka chig;;;
+0F1B;TIBETAN SIGN RDEL DKAR GNYIS;So;0;L;;;;;N;;deka nyi;;;
+0F1C;TIBETAN SIGN RDEL DKAR GSUM;So;0;L;;;;;N;;deka sum;;;
+0F1D;TIBETAN SIGN RDEL NAG GCIG;So;0;L;;;;;N;;dena chig;;;
+0F1E;TIBETAN SIGN RDEL NAG GNYIS;So;0;L;;;;;N;;dena nyi;;;
+0F1F;TIBETAN SIGN RDEL DKAR RDEL NAG;So;0;L;;;;;N;;deka dena;;;
+0F20;TIBETAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+0F21;TIBETAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+0F22;TIBETAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+0F23;TIBETAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+0F24;TIBETAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+0F25;TIBETAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+0F26;TIBETAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+0F27;TIBETAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+0F28;TIBETAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+0F29;TIBETAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+0F2A;TIBETAN DIGIT HALF ONE;No;0;L;;;;;N;;;;;
+0F2B;TIBETAN DIGIT HALF TWO;No;0;L;;;;;N;;;;;
+0F2C;TIBETAN DIGIT HALF THREE;No;0;L;;;;;N;;;;;
+0F2D;TIBETAN DIGIT HALF FOUR;No;0;L;;;;;N;;;;;
+0F2E;TIBETAN DIGIT HALF FIVE;No;0;L;;;;;N;;;;;
+0F2F;TIBETAN DIGIT HALF SIX;No;0;L;;;;;N;;;;;
+0F30;TIBETAN DIGIT HALF SEVEN;No;0;L;;;;;N;;;;;
+0F31;TIBETAN DIGIT HALF EIGHT;No;0;L;;;;;N;;;;;
+0F32;TIBETAN DIGIT HALF NINE;No;0;L;;;;;N;;;;;
+0F33;TIBETAN DIGIT HALF ZERO;No;0;L;;;;;N;;;;;
+0F34;TIBETAN MARK BSDUS RTAGS;So;0;L;;;;;N;;du ta;;;
+0F35;TIBETAN MARK NGAS BZUNG NYI ZLA;Mn;220;NSM;;;;;N;TIBETAN HONORIFIC UNDER RING;nge zung nyi da;;;
+0F36;TIBETAN MARK CARET -DZUD RTAGS BZHI MIG CAN;So;0;L;;;;;N;;dzu ta shi mig chen;;;
+0F37;TIBETAN MARK NGAS BZUNG SGOR RTAGS;Mn;220;NSM;;;;;N;TIBETAN UNDER RING;nge zung gor ta;;;
+0F38;TIBETAN MARK CHE MGO;So;0;L;;;;;N;;che go;;;
+0F39;TIBETAN MARK TSA -PHRU;Mn;216;NSM;;;;;N;TIBETAN LENITION MARK;tsa tru;;;
+0F3A;TIBETAN MARK GUG RTAGS GYON;Ps;0;ON;;;;;N;;gug ta yun;;;
+0F3B;TIBETAN MARK GUG RTAGS GYAS;Pe;0;ON;;;;;N;;gug ta ye;;;
+0F3C;TIBETAN MARK ANG KHANG GYON;Ps;0;ON;;;;;N;TIBETAN LEFT BRACE;ang kang yun;;;
+0F3D;TIBETAN MARK ANG KHANG GYAS;Pe;0;ON;;;;;N;TIBETAN RIGHT BRACE;ang kang ye;;;
+0F3E;TIBETAN SIGN YAR TSHES;Mc;0;L;;;;;N;;yar tse;;;
+0F3F;TIBETAN SIGN MAR TSHES;Mc;0;L;;;;;N;;mar tse;;;
+0F40;TIBETAN LETTER KA;Lo;0;L;;;;;N;;;;;
+0F41;TIBETAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+0F42;TIBETAN LETTER GA;Lo;0;L;;;;;N;;;;;
+0F43;TIBETAN LETTER GHA;Lo;0;L;0F42 0FB7;;;;N;;;;;
+0F44;TIBETAN LETTER NGA;Lo;0;L;;;;;N;;;;;
+0F45;TIBETAN LETTER CA;Lo;0;L;;;;;N;;;;;
+0F46;TIBETAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+0F47;TIBETAN LETTER JA;Lo;0;L;;;;;N;;;;;
+0F49;TIBETAN LETTER NYA;Lo;0;L;;;;;N;;;;;
+0F4A;TIBETAN LETTER TTA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED TA;;;;
+0F4B;TIBETAN LETTER TTHA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED THA;;;;
+0F4C;TIBETAN LETTER DDA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED DA;;;;
+0F4D;TIBETAN LETTER DDHA;Lo;0;L;0F4C 0FB7;;;;N;;;;;
+0F4E;TIBETAN LETTER NNA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED NA;;;;
+0F4F;TIBETAN LETTER TA;Lo;0;L;;;;;N;;;;;
+0F50;TIBETAN LETTER THA;Lo;0;L;;;;;N;;;;;
+0F51;TIBETAN LETTER DA;Lo;0;L;;;;;N;;;;;
+0F52;TIBETAN LETTER DHA;Lo;0;L;0F51 0FB7;;;;N;;;;;
+0F53;TIBETAN LETTER NA;Lo;0;L;;;;;N;;;;;
+0F54;TIBETAN LETTER PA;Lo;0;L;;;;;N;;;;;
+0F55;TIBETAN LETTER PHA;Lo;0;L;;;;;N;;;;;
+0F56;TIBETAN LETTER BA;Lo;0;L;;;;;N;;;;;
+0F57;TIBETAN LETTER BHA;Lo;0;L;0F56 0FB7;;;;N;;;;;
+0F58;TIBETAN LETTER MA;Lo;0;L;;;;;N;;;;;
+0F59;TIBETAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+0F5A;TIBETAN LETTER TSHA;Lo;0;L;;;;;N;;;;;
+0F5B;TIBETAN LETTER DZA;Lo;0;L;;;;;N;;;;;
+0F5C;TIBETAN LETTER DZHA;Lo;0;L;0F5B 0FB7;;;;N;;;;;
+0F5D;TIBETAN LETTER WA;Lo;0;L;;;;;N;;;;;
+0F5E;TIBETAN LETTER ZHA;Lo;0;L;;;;;N;;;;;
+0F5F;TIBETAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+0F60;TIBETAN LETTER -A;Lo;0;L;;;;;N;TIBETAN LETTER AA;;;;
+0F61;TIBETAN LETTER YA;Lo;0;L;;;;;N;;;;;
+0F62;TIBETAN LETTER RA;Lo;0;L;;;;;N;;*;;;
+0F63;TIBETAN LETTER LA;Lo;0;L;;;;;N;;;;;
+0F64;TIBETAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+0F65;TIBETAN LETTER SSA;Lo;0;L;;;;;N;TIBETAN LETTER REVERSED SHA;;;;
+0F66;TIBETAN LETTER SA;Lo;0;L;;;;;N;;;;;
+0F67;TIBETAN LETTER HA;Lo;0;L;;;;;N;;;;;
+0F68;TIBETAN LETTER A;Lo;0;L;;;;;N;;;;;
+0F69;TIBETAN LETTER KSSA;Lo;0;L;0F40 0FB5;;;;N;;;;;
+0F6A;TIBETAN LETTER FIXED-FORM RA;Lo;0;L;;;;;N;;*;;;
+0F71;TIBETAN VOWEL SIGN AA;Mn;129;NSM;;;;;N;;;;;
+0F72;TIBETAN VOWEL SIGN I;Mn;130;NSM;;;;;N;;;;;
+0F73;TIBETAN VOWEL SIGN II;Mn;0;NSM;0F71 0F72;;;;N;;;;;
+0F74;TIBETAN VOWEL SIGN U;Mn;132;NSM;;;;;N;;;;;
+0F75;TIBETAN VOWEL SIGN UU;Mn;0;NSM;0F71 0F74;;;;N;;;;;
+0F76;TIBETAN VOWEL SIGN VOCALIC R;Mn;0;NSM;0FB2 0F80;;;;N;;;;;
+0F77;TIBETAN VOWEL SIGN VOCALIC RR;Mn;0;NSM;<compat> 0FB2 0F81;;;;N;;;;;
+0F78;TIBETAN VOWEL SIGN VOCALIC L;Mn;0;NSM;0FB3 0F80;;;;N;;;;;
+0F79;TIBETAN VOWEL SIGN VOCALIC LL;Mn;0;NSM;<compat> 0FB3 0F81;;;;N;;;;;
+0F7A;TIBETAN VOWEL SIGN E;Mn;130;NSM;;;;;N;;;;;
+0F7B;TIBETAN VOWEL SIGN EE;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AI;;;;
+0F7C;TIBETAN VOWEL SIGN O;Mn;130;NSM;;;;;N;;;;;
+0F7D;TIBETAN VOWEL SIGN OO;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN AU;;;;
+0F7E;TIBETAN SIGN RJES SU NGA RO;Mn;0;NSM;;;;;N;TIBETAN ANUSVARA;je su nga ro;;;
+0F7F;TIBETAN SIGN RNAM BCAD;Mc;0;L;;;;;N;TIBETAN VISARGA;nam chey;;;
+0F80;TIBETAN VOWEL SIGN REVERSED I;Mn;130;NSM;;;;;N;TIBETAN VOWEL SIGN SHORT I;;;;
+0F81;TIBETAN VOWEL SIGN REVERSED II;Mn;0;NSM;0F71 0F80;;;;N;;;;;
+0F82;TIBETAN SIGN NYI ZLA NAA DA;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU WITH ORNAMENT;nyi da na da;;;
+0F83;TIBETAN SIGN SNA LDAN;Mn;230;NSM;;;;;N;TIBETAN CANDRABINDU;nan de;;;
+0F84;TIBETAN MARK HALANTA;Mn;9;NSM;;;;;N;TIBETAN VIRAMA;;;;
+0F85;TIBETAN MARK PALUTA;Po;0;L;;;;;N;TIBETAN CHUCHENYIGE;;;;
+0F86;TIBETAN SIGN LCI RTAGS;Mn;230;NSM;;;;;N;;ji ta;;;
+0F87;TIBETAN SIGN YANG RTAGS;Mn;230;NSM;;;;;N;;yang ta;;;
+0F88;TIBETAN SIGN LCE TSA CAN;Lo;0;L;;;;;N;;che tsa chen;;;
+0F89;TIBETAN SIGN MCHU CAN;Lo;0;L;;;;;N;;chu chen;;;
+0F8A;TIBETAN SIGN GRU CAN RGYINGS;Lo;0;L;;;;;N;;tru chen ging;;;
+0F8B;TIBETAN SIGN GRU MED RGYINGS;Lo;0;L;;;;;N;;tru me ging;;;
+0F90;TIBETAN SUBJOINED LETTER KA;Mn;0;NSM;;;;;N;;;;;
+0F91;TIBETAN SUBJOINED LETTER KHA;Mn;0;NSM;;;;;N;;;;;
+0F92;TIBETAN SUBJOINED LETTER GA;Mn;0;NSM;;;;;N;;;;;
+0F93;TIBETAN SUBJOINED LETTER GHA;Mn;0;NSM;0F92 0FB7;;;;N;;;;;
+0F94;TIBETAN SUBJOINED LETTER NGA;Mn;0;NSM;;;;;N;;;;;
+0F95;TIBETAN SUBJOINED LETTER CA;Mn;0;NSM;;;;;N;;;;;
+0F96;TIBETAN SUBJOINED LETTER CHA;Mn;0;NSM;;;;;N;;;;;
+0F97;TIBETAN SUBJOINED LETTER JA;Mn;0;NSM;;;;;N;;;;;
+0F99;TIBETAN SUBJOINED LETTER NYA;Mn;0;NSM;;;;;N;;;;;
+0F9A;TIBETAN SUBJOINED LETTER TTA;Mn;0;NSM;;;;;N;;;;;
+0F9B;TIBETAN SUBJOINED LETTER TTHA;Mn;0;NSM;;;;;N;;;;;
+0F9C;TIBETAN SUBJOINED LETTER DDA;Mn;0;NSM;;;;;N;;;;;
+0F9D;TIBETAN SUBJOINED LETTER DDHA;Mn;0;NSM;0F9C 0FB7;;;;N;;;;;
+0F9E;TIBETAN SUBJOINED LETTER NNA;Mn;0;NSM;;;;;N;;;;;
+0F9F;TIBETAN SUBJOINED LETTER TA;Mn;0;NSM;;;;;N;;;;;
+0FA0;TIBETAN SUBJOINED LETTER THA;Mn;0;NSM;;;;;N;;;;;
+0FA1;TIBETAN SUBJOINED LETTER DA;Mn;0;NSM;;;;;N;;;;;
+0FA2;TIBETAN SUBJOINED LETTER DHA;Mn;0;NSM;0FA1 0FB7;;;;N;;;;;
+0FA3;TIBETAN SUBJOINED LETTER NA;Mn;0;NSM;;;;;N;;;;;
+0FA4;TIBETAN SUBJOINED LETTER PA;Mn;0;NSM;;;;;N;;;;;
+0FA5;TIBETAN SUBJOINED LETTER PHA;Mn;0;NSM;;;;;N;;;;;
+0FA6;TIBETAN SUBJOINED LETTER BA;Mn;0;NSM;;;;;N;;;;;
+0FA7;TIBETAN SUBJOINED LETTER BHA;Mn;0;NSM;0FA6 0FB7;;;;N;;;;;
+0FA8;TIBETAN SUBJOINED LETTER MA;Mn;0;NSM;;;;;N;;;;;
+0FA9;TIBETAN SUBJOINED LETTER TSA;Mn;0;NSM;;;;;N;;;;;
+0FAA;TIBETAN SUBJOINED LETTER TSHA;Mn;0;NSM;;;;;N;;;;;
+0FAB;TIBETAN SUBJOINED LETTER DZA;Mn;0;NSM;;;;;N;;;;;
+0FAC;TIBETAN SUBJOINED LETTER DZHA;Mn;0;NSM;0FAB 0FB7;;;;N;;;;;
+0FAD;TIBETAN SUBJOINED LETTER WA;Mn;0;NSM;;;;;N;;*;;;
+0FAE;TIBETAN SUBJOINED LETTER ZHA;Mn;0;NSM;;;;;N;;;;;
+0FAF;TIBETAN SUBJOINED LETTER ZA;Mn;0;NSM;;;;;N;;;;;
+0FB0;TIBETAN SUBJOINED LETTER -A;Mn;0;NSM;;;;;N;;;;;
+0FB1;TIBETAN SUBJOINED LETTER YA;Mn;0;NSM;;;;;N;;*;;;
+0FB2;TIBETAN SUBJOINED LETTER RA;Mn;0;NSM;;;;;N;;*;;;
+0FB3;TIBETAN SUBJOINED LETTER LA;Mn;0;NSM;;;;;N;;;;;
+0FB4;TIBETAN SUBJOINED LETTER SHA;Mn;0;NSM;;;;;N;;;;;
+0FB5;TIBETAN SUBJOINED LETTER SSA;Mn;0;NSM;;;;;N;;;;;
+0FB6;TIBETAN SUBJOINED LETTER SA;Mn;0;NSM;;;;;N;;;;;
+0FB7;TIBETAN SUBJOINED LETTER HA;Mn;0;NSM;;;;;N;;;;;
+0FB8;TIBETAN SUBJOINED LETTER A;Mn;0;NSM;;;;;N;;;;;
+0FB9;TIBETAN SUBJOINED LETTER KSSA;Mn;0;NSM;0F90 0FB5;;;;N;;;;;
+0FBA;TIBETAN SUBJOINED LETTER FIXED-FORM WA;Mn;0;NSM;;;;;N;;*;;;
+0FBB;TIBETAN SUBJOINED LETTER FIXED-FORM YA;Mn;0;NSM;;;;;N;;*;;;
+0FBC;TIBETAN SUBJOINED LETTER FIXED-FORM RA;Mn;0;NSM;;;;;N;;*;;;
+0FBE;TIBETAN KU RU KHA;So;0;L;;;;;N;;kuruka;;;
+0FBF;TIBETAN KU RU KHA BZHI MIG CAN;So;0;L;;;;;N;;kuruka shi mik chen;;;
+0FC0;TIBETAN CANTILLATION SIGN HEAVY BEAT;So;0;L;;;;;N;;;;;
+0FC1;TIBETAN CANTILLATION SIGN LIGHT BEAT;So;0;L;;;;;N;;;;;
+0FC2;TIBETAN CANTILLATION SIGN CANG TE-U;So;0;L;;;;;N;;chang tyu;;;
+0FC3;TIBETAN CANTILLATION SIGN SBUB -CHAL;So;0;L;;;;;N;;bub chey;;;
+0FC4;TIBETAN SYMBOL DRIL BU;So;0;L;;;;;N;;drilbu;;;
+0FC5;TIBETAN SYMBOL RDO RJE;So;0;L;;;;;N;;dorje;;;
+0FC6;TIBETAN SYMBOL PADMA GDAN;Mn;220;NSM;;;;;N;;pema den;;;
+0FC7;TIBETAN SYMBOL RDO RJE RGYA GRAM;So;0;L;;;;;N;;dorje gya dram;;;
+0FC8;TIBETAN SYMBOL PHUR PA;So;0;L;;;;;N;;phurba;;;
+0FC9;TIBETAN SYMBOL NOR BU;So;0;L;;;;;N;;norbu;;;
+0FCA;TIBETAN SYMBOL NOR BU NYIS -KHYIL;So;0;L;;;;;N;;norbu nyi khyi;;;
+0FCB;TIBETAN SYMBOL NOR BU GSUM -KHYIL;So;0;L;;;;;N;;norbu sum khyi;;;
+0FCC;TIBETAN SYMBOL NOR BU BZHI -KHYIL;So;0;L;;;;;N;;norbu shi khyi;;;
+0FCF;TIBETAN SIGN RDEL NAG GSUM;So;0;L;;;;;N;;;;;
+1000;MYANMAR LETTER KA;Lo;0;L;;;;;N;;;;;
+1001;MYANMAR LETTER KHA;Lo;0;L;;;;;N;;;;;
+1002;MYANMAR LETTER GA;Lo;0;L;;;;;N;;;;;
+1003;MYANMAR LETTER GHA;Lo;0;L;;;;;N;;;;;
+1004;MYANMAR LETTER NGA;Lo;0;L;;;;;N;;;;;
+1005;MYANMAR LETTER CA;Lo;0;L;;;;;N;;;;;
+1006;MYANMAR LETTER CHA;Lo;0;L;;;;;N;;;;;
+1007;MYANMAR LETTER JA;Lo;0;L;;;;;N;;;;;
+1008;MYANMAR LETTER JHA;Lo;0;L;;;;;N;;;;;
+1009;MYANMAR LETTER NYA;Lo;0;L;;;;;N;;;;;
+100A;MYANMAR LETTER NNYA;Lo;0;L;;;;;N;;;;;
+100B;MYANMAR LETTER TTA;Lo;0;L;;;;;N;;;;;
+100C;MYANMAR LETTER TTHA;Lo;0;L;;;;;N;;;;;
+100D;MYANMAR LETTER DDA;Lo;0;L;;;;;N;;;;;
+100E;MYANMAR LETTER DDHA;Lo;0;L;;;;;N;;;;;
+100F;MYANMAR LETTER NNA;Lo;0;L;;;;;N;;;;;
+1010;MYANMAR LETTER TA;Lo;0;L;;;;;N;;;;;
+1011;MYANMAR LETTER THA;Lo;0;L;;;;;N;;;;;
+1012;MYANMAR LETTER DA;Lo;0;L;;;;;N;;;;;
+1013;MYANMAR LETTER DHA;Lo;0;L;;;;;N;;;;;
+1014;MYANMAR LETTER NA;Lo;0;L;;;;;N;;;;;
+1015;MYANMAR LETTER PA;Lo;0;L;;;;;N;;;;;
+1016;MYANMAR LETTER PHA;Lo;0;L;;;;;N;;;;;
+1017;MYANMAR LETTER BA;Lo;0;L;;;;;N;;;;;
+1018;MYANMAR LETTER BHA;Lo;0;L;;;;;N;;;;;
+1019;MYANMAR LETTER MA;Lo;0;L;;;;;N;;;;;
+101A;MYANMAR LETTER YA;Lo;0;L;;;;;N;;;;;
+101B;MYANMAR LETTER RA;Lo;0;L;;;;;N;;;;;
+101C;MYANMAR LETTER LA;Lo;0;L;;;;;N;;;;;
+101D;MYANMAR LETTER WA;Lo;0;L;;;;;N;;;;;
+101E;MYANMAR LETTER SA;Lo;0;L;;;;;N;;;;;
+101F;MYANMAR LETTER HA;Lo;0;L;;;;;N;;;;;
+1020;MYANMAR LETTER LLA;Lo;0;L;;;;;N;;;;;
+1021;MYANMAR LETTER A;Lo;0;L;;;;;N;;;;;
+1023;MYANMAR LETTER I;Lo;0;L;;;;;N;;;;;
+1024;MYANMAR LETTER II;Lo;0;L;;;;;N;;;;;
+1025;MYANMAR LETTER U;Lo;0;L;;;;;N;;;;;
+1026;MYANMAR LETTER UU;Lo;0;L;1025 102E;;;;N;;;;;
+1027;MYANMAR LETTER E;Lo;0;L;;;;;N;;;;;
+1029;MYANMAR LETTER O;Lo;0;L;;;;;N;;;;;
+102A;MYANMAR LETTER AU;Lo;0;L;;;;;N;;;;;
+102C;MYANMAR VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+102D;MYANMAR VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+102E;MYANMAR VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+102F;MYANMAR VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+1030;MYANMAR VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+1031;MYANMAR VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+1032;MYANMAR VOWEL SIGN AI;Mn;0;NSM;;;;;N;;;;;
+1036;MYANMAR SIGN ANUSVARA;Mn;0;NSM;;;;;N;;;;;
+1037;MYANMAR SIGN DOT BELOW;Mn;7;NSM;;;;;N;;;;;
+1038;MYANMAR SIGN VISARGA;Mc;0;L;;;;;N;;;;;
+1039;MYANMAR SIGN VIRAMA;Mn;9;NSM;;;;;N;;;;;
+1040;MYANMAR DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1041;MYANMAR DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1042;MYANMAR DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1043;MYANMAR DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1044;MYANMAR DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1045;MYANMAR DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1046;MYANMAR DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1047;MYANMAR DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1048;MYANMAR DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1049;MYANMAR DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+104A;MYANMAR SIGN LITTLE SECTION;Po;0;L;;;;;N;;;;;
+104B;MYANMAR SIGN SECTION;Po;0;L;;;;;N;;;;;
+104C;MYANMAR SYMBOL LOCATIVE;Po;0;L;;;;;N;;;;;
+104D;MYANMAR SYMBOL COMPLETED;Po;0;L;;;;;N;;;;;
+104E;MYANMAR SYMBOL AFOREMENTIONED;Po;0;L;;;;;N;;;;;
+104F;MYANMAR SYMBOL GENITIVE;Po;0;L;;;;;N;;;;;
+1050;MYANMAR LETTER SHA;Lo;0;L;;;;;N;;;;;
+1051;MYANMAR LETTER SSA;Lo;0;L;;;;;N;;;;;
+1052;MYANMAR LETTER VOCALIC R;Lo;0;L;;;;;N;;;;;
+1053;MYANMAR LETTER VOCALIC RR;Lo;0;L;;;;;N;;;;;
+1054;MYANMAR LETTER VOCALIC L;Lo;0;L;;;;;N;;;;;
+1055;MYANMAR LETTER VOCALIC LL;Lo;0;L;;;;;N;;;;;
+1056;MYANMAR VOWEL SIGN VOCALIC R;Mc;0;L;;;;;N;;;;;
+1057;MYANMAR VOWEL SIGN VOCALIC RR;Mc;0;L;;;;;N;;;;;
+1058;MYANMAR VOWEL SIGN VOCALIC L;Mn;0;NSM;;;;;N;;;;;
+1059;MYANMAR VOWEL SIGN VOCALIC LL;Mn;0;NSM;;;;;N;;;;;
+10A0;GEORGIAN CAPITAL LETTER AN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A1;GEORGIAN CAPITAL LETTER BAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A2;GEORGIAN CAPITAL LETTER GAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A3;GEORGIAN CAPITAL LETTER DON;Lu;0;L;;;;;N;;Khutsuri;;;
+10A4;GEORGIAN CAPITAL LETTER EN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A5;GEORGIAN CAPITAL LETTER VIN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A6;GEORGIAN CAPITAL LETTER ZEN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A7;GEORGIAN CAPITAL LETTER TAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A8;GEORGIAN CAPITAL LETTER IN;Lu;0;L;;;;;N;;Khutsuri;;;
+10A9;GEORGIAN CAPITAL LETTER KAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10AA;GEORGIAN CAPITAL LETTER LAS;Lu;0;L;;;;;N;;Khutsuri;;;
+10AB;GEORGIAN CAPITAL LETTER MAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10AC;GEORGIAN CAPITAL LETTER NAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10AD;GEORGIAN CAPITAL LETTER ON;Lu;0;L;;;;;N;;Khutsuri;;;
+10AE;GEORGIAN CAPITAL LETTER PAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10AF;GEORGIAN CAPITAL LETTER ZHAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10B0;GEORGIAN CAPITAL LETTER RAE;Lu;0;L;;;;;N;;Khutsuri;;;
+10B1;GEORGIAN CAPITAL LETTER SAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10B2;GEORGIAN CAPITAL LETTER TAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10B3;GEORGIAN CAPITAL LETTER UN;Lu;0;L;;;;;N;;Khutsuri;;;
+10B4;GEORGIAN CAPITAL LETTER PHAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10B5;GEORGIAN CAPITAL LETTER KHAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10B6;GEORGIAN CAPITAL LETTER GHAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10B7;GEORGIAN CAPITAL LETTER QAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10B8;GEORGIAN CAPITAL LETTER SHIN;Lu;0;L;;;;;N;;Khutsuri;;;
+10B9;GEORGIAN CAPITAL LETTER CHIN;Lu;0;L;;;;;N;;Khutsuri;;;
+10BA;GEORGIAN CAPITAL LETTER CAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10BB;GEORGIAN CAPITAL LETTER JIL;Lu;0;L;;;;;N;;Khutsuri;;;
+10BC;GEORGIAN CAPITAL LETTER CIL;Lu;0;L;;;;;N;;Khutsuri;;;
+10BD;GEORGIAN CAPITAL LETTER CHAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10BE;GEORGIAN CAPITAL LETTER XAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10BF;GEORGIAN CAPITAL LETTER JHAN;Lu;0;L;;;;;N;;Khutsuri;;;
+10C0;GEORGIAN CAPITAL LETTER HAE;Lu;0;L;;;;;N;;Khutsuri;;;
+10C1;GEORGIAN CAPITAL LETTER HE;Lu;0;L;;;;;N;;Khutsuri;;;
+10C2;GEORGIAN CAPITAL LETTER HIE;Lu;0;L;;;;;N;;Khutsuri;;;
+10C3;GEORGIAN CAPITAL LETTER WE;Lu;0;L;;;;;N;;Khutsuri;;;
+10C4;GEORGIAN CAPITAL LETTER HAR;Lu;0;L;;;;;N;;Khutsuri;;;
+10C5;GEORGIAN CAPITAL LETTER HOE;Lu;0;L;;;;;N;;Khutsuri;;;
+10D0;GEORGIAN LETTER AN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER AN;;;;
+10D1;GEORGIAN LETTER BAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER BAN;;;;
+10D2;GEORGIAN LETTER GAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GAN;;;;
+10D3;GEORGIAN LETTER DON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER DON;;;;
+10D4;GEORGIAN LETTER EN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER EN;;;;
+10D5;GEORGIAN LETTER VIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER VIN;;;;
+10D6;GEORGIAN LETTER ZEN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZEN;;;;
+10D7;GEORGIAN LETTER TAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAN;;;;
+10D8;GEORGIAN LETTER IN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER IN;;;;
+10D9;GEORGIAN LETTER KAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KAN;;;;
+10DA;GEORGIAN LETTER LAS;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER LAS;;;;
+10DB;GEORGIAN LETTER MAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER MAN;;;;
+10DC;GEORGIAN LETTER NAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER NAR;;;;
+10DD;GEORGIAN LETTER ON;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ON;;;;
+10DE;GEORGIAN LETTER PAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PAR;;;;
+10DF;GEORGIAN LETTER ZHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER ZHAR;;;;
+10E0;GEORGIAN LETTER RAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER RAE;;;;
+10E1;GEORGIAN LETTER SAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SAN;;;;
+10E2;GEORGIAN LETTER TAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER TAR;;;;
+10E3;GEORGIAN LETTER UN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER UN;;;;
+10E4;GEORGIAN LETTER PHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER PHAR;;;;
+10E5;GEORGIAN LETTER KHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER KHAR;;;;
+10E6;GEORGIAN LETTER GHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER GHAN;;;;
+10E7;GEORGIAN LETTER QAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER QAR;;;;
+10E8;GEORGIAN LETTER SHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER SHIN;;;;
+10E9;GEORGIAN LETTER CHIN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHIN;;;;
+10EA;GEORGIAN LETTER CAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CAN;;;;
+10EB;GEORGIAN LETTER JIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JIL;;;;
+10EC;GEORGIAN LETTER CIL;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CIL;;;;
+10ED;GEORGIAN LETTER CHAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER CHAR;;;;
+10EE;GEORGIAN LETTER XAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER XAN;;;;
+10EF;GEORGIAN LETTER JHAN;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER JHAN;;;;
+10F0;GEORGIAN LETTER HAE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAE;;;;
+10F1;GEORGIAN LETTER HE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HE;;;;
+10F2;GEORGIAN LETTER HIE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HIE;;;;
+10F3;GEORGIAN LETTER WE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER WE;;;;
+10F4;GEORGIAN LETTER HAR;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HAR;;;;
+10F5;GEORGIAN LETTER HOE;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER HOE;;;;
+10F6;GEORGIAN LETTER FI;Lo;0;L;;;;;N;GEORGIAN SMALL LETTER FI;;;;
+10FB;GEORGIAN PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+1100;HANGUL CHOSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
+1101;HANGUL CHOSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
+1102;HANGUL CHOSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
+1103;HANGUL CHOSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
+1104;HANGUL CHOSEONG SSANGTIKEUT;Lo;0;L;;;;;N;;dd *;;;
+1105;HANGUL CHOSEONG RIEUL;Lo;0;L;;;;;N;;r *;;;
+1106;HANGUL CHOSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
+1107;HANGUL CHOSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
+1108;HANGUL CHOSEONG SSANGPIEUP;Lo;0;L;;;;;N;;bb *;;;
+1109;HANGUL CHOSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
+110A;HANGUL CHOSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
+110B;HANGUL CHOSEONG IEUNG;Lo;0;L;;;;;N;;;;;
+110C;HANGUL CHOSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
+110D;HANGUL CHOSEONG SSANGCIEUC;Lo;0;L;;;;;N;;jj *;;;
+110E;HANGUL CHOSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
+110F;HANGUL CHOSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
+1110;HANGUL CHOSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
+1111;HANGUL CHOSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
+1112;HANGUL CHOSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
+1113;HANGUL CHOSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
+1114;HANGUL CHOSEONG SSANGNIEUN;Lo;0;L;;;;;N;;;;;
+1115;HANGUL CHOSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
+1116;HANGUL CHOSEONG NIEUN-PIEUP;Lo;0;L;;;;;N;;;;;
+1117;HANGUL CHOSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
+1118;HANGUL CHOSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
+1119;HANGUL CHOSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
+111A;HANGUL CHOSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;;;;
+111B;HANGUL CHOSEONG KAPYEOUNRIEUL;Lo;0;L;;;;;N;;;;;
+111C;HANGUL CHOSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
+111D;HANGUL CHOSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
+111E;HANGUL CHOSEONG PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
+111F;HANGUL CHOSEONG PIEUP-NIEUN;Lo;0;L;;;;;N;;;;;
+1120;HANGUL CHOSEONG PIEUP-TIKEUT;Lo;0;L;;;;;N;;;;;
+1121;HANGUL CHOSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+1122;HANGUL CHOSEONG PIEUP-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+1123;HANGUL CHOSEONG PIEUP-SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+1124;HANGUL CHOSEONG PIEUP-SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+1125;HANGUL CHOSEONG PIEUP-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+1126;HANGUL CHOSEONG PIEUP-SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+1127;HANGUL CHOSEONG PIEUP-CIEUC;Lo;0;L;;;;;N;;;;;
+1128;HANGUL CHOSEONG PIEUP-CHIEUCH;Lo;0;L;;;;;N;;;;;
+1129;HANGUL CHOSEONG PIEUP-THIEUTH;Lo;0;L;;;;;N;;;;;
+112A;HANGUL CHOSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+112B;HANGUL CHOSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+112C;HANGUL CHOSEONG KAPYEOUNSSANGPIEUP;Lo;0;L;;;;;N;;;;;
+112D;HANGUL CHOSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+112E;HANGUL CHOSEONG SIOS-NIEUN;Lo;0;L;;;;;N;;;;;
+112F;HANGUL CHOSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+1130;HANGUL CHOSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
+1131;HANGUL CHOSEONG SIOS-MIEUM;Lo;0;L;;;;;N;;;;;
+1132;HANGUL CHOSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+1133;HANGUL CHOSEONG SIOS-PIEUP-KIYEOK;Lo;0;L;;;;;N;;;;;
+1134;HANGUL CHOSEONG SIOS-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+1135;HANGUL CHOSEONG SIOS-IEUNG;Lo;0;L;;;;;N;;;;;
+1136;HANGUL CHOSEONG SIOS-CIEUC;Lo;0;L;;;;;N;;;;;
+1137;HANGUL CHOSEONG SIOS-CHIEUCH;Lo;0;L;;;;;N;;;;;
+1138;HANGUL CHOSEONG SIOS-KHIEUKH;Lo;0;L;;;;;N;;;;;
+1139;HANGUL CHOSEONG SIOS-THIEUTH;Lo;0;L;;;;;N;;;;;
+113A;HANGUL CHOSEONG SIOS-PHIEUPH;Lo;0;L;;;;;N;;;;;
+113B;HANGUL CHOSEONG SIOS-HIEUH;Lo;0;L;;;;;N;;;;;
+113C;HANGUL CHOSEONG CHITUEUMSIOS;Lo;0;L;;;;;N;;;;;
+113D;HANGUL CHOSEONG CHITUEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
+113E;HANGUL CHOSEONG CEONGCHIEUMSIOS;Lo;0;L;;;;;N;;;;;
+113F;HANGUL CHOSEONG CEONGCHIEUMSSANGSIOS;Lo;0;L;;;;;N;;;;;
+1140;HANGUL CHOSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+1141;HANGUL CHOSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
+1142;HANGUL CHOSEONG IEUNG-TIKEUT;Lo;0;L;;;;;N;;;;;
+1143;HANGUL CHOSEONG IEUNG-MIEUM;Lo;0;L;;;;;N;;;;;
+1144;HANGUL CHOSEONG IEUNG-PIEUP;Lo;0;L;;;;;N;;;;;
+1145;HANGUL CHOSEONG IEUNG-SIOS;Lo;0;L;;;;;N;;;;;
+1146;HANGUL CHOSEONG IEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
+1147;HANGUL CHOSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
+1148;HANGUL CHOSEONG IEUNG-CIEUC;Lo;0;L;;;;;N;;;;;
+1149;HANGUL CHOSEONG IEUNG-CHIEUCH;Lo;0;L;;;;;N;;;;;
+114A;HANGUL CHOSEONG IEUNG-THIEUTH;Lo;0;L;;;;;N;;;;;
+114B;HANGUL CHOSEONG IEUNG-PHIEUPH;Lo;0;L;;;;;N;;;;;
+114C;HANGUL CHOSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+114D;HANGUL CHOSEONG CIEUC-IEUNG;Lo;0;L;;;;;N;;;;;
+114E;HANGUL CHOSEONG CHITUEUMCIEUC;Lo;0;L;;;;;N;;;;;
+114F;HANGUL CHOSEONG CHITUEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
+1150;HANGUL CHOSEONG CEONGCHIEUMCIEUC;Lo;0;L;;;;;N;;;;;
+1151;HANGUL CHOSEONG CEONGCHIEUMSSANGCIEUC;Lo;0;L;;;;;N;;;;;
+1152;HANGUL CHOSEONG CHIEUCH-KHIEUKH;Lo;0;L;;;;;N;;;;;
+1153;HANGUL CHOSEONG CHIEUCH-HIEUH;Lo;0;L;;;;;N;;;;;
+1154;HANGUL CHOSEONG CHITUEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1155;HANGUL CHOSEONG CEONGCHIEUMCHIEUCH;Lo;0;L;;;;;N;;;;;
+1156;HANGUL CHOSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
+1157;HANGUL CHOSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
+1158;HANGUL CHOSEONG SSANGHIEUH;Lo;0;L;;;;;N;;;;;
+1159;HANGUL CHOSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+115F;HANGUL CHOSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1160;HANGUL JUNGSEONG FILLER;Lo;0;L;;;;;N;;;;;
+1161;HANGUL JUNGSEONG A;Lo;0;L;;;;;N;;;;;
+1162;HANGUL JUNGSEONG AE;Lo;0;L;;;;;N;;;;;
+1163;HANGUL JUNGSEONG YA;Lo;0;L;;;;;N;;;;;
+1164;HANGUL JUNGSEONG YAE;Lo;0;L;;;;;N;;;;;
+1165;HANGUL JUNGSEONG EO;Lo;0;L;;;;;N;;;;;
+1166;HANGUL JUNGSEONG E;Lo;0;L;;;;;N;;;;;
+1167;HANGUL JUNGSEONG YEO;Lo;0;L;;;;;N;;;;;
+1168;HANGUL JUNGSEONG YE;Lo;0;L;;;;;N;;;;;
+1169;HANGUL JUNGSEONG O;Lo;0;L;;;;;N;;;;;
+116A;HANGUL JUNGSEONG WA;Lo;0;L;;;;;N;;;;;
+116B;HANGUL JUNGSEONG WAE;Lo;0;L;;;;;N;;;;;
+116C;HANGUL JUNGSEONG OE;Lo;0;L;;;;;N;;;;;
+116D;HANGUL JUNGSEONG YO;Lo;0;L;;;;;N;;;;;
+116E;HANGUL JUNGSEONG U;Lo;0;L;;;;;N;;;;;
+116F;HANGUL JUNGSEONG WEO;Lo;0;L;;;;;N;;;;;
+1170;HANGUL JUNGSEONG WE;Lo;0;L;;;;;N;;;;;
+1171;HANGUL JUNGSEONG WI;Lo;0;L;;;;;N;;;;;
+1172;HANGUL JUNGSEONG YU;Lo;0;L;;;;;N;;;;;
+1173;HANGUL JUNGSEONG EU;Lo;0;L;;;;;N;;;;;
+1174;HANGUL JUNGSEONG YI;Lo;0;L;;;;;N;;;;;
+1175;HANGUL JUNGSEONG I;Lo;0;L;;;;;N;;;;;
+1176;HANGUL JUNGSEONG A-O;Lo;0;L;;;;;N;;;;;
+1177;HANGUL JUNGSEONG A-U;Lo;0;L;;;;;N;;;;;
+1178;HANGUL JUNGSEONG YA-O;Lo;0;L;;;;;N;;;;;
+1179;HANGUL JUNGSEONG YA-YO;Lo;0;L;;;;;N;;;;;
+117A;HANGUL JUNGSEONG EO-O;Lo;0;L;;;;;N;;;;;
+117B;HANGUL JUNGSEONG EO-U;Lo;0;L;;;;;N;;;;;
+117C;HANGUL JUNGSEONG EO-EU;Lo;0;L;;;;;N;;;;;
+117D;HANGUL JUNGSEONG YEO-O;Lo;0;L;;;;;N;;;;;
+117E;HANGUL JUNGSEONG YEO-U;Lo;0;L;;;;;N;;;;;
+117F;HANGUL JUNGSEONG O-EO;Lo;0;L;;;;;N;;;;;
+1180;HANGUL JUNGSEONG O-E;Lo;0;L;;;;;N;;;;;
+1181;HANGUL JUNGSEONG O-YE;Lo;0;L;;;;;N;;;;;
+1182;HANGUL JUNGSEONG O-O;Lo;0;L;;;;;N;;;;;
+1183;HANGUL JUNGSEONG O-U;Lo;0;L;;;;;N;;;;;
+1184;HANGUL JUNGSEONG YO-YA;Lo;0;L;;;;;N;;;;;
+1185;HANGUL JUNGSEONG YO-YAE;Lo;0;L;;;;;N;;;;;
+1186;HANGUL JUNGSEONG YO-YEO;Lo;0;L;;;;;N;;;;;
+1187;HANGUL JUNGSEONG YO-O;Lo;0;L;;;;;N;;;;;
+1188;HANGUL JUNGSEONG YO-I;Lo;0;L;;;;;N;;;;;
+1189;HANGUL JUNGSEONG U-A;Lo;0;L;;;;;N;;;;;
+118A;HANGUL JUNGSEONG U-AE;Lo;0;L;;;;;N;;;;;
+118B;HANGUL JUNGSEONG U-EO-EU;Lo;0;L;;;;;N;;;;;
+118C;HANGUL JUNGSEONG U-YE;Lo;0;L;;;;;N;;;;;
+118D;HANGUL JUNGSEONG U-U;Lo;0;L;;;;;N;;;;;
+118E;HANGUL JUNGSEONG YU-A;Lo;0;L;;;;;N;;;;;
+118F;HANGUL JUNGSEONG YU-EO;Lo;0;L;;;;;N;;;;;
+1190;HANGUL JUNGSEONG YU-E;Lo;0;L;;;;;N;;;;;
+1191;HANGUL JUNGSEONG YU-YEO;Lo;0;L;;;;;N;;;;;
+1192;HANGUL JUNGSEONG YU-YE;Lo;0;L;;;;;N;;;;;
+1193;HANGUL JUNGSEONG YU-U;Lo;0;L;;;;;N;;;;;
+1194;HANGUL JUNGSEONG YU-I;Lo;0;L;;;;;N;;;;;
+1195;HANGUL JUNGSEONG EU-U;Lo;0;L;;;;;N;;;;;
+1196;HANGUL JUNGSEONG EU-EU;Lo;0;L;;;;;N;;;;;
+1197;HANGUL JUNGSEONG YI-U;Lo;0;L;;;;;N;;;;;
+1198;HANGUL JUNGSEONG I-A;Lo;0;L;;;;;N;;;;;
+1199;HANGUL JUNGSEONG I-YA;Lo;0;L;;;;;N;;;;;
+119A;HANGUL JUNGSEONG I-O;Lo;0;L;;;;;N;;;;;
+119B;HANGUL JUNGSEONG I-U;Lo;0;L;;;;;N;;;;;
+119C;HANGUL JUNGSEONG I-EU;Lo;0;L;;;;;N;;;;;
+119D;HANGUL JUNGSEONG I-ARAEA;Lo;0;L;;;;;N;;;;;
+119E;HANGUL JUNGSEONG ARAEA;Lo;0;L;;;;;N;;;;;
+119F;HANGUL JUNGSEONG ARAEA-EO;Lo;0;L;;;;;N;;;;;
+11A0;HANGUL JUNGSEONG ARAEA-U;Lo;0;L;;;;;N;;;;;
+11A1;HANGUL JUNGSEONG ARAEA-I;Lo;0;L;;;;;N;;;;;
+11A2;HANGUL JUNGSEONG SSANGARAEA;Lo;0;L;;;;;N;;;;;
+11A8;HANGUL JONGSEONG KIYEOK;Lo;0;L;;;;;N;;g *;;;
+11A9;HANGUL JONGSEONG SSANGKIYEOK;Lo;0;L;;;;;N;;gg *;;;
+11AA;HANGUL JONGSEONG KIYEOK-SIOS;Lo;0;L;;;;;N;;gs *;;;
+11AB;HANGUL JONGSEONG NIEUN;Lo;0;L;;;;;N;;n *;;;
+11AC;HANGUL JONGSEONG NIEUN-CIEUC;Lo;0;L;;;;;N;;nj *;;;
+11AD;HANGUL JONGSEONG NIEUN-HIEUH;Lo;0;L;;;;;N;;nh *;;;
+11AE;HANGUL JONGSEONG TIKEUT;Lo;0;L;;;;;N;;d *;;;
+11AF;HANGUL JONGSEONG RIEUL;Lo;0;L;;;;;N;;l *;;;
+11B0;HANGUL JONGSEONG RIEUL-KIYEOK;Lo;0;L;;;;;N;;lg *;;;
+11B1;HANGUL JONGSEONG RIEUL-MIEUM;Lo;0;L;;;;;N;;lm *;;;
+11B2;HANGUL JONGSEONG RIEUL-PIEUP;Lo;0;L;;;;;N;;lb *;;;
+11B3;HANGUL JONGSEONG RIEUL-SIOS;Lo;0;L;;;;;N;;ls *;;;
+11B4;HANGUL JONGSEONG RIEUL-THIEUTH;Lo;0;L;;;;;N;;lt *;;;
+11B5;HANGUL JONGSEONG RIEUL-PHIEUPH;Lo;0;L;;;;;N;;lp *;;;
+11B6;HANGUL JONGSEONG RIEUL-HIEUH;Lo;0;L;;;;;N;;lh *;;;
+11B7;HANGUL JONGSEONG MIEUM;Lo;0;L;;;;;N;;m *;;;
+11B8;HANGUL JONGSEONG PIEUP;Lo;0;L;;;;;N;;b *;;;
+11B9;HANGUL JONGSEONG PIEUP-SIOS;Lo;0;L;;;;;N;;bs *;;;
+11BA;HANGUL JONGSEONG SIOS;Lo;0;L;;;;;N;;s *;;;
+11BB;HANGUL JONGSEONG SSANGSIOS;Lo;0;L;;;;;N;;ss *;;;
+11BC;HANGUL JONGSEONG IEUNG;Lo;0;L;;;;;N;;ng *;;;
+11BD;HANGUL JONGSEONG CIEUC;Lo;0;L;;;;;N;;j *;;;
+11BE;HANGUL JONGSEONG CHIEUCH;Lo;0;L;;;;;N;;c *;;;
+11BF;HANGUL JONGSEONG KHIEUKH;Lo;0;L;;;;;N;;k *;;;
+11C0;HANGUL JONGSEONG THIEUTH;Lo;0;L;;;;;N;;t *;;;
+11C1;HANGUL JONGSEONG PHIEUPH;Lo;0;L;;;;;N;;p *;;;
+11C2;HANGUL JONGSEONG HIEUH;Lo;0;L;;;;;N;;h *;;;
+11C3;HANGUL JONGSEONG KIYEOK-RIEUL;Lo;0;L;;;;;N;;;;;
+11C4;HANGUL JONGSEONG KIYEOK-SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+11C5;HANGUL JONGSEONG NIEUN-KIYEOK;Lo;0;L;;;;;N;;;;;
+11C6;HANGUL JONGSEONG NIEUN-TIKEUT;Lo;0;L;;;;;N;;;;;
+11C7;HANGUL JONGSEONG NIEUN-SIOS;Lo;0;L;;;;;N;;;;;
+11C8;HANGUL JONGSEONG NIEUN-PANSIOS;Lo;0;L;;;;;N;;;;;
+11C9;HANGUL JONGSEONG NIEUN-THIEUTH;Lo;0;L;;;;;N;;;;;
+11CA;HANGUL JONGSEONG TIKEUT-KIYEOK;Lo;0;L;;;;;N;;;;;
+11CB;HANGUL JONGSEONG TIKEUT-RIEUL;Lo;0;L;;;;;N;;;;;
+11CC;HANGUL JONGSEONG RIEUL-KIYEOK-SIOS;Lo;0;L;;;;;N;;;;;
+11CD;HANGUL JONGSEONG RIEUL-NIEUN;Lo;0;L;;;;;N;;;;;
+11CE;HANGUL JONGSEONG RIEUL-TIKEUT;Lo;0;L;;;;;N;;;;;
+11CF;HANGUL JONGSEONG RIEUL-TIKEUT-HIEUH;Lo;0;L;;;;;N;;;;;
+11D0;HANGUL JONGSEONG SSANGRIEUL;Lo;0;L;;;;;N;;;;;
+11D1;HANGUL JONGSEONG RIEUL-MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+11D2;HANGUL JONGSEONG RIEUL-MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+11D3;HANGUL JONGSEONG RIEUL-PIEUP-SIOS;Lo;0;L;;;;;N;;;;;
+11D4;HANGUL JONGSEONG RIEUL-PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+11D5;HANGUL JONGSEONG RIEUL-KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+11D6;HANGUL JONGSEONG RIEUL-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+11D7;HANGUL JONGSEONG RIEUL-PANSIOS;Lo;0;L;;;;;N;;;;;
+11D8;HANGUL JONGSEONG RIEUL-KHIEUKH;Lo;0;L;;;;;N;;;;;
+11D9;HANGUL JONGSEONG RIEUL-YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+11DA;HANGUL JONGSEONG MIEUM-KIYEOK;Lo;0;L;;;;;N;;;;;
+11DB;HANGUL JONGSEONG MIEUM-RIEUL;Lo;0;L;;;;;N;;;;;
+11DC;HANGUL JONGSEONG MIEUM-PIEUP;Lo;0;L;;;;;N;;;;;
+11DD;HANGUL JONGSEONG MIEUM-SIOS;Lo;0;L;;;;;N;;;;;
+11DE;HANGUL JONGSEONG MIEUM-SSANGSIOS;Lo;0;L;;;;;N;;;;;
+11DF;HANGUL JONGSEONG MIEUM-PANSIOS;Lo;0;L;;;;;N;;;;;
+11E0;HANGUL JONGSEONG MIEUM-CHIEUCH;Lo;0;L;;;;;N;;;;;
+11E1;HANGUL JONGSEONG MIEUM-HIEUH;Lo;0;L;;;;;N;;;;;
+11E2;HANGUL JONGSEONG KAPYEOUNMIEUM;Lo;0;L;;;;;N;;;;;
+11E3;HANGUL JONGSEONG PIEUP-RIEUL;Lo;0;L;;;;;N;;;;;
+11E4;HANGUL JONGSEONG PIEUP-PHIEUPH;Lo;0;L;;;;;N;;;;;
+11E5;HANGUL JONGSEONG PIEUP-HIEUH;Lo;0;L;;;;;N;;;;;
+11E6;HANGUL JONGSEONG KAPYEOUNPIEUP;Lo;0;L;;;;;N;;;;;
+11E7;HANGUL JONGSEONG SIOS-KIYEOK;Lo;0;L;;;;;N;;;;;
+11E8;HANGUL JONGSEONG SIOS-TIKEUT;Lo;0;L;;;;;N;;;;;
+11E9;HANGUL JONGSEONG SIOS-RIEUL;Lo;0;L;;;;;N;;;;;
+11EA;HANGUL JONGSEONG SIOS-PIEUP;Lo;0;L;;;;;N;;;;;
+11EB;HANGUL JONGSEONG PANSIOS;Lo;0;L;;;;;N;;;;;
+11EC;HANGUL JONGSEONG IEUNG-KIYEOK;Lo;0;L;;;;;N;;;;;
+11ED;HANGUL JONGSEONG IEUNG-SSANGKIYEOK;Lo;0;L;;;;;N;;;;;
+11EE;HANGUL JONGSEONG SSANGIEUNG;Lo;0;L;;;;;N;;;;;
+11EF;HANGUL JONGSEONG IEUNG-KHIEUKH;Lo;0;L;;;;;N;;;;;
+11F0;HANGUL JONGSEONG YESIEUNG;Lo;0;L;;;;;N;;;;;
+11F1;HANGUL JONGSEONG YESIEUNG-SIOS;Lo;0;L;;;;;N;;;;;
+11F2;HANGUL JONGSEONG YESIEUNG-PANSIOS;Lo;0;L;;;;;N;;;;;
+11F3;HANGUL JONGSEONG PHIEUPH-PIEUP;Lo;0;L;;;;;N;;;;;
+11F4;HANGUL JONGSEONG KAPYEOUNPHIEUPH;Lo;0;L;;;;;N;;;;;
+11F5;HANGUL JONGSEONG HIEUH-NIEUN;Lo;0;L;;;;;N;;;;;
+11F6;HANGUL JONGSEONG HIEUH-RIEUL;Lo;0;L;;;;;N;;;;;
+11F7;HANGUL JONGSEONG HIEUH-MIEUM;Lo;0;L;;;;;N;;;;;
+11F8;HANGUL JONGSEONG HIEUH-PIEUP;Lo;0;L;;;;;N;;;;;
+11F9;HANGUL JONGSEONG YEORINHIEUH;Lo;0;L;;;;;N;;;;;
+1200;ETHIOPIC SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+1201;ETHIOPIC SYLLABLE HU;Lo;0;L;;;;;N;;;;;
+1202;ETHIOPIC SYLLABLE HI;Lo;0;L;;;;;N;;;;;
+1203;ETHIOPIC SYLLABLE HAA;Lo;0;L;;;;;N;;;;;
+1204;ETHIOPIC SYLLABLE HEE;Lo;0;L;;;;;N;;;;;
+1205;ETHIOPIC SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+1206;ETHIOPIC SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+1208;ETHIOPIC SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+1209;ETHIOPIC SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+120A;ETHIOPIC SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+120B;ETHIOPIC SYLLABLE LAA;Lo;0;L;;;;;N;;;;;
+120C;ETHIOPIC SYLLABLE LEE;Lo;0;L;;;;;N;;;;;
+120D;ETHIOPIC SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+120E;ETHIOPIC SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+120F;ETHIOPIC SYLLABLE LWA;Lo;0;L;;;;;N;;;;;
+1210;ETHIOPIC SYLLABLE HHA;Lo;0;L;;;;;N;;;;;
+1211;ETHIOPIC SYLLABLE HHU;Lo;0;L;;;;;N;;;;;
+1212;ETHIOPIC SYLLABLE HHI;Lo;0;L;;;;;N;;;;;
+1213;ETHIOPIC SYLLABLE HHAA;Lo;0;L;;;;;N;;;;;
+1214;ETHIOPIC SYLLABLE HHEE;Lo;0;L;;;;;N;;;;;
+1215;ETHIOPIC SYLLABLE HHE;Lo;0;L;;;;;N;;;;;
+1216;ETHIOPIC SYLLABLE HHO;Lo;0;L;;;;;N;;;;;
+1217;ETHIOPIC SYLLABLE HHWA;Lo;0;L;;;;;N;;;;;
+1218;ETHIOPIC SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+1219;ETHIOPIC SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+121A;ETHIOPIC SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+121B;ETHIOPIC SYLLABLE MAA;Lo;0;L;;;;;N;;;;;
+121C;ETHIOPIC SYLLABLE MEE;Lo;0;L;;;;;N;;;;;
+121D;ETHIOPIC SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+121E;ETHIOPIC SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+121F;ETHIOPIC SYLLABLE MWA;Lo;0;L;;;;;N;;;;;
+1220;ETHIOPIC SYLLABLE SZA;Lo;0;L;;;;;N;;;;;
+1221;ETHIOPIC SYLLABLE SZU;Lo;0;L;;;;;N;;;;;
+1222;ETHIOPIC SYLLABLE SZI;Lo;0;L;;;;;N;;;;;
+1223;ETHIOPIC SYLLABLE SZAA;Lo;0;L;;;;;N;;;;;
+1224;ETHIOPIC SYLLABLE SZEE;Lo;0;L;;;;;N;;;;;
+1225;ETHIOPIC SYLLABLE SZE;Lo;0;L;;;;;N;;;;;
+1226;ETHIOPIC SYLLABLE SZO;Lo;0;L;;;;;N;;;;;
+1227;ETHIOPIC SYLLABLE SZWA;Lo;0;L;;;;;N;;;;;
+1228;ETHIOPIC SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+1229;ETHIOPIC SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+122A;ETHIOPIC SYLLABLE RI;Lo;0;L;;;;;N;;;;;
+122B;ETHIOPIC SYLLABLE RAA;Lo;0;L;;;;;N;;;;;
+122C;ETHIOPIC SYLLABLE REE;Lo;0;L;;;;;N;;;;;
+122D;ETHIOPIC SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+122E;ETHIOPIC SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+122F;ETHIOPIC SYLLABLE RWA;Lo;0;L;;;;;N;;;;;
+1230;ETHIOPIC SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+1231;ETHIOPIC SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+1232;ETHIOPIC SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+1233;ETHIOPIC SYLLABLE SAA;Lo;0;L;;;;;N;;;;;
+1234;ETHIOPIC SYLLABLE SEE;Lo;0;L;;;;;N;;;;;
+1235;ETHIOPIC SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+1236;ETHIOPIC SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+1237;ETHIOPIC SYLLABLE SWA;Lo;0;L;;;;;N;;;;;
+1238;ETHIOPIC SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+1239;ETHIOPIC SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+123A;ETHIOPIC SYLLABLE SHI;Lo;0;L;;;;;N;;;;;
+123B;ETHIOPIC SYLLABLE SHAA;Lo;0;L;;;;;N;;;;;
+123C;ETHIOPIC SYLLABLE SHEE;Lo;0;L;;;;;N;;;;;
+123D;ETHIOPIC SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+123E;ETHIOPIC SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+123F;ETHIOPIC SYLLABLE SHWA;Lo;0;L;;;;;N;;;;;
+1240;ETHIOPIC SYLLABLE QA;Lo;0;L;;;;;N;;;;;
+1241;ETHIOPIC SYLLABLE QU;Lo;0;L;;;;;N;;;;;
+1242;ETHIOPIC SYLLABLE QI;Lo;0;L;;;;;N;;;;;
+1243;ETHIOPIC SYLLABLE QAA;Lo;0;L;;;;;N;;;;;
+1244;ETHIOPIC SYLLABLE QEE;Lo;0;L;;;;;N;;;;;
+1245;ETHIOPIC SYLLABLE QE;Lo;0;L;;;;;N;;;;;
+1246;ETHIOPIC SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+1248;ETHIOPIC SYLLABLE QWA;Lo;0;L;;;;;N;;;;;
+124A;ETHIOPIC SYLLABLE QWI;Lo;0;L;;;;;N;;;;;
+124B;ETHIOPIC SYLLABLE QWAA;Lo;0;L;;;;;N;;;;;
+124C;ETHIOPIC SYLLABLE QWEE;Lo;0;L;;;;;N;;;;;
+124D;ETHIOPIC SYLLABLE QWE;Lo;0;L;;;;;N;;;;;
+1250;ETHIOPIC SYLLABLE QHA;Lo;0;L;;;;;N;;;;;
+1251;ETHIOPIC SYLLABLE QHU;Lo;0;L;;;;;N;;;;;
+1252;ETHIOPIC SYLLABLE QHI;Lo;0;L;;;;;N;;;;;
+1253;ETHIOPIC SYLLABLE QHAA;Lo;0;L;;;;;N;;;;;
+1254;ETHIOPIC SYLLABLE QHEE;Lo;0;L;;;;;N;;;;;
+1255;ETHIOPIC SYLLABLE QHE;Lo;0;L;;;;;N;;;;;
+1256;ETHIOPIC SYLLABLE QHO;Lo;0;L;;;;;N;;;;;
+1258;ETHIOPIC SYLLABLE QHWA;Lo;0;L;;;;;N;;;;;
+125A;ETHIOPIC SYLLABLE QHWI;Lo;0;L;;;;;N;;;;;
+125B;ETHIOPIC SYLLABLE QHWAA;Lo;0;L;;;;;N;;;;;
+125C;ETHIOPIC SYLLABLE QHWEE;Lo;0;L;;;;;N;;;;;
+125D;ETHIOPIC SYLLABLE QHWE;Lo;0;L;;;;;N;;;;;
+1260;ETHIOPIC SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+1261;ETHIOPIC SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+1262;ETHIOPIC SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+1263;ETHIOPIC SYLLABLE BAA;Lo;0;L;;;;;N;;;;;
+1264;ETHIOPIC SYLLABLE BEE;Lo;0;L;;;;;N;;;;;
+1265;ETHIOPIC SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+1266;ETHIOPIC SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+1267;ETHIOPIC SYLLABLE BWA;Lo;0;L;;;;;N;;;;;
+1268;ETHIOPIC SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+1269;ETHIOPIC SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+126A;ETHIOPIC SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+126B;ETHIOPIC SYLLABLE VAA;Lo;0;L;;;;;N;;;;;
+126C;ETHIOPIC SYLLABLE VEE;Lo;0;L;;;;;N;;;;;
+126D;ETHIOPIC SYLLABLE VE;Lo;0;L;;;;;N;;;;;
+126E;ETHIOPIC SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+126F;ETHIOPIC SYLLABLE VWA;Lo;0;L;;;;;N;;;;;
+1270;ETHIOPIC SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+1271;ETHIOPIC SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+1272;ETHIOPIC SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+1273;ETHIOPIC SYLLABLE TAA;Lo;0;L;;;;;N;;;;;
+1274;ETHIOPIC SYLLABLE TEE;Lo;0;L;;;;;N;;;;;
+1275;ETHIOPIC SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+1276;ETHIOPIC SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+1277;ETHIOPIC SYLLABLE TWA;Lo;0;L;;;;;N;;;;;
+1278;ETHIOPIC SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+1279;ETHIOPIC SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+127A;ETHIOPIC SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+127B;ETHIOPIC SYLLABLE CAA;Lo;0;L;;;;;N;;;;;
+127C;ETHIOPIC SYLLABLE CEE;Lo;0;L;;;;;N;;;;;
+127D;ETHIOPIC SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+127E;ETHIOPIC SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+127F;ETHIOPIC SYLLABLE CWA;Lo;0;L;;;;;N;;;;;
+1280;ETHIOPIC SYLLABLE XA;Lo;0;L;;;;;N;;;;;
+1281;ETHIOPIC SYLLABLE XU;Lo;0;L;;;;;N;;;;;
+1282;ETHIOPIC SYLLABLE XI;Lo;0;L;;;;;N;;;;;
+1283;ETHIOPIC SYLLABLE XAA;Lo;0;L;;;;;N;;;;;
+1284;ETHIOPIC SYLLABLE XEE;Lo;0;L;;;;;N;;;;;
+1285;ETHIOPIC SYLLABLE XE;Lo;0;L;;;;;N;;;;;
+1286;ETHIOPIC SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+1288;ETHIOPIC SYLLABLE XWA;Lo;0;L;;;;;N;;;;;
+128A;ETHIOPIC SYLLABLE XWI;Lo;0;L;;;;;N;;;;;
+128B;ETHIOPIC SYLLABLE XWAA;Lo;0;L;;;;;N;;;;;
+128C;ETHIOPIC SYLLABLE XWEE;Lo;0;L;;;;;N;;;;;
+128D;ETHIOPIC SYLLABLE XWE;Lo;0;L;;;;;N;;;;;
+1290;ETHIOPIC SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+1291;ETHIOPIC SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+1292;ETHIOPIC SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+1293;ETHIOPIC SYLLABLE NAA;Lo;0;L;;;;;N;;;;;
+1294;ETHIOPIC SYLLABLE NEE;Lo;0;L;;;;;N;;;;;
+1295;ETHIOPIC SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+1296;ETHIOPIC SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+1297;ETHIOPIC SYLLABLE NWA;Lo;0;L;;;;;N;;;;;
+1298;ETHIOPIC SYLLABLE NYA;Lo;0;L;;;;;N;;;;;
+1299;ETHIOPIC SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+129A;ETHIOPIC SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+129B;ETHIOPIC SYLLABLE NYAA;Lo;0;L;;;;;N;;;;;
+129C;ETHIOPIC SYLLABLE NYEE;Lo;0;L;;;;;N;;;;;
+129D;ETHIOPIC SYLLABLE NYE;Lo;0;L;;;;;N;;;;;
+129E;ETHIOPIC SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+129F;ETHIOPIC SYLLABLE NYWA;Lo;0;L;;;;;N;;;;;
+12A0;ETHIOPIC SYLLABLE GLOTTAL A;Lo;0;L;;;;;N;;;;;
+12A1;ETHIOPIC SYLLABLE GLOTTAL U;Lo;0;L;;;;;N;;;;;
+12A2;ETHIOPIC SYLLABLE GLOTTAL I;Lo;0;L;;;;;N;;;;;
+12A3;ETHIOPIC SYLLABLE GLOTTAL AA;Lo;0;L;;;;;N;;;;;
+12A4;ETHIOPIC SYLLABLE GLOTTAL EE;Lo;0;L;;;;;N;;;;;
+12A5;ETHIOPIC SYLLABLE GLOTTAL E;Lo;0;L;;;;;N;;;;;
+12A6;ETHIOPIC SYLLABLE GLOTTAL O;Lo;0;L;;;;;N;;;;;
+12A7;ETHIOPIC SYLLABLE GLOTTAL WA;Lo;0;L;;;;;N;;;;;
+12A8;ETHIOPIC SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+12A9;ETHIOPIC SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+12AA;ETHIOPIC SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+12AB;ETHIOPIC SYLLABLE KAA;Lo;0;L;;;;;N;;;;;
+12AC;ETHIOPIC SYLLABLE KEE;Lo;0;L;;;;;N;;;;;
+12AD;ETHIOPIC SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+12AE;ETHIOPIC SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+12B0;ETHIOPIC SYLLABLE KWA;Lo;0;L;;;;;N;;;;;
+12B2;ETHIOPIC SYLLABLE KWI;Lo;0;L;;;;;N;;;;;
+12B3;ETHIOPIC SYLLABLE KWAA;Lo;0;L;;;;;N;;;;;
+12B4;ETHIOPIC SYLLABLE KWEE;Lo;0;L;;;;;N;;;;;
+12B5;ETHIOPIC SYLLABLE KWE;Lo;0;L;;;;;N;;;;;
+12B8;ETHIOPIC SYLLABLE KXA;Lo;0;L;;;;;N;;;;;
+12B9;ETHIOPIC SYLLABLE KXU;Lo;0;L;;;;;N;;;;;
+12BA;ETHIOPIC SYLLABLE KXI;Lo;0;L;;;;;N;;;;;
+12BB;ETHIOPIC SYLLABLE KXAA;Lo;0;L;;;;;N;;;;;
+12BC;ETHIOPIC SYLLABLE KXEE;Lo;0;L;;;;;N;;;;;
+12BD;ETHIOPIC SYLLABLE KXE;Lo;0;L;;;;;N;;;;;
+12BE;ETHIOPIC SYLLABLE KXO;Lo;0;L;;;;;N;;;;;
+12C0;ETHIOPIC SYLLABLE KXWA;Lo;0;L;;;;;N;;;;;
+12C2;ETHIOPIC SYLLABLE KXWI;Lo;0;L;;;;;N;;;;;
+12C3;ETHIOPIC SYLLABLE KXWAA;Lo;0;L;;;;;N;;;;;
+12C4;ETHIOPIC SYLLABLE KXWEE;Lo;0;L;;;;;N;;;;;
+12C5;ETHIOPIC SYLLABLE KXWE;Lo;0;L;;;;;N;;;;;
+12C8;ETHIOPIC SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+12C9;ETHIOPIC SYLLABLE WU;Lo;0;L;;;;;N;;;;;
+12CA;ETHIOPIC SYLLABLE WI;Lo;0;L;;;;;N;;;;;
+12CB;ETHIOPIC SYLLABLE WAA;Lo;0;L;;;;;N;;;;;
+12CC;ETHIOPIC SYLLABLE WEE;Lo;0;L;;;;;N;;;;;
+12CD;ETHIOPIC SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+12CE;ETHIOPIC SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+12D0;ETHIOPIC SYLLABLE PHARYNGEAL A;Lo;0;L;;;;;N;;;;;
+12D1;ETHIOPIC SYLLABLE PHARYNGEAL U;Lo;0;L;;;;;N;;;;;
+12D2;ETHIOPIC SYLLABLE PHARYNGEAL I;Lo;0;L;;;;;N;;;;;
+12D3;ETHIOPIC SYLLABLE PHARYNGEAL AA;Lo;0;L;;;;;N;;;;;
+12D4;ETHIOPIC SYLLABLE PHARYNGEAL EE;Lo;0;L;;;;;N;;;;;
+12D5;ETHIOPIC SYLLABLE PHARYNGEAL E;Lo;0;L;;;;;N;;;;;
+12D6;ETHIOPIC SYLLABLE PHARYNGEAL O;Lo;0;L;;;;;N;;;;;
+12D8;ETHIOPIC SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+12D9;ETHIOPIC SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+12DA;ETHIOPIC SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+12DB;ETHIOPIC SYLLABLE ZAA;Lo;0;L;;;;;N;;;;;
+12DC;ETHIOPIC SYLLABLE ZEE;Lo;0;L;;;;;N;;;;;
+12DD;ETHIOPIC SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+12DE;ETHIOPIC SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+12DF;ETHIOPIC SYLLABLE ZWA;Lo;0;L;;;;;N;;;;;
+12E0;ETHIOPIC SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+12E1;ETHIOPIC SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+12E2;ETHIOPIC SYLLABLE ZHI;Lo;0;L;;;;;N;;;;;
+12E3;ETHIOPIC SYLLABLE ZHAA;Lo;0;L;;;;;N;;;;;
+12E4;ETHIOPIC SYLLABLE ZHEE;Lo;0;L;;;;;N;;;;;
+12E5;ETHIOPIC SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+12E6;ETHIOPIC SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+12E7;ETHIOPIC SYLLABLE ZHWA;Lo;0;L;;;;;N;;;;;
+12E8;ETHIOPIC SYLLABLE YA;Lo;0;L;;;;;N;;;;;
+12E9;ETHIOPIC SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+12EA;ETHIOPIC SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+12EB;ETHIOPIC SYLLABLE YAA;Lo;0;L;;;;;N;;;;;
+12EC;ETHIOPIC SYLLABLE YEE;Lo;0;L;;;;;N;;;;;
+12ED;ETHIOPIC SYLLABLE YE;Lo;0;L;;;;;N;;;;;
+12EE;ETHIOPIC SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+12F0;ETHIOPIC SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+12F1;ETHIOPIC SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+12F2;ETHIOPIC SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+12F3;ETHIOPIC SYLLABLE DAA;Lo;0;L;;;;;N;;;;;
+12F4;ETHIOPIC SYLLABLE DEE;Lo;0;L;;;;;N;;;;;
+12F5;ETHIOPIC SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+12F6;ETHIOPIC SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+12F7;ETHIOPIC SYLLABLE DWA;Lo;0;L;;;;;N;;;;;
+12F8;ETHIOPIC SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
+12F9;ETHIOPIC SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
+12FA;ETHIOPIC SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
+12FB;ETHIOPIC SYLLABLE DDAA;Lo;0;L;;;;;N;;;;;
+12FC;ETHIOPIC SYLLABLE DDEE;Lo;0;L;;;;;N;;;;;
+12FD;ETHIOPIC SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
+12FE;ETHIOPIC SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
+12FF;ETHIOPIC SYLLABLE DDWA;Lo;0;L;;;;;N;;;;;
+1300;ETHIOPIC SYLLABLE JA;Lo;0;L;;;;;N;;;;;
+1301;ETHIOPIC SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+1302;ETHIOPIC SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+1303;ETHIOPIC SYLLABLE JAA;Lo;0;L;;;;;N;;;;;
+1304;ETHIOPIC SYLLABLE JEE;Lo;0;L;;;;;N;;;;;
+1305;ETHIOPIC SYLLABLE JE;Lo;0;L;;;;;N;;;;;
+1306;ETHIOPIC SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+1307;ETHIOPIC SYLLABLE JWA;Lo;0;L;;;;;N;;;;;
+1308;ETHIOPIC SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+1309;ETHIOPIC SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+130A;ETHIOPIC SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+130B;ETHIOPIC SYLLABLE GAA;Lo;0;L;;;;;N;;;;;
+130C;ETHIOPIC SYLLABLE GEE;Lo;0;L;;;;;N;;;;;
+130D;ETHIOPIC SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+130E;ETHIOPIC SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+1310;ETHIOPIC SYLLABLE GWA;Lo;0;L;;;;;N;;;;;
+1312;ETHIOPIC SYLLABLE GWI;Lo;0;L;;;;;N;;;;;
+1313;ETHIOPIC SYLLABLE GWAA;Lo;0;L;;;;;N;;;;;
+1314;ETHIOPIC SYLLABLE GWEE;Lo;0;L;;;;;N;;;;;
+1315;ETHIOPIC SYLLABLE GWE;Lo;0;L;;;;;N;;;;;
+1318;ETHIOPIC SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
+1319;ETHIOPIC SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
+131A;ETHIOPIC SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
+131B;ETHIOPIC SYLLABLE GGAA;Lo;0;L;;;;;N;;;;;
+131C;ETHIOPIC SYLLABLE GGEE;Lo;0;L;;;;;N;;;;;
+131D;ETHIOPIC SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
+131E;ETHIOPIC SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+1320;ETHIOPIC SYLLABLE THA;Lo;0;L;;;;;N;;;;;
+1321;ETHIOPIC SYLLABLE THU;Lo;0;L;;;;;N;;;;;
+1322;ETHIOPIC SYLLABLE THI;Lo;0;L;;;;;N;;;;;
+1323;ETHIOPIC SYLLABLE THAA;Lo;0;L;;;;;N;;;;;
+1324;ETHIOPIC SYLLABLE THEE;Lo;0;L;;;;;N;;;;;
+1325;ETHIOPIC SYLLABLE THE;Lo;0;L;;;;;N;;;;;
+1326;ETHIOPIC SYLLABLE THO;Lo;0;L;;;;;N;;;;;
+1327;ETHIOPIC SYLLABLE THWA;Lo;0;L;;;;;N;;;;;
+1328;ETHIOPIC SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
+1329;ETHIOPIC SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
+132A;ETHIOPIC SYLLABLE CHI;Lo;0;L;;;;;N;;;;;
+132B;ETHIOPIC SYLLABLE CHAA;Lo;0;L;;;;;N;;;;;
+132C;ETHIOPIC SYLLABLE CHEE;Lo;0;L;;;;;N;;;;;
+132D;ETHIOPIC SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
+132E;ETHIOPIC SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
+132F;ETHIOPIC SYLLABLE CHWA;Lo;0;L;;;;;N;;;;;
+1330;ETHIOPIC SYLLABLE PHA;Lo;0;L;;;;;N;;;;;
+1331;ETHIOPIC SYLLABLE PHU;Lo;0;L;;;;;N;;;;;
+1332;ETHIOPIC SYLLABLE PHI;Lo;0;L;;;;;N;;;;;
+1333;ETHIOPIC SYLLABLE PHAA;Lo;0;L;;;;;N;;;;;
+1334;ETHIOPIC SYLLABLE PHEE;Lo;0;L;;;;;N;;;;;
+1335;ETHIOPIC SYLLABLE PHE;Lo;0;L;;;;;N;;;;;
+1336;ETHIOPIC SYLLABLE PHO;Lo;0;L;;;;;N;;;;;
+1337;ETHIOPIC SYLLABLE PHWA;Lo;0;L;;;;;N;;;;;
+1338;ETHIOPIC SYLLABLE TSA;Lo;0;L;;;;;N;;;;;
+1339;ETHIOPIC SYLLABLE TSU;Lo;0;L;;;;;N;;;;;
+133A;ETHIOPIC SYLLABLE TSI;Lo;0;L;;;;;N;;;;;
+133B;ETHIOPIC SYLLABLE TSAA;Lo;0;L;;;;;N;;;;;
+133C;ETHIOPIC SYLLABLE TSEE;Lo;0;L;;;;;N;;;;;
+133D;ETHIOPIC SYLLABLE TSE;Lo;0;L;;;;;N;;;;;
+133E;ETHIOPIC SYLLABLE TSO;Lo;0;L;;;;;N;;;;;
+133F;ETHIOPIC SYLLABLE TSWA;Lo;0;L;;;;;N;;;;;
+1340;ETHIOPIC SYLLABLE TZA;Lo;0;L;;;;;N;;;;;
+1341;ETHIOPIC SYLLABLE TZU;Lo;0;L;;;;;N;;;;;
+1342;ETHIOPIC SYLLABLE TZI;Lo;0;L;;;;;N;;;;;
+1343;ETHIOPIC SYLLABLE TZAA;Lo;0;L;;;;;N;;;;;
+1344;ETHIOPIC SYLLABLE TZEE;Lo;0;L;;;;;N;;;;;
+1345;ETHIOPIC SYLLABLE TZE;Lo;0;L;;;;;N;;;;;
+1346;ETHIOPIC SYLLABLE TZO;Lo;0;L;;;;;N;;;;;
+1348;ETHIOPIC SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+1349;ETHIOPIC SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+134A;ETHIOPIC SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+134B;ETHIOPIC SYLLABLE FAA;Lo;0;L;;;;;N;;;;;
+134C;ETHIOPIC SYLLABLE FEE;Lo;0;L;;;;;N;;;;;
+134D;ETHIOPIC SYLLABLE FE;Lo;0;L;;;;;N;;;;;
+134E;ETHIOPIC SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+134F;ETHIOPIC SYLLABLE FWA;Lo;0;L;;;;;N;;;;;
+1350;ETHIOPIC SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+1351;ETHIOPIC SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+1352;ETHIOPIC SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+1353;ETHIOPIC SYLLABLE PAA;Lo;0;L;;;;;N;;;;;
+1354;ETHIOPIC SYLLABLE PEE;Lo;0;L;;;;;N;;;;;
+1355;ETHIOPIC SYLLABLE PE;Lo;0;L;;;;;N;;;;;
+1356;ETHIOPIC SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+1357;ETHIOPIC SYLLABLE PWA;Lo;0;L;;;;;N;;;;;
+1358;ETHIOPIC SYLLABLE RYA;Lo;0;L;;;;;N;;;;;
+1359;ETHIOPIC SYLLABLE MYA;Lo;0;L;;;;;N;;;;;
+135A;ETHIOPIC SYLLABLE FYA;Lo;0;L;;;;;N;;;;;
+1361;ETHIOPIC WORDSPACE;Po;0;L;;;;;N;;;;;
+1362;ETHIOPIC FULL STOP;Po;0;L;;;;;N;;;;;
+1363;ETHIOPIC COMMA;Po;0;L;;;;;N;;;;;
+1364;ETHIOPIC SEMICOLON;Po;0;L;;;;;N;;;;;
+1365;ETHIOPIC COLON;Po;0;L;;;;;N;;;;;
+1366;ETHIOPIC PREFACE COLON;Po;0;L;;;;;N;;;;;
+1367;ETHIOPIC QUESTION MARK;Po;0;L;;;;;N;;;;;
+1368;ETHIOPIC PARAGRAPH SEPARATOR;Po;0;L;;;;;N;;;;;
+1369;ETHIOPIC DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+136A;ETHIOPIC DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+136B;ETHIOPIC DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+136C;ETHIOPIC DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+136D;ETHIOPIC DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+136E;ETHIOPIC DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+136F;ETHIOPIC DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1370;ETHIOPIC DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1371;ETHIOPIC DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1372;ETHIOPIC NUMBER TEN;No;0;L;;;;10;N;;;;;
+1373;ETHIOPIC NUMBER TWENTY;No;0;L;;;;20;N;;;;;
+1374;ETHIOPIC NUMBER THIRTY;No;0;L;;;;30;N;;;;;
+1375;ETHIOPIC NUMBER FORTY;No;0;L;;;;40;N;;;;;
+1376;ETHIOPIC NUMBER FIFTY;No;0;L;;;;50;N;;;;;
+1377;ETHIOPIC NUMBER SIXTY;No;0;L;;;;60;N;;;;;
+1378;ETHIOPIC NUMBER SEVENTY;No;0;L;;;;70;N;;;;;
+1379;ETHIOPIC NUMBER EIGHTY;No;0;L;;;;80;N;;;;;
+137A;ETHIOPIC NUMBER NINETY;No;0;L;;;;90;N;;;;;
+137B;ETHIOPIC NUMBER HUNDRED;No;0;L;;;;100;N;;;;;
+137C;ETHIOPIC NUMBER TEN THOUSAND;No;0;L;;;;10000;N;;;;;
+13A0;CHEROKEE LETTER A;Lo;0;L;;;;;N;;;;;
+13A1;CHEROKEE LETTER E;Lo;0;L;;;;;N;;;;;
+13A2;CHEROKEE LETTER I;Lo;0;L;;;;;N;;;;;
+13A3;CHEROKEE LETTER O;Lo;0;L;;;;;N;;;;;
+13A4;CHEROKEE LETTER U;Lo;0;L;;;;;N;;;;;
+13A5;CHEROKEE LETTER V;Lo;0;L;;;;;N;;;;;
+13A6;CHEROKEE LETTER GA;Lo;0;L;;;;;N;;;;;
+13A7;CHEROKEE LETTER KA;Lo;0;L;;;;;N;;;;;
+13A8;CHEROKEE LETTER GE;Lo;0;L;;;;;N;;;;;
+13A9;CHEROKEE LETTER GI;Lo;0;L;;;;;N;;;;;
+13AA;CHEROKEE LETTER GO;Lo;0;L;;;;;N;;;;;
+13AB;CHEROKEE LETTER GU;Lo;0;L;;;;;N;;;;;
+13AC;CHEROKEE LETTER GV;Lo;0;L;;;;;N;;;;;
+13AD;CHEROKEE LETTER HA;Lo;0;L;;;;;N;;;;;
+13AE;CHEROKEE LETTER HE;Lo;0;L;;;;;N;;;;;
+13AF;CHEROKEE LETTER HI;Lo;0;L;;;;;N;;;;;
+13B0;CHEROKEE LETTER HO;Lo;0;L;;;;;N;;;;;
+13B1;CHEROKEE LETTER HU;Lo;0;L;;;;;N;;;;;
+13B2;CHEROKEE LETTER HV;Lo;0;L;;;;;N;;;;;
+13B3;CHEROKEE LETTER LA;Lo;0;L;;;;;N;;;;;
+13B4;CHEROKEE LETTER LE;Lo;0;L;;;;;N;;;;;
+13B5;CHEROKEE LETTER LI;Lo;0;L;;;;;N;;;;;
+13B6;CHEROKEE LETTER LO;Lo;0;L;;;;;N;;;;;
+13B7;CHEROKEE LETTER LU;Lo;0;L;;;;;N;;;;;
+13B8;CHEROKEE LETTER LV;Lo;0;L;;;;;N;;;;;
+13B9;CHEROKEE LETTER MA;Lo;0;L;;;;;N;;;;;
+13BA;CHEROKEE LETTER ME;Lo;0;L;;;;;N;;;;;
+13BB;CHEROKEE LETTER MI;Lo;0;L;;;;;N;;;;;
+13BC;CHEROKEE LETTER MO;Lo;0;L;;;;;N;;;;;
+13BD;CHEROKEE LETTER MU;Lo;0;L;;;;;N;;;;;
+13BE;CHEROKEE LETTER NA;Lo;0;L;;;;;N;;;;;
+13BF;CHEROKEE LETTER HNA;Lo;0;L;;;;;N;;;;;
+13C0;CHEROKEE LETTER NAH;Lo;0;L;;;;;N;;;;;
+13C1;CHEROKEE LETTER NE;Lo;0;L;;;;;N;;;;;
+13C2;CHEROKEE LETTER NI;Lo;0;L;;;;;N;;;;;
+13C3;CHEROKEE LETTER NO;Lo;0;L;;;;;N;;;;;
+13C4;CHEROKEE LETTER NU;Lo;0;L;;;;;N;;;;;
+13C5;CHEROKEE LETTER NV;Lo;0;L;;;;;N;;;;;
+13C6;CHEROKEE LETTER QUA;Lo;0;L;;;;;N;;;;;
+13C7;CHEROKEE LETTER QUE;Lo;0;L;;;;;N;;;;;
+13C8;CHEROKEE LETTER QUI;Lo;0;L;;;;;N;;;;;
+13C9;CHEROKEE LETTER QUO;Lo;0;L;;;;;N;;;;;
+13CA;CHEROKEE LETTER QUU;Lo;0;L;;;;;N;;;;;
+13CB;CHEROKEE LETTER QUV;Lo;0;L;;;;;N;;;;;
+13CC;CHEROKEE LETTER SA;Lo;0;L;;;;;N;;;;;
+13CD;CHEROKEE LETTER S;Lo;0;L;;;;;N;;;;;
+13CE;CHEROKEE LETTER SE;Lo;0;L;;;;;N;;;;;
+13CF;CHEROKEE LETTER SI;Lo;0;L;;;;;N;;;;;
+13D0;CHEROKEE LETTER SO;Lo;0;L;;;;;N;;;;;
+13D1;CHEROKEE LETTER SU;Lo;0;L;;;;;N;;;;;
+13D2;CHEROKEE LETTER SV;Lo;0;L;;;;;N;;;;;
+13D3;CHEROKEE LETTER DA;Lo;0;L;;;;;N;;;;;
+13D4;CHEROKEE LETTER TA;Lo;0;L;;;;;N;;;;;
+13D5;CHEROKEE LETTER DE;Lo;0;L;;;;;N;;;;;
+13D6;CHEROKEE LETTER TE;Lo;0;L;;;;;N;;;;;
+13D7;CHEROKEE LETTER DI;Lo;0;L;;;;;N;;;;;
+13D8;CHEROKEE LETTER TI;Lo;0;L;;;;;N;;;;;
+13D9;CHEROKEE LETTER DO;Lo;0;L;;;;;N;;;;;
+13DA;CHEROKEE LETTER DU;Lo;0;L;;;;;N;;;;;
+13DB;CHEROKEE LETTER DV;Lo;0;L;;;;;N;;;;;
+13DC;CHEROKEE LETTER DLA;Lo;0;L;;;;;N;;;;;
+13DD;CHEROKEE LETTER TLA;Lo;0;L;;;;;N;;;;;
+13DE;CHEROKEE LETTER TLE;Lo;0;L;;;;;N;;;;;
+13DF;CHEROKEE LETTER TLI;Lo;0;L;;;;;N;;;;;
+13E0;CHEROKEE LETTER TLO;Lo;0;L;;;;;N;;;;;
+13E1;CHEROKEE LETTER TLU;Lo;0;L;;;;;N;;;;;
+13E2;CHEROKEE LETTER TLV;Lo;0;L;;;;;N;;;;;
+13E3;CHEROKEE LETTER TSA;Lo;0;L;;;;;N;;;;;
+13E4;CHEROKEE LETTER TSE;Lo;0;L;;;;;N;;;;;
+13E5;CHEROKEE LETTER TSI;Lo;0;L;;;;;N;;;;;
+13E6;CHEROKEE LETTER TSO;Lo;0;L;;;;;N;;;;;
+13E7;CHEROKEE LETTER TSU;Lo;0;L;;;;;N;;;;;
+13E8;CHEROKEE LETTER TSV;Lo;0;L;;;;;N;;;;;
+13E9;CHEROKEE LETTER WA;Lo;0;L;;;;;N;;;;;
+13EA;CHEROKEE LETTER WE;Lo;0;L;;;;;N;;;;;
+13EB;CHEROKEE LETTER WI;Lo;0;L;;;;;N;;;;;
+13EC;CHEROKEE LETTER WO;Lo;0;L;;;;;N;;;;;
+13ED;CHEROKEE LETTER WU;Lo;0;L;;;;;N;;;;;
+13EE;CHEROKEE LETTER WV;Lo;0;L;;;;;N;;;;;
+13EF;CHEROKEE LETTER YA;Lo;0;L;;;;;N;;;;;
+13F0;CHEROKEE LETTER YE;Lo;0;L;;;;;N;;;;;
+13F1;CHEROKEE LETTER YI;Lo;0;L;;;;;N;;;;;
+13F2;CHEROKEE LETTER YO;Lo;0;L;;;;;N;;;;;
+13F3;CHEROKEE LETTER YU;Lo;0;L;;;;;N;;;;;
+13F4;CHEROKEE LETTER YV;Lo;0;L;;;;;N;;;;;
+1401;CANADIAN SYLLABICS E;Lo;0;L;;;;;N;;;;;
+1402;CANADIAN SYLLABICS AAI;Lo;0;L;;;;;N;;;;;
+1403;CANADIAN SYLLABICS I;Lo;0;L;;;;;N;;;;;
+1404;CANADIAN SYLLABICS II;Lo;0;L;;;;;N;;;;;
+1405;CANADIAN SYLLABICS O;Lo;0;L;;;;;N;;;;;
+1406;CANADIAN SYLLABICS OO;Lo;0;L;;;;;N;;;;;
+1407;CANADIAN SYLLABICS Y-CREE OO;Lo;0;L;;;;;N;;;;;
+1408;CANADIAN SYLLABICS CARRIER EE;Lo;0;L;;;;;N;;;;;
+1409;CANADIAN SYLLABICS CARRIER I;Lo;0;L;;;;;N;;;;;
+140A;CANADIAN SYLLABICS A;Lo;0;L;;;;;N;;;;;
+140B;CANADIAN SYLLABICS AA;Lo;0;L;;;;;N;;;;;
+140C;CANADIAN SYLLABICS WE;Lo;0;L;;;;;N;;;;;
+140D;CANADIAN SYLLABICS WEST-CREE WE;Lo;0;L;;;;;N;;;;;
+140E;CANADIAN SYLLABICS WI;Lo;0;L;;;;;N;;;;;
+140F;CANADIAN SYLLABICS WEST-CREE WI;Lo;0;L;;;;;N;;;;;
+1410;CANADIAN SYLLABICS WII;Lo;0;L;;;;;N;;;;;
+1411;CANADIAN SYLLABICS WEST-CREE WII;Lo;0;L;;;;;N;;;;;
+1412;CANADIAN SYLLABICS WO;Lo;0;L;;;;;N;;;;;
+1413;CANADIAN SYLLABICS WEST-CREE WO;Lo;0;L;;;;;N;;;;;
+1414;CANADIAN SYLLABICS WOO;Lo;0;L;;;;;N;;;;;
+1415;CANADIAN SYLLABICS WEST-CREE WOO;Lo;0;L;;;;;N;;;;;
+1416;CANADIAN SYLLABICS NASKAPI WOO;Lo;0;L;;;;;N;;;;;
+1417;CANADIAN SYLLABICS WA;Lo;0;L;;;;;N;;;;;
+1418;CANADIAN SYLLABICS WEST-CREE WA;Lo;0;L;;;;;N;;;;;
+1419;CANADIAN SYLLABICS WAA;Lo;0;L;;;;;N;;;;;
+141A;CANADIAN SYLLABICS WEST-CREE WAA;Lo;0;L;;;;;N;;;;;
+141B;CANADIAN SYLLABICS NASKAPI WAA;Lo;0;L;;;;;N;;;;;
+141C;CANADIAN SYLLABICS AI;Lo;0;L;;;;;N;;;;;
+141D;CANADIAN SYLLABICS Y-CREE W;Lo;0;L;;;;;N;;;;;
+141E;CANADIAN SYLLABICS GLOTTAL STOP;Lo;0;L;;;;;N;;;;;
+141F;CANADIAN SYLLABICS FINAL ACUTE;Lo;0;L;;;;;N;;;;;
+1420;CANADIAN SYLLABICS FINAL GRAVE;Lo;0;L;;;;;N;;;;;
+1421;CANADIAN SYLLABICS FINAL BOTTOM HALF RING;Lo;0;L;;;;;N;;;;;
+1422;CANADIAN SYLLABICS FINAL TOP HALF RING;Lo;0;L;;;;;N;;;;;
+1423;CANADIAN SYLLABICS FINAL RIGHT HALF RING;Lo;0;L;;;;;N;;;;;
+1424;CANADIAN SYLLABICS FINAL RING;Lo;0;L;;;;;N;;;;;
+1425;CANADIAN SYLLABICS FINAL DOUBLE ACUTE;Lo;0;L;;;;;N;;;;;
+1426;CANADIAN SYLLABICS FINAL DOUBLE SHORT VERTICAL STROKES;Lo;0;L;;;;;N;;;;;
+1427;CANADIAN SYLLABICS FINAL MIDDLE DOT;Lo;0;L;;;;;N;;;;;
+1428;CANADIAN SYLLABICS FINAL SHORT HORIZONTAL STROKE;Lo;0;L;;;;;N;;;;;
+1429;CANADIAN SYLLABICS FINAL PLUS;Lo;0;L;;;;;N;;;;;
+142A;CANADIAN SYLLABICS FINAL DOWN TACK;Lo;0;L;;;;;N;;;;;
+142B;CANADIAN SYLLABICS EN;Lo;0;L;;;;;N;;;;;
+142C;CANADIAN SYLLABICS IN;Lo;0;L;;;;;N;;;;;
+142D;CANADIAN SYLLABICS ON;Lo;0;L;;;;;N;;;;;
+142E;CANADIAN SYLLABICS AN;Lo;0;L;;;;;N;;;;;
+142F;CANADIAN SYLLABICS PE;Lo;0;L;;;;;N;;;;;
+1430;CANADIAN SYLLABICS PAAI;Lo;0;L;;;;;N;;;;;
+1431;CANADIAN SYLLABICS PI;Lo;0;L;;;;;N;;;;;
+1432;CANADIAN SYLLABICS PII;Lo;0;L;;;;;N;;;;;
+1433;CANADIAN SYLLABICS PO;Lo;0;L;;;;;N;;;;;
+1434;CANADIAN SYLLABICS POO;Lo;0;L;;;;;N;;;;;
+1435;CANADIAN SYLLABICS Y-CREE POO;Lo;0;L;;;;;N;;;;;
+1436;CANADIAN SYLLABICS CARRIER HEE;Lo;0;L;;;;;N;;;;;
+1437;CANADIAN SYLLABICS CARRIER HI;Lo;0;L;;;;;N;;;;;
+1438;CANADIAN SYLLABICS PA;Lo;0;L;;;;;N;;;;;
+1439;CANADIAN SYLLABICS PAA;Lo;0;L;;;;;N;;;;;
+143A;CANADIAN SYLLABICS PWE;Lo;0;L;;;;;N;;;;;
+143B;CANADIAN SYLLABICS WEST-CREE PWE;Lo;0;L;;;;;N;;;;;
+143C;CANADIAN SYLLABICS PWI;Lo;0;L;;;;;N;;;;;
+143D;CANADIAN SYLLABICS WEST-CREE PWI;Lo;0;L;;;;;N;;;;;
+143E;CANADIAN SYLLABICS PWII;Lo;0;L;;;;;N;;;;;
+143F;CANADIAN SYLLABICS WEST-CREE PWII;Lo;0;L;;;;;N;;;;;
+1440;CANADIAN SYLLABICS PWO;Lo;0;L;;;;;N;;;;;
+1441;CANADIAN SYLLABICS WEST-CREE PWO;Lo;0;L;;;;;N;;;;;
+1442;CANADIAN SYLLABICS PWOO;Lo;0;L;;;;;N;;;;;
+1443;CANADIAN SYLLABICS WEST-CREE PWOO;Lo;0;L;;;;;N;;;;;
+1444;CANADIAN SYLLABICS PWA;Lo;0;L;;;;;N;;;;;
+1445;CANADIAN SYLLABICS WEST-CREE PWA;Lo;0;L;;;;;N;;;;;
+1446;CANADIAN SYLLABICS PWAA;Lo;0;L;;;;;N;;;;;
+1447;CANADIAN SYLLABICS WEST-CREE PWAA;Lo;0;L;;;;;N;;;;;
+1448;CANADIAN SYLLABICS Y-CREE PWAA;Lo;0;L;;;;;N;;;;;
+1449;CANADIAN SYLLABICS P;Lo;0;L;;;;;N;;;;;
+144A;CANADIAN SYLLABICS WEST-CREE P;Lo;0;L;;;;;N;;;;;
+144B;CANADIAN SYLLABICS CARRIER H;Lo;0;L;;;;;N;;;;;
+144C;CANADIAN SYLLABICS TE;Lo;0;L;;;;;N;;;;;
+144D;CANADIAN SYLLABICS TAAI;Lo;0;L;;;;;N;;;;;
+144E;CANADIAN SYLLABICS TI;Lo;0;L;;;;;N;;;;;
+144F;CANADIAN SYLLABICS TII;Lo;0;L;;;;;N;;;;;
+1450;CANADIAN SYLLABICS TO;Lo;0;L;;;;;N;;;;;
+1451;CANADIAN SYLLABICS TOO;Lo;0;L;;;;;N;;;;;
+1452;CANADIAN SYLLABICS Y-CREE TOO;Lo;0;L;;;;;N;;;;;
+1453;CANADIAN SYLLABICS CARRIER DEE;Lo;0;L;;;;;N;;;;;
+1454;CANADIAN SYLLABICS CARRIER DI;Lo;0;L;;;;;N;;;;;
+1455;CANADIAN SYLLABICS TA;Lo;0;L;;;;;N;;;;;
+1456;CANADIAN SYLLABICS TAA;Lo;0;L;;;;;N;;;;;
+1457;CANADIAN SYLLABICS TWE;Lo;0;L;;;;;N;;;;;
+1458;CANADIAN SYLLABICS WEST-CREE TWE;Lo;0;L;;;;;N;;;;;
+1459;CANADIAN SYLLABICS TWI;Lo;0;L;;;;;N;;;;;
+145A;CANADIAN SYLLABICS WEST-CREE TWI;Lo;0;L;;;;;N;;;;;
+145B;CANADIAN SYLLABICS TWII;Lo;0;L;;;;;N;;;;;
+145C;CANADIAN SYLLABICS WEST-CREE TWII;Lo;0;L;;;;;N;;;;;
+145D;CANADIAN SYLLABICS TWO;Lo;0;L;;;;;N;;;;;
+145E;CANADIAN SYLLABICS WEST-CREE TWO;Lo;0;L;;;;;N;;;;;
+145F;CANADIAN SYLLABICS TWOO;Lo;0;L;;;;;N;;;;;
+1460;CANADIAN SYLLABICS WEST-CREE TWOO;Lo;0;L;;;;;N;;;;;
+1461;CANADIAN SYLLABICS TWA;Lo;0;L;;;;;N;;;;;
+1462;CANADIAN SYLLABICS WEST-CREE TWA;Lo;0;L;;;;;N;;;;;
+1463;CANADIAN SYLLABICS TWAA;Lo;0;L;;;;;N;;;;;
+1464;CANADIAN SYLLABICS WEST-CREE TWAA;Lo;0;L;;;;;N;;;;;
+1465;CANADIAN SYLLABICS NASKAPI TWAA;Lo;0;L;;;;;N;;;;;
+1466;CANADIAN SYLLABICS T;Lo;0;L;;;;;N;;;;;
+1467;CANADIAN SYLLABICS TTE;Lo;0;L;;;;;N;;;;;
+1468;CANADIAN SYLLABICS TTI;Lo;0;L;;;;;N;;;;;
+1469;CANADIAN SYLLABICS TTO;Lo;0;L;;;;;N;;;;;
+146A;CANADIAN SYLLABICS TTA;Lo;0;L;;;;;N;;;;;
+146B;CANADIAN SYLLABICS KE;Lo;0;L;;;;;N;;;;;
+146C;CANADIAN SYLLABICS KAAI;Lo;0;L;;;;;N;;;;;
+146D;CANADIAN SYLLABICS KI;Lo;0;L;;;;;N;;;;;
+146E;CANADIAN SYLLABICS KII;Lo;0;L;;;;;N;;;;;
+146F;CANADIAN SYLLABICS KO;Lo;0;L;;;;;N;;;;;
+1470;CANADIAN SYLLABICS KOO;Lo;0;L;;;;;N;;;;;
+1471;CANADIAN SYLLABICS Y-CREE KOO;Lo;0;L;;;;;N;;;;;
+1472;CANADIAN SYLLABICS KA;Lo;0;L;;;;;N;;;;;
+1473;CANADIAN SYLLABICS KAA;Lo;0;L;;;;;N;;;;;
+1474;CANADIAN SYLLABICS KWE;Lo;0;L;;;;;N;;;;;
+1475;CANADIAN SYLLABICS WEST-CREE KWE;Lo;0;L;;;;;N;;;;;
+1476;CANADIAN SYLLABICS KWI;Lo;0;L;;;;;N;;;;;
+1477;CANADIAN SYLLABICS WEST-CREE KWI;Lo;0;L;;;;;N;;;;;
+1478;CANADIAN SYLLABICS KWII;Lo;0;L;;;;;N;;;;;
+1479;CANADIAN SYLLABICS WEST-CREE KWII;Lo;0;L;;;;;N;;;;;
+147A;CANADIAN SYLLABICS KWO;Lo;0;L;;;;;N;;;;;
+147B;CANADIAN SYLLABICS WEST-CREE KWO;Lo;0;L;;;;;N;;;;;
+147C;CANADIAN SYLLABICS KWOO;Lo;0;L;;;;;N;;;;;
+147D;CANADIAN SYLLABICS WEST-CREE KWOO;Lo;0;L;;;;;N;;;;;
+147E;CANADIAN SYLLABICS KWA;Lo;0;L;;;;;N;;;;;
+147F;CANADIAN SYLLABICS WEST-CREE KWA;Lo;0;L;;;;;N;;;;;
+1480;CANADIAN SYLLABICS KWAA;Lo;0;L;;;;;N;;;;;
+1481;CANADIAN SYLLABICS WEST-CREE KWAA;Lo;0;L;;;;;N;;;;;
+1482;CANADIAN SYLLABICS NASKAPI KWAA;Lo;0;L;;;;;N;;;;;
+1483;CANADIAN SYLLABICS K;Lo;0;L;;;;;N;;;;;
+1484;CANADIAN SYLLABICS KW;Lo;0;L;;;;;N;;;;;
+1485;CANADIAN SYLLABICS SOUTH-SLAVEY KEH;Lo;0;L;;;;;N;;;;;
+1486;CANADIAN SYLLABICS SOUTH-SLAVEY KIH;Lo;0;L;;;;;N;;;;;
+1487;CANADIAN SYLLABICS SOUTH-SLAVEY KOH;Lo;0;L;;;;;N;;;;;
+1488;CANADIAN SYLLABICS SOUTH-SLAVEY KAH;Lo;0;L;;;;;N;;;;;
+1489;CANADIAN SYLLABICS CE;Lo;0;L;;;;;N;;;;;
+148A;CANADIAN SYLLABICS CAAI;Lo;0;L;;;;;N;;;;;
+148B;CANADIAN SYLLABICS CI;Lo;0;L;;;;;N;;;;;
+148C;CANADIAN SYLLABICS CII;Lo;0;L;;;;;N;;;;;
+148D;CANADIAN SYLLABICS CO;Lo;0;L;;;;;N;;;;;
+148E;CANADIAN SYLLABICS COO;Lo;0;L;;;;;N;;;;;
+148F;CANADIAN SYLLABICS Y-CREE COO;Lo;0;L;;;;;N;;;;;
+1490;CANADIAN SYLLABICS CA;Lo;0;L;;;;;N;;;;;
+1491;CANADIAN SYLLABICS CAA;Lo;0;L;;;;;N;;;;;
+1492;CANADIAN SYLLABICS CWE;Lo;0;L;;;;;N;;;;;
+1493;CANADIAN SYLLABICS WEST-CREE CWE;Lo;0;L;;;;;N;;;;;
+1494;CANADIAN SYLLABICS CWI;Lo;0;L;;;;;N;;;;;
+1495;CANADIAN SYLLABICS WEST-CREE CWI;Lo;0;L;;;;;N;;;;;
+1496;CANADIAN SYLLABICS CWII;Lo;0;L;;;;;N;;;;;
+1497;CANADIAN SYLLABICS WEST-CREE CWII;Lo;0;L;;;;;N;;;;;
+1498;CANADIAN SYLLABICS CWO;Lo;0;L;;;;;N;;;;;
+1499;CANADIAN SYLLABICS WEST-CREE CWO;Lo;0;L;;;;;N;;;;;
+149A;CANADIAN SYLLABICS CWOO;Lo;0;L;;;;;N;;;;;
+149B;CANADIAN SYLLABICS WEST-CREE CWOO;Lo;0;L;;;;;N;;;;;
+149C;CANADIAN SYLLABICS CWA;Lo;0;L;;;;;N;;;;;
+149D;CANADIAN SYLLABICS WEST-CREE CWA;Lo;0;L;;;;;N;;;;;
+149E;CANADIAN SYLLABICS CWAA;Lo;0;L;;;;;N;;;;;
+149F;CANADIAN SYLLABICS WEST-CREE CWAA;Lo;0;L;;;;;N;;;;;
+14A0;CANADIAN SYLLABICS NASKAPI CWAA;Lo;0;L;;;;;N;;;;;
+14A1;CANADIAN SYLLABICS C;Lo;0;L;;;;;N;;;;;
+14A2;CANADIAN SYLLABICS SAYISI TH;Lo;0;L;;;;;N;;;;;
+14A3;CANADIAN SYLLABICS ME;Lo;0;L;;;;;N;;;;;
+14A4;CANADIAN SYLLABICS MAAI;Lo;0;L;;;;;N;;;;;
+14A5;CANADIAN SYLLABICS MI;Lo;0;L;;;;;N;;;;;
+14A6;CANADIAN SYLLABICS MII;Lo;0;L;;;;;N;;;;;
+14A7;CANADIAN SYLLABICS MO;Lo;0;L;;;;;N;;;;;
+14A8;CANADIAN SYLLABICS MOO;Lo;0;L;;;;;N;;;;;
+14A9;CANADIAN SYLLABICS Y-CREE MOO;Lo;0;L;;;;;N;;;;;
+14AA;CANADIAN SYLLABICS MA;Lo;0;L;;;;;N;;;;;
+14AB;CANADIAN SYLLABICS MAA;Lo;0;L;;;;;N;;;;;
+14AC;CANADIAN SYLLABICS MWE;Lo;0;L;;;;;N;;;;;
+14AD;CANADIAN SYLLABICS WEST-CREE MWE;Lo;0;L;;;;;N;;;;;
+14AE;CANADIAN SYLLABICS MWI;Lo;0;L;;;;;N;;;;;
+14AF;CANADIAN SYLLABICS WEST-CREE MWI;Lo;0;L;;;;;N;;;;;
+14B0;CANADIAN SYLLABICS MWII;Lo;0;L;;;;;N;;;;;
+14B1;CANADIAN SYLLABICS WEST-CREE MWII;Lo;0;L;;;;;N;;;;;
+14B2;CANADIAN SYLLABICS MWO;Lo;0;L;;;;;N;;;;;
+14B3;CANADIAN SYLLABICS WEST-CREE MWO;Lo;0;L;;;;;N;;;;;
+14B4;CANADIAN SYLLABICS MWOO;Lo;0;L;;;;;N;;;;;
+14B5;CANADIAN SYLLABICS WEST-CREE MWOO;Lo;0;L;;;;;N;;;;;
+14B6;CANADIAN SYLLABICS MWA;Lo;0;L;;;;;N;;;;;
+14B7;CANADIAN SYLLABICS WEST-CREE MWA;Lo;0;L;;;;;N;;;;;
+14B8;CANADIAN SYLLABICS MWAA;Lo;0;L;;;;;N;;;;;
+14B9;CANADIAN SYLLABICS WEST-CREE MWAA;Lo;0;L;;;;;N;;;;;
+14BA;CANADIAN SYLLABICS NASKAPI MWAA;Lo;0;L;;;;;N;;;;;
+14BB;CANADIAN SYLLABICS M;Lo;0;L;;;;;N;;;;;
+14BC;CANADIAN SYLLABICS WEST-CREE M;Lo;0;L;;;;;N;;;;;
+14BD;CANADIAN SYLLABICS MH;Lo;0;L;;;;;N;;;;;
+14BE;CANADIAN SYLLABICS ATHAPASCAN M;Lo;0;L;;;;;N;;;;;
+14BF;CANADIAN SYLLABICS SAYISI M;Lo;0;L;;;;;N;;;;;
+14C0;CANADIAN SYLLABICS NE;Lo;0;L;;;;;N;;;;;
+14C1;CANADIAN SYLLABICS NAAI;Lo;0;L;;;;;N;;;;;
+14C2;CANADIAN SYLLABICS NI;Lo;0;L;;;;;N;;;;;
+14C3;CANADIAN SYLLABICS NII;Lo;0;L;;;;;N;;;;;
+14C4;CANADIAN SYLLABICS NO;Lo;0;L;;;;;N;;;;;
+14C5;CANADIAN SYLLABICS NOO;Lo;0;L;;;;;N;;;;;
+14C6;CANADIAN SYLLABICS Y-CREE NOO;Lo;0;L;;;;;N;;;;;
+14C7;CANADIAN SYLLABICS NA;Lo;0;L;;;;;N;;;;;
+14C8;CANADIAN SYLLABICS NAA;Lo;0;L;;;;;N;;;;;
+14C9;CANADIAN SYLLABICS NWE;Lo;0;L;;;;;N;;;;;
+14CA;CANADIAN SYLLABICS WEST-CREE NWE;Lo;0;L;;;;;N;;;;;
+14CB;CANADIAN SYLLABICS NWA;Lo;0;L;;;;;N;;;;;
+14CC;CANADIAN SYLLABICS WEST-CREE NWA;Lo;0;L;;;;;N;;;;;
+14CD;CANADIAN SYLLABICS NWAA;Lo;0;L;;;;;N;;;;;
+14CE;CANADIAN SYLLABICS WEST-CREE NWAA;Lo;0;L;;;;;N;;;;;
+14CF;CANADIAN SYLLABICS NASKAPI NWAA;Lo;0;L;;;;;N;;;;;
+14D0;CANADIAN SYLLABICS N;Lo;0;L;;;;;N;;;;;
+14D1;CANADIAN SYLLABICS CARRIER NG;Lo;0;L;;;;;N;;;;;
+14D2;CANADIAN SYLLABICS NH;Lo;0;L;;;;;N;;;;;
+14D3;CANADIAN SYLLABICS LE;Lo;0;L;;;;;N;;;;;
+14D4;CANADIAN SYLLABICS LAAI;Lo;0;L;;;;;N;;;;;
+14D5;CANADIAN SYLLABICS LI;Lo;0;L;;;;;N;;;;;
+14D6;CANADIAN SYLLABICS LII;Lo;0;L;;;;;N;;;;;
+14D7;CANADIAN SYLLABICS LO;Lo;0;L;;;;;N;;;;;
+14D8;CANADIAN SYLLABICS LOO;Lo;0;L;;;;;N;;;;;
+14D9;CANADIAN SYLLABICS Y-CREE LOO;Lo;0;L;;;;;N;;;;;
+14DA;CANADIAN SYLLABICS LA;Lo;0;L;;;;;N;;;;;
+14DB;CANADIAN SYLLABICS LAA;Lo;0;L;;;;;N;;;;;
+14DC;CANADIAN SYLLABICS LWE;Lo;0;L;;;;;N;;;;;
+14DD;CANADIAN SYLLABICS WEST-CREE LWE;Lo;0;L;;;;;N;;;;;
+14DE;CANADIAN SYLLABICS LWI;Lo;0;L;;;;;N;;;;;
+14DF;CANADIAN SYLLABICS WEST-CREE LWI;Lo;0;L;;;;;N;;;;;
+14E0;CANADIAN SYLLABICS LWII;Lo;0;L;;;;;N;;;;;
+14E1;CANADIAN SYLLABICS WEST-CREE LWII;Lo;0;L;;;;;N;;;;;
+14E2;CANADIAN SYLLABICS LWO;Lo;0;L;;;;;N;;;;;
+14E3;CANADIAN SYLLABICS WEST-CREE LWO;Lo;0;L;;;;;N;;;;;
+14E4;CANADIAN SYLLABICS LWOO;Lo;0;L;;;;;N;;;;;
+14E5;CANADIAN SYLLABICS WEST-CREE LWOO;Lo;0;L;;;;;N;;;;;
+14E6;CANADIAN SYLLABICS LWA;Lo;0;L;;;;;N;;;;;
+14E7;CANADIAN SYLLABICS WEST-CREE LWA;Lo;0;L;;;;;N;;;;;
+14E8;CANADIAN SYLLABICS LWAA;Lo;0;L;;;;;N;;;;;
+14E9;CANADIAN SYLLABICS WEST-CREE LWAA;Lo;0;L;;;;;N;;;;;
+14EA;CANADIAN SYLLABICS L;Lo;0;L;;;;;N;;;;;
+14EB;CANADIAN SYLLABICS WEST-CREE L;Lo;0;L;;;;;N;;;;;
+14EC;CANADIAN SYLLABICS MEDIAL L;Lo;0;L;;;;;N;;;;;
+14ED;CANADIAN SYLLABICS SE;Lo;0;L;;;;;N;;;;;
+14EE;CANADIAN SYLLABICS SAAI;Lo;0;L;;;;;N;;;;;
+14EF;CANADIAN SYLLABICS SI;Lo;0;L;;;;;N;;;;;
+14F0;CANADIAN SYLLABICS SII;Lo;0;L;;;;;N;;;;;
+14F1;CANADIAN SYLLABICS SO;Lo;0;L;;;;;N;;;;;
+14F2;CANADIAN SYLLABICS SOO;Lo;0;L;;;;;N;;;;;
+14F3;CANADIAN SYLLABICS Y-CREE SOO;Lo;0;L;;;;;N;;;;;
+14F4;CANADIAN SYLLABICS SA;Lo;0;L;;;;;N;;;;;
+14F5;CANADIAN SYLLABICS SAA;Lo;0;L;;;;;N;;;;;
+14F6;CANADIAN SYLLABICS SWE;Lo;0;L;;;;;N;;;;;
+14F7;CANADIAN SYLLABICS WEST-CREE SWE;Lo;0;L;;;;;N;;;;;
+14F8;CANADIAN SYLLABICS SWI;Lo;0;L;;;;;N;;;;;
+14F9;CANADIAN SYLLABICS WEST-CREE SWI;Lo;0;L;;;;;N;;;;;
+14FA;CANADIAN SYLLABICS SWII;Lo;0;L;;;;;N;;;;;
+14FB;CANADIAN SYLLABICS WEST-CREE SWII;Lo;0;L;;;;;N;;;;;
+14FC;CANADIAN SYLLABICS SWO;Lo;0;L;;;;;N;;;;;
+14FD;CANADIAN SYLLABICS WEST-CREE SWO;Lo;0;L;;;;;N;;;;;
+14FE;CANADIAN SYLLABICS SWOO;Lo;0;L;;;;;N;;;;;
+14FF;CANADIAN SYLLABICS WEST-CREE SWOO;Lo;0;L;;;;;N;;;;;
+1500;CANADIAN SYLLABICS SWA;Lo;0;L;;;;;N;;;;;
+1501;CANADIAN SYLLABICS WEST-CREE SWA;Lo;0;L;;;;;N;;;;;
+1502;CANADIAN SYLLABICS SWAA;Lo;0;L;;;;;N;;;;;
+1503;CANADIAN SYLLABICS WEST-CREE SWAA;Lo;0;L;;;;;N;;;;;
+1504;CANADIAN SYLLABICS NASKAPI SWAA;Lo;0;L;;;;;N;;;;;
+1505;CANADIAN SYLLABICS S;Lo;0;L;;;;;N;;;;;
+1506;CANADIAN SYLLABICS ATHAPASCAN S;Lo;0;L;;;;;N;;;;;
+1507;CANADIAN SYLLABICS SW;Lo;0;L;;;;;N;;;;;
+1508;CANADIAN SYLLABICS BLACKFOOT S;Lo;0;L;;;;;N;;;;;
+1509;CANADIAN SYLLABICS MOOSE-CREE SK;Lo;0;L;;;;;N;;;;;
+150A;CANADIAN SYLLABICS NASKAPI SKW;Lo;0;L;;;;;N;;;;;
+150B;CANADIAN SYLLABICS NASKAPI S-W;Lo;0;L;;;;;N;;;;;
+150C;CANADIAN SYLLABICS NASKAPI SPWA;Lo;0;L;;;;;N;;;;;
+150D;CANADIAN SYLLABICS NASKAPI STWA;Lo;0;L;;;;;N;;;;;
+150E;CANADIAN SYLLABICS NASKAPI SKWA;Lo;0;L;;;;;N;;;;;
+150F;CANADIAN SYLLABICS NASKAPI SCWA;Lo;0;L;;;;;N;;;;;
+1510;CANADIAN SYLLABICS SHE;Lo;0;L;;;;;N;;;;;
+1511;CANADIAN SYLLABICS SHI;Lo;0;L;;;;;N;;;;;
+1512;CANADIAN SYLLABICS SHII;Lo;0;L;;;;;N;;;;;
+1513;CANADIAN SYLLABICS SHO;Lo;0;L;;;;;N;;;;;
+1514;CANADIAN SYLLABICS SHOO;Lo;0;L;;;;;N;;;;;
+1515;CANADIAN SYLLABICS SHA;Lo;0;L;;;;;N;;;;;
+1516;CANADIAN SYLLABICS SHAA;Lo;0;L;;;;;N;;;;;
+1517;CANADIAN SYLLABICS SHWE;Lo;0;L;;;;;N;;;;;
+1518;CANADIAN SYLLABICS WEST-CREE SHWE;Lo;0;L;;;;;N;;;;;
+1519;CANADIAN SYLLABICS SHWI;Lo;0;L;;;;;N;;;;;
+151A;CANADIAN SYLLABICS WEST-CREE SHWI;Lo;0;L;;;;;N;;;;;
+151B;CANADIAN SYLLABICS SHWII;Lo;0;L;;;;;N;;;;;
+151C;CANADIAN SYLLABICS WEST-CREE SHWII;Lo;0;L;;;;;N;;;;;
+151D;CANADIAN SYLLABICS SHWO;Lo;0;L;;;;;N;;;;;
+151E;CANADIAN SYLLABICS WEST-CREE SHWO;Lo;0;L;;;;;N;;;;;
+151F;CANADIAN SYLLABICS SHWOO;Lo;0;L;;;;;N;;;;;
+1520;CANADIAN SYLLABICS WEST-CREE SHWOO;Lo;0;L;;;;;N;;;;;
+1521;CANADIAN SYLLABICS SHWA;Lo;0;L;;;;;N;;;;;
+1522;CANADIAN SYLLABICS WEST-CREE SHWA;Lo;0;L;;;;;N;;;;;
+1523;CANADIAN SYLLABICS SHWAA;Lo;0;L;;;;;N;;;;;
+1524;CANADIAN SYLLABICS WEST-CREE SHWAA;Lo;0;L;;;;;N;;;;;
+1525;CANADIAN SYLLABICS SH;Lo;0;L;;;;;N;;;;;
+1526;CANADIAN SYLLABICS YE;Lo;0;L;;;;;N;;;;;
+1527;CANADIAN SYLLABICS YAAI;Lo;0;L;;;;;N;;;;;
+1528;CANADIAN SYLLABICS YI;Lo;0;L;;;;;N;;;;;
+1529;CANADIAN SYLLABICS YII;Lo;0;L;;;;;N;;;;;
+152A;CANADIAN SYLLABICS YO;Lo;0;L;;;;;N;;;;;
+152B;CANADIAN SYLLABICS YOO;Lo;0;L;;;;;N;;;;;
+152C;CANADIAN SYLLABICS Y-CREE YOO;Lo;0;L;;;;;N;;;;;
+152D;CANADIAN SYLLABICS YA;Lo;0;L;;;;;N;;;;;
+152E;CANADIAN SYLLABICS YAA;Lo;0;L;;;;;N;;;;;
+152F;CANADIAN SYLLABICS YWE;Lo;0;L;;;;;N;;;;;
+1530;CANADIAN SYLLABICS WEST-CREE YWE;Lo;0;L;;;;;N;;;;;
+1531;CANADIAN SYLLABICS YWI;Lo;0;L;;;;;N;;;;;
+1532;CANADIAN SYLLABICS WEST-CREE YWI;Lo;0;L;;;;;N;;;;;
+1533;CANADIAN SYLLABICS YWII;Lo;0;L;;;;;N;;;;;
+1534;CANADIAN SYLLABICS WEST-CREE YWII;Lo;0;L;;;;;N;;;;;
+1535;CANADIAN SYLLABICS YWO;Lo;0;L;;;;;N;;;;;
+1536;CANADIAN SYLLABICS WEST-CREE YWO;Lo;0;L;;;;;N;;;;;
+1537;CANADIAN SYLLABICS YWOO;Lo;0;L;;;;;N;;;;;
+1538;CANADIAN SYLLABICS WEST-CREE YWOO;Lo;0;L;;;;;N;;;;;
+1539;CANADIAN SYLLABICS YWA;Lo;0;L;;;;;N;;;;;
+153A;CANADIAN SYLLABICS WEST-CREE YWA;Lo;0;L;;;;;N;;;;;
+153B;CANADIAN SYLLABICS YWAA;Lo;0;L;;;;;N;;;;;
+153C;CANADIAN SYLLABICS WEST-CREE YWAA;Lo;0;L;;;;;N;;;;;
+153D;CANADIAN SYLLABICS NASKAPI YWAA;Lo;0;L;;;;;N;;;;;
+153E;CANADIAN SYLLABICS Y;Lo;0;L;;;;;N;;;;;
+153F;CANADIAN SYLLABICS BIBLE-CREE Y;Lo;0;L;;;;;N;;;;;
+1540;CANADIAN SYLLABICS WEST-CREE Y;Lo;0;L;;;;;N;;;;;
+1541;CANADIAN SYLLABICS SAYISI YI;Lo;0;L;;;;;N;;;;;
+1542;CANADIAN SYLLABICS RE;Lo;0;L;;;;;N;;;;;
+1543;CANADIAN SYLLABICS R-CREE RE;Lo;0;L;;;;;N;;;;;
+1544;CANADIAN SYLLABICS WEST-CREE LE;Lo;0;L;;;;;N;;;;;
+1545;CANADIAN SYLLABICS RAAI;Lo;0;L;;;;;N;;;;;
+1546;CANADIAN SYLLABICS RI;Lo;0;L;;;;;N;;;;;
+1547;CANADIAN SYLLABICS RII;Lo;0;L;;;;;N;;;;;
+1548;CANADIAN SYLLABICS RO;Lo;0;L;;;;;N;;;;;
+1549;CANADIAN SYLLABICS ROO;Lo;0;L;;;;;N;;;;;
+154A;CANADIAN SYLLABICS WEST-CREE LO;Lo;0;L;;;;;N;;;;;
+154B;CANADIAN SYLLABICS RA;Lo;0;L;;;;;N;;;;;
+154C;CANADIAN SYLLABICS RAA;Lo;0;L;;;;;N;;;;;
+154D;CANADIAN SYLLABICS WEST-CREE LA;Lo;0;L;;;;;N;;;;;
+154E;CANADIAN SYLLABICS RWAA;Lo;0;L;;;;;N;;;;;
+154F;CANADIAN SYLLABICS WEST-CREE RWAA;Lo;0;L;;;;;N;;;;;
+1550;CANADIAN SYLLABICS R;Lo;0;L;;;;;N;;;;;
+1551;CANADIAN SYLLABICS WEST-CREE R;Lo;0;L;;;;;N;;;;;
+1552;CANADIAN SYLLABICS MEDIAL R;Lo;0;L;;;;;N;;;;;
+1553;CANADIAN SYLLABICS FE;Lo;0;L;;;;;N;;;;;
+1554;CANADIAN SYLLABICS FAAI;Lo;0;L;;;;;N;;;;;
+1555;CANADIAN SYLLABICS FI;Lo;0;L;;;;;N;;;;;
+1556;CANADIAN SYLLABICS FII;Lo;0;L;;;;;N;;;;;
+1557;CANADIAN SYLLABICS FO;Lo;0;L;;;;;N;;;;;
+1558;CANADIAN SYLLABICS FOO;Lo;0;L;;;;;N;;;;;
+1559;CANADIAN SYLLABICS FA;Lo;0;L;;;;;N;;;;;
+155A;CANADIAN SYLLABICS FAA;Lo;0;L;;;;;N;;;;;
+155B;CANADIAN SYLLABICS FWAA;Lo;0;L;;;;;N;;;;;
+155C;CANADIAN SYLLABICS WEST-CREE FWAA;Lo;0;L;;;;;N;;;;;
+155D;CANADIAN SYLLABICS F;Lo;0;L;;;;;N;;;;;
+155E;CANADIAN SYLLABICS THE;Lo;0;L;;;;;N;;;;;
+155F;CANADIAN SYLLABICS N-CREE THE;Lo;0;L;;;;;N;;;;;
+1560;CANADIAN SYLLABICS THI;Lo;0;L;;;;;N;;;;;
+1561;CANADIAN SYLLABICS N-CREE THI;Lo;0;L;;;;;N;;;;;
+1562;CANADIAN SYLLABICS THII;Lo;0;L;;;;;N;;;;;
+1563;CANADIAN SYLLABICS N-CREE THII;Lo;0;L;;;;;N;;;;;
+1564;CANADIAN SYLLABICS THO;Lo;0;L;;;;;N;;;;;
+1565;CANADIAN SYLLABICS THOO;Lo;0;L;;;;;N;;;;;
+1566;CANADIAN SYLLABICS THA;Lo;0;L;;;;;N;;;;;
+1567;CANADIAN SYLLABICS THAA;Lo;0;L;;;;;N;;;;;
+1568;CANADIAN SYLLABICS THWAA;Lo;0;L;;;;;N;;;;;
+1569;CANADIAN SYLLABICS WEST-CREE THWAA;Lo;0;L;;;;;N;;;;;
+156A;CANADIAN SYLLABICS TH;Lo;0;L;;;;;N;;;;;
+156B;CANADIAN SYLLABICS TTHE;Lo;0;L;;;;;N;;;;;
+156C;CANADIAN SYLLABICS TTHI;Lo;0;L;;;;;N;;;;;
+156D;CANADIAN SYLLABICS TTHO;Lo;0;L;;;;;N;;;;;
+156E;CANADIAN SYLLABICS TTHA;Lo;0;L;;;;;N;;;;;
+156F;CANADIAN SYLLABICS TTH;Lo;0;L;;;;;N;;;;;
+1570;CANADIAN SYLLABICS TYE;Lo;0;L;;;;;N;;;;;
+1571;CANADIAN SYLLABICS TYI;Lo;0;L;;;;;N;;;;;
+1572;CANADIAN SYLLABICS TYO;Lo;0;L;;;;;N;;;;;
+1573;CANADIAN SYLLABICS TYA;Lo;0;L;;;;;N;;;;;
+1574;CANADIAN SYLLABICS NUNAVIK HE;Lo;0;L;;;;;N;;;;;
+1575;CANADIAN SYLLABICS NUNAVIK HI;Lo;0;L;;;;;N;;;;;
+1576;CANADIAN SYLLABICS NUNAVIK HII;Lo;0;L;;;;;N;;;;;
+1577;CANADIAN SYLLABICS NUNAVIK HO;Lo;0;L;;;;;N;;;;;
+1578;CANADIAN SYLLABICS NUNAVIK HOO;Lo;0;L;;;;;N;;;;;
+1579;CANADIAN SYLLABICS NUNAVIK HA;Lo;0;L;;;;;N;;;;;
+157A;CANADIAN SYLLABICS NUNAVIK HAA;Lo;0;L;;;;;N;;;;;
+157B;CANADIAN SYLLABICS NUNAVIK H;Lo;0;L;;;;;N;;;;;
+157C;CANADIAN SYLLABICS NUNAVUT H;Lo;0;L;;;;;N;;;;;
+157D;CANADIAN SYLLABICS HK;Lo;0;L;;;;;N;;;;;
+157E;CANADIAN SYLLABICS QAAI;Lo;0;L;;;;;N;;;;;
+157F;CANADIAN SYLLABICS QI;Lo;0;L;;;;;N;;;;;
+1580;CANADIAN SYLLABICS QII;Lo;0;L;;;;;N;;;;;
+1581;CANADIAN SYLLABICS QO;Lo;0;L;;;;;N;;;;;
+1582;CANADIAN SYLLABICS QOO;Lo;0;L;;;;;N;;;;;
+1583;CANADIAN SYLLABICS QA;Lo;0;L;;;;;N;;;;;
+1584;CANADIAN SYLLABICS QAA;Lo;0;L;;;;;N;;;;;
+1585;CANADIAN SYLLABICS Q;Lo;0;L;;;;;N;;;;;
+1586;CANADIAN SYLLABICS TLHE;Lo;0;L;;;;;N;;;;;
+1587;CANADIAN SYLLABICS TLHI;Lo;0;L;;;;;N;;;;;
+1588;CANADIAN SYLLABICS TLHO;Lo;0;L;;;;;N;;;;;
+1589;CANADIAN SYLLABICS TLHA;Lo;0;L;;;;;N;;;;;
+158A;CANADIAN SYLLABICS WEST-CREE RE;Lo;0;L;;;;;N;;;;;
+158B;CANADIAN SYLLABICS WEST-CREE RI;Lo;0;L;;;;;N;;;;;
+158C;CANADIAN SYLLABICS WEST-CREE RO;Lo;0;L;;;;;N;;;;;
+158D;CANADIAN SYLLABICS WEST-CREE RA;Lo;0;L;;;;;N;;;;;
+158E;CANADIAN SYLLABICS NGAAI;Lo;0;L;;;;;N;;;;;
+158F;CANADIAN SYLLABICS NGI;Lo;0;L;;;;;N;;;;;
+1590;CANADIAN SYLLABICS NGII;Lo;0;L;;;;;N;;;;;
+1591;CANADIAN SYLLABICS NGO;Lo;0;L;;;;;N;;;;;
+1592;CANADIAN SYLLABICS NGOO;Lo;0;L;;;;;N;;;;;
+1593;CANADIAN SYLLABICS NGA;Lo;0;L;;;;;N;;;;;
+1594;CANADIAN SYLLABICS NGAA;Lo;0;L;;;;;N;;;;;
+1595;CANADIAN SYLLABICS NG;Lo;0;L;;;;;N;;;;;
+1596;CANADIAN SYLLABICS NNG;Lo;0;L;;;;;N;;;;;
+1597;CANADIAN SYLLABICS SAYISI SHE;Lo;0;L;;;;;N;;;;;
+1598;CANADIAN SYLLABICS SAYISI SHI;Lo;0;L;;;;;N;;;;;
+1599;CANADIAN SYLLABICS SAYISI SHO;Lo;0;L;;;;;N;;;;;
+159A;CANADIAN SYLLABICS SAYISI SHA;Lo;0;L;;;;;N;;;;;
+159B;CANADIAN SYLLABICS WOODS-CREE THE;Lo;0;L;;;;;N;;;;;
+159C;CANADIAN SYLLABICS WOODS-CREE THI;Lo;0;L;;;;;N;;;;;
+159D;CANADIAN SYLLABICS WOODS-CREE THO;Lo;0;L;;;;;N;;;;;
+159E;CANADIAN SYLLABICS WOODS-CREE THA;Lo;0;L;;;;;N;;;;;
+159F;CANADIAN SYLLABICS WOODS-CREE TH;Lo;0;L;;;;;N;;;;;
+15A0;CANADIAN SYLLABICS LHI;Lo;0;L;;;;;N;;;;;
+15A1;CANADIAN SYLLABICS LHII;Lo;0;L;;;;;N;;;;;
+15A2;CANADIAN SYLLABICS LHO;Lo;0;L;;;;;N;;;;;
+15A3;CANADIAN SYLLABICS LHOO;Lo;0;L;;;;;N;;;;;
+15A4;CANADIAN SYLLABICS LHA;Lo;0;L;;;;;N;;;;;
+15A5;CANADIAN SYLLABICS LHAA;Lo;0;L;;;;;N;;;;;
+15A6;CANADIAN SYLLABICS LH;Lo;0;L;;;;;N;;;;;
+15A7;CANADIAN SYLLABICS TH-CREE THE;Lo;0;L;;;;;N;;;;;
+15A8;CANADIAN SYLLABICS TH-CREE THI;Lo;0;L;;;;;N;;;;;
+15A9;CANADIAN SYLLABICS TH-CREE THII;Lo;0;L;;;;;N;;;;;
+15AA;CANADIAN SYLLABICS TH-CREE THO;Lo;0;L;;;;;N;;;;;
+15AB;CANADIAN SYLLABICS TH-CREE THOO;Lo;0;L;;;;;N;;;;;
+15AC;CANADIAN SYLLABICS TH-CREE THA;Lo;0;L;;;;;N;;;;;
+15AD;CANADIAN SYLLABICS TH-CREE THAA;Lo;0;L;;;;;N;;;;;
+15AE;CANADIAN SYLLABICS TH-CREE TH;Lo;0;L;;;;;N;;;;;
+15AF;CANADIAN SYLLABICS AIVILIK B;Lo;0;L;;;;;N;;;;;
+15B0;CANADIAN SYLLABICS BLACKFOOT E;Lo;0;L;;;;;N;;;;;
+15B1;CANADIAN SYLLABICS BLACKFOOT I;Lo;0;L;;;;;N;;;;;
+15B2;CANADIAN SYLLABICS BLACKFOOT O;Lo;0;L;;;;;N;;;;;
+15B3;CANADIAN SYLLABICS BLACKFOOT A;Lo;0;L;;;;;N;;;;;
+15B4;CANADIAN SYLLABICS BLACKFOOT WE;Lo;0;L;;;;;N;;;;;
+15B5;CANADIAN SYLLABICS BLACKFOOT WI;Lo;0;L;;;;;N;;;;;
+15B6;CANADIAN SYLLABICS BLACKFOOT WO;Lo;0;L;;;;;N;;;;;
+15B7;CANADIAN SYLLABICS BLACKFOOT WA;Lo;0;L;;;;;N;;;;;
+15B8;CANADIAN SYLLABICS BLACKFOOT NE;Lo;0;L;;;;;N;;;;;
+15B9;CANADIAN SYLLABICS BLACKFOOT NI;Lo;0;L;;;;;N;;;;;
+15BA;CANADIAN SYLLABICS BLACKFOOT NO;Lo;0;L;;;;;N;;;;;
+15BB;CANADIAN SYLLABICS BLACKFOOT NA;Lo;0;L;;;;;N;;;;;
+15BC;CANADIAN SYLLABICS BLACKFOOT KE;Lo;0;L;;;;;N;;;;;
+15BD;CANADIAN SYLLABICS BLACKFOOT KI;Lo;0;L;;;;;N;;;;;
+15BE;CANADIAN SYLLABICS BLACKFOOT KO;Lo;0;L;;;;;N;;;;;
+15BF;CANADIAN SYLLABICS BLACKFOOT KA;Lo;0;L;;;;;N;;;;;
+15C0;CANADIAN SYLLABICS SAYISI HE;Lo;0;L;;;;;N;;;;;
+15C1;CANADIAN SYLLABICS SAYISI HI;Lo;0;L;;;;;N;;;;;
+15C2;CANADIAN SYLLABICS SAYISI HO;Lo;0;L;;;;;N;;;;;
+15C3;CANADIAN SYLLABICS SAYISI HA;Lo;0;L;;;;;N;;;;;
+15C4;CANADIAN SYLLABICS CARRIER GHU;Lo;0;L;;;;;N;;;;;
+15C5;CANADIAN SYLLABICS CARRIER GHO;Lo;0;L;;;;;N;;;;;
+15C6;CANADIAN SYLLABICS CARRIER GHE;Lo;0;L;;;;;N;;;;;
+15C7;CANADIAN SYLLABICS CARRIER GHEE;Lo;0;L;;;;;N;;;;;
+15C8;CANADIAN SYLLABICS CARRIER GHI;Lo;0;L;;;;;N;;;;;
+15C9;CANADIAN SYLLABICS CARRIER GHA;Lo;0;L;;;;;N;;;;;
+15CA;CANADIAN SYLLABICS CARRIER RU;Lo;0;L;;;;;N;;;;;
+15CB;CANADIAN SYLLABICS CARRIER RO;Lo;0;L;;;;;N;;;;;
+15CC;CANADIAN SYLLABICS CARRIER RE;Lo;0;L;;;;;N;;;;;
+15CD;CANADIAN SYLLABICS CARRIER REE;Lo;0;L;;;;;N;;;;;
+15CE;CANADIAN SYLLABICS CARRIER RI;Lo;0;L;;;;;N;;;;;
+15CF;CANADIAN SYLLABICS CARRIER RA;Lo;0;L;;;;;N;;;;;
+15D0;CANADIAN SYLLABICS CARRIER WU;Lo;0;L;;;;;N;;;;;
+15D1;CANADIAN SYLLABICS CARRIER WO;Lo;0;L;;;;;N;;;;;
+15D2;CANADIAN SYLLABICS CARRIER WE;Lo;0;L;;;;;N;;;;;
+15D3;CANADIAN SYLLABICS CARRIER WEE;Lo;0;L;;;;;N;;;;;
+15D4;CANADIAN SYLLABICS CARRIER WI;Lo;0;L;;;;;N;;;;;
+15D5;CANADIAN SYLLABICS CARRIER WA;Lo;0;L;;;;;N;;;;;
+15D6;CANADIAN SYLLABICS CARRIER HWU;Lo;0;L;;;;;N;;;;;
+15D7;CANADIAN SYLLABICS CARRIER HWO;Lo;0;L;;;;;N;;;;;
+15D8;CANADIAN SYLLABICS CARRIER HWE;Lo;0;L;;;;;N;;;;;
+15D9;CANADIAN SYLLABICS CARRIER HWEE;Lo;0;L;;;;;N;;;;;
+15DA;CANADIAN SYLLABICS CARRIER HWI;Lo;0;L;;;;;N;;;;;
+15DB;CANADIAN SYLLABICS CARRIER HWA;Lo;0;L;;;;;N;;;;;
+15DC;CANADIAN SYLLABICS CARRIER THU;Lo;0;L;;;;;N;;;;;
+15DD;CANADIAN SYLLABICS CARRIER THO;Lo;0;L;;;;;N;;;;;
+15DE;CANADIAN SYLLABICS CARRIER THE;Lo;0;L;;;;;N;;;;;
+15DF;CANADIAN SYLLABICS CARRIER THEE;Lo;0;L;;;;;N;;;;;
+15E0;CANADIAN SYLLABICS CARRIER THI;Lo;0;L;;;;;N;;;;;
+15E1;CANADIAN SYLLABICS CARRIER THA;Lo;0;L;;;;;N;;;;;
+15E2;CANADIAN SYLLABICS CARRIER TTU;Lo;0;L;;;;;N;;;;;
+15E3;CANADIAN SYLLABICS CARRIER TTO;Lo;0;L;;;;;N;;;;;
+15E4;CANADIAN SYLLABICS CARRIER TTE;Lo;0;L;;;;;N;;;;;
+15E5;CANADIAN SYLLABICS CARRIER TTEE;Lo;0;L;;;;;N;;;;;
+15E6;CANADIAN SYLLABICS CARRIER TTI;Lo;0;L;;;;;N;;;;;
+15E7;CANADIAN SYLLABICS CARRIER TTA;Lo;0;L;;;;;N;;;;;
+15E8;CANADIAN SYLLABICS CARRIER PU;Lo;0;L;;;;;N;;;;;
+15E9;CANADIAN SYLLABICS CARRIER PO;Lo;0;L;;;;;N;;;;;
+15EA;CANADIAN SYLLABICS CARRIER PE;Lo;0;L;;;;;N;;;;;
+15EB;CANADIAN SYLLABICS CARRIER PEE;Lo;0;L;;;;;N;;;;;
+15EC;CANADIAN SYLLABICS CARRIER PI;Lo;0;L;;;;;N;;;;;
+15ED;CANADIAN SYLLABICS CARRIER PA;Lo;0;L;;;;;N;;;;;
+15EE;CANADIAN SYLLABICS CARRIER P;Lo;0;L;;;;;N;;;;;
+15EF;CANADIAN SYLLABICS CARRIER GU;Lo;0;L;;;;;N;;;;;
+15F0;CANADIAN SYLLABICS CARRIER GO;Lo;0;L;;;;;N;;;;;
+15F1;CANADIAN SYLLABICS CARRIER GE;Lo;0;L;;;;;N;;;;;
+15F2;CANADIAN SYLLABICS CARRIER GEE;Lo;0;L;;;;;N;;;;;
+15F3;CANADIAN SYLLABICS CARRIER GI;Lo;0;L;;;;;N;;;;;
+15F4;CANADIAN SYLLABICS CARRIER GA;Lo;0;L;;;;;N;;;;;
+15F5;CANADIAN SYLLABICS CARRIER KHU;Lo;0;L;;;;;N;;;;;
+15F6;CANADIAN SYLLABICS CARRIER KHO;Lo;0;L;;;;;N;;;;;
+15F7;CANADIAN SYLLABICS CARRIER KHE;Lo;0;L;;;;;N;;;;;
+15F8;CANADIAN SYLLABICS CARRIER KHEE;Lo;0;L;;;;;N;;;;;
+15F9;CANADIAN SYLLABICS CARRIER KHI;Lo;0;L;;;;;N;;;;;
+15FA;CANADIAN SYLLABICS CARRIER KHA;Lo;0;L;;;;;N;;;;;
+15FB;CANADIAN SYLLABICS CARRIER KKU;Lo;0;L;;;;;N;;;;;
+15FC;CANADIAN SYLLABICS CARRIER KKO;Lo;0;L;;;;;N;;;;;
+15FD;CANADIAN SYLLABICS CARRIER KKE;Lo;0;L;;;;;N;;;;;
+15FE;CANADIAN SYLLABICS CARRIER KKEE;Lo;0;L;;;;;N;;;;;
+15FF;CANADIAN SYLLABICS CARRIER KKI;Lo;0;L;;;;;N;;;;;
+1600;CANADIAN SYLLABICS CARRIER KKA;Lo;0;L;;;;;N;;;;;
+1601;CANADIAN SYLLABICS CARRIER KK;Lo;0;L;;;;;N;;;;;
+1602;CANADIAN SYLLABICS CARRIER NU;Lo;0;L;;;;;N;;;;;
+1603;CANADIAN SYLLABICS CARRIER NO;Lo;0;L;;;;;N;;;;;
+1604;CANADIAN SYLLABICS CARRIER NE;Lo;0;L;;;;;N;;;;;
+1605;CANADIAN SYLLABICS CARRIER NEE;Lo;0;L;;;;;N;;;;;
+1606;CANADIAN SYLLABICS CARRIER NI;Lo;0;L;;;;;N;;;;;
+1607;CANADIAN SYLLABICS CARRIER NA;Lo;0;L;;;;;N;;;;;
+1608;CANADIAN SYLLABICS CARRIER MU;Lo;0;L;;;;;N;;;;;
+1609;CANADIAN SYLLABICS CARRIER MO;Lo;0;L;;;;;N;;;;;
+160A;CANADIAN SYLLABICS CARRIER ME;Lo;0;L;;;;;N;;;;;
+160B;CANADIAN SYLLABICS CARRIER MEE;Lo;0;L;;;;;N;;;;;
+160C;CANADIAN SYLLABICS CARRIER MI;Lo;0;L;;;;;N;;;;;
+160D;CANADIAN SYLLABICS CARRIER MA;Lo;0;L;;;;;N;;;;;
+160E;CANADIAN SYLLABICS CARRIER YU;Lo;0;L;;;;;N;;;;;
+160F;CANADIAN SYLLABICS CARRIER YO;Lo;0;L;;;;;N;;;;;
+1610;CANADIAN SYLLABICS CARRIER YE;Lo;0;L;;;;;N;;;;;
+1611;CANADIAN SYLLABICS CARRIER YEE;Lo;0;L;;;;;N;;;;;
+1612;CANADIAN SYLLABICS CARRIER YI;Lo;0;L;;;;;N;;;;;
+1613;CANADIAN SYLLABICS CARRIER YA;Lo;0;L;;;;;N;;;;;
+1614;CANADIAN SYLLABICS CARRIER JU;Lo;0;L;;;;;N;;;;;
+1615;CANADIAN SYLLABICS SAYISI JU;Lo;0;L;;;;;N;;;;;
+1616;CANADIAN SYLLABICS CARRIER JO;Lo;0;L;;;;;N;;;;;
+1617;CANADIAN SYLLABICS CARRIER JE;Lo;0;L;;;;;N;;;;;
+1618;CANADIAN SYLLABICS CARRIER JEE;Lo;0;L;;;;;N;;;;;
+1619;CANADIAN SYLLABICS CARRIER JI;Lo;0;L;;;;;N;;;;;
+161A;CANADIAN SYLLABICS SAYISI JI;Lo;0;L;;;;;N;;;;;
+161B;CANADIAN SYLLABICS CARRIER JA;Lo;0;L;;;;;N;;;;;
+161C;CANADIAN SYLLABICS CARRIER JJU;Lo;0;L;;;;;N;;;;;
+161D;CANADIAN SYLLABICS CARRIER JJO;Lo;0;L;;;;;N;;;;;
+161E;CANADIAN SYLLABICS CARRIER JJE;Lo;0;L;;;;;N;;;;;
+161F;CANADIAN SYLLABICS CARRIER JJEE;Lo;0;L;;;;;N;;;;;
+1620;CANADIAN SYLLABICS CARRIER JJI;Lo;0;L;;;;;N;;;;;
+1621;CANADIAN SYLLABICS CARRIER JJA;Lo;0;L;;;;;N;;;;;
+1622;CANADIAN SYLLABICS CARRIER LU;Lo;0;L;;;;;N;;;;;
+1623;CANADIAN SYLLABICS CARRIER LO;Lo;0;L;;;;;N;;;;;
+1624;CANADIAN SYLLABICS CARRIER LE;Lo;0;L;;;;;N;;;;;
+1625;CANADIAN SYLLABICS CARRIER LEE;Lo;0;L;;;;;N;;;;;
+1626;CANADIAN SYLLABICS CARRIER LI;Lo;0;L;;;;;N;;;;;
+1627;CANADIAN SYLLABICS CARRIER LA;Lo;0;L;;;;;N;;;;;
+1628;CANADIAN SYLLABICS CARRIER DLU;Lo;0;L;;;;;N;;;;;
+1629;CANADIAN SYLLABICS CARRIER DLO;Lo;0;L;;;;;N;;;;;
+162A;CANADIAN SYLLABICS CARRIER DLE;Lo;0;L;;;;;N;;;;;
+162B;CANADIAN SYLLABICS CARRIER DLEE;Lo;0;L;;;;;N;;;;;
+162C;CANADIAN SYLLABICS CARRIER DLI;Lo;0;L;;;;;N;;;;;
+162D;CANADIAN SYLLABICS CARRIER DLA;Lo;0;L;;;;;N;;;;;
+162E;CANADIAN SYLLABICS CARRIER LHU;Lo;0;L;;;;;N;;;;;
+162F;CANADIAN SYLLABICS CARRIER LHO;Lo;0;L;;;;;N;;;;;
+1630;CANADIAN SYLLABICS CARRIER LHE;Lo;0;L;;;;;N;;;;;
+1631;CANADIAN SYLLABICS CARRIER LHEE;Lo;0;L;;;;;N;;;;;
+1632;CANADIAN SYLLABICS CARRIER LHI;Lo;0;L;;;;;N;;;;;
+1633;CANADIAN SYLLABICS CARRIER LHA;Lo;0;L;;;;;N;;;;;
+1634;CANADIAN SYLLABICS CARRIER TLHU;Lo;0;L;;;;;N;;;;;
+1635;CANADIAN SYLLABICS CARRIER TLHO;Lo;0;L;;;;;N;;;;;
+1636;CANADIAN SYLLABICS CARRIER TLHE;Lo;0;L;;;;;N;;;;;
+1637;CANADIAN SYLLABICS CARRIER TLHEE;Lo;0;L;;;;;N;;;;;
+1638;CANADIAN SYLLABICS CARRIER TLHI;Lo;0;L;;;;;N;;;;;
+1639;CANADIAN SYLLABICS CARRIER TLHA;Lo;0;L;;;;;N;;;;;
+163A;CANADIAN SYLLABICS CARRIER TLU;Lo;0;L;;;;;N;;;;;
+163B;CANADIAN SYLLABICS CARRIER TLO;Lo;0;L;;;;;N;;;;;
+163C;CANADIAN SYLLABICS CARRIER TLE;Lo;0;L;;;;;N;;;;;
+163D;CANADIAN SYLLABICS CARRIER TLEE;Lo;0;L;;;;;N;;;;;
+163E;CANADIAN SYLLABICS CARRIER TLI;Lo;0;L;;;;;N;;;;;
+163F;CANADIAN SYLLABICS CARRIER TLA;Lo;0;L;;;;;N;;;;;
+1640;CANADIAN SYLLABICS CARRIER ZU;Lo;0;L;;;;;N;;;;;
+1641;CANADIAN SYLLABICS CARRIER ZO;Lo;0;L;;;;;N;;;;;
+1642;CANADIAN SYLLABICS CARRIER ZE;Lo;0;L;;;;;N;;;;;
+1643;CANADIAN SYLLABICS CARRIER ZEE;Lo;0;L;;;;;N;;;;;
+1644;CANADIAN SYLLABICS CARRIER ZI;Lo;0;L;;;;;N;;;;;
+1645;CANADIAN SYLLABICS CARRIER ZA;Lo;0;L;;;;;N;;;;;
+1646;CANADIAN SYLLABICS CARRIER Z;Lo;0;L;;;;;N;;;;;
+1647;CANADIAN SYLLABICS CARRIER INITIAL Z;Lo;0;L;;;;;N;;;;;
+1648;CANADIAN SYLLABICS CARRIER DZU;Lo;0;L;;;;;N;;;;;
+1649;CANADIAN SYLLABICS CARRIER DZO;Lo;0;L;;;;;N;;;;;
+164A;CANADIAN SYLLABICS CARRIER DZE;Lo;0;L;;;;;N;;;;;
+164B;CANADIAN SYLLABICS CARRIER DZEE;Lo;0;L;;;;;N;;;;;
+164C;CANADIAN SYLLABICS CARRIER DZI;Lo;0;L;;;;;N;;;;;
+164D;CANADIAN SYLLABICS CARRIER DZA;Lo;0;L;;;;;N;;;;;
+164E;CANADIAN SYLLABICS CARRIER SU;Lo;0;L;;;;;N;;;;;
+164F;CANADIAN SYLLABICS CARRIER SO;Lo;0;L;;;;;N;;;;;
+1650;CANADIAN SYLLABICS CARRIER SE;Lo;0;L;;;;;N;;;;;
+1651;CANADIAN SYLLABICS CARRIER SEE;Lo;0;L;;;;;N;;;;;
+1652;CANADIAN SYLLABICS CARRIER SI;Lo;0;L;;;;;N;;;;;
+1653;CANADIAN SYLLABICS CARRIER SA;Lo;0;L;;;;;N;;;;;
+1654;CANADIAN SYLLABICS CARRIER SHU;Lo;0;L;;;;;N;;;;;
+1655;CANADIAN SYLLABICS CARRIER SHO;Lo;0;L;;;;;N;;;;;
+1656;CANADIAN SYLLABICS CARRIER SHE;Lo;0;L;;;;;N;;;;;
+1657;CANADIAN SYLLABICS CARRIER SHEE;Lo;0;L;;;;;N;;;;;
+1658;CANADIAN SYLLABICS CARRIER SHI;Lo;0;L;;;;;N;;;;;
+1659;CANADIAN SYLLABICS CARRIER SHA;Lo;0;L;;;;;N;;;;;
+165A;CANADIAN SYLLABICS CARRIER SH;Lo;0;L;;;;;N;;;;;
+165B;CANADIAN SYLLABICS CARRIER TSU;Lo;0;L;;;;;N;;;;;
+165C;CANADIAN SYLLABICS CARRIER TSO;Lo;0;L;;;;;N;;;;;
+165D;CANADIAN SYLLABICS CARRIER TSE;Lo;0;L;;;;;N;;;;;
+165E;CANADIAN SYLLABICS CARRIER TSEE;Lo;0;L;;;;;N;;;;;
+165F;CANADIAN SYLLABICS CARRIER TSI;Lo;0;L;;;;;N;;;;;
+1660;CANADIAN SYLLABICS CARRIER TSA;Lo;0;L;;;;;N;;;;;
+1661;CANADIAN SYLLABICS CARRIER CHU;Lo;0;L;;;;;N;;;;;
+1662;CANADIAN SYLLABICS CARRIER CHO;Lo;0;L;;;;;N;;;;;
+1663;CANADIAN SYLLABICS CARRIER CHE;Lo;0;L;;;;;N;;;;;
+1664;CANADIAN SYLLABICS CARRIER CHEE;Lo;0;L;;;;;N;;;;;
+1665;CANADIAN SYLLABICS CARRIER CHI;Lo;0;L;;;;;N;;;;;
+1666;CANADIAN SYLLABICS CARRIER CHA;Lo;0;L;;;;;N;;;;;
+1667;CANADIAN SYLLABICS CARRIER TTSU;Lo;0;L;;;;;N;;;;;
+1668;CANADIAN SYLLABICS CARRIER TTSO;Lo;0;L;;;;;N;;;;;
+1669;CANADIAN SYLLABICS CARRIER TTSE;Lo;0;L;;;;;N;;;;;
+166A;CANADIAN SYLLABICS CARRIER TTSEE;Lo;0;L;;;;;N;;;;;
+166B;CANADIAN SYLLABICS CARRIER TTSI;Lo;0;L;;;;;N;;;;;
+166C;CANADIAN SYLLABICS CARRIER TTSA;Lo;0;L;;;;;N;;;;;
+166D;CANADIAN SYLLABICS CHI SIGN;Po;0;L;;;;;N;;;;;
+166E;CANADIAN SYLLABICS FULL STOP;Po;0;L;;;;;N;;;;;
+166F;CANADIAN SYLLABICS QAI;Lo;0;L;;;;;N;;;;;
+1670;CANADIAN SYLLABICS NGAI;Lo;0;L;;;;;N;;;;;
+1671;CANADIAN SYLLABICS NNGI;Lo;0;L;;;;;N;;;;;
+1672;CANADIAN SYLLABICS NNGII;Lo;0;L;;;;;N;;;;;
+1673;CANADIAN SYLLABICS NNGO;Lo;0;L;;;;;N;;;;;
+1674;CANADIAN SYLLABICS NNGOO;Lo;0;L;;;;;N;;;;;
+1675;CANADIAN SYLLABICS NNGA;Lo;0;L;;;;;N;;;;;
+1676;CANADIAN SYLLABICS NNGAA;Lo;0;L;;;;;N;;;;;
+1680;OGHAM SPACE MARK;Zs;0;WS;;;;;N;;;;;
+1681;OGHAM LETTER BEITH;Lo;0;L;;;;;N;;;;;
+1682;OGHAM LETTER LUIS;Lo;0;L;;;;;N;;;;;
+1683;OGHAM LETTER FEARN;Lo;0;L;;;;;N;;;;;
+1684;OGHAM LETTER SAIL;Lo;0;L;;;;;N;;;;;
+1685;OGHAM LETTER NION;Lo;0;L;;;;;N;;;;;
+1686;OGHAM LETTER UATH;Lo;0;L;;;;;N;;;;;
+1687;OGHAM LETTER DAIR;Lo;0;L;;;;;N;;;;;
+1688;OGHAM LETTER TINNE;Lo;0;L;;;;;N;;;;;
+1689;OGHAM LETTER COLL;Lo;0;L;;;;;N;;;;;
+168A;OGHAM LETTER CEIRT;Lo;0;L;;;;;N;;;;;
+168B;OGHAM LETTER MUIN;Lo;0;L;;;;;N;;;;;
+168C;OGHAM LETTER GORT;Lo;0;L;;;;;N;;;;;
+168D;OGHAM LETTER NGEADAL;Lo;0;L;;;;;N;;;;;
+168E;OGHAM LETTER STRAIF;Lo;0;L;;;;;N;;;;;
+168F;OGHAM LETTER RUIS;Lo;0;L;;;;;N;;;;;
+1690;OGHAM LETTER AILM;Lo;0;L;;;;;N;;;;;
+1691;OGHAM LETTER ONN;Lo;0;L;;;;;N;;;;;
+1692;OGHAM LETTER UR;Lo;0;L;;;;;N;;;;;
+1693;OGHAM LETTER EADHADH;Lo;0;L;;;;;N;;;;;
+1694;OGHAM LETTER IODHADH;Lo;0;L;;;;;N;;;;;
+1695;OGHAM LETTER EABHADH;Lo;0;L;;;;;N;;;;;
+1696;OGHAM LETTER OR;Lo;0;L;;;;;N;;;;;
+1697;OGHAM LETTER UILLEANN;Lo;0;L;;;;;N;;;;;
+1698;OGHAM LETTER IFIN;Lo;0;L;;;;;N;;;;;
+1699;OGHAM LETTER EAMHANCHOLL;Lo;0;L;;;;;N;;;;;
+169A;OGHAM LETTER PEITH;Lo;0;L;;;;;N;;;;;
+169B;OGHAM FEATHER MARK;Ps;0;ON;;;;;N;;;;;
+169C;OGHAM REVERSED FEATHER MARK;Pe;0;ON;;;;;N;;;;;
+16A0;RUNIC LETTER FEHU FEOH FE F;Lo;0;L;;;;;N;;;;;
+16A1;RUNIC LETTER V;Lo;0;L;;;;;N;;;;;
+16A2;RUNIC LETTER URUZ UR U;Lo;0;L;;;;;N;;;;;
+16A3;RUNIC LETTER YR;Lo;0;L;;;;;N;;;;;
+16A4;RUNIC LETTER Y;Lo;0;L;;;;;N;;;;;
+16A5;RUNIC LETTER W;Lo;0;L;;;;;N;;;;;
+16A6;RUNIC LETTER THURISAZ THURS THORN;Lo;0;L;;;;;N;;;;;
+16A7;RUNIC LETTER ETH;Lo;0;L;;;;;N;;;;;
+16A8;RUNIC LETTER ANSUZ A;Lo;0;L;;;;;N;;;;;
+16A9;RUNIC LETTER OS O;Lo;0;L;;;;;N;;;;;
+16AA;RUNIC LETTER AC A;Lo;0;L;;;;;N;;;;;
+16AB;RUNIC LETTER AESC;Lo;0;L;;;;;N;;;;;
+16AC;RUNIC LETTER LONG-BRANCH-OSS O;Lo;0;L;;;;;N;;;;;
+16AD;RUNIC LETTER SHORT-TWIG-OSS O;Lo;0;L;;;;;N;;;;;
+16AE;RUNIC LETTER O;Lo;0;L;;;;;N;;;;;
+16AF;RUNIC LETTER OE;Lo;0;L;;;;;N;;;;;
+16B0;RUNIC LETTER ON;Lo;0;L;;;;;N;;;;;
+16B1;RUNIC LETTER RAIDO RAD REID R;Lo;0;L;;;;;N;;;;;
+16B2;RUNIC LETTER KAUNA;Lo;0;L;;;;;N;;;;;
+16B3;RUNIC LETTER CEN;Lo;0;L;;;;;N;;;;;
+16B4;RUNIC LETTER KAUN K;Lo;0;L;;;;;N;;;;;
+16B5;RUNIC LETTER G;Lo;0;L;;;;;N;;;;;
+16B6;RUNIC LETTER ENG;Lo;0;L;;;;;N;;;;;
+16B7;RUNIC LETTER GEBO GYFU G;Lo;0;L;;;;;N;;;;;
+16B8;RUNIC LETTER GAR;Lo;0;L;;;;;N;;;;;
+16B9;RUNIC LETTER WUNJO WYNN W;Lo;0;L;;;;;N;;;;;
+16BA;RUNIC LETTER HAGLAZ H;Lo;0;L;;;;;N;;;;;
+16BB;RUNIC LETTER HAEGL H;Lo;0;L;;;;;N;;;;;
+16BC;RUNIC LETTER LONG-BRANCH-HAGALL H;Lo;0;L;;;;;N;;;;;
+16BD;RUNIC LETTER SHORT-TWIG-HAGALL H;Lo;0;L;;;;;N;;;;;
+16BE;RUNIC LETTER NAUDIZ NYD NAUD N;Lo;0;L;;;;;N;;;;;
+16BF;RUNIC LETTER SHORT-TWIG-NAUD N;Lo;0;L;;;;;N;;;;;
+16C0;RUNIC LETTER DOTTED-N;Lo;0;L;;;;;N;;;;;
+16C1;RUNIC LETTER ISAZ IS ISS I;Lo;0;L;;;;;N;;;;;
+16C2;RUNIC LETTER E;Lo;0;L;;;;;N;;;;;
+16C3;RUNIC LETTER JERAN J;Lo;0;L;;;;;N;;;;;
+16C4;RUNIC LETTER GER;Lo;0;L;;;;;N;;;;;
+16C5;RUNIC LETTER LONG-BRANCH-AR AE;Lo;0;L;;;;;N;;;;;
+16C6;RUNIC LETTER SHORT-TWIG-AR A;Lo;0;L;;;;;N;;;;;
+16C7;RUNIC LETTER IWAZ EOH;Lo;0;L;;;;;N;;;;;
+16C8;RUNIC LETTER PERTHO PEORTH P;Lo;0;L;;;;;N;;;;;
+16C9;RUNIC LETTER ALGIZ EOLHX;Lo;0;L;;;;;N;;;;;
+16CA;RUNIC LETTER SOWILO S;Lo;0;L;;;;;N;;;;;
+16CB;RUNIC LETTER SIGEL LONG-BRANCH-SOL S;Lo;0;L;;;;;N;;;;;
+16CC;RUNIC LETTER SHORT-TWIG-SOL S;Lo;0;L;;;;;N;;;;;
+16CD;RUNIC LETTER C;Lo;0;L;;;;;N;;;;;
+16CE;RUNIC LETTER Z;Lo;0;L;;;;;N;;;;;
+16CF;RUNIC LETTER TIWAZ TIR TYR T;Lo;0;L;;;;;N;;;;;
+16D0;RUNIC LETTER SHORT-TWIG-TYR T;Lo;0;L;;;;;N;;;;;
+16D1;RUNIC LETTER D;Lo;0;L;;;;;N;;;;;
+16D2;RUNIC LETTER BERKANAN BEORC BJARKAN B;Lo;0;L;;;;;N;;;;;
+16D3;RUNIC LETTER SHORT-TWIG-BJARKAN B;Lo;0;L;;;;;N;;;;;
+16D4;RUNIC LETTER DOTTED-P;Lo;0;L;;;;;N;;;;;
+16D5;RUNIC LETTER OPEN-P;Lo;0;L;;;;;N;;;;;
+16D6;RUNIC LETTER EHWAZ EH E;Lo;0;L;;;;;N;;;;;
+16D7;RUNIC LETTER MANNAZ MAN M;Lo;0;L;;;;;N;;;;;
+16D8;RUNIC LETTER LONG-BRANCH-MADR M;Lo;0;L;;;;;N;;;;;
+16D9;RUNIC LETTER SHORT-TWIG-MADR M;Lo;0;L;;;;;N;;;;;
+16DA;RUNIC LETTER LAUKAZ LAGU LOGR L;Lo;0;L;;;;;N;;;;;
+16DB;RUNIC LETTER DOTTED-L;Lo;0;L;;;;;N;;;;;
+16DC;RUNIC LETTER INGWAZ;Lo;0;L;;;;;N;;;;;
+16DD;RUNIC LETTER ING;Lo;0;L;;;;;N;;;;;
+16DE;RUNIC LETTER DAGAZ DAEG D;Lo;0;L;;;;;N;;;;;
+16DF;RUNIC LETTER OTHALAN ETHEL O;Lo;0;L;;;;;N;;;;;
+16E0;RUNIC LETTER EAR;Lo;0;L;;;;;N;;;;;
+16E1;RUNIC LETTER IOR;Lo;0;L;;;;;N;;;;;
+16E2;RUNIC LETTER CWEORTH;Lo;0;L;;;;;N;;;;;
+16E3;RUNIC LETTER CALC;Lo;0;L;;;;;N;;;;;
+16E4;RUNIC LETTER CEALC;Lo;0;L;;;;;N;;;;;
+16E5;RUNIC LETTER STAN;Lo;0;L;;;;;N;;;;;
+16E6;RUNIC LETTER LONG-BRANCH-YR;Lo;0;L;;;;;N;;;;;
+16E7;RUNIC LETTER SHORT-TWIG-YR;Lo;0;L;;;;;N;;;;;
+16E8;RUNIC LETTER ICELANDIC-YR;Lo;0;L;;;;;N;;;;;
+16E9;RUNIC LETTER Q;Lo;0;L;;;;;N;;;;;
+16EA;RUNIC LETTER X;Lo;0;L;;;;;N;;;;;
+16EB;RUNIC SINGLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+16EC;RUNIC MULTIPLE PUNCTUATION;Po;0;L;;;;;N;;;;;
+16ED;RUNIC CROSS PUNCTUATION;Po;0;L;;;;;N;;;;;
+16EE;RUNIC ARLAUG SYMBOL;No;0;L;;;;17;N;;golden number 17;;;
+16EF;RUNIC TVIMADUR SYMBOL;No;0;L;;;;18;N;;golden number 18;;;
+16F0;RUNIC BELGTHOR SYMBOL;No;0;L;;;;19;N;;golden number 19;;;
+1780;KHMER LETTER KA;Lo;0;L;;;;;N;;;;;
+1781;KHMER LETTER KHA;Lo;0;L;;;;;N;;;;;
+1782;KHMER LETTER KO;Lo;0;L;;;;;N;;;;;
+1783;KHMER LETTER KHO;Lo;0;L;;;;;N;;;;;
+1784;KHMER LETTER NGO;Lo;0;L;;;;;N;;;;;
+1785;KHMER LETTER CA;Lo;0;L;;;;;N;;;;;
+1786;KHMER LETTER CHA;Lo;0;L;;;;;N;;;;;
+1787;KHMER LETTER CO;Lo;0;L;;;;;N;;;;;
+1788;KHMER LETTER CHO;Lo;0;L;;;;;N;;;;;
+1789;KHMER LETTER NYO;Lo;0;L;;;;;N;;;;;
+178A;KHMER LETTER DA;Lo;0;L;;;;;N;;;;;
+178B;KHMER LETTER TTHA;Lo;0;L;;;;;N;;;;;
+178C;KHMER LETTER DO;Lo;0;L;;;;;N;;;;;
+178D;KHMER LETTER TTHO;Lo;0;L;;;;;N;;;;;
+178E;KHMER LETTER NNO;Lo;0;L;;;;;N;;;;;
+178F;KHMER LETTER TA;Lo;0;L;;;;;N;;;;;
+1790;KHMER LETTER THA;Lo;0;L;;;;;N;;;;;
+1791;KHMER LETTER TO;Lo;0;L;;;;;N;;;;;
+1792;KHMER LETTER THO;Lo;0;L;;;;;N;;;;;
+1793;KHMER LETTER NO;Lo;0;L;;;;;N;;;;;
+1794;KHMER LETTER BA;Lo;0;L;;;;;N;;;;;
+1795;KHMER LETTER PHA;Lo;0;L;;;;;N;;;;;
+1796;KHMER LETTER PO;Lo;0;L;;;;;N;;;;;
+1797;KHMER LETTER PHO;Lo;0;L;;;;;N;;;;;
+1798;KHMER LETTER MO;Lo;0;L;;;;;N;;;;;
+1799;KHMER LETTER YO;Lo;0;L;;;;;N;;;;;
+179A;KHMER LETTER RO;Lo;0;L;;;;;N;;;;;
+179B;KHMER LETTER LO;Lo;0;L;;;;;N;;;;;
+179C;KHMER LETTER VO;Lo;0;L;;;;;N;;;;;
+179D;KHMER LETTER SHA;Lo;0;L;;;;;N;;;;;
+179E;KHMER LETTER SSO;Lo;0;L;;;;;N;;;;;
+179F;KHMER LETTER SA;Lo;0;L;;;;;N;;;;;
+17A0;KHMER LETTER HA;Lo;0;L;;;;;N;;;;;
+17A1;KHMER LETTER LA;Lo;0;L;;;;;N;;;;;
+17A2;KHMER LETTER QA;Lo;0;L;;;;;N;;;;;
+17A3;KHMER INDEPENDENT VOWEL QAQ;Lo;0;L;;;;;N;;;;;
+17A4;KHMER INDEPENDENT VOWEL QAA;Lo;0;L;;;;;N;;;;;
+17A5;KHMER INDEPENDENT VOWEL QI;Lo;0;L;;;;;N;;;;;
+17A6;KHMER INDEPENDENT VOWEL QII;Lo;0;L;;;;;N;;;;;
+17A7;KHMER INDEPENDENT VOWEL QU;Lo;0;L;;;;;N;;;;;
+17A8;KHMER INDEPENDENT VOWEL QUK;Lo;0;L;;;;;N;;;;;
+17A9;KHMER INDEPENDENT VOWEL QUU;Lo;0;L;;;;;N;;;;;
+17AA;KHMER INDEPENDENT VOWEL QUUV;Lo;0;L;;;;;N;;;;;
+17AB;KHMER INDEPENDENT VOWEL RY;Lo;0;L;;;;;N;;;;;
+17AC;KHMER INDEPENDENT VOWEL RYY;Lo;0;L;;;;;N;;;;;
+17AD;KHMER INDEPENDENT VOWEL LY;Lo;0;L;;;;;N;;;;;
+17AE;KHMER INDEPENDENT VOWEL LYY;Lo;0;L;;;;;N;;;;;
+17AF;KHMER INDEPENDENT VOWEL QE;Lo;0;L;;;;;N;;;;;
+17B0;KHMER INDEPENDENT VOWEL QAI;Lo;0;L;;;;;N;;;;;
+17B1;KHMER INDEPENDENT VOWEL QOO TYPE ONE;Lo;0;L;;;;;N;;;;;
+17B2;KHMER INDEPENDENT VOWEL QOO TYPE TWO;Lo;0;L;;;;;N;;;;;
+17B3;KHMER INDEPENDENT VOWEL QAU;Lo;0;L;;;;;N;;;;;
+17B4;KHMER VOWEL INHERENT AQ;Mc;0;L;;;;;N;;;;;
+17B5;KHMER VOWEL INHERENT AA;Mc;0;L;;;;;N;;;;;
+17B6;KHMER VOWEL SIGN AA;Mc;0;L;;;;;N;;;;;
+17B7;KHMER VOWEL SIGN I;Mn;0;NSM;;;;;N;;;;;
+17B8;KHMER VOWEL SIGN II;Mn;0;NSM;;;;;N;;;;;
+17B9;KHMER VOWEL SIGN Y;Mn;0;NSM;;;;;N;;;;;
+17BA;KHMER VOWEL SIGN YY;Mn;0;NSM;;;;;N;;;;;
+17BB;KHMER VOWEL SIGN U;Mn;0;NSM;;;;;N;;;;;
+17BC;KHMER VOWEL SIGN UU;Mn;0;NSM;;;;;N;;;;;
+17BD;KHMER VOWEL SIGN UA;Mn;0;NSM;;;;;N;;;;;
+17BE;KHMER VOWEL SIGN OE;Mc;0;L;;;;;N;;;;;
+17BF;KHMER VOWEL SIGN YA;Mc;0;L;;;;;N;;;;;
+17C0;KHMER VOWEL SIGN IE;Mc;0;L;;;;;N;;;;;
+17C1;KHMER VOWEL SIGN E;Mc;0;L;;;;;N;;;;;
+17C2;KHMER VOWEL SIGN AE;Mc;0;L;;;;;N;;;;;
+17C3;KHMER VOWEL SIGN AI;Mc;0;L;;;;;N;;;;;
+17C4;KHMER VOWEL SIGN OO;Mc;0;L;;;;;N;;;;;
+17C5;KHMER VOWEL SIGN AU;Mc;0;L;;;;;N;;;;;
+17C6;KHMER SIGN NIKAHIT;Mn;0;NSM;;;;;N;;;;;
+17C7;KHMER SIGN REAHMUK;Mc;0;L;;;;;N;;;;;
+17C8;KHMER SIGN YUUKALEAPINTU;Mc;0;L;;;;;N;;;;;
+17C9;KHMER SIGN MUUSIKATOAN;Mn;0;NSM;;;;;N;;;;;
+17CA;KHMER SIGN TRIISAP;Mn;0;NSM;;;;;N;;;;;
+17CB;KHMER SIGN BANTOC;Mn;0;NSM;;;;;N;;;;;
+17CC;KHMER SIGN ROBAT;Mn;0;NSM;;;;;N;;;;;
+17CD;KHMER SIGN TOANDAKHIAT;Mn;0;NSM;;;;;N;;;;;
+17CE;KHMER SIGN KAKABAT;Mn;0;NSM;;;;;N;;;;;
+17CF;KHMER SIGN AHSDA;Mn;0;NSM;;;;;N;;;;;
+17D0;KHMER SIGN SAMYOK SANNYA;Mn;0;NSM;;;;;N;;;;;
+17D1;KHMER SIGN VIRIAM;Mn;0;NSM;;;;;N;;;;;
+17D2;KHMER SIGN COENG;Mn;9;NSM;;;;;N;;;;;
+17D3;KHMER SIGN BATHAMASAT;Mn;0;NSM;;;;;N;;;;;
+17D4;KHMER SIGN KHAN;Po;0;L;;;;;N;;;;;
+17D5;KHMER SIGN BARIYOOSAN;Po;0;L;;;;;N;;;;;
+17D6;KHMER SIGN CAMNUC PII KUUH;Po;0;L;;;;;N;;;;;
+17D7;KHMER SIGN LEK TOO;Po;0;L;;;;;N;;;;;
+17D8;KHMER SIGN BEYYAL;Po;0;L;;;;;N;;;;;
+17D9;KHMER SIGN PHNAEK MUAN;Po;0;L;;;;;N;;;;;
+17DA;KHMER SIGN KOOMUUT;Po;0;L;;;;;N;;;;;
+17DB;KHMER CURRENCY SYMBOL RIEL;Sc;0;ET;;;;;N;;;;;
+17DC;KHMER SIGN AVAKRAHASANYA;Po;0;L;;;;;N;;;;;
+17E0;KHMER DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+17E1;KHMER DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+17E2;KHMER DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+17E3;KHMER DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+17E4;KHMER DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+17E5;KHMER DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+17E6;KHMER DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+17E7;KHMER DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+17E8;KHMER DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+17E9;KHMER DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1800;MONGOLIAN BIRGA;Po;0;ON;;;;;N;;;;;
+1801;MONGOLIAN ELLIPSIS;Po;0;ON;;;;;N;;;;;
+1802;MONGOLIAN COMMA;Po;0;ON;;;;;N;;;;;
+1803;MONGOLIAN FULL STOP;Po;0;ON;;;;;N;;;;;
+1804;MONGOLIAN COLON;Po;0;ON;;;;;N;;;;;
+1805;MONGOLIAN FOUR DOTS;Po;0;ON;;;;;N;;;;;
+1806;MONGOLIAN TODO SOFT HYPHEN;Pd;0;ON;;;;;N;;;;;
+1807;MONGOLIAN SIBE SYLLABLE BOUNDARY MARKER;Po;0;ON;;;;;N;;;;;
+1808;MONGOLIAN MANCHU COMMA;Po;0;ON;;;;;N;;;;;
+1809;MONGOLIAN MANCHU FULL STOP;Po;0;ON;;;;;N;;;;;
+180A;MONGOLIAN NIRUGU;Po;0;ON;;;;;N;;;;;
+180B;MONGOLIAN FREE VARIATION SELECTOR ONE;Cf;0;BN;;;;;N;;;;;
+180C;MONGOLIAN FREE VARIATION SELECTOR TWO;Cf;0;BN;;;;;N;;;;;
+180D;MONGOLIAN FREE VARIATION SELECTOR THREE;Cf;0;BN;;;;;N;;;;;
+180E;MONGOLIAN VOWEL SEPARATOR;Cf;0;BN;;;;;N;;;;;
+1810;MONGOLIAN DIGIT ZERO;Nd;0;L;;0;0;0;N;;;;;
+1811;MONGOLIAN DIGIT ONE;Nd;0;L;;1;1;1;N;;;;;
+1812;MONGOLIAN DIGIT TWO;Nd;0;L;;2;2;2;N;;;;;
+1813;MONGOLIAN DIGIT THREE;Nd;0;L;;3;3;3;N;;;;;
+1814;MONGOLIAN DIGIT FOUR;Nd;0;L;;4;4;4;N;;;;;
+1815;MONGOLIAN DIGIT FIVE;Nd;0;L;;5;5;5;N;;;;;
+1816;MONGOLIAN DIGIT SIX;Nd;0;L;;6;6;6;N;;;;;
+1817;MONGOLIAN DIGIT SEVEN;Nd;0;L;;7;7;7;N;;;;;
+1818;MONGOLIAN DIGIT EIGHT;Nd;0;L;;8;8;8;N;;;;;
+1819;MONGOLIAN DIGIT NINE;Nd;0;L;;9;9;9;N;;;;;
+1820;MONGOLIAN LETTER A;Lo;0;L;;;;;N;;;;;
+1821;MONGOLIAN LETTER E;Lo;0;L;;;;;N;;;;;
+1822;MONGOLIAN LETTER I;Lo;0;L;;;;;N;;;;;
+1823;MONGOLIAN LETTER O;Lo;0;L;;;;;N;;;;;
+1824;MONGOLIAN LETTER U;Lo;0;L;;;;;N;;;;;
+1825;MONGOLIAN LETTER OE;Lo;0;L;;;;;N;;;;;
+1826;MONGOLIAN LETTER UE;Lo;0;L;;;;;N;;;;;
+1827;MONGOLIAN LETTER EE;Lo;0;L;;;;;N;;;;;
+1828;MONGOLIAN LETTER NA;Lo;0;L;;;;;N;;;;;
+1829;MONGOLIAN LETTER ANG;Lo;0;L;;;;;N;;;;;
+182A;MONGOLIAN LETTER BA;Lo;0;L;;;;;N;;;;;
+182B;MONGOLIAN LETTER PA;Lo;0;L;;;;;N;;;;;
+182C;MONGOLIAN LETTER QA;Lo;0;L;;;;;N;;;;;
+182D;MONGOLIAN LETTER GA;Lo;0;L;;;;;N;;;;;
+182E;MONGOLIAN LETTER MA;Lo;0;L;;;;;N;;;;;
+182F;MONGOLIAN LETTER LA;Lo;0;L;;;;;N;;;;;
+1830;MONGOLIAN LETTER SA;Lo;0;L;;;;;N;;;;;
+1831;MONGOLIAN LETTER SHA;Lo;0;L;;;;;N;;;;;
+1832;MONGOLIAN LETTER TA;Lo;0;L;;;;;N;;;;;
+1833;MONGOLIAN LETTER DA;Lo;0;L;;;;;N;;;;;
+1834;MONGOLIAN LETTER CHA;Lo;0;L;;;;;N;;;;;
+1835;MONGOLIAN LETTER JA;Lo;0;L;;;;;N;;;;;
+1836;MONGOLIAN LETTER YA;Lo;0;L;;;;;N;;;;;
+1837;MONGOLIAN LETTER RA;Lo;0;L;;;;;N;;;;;
+1838;MONGOLIAN LETTER WA;Lo;0;L;;;;;N;;;;;
+1839;MONGOLIAN LETTER FA;Lo;0;L;;;;;N;;;;;
+183A;MONGOLIAN LETTER KA;Lo;0;L;;;;;N;;;;;
+183B;MONGOLIAN LETTER KHA;Lo;0;L;;;;;N;;;;;
+183C;MONGOLIAN LETTER TSA;Lo;0;L;;;;;N;;;;;
+183D;MONGOLIAN LETTER ZA;Lo;0;L;;;;;N;;;;;
+183E;MONGOLIAN LETTER HAA;Lo;0;L;;;;;N;;;;;
+183F;MONGOLIAN LETTER ZRA;Lo;0;L;;;;;N;;;;;
+1840;MONGOLIAN LETTER LHA;Lo;0;L;;;;;N;;;;;
+1841;MONGOLIAN LETTER ZHI;Lo;0;L;;;;;N;;;;;
+1842;MONGOLIAN LETTER CHI;Lo;0;L;;;;;N;;;;;
+1843;MONGOLIAN LETTER TODO LONG VOWEL SIGN;Lm;0;L;;;;;N;;;;;
+1844;MONGOLIAN LETTER TODO E;Lo;0;L;;;;;N;;;;;
+1845;MONGOLIAN LETTER TODO I;Lo;0;L;;;;;N;;;;;
+1846;MONGOLIAN LETTER TODO O;Lo;0;L;;;;;N;;;;;
+1847;MONGOLIAN LETTER TODO U;Lo;0;L;;;;;N;;;;;
+1848;MONGOLIAN LETTER TODO OE;Lo;0;L;;;;;N;;;;;
+1849;MONGOLIAN LETTER TODO UE;Lo;0;L;;;;;N;;;;;
+184A;MONGOLIAN LETTER TODO ANG;Lo;0;L;;;;;N;;;;;
+184B;MONGOLIAN LETTER TODO BA;Lo;0;L;;;;;N;;;;;
+184C;MONGOLIAN LETTER TODO PA;Lo;0;L;;;;;N;;;;;
+184D;MONGOLIAN LETTER TODO QA;Lo;0;L;;;;;N;;;;;
+184E;MONGOLIAN LETTER TODO GA;Lo;0;L;;;;;N;;;;;
+184F;MONGOLIAN LETTER TODO MA;Lo;0;L;;;;;N;;;;;
+1850;MONGOLIAN LETTER TODO TA;Lo;0;L;;;;;N;;;;;
+1851;MONGOLIAN LETTER TODO DA;Lo;0;L;;;;;N;;;;;
+1852;MONGOLIAN LETTER TODO CHA;Lo;0;L;;;;;N;;;;;
+1853;MONGOLIAN LETTER TODO JA;Lo;0;L;;;;;N;;;;;
+1854;MONGOLIAN LETTER TODO TSA;Lo;0;L;;;;;N;;;;;
+1855;MONGOLIAN LETTER TODO YA;Lo;0;L;;;;;N;;;;;
+1856;MONGOLIAN LETTER TODO WA;Lo;0;L;;;;;N;;;;;
+1857;MONGOLIAN LETTER TODO KA;Lo;0;L;;;;;N;;;;;
+1858;MONGOLIAN LETTER TODO GAA;Lo;0;L;;;;;N;;;;;
+1859;MONGOLIAN LETTER TODO HAA;Lo;0;L;;;;;N;;;;;
+185A;MONGOLIAN LETTER TODO JIA;Lo;0;L;;;;;N;;;;;
+185B;MONGOLIAN LETTER TODO NIA;Lo;0;L;;;;;N;;;;;
+185C;MONGOLIAN LETTER TODO DZA;Lo;0;L;;;;;N;;;;;
+185D;MONGOLIAN LETTER SIBE E;Lo;0;L;;;;;N;;;;;
+185E;MONGOLIAN LETTER SIBE I;Lo;0;L;;;;;N;;;;;
+185F;MONGOLIAN LETTER SIBE IY;Lo;0;L;;;;;N;;;;;
+1860;MONGOLIAN LETTER SIBE UE;Lo;0;L;;;;;N;;;;;
+1861;MONGOLIAN LETTER SIBE U;Lo;0;L;;;;;N;;;;;
+1862;MONGOLIAN LETTER SIBE ANG;Lo;0;L;;;;;N;;;;;
+1863;MONGOLIAN LETTER SIBE KA;Lo;0;L;;;;;N;;;;;
+1864;MONGOLIAN LETTER SIBE GA;Lo;0;L;;;;;N;;;;;
+1865;MONGOLIAN LETTER SIBE HA;Lo;0;L;;;;;N;;;;;
+1866;MONGOLIAN LETTER SIBE PA;Lo;0;L;;;;;N;;;;;
+1867;MONGOLIAN LETTER SIBE SHA;Lo;0;L;;;;;N;;;;;
+1868;MONGOLIAN LETTER SIBE TA;Lo;0;L;;;;;N;;;;;
+1869;MONGOLIAN LETTER SIBE DA;Lo;0;L;;;;;N;;;;;
+186A;MONGOLIAN LETTER SIBE JA;Lo;0;L;;;;;N;;;;;
+186B;MONGOLIAN LETTER SIBE FA;Lo;0;L;;;;;N;;;;;
+186C;MONGOLIAN LETTER SIBE GAA;Lo;0;L;;;;;N;;;;;
+186D;MONGOLIAN LETTER SIBE HAA;Lo;0;L;;;;;N;;;;;
+186E;MONGOLIAN LETTER SIBE TSA;Lo;0;L;;;;;N;;;;;
+186F;MONGOLIAN LETTER SIBE ZA;Lo;0;L;;;;;N;;;;;
+1870;MONGOLIAN LETTER SIBE RAA;Lo;0;L;;;;;N;;;;;
+1871;MONGOLIAN LETTER SIBE CHA;Lo;0;L;;;;;N;;;;;
+1872;MONGOLIAN LETTER SIBE ZHA;Lo;0;L;;;;;N;;;;;
+1873;MONGOLIAN LETTER MANCHU I;Lo;0;L;;;;;N;;;;;
+1874;MONGOLIAN LETTER MANCHU KA;Lo;0;L;;;;;N;;;;;
+1875;MONGOLIAN LETTER MANCHU RA;Lo;0;L;;;;;N;;;;;
+1876;MONGOLIAN LETTER MANCHU FA;Lo;0;L;;;;;N;;;;;
+1877;MONGOLIAN LETTER MANCHU ZHA;Lo;0;L;;;;;N;;;;;
+1880;MONGOLIAN LETTER ALI GALI ANUSVARA ONE;Lo;0;L;;;;;N;;;;;
+1881;MONGOLIAN LETTER ALI GALI VISARGA ONE;Lo;0;L;;;;;N;;;;;
+1882;MONGOLIAN LETTER ALI GALI DAMARU;Lo;0;L;;;;;N;;;;;
+1883;MONGOLIAN LETTER ALI GALI UBADAMA;Lo;0;L;;;;;N;;;;;
+1884;MONGOLIAN LETTER ALI GALI INVERTED UBADAMA;Lo;0;L;;;;;N;;;;;
+1885;MONGOLIAN LETTER ALI GALI BALUDA;Lo;0;L;;;;;N;;;;;
+1886;MONGOLIAN LETTER ALI GALI THREE BALUDA;Lo;0;L;;;;;N;;;;;
+1887;MONGOLIAN LETTER ALI GALI A;Lo;0;L;;;;;N;;;;;
+1888;MONGOLIAN LETTER ALI GALI I;Lo;0;L;;;;;N;;;;;
+1889;MONGOLIAN LETTER ALI GALI KA;Lo;0;L;;;;;N;;;;;
+188A;MONGOLIAN LETTER ALI GALI NGA;Lo;0;L;;;;;N;;;;;
+188B;MONGOLIAN LETTER ALI GALI CA;Lo;0;L;;;;;N;;;;;
+188C;MONGOLIAN LETTER ALI GALI TTA;Lo;0;L;;;;;N;;;;;
+188D;MONGOLIAN LETTER ALI GALI TTHA;Lo;0;L;;;;;N;;;;;
+188E;MONGOLIAN LETTER ALI GALI DDA;Lo;0;L;;;;;N;;;;;
+188F;MONGOLIAN LETTER ALI GALI NNA;Lo;0;L;;;;;N;;;;;
+1890;MONGOLIAN LETTER ALI GALI TA;Lo;0;L;;;;;N;;;;;
+1891;MONGOLIAN LETTER ALI GALI DA;Lo;0;L;;;;;N;;;;;
+1892;MONGOLIAN LETTER ALI GALI PA;Lo;0;L;;;;;N;;;;;
+1893;MONGOLIAN LETTER ALI GALI PHA;Lo;0;L;;;;;N;;;;;
+1894;MONGOLIAN LETTER ALI GALI SSA;Lo;0;L;;;;;N;;;;;
+1895;MONGOLIAN LETTER ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+1896;MONGOLIAN LETTER ALI GALI ZA;Lo;0;L;;;;;N;;;;;
+1897;MONGOLIAN LETTER ALI GALI AH;Lo;0;L;;;;;N;;;;;
+1898;MONGOLIAN LETTER TODO ALI GALI TA;Lo;0;L;;;;;N;;;;;
+1899;MONGOLIAN LETTER TODO ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+189A;MONGOLIAN LETTER MANCHU ALI GALI GHA;Lo;0;L;;;;;N;;;;;
+189B;MONGOLIAN LETTER MANCHU ALI GALI NGA;Lo;0;L;;;;;N;;;;;
+189C;MONGOLIAN LETTER MANCHU ALI GALI CA;Lo;0;L;;;;;N;;;;;
+189D;MONGOLIAN LETTER MANCHU ALI GALI JHA;Lo;0;L;;;;;N;;;;;
+189E;MONGOLIAN LETTER MANCHU ALI GALI TTA;Lo;0;L;;;;;N;;;;;
+189F;MONGOLIAN LETTER MANCHU ALI GALI DDHA;Lo;0;L;;;;;N;;;;;
+18A0;MONGOLIAN LETTER MANCHU ALI GALI TA;Lo;0;L;;;;;N;;;;;
+18A1;MONGOLIAN LETTER MANCHU ALI GALI DHA;Lo;0;L;;;;;N;;;;;
+18A2;MONGOLIAN LETTER MANCHU ALI GALI SSA;Lo;0;L;;;;;N;;;;;
+18A3;MONGOLIAN LETTER MANCHU ALI GALI CYA;Lo;0;L;;;;;N;;;;;
+18A4;MONGOLIAN LETTER MANCHU ALI GALI ZHA;Lo;0;L;;;;;N;;;;;
+18A5;MONGOLIAN LETTER MANCHU ALI GALI ZA;Lo;0;L;;;;;N;;;;;
+18A6;MONGOLIAN LETTER ALI GALI HALF U;Lo;0;L;;;;;N;;;;;
+18A7;MONGOLIAN LETTER ALI GALI HALF YA;Lo;0;L;;;;;N;;;;;
+18A8;MONGOLIAN LETTER MANCHU ALI GALI BHA;Lo;0;L;;;;;N;;;;;
+18A9;MONGOLIAN LETTER ALI GALI DAGALGA;Mn;228;NSM;;;;;N;;;;;
+1E00;LATIN CAPITAL LETTER A WITH RING BELOW;Lu;0;L;0041 0325;;;;N;;;;1E01;
+1E01;LATIN SMALL LETTER A WITH RING BELOW;Ll;0;L;0061 0325;;;;N;;;1E00;;1E00
+1E02;LATIN CAPITAL LETTER B WITH DOT ABOVE;Lu;0;L;0042 0307;;;;N;;;;1E03;
+1E03;LATIN SMALL LETTER B WITH DOT ABOVE;Ll;0;L;0062 0307;;;;N;;;1E02;;1E02
+1E04;LATIN CAPITAL LETTER B WITH DOT BELOW;Lu;0;L;0042 0323;;;;N;;;;1E05;
+1E05;LATIN SMALL LETTER B WITH DOT BELOW;Ll;0;L;0062 0323;;;;N;;;1E04;;1E04
+1E06;LATIN CAPITAL LETTER B WITH LINE BELOW;Lu;0;L;0042 0331;;;;N;;;;1E07;
+1E07;LATIN SMALL LETTER B WITH LINE BELOW;Ll;0;L;0062 0331;;;;N;;;1E06;;1E06
+1E08;LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE;Lu;0;L;00C7 0301;;;;N;;;;1E09;
+1E09;LATIN SMALL LETTER C WITH CEDILLA AND ACUTE;Ll;0;L;00E7 0301;;;;N;;;1E08;;1E08
+1E0A;LATIN CAPITAL LETTER D WITH DOT ABOVE;Lu;0;L;0044 0307;;;;N;;;;1E0B;
+1E0B;LATIN SMALL LETTER D WITH DOT ABOVE;Ll;0;L;0064 0307;;;;N;;;1E0A;;1E0A
+1E0C;LATIN CAPITAL LETTER D WITH DOT BELOW;Lu;0;L;0044 0323;;;;N;;;;1E0D;
+1E0D;LATIN SMALL LETTER D WITH DOT BELOW;Ll;0;L;0064 0323;;;;N;;;1E0C;;1E0C
+1E0E;LATIN CAPITAL LETTER D WITH LINE BELOW;Lu;0;L;0044 0331;;;;N;;;;1E0F;
+1E0F;LATIN SMALL LETTER D WITH LINE BELOW;Ll;0;L;0064 0331;;;;N;;;1E0E;;1E0E
+1E10;LATIN CAPITAL LETTER D WITH CEDILLA;Lu;0;L;0044 0327;;;;N;;;;1E11;
+1E11;LATIN SMALL LETTER D WITH CEDILLA;Ll;0;L;0064 0327;;;;N;;;1E10;;1E10
+1E12;LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW;Lu;0;L;0044 032D;;;;N;;;;1E13;
+1E13;LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW;Ll;0;L;0064 032D;;;;N;;;1E12;;1E12
+1E14;LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;Lu;0;L;0112 0300;;;;N;;;;1E15;
+1E15;LATIN SMALL LETTER E WITH MACRON AND GRAVE;Ll;0;L;0113 0300;;;;N;;;1E14;;1E14
+1E16;LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;Lu;0;L;0112 0301;;;;N;;;;1E17;
+1E17;LATIN SMALL LETTER E WITH MACRON AND ACUTE;Ll;0;L;0113 0301;;;;N;;;1E16;;1E16
+1E18;LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW;Lu;0;L;0045 032D;;;;N;;;;1E19;
+1E19;LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW;Ll;0;L;0065 032D;;;;N;;;1E18;;1E18
+1E1A;LATIN CAPITAL LETTER E WITH TILDE BELOW;Lu;0;L;0045 0330;;;;N;;;;1E1B;
+1E1B;LATIN SMALL LETTER E WITH TILDE BELOW;Ll;0;L;0065 0330;;;;N;;;1E1A;;1E1A
+1E1C;LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE;Lu;0;L;0228 0306;;;;N;;;;1E1D;
+1E1D;LATIN SMALL LETTER E WITH CEDILLA AND BREVE;Ll;0;L;0229 0306;;;;N;;;1E1C;;1E1C
+1E1E;LATIN CAPITAL LETTER F WITH DOT ABOVE;Lu;0;L;0046 0307;;;;N;;;;1E1F;
+1E1F;LATIN SMALL LETTER F WITH DOT ABOVE;Ll;0;L;0066 0307;;;;N;;;1E1E;;1E1E
+1E20;LATIN CAPITAL LETTER G WITH MACRON;Lu;0;L;0047 0304;;;;N;;;;1E21;
+1E21;LATIN SMALL LETTER G WITH MACRON;Ll;0;L;0067 0304;;;;N;;;1E20;;1E20
+1E22;LATIN CAPITAL LETTER H WITH DOT ABOVE;Lu;0;L;0048 0307;;;;N;;;;1E23;
+1E23;LATIN SMALL LETTER H WITH DOT ABOVE;Ll;0;L;0068 0307;;;;N;;;1E22;;1E22
+1E24;LATIN CAPITAL LETTER H WITH DOT BELOW;Lu;0;L;0048 0323;;;;N;;;;1E25;
+1E25;LATIN SMALL LETTER H WITH DOT BELOW;Ll;0;L;0068 0323;;;;N;;;1E24;;1E24
+1E26;LATIN CAPITAL LETTER H WITH DIAERESIS;Lu;0;L;0048 0308;;;;N;;;;1E27;
+1E27;LATIN SMALL LETTER H WITH DIAERESIS;Ll;0;L;0068 0308;;;;N;;;1E26;;1E26
+1E28;LATIN CAPITAL LETTER H WITH CEDILLA;Lu;0;L;0048 0327;;;;N;;;;1E29;
+1E29;LATIN SMALL LETTER H WITH CEDILLA;Ll;0;L;0068 0327;;;;N;;;1E28;;1E28
+1E2A;LATIN CAPITAL LETTER H WITH BREVE BELOW;Lu;0;L;0048 032E;;;;N;;;;1E2B;
+1E2B;LATIN SMALL LETTER H WITH BREVE BELOW;Ll;0;L;0068 032E;;;;N;;;1E2A;;1E2A
+1E2C;LATIN CAPITAL LETTER I WITH TILDE BELOW;Lu;0;L;0049 0330;;;;N;;;;1E2D;
+1E2D;LATIN SMALL LETTER I WITH TILDE BELOW;Ll;0;L;0069 0330;;;;N;;;1E2C;;1E2C
+1E2E;LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE;Lu;0;L;00CF 0301;;;;N;;;;1E2F;
+1E2F;LATIN SMALL LETTER I WITH DIAERESIS AND ACUTE;Ll;0;L;00EF 0301;;;;N;;;1E2E;;1E2E
+1E30;LATIN CAPITAL LETTER K WITH ACUTE;Lu;0;L;004B 0301;;;;N;;;;1E31;
+1E31;LATIN SMALL LETTER K WITH ACUTE;Ll;0;L;006B 0301;;;;N;;;1E30;;1E30
+1E32;LATIN CAPITAL LETTER K WITH DOT BELOW;Lu;0;L;004B 0323;;;;N;;;;1E33;
+1E33;LATIN SMALL LETTER K WITH DOT BELOW;Ll;0;L;006B 0323;;;;N;;;1E32;;1E32
+1E34;LATIN CAPITAL LETTER K WITH LINE BELOW;Lu;0;L;004B 0331;;;;N;;;;1E35;
+1E35;LATIN SMALL LETTER K WITH LINE BELOW;Ll;0;L;006B 0331;;;;N;;;1E34;;1E34
+1E36;LATIN CAPITAL LETTER L WITH DOT BELOW;Lu;0;L;004C 0323;;;;N;;;;1E37;
+1E37;LATIN SMALL LETTER L WITH DOT BELOW;Ll;0;L;006C 0323;;;;N;;;1E36;;1E36
+1E38;LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON;Lu;0;L;1E36 0304;;;;N;;;;1E39;
+1E39;LATIN SMALL LETTER L WITH DOT BELOW AND MACRON;Ll;0;L;1E37 0304;;;;N;;;1E38;;1E38
+1E3A;LATIN CAPITAL LETTER L WITH LINE BELOW;Lu;0;L;004C 0331;;;;N;;;;1E3B;
+1E3B;LATIN SMALL LETTER L WITH LINE BELOW;Ll;0;L;006C 0331;;;;N;;;1E3A;;1E3A
+1E3C;LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW;Lu;0;L;004C 032D;;;;N;;;;1E3D;
+1E3D;LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW;Ll;0;L;006C 032D;;;;N;;;1E3C;;1E3C
+1E3E;LATIN CAPITAL LETTER M WITH ACUTE;Lu;0;L;004D 0301;;;;N;;;;1E3F;
+1E3F;LATIN SMALL LETTER M WITH ACUTE;Ll;0;L;006D 0301;;;;N;;;1E3E;;1E3E
+1E40;LATIN CAPITAL LETTER M WITH DOT ABOVE;Lu;0;L;004D 0307;;;;N;;;;1E41;
+1E41;LATIN SMALL LETTER M WITH DOT ABOVE;Ll;0;L;006D 0307;;;;N;;;1E40;;1E40
+1E42;LATIN CAPITAL LETTER M WITH DOT BELOW;Lu;0;L;004D 0323;;;;N;;;;1E43;
+1E43;LATIN SMALL LETTER M WITH DOT BELOW;Ll;0;L;006D 0323;;;;N;;;1E42;;1E42
+1E44;LATIN CAPITAL LETTER N WITH DOT ABOVE;Lu;0;L;004E 0307;;;;N;;;;1E45;
+1E45;LATIN SMALL LETTER N WITH DOT ABOVE;Ll;0;L;006E 0307;;;;N;;;1E44;;1E44
+1E46;LATIN CAPITAL LETTER N WITH DOT BELOW;Lu;0;L;004E 0323;;;;N;;;;1E47;
+1E47;LATIN SMALL LETTER N WITH DOT BELOW;Ll;0;L;006E 0323;;;;N;;;1E46;;1E46
+1E48;LATIN CAPITAL LETTER N WITH LINE BELOW;Lu;0;L;004E 0331;;;;N;;;;1E49;
+1E49;LATIN SMALL LETTER N WITH LINE BELOW;Ll;0;L;006E 0331;;;;N;;;1E48;;1E48
+1E4A;LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW;Lu;0;L;004E 032D;;;;N;;;;1E4B;
+1E4B;LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW;Ll;0;L;006E 032D;;;;N;;;1E4A;;1E4A
+1E4C;LATIN CAPITAL LETTER O WITH TILDE AND ACUTE;Lu;0;L;00D5 0301;;;;N;;;;1E4D;
+1E4D;LATIN SMALL LETTER O WITH TILDE AND ACUTE;Ll;0;L;00F5 0301;;;;N;;;1E4C;;1E4C
+1E4E;LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS;Lu;0;L;00D5 0308;;;;N;;;;1E4F;
+1E4F;LATIN SMALL LETTER O WITH TILDE AND DIAERESIS;Ll;0;L;00F5 0308;;;;N;;;1E4E;;1E4E
+1E50;LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;Lu;0;L;014C 0300;;;;N;;;;1E51;
+1E51;LATIN SMALL LETTER O WITH MACRON AND GRAVE;Ll;0;L;014D 0300;;;;N;;;1E50;;1E50
+1E52;LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;Lu;0;L;014C 0301;;;;N;;;;1E53;
+1E53;LATIN SMALL LETTER O WITH MACRON AND ACUTE;Ll;0;L;014D 0301;;;;N;;;1E52;;1E52
+1E54;LATIN CAPITAL LETTER P WITH ACUTE;Lu;0;L;0050 0301;;;;N;;;;1E55;
+1E55;LATIN SMALL LETTER P WITH ACUTE;Ll;0;L;0070 0301;;;;N;;;1E54;;1E54
+1E56;LATIN CAPITAL LETTER P WITH DOT ABOVE;Lu;0;L;0050 0307;;;;N;;;;1E57;
+1E57;LATIN SMALL LETTER P WITH DOT ABOVE;Ll;0;L;0070 0307;;;;N;;;1E56;;1E56
+1E58;LATIN CAPITAL LETTER R WITH DOT ABOVE;Lu;0;L;0052 0307;;;;N;;;;1E59;
+1E59;LATIN SMALL LETTER R WITH DOT ABOVE;Ll;0;L;0072 0307;;;;N;;;1E58;;1E58
+1E5A;LATIN CAPITAL LETTER R WITH DOT BELOW;Lu;0;L;0052 0323;;;;N;;;;1E5B;
+1E5B;LATIN SMALL LETTER R WITH DOT BELOW;Ll;0;L;0072 0323;;;;N;;;1E5A;;1E5A
+1E5C;LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON;Lu;0;L;1E5A 0304;;;;N;;;;1E5D;
+1E5D;LATIN SMALL LETTER R WITH DOT BELOW AND MACRON;Ll;0;L;1E5B 0304;;;;N;;;1E5C;;1E5C
+1E5E;LATIN CAPITAL LETTER R WITH LINE BELOW;Lu;0;L;0052 0331;;;;N;;;;1E5F;
+1E5F;LATIN SMALL LETTER R WITH LINE BELOW;Ll;0;L;0072 0331;;;;N;;;1E5E;;1E5E
+1E60;LATIN CAPITAL LETTER S WITH DOT ABOVE;Lu;0;L;0053 0307;;;;N;;;;1E61;
+1E61;LATIN SMALL LETTER S WITH DOT ABOVE;Ll;0;L;0073 0307;;;;N;;;1E60;;1E60
+1E62;LATIN CAPITAL LETTER S WITH DOT BELOW;Lu;0;L;0053 0323;;;;N;;;;1E63;
+1E63;LATIN SMALL LETTER S WITH DOT BELOW;Ll;0;L;0073 0323;;;;N;;;1E62;;1E62
+1E64;LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE;Lu;0;L;015A 0307;;;;N;;;;1E65;
+1E65;LATIN SMALL LETTER S WITH ACUTE AND DOT ABOVE;Ll;0;L;015B 0307;;;;N;;;1E64;;1E64
+1E66;LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE;Lu;0;L;0160 0307;;;;N;;;;1E67;
+1E67;LATIN SMALL LETTER S WITH CARON AND DOT ABOVE;Ll;0;L;0161 0307;;;;N;;;1E66;;1E66
+1E68;LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE;Lu;0;L;1E62 0307;;;;N;;;;1E69;
+1E69;LATIN SMALL LETTER S WITH DOT BELOW AND DOT ABOVE;Ll;0;L;1E63 0307;;;;N;;;1E68;;1E68
+1E6A;LATIN CAPITAL LETTER T WITH DOT ABOVE;Lu;0;L;0054 0307;;;;N;;;;1E6B;
+1E6B;LATIN SMALL LETTER T WITH DOT ABOVE;Ll;0;L;0074 0307;;;;N;;;1E6A;;1E6A
+1E6C;LATIN CAPITAL LETTER T WITH DOT BELOW;Lu;0;L;0054 0323;;;;N;;;;1E6D;
+1E6D;LATIN SMALL LETTER T WITH DOT BELOW;Ll;0;L;0074 0323;;;;N;;;1E6C;;1E6C
+1E6E;LATIN CAPITAL LETTER T WITH LINE BELOW;Lu;0;L;0054 0331;;;;N;;;;1E6F;
+1E6F;LATIN SMALL LETTER T WITH LINE BELOW;Ll;0;L;0074 0331;;;;N;;;1E6E;;1E6E
+1E70;LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW;Lu;0;L;0054 032D;;;;N;;;;1E71;
+1E71;LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW;Ll;0;L;0074 032D;;;;N;;;1E70;;1E70
+1E72;LATIN CAPITAL LETTER U WITH DIAERESIS BELOW;Lu;0;L;0055 0324;;;;N;;;;1E73;
+1E73;LATIN SMALL LETTER U WITH DIAERESIS BELOW;Ll;0;L;0075 0324;;;;N;;;1E72;;1E72
+1E74;LATIN CAPITAL LETTER U WITH TILDE BELOW;Lu;0;L;0055 0330;;;;N;;;;1E75;
+1E75;LATIN SMALL LETTER U WITH TILDE BELOW;Ll;0;L;0075 0330;;;;N;;;1E74;;1E74
+1E76;LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW;Lu;0;L;0055 032D;;;;N;;;;1E77;
+1E77;LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW;Ll;0;L;0075 032D;;;;N;;;1E76;;1E76
+1E78;LATIN CAPITAL LETTER U WITH TILDE AND ACUTE;Lu;0;L;0168 0301;;;;N;;;;1E79;
+1E79;LATIN SMALL LETTER U WITH TILDE AND ACUTE;Ll;0;L;0169 0301;;;;N;;;1E78;;1E78
+1E7A;LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS;Lu;0;L;016A 0308;;;;N;;;;1E7B;
+1E7B;LATIN SMALL LETTER U WITH MACRON AND DIAERESIS;Ll;0;L;016B 0308;;;;N;;;1E7A;;1E7A
+1E7C;LATIN CAPITAL LETTER V WITH TILDE;Lu;0;L;0056 0303;;;;N;;;;1E7D;
+1E7D;LATIN SMALL LETTER V WITH TILDE;Ll;0;L;0076 0303;;;;N;;;1E7C;;1E7C
+1E7E;LATIN CAPITAL LETTER V WITH DOT BELOW;Lu;0;L;0056 0323;;;;N;;;;1E7F;
+1E7F;LATIN SMALL LETTER V WITH DOT BELOW;Ll;0;L;0076 0323;;;;N;;;1E7E;;1E7E
+1E80;LATIN CAPITAL LETTER W WITH GRAVE;Lu;0;L;0057 0300;;;;N;;;;1E81;
+1E81;LATIN SMALL LETTER W WITH GRAVE;Ll;0;L;0077 0300;;;;N;;;1E80;;1E80
+1E82;LATIN CAPITAL LETTER W WITH ACUTE;Lu;0;L;0057 0301;;;;N;;;;1E83;
+1E83;LATIN SMALL LETTER W WITH ACUTE;Ll;0;L;0077 0301;;;;N;;;1E82;;1E82
+1E84;LATIN CAPITAL LETTER W WITH DIAERESIS;Lu;0;L;0057 0308;;;;N;;;;1E85;
+1E85;LATIN SMALL LETTER W WITH DIAERESIS;Ll;0;L;0077 0308;;;;N;;;1E84;;1E84
+1E86;LATIN CAPITAL LETTER W WITH DOT ABOVE;Lu;0;L;0057 0307;;;;N;;;;1E87;
+1E87;LATIN SMALL LETTER W WITH DOT ABOVE;Ll;0;L;0077 0307;;;;N;;;1E86;;1E86
+1E88;LATIN CAPITAL LETTER W WITH DOT BELOW;Lu;0;L;0057 0323;;;;N;;;;1E89;
+1E89;LATIN SMALL LETTER W WITH DOT BELOW;Ll;0;L;0077 0323;;;;N;;;1E88;;1E88
+1E8A;LATIN CAPITAL LETTER X WITH DOT ABOVE;Lu;0;L;0058 0307;;;;N;;;;1E8B;
+1E8B;LATIN SMALL LETTER X WITH DOT ABOVE;Ll;0;L;0078 0307;;;;N;;;1E8A;;1E8A
+1E8C;LATIN CAPITAL LETTER X WITH DIAERESIS;Lu;0;L;0058 0308;;;;N;;;;1E8D;
+1E8D;LATIN SMALL LETTER X WITH DIAERESIS;Ll;0;L;0078 0308;;;;N;;;1E8C;;1E8C
+1E8E;LATIN CAPITAL LETTER Y WITH DOT ABOVE;Lu;0;L;0059 0307;;;;N;;;;1E8F;
+1E8F;LATIN SMALL LETTER Y WITH DOT ABOVE;Ll;0;L;0079 0307;;;;N;;;1E8E;;1E8E
+1E90;LATIN CAPITAL LETTER Z WITH CIRCUMFLEX;Lu;0;L;005A 0302;;;;N;;;;1E91;
+1E91;LATIN SMALL LETTER Z WITH CIRCUMFLEX;Ll;0;L;007A 0302;;;;N;;;1E90;;1E90
+1E92;LATIN CAPITAL LETTER Z WITH DOT BELOW;Lu;0;L;005A 0323;;;;N;;;;1E93;
+1E93;LATIN SMALL LETTER Z WITH DOT BELOW;Ll;0;L;007A 0323;;;;N;;;1E92;;1E92
+1E94;LATIN CAPITAL LETTER Z WITH LINE BELOW;Lu;0;L;005A 0331;;;;N;;;;1E95;
+1E95;LATIN SMALL LETTER Z WITH LINE BELOW;Ll;0;L;007A 0331;;;;N;;;1E94;;1E94
+1E96;LATIN SMALL LETTER H WITH LINE BELOW;Ll;0;L;0068 0331;;;;N;;;;;
+1E97;LATIN SMALL LETTER T WITH DIAERESIS;Ll;0;L;0074 0308;;;;N;;;;;
+1E98;LATIN SMALL LETTER W WITH RING ABOVE;Ll;0;L;0077 030A;;;;N;;;;;
+1E99;LATIN SMALL LETTER Y WITH RING ABOVE;Ll;0;L;0079 030A;;;;N;;;;;
+1E9A;LATIN SMALL LETTER A WITH RIGHT HALF RING;Ll;0;L;<compat> 0061 02BE;;;;N;;;;;
+1E9B;LATIN SMALL LETTER LONG S WITH DOT ABOVE;Ll;0;L;017F 0307;;;;N;;;1E60;;1E60
+1EA0;LATIN CAPITAL LETTER A WITH DOT BELOW;Lu;0;L;0041 0323;;;;N;;;;1EA1;
+1EA1;LATIN SMALL LETTER A WITH DOT BELOW;Ll;0;L;0061 0323;;;;N;;;1EA0;;1EA0
+1EA2;LATIN CAPITAL LETTER A WITH HOOK ABOVE;Lu;0;L;0041 0309;;;;N;;;;1EA3;
+1EA3;LATIN SMALL LETTER A WITH HOOK ABOVE;Ll;0;L;0061 0309;;;;N;;;1EA2;;1EA2
+1EA4;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00C2 0301;;;;N;;;;1EA5;
+1EA5;LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00E2 0301;;;;N;;;1EA4;;1EA4
+1EA6;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00C2 0300;;;;N;;;;1EA7;
+1EA7;LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00E2 0300;;;;N;;;1EA6;;1EA6
+1EA8;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00C2 0309;;;;N;;;;1EA9;
+1EA9;LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00E2 0309;;;;N;;;1EA8;;1EA8
+1EAA;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE;Lu;0;L;00C2 0303;;;;N;;;;1EAB;
+1EAB;LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE;Ll;0;L;00E2 0303;;;;N;;;1EAA;;1EAA
+1EAC;LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EA0 0302;;;;N;;;;1EAD;
+1EAD;LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EA1 0302;;;;N;;;1EAC;;1EAC
+1EAE;LATIN CAPITAL LETTER A WITH BREVE AND ACUTE;Lu;0;L;0102 0301;;;;N;;;;1EAF;
+1EAF;LATIN SMALL LETTER A WITH BREVE AND ACUTE;Ll;0;L;0103 0301;;;;N;;;1EAE;;1EAE
+1EB0;LATIN CAPITAL LETTER A WITH BREVE AND GRAVE;Lu;0;L;0102 0300;;;;N;;;;1EB1;
+1EB1;LATIN SMALL LETTER A WITH BREVE AND GRAVE;Ll;0;L;0103 0300;;;;N;;;1EB0;;1EB0
+1EB2;LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE;Lu;0;L;0102 0309;;;;N;;;;1EB3;
+1EB3;LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE;Ll;0;L;0103 0309;;;;N;;;1EB2;;1EB2
+1EB4;LATIN CAPITAL LETTER A WITH BREVE AND TILDE;Lu;0;L;0102 0303;;;;N;;;;1EB5;
+1EB5;LATIN SMALL LETTER A WITH BREVE AND TILDE;Ll;0;L;0103 0303;;;;N;;;1EB4;;1EB4
+1EB6;LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW;Lu;0;L;1EA0 0306;;;;N;;;;1EB7;
+1EB7;LATIN SMALL LETTER A WITH BREVE AND DOT BELOW;Ll;0;L;1EA1 0306;;;;N;;;1EB6;;1EB6
+1EB8;LATIN CAPITAL LETTER E WITH DOT BELOW;Lu;0;L;0045 0323;;;;N;;;;1EB9;
+1EB9;LATIN SMALL LETTER E WITH DOT BELOW;Ll;0;L;0065 0323;;;;N;;;1EB8;;1EB8
+1EBA;LATIN CAPITAL LETTER E WITH HOOK ABOVE;Lu;0;L;0045 0309;;;;N;;;;1EBB;
+1EBB;LATIN SMALL LETTER E WITH HOOK ABOVE;Ll;0;L;0065 0309;;;;N;;;1EBA;;1EBA
+1EBC;LATIN CAPITAL LETTER E WITH TILDE;Lu;0;L;0045 0303;;;;N;;;;1EBD;
+1EBD;LATIN SMALL LETTER E WITH TILDE;Ll;0;L;0065 0303;;;;N;;;1EBC;;1EBC
+1EBE;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00CA 0301;;;;N;;;;1EBF;
+1EBF;LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00EA 0301;;;;N;;;1EBE;;1EBE
+1EC0;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00CA 0300;;;;N;;;;1EC1;
+1EC1;LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00EA 0300;;;;N;;;1EC0;;1EC0
+1EC2;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00CA 0309;;;;N;;;;1EC3;
+1EC3;LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00EA 0309;;;;N;;;1EC2;;1EC2
+1EC4;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE;Lu;0;L;00CA 0303;;;;N;;;;1EC5;
+1EC5;LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE;Ll;0;L;00EA 0303;;;;N;;;1EC4;;1EC4
+1EC6;LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1EB8 0302;;;;N;;;;1EC7;
+1EC7;LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1EB9 0302;;;;N;;;1EC6;;1EC6
+1EC8;LATIN CAPITAL LETTER I WITH HOOK ABOVE;Lu;0;L;0049 0309;;;;N;;;;1EC9;
+1EC9;LATIN SMALL LETTER I WITH HOOK ABOVE;Ll;0;L;0069 0309;;;;N;;;1EC8;;1EC8
+1ECA;LATIN CAPITAL LETTER I WITH DOT BELOW;Lu;0;L;0049 0323;;;;N;;;;1ECB;
+1ECB;LATIN SMALL LETTER I WITH DOT BELOW;Ll;0;L;0069 0323;;;;N;;;1ECA;;1ECA
+1ECC;LATIN CAPITAL LETTER O WITH DOT BELOW;Lu;0;L;004F 0323;;;;N;;;;1ECD;
+1ECD;LATIN SMALL LETTER O WITH DOT BELOW;Ll;0;L;006F 0323;;;;N;;;1ECC;;1ECC
+1ECE;LATIN CAPITAL LETTER O WITH HOOK ABOVE;Lu;0;L;004F 0309;;;;N;;;;1ECF;
+1ECF;LATIN SMALL LETTER O WITH HOOK ABOVE;Ll;0;L;006F 0309;;;;N;;;1ECE;;1ECE
+1ED0;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE;Lu;0;L;00D4 0301;;;;N;;;;1ED1;
+1ED1;LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE;Ll;0;L;00F4 0301;;;;N;;;1ED0;;1ED0
+1ED2;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE;Lu;0;L;00D4 0300;;;;N;;;;1ED3;
+1ED3;LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE;Ll;0;L;00F4 0300;;;;N;;;1ED2;;1ED2
+1ED4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Lu;0;L;00D4 0309;;;;N;;;;1ED5;
+1ED5;LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE;Ll;0;L;00F4 0309;;;;N;;;1ED4;;1ED4
+1ED6;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE;Lu;0;L;00D4 0303;;;;N;;;;1ED7;
+1ED7;LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE;Ll;0;L;00F4 0303;;;;N;;;1ED6;;1ED6
+1ED8;LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Lu;0;L;1ECC 0302;;;;N;;;;1ED9;
+1ED9;LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW;Ll;0;L;1ECD 0302;;;;N;;;1ED8;;1ED8
+1EDA;LATIN CAPITAL LETTER O WITH HORN AND ACUTE;Lu;0;L;01A0 0301;;;;N;;;;1EDB;
+1EDB;LATIN SMALL LETTER O WITH HORN AND ACUTE;Ll;0;L;01A1 0301;;;;N;;;1EDA;;1EDA
+1EDC;LATIN CAPITAL LETTER O WITH HORN AND GRAVE;Lu;0;L;01A0 0300;;;;N;;;;1EDD;
+1EDD;LATIN SMALL LETTER O WITH HORN AND GRAVE;Ll;0;L;01A1 0300;;;;N;;;1EDC;;1EDC
+1EDE;LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE;Lu;0;L;01A0 0309;;;;N;;;;1EDF;
+1EDF;LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE;Ll;0;L;01A1 0309;;;;N;;;1EDE;;1EDE
+1EE0;LATIN CAPITAL LETTER O WITH HORN AND TILDE;Lu;0;L;01A0 0303;;;;N;;;;1EE1;
+1EE1;LATIN SMALL LETTER O WITH HORN AND TILDE;Ll;0;L;01A1 0303;;;;N;;;1EE0;;1EE0
+1EE2;LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW;Lu;0;L;01A0 0323;;;;N;;;;1EE3;
+1EE3;LATIN SMALL LETTER O WITH HORN AND DOT BELOW;Ll;0;L;01A1 0323;;;;N;;;1EE2;;1EE2
+1EE4;LATIN CAPITAL LETTER U WITH DOT BELOW;Lu;0;L;0055 0323;;;;N;;;;1EE5;
+1EE5;LATIN SMALL LETTER U WITH DOT BELOW;Ll;0;L;0075 0323;;;;N;;;1EE4;;1EE4
+1EE6;LATIN CAPITAL LETTER U WITH HOOK ABOVE;Lu;0;L;0055 0309;;;;N;;;;1EE7;
+1EE7;LATIN SMALL LETTER U WITH HOOK ABOVE;Ll;0;L;0075 0309;;;;N;;;1EE6;;1EE6
+1EE8;LATIN CAPITAL LETTER U WITH HORN AND ACUTE;Lu;0;L;01AF 0301;;;;N;;;;1EE9;
+1EE9;LATIN SMALL LETTER U WITH HORN AND ACUTE;Ll;0;L;01B0 0301;;;;N;;;1EE8;;1EE8
+1EEA;LATIN CAPITAL LETTER U WITH HORN AND GRAVE;Lu;0;L;01AF 0300;;;;N;;;;1EEB;
+1EEB;LATIN SMALL LETTER U WITH HORN AND GRAVE;Ll;0;L;01B0 0300;;;;N;;;1EEA;;1EEA
+1EEC;LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE;Lu;0;L;01AF 0309;;;;N;;;;1EED;
+1EED;LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE;Ll;0;L;01B0 0309;;;;N;;;1EEC;;1EEC
+1EEE;LATIN CAPITAL LETTER U WITH HORN AND TILDE;Lu;0;L;01AF 0303;;;;N;;;;1EEF;
+1EEF;LATIN SMALL LETTER U WITH HORN AND TILDE;Ll;0;L;01B0 0303;;;;N;;;1EEE;;1EEE
+1EF0;LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW;Lu;0;L;01AF 0323;;;;N;;;;1EF1;
+1EF1;LATIN SMALL LETTER U WITH HORN AND DOT BELOW;Ll;0;L;01B0 0323;;;;N;;;1EF0;;1EF0
+1EF2;LATIN CAPITAL LETTER Y WITH GRAVE;Lu;0;L;0059 0300;;;;N;;;;1EF3;
+1EF3;LATIN SMALL LETTER Y WITH GRAVE;Ll;0;L;0079 0300;;;;N;;;1EF2;;1EF2
+1EF4;LATIN CAPITAL LETTER Y WITH DOT BELOW;Lu;0;L;0059 0323;;;;N;;;;1EF5;
+1EF5;LATIN SMALL LETTER Y WITH DOT BELOW;Ll;0;L;0079 0323;;;;N;;;1EF4;;1EF4
+1EF6;LATIN CAPITAL LETTER Y WITH HOOK ABOVE;Lu;0;L;0059 0309;;;;N;;;;1EF7;
+1EF7;LATIN SMALL LETTER Y WITH HOOK ABOVE;Ll;0;L;0079 0309;;;;N;;;1EF6;;1EF6
+1EF8;LATIN CAPITAL LETTER Y WITH TILDE;Lu;0;L;0059 0303;;;;N;;;;1EF9;
+1EF9;LATIN SMALL LETTER Y WITH TILDE;Ll;0;L;0079 0303;;;;N;;;1EF8;;1EF8
+1F00;GREEK SMALL LETTER ALPHA WITH PSILI;Ll;0;L;03B1 0313;;;;N;;;1F08;;1F08
+1F01;GREEK SMALL LETTER ALPHA WITH DASIA;Ll;0;L;03B1 0314;;;;N;;;1F09;;1F09
+1F02;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA;Ll;0;L;1F00 0300;;;;N;;;1F0A;;1F0A
+1F03;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA;Ll;0;L;1F01 0300;;;;N;;;1F0B;;1F0B
+1F04;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA;Ll;0;L;1F00 0301;;;;N;;;1F0C;;1F0C
+1F05;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA;Ll;0;L;1F01 0301;;;;N;;;1F0D;;1F0D
+1F06;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI;Ll;0;L;1F00 0342;;;;N;;;1F0E;;1F0E
+1F07;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI;Ll;0;L;1F01 0342;;;;N;;;1F0F;;1F0F
+1F08;GREEK CAPITAL LETTER ALPHA WITH PSILI;Lu;0;L;0391 0313;;;;N;;;;1F00;
+1F09;GREEK CAPITAL LETTER ALPHA WITH DASIA;Lu;0;L;0391 0314;;;;N;;;;1F01;
+1F0A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA;Lu;0;L;1F08 0300;;;;N;;;;1F02;
+1F0B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA;Lu;0;L;1F09 0300;;;;N;;;;1F03;
+1F0C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA;Lu;0;L;1F08 0301;;;;N;;;;1F04;
+1F0D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA;Lu;0;L;1F09 0301;;;;N;;;;1F05;
+1F0E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI;Lu;0;L;1F08 0342;;;;N;;;;1F06;
+1F0F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI;Lu;0;L;1F09 0342;;;;N;;;;1F07;
+1F10;GREEK SMALL LETTER EPSILON WITH PSILI;Ll;0;L;03B5 0313;;;;N;;;1F18;;1F18
+1F11;GREEK SMALL LETTER EPSILON WITH DASIA;Ll;0;L;03B5 0314;;;;N;;;1F19;;1F19
+1F12;GREEK SMALL LETTER EPSILON WITH PSILI AND VARIA;Ll;0;L;1F10 0300;;;;N;;;1F1A;;1F1A
+1F13;GREEK SMALL LETTER EPSILON WITH DASIA AND VARIA;Ll;0;L;1F11 0300;;;;N;;;1F1B;;1F1B
+1F14;GREEK SMALL LETTER EPSILON WITH PSILI AND OXIA;Ll;0;L;1F10 0301;;;;N;;;1F1C;;1F1C
+1F15;GREEK SMALL LETTER EPSILON WITH DASIA AND OXIA;Ll;0;L;1F11 0301;;;;N;;;1F1D;;1F1D
+1F18;GREEK CAPITAL LETTER EPSILON WITH PSILI;Lu;0;L;0395 0313;;;;N;;;;1F10;
+1F19;GREEK CAPITAL LETTER EPSILON WITH DASIA;Lu;0;L;0395 0314;;;;N;;;;1F11;
+1F1A;GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA;Lu;0;L;1F18 0300;;;;N;;;;1F12;
+1F1B;GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA;Lu;0;L;1F19 0300;;;;N;;;;1F13;
+1F1C;GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA;Lu;0;L;1F18 0301;;;;N;;;;1F14;
+1F1D;GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA;Lu;0;L;1F19 0301;;;;N;;;;1F15;
+1F20;GREEK SMALL LETTER ETA WITH PSILI;Ll;0;L;03B7 0313;;;;N;;;1F28;;1F28
+1F21;GREEK SMALL LETTER ETA WITH DASIA;Ll;0;L;03B7 0314;;;;N;;;1F29;;1F29
+1F22;GREEK SMALL LETTER ETA WITH PSILI AND VARIA;Ll;0;L;1F20 0300;;;;N;;;1F2A;;1F2A
+1F23;GREEK SMALL LETTER ETA WITH DASIA AND VARIA;Ll;0;L;1F21 0300;;;;N;;;1F2B;;1F2B
+1F24;GREEK SMALL LETTER ETA WITH PSILI AND OXIA;Ll;0;L;1F20 0301;;;;N;;;1F2C;;1F2C
+1F25;GREEK SMALL LETTER ETA WITH DASIA AND OXIA;Ll;0;L;1F21 0301;;;;N;;;1F2D;;1F2D
+1F26;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI;Ll;0;L;1F20 0342;;;;N;;;1F2E;;1F2E
+1F27;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI;Ll;0;L;1F21 0342;;;;N;;;1F2F;;1F2F
+1F28;GREEK CAPITAL LETTER ETA WITH PSILI;Lu;0;L;0397 0313;;;;N;;;;1F20;
+1F29;GREEK CAPITAL LETTER ETA WITH DASIA;Lu;0;L;0397 0314;;;;N;;;;1F21;
+1F2A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA;Lu;0;L;1F28 0300;;;;N;;;;1F22;
+1F2B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA;Lu;0;L;1F29 0300;;;;N;;;;1F23;
+1F2C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA;Lu;0;L;1F28 0301;;;;N;;;;1F24;
+1F2D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA;Lu;0;L;1F29 0301;;;;N;;;;1F25;
+1F2E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI;Lu;0;L;1F28 0342;;;;N;;;;1F26;
+1F2F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI;Lu;0;L;1F29 0342;;;;N;;;;1F27;
+1F30;GREEK SMALL LETTER IOTA WITH PSILI;Ll;0;L;03B9 0313;;;;N;;;1F38;;1F38
+1F31;GREEK SMALL LETTER IOTA WITH DASIA;Ll;0;L;03B9 0314;;;;N;;;1F39;;1F39
+1F32;GREEK SMALL LETTER IOTA WITH PSILI AND VARIA;Ll;0;L;1F30 0300;;;;N;;;1F3A;;1F3A
+1F33;GREEK SMALL LETTER IOTA WITH DASIA AND VARIA;Ll;0;L;1F31 0300;;;;N;;;1F3B;;1F3B
+1F34;GREEK SMALL LETTER IOTA WITH PSILI AND OXIA;Ll;0;L;1F30 0301;;;;N;;;1F3C;;1F3C
+1F35;GREEK SMALL LETTER IOTA WITH DASIA AND OXIA;Ll;0;L;1F31 0301;;;;N;;;1F3D;;1F3D
+1F36;GREEK SMALL LETTER IOTA WITH PSILI AND PERISPOMENI;Ll;0;L;1F30 0342;;;;N;;;1F3E;;1F3E
+1F37;GREEK SMALL LETTER IOTA WITH DASIA AND PERISPOMENI;Ll;0;L;1F31 0342;;;;N;;;1F3F;;1F3F
+1F38;GREEK CAPITAL LETTER IOTA WITH PSILI;Lu;0;L;0399 0313;;;;N;;;;1F30;
+1F39;GREEK CAPITAL LETTER IOTA WITH DASIA;Lu;0;L;0399 0314;;;;N;;;;1F31;
+1F3A;GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA;Lu;0;L;1F38 0300;;;;N;;;;1F32;
+1F3B;GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA;Lu;0;L;1F39 0300;;;;N;;;;1F33;
+1F3C;GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA;Lu;0;L;1F38 0301;;;;N;;;;1F34;
+1F3D;GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA;Lu;0;L;1F39 0301;;;;N;;;;1F35;
+1F3E;GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI;Lu;0;L;1F38 0342;;;;N;;;;1F36;
+1F3F;GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI;Lu;0;L;1F39 0342;;;;N;;;;1F37;
+1F40;GREEK SMALL LETTER OMICRON WITH PSILI;Ll;0;L;03BF 0313;;;;N;;;1F48;;1F48
+1F41;GREEK SMALL LETTER OMICRON WITH DASIA;Ll;0;L;03BF 0314;;;;N;;;1F49;;1F49
+1F42;GREEK SMALL LETTER OMICRON WITH PSILI AND VARIA;Ll;0;L;1F40 0300;;;;N;;;1F4A;;1F4A
+1F43;GREEK SMALL LETTER OMICRON WITH DASIA AND VARIA;Ll;0;L;1F41 0300;;;;N;;;1F4B;;1F4B
+1F44;GREEK SMALL LETTER OMICRON WITH PSILI AND OXIA;Ll;0;L;1F40 0301;;;;N;;;1F4C;;1F4C
+1F45;GREEK SMALL LETTER OMICRON WITH DASIA AND OXIA;Ll;0;L;1F41 0301;;;;N;;;1F4D;;1F4D
+1F48;GREEK CAPITAL LETTER OMICRON WITH PSILI;Lu;0;L;039F 0313;;;;N;;;;1F40;
+1F49;GREEK CAPITAL LETTER OMICRON WITH DASIA;Lu;0;L;039F 0314;;;;N;;;;1F41;
+1F4A;GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA;Lu;0;L;1F48 0300;;;;N;;;;1F42;
+1F4B;GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA;Lu;0;L;1F49 0300;;;;N;;;;1F43;
+1F4C;GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA;Lu;0;L;1F48 0301;;;;N;;;;1F44;
+1F4D;GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA;Lu;0;L;1F49 0301;;;;N;;;;1F45;
+1F50;GREEK SMALL LETTER UPSILON WITH PSILI;Ll;0;L;03C5 0313;;;;N;;;;;
+1F51;GREEK SMALL LETTER UPSILON WITH DASIA;Ll;0;L;03C5 0314;;;;N;;;1F59;;1F59
+1F52;GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA;Ll;0;L;1F50 0300;;;;N;;;;;
+1F53;GREEK SMALL LETTER UPSILON WITH DASIA AND VARIA;Ll;0;L;1F51 0300;;;;N;;;1F5B;;1F5B
+1F54;GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA;Ll;0;L;1F50 0301;;;;N;;;;;
+1F55;GREEK SMALL LETTER UPSILON WITH DASIA AND OXIA;Ll;0;L;1F51 0301;;;;N;;;1F5D;;1F5D
+1F56;GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI;Ll;0;L;1F50 0342;;;;N;;;;;
+1F57;GREEK SMALL LETTER UPSILON WITH DASIA AND PERISPOMENI;Ll;0;L;1F51 0342;;;;N;;;1F5F;;1F5F
+1F59;GREEK CAPITAL LETTER UPSILON WITH DASIA;Lu;0;L;03A5 0314;;;;N;;;;1F51;
+1F5B;GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA;Lu;0;L;1F59 0300;;;;N;;;;1F53;
+1F5D;GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA;Lu;0;L;1F59 0301;;;;N;;;;1F55;
+1F5F;GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI;Lu;0;L;1F59 0342;;;;N;;;;1F57;
+1F60;GREEK SMALL LETTER OMEGA WITH PSILI;Ll;0;L;03C9 0313;;;;N;;;1F68;;1F68
+1F61;GREEK SMALL LETTER OMEGA WITH DASIA;Ll;0;L;03C9 0314;;;;N;;;1F69;;1F69
+1F62;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA;Ll;0;L;1F60 0300;;;;N;;;1F6A;;1F6A
+1F63;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA;Ll;0;L;1F61 0300;;;;N;;;1F6B;;1F6B
+1F64;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA;Ll;0;L;1F60 0301;;;;N;;;1F6C;;1F6C
+1F65;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA;Ll;0;L;1F61 0301;;;;N;;;1F6D;;1F6D
+1F66;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI;Ll;0;L;1F60 0342;;;;N;;;1F6E;;1F6E
+1F67;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI;Ll;0;L;1F61 0342;;;;N;;;1F6F;;1F6F
+1F68;GREEK CAPITAL LETTER OMEGA WITH PSILI;Lu;0;L;03A9 0313;;;;N;;;;1F60;
+1F69;GREEK CAPITAL LETTER OMEGA WITH DASIA;Lu;0;L;03A9 0314;;;;N;;;;1F61;
+1F6A;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA;Lu;0;L;1F68 0300;;;;N;;;;1F62;
+1F6B;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA;Lu;0;L;1F69 0300;;;;N;;;;1F63;
+1F6C;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA;Lu;0;L;1F68 0301;;;;N;;;;1F64;
+1F6D;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA;Lu;0;L;1F69 0301;;;;N;;;;1F65;
+1F6E;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI;Lu;0;L;1F68 0342;;;;N;;;;1F66;
+1F6F;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI;Lu;0;L;1F69 0342;;;;N;;;;1F67;
+1F70;GREEK SMALL LETTER ALPHA WITH VARIA;Ll;0;L;03B1 0300;;;;N;;;1FBA;;1FBA
+1F71;GREEK SMALL LETTER ALPHA WITH OXIA;Ll;0;L;03AC;;;;N;;;1FBB;;1FBB
+1F72;GREEK SMALL LETTER EPSILON WITH VARIA;Ll;0;L;03B5 0300;;;;N;;;1FC8;;1FC8
+1F73;GREEK SMALL LETTER EPSILON WITH OXIA;Ll;0;L;03AD;;;;N;;;1FC9;;1FC9
+1F74;GREEK SMALL LETTER ETA WITH VARIA;Ll;0;L;03B7 0300;;;;N;;;1FCA;;1FCA
+1F75;GREEK SMALL LETTER ETA WITH OXIA;Ll;0;L;03AE;;;;N;;;1FCB;;1FCB
+1F76;GREEK SMALL LETTER IOTA WITH VARIA;Ll;0;L;03B9 0300;;;;N;;;1FDA;;1FDA
+1F77;GREEK SMALL LETTER IOTA WITH OXIA;Ll;0;L;03AF;;;;N;;;1FDB;;1FDB
+1F78;GREEK SMALL LETTER OMICRON WITH VARIA;Ll;0;L;03BF 0300;;;;N;;;1FF8;;1FF8
+1F79;GREEK SMALL LETTER OMICRON WITH OXIA;Ll;0;L;03CC;;;;N;;;1FF9;;1FF9
+1F7A;GREEK SMALL LETTER UPSILON WITH VARIA;Ll;0;L;03C5 0300;;;;N;;;1FEA;;1FEA
+1F7B;GREEK SMALL LETTER UPSILON WITH OXIA;Ll;0;L;03CD;;;;N;;;1FEB;;1FEB
+1F7C;GREEK SMALL LETTER OMEGA WITH VARIA;Ll;0;L;03C9 0300;;;;N;;;1FFA;;1FFA
+1F7D;GREEK SMALL LETTER OMEGA WITH OXIA;Ll;0;L;03CE;;;;N;;;1FFB;;1FFB
+1F80;GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F00 0345;;;;N;;;1F88;;1F88
+1F81;GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F01 0345;;;;N;;;1F89;;1F89
+1F82;GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F02 0345;;;;N;;;1F8A;;1F8A
+1F83;GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F03 0345;;;;N;;;1F8B;;1F8B
+1F84;GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F04 0345;;;;N;;;1F8C;;1F8C
+1F85;GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F05 0345;;;;N;;;1F8D;;1F8D
+1F86;GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F06 0345;;;;N;;;1F8E;;1F8E
+1F87;GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F07 0345;;;;N;;;1F8F;;1F8F
+1F88;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F08 0345;;;;N;;;;1F80;
+1F89;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F09 0345;;;;N;;;;1F81;
+1F8A;GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0A 0345;;;;N;;;;1F82;
+1F8B;GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F0B 0345;;;;N;;;;1F83;
+1F8C;GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0C 0345;;;;N;;;;1F84;
+1F8D;GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F0D 0345;;;;N;;;;1F85;
+1F8E;GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0E 0345;;;;N;;;;1F86;
+1F8F;GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F0F 0345;;;;N;;;;1F87;
+1F90;GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F20 0345;;;;N;;;1F98;;1F98
+1F91;GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F21 0345;;;;N;;;1F99;;1F99
+1F92;GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F22 0345;;;;N;;;1F9A;;1F9A
+1F93;GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F23 0345;;;;N;;;1F9B;;1F9B
+1F94;GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F24 0345;;;;N;;;1F9C;;1F9C
+1F95;GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F25 0345;;;;N;;;1F9D;;1F9D
+1F96;GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F26 0345;;;;N;;;1F9E;;1F9E
+1F97;GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F27 0345;;;;N;;;1F9F;;1F9F
+1F98;GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F28 0345;;;;N;;;;1F90;
+1F99;GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F29 0345;;;;N;;;;1F91;
+1F9A;GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2A 0345;;;;N;;;;1F92;
+1F9B;GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F2B 0345;;;;N;;;;1F93;
+1F9C;GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2C 0345;;;;N;;;;1F94;
+1F9D;GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F2D 0345;;;;N;;;;1F95;
+1F9E;GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2E 0345;;;;N;;;;1F96;
+1F9F;GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F2F 0345;;;;N;;;;1F97;
+1FA0;GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI;Ll;0;L;1F60 0345;;;;N;;;1FA8;;1FA8
+1FA1;GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI;Ll;0;L;1F61 0345;;;;N;;;1FA9;;1FA9
+1FA2;GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F62 0345;;;;N;;;1FAA;;1FAA
+1FA3;GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI;Ll;0;L;1F63 0345;;;;N;;;1FAB;;1FAB
+1FA4;GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F64 0345;;;;N;;;1FAC;;1FAC
+1FA5;GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI;Ll;0;L;1F65 0345;;;;N;;;1FAD;;1FAD
+1FA6;GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F66 0345;;;;N;;;1FAE;;1FAE
+1FA7;GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1F67 0345;;;;N;;;1FAF;;1FAF
+1FA8;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI;Lt;0;L;1F68 0345;;;;N;;;;1FA0;
+1FA9;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI;Lt;0;L;1F69 0345;;;;N;;;;1FA1;
+1FAA;GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6A 0345;;;;N;;;;1FA2;
+1FAB;GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI;Lt;0;L;1F6B 0345;;;;N;;;;1FA3;
+1FAC;GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6C 0345;;;;N;;;;1FA4;
+1FAD;GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI;Lt;0;L;1F6D 0345;;;;N;;;;1FA5;
+1FAE;GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6E 0345;;;;N;;;;1FA6;
+1FAF;GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI;Lt;0;L;1F6F 0345;;;;N;;;;1FA7;
+1FB0;GREEK SMALL LETTER ALPHA WITH VRACHY;Ll;0;L;03B1 0306;;;;N;;;1FB8;;1FB8
+1FB1;GREEK SMALL LETTER ALPHA WITH MACRON;Ll;0;L;03B1 0304;;;;N;;;1FB9;;1FB9
+1FB2;GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F70 0345;;;;N;;;;;
+1FB3;GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI;Ll;0;L;03B1 0345;;;;N;;;1FBC;;1FBC
+1FB4;GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AC 0345;;;;N;;;;;
+1FB6;GREEK SMALL LETTER ALPHA WITH PERISPOMENI;Ll;0;L;03B1 0342;;;;N;;;;;
+1FB7;GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FB6 0345;;;;N;;;;;
+1FB8;GREEK CAPITAL LETTER ALPHA WITH VRACHY;Lu;0;L;0391 0306;;;;N;;;;1FB0;
+1FB9;GREEK CAPITAL LETTER ALPHA WITH MACRON;Lu;0;L;0391 0304;;;;N;;;;1FB1;
+1FBA;GREEK CAPITAL LETTER ALPHA WITH VARIA;Lu;0;L;0391 0300;;;;N;;;;1F70;
+1FBB;GREEK CAPITAL LETTER ALPHA WITH OXIA;Lu;0;L;0386;;;;N;;;;1F71;
+1FBC;GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI;Lt;0;L;0391 0345;;;;N;;;;1FB3;
+1FBD;GREEK KORONIS;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FBE;GREEK PROSGEGRAMMENI;Ll;0;L;03B9;;;;N;;;0399;;0399
+1FBF;GREEK PSILI;Sk;0;ON;<compat> 0020 0313;;;;N;;;;;
+1FC0;GREEK PERISPOMENI;Sk;0;ON;<compat> 0020 0342;;;;N;;;;;
+1FC1;GREEK DIALYTIKA AND PERISPOMENI;Sk;0;ON;00A8 0342;;;;N;;;;;
+1FC2;GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F74 0345;;;;N;;;;;
+1FC3;GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI;Ll;0;L;03B7 0345;;;;N;;;1FCC;;1FCC
+1FC4;GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03AE 0345;;;;N;;;;;
+1FC6;GREEK SMALL LETTER ETA WITH PERISPOMENI;Ll;0;L;03B7 0342;;;;N;;;;;
+1FC7;GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FC6 0345;;;;N;;;;;
+1FC8;GREEK CAPITAL LETTER EPSILON WITH VARIA;Lu;0;L;0395 0300;;;;N;;;;1F72;
+1FC9;GREEK CAPITAL LETTER EPSILON WITH OXIA;Lu;0;L;0388;;;;N;;;;1F73;
+1FCA;GREEK CAPITAL LETTER ETA WITH VARIA;Lu;0;L;0397 0300;;;;N;;;;1F74;
+1FCB;GREEK CAPITAL LETTER ETA WITH OXIA;Lu;0;L;0389;;;;N;;;;1F75;
+1FCC;GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI;Lt;0;L;0397 0345;;;;N;;;;1FC3;
+1FCD;GREEK PSILI AND VARIA;Sk;0;ON;1FBF 0300;;;;N;;;;;
+1FCE;GREEK PSILI AND OXIA;Sk;0;ON;1FBF 0301;;;;N;;;;;
+1FCF;GREEK PSILI AND PERISPOMENI;Sk;0;ON;1FBF 0342;;;;N;;;;;
+1FD0;GREEK SMALL LETTER IOTA WITH VRACHY;Ll;0;L;03B9 0306;;;;N;;;1FD8;;1FD8
+1FD1;GREEK SMALL LETTER IOTA WITH MACRON;Ll;0;L;03B9 0304;;;;N;;;1FD9;;1FD9
+1FD2;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA;Ll;0;L;03CA 0300;;;;N;;;;;
+1FD3;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA;Ll;0;L;0390;;;;N;;;;;
+1FD6;GREEK SMALL LETTER IOTA WITH PERISPOMENI;Ll;0;L;03B9 0342;;;;N;;;;;
+1FD7;GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CA 0342;;;;N;;;;;
+1FD8;GREEK CAPITAL LETTER IOTA WITH VRACHY;Lu;0;L;0399 0306;;;;N;;;;1FD0;
+1FD9;GREEK CAPITAL LETTER IOTA WITH MACRON;Lu;0;L;0399 0304;;;;N;;;;1FD1;
+1FDA;GREEK CAPITAL LETTER IOTA WITH VARIA;Lu;0;L;0399 0300;;;;N;;;;1F76;
+1FDB;GREEK CAPITAL LETTER IOTA WITH OXIA;Lu;0;L;038A;;;;N;;;;1F77;
+1FDD;GREEK DASIA AND VARIA;Sk;0;ON;1FFE 0300;;;;N;;;;;
+1FDE;GREEK DASIA AND OXIA;Sk;0;ON;1FFE 0301;;;;N;;;;;
+1FDF;GREEK DASIA AND PERISPOMENI;Sk;0;ON;1FFE 0342;;;;N;;;;;
+1FE0;GREEK SMALL LETTER UPSILON WITH VRACHY;Ll;0;L;03C5 0306;;;;N;;;1FE8;;1FE8
+1FE1;GREEK SMALL LETTER UPSILON WITH MACRON;Ll;0;L;03C5 0304;;;;N;;;1FE9;;1FE9
+1FE2;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA;Ll;0;L;03CB 0300;;;;N;;;;;
+1FE3;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA;Ll;0;L;03B0;;;;N;;;;;
+1FE4;GREEK SMALL LETTER RHO WITH PSILI;Ll;0;L;03C1 0313;;;;N;;;;;
+1FE5;GREEK SMALL LETTER RHO WITH DASIA;Ll;0;L;03C1 0314;;;;N;;;1FEC;;1FEC
+1FE6;GREEK SMALL LETTER UPSILON WITH PERISPOMENI;Ll;0;L;03C5 0342;;;;N;;;;;
+1FE7;GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI;Ll;0;L;03CB 0342;;;;N;;;;;
+1FE8;GREEK CAPITAL LETTER UPSILON WITH VRACHY;Lu;0;L;03A5 0306;;;;N;;;;1FE0;
+1FE9;GREEK CAPITAL LETTER UPSILON WITH MACRON;Lu;0;L;03A5 0304;;;;N;;;;1FE1;
+1FEA;GREEK CAPITAL LETTER UPSILON WITH VARIA;Lu;0;L;03A5 0300;;;;N;;;;1F7A;
+1FEB;GREEK CAPITAL LETTER UPSILON WITH OXIA;Lu;0;L;038E;;;;N;;;;1F7B;
+1FEC;GREEK CAPITAL LETTER RHO WITH DASIA;Lu;0;L;03A1 0314;;;;N;;;;1FE5;
+1FED;GREEK DIALYTIKA AND VARIA;Sk;0;ON;00A8 0300;;;;N;;;;;
+1FEE;GREEK DIALYTIKA AND OXIA;Sk;0;ON;0385;;;;N;;;;;
+1FEF;GREEK VARIA;Sk;0;ON;0060;;;;N;;;;;
+1FF2;GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI;Ll;0;L;1F7C 0345;;;;N;;;;;
+1FF3;GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI;Ll;0;L;03C9 0345;;;;N;;;1FFC;;1FFC
+1FF4;GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI;Ll;0;L;03CE 0345;;;;N;;;;;
+1FF6;GREEK SMALL LETTER OMEGA WITH PERISPOMENI;Ll;0;L;03C9 0342;;;;N;;;;;
+1FF7;GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI;Ll;0;L;1FF6 0345;;;;N;;;;;
+1FF8;GREEK CAPITAL LETTER OMICRON WITH VARIA;Lu;0;L;039F 0300;;;;N;;;;1F78;
+1FF9;GREEK CAPITAL LETTER OMICRON WITH OXIA;Lu;0;L;038C;;;;N;;;;1F79;
+1FFA;GREEK CAPITAL LETTER OMEGA WITH VARIA;Lu;0;L;03A9 0300;;;;N;;;;1F7C;
+1FFB;GREEK CAPITAL LETTER OMEGA WITH OXIA;Lu;0;L;038F;;;;N;;;;1F7D;
+1FFC;GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI;Lt;0;L;03A9 0345;;;;N;;;;1FF3;
+1FFD;GREEK OXIA;Sk;0;ON;00B4;;;;N;;;;;
+1FFE;GREEK DASIA;Sk;0;ON;<compat> 0020 0314;;;;N;;;;;
+2000;EN QUAD;Zs;0;WS;2002;;;;N;;;;;
+2001;EM QUAD;Zs;0;WS;2003;;;;N;;;;;
+2002;EN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2003;EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2004;THREE-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2005;FOUR-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2006;SIX-PER-EM SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2007;FIGURE SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
+2008;PUNCTUATION SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+2009;THIN SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200A;HAIR SPACE;Zs;0;WS;<compat> 0020;;;;N;;;;;
+200B;ZERO WIDTH SPACE;Zs;0;BN;;;;;N;;;;;
+200C;ZERO WIDTH NON-JOINER;Cf;0;BN;;;;;N;;;;;
+200D;ZERO WIDTH JOINER;Cf;0;BN;;;;;N;;;;;
+200E;LEFT-TO-RIGHT MARK;Cf;0;L;;;;;N;;;;;
+200F;RIGHT-TO-LEFT MARK;Cf;0;R;;;;;N;;;;;
+2010;HYPHEN;Pd;0;ON;;;;;N;;;;;
+2011;NON-BREAKING HYPHEN;Pd;0;ON;<noBreak> 2010;;;;N;;;;;
+2012;FIGURE DASH;Pd;0;ON;;;;;N;;;;;
+2013;EN DASH;Pd;0;ON;;;;;N;;;;;
+2014;EM DASH;Pd;0;ON;;;;;N;;;;;
+2015;HORIZONTAL BAR;Pd;0;ON;;;;;N;QUOTATION DASH;;;;
+2016;DOUBLE VERTICAL LINE;Po;0;ON;;;;;N;DOUBLE VERTICAL BAR;;;;
+2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;;
+2018;LEFT SINGLE QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE TURNED COMMA QUOTATION MARK;;;;
+2019;RIGHT SINGLE QUOTATION MARK;Pf;0;ON;;;;;N;SINGLE COMMA QUOTATION MARK;;;;
+201A;SINGLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW SINGLE COMMA QUOTATION MARK;;;;
+201B;SINGLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;SINGLE REVERSED COMMA QUOTATION MARK;;;;
+201C;LEFT DOUBLE QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE TURNED COMMA QUOTATION MARK;;;;
+201D;RIGHT DOUBLE QUOTATION MARK;Pf;0;ON;;;;;N;DOUBLE COMMA QUOTATION MARK;;;;
+201E;DOUBLE LOW-9 QUOTATION MARK;Ps;0;ON;;;;;N;LOW DOUBLE COMMA QUOTATION MARK;;;;
+201F;DOUBLE HIGH-REVERSED-9 QUOTATION MARK;Pi;0;ON;;;;;N;DOUBLE REVERSED COMMA QUOTATION MARK;;;;
+2020;DAGGER;Po;0;ON;;;;;N;;;;;
+2021;DOUBLE DAGGER;Po;0;ON;;;;;N;;;;;
+2022;BULLET;Po;0;ON;;;;;N;;;;;
+2023;TRIANGULAR BULLET;Po;0;ON;;;;;N;;;;;
+2024;ONE DOT LEADER;Po;0;ON;<compat> 002E;;;;N;;;;;
+2025;TWO DOT LEADER;Po;0;ON;<compat> 002E 002E;;;;N;;;;;
+2026;HORIZONTAL ELLIPSIS;Po;0;ON;<compat> 002E 002E 002E;;;;N;;;;;
+2027;HYPHENATION POINT;Po;0;ON;;;;;N;;;;;
+2028;LINE SEPARATOR;Zl;0;WS;;;;;N;;;;;
+2029;PARAGRAPH SEPARATOR;Zp;0;B;;;;;N;;;;;
+202A;LEFT-TO-RIGHT EMBEDDING;Cf;0;LRE;;;;;N;;;;;
+202B;RIGHT-TO-LEFT EMBEDDING;Cf;0;RLE;;;;;N;;;;;
+202C;POP DIRECTIONAL FORMATTING;Cf;0;PDF;;;;;N;;;;;
+202D;LEFT-TO-RIGHT OVERRIDE;Cf;0;LRO;;;;;N;;;;;
+202E;RIGHT-TO-LEFT OVERRIDE;Cf;0;RLO;;;;;N;;;;;
+202F;NARROW NO-BREAK SPACE;Zs;0;WS;<noBreak> 0020;;;;N;;;;;
+2030;PER MILLE SIGN;Po;0;ET;;;;;N;;;;;
+2031;PER TEN THOUSAND SIGN;Po;0;ET;;;;;N;;;;;
+2032;PRIME;Po;0;ET;;;;;N;;;;;
+2033;DOUBLE PRIME;Po;0;ET;<compat> 2032 2032;;;;N;;;;;
+2034;TRIPLE PRIME;Po;0;ET;<compat> 2032 2032 2032;;;;N;;;;;
+2035;REVERSED PRIME;Po;0;ON;;;;;N;;;;;
+2036;REVERSED DOUBLE PRIME;Po;0;ON;<compat> 2035 2035;;;;N;;;;;
+2037;REVERSED TRIPLE PRIME;Po;0;ON;<compat> 2035 2035 2035;;;;N;;;;;
+2038;CARET;Po;0;ON;;;;;N;;;;;
+2039;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING SINGLE GUILLEMET;;;;
+203A;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING SINGLE GUILLEMET;;;;
+203B;REFERENCE MARK;Po;0;ON;;;;;N;;;;;
+203C;DOUBLE EXCLAMATION MARK;Po;0;ON;<compat> 0021 0021;;;;N;;;;;
+203D;INTERROBANG;Po;0;ON;;;;;N;;;;;
+203E;OVERLINE;Po;0;ON;<compat> 0020 0305;;;;N;SPACING OVERSCORE;;;;
+203F;UNDERTIE;Pc;0;ON;;;;;N;;Enotikon;;;
+2040;CHARACTER TIE;Pc;0;ON;;;;;N;;;;;
+2041;CARET INSERTION POINT;Po;0;ON;;;;;N;;;;;
+2042;ASTERISM;Po;0;ON;;;;;N;;;;;
+2043;HYPHEN BULLET;Po;0;ON;;;;;N;;;;;
+2044;FRACTION SLASH;Sm;0;ON;;;;;N;;;;;
+2045;LEFT SQUARE BRACKET WITH QUILL;Ps;0;ON;;;;;Y;;;;;
+2046;RIGHT SQUARE BRACKET WITH QUILL;Pe;0;ON;;;;;Y;;;;;
+2048;QUESTION EXCLAMATION MARK;Po;0;ON;<compat> 003F 0021;;;;N;;;;;
+2049;EXCLAMATION QUESTION MARK;Po;0;ON;<compat> 0021 003F;;;;N;;;;;
+204A;TIRONIAN SIGN ET;Po;0;ON;;;;;N;;;;;
+204B;REVERSED PILCROW SIGN;Po;0;ON;;;;;N;;;;;
+204C;BLACK LEFTWARDS BULLET;Po;0;ON;;;;;N;;;;;
+204D;BLACK RIGHTWARDS BULLET;Po;0;ON;;;;;N;;;;;
+206A;INHIBIT SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
+206B;ACTIVATE SYMMETRIC SWAPPING;Cf;0;BN;;;;;N;;;;;
+206C;INHIBIT ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
+206D;ACTIVATE ARABIC FORM SHAPING;Cf;0;BN;;;;;N;;;;;
+206E;NATIONAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
+206F;NOMINAL DIGIT SHAPES;Cf;0;BN;;;;;N;;;;;
+2070;SUPERSCRIPT ZERO;No;0;EN;<super> 0030;0;0;0;N;SUPERSCRIPT DIGIT ZERO;;;;
+2074;SUPERSCRIPT FOUR;No;0;EN;<super> 0034;4;4;4;N;SUPERSCRIPT DIGIT FOUR;;;;
+2075;SUPERSCRIPT FIVE;No;0;EN;<super> 0035;5;5;5;N;SUPERSCRIPT DIGIT FIVE;;;;
+2076;SUPERSCRIPT SIX;No;0;EN;<super> 0036;6;6;6;N;SUPERSCRIPT DIGIT SIX;;;;
+2077;SUPERSCRIPT SEVEN;No;0;EN;<super> 0037;7;7;7;N;SUPERSCRIPT DIGIT SEVEN;;;;
+2078;SUPERSCRIPT EIGHT;No;0;EN;<super> 0038;8;8;8;N;SUPERSCRIPT DIGIT EIGHT;;;;
+2079;SUPERSCRIPT NINE;No;0;EN;<super> 0039;9;9;9;N;SUPERSCRIPT DIGIT NINE;;;;
+207A;SUPERSCRIPT PLUS SIGN;Sm;0;ET;<super> 002B;;;;N;;;;;
+207B;SUPERSCRIPT MINUS;Sm;0;ET;<super> 2212;;;;N;SUPERSCRIPT HYPHEN-MINUS;;;;
+207C;SUPERSCRIPT EQUALS SIGN;Sm;0;ON;<super> 003D;;;;N;;;;;
+207D;SUPERSCRIPT LEFT PARENTHESIS;Ps;0;ON;<super> 0028;;;;Y;SUPERSCRIPT OPENING PARENTHESIS;;;;
+207E;SUPERSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<super> 0029;;;;Y;SUPERSCRIPT CLOSING PARENTHESIS;;;;
+207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;L;<super> 006E;;;;N;;;;;
+2080;SUBSCRIPT ZERO;No;0;EN;<sub> 0030;0;0;0;N;SUBSCRIPT DIGIT ZERO;;;;
+2081;SUBSCRIPT ONE;No;0;EN;<sub> 0031;1;1;1;N;SUBSCRIPT DIGIT ONE;;;;
+2082;SUBSCRIPT TWO;No;0;EN;<sub> 0032;2;2;2;N;SUBSCRIPT DIGIT TWO;;;;
+2083;SUBSCRIPT THREE;No;0;EN;<sub> 0033;3;3;3;N;SUBSCRIPT DIGIT THREE;;;;
+2084;SUBSCRIPT FOUR;No;0;EN;<sub> 0034;4;4;4;N;SUBSCRIPT DIGIT FOUR;;;;
+2085;SUBSCRIPT FIVE;No;0;EN;<sub> 0035;5;5;5;N;SUBSCRIPT DIGIT FIVE;;;;
+2086;SUBSCRIPT SIX;No;0;EN;<sub> 0036;6;6;6;N;SUBSCRIPT DIGIT SIX;;;;
+2087;SUBSCRIPT SEVEN;No;0;EN;<sub> 0037;7;7;7;N;SUBSCRIPT DIGIT SEVEN;;;;
+2088;SUBSCRIPT EIGHT;No;0;EN;<sub> 0038;8;8;8;N;SUBSCRIPT DIGIT EIGHT;;;;
+2089;SUBSCRIPT NINE;No;0;EN;<sub> 0039;9;9;9;N;SUBSCRIPT DIGIT NINE;;;;
+208A;SUBSCRIPT PLUS SIGN;Sm;0;ET;<sub> 002B;;;;N;;;;;
+208B;SUBSCRIPT MINUS;Sm;0;ET;<sub> 2212;;;;N;SUBSCRIPT HYPHEN-MINUS;;;;
+208C;SUBSCRIPT EQUALS SIGN;Sm;0;ON;<sub> 003D;;;;N;;;;;
+208D;SUBSCRIPT LEFT PARENTHESIS;Ps;0;ON;<sub> 0028;;;;Y;SUBSCRIPT OPENING PARENTHESIS;;;;
+208E;SUBSCRIPT RIGHT PARENTHESIS;Pe;0;ON;<sub> 0029;;;;Y;SUBSCRIPT CLOSING PARENTHESIS;;;;
+20A0;EURO-CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+20A1;COLON SIGN;Sc;0;ET;;;;;N;;;;;
+20A2;CRUZEIRO SIGN;Sc;0;ET;;;;;N;;;;;
+20A3;FRENCH FRANC SIGN;Sc;0;ET;;;;;N;;;;;
+20A4;LIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A5;MILL SIGN;Sc;0;ET;;;;;N;;;;;
+20A6;NAIRA SIGN;Sc;0;ET;;;;;N;;;;;
+20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;;
+20A8;RUPEE SIGN;Sc;0;ET;<compat> 0052 0073;;;;N;;;;;
+20A9;WON SIGN;Sc;0;ET;;;;;N;;;;;
+20AA;NEW SHEQEL SIGN;Sc;0;ET;;;;;N;;;;;
+20AB;DONG SIGN;Sc;0;ET;;;;;N;;;;;
+20AC;EURO SIGN;Sc;0;ET;;;;;N;;;;;
+20AD;KIP SIGN;Sc;0;ET;;;;;N;;;;;
+20AE;TUGRIK SIGN;Sc;0;ET;;;;;N;;;;;
+20AF;DRACHMA SIGN;Sc;0;ET;;;;;N;;;;;
+20D0;COMBINING LEFT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT HARPOON ABOVE;;;;
+20D1;COMBINING RIGHT HARPOON ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT HARPOON ABOVE;;;;
+20D2;COMBINING LONG VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING LONG VERTICAL BAR OVERLAY;;;;
+20D3;COMBINING SHORT VERTICAL LINE OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING SHORT VERTICAL BAR OVERLAY;;;;
+20D4;COMBINING ANTICLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING ANTICLOCKWISE ARROW ABOVE;;;;
+20D5;COMBINING CLOCKWISE ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING CLOCKWISE ARROW ABOVE;;;;
+20D6;COMBINING LEFT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT ARROW ABOVE;;;;
+20D7;COMBINING RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING RIGHT ARROW ABOVE;;;;
+20D8;COMBINING RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING RING OVERLAY;;;;
+20D9;COMBINING CLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING CLOCKWISE RING OVERLAY;;;;
+20DA;COMBINING ANTICLOCKWISE RING OVERLAY;Mn;1;NSM;;;;;N;NON-SPACING ANTICLOCKWISE RING OVERLAY;;;;
+20DB;COMBINING THREE DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING THREE DOTS ABOVE;;;;
+20DC;COMBINING FOUR DOTS ABOVE;Mn;230;NSM;;;;;N;NON-SPACING FOUR DOTS ABOVE;;;;
+20DD;COMBINING ENCLOSING CIRCLE;Me;0;NSM;;;;;N;ENCLOSING CIRCLE;;;;
+20DE;COMBINING ENCLOSING SQUARE;Me;0;NSM;;;;;N;ENCLOSING SQUARE;;;;
+20DF;COMBINING ENCLOSING DIAMOND;Me;0;NSM;;;;;N;ENCLOSING DIAMOND;;;;
+20E0;COMBINING ENCLOSING CIRCLE BACKSLASH;Me;0;NSM;;;;;N;ENCLOSING CIRCLE SLASH;;;;
+20E1;COMBINING LEFT RIGHT ARROW ABOVE;Mn;230;NSM;;;;;N;NON-SPACING LEFT RIGHT ARROW ABOVE;;;;
+20E2;COMBINING ENCLOSING SCREEN;Me;0;NSM;;;;;N;;;;;
+20E3;COMBINING ENCLOSING KEYCAP;Me;0;NSM;;;;;N;;;;;
+2100;ACCOUNT OF;So;0;ON;<compat> 0061 002F 0063;;;;N;;;;;
+2101;ADDRESSED TO THE SUBJECT;So;0;ON;<compat> 0061 002F 0073;;;;N;;;;;
+2102;DOUBLE-STRUCK CAPITAL C;Lu;0;L;<font> 0043;;;;N;DOUBLE-STRUCK C;;;;
+2103;DEGREE CELSIUS;So;0;ON;<compat> 00B0 0043;;;;N;DEGREES CENTIGRADE;;;;
+2104;CENTRE LINE SYMBOL;So;0;ON;;;;;N;C L SYMBOL;;;;
+2105;CARE OF;So;0;ON;<compat> 0063 002F 006F;;;;N;;;;;
+2106;CADA UNA;So;0;ON;<compat> 0063 002F 0075;;;;N;;;;;
+2107;EULER CONSTANT;Lu;0;L;<compat> 0190;;;;N;EULERS;;;;
+2108;SCRUPLE;So;0;ON;;;;;N;;;;;
+2109;DEGREE FAHRENHEIT;So;0;ON;<compat> 00B0 0046;;;;N;DEGREES FAHRENHEIT;;;;
+210A;SCRIPT SMALL G;Ll;0;L;<font> 0067;;;;N;;;;;
+210B;SCRIPT CAPITAL H;Lu;0;L;<font> 0048;;;;N;SCRIPT H;;;;
+210C;BLACK-LETTER CAPITAL H;Lu;0;L;<font> 0048;;;;N;BLACK-LETTER H;;;;
+210D;DOUBLE-STRUCK CAPITAL H;Lu;0;L;<font> 0048;;;;N;DOUBLE-STRUCK H;;;;
+210E;PLANCK CONSTANT;Ll;0;L;<font> 0068;;;;N;;;;;
+210F;PLANCK CONSTANT OVER TWO PI;Ll;0;L;<font> 0127;;;;N;PLANCK CONSTANT OVER 2 PI;;;;
+2110;SCRIPT CAPITAL I;Lu;0;L;<font> 0049;;;;N;SCRIPT I;;;;
+2111;BLACK-LETTER CAPITAL I;Lu;0;L;<font> 0049;;;;N;BLACK-LETTER I;;;;
+2112;SCRIPT CAPITAL L;Lu;0;L;<font> 004C;;;;N;SCRIPT L;;;;
+2113;SCRIPT SMALL L;Ll;0;L;<font> 006C;;;;N;;;;;
+2114;L B BAR SYMBOL;So;0;ON;;;;;N;;;;;
+2115;DOUBLE-STRUCK CAPITAL N;Lu;0;L;<font> 004E;;;;N;DOUBLE-STRUCK N;;;;
+2116;NUMERO SIGN;So;0;ON;<compat> 004E 006F;;;;N;NUMERO;;;;
+2117;SOUND RECORDING COPYRIGHT;So;0;ON;;;;;N;;;;;
+2118;SCRIPT CAPITAL P;So;0;ON;;;;;N;SCRIPT P;;;;
+2119;DOUBLE-STRUCK CAPITAL P;Lu;0;L;<font> 0050;;;;N;DOUBLE-STRUCK P;;;;
+211A;DOUBLE-STRUCK CAPITAL Q;Lu;0;L;<font> 0051;;;;N;DOUBLE-STRUCK Q;;;;
+211B;SCRIPT CAPITAL R;Lu;0;L;<font> 0052;;;;N;SCRIPT R;;;;
+211C;BLACK-LETTER CAPITAL R;Lu;0;L;<font> 0052;;;;N;BLACK-LETTER R;;;;
+211D;DOUBLE-STRUCK CAPITAL R;Lu;0;L;<font> 0052;;;;N;DOUBLE-STRUCK R;;;;
+211E;PRESCRIPTION TAKE;So;0;ON;;;;;N;;;;;
+211F;RESPONSE;So;0;ON;;;;;N;;;;;
+2120;SERVICE MARK;So;0;ON;<super> 0053 004D;;;;N;;;;;
+2121;TELEPHONE SIGN;So;0;ON;<compat> 0054 0045 004C;;;;N;T E L SYMBOL;;;;
+2122;TRADE MARK SIGN;So;0;ON;<super> 0054 004D;;;;N;TRADEMARK;;;;
+2123;VERSICLE;So;0;ON;;;;;N;;;;;
+2124;DOUBLE-STRUCK CAPITAL Z;Lu;0;L;<font> 005A;;;;N;DOUBLE-STRUCK Z;;;;
+2125;OUNCE SIGN;So;0;ON;;;;;N;OUNCE;;;;
+2126;OHM SIGN;Lu;0;L;03A9;;;;N;OHM;;;03C9;
+2127;INVERTED OHM SIGN;So;0;ON;;;;;N;MHO;;;;
+2128;BLACK-LETTER CAPITAL Z;Lu;0;L;<font> 005A;;;;N;BLACK-LETTER Z;;;;
+2129;TURNED GREEK SMALL LETTER IOTA;So;0;ON;;;;;N;;;;;
+212A;KELVIN SIGN;Lu;0;L;004B;;;;N;DEGREES KELVIN;;;006B;
+212B;ANGSTROM SIGN;Lu;0;L;00C5;;;;N;ANGSTROM UNIT;;;00E5;
+212C;SCRIPT CAPITAL B;Lu;0;L;<font> 0042;;;;N;SCRIPT B;;;;
+212D;BLACK-LETTER CAPITAL C;Lu;0;L;<font> 0043;;;;N;BLACK-LETTER C;;;;
+212E;ESTIMATED SYMBOL;So;0;ET;;;;;N;;;;;
+212F;SCRIPT SMALL E;Ll;0;L;<font> 0065;;;;N;;;;;
+2130;SCRIPT CAPITAL E;Lu;0;L;<font> 0045;;;;N;SCRIPT E;;;;
+2131;SCRIPT CAPITAL F;Lu;0;L;<font> 0046;;;;N;SCRIPT F;;;;
+2132;TURNED CAPITAL F;So;0;ON;;;;;N;TURNED F;;;;
+2133;SCRIPT CAPITAL M;Lu;0;L;<font> 004D;;;;N;SCRIPT M;;;;
+2134;SCRIPT SMALL O;Ll;0;L;<font> 006F;;;;N;;;;;
+2135;ALEF SYMBOL;Lo;0;L;<compat> 05D0;;;;N;FIRST TRANSFINITE CARDINAL;;;;
+2136;BET SYMBOL;Lo;0;L;<compat> 05D1;;;;N;SECOND TRANSFINITE CARDINAL;;;;
+2137;GIMEL SYMBOL;Lo;0;L;<compat> 05D2;;;;N;THIRD TRANSFINITE CARDINAL;;;;
+2138;DALET SYMBOL;Lo;0;L;<compat> 05D3;;;;N;FOURTH TRANSFINITE CARDINAL;;;;
+2139;INFORMATION SOURCE;Ll;0;L;<font> 0069;;;;N;;;;;
+213A;ROTATED CAPITAL Q;So;0;ON;;;;;N;;;;;
+2153;VULGAR FRACTION ONE THIRD;No;0;ON;<fraction> 0031 2044 0033;;;1/3;N;FRACTION ONE THIRD;;;;
+2154;VULGAR FRACTION TWO THIRDS;No;0;ON;<fraction> 0032 2044 0033;;;2/3;N;FRACTION TWO THIRDS;;;;
+2155;VULGAR FRACTION ONE FIFTH;No;0;ON;<fraction> 0031 2044 0035;;;1/5;N;FRACTION ONE FIFTH;;;;
+2156;VULGAR FRACTION TWO FIFTHS;No;0;ON;<fraction> 0032 2044 0035;;;2/5;N;FRACTION TWO FIFTHS;;;;
+2157;VULGAR FRACTION THREE FIFTHS;No;0;ON;<fraction> 0033 2044 0035;;;3/5;N;FRACTION THREE FIFTHS;;;;
+2158;VULGAR FRACTION FOUR FIFTHS;No;0;ON;<fraction> 0034 2044 0035;;;4/5;N;FRACTION FOUR FIFTHS;;;;
+2159;VULGAR FRACTION ONE SIXTH;No;0;ON;<fraction> 0031 2044 0036;;;1/6;N;FRACTION ONE SIXTH;;;;
+215A;VULGAR FRACTION FIVE SIXTHS;No;0;ON;<fraction> 0035 2044 0036;;;5/6;N;FRACTION FIVE SIXTHS;;;;
+215B;VULGAR FRACTION ONE EIGHTH;No;0;ON;<fraction> 0031 2044 0038;;;1/8;N;FRACTION ONE EIGHTH;;;;
+215C;VULGAR FRACTION THREE EIGHTHS;No;0;ON;<fraction> 0033 2044 0038;;;3/8;N;FRACTION THREE EIGHTHS;;;;
+215D;VULGAR FRACTION FIVE EIGHTHS;No;0;ON;<fraction> 0035 2044 0038;;;5/8;N;FRACTION FIVE EIGHTHS;;;;
+215E;VULGAR FRACTION SEVEN EIGHTHS;No;0;ON;<fraction> 0037 2044 0038;;;7/8;N;FRACTION SEVEN EIGHTHS;;;;
+215F;FRACTION NUMERATOR ONE;No;0;ON;<fraction> 0031 2044;;;1;N;;;;;
+2160;ROMAN NUMERAL ONE;Nl;0;L;<compat> 0049;;;1;N;;;;2170;
+2161;ROMAN NUMERAL TWO;Nl;0;L;<compat> 0049 0049;;;2;N;;;;2171;
+2162;ROMAN NUMERAL THREE;Nl;0;L;<compat> 0049 0049 0049;;;3;N;;;;2172;
+2163;ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0049 0056;;;4;N;;;;2173;
+2164;ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0056;;;5;N;;;;2174;
+2165;ROMAN NUMERAL SIX;Nl;0;L;<compat> 0056 0049;;;6;N;;;;2175;
+2166;ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0056 0049 0049;;;7;N;;;;2176;
+2167;ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0056 0049 0049 0049;;;8;N;;;;2177;
+2168;ROMAN NUMERAL NINE;Nl;0;L;<compat> 0049 0058;;;9;N;;;;2178;
+2169;ROMAN NUMERAL TEN;Nl;0;L;<compat> 0058;;;10;N;;;;2179;
+216A;ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0058 0049;;;11;N;;;;217A;
+216B;ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0058 0049 0049;;;12;N;;;;217B;
+216C;ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 004C;;;50;N;;;;217C;
+216D;ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0043;;;100;N;;;;217D;
+216E;ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0044;;;500;N;;;;217E;
+216F;ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 004D;;;1000;N;;;;217F;
+2170;SMALL ROMAN NUMERAL ONE;Nl;0;L;<compat> 0069;;;1;N;;;2160;;2160
+2171;SMALL ROMAN NUMERAL TWO;Nl;0;L;<compat> 0069 0069;;;2;N;;;2161;;2161
+2172;SMALL ROMAN NUMERAL THREE;Nl;0;L;<compat> 0069 0069 0069;;;3;N;;;2162;;2162
+2173;SMALL ROMAN NUMERAL FOUR;Nl;0;L;<compat> 0069 0076;;;4;N;;;2163;;2163
+2174;SMALL ROMAN NUMERAL FIVE;Nl;0;L;<compat> 0076;;;5;N;;;2164;;2164
+2175;SMALL ROMAN NUMERAL SIX;Nl;0;L;<compat> 0076 0069;;;6;N;;;2165;;2165
+2176;SMALL ROMAN NUMERAL SEVEN;Nl;0;L;<compat> 0076 0069 0069;;;7;N;;;2166;;2166
+2177;SMALL ROMAN NUMERAL EIGHT;Nl;0;L;<compat> 0076 0069 0069 0069;;;8;N;;;2167;;2167
+2178;SMALL ROMAN NUMERAL NINE;Nl;0;L;<compat> 0069 0078;;;9;N;;;2168;;2168
+2179;SMALL ROMAN NUMERAL TEN;Nl;0;L;<compat> 0078;;;10;N;;;2169;;2169
+217A;SMALL ROMAN NUMERAL ELEVEN;Nl;0;L;<compat> 0078 0069;;;11;N;;;216A;;216A
+217B;SMALL ROMAN NUMERAL TWELVE;Nl;0;L;<compat> 0078 0069 0069;;;12;N;;;216B;;216B
+217C;SMALL ROMAN NUMERAL FIFTY;Nl;0;L;<compat> 006C;;;50;N;;;216C;;216C
+217D;SMALL ROMAN NUMERAL ONE HUNDRED;Nl;0;L;<compat> 0063;;;100;N;;;216D;;216D
+217E;SMALL ROMAN NUMERAL FIVE HUNDRED;Nl;0;L;<compat> 0064;;;500;N;;;216E;;216E
+217F;SMALL ROMAN NUMERAL ONE THOUSAND;Nl;0;L;<compat> 006D;;;1000;N;;;216F;;216F
+2180;ROMAN NUMERAL ONE THOUSAND C D;Nl;0;L;;;;1000;N;;;;;
+2181;ROMAN NUMERAL FIVE THOUSAND;Nl;0;L;;;;5000;N;;;;;
+2182;ROMAN NUMERAL TEN THOUSAND;Nl;0;L;;;;10000;N;;;;;
+2183;ROMAN NUMERAL REVERSED ONE HUNDRED;Nl;0;L;;;;;N;;;;;
+2190;LEFTWARDS ARROW;Sm;0;ON;;;;;N;LEFT ARROW;;;;
+2191;UPWARDS ARROW;Sm;0;ON;;;;;N;UP ARROW;;;;
+2192;RIGHTWARDS ARROW;Sm;0;ON;;;;;N;RIGHT ARROW;;;;
+2193;DOWNWARDS ARROW;Sm;0;ON;;;;;N;DOWN ARROW;;;;
+2194;LEFT RIGHT ARROW;Sm;0;ON;;;;;N;;;;;
+2195;UP DOWN ARROW;So;0;ON;;;;;N;;;;;
+2196;NORTH WEST ARROW;So;0;ON;;;;;N;UPPER LEFT ARROW;;;;
+2197;NORTH EAST ARROW;So;0;ON;;;;;N;UPPER RIGHT ARROW;;;;
+2198;SOUTH EAST ARROW;So;0;ON;;;;;N;LOWER RIGHT ARROW;;;;
+2199;SOUTH WEST ARROW;So;0;ON;;;;;N;LOWER LEFT ARROW;;;;
+219A;LEFTWARDS ARROW WITH STROKE;Sm;0;ON;2190 0338;;;;N;LEFT ARROW WITH STROKE;;;;
+219B;RIGHTWARDS ARROW WITH STROKE;Sm;0;ON;2192 0338;;;;N;RIGHT ARROW WITH STROKE;;;;
+219C;LEFTWARDS WAVE ARROW;So;0;ON;;;;;N;LEFT WAVE ARROW;;;;
+219D;RIGHTWARDS WAVE ARROW;So;0;ON;;;;;N;RIGHT WAVE ARROW;;;;
+219E;LEFTWARDS TWO HEADED ARROW;So;0;ON;;;;;N;LEFT TWO HEADED ARROW;;;;
+219F;UPWARDS TWO HEADED ARROW;So;0;ON;;;;;N;UP TWO HEADED ARROW;;;;
+21A0;RIGHTWARDS TWO HEADED ARROW;Sm;0;ON;;;;;N;RIGHT TWO HEADED ARROW;;;;
+21A1;DOWNWARDS TWO HEADED ARROW;So;0;ON;;;;;N;DOWN TWO HEADED ARROW;;;;
+21A2;LEFTWARDS ARROW WITH TAIL;So;0;ON;;;;;N;LEFT ARROW WITH TAIL;;;;
+21A3;RIGHTWARDS ARROW WITH TAIL;Sm;0;ON;;;;;N;RIGHT ARROW WITH TAIL;;;;
+21A4;LEFTWARDS ARROW FROM BAR;So;0;ON;;;;;N;LEFT ARROW FROM BAR;;;;
+21A5;UPWARDS ARROW FROM BAR;So;0;ON;;;;;N;UP ARROW FROM BAR;;;;
+21A6;RIGHTWARDS ARROW FROM BAR;Sm;0;ON;;;;;N;RIGHT ARROW FROM BAR;;;;
+21A7;DOWNWARDS ARROW FROM BAR;So;0;ON;;;;;N;DOWN ARROW FROM BAR;;;;
+21A8;UP DOWN ARROW WITH BASE;So;0;ON;;;;;N;;;;;
+21A9;LEFTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;LEFT ARROW WITH HOOK;;;;
+21AA;RIGHTWARDS ARROW WITH HOOK;So;0;ON;;;;;N;RIGHT ARROW WITH HOOK;;;;
+21AB;LEFTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;LEFT ARROW WITH LOOP;;;;
+21AC;RIGHTWARDS ARROW WITH LOOP;So;0;ON;;;;;N;RIGHT ARROW WITH LOOP;;;;
+21AD;LEFT RIGHT WAVE ARROW;So;0;ON;;;;;N;;;;;
+21AE;LEFT RIGHT ARROW WITH STROKE;Sm;0;ON;2194 0338;;;;N;;;;;
+21AF;DOWNWARDS ZIGZAG ARROW;So;0;ON;;;;;N;DOWN ZIGZAG ARROW;;;;
+21B0;UPWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP LEFT;;;;
+21B1;UPWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;UP ARROW WITH TIP RIGHT;;;;
+21B2;DOWNWARDS ARROW WITH TIP LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP LEFT;;;;
+21B3;DOWNWARDS ARROW WITH TIP RIGHTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH TIP RIGHT;;;;
+21B4;RIGHTWARDS ARROW WITH CORNER DOWNWARDS;So;0;ON;;;;;N;RIGHT ARROW WITH CORNER DOWN;;;;
+21B5;DOWNWARDS ARROW WITH CORNER LEFTWARDS;So;0;ON;;;;;N;DOWN ARROW WITH CORNER LEFT;;;;
+21B6;ANTICLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B7;CLOCKWISE TOP SEMICIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21B8;NORTH WEST ARROW TO LONG BAR;So;0;ON;;;;;N;UPPER LEFT ARROW TO LONG BAR;;;;
+21B9;LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR OVER RIGHT ARROW TO BAR;;;;
+21BA;ANTICLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BB;CLOCKWISE OPEN CIRCLE ARROW;So;0;ON;;;;;N;;;;;
+21BC;LEFTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB UP;;;;
+21BD;LEFTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;LEFT HARPOON WITH BARB DOWN;;;;
+21BE;UPWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB RIGHT;;;;
+21BF;UPWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;UP HARPOON WITH BARB LEFT;;;;
+21C0;RIGHTWARDS HARPOON WITH BARB UPWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB UP;;;;
+21C1;RIGHTWARDS HARPOON WITH BARB DOWNWARDS;So;0;ON;;;;;N;RIGHT HARPOON WITH BARB DOWN;;;;
+21C2;DOWNWARDS HARPOON WITH BARB RIGHTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB RIGHT;;;;
+21C3;DOWNWARDS HARPOON WITH BARB LEFTWARDS;So;0;ON;;;;;N;DOWN HARPOON WITH BARB LEFT;;;;
+21C4;RIGHTWARDS ARROW OVER LEFTWARDS ARROW;So;0;ON;;;;;N;RIGHT ARROW OVER LEFT ARROW;;;;
+21C5;UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW;So;0;ON;;;;;N;UP ARROW LEFT OF DOWN ARROW;;;;
+21C6;LEFTWARDS ARROW OVER RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT ARROW OVER RIGHT ARROW;;;;
+21C7;LEFTWARDS PAIRED ARROWS;So;0;ON;;;;;N;LEFT PAIRED ARROWS;;;;
+21C8;UPWARDS PAIRED ARROWS;So;0;ON;;;;;N;UP PAIRED ARROWS;;;;
+21C9;RIGHTWARDS PAIRED ARROWS;So;0;ON;;;;;N;RIGHT PAIRED ARROWS;;;;
+21CA;DOWNWARDS PAIRED ARROWS;So;0;ON;;;;;N;DOWN PAIRED ARROWS;;;;
+21CB;LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;So;0;ON;;;;;N;LEFT HARPOON OVER RIGHT HARPOON;;;;
+21CC;RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;So;0;ON;;;;;N;RIGHT HARPOON OVER LEFT HARPOON;;;;
+21CD;LEFTWARDS DOUBLE ARROW WITH STROKE;So;0;ON;21D0 0338;;;;N;LEFT DOUBLE ARROW WITH STROKE;;;;
+21CE;LEFT RIGHT DOUBLE ARROW WITH STROKE;Sm;0;ON;21D4 0338;;;;N;;;;;
+21CF;RIGHTWARDS DOUBLE ARROW WITH STROKE;Sm;0;ON;21D2 0338;;;;N;RIGHT DOUBLE ARROW WITH STROKE;;;;
+21D0;LEFTWARDS DOUBLE ARROW;So;0;ON;;;;;N;LEFT DOUBLE ARROW;;;;
+21D1;UPWARDS DOUBLE ARROW;So;0;ON;;;;;N;UP DOUBLE ARROW;;;;
+21D2;RIGHTWARDS DOUBLE ARROW;Sm;0;ON;;;;;N;RIGHT DOUBLE ARROW;;;;
+21D3;DOWNWARDS DOUBLE ARROW;So;0;ON;;;;;N;DOWN DOUBLE ARROW;;;;
+21D4;LEFT RIGHT DOUBLE ARROW;Sm;0;ON;;;;;N;;;;;
+21D5;UP DOWN DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21D6;NORTH WEST DOUBLE ARROW;So;0;ON;;;;;N;UPPER LEFT DOUBLE ARROW;;;;
+21D7;NORTH EAST DOUBLE ARROW;So;0;ON;;;;;N;UPPER RIGHT DOUBLE ARROW;;;;
+21D8;SOUTH EAST DOUBLE ARROW;So;0;ON;;;;;N;LOWER RIGHT DOUBLE ARROW;;;;
+21D9;SOUTH WEST DOUBLE ARROW;So;0;ON;;;;;N;LOWER LEFT DOUBLE ARROW;;;;
+21DA;LEFTWARDS TRIPLE ARROW;So;0;ON;;;;;N;LEFT TRIPLE ARROW;;;;
+21DB;RIGHTWARDS TRIPLE ARROW;So;0;ON;;;;;N;RIGHT TRIPLE ARROW;;;;
+21DC;LEFTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;LEFT SQUIGGLE ARROW;;;;
+21DD;RIGHTWARDS SQUIGGLE ARROW;So;0;ON;;;;;N;RIGHT SQUIGGLE ARROW;;;;
+21DE;UPWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;UP ARROW WITH DOUBLE STROKE;;;;
+21DF;DOWNWARDS ARROW WITH DOUBLE STROKE;So;0;ON;;;;;N;DOWN ARROW WITH DOUBLE STROKE;;;;
+21E0;LEFTWARDS DASHED ARROW;So;0;ON;;;;;N;LEFT DASHED ARROW;;;;
+21E1;UPWARDS DASHED ARROW;So;0;ON;;;;;N;UP DASHED ARROW;;;;
+21E2;RIGHTWARDS DASHED ARROW;So;0;ON;;;;;N;RIGHT DASHED ARROW;;;;
+21E3;DOWNWARDS DASHED ARROW;So;0;ON;;;;;N;DOWN DASHED ARROW;;;;
+21E4;LEFTWARDS ARROW TO BAR;So;0;ON;;;;;N;LEFT ARROW TO BAR;;;;
+21E5;RIGHTWARDS ARROW TO BAR;So;0;ON;;;;;N;RIGHT ARROW TO BAR;;;;
+21E6;LEFTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE LEFT ARROW;;;;
+21E7;UPWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE UP ARROW;;;;
+21E8;RIGHTWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE RIGHT ARROW;;;;
+21E9;DOWNWARDS WHITE ARROW;So;0;ON;;;;;N;WHITE DOWN ARROW;;;;
+21EA;UPWARDS WHITE ARROW FROM BAR;So;0;ON;;;;;N;WHITE UP ARROW FROM BAR;;;;
+21EB;UPWARDS WHITE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
+21EC;UPWARDS WHITE ARROW ON PEDESTAL WITH HORIZONTAL BAR;So;0;ON;;;;;N;;;;;
+21ED;UPWARDS WHITE ARROW ON PEDESTAL WITH VERTICAL BAR;So;0;ON;;;;;N;;;;;
+21EE;UPWARDS WHITE DOUBLE ARROW;So;0;ON;;;;;N;;;;;
+21EF;UPWARDS WHITE DOUBLE ARROW ON PEDESTAL;So;0;ON;;;;;N;;;;;
+21F0;RIGHTWARDS WHITE ARROW FROM WALL;So;0;ON;;;;;N;;;;;
+21F1;NORTH WEST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
+21F2;SOUTH EAST ARROW TO CORNER;So;0;ON;;;;;N;;;;;
+21F3;UP DOWN WHITE ARROW;So;0;ON;;;;;N;;;;;
+2200;FOR ALL;Sm;0;ON;;;;;N;;;;;
+2201;COMPLEMENT;Sm;0;ON;;;;;Y;;;;;
+2202;PARTIAL DIFFERENTIAL;Sm;0;ON;;;;;Y;;;;;
+2203;THERE EXISTS;Sm;0;ON;;;;;Y;;;;;
+2204;THERE DOES NOT EXIST;Sm;0;ON;2203 0338;;;;Y;;;;;
+2205;EMPTY SET;Sm;0;ON;;;;;N;;;;;
+2206;INCREMENT;Sm;0;ON;;;;;N;;;;;
+2207;NABLA;Sm;0;ON;;;;;N;;;;;
+2208;ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+2209;NOT AN ELEMENT OF;Sm;0;ON;2208 0338;;;;Y;;;;;
+220A;SMALL ELEMENT OF;Sm;0;ON;;;;;Y;;;;;
+220B;CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220C;DOES NOT CONTAIN AS MEMBER;Sm;0;ON;220B 0338;;;;Y;;;;;
+220D;SMALL CONTAINS AS MEMBER;Sm;0;ON;;;;;Y;;;;;
+220E;END OF PROOF;Sm;0;ON;;;;;N;;;;;
+220F;N-ARY PRODUCT;Sm;0;ON;;;;;N;;;;;
+2210;N-ARY COPRODUCT;Sm;0;ON;;;;;N;;;;;
+2211;N-ARY SUMMATION;Sm;0;ON;;;;;Y;;;;;
+2212;MINUS SIGN;Sm;0;ET;;;;;N;;;;;
+2213;MINUS-OR-PLUS SIGN;Sm;0;ET;;;;;N;;;;;
+2214;DOT PLUS;Sm;0;ON;;;;;N;;;;;
+2215;DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2216;SET MINUS;Sm;0;ON;;;;;Y;;;;;
+2217;ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+2218;RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;;
+221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;;
+221B;CUBE ROOT;Sm;0;ON;;;;;Y;;;;;
+221C;FOURTH ROOT;Sm;0;ON;;;;;Y;;;;;
+221D;PROPORTIONAL TO;Sm;0;ON;;;;;Y;;;;;
+221E;INFINITY;Sm;0;ON;;;;;N;;;;;
+221F;RIGHT ANGLE;Sm;0;ON;;;;;Y;;;;;
+2220;ANGLE;Sm;0;ON;;;;;Y;;;;;
+2221;MEASURED ANGLE;Sm;0;ON;;;;;Y;;;;;
+2222;SPHERICAL ANGLE;Sm;0;ON;;;;;Y;;;;;
+2223;DIVIDES;Sm;0;ON;;;;;N;;;;;
+2224;DOES NOT DIVIDE;Sm;0;ON;2223 0338;;;;Y;;;;;
+2225;PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+2226;NOT PARALLEL TO;Sm;0;ON;2225 0338;;;;Y;;;;;
+2227;LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+2228;LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+2229;INTERSECTION;Sm;0;ON;;;;;N;;;;;
+222A;UNION;Sm;0;ON;;;;;N;;;;;
+222B;INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222C;DOUBLE INTEGRAL;Sm;0;ON;<compat> 222B 222B;;;;Y;;;;;
+222D;TRIPLE INTEGRAL;Sm;0;ON;<compat> 222B 222B 222B;;;;Y;;;;;
+222E;CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+222F;SURFACE INTEGRAL;Sm;0;ON;<compat> 222E 222E;;;;Y;;;;;
+2230;VOLUME INTEGRAL;Sm;0;ON;<compat> 222E 222E 222E;;;;Y;;;;;
+2231;CLOCKWISE INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2232;CLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2233;ANTICLOCKWISE CONTOUR INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2234;THEREFORE;Sm;0;ON;;;;;N;;;;;
+2235;BECAUSE;Sm;0;ON;;;;;N;;;;;
+2236;RATIO;Sm;0;ON;;;;;N;;;;;
+2237;PROPORTION;Sm;0;ON;;;;;N;;;;;
+2238;DOT MINUS;Sm;0;ON;;;;;N;;;;;
+2239;EXCESS;Sm;0;ON;;;;;Y;;;;;
+223A;GEOMETRIC PROPORTION;Sm;0;ON;;;;;N;;;;;
+223B;HOMOTHETIC;Sm;0;ON;;;;;Y;;;;;
+223C;TILDE OPERATOR;Sm;0;ON;;;;;Y;;;;;
+223D;REVERSED TILDE;Sm;0;ON;;;;;Y;;lazy S;;;
+223E;INVERTED LAZY S;Sm;0;ON;;;;;Y;;;;;
+223F;SINE WAVE;Sm;0;ON;;;;;Y;;;;;
+2240;WREATH PRODUCT;Sm;0;ON;;;;;Y;;;;;
+2241;NOT TILDE;Sm;0;ON;223C 0338;;;;Y;;;;;
+2242;MINUS TILDE;Sm;0;ON;;;;;Y;;;;;
+2243;ASYMPTOTICALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2244;NOT ASYMPTOTICALLY EQUAL TO;Sm;0;ON;2243 0338;;;;Y;;;;;
+2245;APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2246;APPROXIMATELY BUT NOT ACTUALLY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2247;NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;Sm;0;ON;2245 0338;;;;Y;;;;;
+2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2249;NOT ALMOST EQUAL TO;Sm;0;ON;2248 0338;;;;Y;;;;;
+224A;ALMOST EQUAL OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224B;TRIPLE TILDE;Sm;0;ON;;;;;Y;;;;;
+224C;ALL EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+224D;EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224E;GEOMETRICALLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+224F;DIFFERENCE BETWEEN;Sm;0;ON;;;;;N;;;;;
+2250;APPROACHES THE LIMIT;Sm;0;ON;;;;;N;;;;;
+2251;GEOMETRICALLY EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2252;APPROXIMATELY EQUAL TO OR THE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2253;IMAGE OF OR APPROXIMATELY EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2254;COLON EQUALS;Sm;0;ON;;;;;Y;COLON EQUAL;;;;
+2255;EQUALS COLON;Sm;0;ON;;;;;Y;EQUAL COLON;;;;
+2256;RING IN EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2257;RING EQUAL TO;Sm;0;ON;;;;;N;;;;;
+2258;CORRESPONDS TO;Sm;0;ON;;;;;N;;;;;
+2259;ESTIMATES;Sm;0;ON;;;;;N;;;;;
+225A;EQUIANGULAR TO;Sm;0;ON;;;;;N;;;;;
+225B;STAR EQUALS;Sm;0;ON;;;;;N;;;;;
+225C;DELTA EQUAL TO;Sm;0;ON;;;;;N;;;;;
+225D;EQUAL TO BY DEFINITION;Sm;0;ON;;;;;N;;;;;
+225E;MEASURED BY;Sm;0;ON;;;;;N;;;;;
+225F;QUESTIONED EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2260;NOT EQUAL TO;Sm;0;ON;003D 0338;;;;Y;;;;;
+2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;;
+2262;NOT IDENTICAL TO;Sm;0;ON;2261 0338;;;;Y;;;;;
+2263;STRICTLY EQUIVALENT TO;Sm;0;ON;;;;;N;;;;;
+2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;;
+2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;;
+2266;LESS-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OVER EQUAL TO;;;;
+2267;GREATER-THAN OVER EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OVER EQUAL TO;;;;
+2268;LESS-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUAL TO;;;;
+2269;GREATER-THAN BUT NOT EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUAL TO;;;;
+226A;MUCH LESS-THAN;Sm;0;ON;;;;;Y;MUCH LESS THAN;;;;
+226B;MUCH GREATER-THAN;Sm;0;ON;;;;;Y;MUCH GREATER THAN;;;;
+226C;BETWEEN;Sm;0;ON;;;;;N;;;;;
+226D;NOT EQUIVALENT TO;Sm;0;ON;224D 0338;;;;N;;;;;
+226E;NOT LESS-THAN;Sm;0;ON;003C 0338;;;;Y;NOT LESS THAN;;;;
+226F;NOT GREATER-THAN;Sm;0;ON;003E 0338;;;;Y;NOT GREATER THAN;;;;
+2270;NEITHER LESS-THAN NOR EQUAL TO;Sm;0;ON;2264 0338;;;;Y;NEITHER LESS THAN NOR EQUAL TO;;;;
+2271;NEITHER GREATER-THAN NOR EQUAL TO;Sm;0;ON;2265 0338;;;;Y;NEITHER GREATER THAN NOR EQUAL TO;;;;
+2272;LESS-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUIVALENT TO;;;;
+2273;GREATER-THAN OR EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUIVALENT TO;;;;
+2274;NEITHER LESS-THAN NOR EQUIVALENT TO;Sm;0;ON;2272 0338;;;;Y;NEITHER LESS THAN NOR EQUIVALENT TO;;;;
+2275;NEITHER GREATER-THAN NOR EQUIVALENT TO;Sm;0;ON;2273 0338;;;;Y;NEITHER GREATER THAN NOR EQUIVALENT TO;;;;
+2276;LESS-THAN OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN OR GREATER THAN;;;;
+2277;GREATER-THAN OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN OR LESS THAN;;;;
+2278;NEITHER LESS-THAN NOR GREATER-THAN;Sm;0;ON;2276 0338;;;;Y;NEITHER LESS THAN NOR GREATER THAN;;;;
+2279;NEITHER GREATER-THAN NOR LESS-THAN;Sm;0;ON;2277 0338;;;;Y;NEITHER GREATER THAN NOR LESS THAN;;;;
+227A;PRECEDES;Sm;0;ON;;;;;Y;;;;;
+227B;SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+227C;PRECEDES OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227D;SUCCEEDS OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+227E;PRECEDES OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+227F;SUCCEEDS OR EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+2280;DOES NOT PRECEDE;Sm;0;ON;227A 0338;;;;Y;;;;;
+2281;DOES NOT SUCCEED;Sm;0;ON;227B 0338;;;;Y;;;;;
+2282;SUBSET OF;Sm;0;ON;;;;;Y;;;;;
+2283;SUPERSET OF;Sm;0;ON;;;;;Y;;;;;
+2284;NOT A SUBSET OF;Sm;0;ON;2282 0338;;;;Y;;;;;
+2285;NOT A SUPERSET OF;Sm;0;ON;2283 0338;;;;Y;;;;;
+2286;SUBSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2287;SUPERSET OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2288;NEITHER A SUBSET OF NOR EQUAL TO;Sm;0;ON;2286 0338;;;;Y;;;;;
+2289;NEITHER A SUPERSET OF NOR EQUAL TO;Sm;0;ON;2287 0338;;;;Y;;;;;
+228A;SUBSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUBSET OF OR NOT EQUAL TO;;;;
+228B;SUPERSET OF WITH NOT EQUAL TO;Sm;0;ON;;;;;Y;SUPERSET OF OR NOT EQUAL TO;;;;
+228C;MULTISET;Sm;0;ON;;;;;Y;;;;;
+228D;MULTISET MULTIPLICATION;Sm;0;ON;;;;;N;;;;;
+228E;MULTISET UNION;Sm;0;ON;;;;;N;;;;;
+228F;SQUARE IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+2290;SQUARE ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+2291;SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2292;SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2293;SQUARE CAP;Sm;0;ON;;;;;N;;;;;
+2294;SQUARE CUP;Sm;0;ON;;;;;N;;;;;
+2295;CIRCLED PLUS;Sm;0;ON;;;;;N;;;;;
+2296;CIRCLED MINUS;Sm;0;ON;;;;;N;;;;;
+2297;CIRCLED TIMES;Sm;0;ON;;;;;N;;;;;
+2298;CIRCLED DIVISION SLASH;Sm;0;ON;;;;;Y;;;;;
+2299;CIRCLED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+229A;CIRCLED RING OPERATOR;Sm;0;ON;;;;;N;;;;;
+229B;CIRCLED ASTERISK OPERATOR;Sm;0;ON;;;;;N;;;;;
+229C;CIRCLED EQUALS;Sm;0;ON;;;;;N;;;;;
+229D;CIRCLED DASH;Sm;0;ON;;;;;N;;;;;
+229E;SQUARED PLUS;Sm;0;ON;;;;;N;;;;;
+229F;SQUARED MINUS;Sm;0;ON;;;;;N;;;;;
+22A0;SQUARED TIMES;Sm;0;ON;;;;;N;;;;;
+22A1;SQUARED DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22A2;RIGHT TACK;Sm;0;ON;;;;;Y;;;;;
+22A3;LEFT TACK;Sm;0;ON;;;;;Y;;;;;
+22A4;DOWN TACK;Sm;0;ON;;;;;N;;;;;
+22A5;UP TACK;Sm;0;ON;;;;;N;;;;;
+22A6;ASSERTION;Sm;0;ON;;;;;Y;;;;;
+22A7;MODELS;Sm;0;ON;;;;;Y;;;;;
+22A8;TRUE;Sm;0;ON;;;;;Y;;;;;
+22A9;FORCES;Sm;0;ON;;;;;Y;;;;;
+22AA;TRIPLE VERTICAL BAR RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AB;DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;;;;;Y;;;;;
+22AC;DOES NOT PROVE;Sm;0;ON;22A2 0338;;;;Y;;;;;
+22AD;NOT TRUE;Sm;0;ON;22A8 0338;;;;Y;;;;;
+22AE;DOES NOT FORCE;Sm;0;ON;22A9 0338;;;;Y;;;;;
+22AF;NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;Sm;0;ON;22AB 0338;;;;Y;;;;;
+22B0;PRECEDES UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B1;SUCCEEDS UNDER RELATION;Sm;0;ON;;;;;Y;;;;;
+22B2;NORMAL SUBGROUP OF;Sm;0;ON;;;;;Y;;;;;
+22B3;CONTAINS AS NORMAL SUBGROUP;Sm;0;ON;;;;;Y;;;;;
+22B4;NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B5;CONTAINS AS NORMAL SUBGROUP OR EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22B6;ORIGINAL OF;Sm;0;ON;;;;;Y;;;;;
+22B7;IMAGE OF;Sm;0;ON;;;;;Y;;;;;
+22B8;MULTIMAP;Sm;0;ON;;;;;Y;;;;;
+22B9;HERMITIAN CONJUGATE MATRIX;Sm;0;ON;;;;;N;;;;;
+22BA;INTERCALATE;Sm;0;ON;;;;;N;;;;;
+22BB;XOR;Sm;0;ON;;;;;N;;;;;
+22BC;NAND;Sm;0;ON;;;;;N;;;;;
+22BD;NOR;Sm;0;ON;;;;;N;;;;;
+22BE;RIGHT ANGLE WITH ARC;Sm;0;ON;;;;;Y;;;;;
+22BF;RIGHT TRIANGLE;Sm;0;ON;;;;;Y;;;;;
+22C0;N-ARY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22C1;N-ARY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22C2;N-ARY INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22C3;N-ARY UNION;Sm;0;ON;;;;;N;;;;;
+22C4;DIAMOND OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C5;DOT OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C6;STAR OPERATOR;Sm;0;ON;;;;;N;;;;;
+22C7;DIVISION TIMES;Sm;0;ON;;;;;N;;;;;
+22C8;BOWTIE;Sm;0;ON;;;;;N;;;;;
+22C9;LEFT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CA;RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CB;LEFT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CC;RIGHT SEMIDIRECT PRODUCT;Sm;0;ON;;;;;Y;;;;;
+22CD;REVERSED TILDE EQUALS;Sm;0;ON;;;;;Y;;;;;
+22CE;CURLY LOGICAL OR;Sm;0;ON;;;;;N;;;;;
+22CF;CURLY LOGICAL AND;Sm;0;ON;;;;;N;;;;;
+22D0;DOUBLE SUBSET;Sm;0;ON;;;;;Y;;;;;
+22D1;DOUBLE SUPERSET;Sm;0;ON;;;;;Y;;;;;
+22D2;DOUBLE INTERSECTION;Sm;0;ON;;;;;N;;;;;
+22D3;DOUBLE UNION;Sm;0;ON;;;;;N;;;;;
+22D4;PITCHFORK;Sm;0;ON;;;;;N;;;;;
+22D5;EQUAL AND PARALLEL TO;Sm;0;ON;;;;;N;;;;;
+22D6;LESS-THAN WITH DOT;Sm;0;ON;;;;;Y;LESS THAN WITH DOT;;;;
+22D7;GREATER-THAN WITH DOT;Sm;0;ON;;;;;Y;GREATER THAN WITH DOT;;;;
+22D8;VERY MUCH LESS-THAN;Sm;0;ON;;;;;Y;VERY MUCH LESS THAN;;;;
+22D9;VERY MUCH GREATER-THAN;Sm;0;ON;;;;;Y;VERY MUCH GREATER THAN;;;;
+22DA;LESS-THAN EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;LESS THAN EQUAL TO OR GREATER THAN;;;;
+22DB;GREATER-THAN EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;GREATER THAN EQUAL TO OR LESS THAN;;;;
+22DC;EQUAL TO OR LESS-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR LESS THAN;;;;
+22DD;EQUAL TO OR GREATER-THAN;Sm;0;ON;;;;;Y;EQUAL TO OR GREATER THAN;;;;
+22DE;EQUAL TO OR PRECEDES;Sm;0;ON;;;;;Y;;;;;
+22DF;EQUAL TO OR SUCCEEDS;Sm;0;ON;;;;;Y;;;;;
+22E0;DOES NOT PRECEDE OR EQUAL;Sm;0;ON;227C 0338;;;;Y;;;;;
+22E1;DOES NOT SUCCEED OR EQUAL;Sm;0;ON;227D 0338;;;;Y;;;;;
+22E2;NOT SQUARE IMAGE OF OR EQUAL TO;Sm;0;ON;2291 0338;;;;Y;;;;;
+22E3;NOT SQUARE ORIGINAL OF OR EQUAL TO;Sm;0;ON;2292 0338;;;;Y;;;;;
+22E4;SQUARE IMAGE OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E5;SQUARE ORIGINAL OF OR NOT EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+22E6;LESS-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;LESS THAN BUT NOT EQUIVALENT TO;;;;
+22E7;GREATER-THAN BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;GREATER THAN BUT NOT EQUIVALENT TO;;;;
+22E8;PRECEDES BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22E9;SUCCEEDS BUT NOT EQUIVALENT TO;Sm;0;ON;;;;;Y;;;;;
+22EA;NOT NORMAL SUBGROUP OF;Sm;0;ON;22B2 0338;;;;Y;;;;;
+22EB;DOES NOT CONTAIN AS NORMAL SUBGROUP;Sm;0;ON;22B3 0338;;;;Y;;;;;
+22EC;NOT NORMAL SUBGROUP OF OR EQUAL TO;Sm;0;ON;22B4 0338;;;;Y;;;;;
+22ED;DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;Sm;0;ON;22B5 0338;;;;Y;;;;;
+22EE;VERTICAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22EF;MIDLINE HORIZONTAL ELLIPSIS;Sm;0;ON;;;;;N;;;;;
+22F0;UP RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+22F1;DOWN RIGHT DIAGONAL ELLIPSIS;Sm;0;ON;;;;;Y;;;;;
+2300;DIAMETER SIGN;So;0;ON;;;;;N;;;;;
+2301;ELECTRIC ARROW;So;0;ON;;;;;N;;;;;
+2302;HOUSE;So;0;ON;;;;;N;;;;;
+2303;UP ARROWHEAD;So;0;ON;;;;;N;;;;;
+2304;DOWN ARROWHEAD;So;0;ON;;;;;N;;;;;
+2305;PROJECTIVE;So;0;ON;;;;;N;;;;;
+2306;PERSPECTIVE;So;0;ON;;;;;N;;;;;
+2307;WAVY LINE;So;0;ON;;;;;N;;;;;
+2308;LEFT CEILING;Sm;0;ON;;;;;Y;;;;;
+2309;RIGHT CEILING;Sm;0;ON;;;;;Y;;;;;
+230A;LEFT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230B;RIGHT FLOOR;Sm;0;ON;;;;;Y;;;;;
+230C;BOTTOM RIGHT CROP;So;0;ON;;;;;N;;;;;
+230D;BOTTOM LEFT CROP;So;0;ON;;;;;N;;;;;
+230E;TOP RIGHT CROP;So;0;ON;;;;;N;;;;;
+230F;TOP LEFT CROP;So;0;ON;;;;;N;;;;;
+2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;;
+2311;SQUARE LOZENGE;So;0;ON;;;;;N;;;;;
+2312;ARC;So;0;ON;;;;;N;;;;;
+2313;SEGMENT;So;0;ON;;;;;N;;;;;
+2314;SECTOR;So;0;ON;;;;;N;;;;;
+2315;TELEPHONE RECORDER;So;0;ON;;;;;N;;;;;
+2316;POSITION INDICATOR;So;0;ON;;;;;N;;;;;
+2317;VIEWDATA SQUARE;So;0;ON;;;;;N;;;;;
+2318;PLACE OF INTEREST SIGN;So;0;ON;;;;;N;COMMAND KEY;;;;
+2319;TURNED NOT SIGN;So;0;ON;;;;;N;;;;;
+231A;WATCH;So;0;ON;;;;;N;;;;;
+231B;HOURGLASS;So;0;ON;;;;;N;;;;;
+231C;TOP LEFT CORNER;So;0;ON;;;;;N;;;;;
+231D;TOP RIGHT CORNER;So;0;ON;;;;;N;;;;;
+231E;BOTTOM LEFT CORNER;So;0;ON;;;;;N;;;;;
+231F;BOTTOM RIGHT CORNER;So;0;ON;;;;;N;;;;;
+2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2322;FROWN;So;0;ON;;;;;N;;;;;
+2323;SMILE;So;0;ON;;;;;N;;;;;
+2324;UP ARROWHEAD BETWEEN TWO HORIZONTAL BARS;So;0;ON;;;;;N;ENTER KEY;;;;
+2325;OPTION KEY;So;0;ON;;;;;N;;;;;
+2326;ERASE TO THE RIGHT;So;0;ON;;;;;N;DELETE TO THE RIGHT KEY;;;;
+2327;X IN A RECTANGLE BOX;So;0;ON;;;;;N;CLEAR KEY;;;;
+2328;KEYBOARD;So;0;ON;;;;;N;;;;;
+2329;LEFT-POINTING ANGLE BRACKET;Ps;0;ON;3008;;;;Y;BRA;;;;
+232A;RIGHT-POINTING ANGLE BRACKET;Pe;0;ON;3009;;;;Y;KET;;;;
+232B;ERASE TO THE LEFT;So;0;ON;;;;;N;DELETE TO THE LEFT KEY;;;;
+232C;BENZENE RING;So;0;ON;;;;;N;;;;;
+232D;CYLINDRICITY;So;0;ON;;;;;N;;;;;
+232E;ALL AROUND-PROFILE;So;0;ON;;;;;N;;;;;
+232F;SYMMETRY;So;0;ON;;;;;N;;;;;
+2330;TOTAL RUNOUT;So;0;ON;;;;;N;;;;;
+2331;DIMENSION ORIGIN;So;0;ON;;;;;N;;;;;
+2332;CONICAL TAPER;So;0;ON;;;;;N;;;;;
+2333;SLOPE;So;0;ON;;;;;N;;;;;
+2334;COUNTERBORE;So;0;ON;;;;;N;;;;;
+2335;COUNTERSINK;So;0;ON;;;;;N;;;;;
+2336;APL FUNCTIONAL SYMBOL I-BEAM;So;0;L;;;;;N;;;;;
+2337;APL FUNCTIONAL SYMBOL SQUISH QUAD;So;0;L;;;;;N;;;;;
+2338;APL FUNCTIONAL SYMBOL QUAD EQUAL;So;0;L;;;;;N;;;;;
+2339;APL FUNCTIONAL SYMBOL QUAD DIVIDE;So;0;L;;;;;N;;;;;
+233A;APL FUNCTIONAL SYMBOL QUAD DIAMOND;So;0;L;;;;;N;;;;;
+233B;APL FUNCTIONAL SYMBOL QUAD JOT;So;0;L;;;;;N;;;;;
+233C;APL FUNCTIONAL SYMBOL QUAD CIRCLE;So;0;L;;;;;N;;;;;
+233D;APL FUNCTIONAL SYMBOL CIRCLE STILE;So;0;L;;;;;N;;;;;
+233E;APL FUNCTIONAL SYMBOL CIRCLE JOT;So;0;L;;;;;N;;;;;
+233F;APL FUNCTIONAL SYMBOL SLASH BAR;So;0;L;;;;;N;;;;;
+2340;APL FUNCTIONAL SYMBOL BACKSLASH BAR;So;0;L;;;;;N;;;;;
+2341;APL FUNCTIONAL SYMBOL QUAD SLASH;So;0;L;;;;;N;;;;;
+2342;APL FUNCTIONAL SYMBOL QUAD BACKSLASH;So;0;L;;;;;N;;;;;
+2343;APL FUNCTIONAL SYMBOL QUAD LESS-THAN;So;0;L;;;;;N;;;;;
+2344;APL FUNCTIONAL SYMBOL QUAD GREATER-THAN;So;0;L;;;;;N;;;;;
+2345;APL FUNCTIONAL SYMBOL LEFTWARDS VANE;So;0;L;;;;;N;;;;;
+2346;APL FUNCTIONAL SYMBOL RIGHTWARDS VANE;So;0;L;;;;;N;;;;;
+2347;APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;So;0;L;;;;;N;;;;;
+2348;APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;So;0;L;;;;;N;;;;;
+2349;APL FUNCTIONAL SYMBOL CIRCLE BACKSLASH;So;0;L;;;;;N;;;;;
+234A;APL FUNCTIONAL SYMBOL DOWN TACK UNDERBAR;So;0;L;;;;;N;;*;;;
+234B;APL FUNCTIONAL SYMBOL DELTA STILE;So;0;L;;;;;N;;;;;
+234C;APL FUNCTIONAL SYMBOL QUAD DOWN CARET;So;0;L;;;;;N;;;;;
+234D;APL FUNCTIONAL SYMBOL QUAD DELTA;So;0;L;;;;;N;;;;;
+234E;APL FUNCTIONAL SYMBOL DOWN TACK JOT;So;0;L;;;;;N;;*;;;
+234F;APL FUNCTIONAL SYMBOL UPWARDS VANE;So;0;L;;;;;N;;;;;
+2350;APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW;So;0;L;;;;;N;;;;;
+2351;APL FUNCTIONAL SYMBOL UP TACK OVERBAR;So;0;L;;;;;N;;*;;;
+2352;APL FUNCTIONAL SYMBOL DEL STILE;So;0;L;;;;;N;;;;;
+2353;APL FUNCTIONAL SYMBOL QUAD UP CARET;So;0;L;;;;;N;;;;;
+2354;APL FUNCTIONAL SYMBOL QUAD DEL;So;0;L;;;;;N;;;;;
+2355;APL FUNCTIONAL SYMBOL UP TACK JOT;So;0;L;;;;;N;;*;;;
+2356;APL FUNCTIONAL SYMBOL DOWNWARDS VANE;So;0;L;;;;;N;;;;;
+2357;APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;So;0;L;;;;;N;;;;;
+2358;APL FUNCTIONAL SYMBOL QUOTE UNDERBAR;So;0;L;;;;;N;;;;;
+2359;APL FUNCTIONAL SYMBOL DELTA UNDERBAR;So;0;L;;;;;N;;;;;
+235A;APL FUNCTIONAL SYMBOL DIAMOND UNDERBAR;So;0;L;;;;;N;;;;;
+235B;APL FUNCTIONAL SYMBOL JOT UNDERBAR;So;0;L;;;;;N;;;;;
+235C;APL FUNCTIONAL SYMBOL CIRCLE UNDERBAR;So;0;L;;;;;N;;;;;
+235D;APL FUNCTIONAL SYMBOL UP SHOE JOT;So;0;L;;;;;N;;;;;
+235E;APL FUNCTIONAL SYMBOL QUOTE QUAD;So;0;L;;;;;N;;;;;
+235F;APL FUNCTIONAL SYMBOL CIRCLE STAR;So;0;L;;;;;N;;;;;
+2360;APL FUNCTIONAL SYMBOL QUAD COLON;So;0;L;;;;;N;;;;;
+2361;APL FUNCTIONAL SYMBOL UP TACK DIAERESIS;So;0;L;;;;;N;;*;;;
+2362;APL FUNCTIONAL SYMBOL DEL DIAERESIS;So;0;L;;;;;N;;;;;
+2363;APL FUNCTIONAL SYMBOL STAR DIAERESIS;So;0;L;;;;;N;;;;;
+2364;APL FUNCTIONAL SYMBOL JOT DIAERESIS;So;0;L;;;;;N;;;;;
+2365;APL FUNCTIONAL SYMBOL CIRCLE DIAERESIS;So;0;L;;;;;N;;;;;
+2366;APL FUNCTIONAL SYMBOL DOWN SHOE STILE;So;0;L;;;;;N;;;;;
+2367;APL FUNCTIONAL SYMBOL LEFT SHOE STILE;So;0;L;;;;;N;;;;;
+2368;APL FUNCTIONAL SYMBOL TILDE DIAERESIS;So;0;L;;;;;N;;;;;
+2369;APL FUNCTIONAL SYMBOL GREATER-THAN DIAERESIS;So;0;L;;;;;N;;;;;
+236A;APL FUNCTIONAL SYMBOL COMMA BAR;So;0;L;;;;;N;;;;;
+236B;APL FUNCTIONAL SYMBOL DEL TILDE;So;0;L;;;;;N;;;;;
+236C;APL FUNCTIONAL SYMBOL ZILDE;So;0;L;;;;;N;;;;;
+236D;APL FUNCTIONAL SYMBOL STILE TILDE;So;0;L;;;;;N;;;;;
+236E;APL FUNCTIONAL SYMBOL SEMICOLON UNDERBAR;So;0;L;;;;;N;;;;;
+236F;APL FUNCTIONAL SYMBOL QUAD NOT EQUAL;So;0;L;;;;;N;;;;;
+2370;APL FUNCTIONAL SYMBOL QUAD QUESTION;So;0;L;;;;;N;;;;;
+2371;APL FUNCTIONAL SYMBOL DOWN CARET TILDE;So;0;L;;;;;N;;;;;
+2372;APL FUNCTIONAL SYMBOL UP CARET TILDE;So;0;L;;;;;N;;;;;
+2373;APL FUNCTIONAL SYMBOL IOTA;So;0;L;;;;;N;;;;;
+2374;APL FUNCTIONAL SYMBOL RHO;So;0;L;;;;;N;;;;;
+2375;APL FUNCTIONAL SYMBOL OMEGA;So;0;L;;;;;N;;;;;
+2376;APL FUNCTIONAL SYMBOL ALPHA UNDERBAR;So;0;L;;;;;N;;;;;
+2377;APL FUNCTIONAL SYMBOL EPSILON UNDERBAR;So;0;L;;;;;N;;;;;
+2378;APL FUNCTIONAL SYMBOL IOTA UNDERBAR;So;0;L;;;;;N;;;;;
+2379;APL FUNCTIONAL SYMBOL OMEGA UNDERBAR;So;0;L;;;;;N;;;;;
+237A;APL FUNCTIONAL SYMBOL ALPHA;So;0;L;;;;;N;;;;;
+237B;NOT CHECK MARK;So;0;ON;;;;;N;;;;;
+237D;SHOULDERED OPEN BOX;So;0;ON;;;;;N;;;;;
+237E;BELL SYMBOL;So;0;ON;;;;;N;;;;;
+237F;VERTICAL LINE WITH MIDDLE DOT;So;0;ON;;;;;N;;;;;
+2380;INSERTION SYMBOL;So;0;ON;;;;;N;;;;;
+2381;CONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
+2382;DISCONTINUOUS UNDERLINE SYMBOL;So;0;ON;;;;;N;;;;;
+2383;EMPHASIS SYMBOL;So;0;ON;;;;;N;;;;;
+2384;COMPOSITION SYMBOL;So;0;ON;;;;;N;;;;;
+2385;WHITE SQUARE WITH CENTRE VERTICAL LINE;So;0;ON;;;;;N;;;;;
+2386;ENTER SYMBOL;So;0;ON;;;;;N;;;;;
+2387;ALTERNATIVE KEY SYMBOL;So;0;ON;;;;;N;;;;;
+2388;HELM SYMBOL;So;0;ON;;;;;N;;;;;
+2389;CIRCLED HORIZONTAL BAR WITH NOTCH;So;0;ON;;;;;N;;pause;;;
+238A;CIRCLED TRIANGLE DOWN;So;0;ON;;;;;N;;break;;;
+238B;BROKEN CIRCLE WITH NORTHWEST ARROW;So;0;ON;;;;;N;;escape;;;
+238C;UNDO SYMBOL;So;0;ON;;;;;N;;;;;
+238D;MONOSTABLE SYMBOL;So;0;ON;;;;;N;;;;;
+238E;HYSTERESIS SYMBOL;So;0;ON;;;;;N;;;;;
+238F;OPEN-CIRCUIT-OUTPUT H-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
+2390;OPEN-CIRCUIT-OUTPUT L-TYPE SYMBOL;So;0;ON;;;;;N;;;;;
+2391;PASSIVE-PULL-DOWN-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
+2392;PASSIVE-PULL-UP-OUTPUT SYMBOL;So;0;ON;;;;;N;;;;;
+2393;DIRECT CURRENT SYMBOL FORM TWO;So;0;ON;;;;;N;;;;;
+2394;SOFTWARE-FUNCTION SYMBOL;So;0;ON;;;;;N;;;;;
+2395;APL FUNCTIONAL SYMBOL QUAD;So;0;L;;;;;N;;;;;
+2396;DECIMAL SEPARATOR KEY SYMBOL;So;0;ON;;;;;N;;;;;
+2397;PREVIOUS PAGE;So;0;ON;;;;;N;;;;;
+2398;NEXT PAGE;So;0;ON;;;;;N;;;;;
+2399;PRINT SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
+239A;CLEAR SCREEN SYMBOL;So;0;ON;;;;;N;;;;;
+2400;SYMBOL FOR NULL;So;0;ON;;;;;N;GRAPHIC FOR NULL;;;;
+2401;SYMBOL FOR START OF HEADING;So;0;ON;;;;;N;GRAPHIC FOR START OF HEADING;;;;
+2402;SYMBOL FOR START OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR START OF TEXT;;;;
+2403;SYMBOL FOR END OF TEXT;So;0;ON;;;;;N;GRAPHIC FOR END OF TEXT;;;;
+2404;SYMBOL FOR END OF TRANSMISSION;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION;;;;
+2405;SYMBOL FOR ENQUIRY;So;0;ON;;;;;N;GRAPHIC FOR ENQUIRY;;;;
+2406;SYMBOL FOR ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR ACKNOWLEDGE;;;;
+2407;SYMBOL FOR BELL;So;0;ON;;;;;N;GRAPHIC FOR BELL;;;;
+2408;SYMBOL FOR BACKSPACE;So;0;ON;;;;;N;GRAPHIC FOR BACKSPACE;;;;
+2409;SYMBOL FOR HORIZONTAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR HORIZONTAL TABULATION;;;;
+240A;SYMBOL FOR LINE FEED;So;0;ON;;;;;N;GRAPHIC FOR LINE FEED;;;;
+240B;SYMBOL FOR VERTICAL TABULATION;So;0;ON;;;;;N;GRAPHIC FOR VERTICAL TABULATION;;;;
+240C;SYMBOL FOR FORM FEED;So;0;ON;;;;;N;GRAPHIC FOR FORM FEED;;;;
+240D;SYMBOL FOR CARRIAGE RETURN;So;0;ON;;;;;N;GRAPHIC FOR CARRIAGE RETURN;;;;
+240E;SYMBOL FOR SHIFT OUT;So;0;ON;;;;;N;GRAPHIC FOR SHIFT OUT;;;;
+240F;SYMBOL FOR SHIFT IN;So;0;ON;;;;;N;GRAPHIC FOR SHIFT IN;;;;
+2410;SYMBOL FOR DATA LINK ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR DATA LINK ESCAPE;;;;
+2411;SYMBOL FOR DEVICE CONTROL ONE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL ONE;;;;
+2412;SYMBOL FOR DEVICE CONTROL TWO;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL TWO;;;;
+2413;SYMBOL FOR DEVICE CONTROL THREE;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL THREE;;;;
+2414;SYMBOL FOR DEVICE CONTROL FOUR;So;0;ON;;;;;N;GRAPHIC FOR DEVICE CONTROL FOUR;;;;
+2415;SYMBOL FOR NEGATIVE ACKNOWLEDGE;So;0;ON;;;;;N;GRAPHIC FOR NEGATIVE ACKNOWLEDGE;;;;
+2416;SYMBOL FOR SYNCHRONOUS IDLE;So;0;ON;;;;;N;GRAPHIC FOR SYNCHRONOUS IDLE;;;;
+2417;SYMBOL FOR END OF TRANSMISSION BLOCK;So;0;ON;;;;;N;GRAPHIC FOR END OF TRANSMISSION BLOCK;;;;
+2418;SYMBOL FOR CANCEL;So;0;ON;;;;;N;GRAPHIC FOR CANCEL;;;;
+2419;SYMBOL FOR END OF MEDIUM;So;0;ON;;;;;N;GRAPHIC FOR END OF MEDIUM;;;;
+241A;SYMBOL FOR SUBSTITUTE;So;0;ON;;;;;N;GRAPHIC FOR SUBSTITUTE;;;;
+241B;SYMBOL FOR ESCAPE;So;0;ON;;;;;N;GRAPHIC FOR ESCAPE;;;;
+241C;SYMBOL FOR FILE SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR FILE SEPARATOR;;;;
+241D;SYMBOL FOR GROUP SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR GROUP SEPARATOR;;;;
+241E;SYMBOL FOR RECORD SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR RECORD SEPARATOR;;;;
+241F;SYMBOL FOR UNIT SEPARATOR;So;0;ON;;;;;N;GRAPHIC FOR UNIT SEPARATOR;;;;
+2420;SYMBOL FOR SPACE;So;0;ON;;;;;N;GRAPHIC FOR SPACE;;;;
+2421;SYMBOL FOR DELETE;So;0;ON;;;;;N;GRAPHIC FOR DELETE;;;;
+2422;BLANK SYMBOL;So;0;ON;;;;;N;BLANK;;;;
+2423;OPEN BOX;So;0;ON;;;;;N;;;;;
+2424;SYMBOL FOR NEWLINE;So;0;ON;;;;;N;GRAPHIC FOR NEWLINE;;;;
+2425;SYMBOL FOR DELETE FORM TWO;So;0;ON;;;;;N;;;;;
+2426;SYMBOL FOR SUBSTITUTE FORM TWO;So;0;ON;;;;;N;;;;;
+2440;OCR HOOK;So;0;ON;;;;;N;;;;;
+2441;OCR CHAIR;So;0;ON;;;;;N;;;;;
+2442;OCR FORK;So;0;ON;;;;;N;;;;;
+2443;OCR INVERTED FORK;So;0;ON;;;;;N;;;;;
+2444;OCR BELT BUCKLE;So;0;ON;;;;;N;;;;;
+2445;OCR BOW TIE;So;0;ON;;;;;N;;;;;
+2446;OCR BRANCH BANK IDENTIFICATION;So;0;ON;;;;;N;;;;;
+2447;OCR AMOUNT OF CHECK;So;0;ON;;;;;N;;;;;
+2448;OCR DASH;So;0;ON;;;;;N;;;;;
+2449;OCR CUSTOMER ACCOUNT NUMBER;So;0;ON;;;;;N;;;;;
+244A;OCR DOUBLE BACKSLASH;So;0;ON;;;;;N;;;;;
+2460;CIRCLED DIGIT ONE;No;0;EN;<circle> 0031;;1;1;N;;;;;
+2461;CIRCLED DIGIT TWO;No;0;EN;<circle> 0032;;2;2;N;;;;;
+2462;CIRCLED DIGIT THREE;No;0;EN;<circle> 0033;;3;3;N;;;;;
+2463;CIRCLED DIGIT FOUR;No;0;EN;<circle> 0034;;4;4;N;;;;;
+2464;CIRCLED DIGIT FIVE;No;0;EN;<circle> 0035;;5;5;N;;;;;
+2465;CIRCLED DIGIT SIX;No;0;EN;<circle> 0036;;6;6;N;;;;;
+2466;CIRCLED DIGIT SEVEN;No;0;EN;<circle> 0037;;7;7;N;;;;;
+2467;CIRCLED DIGIT EIGHT;No;0;EN;<circle> 0038;;8;8;N;;;;;
+2468;CIRCLED DIGIT NINE;No;0;EN;<circle> 0039;;9;9;N;;;;;
+2469;CIRCLED NUMBER TEN;No;0;EN;<circle> 0031 0030;;;10;N;;;;;
+246A;CIRCLED NUMBER ELEVEN;No;0;EN;<circle> 0031 0031;;;11;N;;;;;
+246B;CIRCLED NUMBER TWELVE;No;0;EN;<circle> 0031 0032;;;12;N;;;;;
+246C;CIRCLED NUMBER THIRTEEN;No;0;EN;<circle> 0031 0033;;;13;N;;;;;
+246D;CIRCLED NUMBER FOURTEEN;No;0;EN;<circle> 0031 0034;;;14;N;;;;;
+246E;CIRCLED NUMBER FIFTEEN;No;0;EN;<circle> 0031 0035;;;15;N;;;;;
+246F;CIRCLED NUMBER SIXTEEN;No;0;EN;<circle> 0031 0036;;;16;N;;;;;
+2470;CIRCLED NUMBER SEVENTEEN;No;0;EN;<circle> 0031 0037;;;17;N;;;;;
+2471;CIRCLED NUMBER EIGHTEEN;No;0;EN;<circle> 0031 0038;;;18;N;;;;;
+2472;CIRCLED NUMBER NINETEEN;No;0;EN;<circle> 0031 0039;;;19;N;;;;;
+2473;CIRCLED NUMBER TWENTY;No;0;EN;<circle> 0032 0030;;;20;N;;;;;
+2474;PARENTHESIZED DIGIT ONE;No;0;EN;<compat> 0028 0031 0029;;1;1;N;;;;;
+2475;PARENTHESIZED DIGIT TWO;No;0;EN;<compat> 0028 0032 0029;;2;2;N;;;;;
+2476;PARENTHESIZED DIGIT THREE;No;0;EN;<compat> 0028 0033 0029;;3;3;N;;;;;
+2477;PARENTHESIZED DIGIT FOUR;No;0;EN;<compat> 0028 0034 0029;;4;4;N;;;;;
+2478;PARENTHESIZED DIGIT FIVE;No;0;EN;<compat> 0028 0035 0029;;5;5;N;;;;;
+2479;PARENTHESIZED DIGIT SIX;No;0;EN;<compat> 0028 0036 0029;;6;6;N;;;;;
+247A;PARENTHESIZED DIGIT SEVEN;No;0;EN;<compat> 0028 0037 0029;;7;7;N;;;;;
+247B;PARENTHESIZED DIGIT EIGHT;No;0;EN;<compat> 0028 0038 0029;;8;8;N;;;;;
+247C;PARENTHESIZED DIGIT NINE;No;0;EN;<compat> 0028 0039 0029;;9;9;N;;;;;
+247D;PARENTHESIZED NUMBER TEN;No;0;EN;<compat> 0028 0031 0030 0029;;;10;N;;;;;
+247E;PARENTHESIZED NUMBER ELEVEN;No;0;EN;<compat> 0028 0031 0031 0029;;;11;N;;;;;
+247F;PARENTHESIZED NUMBER TWELVE;No;0;EN;<compat> 0028 0031 0032 0029;;;12;N;;;;;
+2480;PARENTHESIZED NUMBER THIRTEEN;No;0;EN;<compat> 0028 0031 0033 0029;;;13;N;;;;;
+2481;PARENTHESIZED NUMBER FOURTEEN;No;0;EN;<compat> 0028 0031 0034 0029;;;14;N;;;;;
+2482;PARENTHESIZED NUMBER FIFTEEN;No;0;EN;<compat> 0028 0031 0035 0029;;;15;N;;;;;
+2483;PARENTHESIZED NUMBER SIXTEEN;No;0;EN;<compat> 0028 0031 0036 0029;;;16;N;;;;;
+2484;PARENTHESIZED NUMBER SEVENTEEN;No;0;EN;<compat> 0028 0031 0037 0029;;;17;N;;;;;
+2485;PARENTHESIZED NUMBER EIGHTEEN;No;0;EN;<compat> 0028 0031 0038 0029;;;18;N;;;;;
+2486;PARENTHESIZED NUMBER NINETEEN;No;0;EN;<compat> 0028 0031 0039 0029;;;19;N;;;;;
+2487;PARENTHESIZED NUMBER TWENTY;No;0;EN;<compat> 0028 0032 0030 0029;;;20;N;;;;;
+2488;DIGIT ONE FULL STOP;No;0;EN;<compat> 0031 002E;;1;1;N;DIGIT ONE PERIOD;;;;
+2489;DIGIT TWO FULL STOP;No;0;EN;<compat> 0032 002E;;2;2;N;DIGIT TWO PERIOD;;;;
+248A;DIGIT THREE FULL STOP;No;0;EN;<compat> 0033 002E;;3;3;N;DIGIT THREE PERIOD;;;;
+248B;DIGIT FOUR FULL STOP;No;0;EN;<compat> 0034 002E;;4;4;N;DIGIT FOUR PERIOD;;;;
+248C;DIGIT FIVE FULL STOP;No;0;EN;<compat> 0035 002E;;5;5;N;DIGIT FIVE PERIOD;;;;
+248D;DIGIT SIX FULL STOP;No;0;EN;<compat> 0036 002E;;6;6;N;DIGIT SIX PERIOD;;;;
+248E;DIGIT SEVEN FULL STOP;No;0;EN;<compat> 0037 002E;;7;7;N;DIGIT SEVEN PERIOD;;;;
+248F;DIGIT EIGHT FULL STOP;No;0;EN;<compat> 0038 002E;;8;8;N;DIGIT EIGHT PERIOD;;;;
+2490;DIGIT NINE FULL STOP;No;0;EN;<compat> 0039 002E;;9;9;N;DIGIT NINE PERIOD;;;;
+2491;NUMBER TEN FULL STOP;No;0;EN;<compat> 0031 0030 002E;;;10;N;NUMBER TEN PERIOD;;;;
+2492;NUMBER ELEVEN FULL STOP;No;0;EN;<compat> 0031 0031 002E;;;11;N;NUMBER ELEVEN PERIOD;;;;
+2493;NUMBER TWELVE FULL STOP;No;0;EN;<compat> 0031 0032 002E;;;12;N;NUMBER TWELVE PERIOD;;;;
+2494;NUMBER THIRTEEN FULL STOP;No;0;EN;<compat> 0031 0033 002E;;;13;N;NUMBER THIRTEEN PERIOD;;;;
+2495;NUMBER FOURTEEN FULL STOP;No;0;EN;<compat> 0031 0034 002E;;;14;N;NUMBER FOURTEEN PERIOD;;;;
+2496;NUMBER FIFTEEN FULL STOP;No;0;EN;<compat> 0031 0035 002E;;;15;N;NUMBER FIFTEEN PERIOD;;;;
+2497;NUMBER SIXTEEN FULL STOP;No;0;EN;<compat> 0031 0036 002E;;;16;N;NUMBER SIXTEEN PERIOD;;;;
+2498;NUMBER SEVENTEEN FULL STOP;No;0;EN;<compat> 0031 0037 002E;;;17;N;NUMBER SEVENTEEN PERIOD;;;;
+2499;NUMBER EIGHTEEN FULL STOP;No;0;EN;<compat> 0031 0038 002E;;;18;N;NUMBER EIGHTEEN PERIOD;;;;
+249A;NUMBER NINETEEN FULL STOP;No;0;EN;<compat> 0031 0039 002E;;;19;N;NUMBER NINETEEN PERIOD;;;;
+249B;NUMBER TWENTY FULL STOP;No;0;EN;<compat> 0032 0030 002E;;;20;N;NUMBER TWENTY PERIOD;;;;
+249C;PARENTHESIZED LATIN SMALL LETTER A;So;0;L;<compat> 0028 0061 0029;;;;N;;;;;
+249D;PARENTHESIZED LATIN SMALL LETTER B;So;0;L;<compat> 0028 0062 0029;;;;N;;;;;
+249E;PARENTHESIZED LATIN SMALL LETTER C;So;0;L;<compat> 0028 0063 0029;;;;N;;;;;
+249F;PARENTHESIZED LATIN SMALL LETTER D;So;0;L;<compat> 0028 0064 0029;;;;N;;;;;
+24A0;PARENTHESIZED LATIN SMALL LETTER E;So;0;L;<compat> 0028 0065 0029;;;;N;;;;;
+24A1;PARENTHESIZED LATIN SMALL LETTER F;So;0;L;<compat> 0028 0066 0029;;;;N;;;;;
+24A2;PARENTHESIZED LATIN SMALL LETTER G;So;0;L;<compat> 0028 0067 0029;;;;N;;;;;
+24A3;PARENTHESIZED LATIN SMALL LETTER H;So;0;L;<compat> 0028 0068 0029;;;;N;;;;;
+24A4;PARENTHESIZED LATIN SMALL LETTER I;So;0;L;<compat> 0028 0069 0029;;;;N;;;;;
+24A5;PARENTHESIZED LATIN SMALL LETTER J;So;0;L;<compat> 0028 006A 0029;;;;N;;;;;
+24A6;PARENTHESIZED LATIN SMALL LETTER K;So;0;L;<compat> 0028 006B 0029;;;;N;;;;;
+24A7;PARENTHESIZED LATIN SMALL LETTER L;So;0;L;<compat> 0028 006C 0029;;;;N;;;;;
+24A8;PARENTHESIZED LATIN SMALL LETTER M;So;0;L;<compat> 0028 006D 0029;;;;N;;;;;
+24A9;PARENTHESIZED LATIN SMALL LETTER N;So;0;L;<compat> 0028 006E 0029;;;;N;;;;;
+24AA;PARENTHESIZED LATIN SMALL LETTER O;So;0;L;<compat> 0028 006F 0029;;;;N;;;;;
+24AB;PARENTHESIZED LATIN SMALL LETTER P;So;0;L;<compat> 0028 0070 0029;;;;N;;;;;
+24AC;PARENTHESIZED LATIN SMALL LETTER Q;So;0;L;<compat> 0028 0071 0029;;;;N;;;;;
+24AD;PARENTHESIZED LATIN SMALL LETTER R;So;0;L;<compat> 0028 0072 0029;;;;N;;;;;
+24AE;PARENTHESIZED LATIN SMALL LETTER S;So;0;L;<compat> 0028 0073 0029;;;;N;;;;;
+24AF;PARENTHESIZED LATIN SMALL LETTER T;So;0;L;<compat> 0028 0074 0029;;;;N;;;;;
+24B0;PARENTHESIZED LATIN SMALL LETTER U;So;0;L;<compat> 0028 0075 0029;;;;N;;;;;
+24B1;PARENTHESIZED LATIN SMALL LETTER V;So;0;L;<compat> 0028 0076 0029;;;;N;;;;;
+24B2;PARENTHESIZED LATIN SMALL LETTER W;So;0;L;<compat> 0028 0077 0029;;;;N;;;;;
+24B3;PARENTHESIZED LATIN SMALL LETTER X;So;0;L;<compat> 0028 0078 0029;;;;N;;;;;
+24B4;PARENTHESIZED LATIN SMALL LETTER Y;So;0;L;<compat> 0028 0079 0029;;;;N;;;;;
+24B5;PARENTHESIZED LATIN SMALL LETTER Z;So;0;L;<compat> 0028 007A 0029;;;;N;;;;;
+24B6;CIRCLED LATIN CAPITAL LETTER A;So;0;L;<circle> 0041;;;;N;;;;24D0;
+24B7;CIRCLED LATIN CAPITAL LETTER B;So;0;L;<circle> 0042;;;;N;;;;24D1;
+24B8;CIRCLED LATIN CAPITAL LETTER C;So;0;L;<circle> 0043;;;;N;;;;24D2;
+24B9;CIRCLED LATIN CAPITAL LETTER D;So;0;L;<circle> 0044;;;;N;;;;24D3;
+24BA;CIRCLED LATIN CAPITAL LETTER E;So;0;L;<circle> 0045;;;;N;;;;24D4;
+24BB;CIRCLED LATIN CAPITAL LETTER F;So;0;L;<circle> 0046;;;;N;;;;24D5;
+24BC;CIRCLED LATIN CAPITAL LETTER G;So;0;L;<circle> 0047;;;;N;;;;24D6;
+24BD;CIRCLED LATIN CAPITAL LETTER H;So;0;L;<circle> 0048;;;;N;;;;24D7;
+24BE;CIRCLED LATIN CAPITAL LETTER I;So;0;L;<circle> 0049;;;;N;;;;24D8;
+24BF;CIRCLED LATIN CAPITAL LETTER J;So;0;L;<circle> 004A;;;;N;;;;24D9;
+24C0;CIRCLED LATIN CAPITAL LETTER K;So;0;L;<circle> 004B;;;;N;;;;24DA;
+24C1;CIRCLED LATIN CAPITAL LETTER L;So;0;L;<circle> 004C;;;;N;;;;24DB;
+24C2;CIRCLED LATIN CAPITAL LETTER M;So;0;L;<circle> 004D;;;;N;;;;24DC;
+24C3;CIRCLED LATIN CAPITAL LETTER N;So;0;L;<circle> 004E;;;;N;;;;24DD;
+24C4;CIRCLED LATIN CAPITAL LETTER O;So;0;L;<circle> 004F;;;;N;;;;24DE;
+24C5;CIRCLED LATIN CAPITAL LETTER P;So;0;L;<circle> 0050;;;;N;;;;24DF;
+24C6;CIRCLED LATIN CAPITAL LETTER Q;So;0;L;<circle> 0051;;;;N;;;;24E0;
+24C7;CIRCLED LATIN CAPITAL LETTER R;So;0;L;<circle> 0052;;;;N;;;;24E1;
+24C8;CIRCLED LATIN CAPITAL LETTER S;So;0;L;<circle> 0053;;;;N;;;;24E2;
+24C9;CIRCLED LATIN CAPITAL LETTER T;So;0;L;<circle> 0054;;;;N;;;;24E3;
+24CA;CIRCLED LATIN CAPITAL LETTER U;So;0;L;<circle> 0055;;;;N;;;;24E4;
+24CB;CIRCLED LATIN CAPITAL LETTER V;So;0;L;<circle> 0056;;;;N;;;;24E5;
+24CC;CIRCLED LATIN CAPITAL LETTER W;So;0;L;<circle> 0057;;;;N;;;;24E6;
+24CD;CIRCLED LATIN CAPITAL LETTER X;So;0;L;<circle> 0058;;;;N;;;;24E7;
+24CE;CIRCLED LATIN CAPITAL LETTER Y;So;0;L;<circle> 0059;;;;N;;;;24E8;
+24CF;CIRCLED LATIN CAPITAL LETTER Z;So;0;L;<circle> 005A;;;;N;;;;24E9;
+24D0;CIRCLED LATIN SMALL LETTER A;So;0;L;<circle> 0061;;;;N;;;24B6;;24B6
+24D1;CIRCLED LATIN SMALL LETTER B;So;0;L;<circle> 0062;;;;N;;;24B7;;24B7
+24D2;CIRCLED LATIN SMALL LETTER C;So;0;L;<circle> 0063;;;;N;;;24B8;;24B8
+24D3;CIRCLED LATIN SMALL LETTER D;So;0;L;<circle> 0064;;;;N;;;24B9;;24B9
+24D4;CIRCLED LATIN SMALL LETTER E;So;0;L;<circle> 0065;;;;N;;;24BA;;24BA
+24D5;CIRCLED LATIN SMALL LETTER F;So;0;L;<circle> 0066;;;;N;;;24BB;;24BB
+24D6;CIRCLED LATIN SMALL LETTER G;So;0;L;<circle> 0067;;;;N;;;24BC;;24BC
+24D7;CIRCLED LATIN SMALL LETTER H;So;0;L;<circle> 0068;;;;N;;;24BD;;24BD
+24D8;CIRCLED LATIN SMALL LETTER I;So;0;L;<circle> 0069;;;;N;;;24BE;;24BE
+24D9;CIRCLED LATIN SMALL LETTER J;So;0;L;<circle> 006A;;;;N;;;24BF;;24BF
+24DA;CIRCLED LATIN SMALL LETTER K;So;0;L;<circle> 006B;;;;N;;;24C0;;24C0
+24DB;CIRCLED LATIN SMALL LETTER L;So;0;L;<circle> 006C;;;;N;;;24C1;;24C1
+24DC;CIRCLED LATIN SMALL LETTER M;So;0;L;<circle> 006D;;;;N;;;24C2;;24C2
+24DD;CIRCLED LATIN SMALL LETTER N;So;0;L;<circle> 006E;;;;N;;;24C3;;24C3
+24DE;CIRCLED LATIN SMALL LETTER O;So;0;L;<circle> 006F;;;;N;;;24C4;;24C4
+24DF;CIRCLED LATIN SMALL LETTER P;So;0;L;<circle> 0070;;;;N;;;24C5;;24C5
+24E0;CIRCLED LATIN SMALL LETTER Q;So;0;L;<circle> 0071;;;;N;;;24C6;;24C6
+24E1;CIRCLED LATIN SMALL LETTER R;So;0;L;<circle> 0072;;;;N;;;24C7;;24C7
+24E2;CIRCLED LATIN SMALL LETTER S;So;0;L;<circle> 0073;;;;N;;;24C8;;24C8
+24E3;CIRCLED LATIN SMALL LETTER T;So;0;L;<circle> 0074;;;;N;;;24C9;;24C9
+24E4;CIRCLED LATIN SMALL LETTER U;So;0;L;<circle> 0075;;;;N;;;24CA;;24CA
+24E5;CIRCLED LATIN SMALL LETTER V;So;0;L;<circle> 0076;;;;N;;;24CB;;24CB
+24E6;CIRCLED LATIN SMALL LETTER W;So;0;L;<circle> 0077;;;;N;;;24CC;;24CC
+24E7;CIRCLED LATIN SMALL LETTER X;So;0;L;<circle> 0078;;;;N;;;24CD;;24CD
+24E8;CIRCLED LATIN SMALL LETTER Y;So;0;L;<circle> 0079;;;;N;;;24CE;;24CE
+24E9;CIRCLED LATIN SMALL LETTER Z;So;0;L;<circle> 007A;;;;N;;;24CF;;24CF
+24EA;CIRCLED DIGIT ZERO;No;0;EN;<circle> 0030;;0;0;N;;;;;
+2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;;
+2501;BOX DRAWINGS HEAVY HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY HORIZONTAL;;;;
+2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;;
+2503;BOX DRAWINGS HEAVY VERTICAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL;;;;
+2504;BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH HORIZONTAL;;;;
+2505;BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH HORIZONTAL;;;;
+2506;BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT TRIPLE DASH VERTICAL;;;;
+2507;BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY TRIPLE DASH VERTICAL;;;;
+2508;BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH HORIZONTAL;;;;
+2509;BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH HORIZONTAL;;;;
+250A;BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT QUADRUPLE DASH VERTICAL;;;;
+250B;BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY QUADRUPLE DASH VERTICAL;;;;
+250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;;
+250D;BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT HEAVY;;;;
+250E;BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT LIGHT;;;;
+250F;BOX DRAWINGS HEAVY DOWN AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND RIGHT;;;;
+2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;;
+2511;BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT HEAVY;;;;
+2512;BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT LIGHT;;;;
+2513;BOX DRAWINGS HEAVY DOWN AND LEFT;So;0;ON;;;;;N;FORMS HEAVY DOWN AND LEFT;;;;
+2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;;
+2515;BOX DRAWINGS UP LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT HEAVY;;;;
+2516;BOX DRAWINGS UP HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT LIGHT;;;;
+2517;BOX DRAWINGS HEAVY UP AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY UP AND RIGHT;;;;
+2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;;
+2519;BOX DRAWINGS UP LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT HEAVY;;;;
+251A;BOX DRAWINGS UP HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT LIGHT;;;;
+251B;BOX DRAWINGS HEAVY UP AND LEFT;So;0;ON;;;;;N;FORMS HEAVY UP AND LEFT;;;;
+251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;;
+251D;BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND RIGHT HEAVY;;;;
+251E;BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND RIGHT DOWN LIGHT;;;;
+251F;BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2520;BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND RIGHT LIGHT;;;;
+2521;BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND RIGHT UP HEAVY;;;;
+2522;BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND RIGHT DOWN HEAVY;;;;
+2523;BOX DRAWINGS HEAVY VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND RIGHT;;;;
+2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;;
+2525;BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND LEFT HEAVY;;;;
+2526;BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND LEFT DOWN LIGHT;;;;
+2527;BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND LEFT UP LIGHT;;;;
+2528;BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND LEFT LIGHT;;;;
+2529;BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND LEFT UP HEAVY;;;;
+252A;BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND LEFT DOWN HEAVY;;;;
+252B;BOX DRAWINGS HEAVY VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND LEFT;;;;
+252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;;
+252D;BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT DOWN LIGHT;;;;
+252E;BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT DOWN LIGHT;;;;
+252F;BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND HORIZONTAL HEAVY;;;;
+2530;BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND HORIZONTAL LIGHT;;;;
+2531;BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT DOWN HEAVY;;;;
+2532;BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT DOWN HEAVY;;;;
+2533;BOX DRAWINGS HEAVY DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOWN AND HORIZONTAL;;;;
+2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;;
+2535;BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT UP LIGHT;;;;
+2536;BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT UP LIGHT;;;;
+2537;BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND HORIZONTAL HEAVY;;;;
+2538;BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND HORIZONTAL LIGHT;;;;
+2539;BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT UP HEAVY;;;;
+253A;BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT UP HEAVY;;;;
+253B;BOX DRAWINGS HEAVY UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY UP AND HORIZONTAL;;;;
+253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;;
+253D;BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS LEFT HEAVY AND RIGHT VERTICAL LIGHT;;;;
+253E;BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT;So;0;ON;;;;;N;FORMS RIGHT HEAVY AND LEFT VERTICAL LIGHT;;;;
+253F;BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS VERTICAL LIGHT AND HORIZONTAL HEAVY;;;;
+2540;BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS UP HEAVY AND DOWN HORIZONTAL LIGHT;;;;
+2541;BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS DOWN HEAVY AND UP HORIZONTAL LIGHT;;;;
+2542;BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT;So;0;ON;;;;;N;FORMS VERTICAL HEAVY AND HORIZONTAL LIGHT;;;;
+2543;BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT;So;0;ON;;;;;N;FORMS LEFT UP HEAVY AND RIGHT DOWN LIGHT;;;;
+2544;BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT;So;0;ON;;;;;N;FORMS RIGHT UP HEAVY AND LEFT DOWN LIGHT;;;;
+2545;BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT;So;0;ON;;;;;N;FORMS LEFT DOWN HEAVY AND RIGHT UP LIGHT;;;;
+2546;BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT;So;0;ON;;;;;N;FORMS RIGHT DOWN HEAVY AND LEFT UP LIGHT;;;;
+2547;BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS DOWN LIGHT AND UP HORIZONTAL HEAVY;;;;
+2548;BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY;So;0;ON;;;;;N;FORMS UP LIGHT AND DOWN HORIZONTAL HEAVY;;;;
+2549;BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS RIGHT LIGHT AND LEFT VERTICAL HEAVY;;;;
+254A;BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY;So;0;ON;;;;;N;FORMS LEFT LIGHT AND RIGHT VERTICAL HEAVY;;;;
+254B;BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY VERTICAL AND HORIZONTAL;;;;
+254C;BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH HORIZONTAL;;;;
+254D;BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH HORIZONTAL;;;;
+254E;BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS LIGHT DOUBLE DASH VERTICAL;;;;
+254F;BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL;So;0;ON;;;;;N;FORMS HEAVY DOUBLE DASH VERTICAL;;;;
+2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;;
+2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;;
+2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;;
+2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;;
+2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;;
+2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;;
+2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;;
+2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;;
+2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;;
+2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;;
+255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;;
+255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;;
+255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;;
+255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;;
+255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;;
+255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;;
+2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;;
+2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;;
+2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;;
+2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;;
+2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;;
+2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;;
+2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;;
+2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;;
+2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;;
+2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;;
+256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;;
+256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;;
+256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;;
+256D;BOX DRAWINGS LIGHT ARC DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND RIGHT;;;;
+256E;BOX DRAWINGS LIGHT ARC DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC DOWN AND LEFT;;;;
+256F;BOX DRAWINGS LIGHT ARC UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND LEFT;;;;
+2570;BOX DRAWINGS LIGHT ARC UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT ARC UP AND RIGHT;;;;
+2571;BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT;;;;
+2572;BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT;;;;
+2573;BOX DRAWINGS LIGHT DIAGONAL CROSS;So;0;ON;;;;;N;FORMS LIGHT DIAGONAL CROSS;;;;
+2574;BOX DRAWINGS LIGHT LEFT;So;0;ON;;;;;N;FORMS LIGHT LEFT;;;;
+2575;BOX DRAWINGS LIGHT UP;So;0;ON;;;;;N;FORMS LIGHT UP;;;;
+2576;BOX DRAWINGS LIGHT RIGHT;So;0;ON;;;;;N;FORMS LIGHT RIGHT;;;;
+2577;BOX DRAWINGS LIGHT DOWN;So;0;ON;;;;;N;FORMS LIGHT DOWN;;;;
+2578;BOX DRAWINGS HEAVY LEFT;So;0;ON;;;;;N;FORMS HEAVY LEFT;;;;
+2579;BOX DRAWINGS HEAVY UP;So;0;ON;;;;;N;FORMS HEAVY UP;;;;
+257A;BOX DRAWINGS HEAVY RIGHT;So;0;ON;;;;;N;FORMS HEAVY RIGHT;;;;
+257B;BOX DRAWINGS HEAVY DOWN;So;0;ON;;;;;N;FORMS HEAVY DOWN;;;;
+257C;BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT;So;0;ON;;;;;N;FORMS LIGHT LEFT AND HEAVY RIGHT;;;;
+257D;BOX DRAWINGS LIGHT UP AND HEAVY DOWN;So;0;ON;;;;;N;FORMS LIGHT UP AND HEAVY DOWN;;;;
+257E;BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT;So;0;ON;;;;;N;FORMS HEAVY LEFT AND LIGHT RIGHT;;;;
+257F;BOX DRAWINGS HEAVY UP AND LIGHT DOWN;So;0;ON;;;;;N;FORMS HEAVY UP AND LIGHT DOWN;;;;
+2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2581;LOWER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2582;LOWER ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+2583;LOWER THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2585;LOWER FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2586;LOWER THREE QUARTERS BLOCK;So;0;ON;;;;;N;LOWER THREE QUARTER BLOCK;;;;
+2587;LOWER SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+2588;FULL BLOCK;So;0;ON;;;;;N;;;;;
+2589;LEFT SEVEN EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258A;LEFT THREE QUARTERS BLOCK;So;0;ON;;;;;N;LEFT THREE QUARTER BLOCK;;;;
+258B;LEFT FIVE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;;
+258D;LEFT THREE EIGHTHS BLOCK;So;0;ON;;;;;N;;;;;
+258E;LEFT ONE QUARTER BLOCK;So;0;ON;;;;;N;;;;;
+258F;LEFT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
+2591;LIGHT SHADE;So;0;ON;;;;;N;;;;;
+2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+2593;DARK SHADE;So;0;ON;;;;;N;;;;;
+2594;UPPER ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+2595;RIGHT ONE EIGHTH BLOCK;So;0;ON;;;;;N;;;;;
+25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;;
+25A1;WHITE SQUARE;So;0;ON;;;;;N;;;;;
+25A2;WHITE SQUARE WITH ROUNDED CORNERS;So;0;ON;;;;;N;;;;;
+25A3;WHITE SQUARE CONTAINING BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25A4;SQUARE WITH HORIZONTAL FILL;So;0;ON;;;;;N;;;;;
+25A5;SQUARE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25A6;SQUARE WITH ORTHOGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25A7;SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL;So;0;ON;;;;;N;;;;;
+25A8;SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL;So;0;ON;;;;;N;;;;;
+25A9;SQUARE WITH DIAGONAL CROSSHATCH FILL;So;0;ON;;;;;N;;;;;
+25AA;BLACK SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AB;WHITE SMALL SQUARE;So;0;ON;;;;;N;;;;;
+25AC;BLACK RECTANGLE;So;0;ON;;;;;N;;;;;
+25AD;WHITE RECTANGLE;So;0;ON;;;;;N;;;;;
+25AE;BLACK VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25AF;WHITE VERTICAL RECTANGLE;So;0;ON;;;;;N;;;;;
+25B0;BLACK PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B1;WHITE PARALLELOGRAM;So;0;ON;;;;;N;;;;;
+25B2;BLACK UP-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING TRIANGLE;;;;
+25B3;WHITE UP-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE;;;;
+25B4;BLACK UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK UP POINTING SMALL TRIANGLE;;;;
+25B5;WHITE UP-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE UP POINTING SMALL TRIANGLE;;;;
+25B6;BLACK RIGHT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING TRIANGLE;;;;
+25B7;WHITE RIGHT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE RIGHT POINTING TRIANGLE;;;;
+25B8;BLACK RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK RIGHT POINTING SMALL TRIANGLE;;;;
+25B9;WHITE RIGHT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE RIGHT POINTING SMALL TRIANGLE;;;;
+25BA;BLACK RIGHT-POINTING POINTER;So;0;ON;;;;;N;BLACK RIGHT POINTING POINTER;;;;
+25BB;WHITE RIGHT-POINTING POINTER;So;0;ON;;;;;N;WHITE RIGHT POINTING POINTER;;;;
+25BC;BLACK DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING TRIANGLE;;;;
+25BD;WHITE DOWN-POINTING TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING TRIANGLE;;;;
+25BE;BLACK DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK DOWN POINTING SMALL TRIANGLE;;;;
+25BF;WHITE DOWN-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE DOWN POINTING SMALL TRIANGLE;;;;
+25C0;BLACK LEFT-POINTING TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING TRIANGLE;;;;
+25C1;WHITE LEFT-POINTING TRIANGLE;Sm;0;ON;;;;;N;WHITE LEFT POINTING TRIANGLE;;;;
+25C2;BLACK LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;BLACK LEFT POINTING SMALL TRIANGLE;;;;
+25C3;WHITE LEFT-POINTING SMALL TRIANGLE;So;0;ON;;;;;N;WHITE LEFT POINTING SMALL TRIANGLE;;;;
+25C4;BLACK LEFT-POINTING POINTER;So;0;ON;;;;;N;BLACK LEFT POINTING POINTER;;;;
+25C5;WHITE LEFT-POINTING POINTER;So;0;ON;;;;;N;WHITE LEFT POINTING POINTER;;;;
+25C6;BLACK DIAMOND;So;0;ON;;;;;N;;;;;
+25C7;WHITE DIAMOND;So;0;ON;;;;;N;;;;;
+25C8;WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND;So;0;ON;;;;;N;;;;;
+25C9;FISHEYE;So;0;ON;;;;;N;;;;;
+25CA;LOZENGE;So;0;ON;;;;;N;;;;;
+25CB;WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25CC;DOTTED CIRCLE;So;0;ON;;;;;N;;;;;
+25CD;CIRCLE WITH VERTICAL FILL;So;0;ON;;;;;N;;;;;
+25CE;BULLSEYE;So;0;ON;;;;;N;;;;;
+25CF;BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D0;CIRCLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D1;CIRCLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25D2;CIRCLE WITH LOWER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D3;CIRCLE WITH UPPER HALF BLACK;So;0;ON;;;;;N;;;;;
+25D4;CIRCLE WITH UPPER RIGHT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D5;CIRCLE WITH ALL BUT UPPER LEFT QUADRANT BLACK;So;0;ON;;;;;N;;;;;
+25D6;LEFT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D7;RIGHT HALF BLACK CIRCLE;So;0;ON;;;;;N;;;;;
+25D8;INVERSE BULLET;So;0;ON;;;;;N;;;;;
+25D9;INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DA;UPPER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DB;LOWER HALF INVERSE WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+25DC;UPPER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DD;UPPER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DE;LOWER RIGHT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25DF;LOWER LEFT QUADRANT CIRCULAR ARC;So;0;ON;;;;;N;;;;;
+25E0;UPPER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E1;LOWER HALF CIRCLE;So;0;ON;;;;;N;;;;;
+25E2;BLACK LOWER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E3;BLACK LOWER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E4;BLACK UPPER LEFT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E5;BLACK UPPER RIGHT TRIANGLE;So;0;ON;;;;;N;;;;;
+25E6;WHITE BULLET;So;0;ON;;;;;N;;;;;
+25E7;SQUARE WITH LEFT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E8;SQUARE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;;;;;
+25E9;SQUARE WITH UPPER LEFT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EA;SQUARE WITH LOWER RIGHT DIAGONAL HALF BLACK;So;0;ON;;;;;N;;;;;
+25EB;WHITE SQUARE WITH VERTICAL BISECTING LINE;So;0;ON;;;;;N;;;;;
+25EC;WHITE UP-POINTING TRIANGLE WITH DOT;So;0;ON;;;;;N;WHITE UP POINTING TRIANGLE WITH DOT;;;;
+25ED;UP-POINTING TRIANGLE WITH LEFT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH LEFT HALF BLACK;;;;
+25EE;UP-POINTING TRIANGLE WITH RIGHT HALF BLACK;So;0;ON;;;;;N;UP POINTING TRIANGLE WITH RIGHT HALF BLACK;;;;
+25EF;LARGE CIRCLE;So;0;ON;;;;;N;;;;;
+25F0;WHITE SQUARE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F1;WHITE SQUARE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F2;WHITE SQUARE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F3;WHITE SQUARE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F4;WHITE CIRCLE WITH UPPER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F5;WHITE CIRCLE WITH LOWER LEFT QUADRANT;So;0;ON;;;;;N;;;;;
+25F6;WHITE CIRCLE WITH LOWER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+25F7;WHITE CIRCLE WITH UPPER RIGHT QUADRANT;So;0;ON;;;;;N;;;;;
+2600;BLACK SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+2601;CLOUD;So;0;ON;;;;;N;;;;;
+2602;UMBRELLA;So;0;ON;;;;;N;;;;;
+2603;SNOWMAN;So;0;ON;;;;;N;;;;;
+2604;COMET;So;0;ON;;;;;N;;;;;
+2605;BLACK STAR;So;0;ON;;;;;N;;;;;
+2606;WHITE STAR;So;0;ON;;;;;N;;;;;
+2607;LIGHTNING;So;0;ON;;;;;N;;;;;
+2608;THUNDERSTORM;So;0;ON;;;;;N;;;;;
+2609;SUN;So;0;ON;;;;;N;;;;;
+260A;ASCENDING NODE;So;0;ON;;;;;N;;;;;
+260B;DESCENDING NODE;So;0;ON;;;;;N;;;;;
+260C;CONJUNCTION;So;0;ON;;;;;N;;;;;
+260D;OPPOSITION;So;0;ON;;;;;N;;;;;
+260E;BLACK TELEPHONE;So;0;ON;;;;;N;;;;;
+260F;WHITE TELEPHONE;So;0;ON;;;;;N;;;;;
+2610;BALLOT BOX;So;0;ON;;;;;N;;;;;
+2611;BALLOT BOX WITH CHECK;So;0;ON;;;;;N;;;;;
+2612;BALLOT BOX WITH X;So;0;ON;;;;;N;;;;;
+2613;SALTIRE;So;0;ON;;;;;N;;;;;
+2619;REVERSED ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+261A;BLACK LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261B;BLACK RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261C;WHITE LEFT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261D;WHITE UP POINTING INDEX;So;0;ON;;;;;N;;;;;
+261E;WHITE RIGHT POINTING INDEX;So;0;ON;;;;;N;;;;;
+261F;WHITE DOWN POINTING INDEX;So;0;ON;;;;;N;;;;;
+2620;SKULL AND CROSSBONES;So;0;ON;;;;;N;;;;;
+2621;CAUTION SIGN;So;0;ON;;;;;N;;;;;
+2622;RADIOACTIVE SIGN;So;0;ON;;;;;N;;;;;
+2623;BIOHAZARD SIGN;So;0;ON;;;;;N;;;;;
+2624;CADUCEUS;So;0;ON;;;;;N;;;;;
+2625;ANKH;So;0;ON;;;;;N;;;;;
+2626;ORTHODOX CROSS;So;0;ON;;;;;N;;;;;
+2627;CHI RHO;So;0;ON;;;;;N;;;;;
+2628;CROSS OF LORRAINE;So;0;ON;;;;;N;;;;;
+2629;CROSS OF JERUSALEM;So;0;ON;;;;;N;;;;;
+262A;STAR AND CRESCENT;So;0;ON;;;;;N;;;;;
+262B;FARSI SYMBOL;So;0;ON;;;;;N;SYMBOL OF IRAN;;;;
+262C;ADI SHAKTI;So;0;ON;;;;;N;;;;;
+262D;HAMMER AND SICKLE;So;0;ON;;;;;N;;;;;
+262E;PEACE SYMBOL;So;0;ON;;;;;N;;;;;
+262F;YIN YANG;So;0;ON;;;;;N;;;;;
+2630;TRIGRAM FOR HEAVEN;So;0;ON;;;;;N;;;;;
+2631;TRIGRAM FOR LAKE;So;0;ON;;;;;N;;;;;
+2632;TRIGRAM FOR FIRE;So;0;ON;;;;;N;;;;;
+2633;TRIGRAM FOR THUNDER;So;0;ON;;;;;N;;;;;
+2634;TRIGRAM FOR WIND;So;0;ON;;;;;N;;;;;
+2635;TRIGRAM FOR WATER;So;0;ON;;;;;N;;;;;
+2636;TRIGRAM FOR MOUNTAIN;So;0;ON;;;;;N;;;;;
+2637;TRIGRAM FOR EARTH;So;0;ON;;;;;N;;;;;
+2638;WHEEL OF DHARMA;So;0;ON;;;;;N;;;;;
+2639;WHITE FROWNING FACE;So;0;ON;;;;;N;;;;;
+263A;WHITE SMILING FACE;So;0;ON;;;;;N;;;;;
+263B;BLACK SMILING FACE;So;0;ON;;;;;N;;;;;
+263C;WHITE SUN WITH RAYS;So;0;ON;;;;;N;;;;;
+263D;FIRST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263E;LAST QUARTER MOON;So;0;ON;;;;;N;;;;;
+263F;MERCURY;So;0;ON;;;;;N;;;;;
+2640;FEMALE SIGN;So;0;ON;;;;;N;;;;;
+2641;EARTH;So;0;ON;;;;;N;;;;;
+2642;MALE SIGN;So;0;ON;;;;;N;;;;;
+2643;JUPITER;So;0;ON;;;;;N;;;;;
+2644;SATURN;So;0;ON;;;;;N;;;;;
+2645;URANUS;So;0;ON;;;;;N;;;;;
+2646;NEPTUNE;So;0;ON;;;;;N;;;;;
+2647;PLUTO;So;0;ON;;;;;N;;;;;
+2648;ARIES;So;0;ON;;;;;N;;;;;
+2649;TAURUS;So;0;ON;;;;;N;;;;;
+264A;GEMINI;So;0;ON;;;;;N;;;;;
+264B;CANCER;So;0;ON;;;;;N;;;;;
+264C;LEO;So;0;ON;;;;;N;;;;;
+264D;VIRGO;So;0;ON;;;;;N;;;;;
+264E;LIBRA;So;0;ON;;;;;N;;;;;
+264F;SCORPIUS;So;0;ON;;;;;N;;;;;
+2650;SAGITTARIUS;So;0;ON;;;;;N;;;;;
+2651;CAPRICORN;So;0;ON;;;;;N;;;;;
+2652;AQUARIUS;So;0;ON;;;;;N;;;;;
+2653;PISCES;So;0;ON;;;;;N;;;;;
+2654;WHITE CHESS KING;So;0;ON;;;;;N;;;;;
+2655;WHITE CHESS QUEEN;So;0;ON;;;;;N;;;;;
+2656;WHITE CHESS ROOK;So;0;ON;;;;;N;;;;;
+2657;WHITE CHESS BISHOP;So;0;ON;;;;;N;;;;;
+2658;WHITE CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+2659;WHITE CHESS PAWN;So;0;ON;;;;;N;;;;;
+265A;BLACK CHESS KING;So;0;ON;;;;;N;;;;;
+265B;BLACK CHESS QUEEN;So;0;ON;;;;;N;;;;;
+265C;BLACK CHESS ROOK;So;0;ON;;;;;N;;;;;
+265D;BLACK CHESS BISHOP;So;0;ON;;;;;N;;;;;
+265E;BLACK CHESS KNIGHT;So;0;ON;;;;;N;;;;;
+265F;BLACK CHESS PAWN;So;0;ON;;;;;N;;;;;
+2660;BLACK SPADE SUIT;So;0;ON;;;;;N;;;;;
+2661;WHITE HEART SUIT;So;0;ON;;;;;N;;;;;
+2662;WHITE DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2663;BLACK CLUB SUIT;So;0;ON;;;;;N;;;;;
+2664;WHITE SPADE SUIT;So;0;ON;;;;;N;;;;;
+2665;BLACK HEART SUIT;So;0;ON;;;;;N;;;;;
+2666;BLACK DIAMOND SUIT;So;0;ON;;;;;N;;;;;
+2667;WHITE CLUB SUIT;So;0;ON;;;;;N;;;;;
+2668;HOT SPRINGS;So;0;ON;;;;;N;;;;;
+2669;QUARTER NOTE;So;0;ON;;;;;N;;;;;
+266A;EIGHTH NOTE;So;0;ON;;;;;N;;;;;
+266B;BEAMED EIGHTH NOTES;So;0;ON;;;;;N;BARRED EIGHTH NOTES;;;;
+266C;BEAMED SIXTEENTH NOTES;So;0;ON;;;;;N;BARRED SIXTEENTH NOTES;;;;
+266D;MUSIC FLAT SIGN;So;0;ON;;;;;N;FLAT;;;;
+266E;MUSIC NATURAL SIGN;So;0;ON;;;;;N;NATURAL;;;;
+266F;MUSIC SHARP SIGN;Sm;0;ON;;;;;N;SHARP;;;;
+2670;WEST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
+2671;EAST SYRIAC CROSS;So;0;ON;;;;;N;;;;;
+2701;UPPER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2702;BLACK SCISSORS;So;0;ON;;;;;N;;;;;
+2703;LOWER BLADE SCISSORS;So;0;ON;;;;;N;;;;;
+2704;WHITE SCISSORS;So;0;ON;;;;;N;;;;;
+2706;TELEPHONE LOCATION SIGN;So;0;ON;;;;;N;;;;;
+2707;TAPE DRIVE;So;0;ON;;;;;N;;;;;
+2708;AIRPLANE;So;0;ON;;;;;N;;;;;
+2709;ENVELOPE;So;0;ON;;;;;N;;;;;
+270C;VICTORY HAND;So;0;ON;;;;;N;;;;;
+270D;WRITING HAND;So;0;ON;;;;;N;;;;;
+270E;LOWER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+270F;PENCIL;So;0;ON;;;;;N;;;;;
+2710;UPPER RIGHT PENCIL;So;0;ON;;;;;N;;;;;
+2711;WHITE NIB;So;0;ON;;;;;N;;;;;
+2712;BLACK NIB;So;0;ON;;;;;N;;;;;
+2713;CHECK MARK;So;0;ON;;;;;N;;;;;
+2714;HEAVY CHECK MARK;So;0;ON;;;;;N;;;;;
+2715;MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2716;HEAVY MULTIPLICATION X;So;0;ON;;;;;N;;;;;
+2717;BALLOT X;So;0;ON;;;;;N;;;;;
+2718;HEAVY BALLOT X;So;0;ON;;;;;N;;;;;
+2719;OUTLINED GREEK CROSS;So;0;ON;;;;;N;;;;;
+271A;HEAVY GREEK CROSS;So;0;ON;;;;;N;;;;;
+271B;OPEN CENTRE CROSS;So;0;ON;;;;;N;OPEN CENTER CROSS;;;;
+271C;HEAVY OPEN CENTRE CROSS;So;0;ON;;;;;N;HEAVY OPEN CENTER CROSS;;;;
+271D;LATIN CROSS;So;0;ON;;;;;N;;;;;
+271E;SHADOWED WHITE LATIN CROSS;So;0;ON;;;;;N;;;;;
+271F;OUTLINED LATIN CROSS;So;0;ON;;;;;N;;;;;
+2720;MALTESE CROSS;So;0;ON;;;;;N;;;;;
+2721;STAR OF DAVID;So;0;ON;;;;;N;;;;;
+2722;FOUR TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2723;FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2724;HEAVY FOUR BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2725;FOUR CLUB-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2726;BLACK FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2727;WHITE FOUR POINTED STAR;So;0;ON;;;;;N;;;;;
+2729;STRESS OUTLINED WHITE STAR;So;0;ON;;;;;N;;;;;
+272A;CIRCLED WHITE STAR;So;0;ON;;;;;N;;;;;
+272B;OPEN CENTRE BLACK STAR;So;0;ON;;;;;N;OPEN CENTER BLACK STAR;;;;
+272C;BLACK CENTRE WHITE STAR;So;0;ON;;;;;N;BLACK CENTER WHITE STAR;;;;
+272D;OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272E;HEAVY OUTLINED BLACK STAR;So;0;ON;;;;;N;;;;;
+272F;PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2730;SHADOWED WHITE STAR;So;0;ON;;;;;N;;;;;
+2731;HEAVY ASTERISK;So;0;ON;;;;;N;;;;;
+2732;OPEN CENTRE ASTERISK;So;0;ON;;;;;N;OPEN CENTER ASTERISK;;;;
+2733;EIGHT SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+2734;EIGHT POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2735;EIGHT POINTED PINWHEEL STAR;So;0;ON;;;;;N;;;;;
+2736;SIX POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+2737;EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2738;HEAVY EIGHT POINTED RECTILINEAR BLACK STAR;So;0;ON;;;;;N;;;;;
+2739;TWELVE POINTED BLACK STAR;So;0;ON;;;;;N;;;;;
+273A;SIXTEEN POINTED ASTERISK;So;0;ON;;;;;N;;;;;
+273B;TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273C;OPEN CENTRE TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;OPEN CENTER TEARDROP-SPOKED ASTERISK;;;;
+273D;HEAVY TEARDROP-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+273E;SIX PETALLED BLACK AND WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+273F;BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2740;WHITE FLORETTE;So;0;ON;;;;;N;;;;;
+2741;EIGHT PETALLED OUTLINED BLACK FLORETTE;So;0;ON;;;;;N;;;;;
+2742;CIRCLED OPEN CENTRE EIGHT POINTED STAR;So;0;ON;;;;;N;CIRCLED OPEN CENTER EIGHT POINTED STAR;;;;
+2743;HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK;So;0;ON;;;;;N;;;;;
+2744;SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2745;TIGHT TRIFOLIATE SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2746;HEAVY CHEVRON SNOWFLAKE;So;0;ON;;;;;N;;;;;
+2747;SPARKLE;So;0;ON;;;;;N;;;;;
+2748;HEAVY SPARKLE;So;0;ON;;;;;N;;;;;
+2749;BALLOON-SPOKED ASTERISK;So;0;ON;;;;;N;;;;;
+274A;EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274B;HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;So;0;ON;;;;;N;;;;;
+274D;SHADOWED WHITE CIRCLE;So;0;ON;;;;;N;;;;;
+274F;LOWER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2750;UPPER RIGHT DROP-SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2751;LOWER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2752;UPPER RIGHT SHADOWED WHITE SQUARE;So;0;ON;;;;;N;;;;;
+2756;BLACK DIAMOND MINUS WHITE X;So;0;ON;;;;;N;;;;;
+2758;LIGHT VERTICAL BAR;So;0;ON;;;;;N;;;;;
+2759;MEDIUM VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275A;HEAVY VERTICAL BAR;So;0;ON;;;;;N;;;;;
+275B;HEAVY SINGLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275C;HEAVY SINGLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275D;HEAVY DOUBLE TURNED COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+275E;HEAVY DOUBLE COMMA QUOTATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2761;CURVED STEM PARAGRAPH SIGN ORNAMENT;So;0;ON;;;;;N;;;;;
+2762;HEAVY EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2763;HEAVY HEART EXCLAMATION MARK ORNAMENT;So;0;ON;;;;;N;;;;;
+2764;HEAVY BLACK HEART;So;0;ON;;;;;N;;;;;
+2765;ROTATED HEAVY BLACK HEART BULLET;So;0;ON;;;;;N;;;;;
+2766;FLORAL HEART;So;0;ON;;;;;N;;;;;
+2767;ROTATED FLORAL HEART BULLET;So;0;ON;;;;;N;;;;;
+2776;DINGBAT NEGATIVE CIRCLED DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED DIGIT ONE;;;;
+2777;DINGBAT NEGATIVE CIRCLED DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED DIGIT TWO;;;;
+2778;DINGBAT NEGATIVE CIRCLED DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED DIGIT THREE;;;;
+2779;DINGBAT NEGATIVE CIRCLED DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED DIGIT FOUR;;;;
+277A;DINGBAT NEGATIVE CIRCLED DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED DIGIT FIVE;;;;
+277B;DINGBAT NEGATIVE CIRCLED DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED DIGIT SIX;;;;
+277C;DINGBAT NEGATIVE CIRCLED DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED DIGIT SEVEN;;;;
+277D;DINGBAT NEGATIVE CIRCLED DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED DIGIT EIGHT;;;;
+277E;DINGBAT NEGATIVE CIRCLED DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED DIGIT NINE;;;;
+277F;DINGBAT NEGATIVE CIRCLED NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED NUMBER TEN;;;;
+2780;DINGBAT CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;CIRCLED SANS-SERIF DIGIT ONE;;;;
+2781;DINGBAT CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;CIRCLED SANS-SERIF DIGIT TWO;;;;
+2782;DINGBAT CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;CIRCLED SANS-SERIF DIGIT THREE;;;;
+2783;DINGBAT CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;CIRCLED SANS-SERIF DIGIT FOUR;;;;
+2784;DINGBAT CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;CIRCLED SANS-SERIF DIGIT FIVE;;;;
+2785;DINGBAT CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;CIRCLED SANS-SERIF DIGIT SIX;;;;
+2786;DINGBAT CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2787;DINGBAT CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2788;DINGBAT CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;CIRCLED SANS-SERIF DIGIT NINE;;;;
+2789;DINGBAT CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;CIRCLED SANS-SERIF NUMBER TEN;;;;
+278A;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT ONE;No;0;ON;;;1;1;N;INVERSE CIRCLED SANS-SERIF DIGIT ONE;;;;
+278B;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT TWO;No;0;ON;;;2;2;N;INVERSE CIRCLED SANS-SERIF DIGIT TWO;;;;
+278C;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT THREE;No;0;ON;;;3;3;N;INVERSE CIRCLED SANS-SERIF DIGIT THREE;;;;
+278D;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FOUR;No;0;ON;;;4;4;N;INVERSE CIRCLED SANS-SERIF DIGIT FOUR;;;;
+278E;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT FIVE;No;0;ON;;;5;5;N;INVERSE CIRCLED SANS-SERIF DIGIT FIVE;;;;
+278F;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SIX;No;0;ON;;;6;6;N;INVERSE CIRCLED SANS-SERIF DIGIT SIX;;;;
+2790;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT SEVEN;No;0;ON;;;7;7;N;INVERSE CIRCLED SANS-SERIF DIGIT SEVEN;;;;
+2791;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT EIGHT;No;0;ON;;;8;8;N;INVERSE CIRCLED SANS-SERIF DIGIT EIGHT;;;;
+2792;DINGBAT NEGATIVE CIRCLED SANS-SERIF DIGIT NINE;No;0;ON;;;9;9;N;INVERSE CIRCLED SANS-SERIF DIGIT NINE;;;;
+2793;DINGBAT NEGATIVE CIRCLED SANS-SERIF NUMBER TEN;No;0;ON;;;;10;N;INVERSE CIRCLED SANS-SERIF NUMBER TEN;;;;
+2794;HEAVY WIDE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WIDE-HEADED RIGHT ARROW;;;;
+2798;HEAVY SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT ARROW;;;;
+2799;HEAVY RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY RIGHT ARROW;;;;
+279A;HEAVY NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT ARROW;;;;
+279B;DRAFTING POINT RIGHTWARDS ARROW;So;0;ON;;;;;N;DRAFTING POINT RIGHT ARROW;;;;
+279C;HEAVY ROUND-TIPPED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY ROUND-TIPPED RIGHT ARROW;;;;
+279D;TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;TRIANGLE-HEADED RIGHT ARROW;;;;
+279E;HEAVY TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TRIANGLE-HEADED RIGHT ARROW;;;;
+279F;DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A0;HEAVY DASHED TRIANGLE-HEADED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY DASHED TRIANGLE-HEADED RIGHT ARROW;;;;
+27A1;BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK RIGHT ARROW;;;;
+27A2;THREE-D TOP-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D TOP-LIGHTED RIGHT ARROWHEAD;;;;
+27A3;THREE-D BOTTOM-LIGHTED RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;THREE-D BOTTOM-LIGHTED RIGHT ARROWHEAD;;;;
+27A4;BLACK RIGHTWARDS ARROWHEAD;So;0;ON;;;;;N;BLACK RIGHT ARROWHEAD;;;;
+27A5;HEAVY BLACK CURVED DOWNWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED DOWN AND RIGHT ARROW;;;;
+27A6;HEAVY BLACK CURVED UPWARDS AND RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK CURVED UP AND RIGHT ARROW;;;;
+27A7;SQUAT BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;SQUAT BLACK RIGHT ARROW;;;;
+27A8;HEAVY CONCAVE-POINTED BLACK RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY CONCAVE-POINTED BLACK RIGHT ARROW;;;;
+27A9;RIGHT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;RIGHT-SHADED WHITE RIGHT ARROW;;;;
+27AA;LEFT-SHADED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;LEFT-SHADED WHITE RIGHT ARROW;;;;
+27AB;BACK-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;BACK-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AC;FRONT-TILTED SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;FRONT-TILTED SHADOWED WHITE RIGHT ARROW;;;;
+27AD;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AE;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27AF;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED LOWER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B1;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;NOTCHED UPPER RIGHT-SHADOWED WHITE RIGHT ARROW;;;;
+27B2;CIRCLED HEAVY WHITE RIGHTWARDS ARROW;So;0;ON;;;;;N;CIRCLED HEAVY WHITE RIGHT ARROW;;;;
+27B3;WHITE-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;WHITE-FEATHERED RIGHT ARROW;;;;
+27B4;BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B5;BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;BLACK-FEATHERED RIGHT ARROW;;;;
+27B6;BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27B7;HEAVY BLACK-FEATHERED SOUTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED LOWER RIGHT ARROW;;;;
+27B8;HEAVY BLACK-FEATHERED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED RIGHT ARROW;;;;
+27B9;HEAVY BLACK-FEATHERED NORTH EAST ARROW;So;0;ON;;;;;N;HEAVY BLACK-FEATHERED UPPER RIGHT ARROW;;;;
+27BA;TEARDROP-BARBED RIGHTWARDS ARROW;So;0;ON;;;;;N;TEARDROP-BARBED RIGHT ARROW;;;;
+27BB;HEAVY TEARDROP-SHANKED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY TEARDROP-SHANKED RIGHT ARROW;;;;
+27BC;WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;WEDGE-TAILED RIGHT ARROW;;;;
+27BD;HEAVY WEDGE-TAILED RIGHTWARDS ARROW;So;0;ON;;;;;N;HEAVY WEDGE-TAILED RIGHT ARROW;;;;
+27BE;OPEN-OUTLINED RIGHTWARDS ARROW;So;0;ON;;;;;N;OPEN-OUTLINED RIGHT ARROW;;;;
+2800;BRAILLE PATTERN BLANK;So;0;ON;;;;;N;;;;;
+2801;BRAILLE PATTERN DOTS-1;So;0;ON;;;;;N;;;;;
+2802;BRAILLE PATTERN DOTS-2;So;0;ON;;;;;N;;;;;
+2803;BRAILLE PATTERN DOTS-12;So;0;ON;;;;;N;;;;;
+2804;BRAILLE PATTERN DOTS-3;So;0;ON;;;;;N;;;;;
+2805;BRAILLE PATTERN DOTS-13;So;0;ON;;;;;N;;;;;
+2806;BRAILLE PATTERN DOTS-23;So;0;ON;;;;;N;;;;;
+2807;BRAILLE PATTERN DOTS-123;So;0;ON;;;;;N;;;;;
+2808;BRAILLE PATTERN DOTS-4;So;0;ON;;;;;N;;;;;
+2809;BRAILLE PATTERN DOTS-14;So;0;ON;;;;;N;;;;;
+280A;BRAILLE PATTERN DOTS-24;So;0;ON;;;;;N;;;;;
+280B;BRAILLE PATTERN DOTS-124;So;0;ON;;;;;N;;;;;
+280C;BRAILLE PATTERN DOTS-34;So;0;ON;;;;;N;;;;;
+280D;BRAILLE PATTERN DOTS-134;So;0;ON;;;;;N;;;;;
+280E;BRAILLE PATTERN DOTS-234;So;0;ON;;;;;N;;;;;
+280F;BRAILLE PATTERN DOTS-1234;So;0;ON;;;;;N;;;;;
+2810;BRAILLE PATTERN DOTS-5;So;0;ON;;;;;N;;;;;
+2811;BRAILLE PATTERN DOTS-15;So;0;ON;;;;;N;;;;;
+2812;BRAILLE PATTERN DOTS-25;So;0;ON;;;;;N;;;;;
+2813;BRAILLE PATTERN DOTS-125;So;0;ON;;;;;N;;;;;
+2814;BRAILLE PATTERN DOTS-35;So;0;ON;;;;;N;;;;;
+2815;BRAILLE PATTERN DOTS-135;So;0;ON;;;;;N;;;;;
+2816;BRAILLE PATTERN DOTS-235;So;0;ON;;;;;N;;;;;
+2817;BRAILLE PATTERN DOTS-1235;So;0;ON;;;;;N;;;;;
+2818;BRAILLE PATTERN DOTS-45;So;0;ON;;;;;N;;;;;
+2819;BRAILLE PATTERN DOTS-145;So;0;ON;;;;;N;;;;;
+281A;BRAILLE PATTERN DOTS-245;So;0;ON;;;;;N;;;;;
+281B;BRAILLE PATTERN DOTS-1245;So;0;ON;;;;;N;;;;;
+281C;BRAILLE PATTERN DOTS-345;So;0;ON;;;;;N;;;;;
+281D;BRAILLE PATTERN DOTS-1345;So;0;ON;;;;;N;;;;;
+281E;BRAILLE PATTERN DOTS-2345;So;0;ON;;;;;N;;;;;
+281F;BRAILLE PATTERN DOTS-12345;So;0;ON;;;;;N;;;;;
+2820;BRAILLE PATTERN DOTS-6;So;0;ON;;;;;N;;;;;
+2821;BRAILLE PATTERN DOTS-16;So;0;ON;;;;;N;;;;;
+2822;BRAILLE PATTERN DOTS-26;So;0;ON;;;;;N;;;;;
+2823;BRAILLE PATTERN DOTS-126;So;0;ON;;;;;N;;;;;
+2824;BRAILLE PATTERN DOTS-36;So;0;ON;;;;;N;;;;;
+2825;BRAILLE PATTERN DOTS-136;So;0;ON;;;;;N;;;;;
+2826;BRAILLE PATTERN DOTS-236;So;0;ON;;;;;N;;;;;
+2827;BRAILLE PATTERN DOTS-1236;So;0;ON;;;;;N;;;;;
+2828;BRAILLE PATTERN DOTS-46;So;0;ON;;;;;N;;;;;
+2829;BRAILLE PATTERN DOTS-146;So;0;ON;;;;;N;;;;;
+282A;BRAILLE PATTERN DOTS-246;So;0;ON;;;;;N;;;;;
+282B;BRAILLE PATTERN DOTS-1246;So;0;ON;;;;;N;;;;;
+282C;BRAILLE PATTERN DOTS-346;So;0;ON;;;;;N;;;;;
+282D;BRAILLE PATTERN DOTS-1346;So;0;ON;;;;;N;;;;;
+282E;BRAILLE PATTERN DOTS-2346;So;0;ON;;;;;N;;;;;
+282F;BRAILLE PATTERN DOTS-12346;So;0;ON;;;;;N;;;;;
+2830;BRAILLE PATTERN DOTS-56;So;0;ON;;;;;N;;;;;
+2831;BRAILLE PATTERN DOTS-156;So;0;ON;;;;;N;;;;;
+2832;BRAILLE PATTERN DOTS-256;So;0;ON;;;;;N;;;;;
+2833;BRAILLE PATTERN DOTS-1256;So;0;ON;;;;;N;;;;;
+2834;BRAILLE PATTERN DOTS-356;So;0;ON;;;;;N;;;;;
+2835;BRAILLE PATTERN DOTS-1356;So;0;ON;;;;;N;;;;;
+2836;BRAILLE PATTERN DOTS-2356;So;0;ON;;;;;N;;;;;
+2837;BRAILLE PATTERN DOTS-12356;So;0;ON;;;;;N;;;;;
+2838;BRAILLE PATTERN DOTS-456;So;0;ON;;;;;N;;;;;
+2839;BRAILLE PATTERN DOTS-1456;So;0;ON;;;;;N;;;;;
+283A;BRAILLE PATTERN DOTS-2456;So;0;ON;;;;;N;;;;;
+283B;BRAILLE PATTERN DOTS-12456;So;0;ON;;;;;N;;;;;
+283C;BRAILLE PATTERN DOTS-3456;So;0;ON;;;;;N;;;;;
+283D;BRAILLE PATTERN DOTS-13456;So;0;ON;;;;;N;;;;;
+283E;BRAILLE PATTERN DOTS-23456;So;0;ON;;;;;N;;;;;
+283F;BRAILLE PATTERN DOTS-123456;So;0;ON;;;;;N;;;;;
+2840;BRAILLE PATTERN DOTS-7;So;0;ON;;;;;N;;;;;
+2841;BRAILLE PATTERN DOTS-17;So;0;ON;;;;;N;;;;;
+2842;BRAILLE PATTERN DOTS-27;So;0;ON;;;;;N;;;;;
+2843;BRAILLE PATTERN DOTS-127;So;0;ON;;;;;N;;;;;
+2844;BRAILLE PATTERN DOTS-37;So;0;ON;;;;;N;;;;;
+2845;BRAILLE PATTERN DOTS-137;So;0;ON;;;;;N;;;;;
+2846;BRAILLE PATTERN DOTS-237;So;0;ON;;;;;N;;;;;
+2847;BRAILLE PATTERN DOTS-1237;So;0;ON;;;;;N;;;;;
+2848;BRAILLE PATTERN DOTS-47;So;0;ON;;;;;N;;;;;
+2849;BRAILLE PATTERN DOTS-147;So;0;ON;;;;;N;;;;;
+284A;BRAILLE PATTERN DOTS-247;So;0;ON;;;;;N;;;;;
+284B;BRAILLE PATTERN DOTS-1247;So;0;ON;;;;;N;;;;;
+284C;BRAILLE PATTERN DOTS-347;So;0;ON;;;;;N;;;;;
+284D;BRAILLE PATTERN DOTS-1347;So;0;ON;;;;;N;;;;;
+284E;BRAILLE PATTERN DOTS-2347;So;0;ON;;;;;N;;;;;
+284F;BRAILLE PATTERN DOTS-12347;So;0;ON;;;;;N;;;;;
+2850;BRAILLE PATTERN DOTS-57;So;0;ON;;;;;N;;;;;
+2851;BRAILLE PATTERN DOTS-157;So;0;ON;;;;;N;;;;;
+2852;BRAILLE PATTERN DOTS-257;So;0;ON;;;;;N;;;;;
+2853;BRAILLE PATTERN DOTS-1257;So;0;ON;;;;;N;;;;;
+2854;BRAILLE PATTERN DOTS-357;So;0;ON;;;;;N;;;;;
+2855;BRAILLE PATTERN DOTS-1357;So;0;ON;;;;;N;;;;;
+2856;BRAILLE PATTERN DOTS-2357;So;0;ON;;;;;N;;;;;
+2857;BRAILLE PATTERN DOTS-12357;So;0;ON;;;;;N;;;;;
+2858;BRAILLE PATTERN DOTS-457;So;0;ON;;;;;N;;;;;
+2859;BRAILLE PATTERN DOTS-1457;So;0;ON;;;;;N;;;;;
+285A;BRAILLE PATTERN DOTS-2457;So;0;ON;;;;;N;;;;;
+285B;BRAILLE PATTERN DOTS-12457;So;0;ON;;;;;N;;;;;
+285C;BRAILLE PATTERN DOTS-3457;So;0;ON;;;;;N;;;;;
+285D;BRAILLE PATTERN DOTS-13457;So;0;ON;;;;;N;;;;;
+285E;BRAILLE PATTERN DOTS-23457;So;0;ON;;;;;N;;;;;
+285F;BRAILLE PATTERN DOTS-123457;So;0;ON;;;;;N;;;;;
+2860;BRAILLE PATTERN DOTS-67;So;0;ON;;;;;N;;;;;
+2861;BRAILLE PATTERN DOTS-167;So;0;ON;;;;;N;;;;;
+2862;BRAILLE PATTERN DOTS-267;So;0;ON;;;;;N;;;;;
+2863;BRAILLE PATTERN DOTS-1267;So;0;ON;;;;;N;;;;;
+2864;BRAILLE PATTERN DOTS-367;So;0;ON;;;;;N;;;;;
+2865;BRAILLE PATTERN DOTS-1367;So;0;ON;;;;;N;;;;;
+2866;BRAILLE PATTERN DOTS-2367;So;0;ON;;;;;N;;;;;
+2867;BRAILLE PATTERN DOTS-12367;So;0;ON;;;;;N;;;;;
+2868;BRAILLE PATTERN DOTS-467;So;0;ON;;;;;N;;;;;
+2869;BRAILLE PATTERN DOTS-1467;So;0;ON;;;;;N;;;;;
+286A;BRAILLE PATTERN DOTS-2467;So;0;ON;;;;;N;;;;;
+286B;BRAILLE PATTERN DOTS-12467;So;0;ON;;;;;N;;;;;
+286C;BRAILLE PATTERN DOTS-3467;So;0;ON;;;;;N;;;;;
+286D;BRAILLE PATTERN DOTS-13467;So;0;ON;;;;;N;;;;;
+286E;BRAILLE PATTERN DOTS-23467;So;0;ON;;;;;N;;;;;
+286F;BRAILLE PATTERN DOTS-123467;So;0;ON;;;;;N;;;;;
+2870;BRAILLE PATTERN DOTS-567;So;0;ON;;;;;N;;;;;
+2871;BRAILLE PATTERN DOTS-1567;So;0;ON;;;;;N;;;;;
+2872;BRAILLE PATTERN DOTS-2567;So;0;ON;;;;;N;;;;;
+2873;BRAILLE PATTERN DOTS-12567;So;0;ON;;;;;N;;;;;
+2874;BRAILLE PATTERN DOTS-3567;So;0;ON;;;;;N;;;;;
+2875;BRAILLE PATTERN DOTS-13567;So;0;ON;;;;;N;;;;;
+2876;BRAILLE PATTERN DOTS-23567;So;0;ON;;;;;N;;;;;
+2877;BRAILLE PATTERN DOTS-123567;So;0;ON;;;;;N;;;;;
+2878;BRAILLE PATTERN DOTS-4567;So;0;ON;;;;;N;;;;;
+2879;BRAILLE PATTERN DOTS-14567;So;0;ON;;;;;N;;;;;
+287A;BRAILLE PATTERN DOTS-24567;So;0;ON;;;;;N;;;;;
+287B;BRAILLE PATTERN DOTS-124567;So;0;ON;;;;;N;;;;;
+287C;BRAILLE PATTERN DOTS-34567;So;0;ON;;;;;N;;;;;
+287D;BRAILLE PATTERN DOTS-134567;So;0;ON;;;;;N;;;;;
+287E;BRAILLE PATTERN DOTS-234567;So;0;ON;;;;;N;;;;;
+287F;BRAILLE PATTERN DOTS-1234567;So;0;ON;;;;;N;;;;;
+2880;BRAILLE PATTERN DOTS-8;So;0;ON;;;;;N;;;;;
+2881;BRAILLE PATTERN DOTS-18;So;0;ON;;;;;N;;;;;
+2882;BRAILLE PATTERN DOTS-28;So;0;ON;;;;;N;;;;;
+2883;BRAILLE PATTERN DOTS-128;So;0;ON;;;;;N;;;;;
+2884;BRAILLE PATTERN DOTS-38;So;0;ON;;;;;N;;;;;
+2885;BRAILLE PATTERN DOTS-138;So;0;ON;;;;;N;;;;;
+2886;BRAILLE PATTERN DOTS-238;So;0;ON;;;;;N;;;;;
+2887;BRAILLE PATTERN DOTS-1238;So;0;ON;;;;;N;;;;;
+2888;BRAILLE PATTERN DOTS-48;So;0;ON;;;;;N;;;;;
+2889;BRAILLE PATTERN DOTS-148;So;0;ON;;;;;N;;;;;
+288A;BRAILLE PATTERN DOTS-248;So;0;ON;;;;;N;;;;;
+288B;BRAILLE PATTERN DOTS-1248;So;0;ON;;;;;N;;;;;
+288C;BRAILLE PATTERN DOTS-348;So;0;ON;;;;;N;;;;;
+288D;BRAILLE PATTERN DOTS-1348;So;0;ON;;;;;N;;;;;
+288E;BRAILLE PATTERN DOTS-2348;So;0;ON;;;;;N;;;;;
+288F;BRAILLE PATTERN DOTS-12348;So;0;ON;;;;;N;;;;;
+2890;BRAILLE PATTERN DOTS-58;So;0;ON;;;;;N;;;;;
+2891;BRAILLE PATTERN DOTS-158;So;0;ON;;;;;N;;;;;
+2892;BRAILLE PATTERN DOTS-258;So;0;ON;;;;;N;;;;;
+2893;BRAILLE PATTERN DOTS-1258;So;0;ON;;;;;N;;;;;
+2894;BRAILLE PATTERN DOTS-358;So;0;ON;;;;;N;;;;;
+2895;BRAILLE PATTERN DOTS-1358;So;0;ON;;;;;N;;;;;
+2896;BRAILLE PATTERN DOTS-2358;So;0;ON;;;;;N;;;;;
+2897;BRAILLE PATTERN DOTS-12358;So;0;ON;;;;;N;;;;;
+2898;BRAILLE PATTERN DOTS-458;So;0;ON;;;;;N;;;;;
+2899;BRAILLE PATTERN DOTS-1458;So;0;ON;;;;;N;;;;;
+289A;BRAILLE PATTERN DOTS-2458;So;0;ON;;;;;N;;;;;
+289B;BRAILLE PATTERN DOTS-12458;So;0;ON;;;;;N;;;;;
+289C;BRAILLE PATTERN DOTS-3458;So;0;ON;;;;;N;;;;;
+289D;BRAILLE PATTERN DOTS-13458;So;0;ON;;;;;N;;;;;
+289E;BRAILLE PATTERN DOTS-23458;So;0;ON;;;;;N;;;;;
+289F;BRAILLE PATTERN DOTS-123458;So;0;ON;;;;;N;;;;;
+28A0;BRAILLE PATTERN DOTS-68;So;0;ON;;;;;N;;;;;
+28A1;BRAILLE PATTERN DOTS-168;So;0;ON;;;;;N;;;;;
+28A2;BRAILLE PATTERN DOTS-268;So;0;ON;;;;;N;;;;;
+28A3;BRAILLE PATTERN DOTS-1268;So;0;ON;;;;;N;;;;;
+28A4;BRAILLE PATTERN DOTS-368;So;0;ON;;;;;N;;;;;
+28A5;BRAILLE PATTERN DOTS-1368;So;0;ON;;;;;N;;;;;
+28A6;BRAILLE PATTERN DOTS-2368;So;0;ON;;;;;N;;;;;
+28A7;BRAILLE PATTERN DOTS-12368;So;0;ON;;;;;N;;;;;
+28A8;BRAILLE PATTERN DOTS-468;So;0;ON;;;;;N;;;;;
+28A9;BRAILLE PATTERN DOTS-1468;So;0;ON;;;;;N;;;;;
+28AA;BRAILLE PATTERN DOTS-2468;So;0;ON;;;;;N;;;;;
+28AB;BRAILLE PATTERN DOTS-12468;So;0;ON;;;;;N;;;;;
+28AC;BRAILLE PATTERN DOTS-3468;So;0;ON;;;;;N;;;;;
+28AD;BRAILLE PATTERN DOTS-13468;So;0;ON;;;;;N;;;;;
+28AE;BRAILLE PATTERN DOTS-23468;So;0;ON;;;;;N;;;;;
+28AF;BRAILLE PATTERN DOTS-123468;So;0;ON;;;;;N;;;;;
+28B0;BRAILLE PATTERN DOTS-568;So;0;ON;;;;;N;;;;;
+28B1;BRAILLE PATTERN DOTS-1568;So;0;ON;;;;;N;;;;;
+28B2;BRAILLE PATTERN DOTS-2568;So;0;ON;;;;;N;;;;;
+28B3;BRAILLE PATTERN DOTS-12568;So;0;ON;;;;;N;;;;;
+28B4;BRAILLE PATTERN DOTS-3568;So;0;ON;;;;;N;;;;;
+28B5;BRAILLE PATTERN DOTS-13568;So;0;ON;;;;;N;;;;;
+28B6;BRAILLE PATTERN DOTS-23568;So;0;ON;;;;;N;;;;;
+28B7;BRAILLE PATTERN DOTS-123568;So;0;ON;;;;;N;;;;;
+28B8;BRAILLE PATTERN DOTS-4568;So;0;ON;;;;;N;;;;;
+28B9;BRAILLE PATTERN DOTS-14568;So;0;ON;;;;;N;;;;;
+28BA;BRAILLE PATTERN DOTS-24568;So;0;ON;;;;;N;;;;;
+28BB;BRAILLE PATTERN DOTS-124568;So;0;ON;;;;;N;;;;;
+28BC;BRAILLE PATTERN DOTS-34568;So;0;ON;;;;;N;;;;;
+28BD;BRAILLE PATTERN DOTS-134568;So;0;ON;;;;;N;;;;;
+28BE;BRAILLE PATTERN DOTS-234568;So;0;ON;;;;;N;;;;;
+28BF;BRAILLE PATTERN DOTS-1234568;So;0;ON;;;;;N;;;;;
+28C0;BRAILLE PATTERN DOTS-78;So;0;ON;;;;;N;;;;;
+28C1;BRAILLE PATTERN DOTS-178;So;0;ON;;;;;N;;;;;
+28C2;BRAILLE PATTERN DOTS-278;So;0;ON;;;;;N;;;;;
+28C3;BRAILLE PATTERN DOTS-1278;So;0;ON;;;;;N;;;;;
+28C4;BRAILLE PATTERN DOTS-378;So;0;ON;;;;;N;;;;;
+28C5;BRAILLE PATTERN DOTS-1378;So;0;ON;;;;;N;;;;;
+28C6;BRAILLE PATTERN DOTS-2378;So;0;ON;;;;;N;;;;;
+28C7;BRAILLE PATTERN DOTS-12378;So;0;ON;;;;;N;;;;;
+28C8;BRAILLE PATTERN DOTS-478;So;0;ON;;;;;N;;;;;
+28C9;BRAILLE PATTERN DOTS-1478;So;0;ON;;;;;N;;;;;
+28CA;BRAILLE PATTERN DOTS-2478;So;0;ON;;;;;N;;;;;
+28CB;BRAILLE PATTERN DOTS-12478;So;0;ON;;;;;N;;;;;
+28CC;BRAILLE PATTERN DOTS-3478;So;0;ON;;;;;N;;;;;
+28CD;BRAILLE PATTERN DOTS-13478;So;0;ON;;;;;N;;;;;
+28CE;BRAILLE PATTERN DOTS-23478;So;0;ON;;;;;N;;;;;
+28CF;BRAILLE PATTERN DOTS-123478;So;0;ON;;;;;N;;;;;
+28D0;BRAILLE PATTERN DOTS-578;So;0;ON;;;;;N;;;;;
+28D1;BRAILLE PATTERN DOTS-1578;So;0;ON;;;;;N;;;;;
+28D2;BRAILLE PATTERN DOTS-2578;So;0;ON;;;;;N;;;;;
+28D3;BRAILLE PATTERN DOTS-12578;So;0;ON;;;;;N;;;;;
+28D4;BRAILLE PATTERN DOTS-3578;So;0;ON;;;;;N;;;;;
+28D5;BRAILLE PATTERN DOTS-13578;So;0;ON;;;;;N;;;;;
+28D6;BRAILLE PATTERN DOTS-23578;So;0;ON;;;;;N;;;;;
+28D7;BRAILLE PATTERN DOTS-123578;So;0;ON;;;;;N;;;;;
+28D8;BRAILLE PATTERN DOTS-4578;So;0;ON;;;;;N;;;;;
+28D9;BRAILLE PATTERN DOTS-14578;So;0;ON;;;;;N;;;;;
+28DA;BRAILLE PATTERN DOTS-24578;So;0;ON;;;;;N;;;;;
+28DB;BRAILLE PATTERN DOTS-124578;So;0;ON;;;;;N;;;;;
+28DC;BRAILLE PATTERN DOTS-34578;So;0;ON;;;;;N;;;;;
+28DD;BRAILLE PATTERN DOTS-134578;So;0;ON;;;;;N;;;;;
+28DE;BRAILLE PATTERN DOTS-234578;So;0;ON;;;;;N;;;;;
+28DF;BRAILLE PATTERN DOTS-1234578;So;0;ON;;;;;N;;;;;
+28E0;BRAILLE PATTERN DOTS-678;So;0;ON;;;;;N;;;;;
+28E1;BRAILLE PATTERN DOTS-1678;So;0;ON;;;;;N;;;;;
+28E2;BRAILLE PATTERN DOTS-2678;So;0;ON;;;;;N;;;;;
+28E3;BRAILLE PATTERN DOTS-12678;So;0;ON;;;;;N;;;;;
+28E4;BRAILLE PATTERN DOTS-3678;So;0;ON;;;;;N;;;;;
+28E5;BRAILLE PATTERN DOTS-13678;So;0;ON;;;;;N;;;;;
+28E6;BRAILLE PATTERN DOTS-23678;So;0;ON;;;;;N;;;;;
+28E7;BRAILLE PATTERN DOTS-123678;So;0;ON;;;;;N;;;;;
+28E8;BRAILLE PATTERN DOTS-4678;So;0;ON;;;;;N;;;;;
+28E9;BRAILLE PATTERN DOTS-14678;So;0;ON;;;;;N;;;;;
+28EA;BRAILLE PATTERN DOTS-24678;So;0;ON;;;;;N;;;;;
+28EB;BRAILLE PATTERN DOTS-124678;So;0;ON;;;;;N;;;;;
+28EC;BRAILLE PATTERN DOTS-34678;So;0;ON;;;;;N;;;;;
+28ED;BRAILLE PATTERN DOTS-134678;So;0;ON;;;;;N;;;;;
+28EE;BRAILLE PATTERN DOTS-234678;So;0;ON;;;;;N;;;;;
+28EF;BRAILLE PATTERN DOTS-1234678;So;0;ON;;;;;N;;;;;
+28F0;BRAILLE PATTERN DOTS-5678;So;0;ON;;;;;N;;;;;
+28F1;BRAILLE PATTERN DOTS-15678;So;0;ON;;;;;N;;;;;
+28F2;BRAILLE PATTERN DOTS-25678;So;0;ON;;;;;N;;;;;
+28F3;BRAILLE PATTERN DOTS-125678;So;0;ON;;;;;N;;;;;
+28F4;BRAILLE PATTERN DOTS-35678;So;0;ON;;;;;N;;;;;
+28F5;BRAILLE PATTERN DOTS-135678;So;0;ON;;;;;N;;;;;
+28F6;BRAILLE PATTERN DOTS-235678;So;0;ON;;;;;N;;;;;
+28F7;BRAILLE PATTERN DOTS-1235678;So;0;ON;;;;;N;;;;;
+28F8;BRAILLE PATTERN DOTS-45678;So;0;ON;;;;;N;;;;;
+28F9;BRAILLE PATTERN DOTS-145678;So;0;ON;;;;;N;;;;;
+28FA;BRAILLE PATTERN DOTS-245678;So;0;ON;;;;;N;;;;;
+28FB;BRAILLE PATTERN DOTS-1245678;So;0;ON;;;;;N;;;;;
+28FC;BRAILLE PATTERN DOTS-345678;So;0;ON;;;;;N;;;;;
+28FD;BRAILLE PATTERN DOTS-1345678;So;0;ON;;;;;N;;;;;
+28FE;BRAILLE PATTERN DOTS-2345678;So;0;ON;;;;;N;;;;;
+28FF;BRAILLE PATTERN DOTS-12345678;So;0;ON;;;;;N;;;;;
+2E80;CJK RADICAL REPEAT;So;0;ON;;;;;N;;;;;
+2E81;CJK RADICAL CLIFF;So;0;ON;;;;;N;;;;;
+2E82;CJK RADICAL SECOND ONE;So;0;ON;;;;;N;;;;;
+2E83;CJK RADICAL SECOND TWO;So;0;ON;;;;;N;;;;;
+2E84;CJK RADICAL SECOND THREE;So;0;ON;;;;;N;;;;;
+2E85;CJK RADICAL PERSON;So;0;ON;;;;;N;;;;;
+2E86;CJK RADICAL BOX;So;0;ON;;;;;N;;;;;
+2E87;CJK RADICAL TABLE;So;0;ON;;;;;N;;;;;
+2E88;CJK RADICAL KNIFE ONE;So;0;ON;;;;;N;;;;;
+2E89;CJK RADICAL KNIFE TWO;So;0;ON;;;;;N;;;;;
+2E8A;CJK RADICAL DIVINATION;So;0;ON;;;;;N;;;;;
+2E8B;CJK RADICAL SEAL;So;0;ON;;;;;N;;;;;
+2E8C;CJK RADICAL SMALL ONE;So;0;ON;;;;;N;;;;;
+2E8D;CJK RADICAL SMALL TWO;So;0;ON;;;;;N;;;;;
+2E8E;CJK RADICAL LAME ONE;So;0;ON;;;;;N;;;;;
+2E8F;CJK RADICAL LAME TWO;So;0;ON;;;;;N;;;;;
+2E90;CJK RADICAL LAME THREE;So;0;ON;;;;;N;;;;;
+2E91;CJK RADICAL LAME FOUR;So;0;ON;;;;;N;;;;;
+2E92;CJK RADICAL SNAKE;So;0;ON;;;;;N;;;;;
+2E93;CJK RADICAL THREAD;So;0;ON;;;;;N;;;;;
+2E94;CJK RADICAL SNOUT ONE;So;0;ON;;;;;N;;;;;
+2E95;CJK RADICAL SNOUT TWO;So;0;ON;;;;;N;;;;;
+2E96;CJK RADICAL HEART ONE;So;0;ON;;;;;N;;;;;
+2E97;CJK RADICAL HEART TWO;So;0;ON;;;;;N;;;;;
+2E98;CJK RADICAL HAND;So;0;ON;;;;;N;;;;;
+2E99;CJK RADICAL RAP;So;0;ON;;;;;N;;;;;
+2E9B;CJK RADICAL CHOKE;So;0;ON;;;;;N;;;;;
+2E9C;CJK RADICAL SUN;So;0;ON;;;;;N;;;;;
+2E9D;CJK RADICAL MOON;So;0;ON;;;;;N;;;;;
+2E9E;CJK RADICAL DEATH;So;0;ON;;;;;N;;;;;
+2E9F;CJK RADICAL MOTHER;So;0;ON;<compat> 6BCD;;;;N;;;;;
+2EA0;CJK RADICAL CIVILIAN;So;0;ON;;;;;N;;;;;
+2EA1;CJK RADICAL WATER ONE;So;0;ON;;;;;N;;;;;
+2EA2;CJK RADICAL WATER TWO;So;0;ON;;;;;N;;;;;
+2EA3;CJK RADICAL FIRE;So;0;ON;;;;;N;;;;;
+2EA4;CJK RADICAL PAW ONE;So;0;ON;;;;;N;;;;;
+2EA5;CJK RADICAL PAW TWO;So;0;ON;;;;;N;;;;;
+2EA6;CJK RADICAL SIMPLIFIED HALF TREE TRUNK;So;0;ON;;;;;N;;;;;
+2EA7;CJK RADICAL COW;So;0;ON;;;;;N;;;;;
+2EA8;CJK RADICAL DOG;So;0;ON;;;;;N;;;;;
+2EA9;CJK RADICAL JADE;So;0;ON;;;;;N;;;;;
+2EAA;CJK RADICAL BOLT OF CLOTH;So;0;ON;;;;;N;;;;;
+2EAB;CJK RADICAL EYE;So;0;ON;;;;;N;;;;;
+2EAC;CJK RADICAL SPIRIT ONE;So;0;ON;;;;;N;;;;;
+2EAD;CJK RADICAL SPIRIT TWO;So;0;ON;;;;;N;;;;;
+2EAE;CJK RADICAL BAMBOO;So;0;ON;;;;;N;;;;;
+2EAF;CJK RADICAL SILK;So;0;ON;;;;;N;;;;;
+2EB0;CJK RADICAL C-SIMPLIFIED SILK;So;0;ON;;;;;N;;;;;
+2EB1;CJK RADICAL NET ONE;So;0;ON;;;;;N;;;;;
+2EB2;CJK RADICAL NET TWO;So;0;ON;;;;;N;;;;;
+2EB3;CJK RADICAL NET THREE;So;0;ON;;;;;N;;;;;
+2EB4;CJK RADICAL NET FOUR;So;0;ON;;;;;N;;;;;
+2EB5;CJK RADICAL MESH;So;0;ON;;;;;N;;;;;
+2EB6;CJK RADICAL SHEEP;So;0;ON;;;;;N;;;;;
+2EB7;CJK RADICAL RAM;So;0;ON;;;;;N;;;;;
+2EB8;CJK RADICAL EWE;So;0;ON;;;;;N;;;;;
+2EB9;CJK RADICAL OLD;So;0;ON;;;;;N;;;;;
+2EBA;CJK RADICAL BRUSH ONE;So;0;ON;;;;;N;;;;;
+2EBB;CJK RADICAL BRUSH TWO;So;0;ON;;;;;N;;;;;
+2EBC;CJK RADICAL MEAT;So;0;ON;;;;;N;;;;;
+2EBD;CJK RADICAL MORTAR;So;0;ON;;;;;N;;;;;
+2EBE;CJK RADICAL GRASS ONE;So;0;ON;;;;;N;;;;;
+2EBF;CJK RADICAL GRASS TWO;So;0;ON;;;;;N;;;;;
+2EC0;CJK RADICAL GRASS THREE;So;0;ON;;;;;N;;;;;
+2EC1;CJK RADICAL TIGER;So;0;ON;;;;;N;;;;;
+2EC2;CJK RADICAL CLOTHES;So;0;ON;;;;;N;;;;;
+2EC3;CJK RADICAL WEST ONE;So;0;ON;;;;;N;;;;;
+2EC4;CJK RADICAL WEST TWO;So;0;ON;;;;;N;;;;;
+2EC5;CJK RADICAL C-SIMPLIFIED SEE;So;0;ON;;;;;N;;;;;
+2EC6;CJK RADICAL SIMPLIFIED HORN;So;0;ON;;;;;N;;;;;
+2EC7;CJK RADICAL HORN;So;0;ON;;;;;N;;;;;
+2EC8;CJK RADICAL C-SIMPLIFIED SPEECH;So;0;ON;;;;;N;;;;;
+2EC9;CJK RADICAL C-SIMPLIFIED SHELL;So;0;ON;;;;;N;;;;;
+2ECA;CJK RADICAL FOOT;So;0;ON;;;;;N;;;;;
+2ECB;CJK RADICAL C-SIMPLIFIED CART;So;0;ON;;;;;N;;;;;
+2ECC;CJK RADICAL SIMPLIFIED WALK;So;0;ON;;;;;N;;;;;
+2ECD;CJK RADICAL WALK ONE;So;0;ON;;;;;N;;;;;
+2ECE;CJK RADICAL WALK TWO;So;0;ON;;;;;N;;;;;
+2ECF;CJK RADICAL CITY;So;0;ON;;;;;N;;;;;
+2ED0;CJK RADICAL C-SIMPLIFIED GOLD;So;0;ON;;;;;N;;;;;
+2ED1;CJK RADICAL LONG ONE;So;0;ON;;;;;N;;;;;
+2ED2;CJK RADICAL LONG TWO;So;0;ON;;;;;N;;;;;
+2ED3;CJK RADICAL C-SIMPLIFIED LONG;So;0;ON;;;;;N;;;;;
+2ED4;CJK RADICAL C-SIMPLIFIED GATE;So;0;ON;;;;;N;;;;;
+2ED5;CJK RADICAL MOUND ONE;So;0;ON;;;;;N;;;;;
+2ED6;CJK RADICAL MOUND TWO;So;0;ON;;;;;N;;;;;
+2ED7;CJK RADICAL RAIN;So;0;ON;;;;;N;;;;;
+2ED8;CJK RADICAL BLUE;So;0;ON;;;;;N;;;;;
+2ED9;CJK RADICAL C-SIMPLIFIED TANNED LEATHER;So;0;ON;;;;;N;;;;;
+2EDA;CJK RADICAL C-SIMPLIFIED LEAF;So;0;ON;;;;;N;;;;;
+2EDB;CJK RADICAL C-SIMPLIFIED WIND;So;0;ON;;;;;N;;;;;
+2EDC;CJK RADICAL C-SIMPLIFIED FLY;So;0;ON;;;;;N;;;;;
+2EDD;CJK RADICAL EAT ONE;So;0;ON;;;;;N;;;;;
+2EDE;CJK RADICAL EAT TWO;So;0;ON;;;;;N;;;;;
+2EDF;CJK RADICAL EAT THREE;So;0;ON;;;;;N;;;;;
+2EE0;CJK RADICAL C-SIMPLIFIED EAT;So;0;ON;;;;;N;;;;;
+2EE1;CJK RADICAL HEAD;So;0;ON;;;;;N;;;;;
+2EE2;CJK RADICAL C-SIMPLIFIED HORSE;So;0;ON;;;;;N;;;;;
+2EE3;CJK RADICAL BONE;So;0;ON;;;;;N;;;;;
+2EE4;CJK RADICAL GHOST;So;0;ON;;;;;N;;;;;
+2EE5;CJK RADICAL C-SIMPLIFIED FISH;So;0;ON;;;;;N;;;;;
+2EE6;CJK RADICAL C-SIMPLIFIED BIRD;So;0;ON;;;;;N;;;;;
+2EE7;CJK RADICAL C-SIMPLIFIED SALT;So;0;ON;;;;;N;;;;;
+2EE8;CJK RADICAL SIMPLIFIED WHEAT;So;0;ON;;;;;N;;;;;
+2EE9;CJK RADICAL SIMPLIFIED YELLOW;So;0;ON;;;;;N;;;;;
+2EEA;CJK RADICAL C-SIMPLIFIED FROG;So;0;ON;;;;;N;;;;;
+2EEB;CJK RADICAL J-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
+2EEC;CJK RADICAL C-SIMPLIFIED EVEN;So;0;ON;;;;;N;;;;;
+2EED;CJK RADICAL J-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
+2EEE;CJK RADICAL C-SIMPLIFIED TOOTH;So;0;ON;;;;;N;;;;;
+2EEF;CJK RADICAL J-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
+2EF0;CJK RADICAL C-SIMPLIFIED DRAGON;So;0;ON;;;;;N;;;;;
+2EF1;CJK RADICAL TURTLE;So;0;ON;;;;;N;;;;;
+2EF2;CJK RADICAL J-SIMPLIFIED TURTLE;So;0;ON;;;;;N;;;;;
+2EF3;CJK RADICAL C-SIMPLIFIED TURTLE;So;0;ON;<compat> 9F9F;;;;N;;;;;
+2F00;KANGXI RADICAL ONE;So;0;ON;<compat> 4E00;;;;N;;;;;
+2F01;KANGXI RADICAL LINE;So;0;ON;<compat> 4E28;;;;N;;;;;
+2F02;KANGXI RADICAL DOT;So;0;ON;<compat> 4E36;;;;N;;;;;
+2F03;KANGXI RADICAL SLASH;So;0;ON;<compat> 4E3F;;;;N;;;;;
+2F04;KANGXI RADICAL SECOND;So;0;ON;<compat> 4E59;;;;N;;;;;
+2F05;KANGXI RADICAL HOOK;So;0;ON;<compat> 4E85;;;;N;;;;;
+2F06;KANGXI RADICAL TWO;So;0;ON;<compat> 4E8C;;;;N;;;;;
+2F07;KANGXI RADICAL LID;So;0;ON;<compat> 4EA0;;;;N;;;;;
+2F08;KANGXI RADICAL MAN;So;0;ON;<compat> 4EBA;;;;N;;;;;
+2F09;KANGXI RADICAL LEGS;So;0;ON;<compat> 513F;;;;N;;;;;
+2F0A;KANGXI RADICAL ENTER;So;0;ON;<compat> 5165;;;;N;;;;;
+2F0B;KANGXI RADICAL EIGHT;So;0;ON;<compat> 516B;;;;N;;;;;
+2F0C;KANGXI RADICAL DOWN BOX;So;0;ON;<compat> 5182;;;;N;;;;;
+2F0D;KANGXI RADICAL COVER;So;0;ON;<compat> 5196;;;;N;;;;;
+2F0E;KANGXI RADICAL ICE;So;0;ON;<compat> 51AB;;;;N;;;;;
+2F0F;KANGXI RADICAL TABLE;So;0;ON;<compat> 51E0;;;;N;;;;;
+2F10;KANGXI RADICAL OPEN BOX;So;0;ON;<compat> 51F5;;;;N;;;;;
+2F11;KANGXI RADICAL KNIFE;So;0;ON;<compat> 5200;;;;N;;;;;
+2F12;KANGXI RADICAL POWER;So;0;ON;<compat> 529B;;;;N;;;;;
+2F13;KANGXI RADICAL WRAP;So;0;ON;<compat> 52F9;;;;N;;;;;
+2F14;KANGXI RADICAL SPOON;So;0;ON;<compat> 5315;;;;N;;;;;
+2F15;KANGXI RADICAL RIGHT OPEN BOX;So;0;ON;<compat> 531A;;;;N;;;;;
+2F16;KANGXI RADICAL HIDING ENCLOSURE;So;0;ON;<compat> 5338;;;;N;;;;;
+2F17;KANGXI RADICAL TEN;So;0;ON;<compat> 5341;;;;N;;;;;
+2F18;KANGXI RADICAL DIVINATION;So;0;ON;<compat> 535C;;;;N;;;;;
+2F19;KANGXI RADICAL SEAL;So;0;ON;<compat> 5369;;;;N;;;;;
+2F1A;KANGXI RADICAL CLIFF;So;0;ON;<compat> 5382;;;;N;;;;;
+2F1B;KANGXI RADICAL PRIVATE;So;0;ON;<compat> 53B6;;;;N;;;;;
+2F1C;KANGXI RADICAL AGAIN;So;0;ON;<compat> 53C8;;;;N;;;;;
+2F1D;KANGXI RADICAL MOUTH;So;0;ON;<compat> 53E3;;;;N;;;;;
+2F1E;KANGXI RADICAL ENCLOSURE;So;0;ON;<compat> 56D7;;;;N;;;;;
+2F1F;KANGXI RADICAL EARTH;So;0;ON;<compat> 571F;;;;N;;;;;
+2F20;KANGXI RADICAL SCHOLAR;So;0;ON;<compat> 58EB;;;;N;;;;;
+2F21;KANGXI RADICAL GO;So;0;ON;<compat> 5902;;;;N;;;;;
+2F22;KANGXI RADICAL GO SLOWLY;So;0;ON;<compat> 590A;;;;N;;;;;
+2F23;KANGXI RADICAL EVENING;So;0;ON;<compat> 5915;;;;N;;;;;
+2F24;KANGXI RADICAL BIG;So;0;ON;<compat> 5927;;;;N;;;;;
+2F25;KANGXI RADICAL WOMAN;So;0;ON;<compat> 5973;;;;N;;;;;
+2F26;KANGXI RADICAL CHILD;So;0;ON;<compat> 5B50;;;;N;;;;;
+2F27;KANGXI RADICAL ROOF;So;0;ON;<compat> 5B80;;;;N;;;;;
+2F28;KANGXI RADICAL INCH;So;0;ON;<compat> 5BF8;;;;N;;;;;
+2F29;KANGXI RADICAL SMALL;So;0;ON;<compat> 5C0F;;;;N;;;;;
+2F2A;KANGXI RADICAL LAME;So;0;ON;<compat> 5C22;;;;N;;;;;
+2F2B;KANGXI RADICAL CORPSE;So;0;ON;<compat> 5C38;;;;N;;;;;
+2F2C;KANGXI RADICAL SPROUT;So;0;ON;<compat> 5C6E;;;;N;;;;;
+2F2D;KANGXI RADICAL MOUNTAIN;So;0;ON;<compat> 5C71;;;;N;;;;;
+2F2E;KANGXI RADICAL RIVER;So;0;ON;<compat> 5DDB;;;;N;;;;;
+2F2F;KANGXI RADICAL WORK;So;0;ON;<compat> 5DE5;;;;N;;;;;
+2F30;KANGXI RADICAL ONESELF;So;0;ON;<compat> 5DF1;;;;N;;;;;
+2F31;KANGXI RADICAL TURBAN;So;0;ON;<compat> 5DFE;;;;N;;;;;
+2F32;KANGXI RADICAL DRY;So;0;ON;<compat> 5E72;;;;N;;;;;
+2F33;KANGXI RADICAL SHORT THREAD;So;0;ON;<compat> 5E7A;;;;N;;;;;
+2F34;KANGXI RADICAL DOTTED CLIFF;So;0;ON;<compat> 5E7F;;;;N;;;;;
+2F35;KANGXI RADICAL LONG STRIDE;So;0;ON;<compat> 5EF4;;;;N;;;;;
+2F36;KANGXI RADICAL TWO HANDS;So;0;ON;<compat> 5EFE;;;;N;;;;;
+2F37;KANGXI RADICAL SHOOT;So;0;ON;<compat> 5F0B;;;;N;;;;;
+2F38;KANGXI RADICAL BOW;So;0;ON;<compat> 5F13;;;;N;;;;;
+2F39;KANGXI RADICAL SNOUT;So;0;ON;<compat> 5F50;;;;N;;;;;
+2F3A;KANGXI RADICAL BRISTLE;So;0;ON;<compat> 5F61;;;;N;;;;;
+2F3B;KANGXI RADICAL STEP;So;0;ON;<compat> 5F73;;;;N;;;;;
+2F3C;KANGXI RADICAL HEART;So;0;ON;<compat> 5FC3;;;;N;;;;;
+2F3D;KANGXI RADICAL HALBERD;So;0;ON;<compat> 6208;;;;N;;;;;
+2F3E;KANGXI RADICAL DOOR;So;0;ON;<compat> 6236;;;;N;;;;;
+2F3F;KANGXI RADICAL HAND;So;0;ON;<compat> 624B;;;;N;;;;;
+2F40;KANGXI RADICAL BRANCH;So;0;ON;<compat> 652F;;;;N;;;;;
+2F41;KANGXI RADICAL RAP;So;0;ON;<compat> 6534;;;;N;;;;;
+2F42;KANGXI RADICAL SCRIPT;So;0;ON;<compat> 6587;;;;N;;;;;
+2F43;KANGXI RADICAL DIPPER;So;0;ON;<compat> 6597;;;;N;;;;;
+2F44;KANGXI RADICAL AXE;So;0;ON;<compat> 65A4;;;;N;;;;;
+2F45;KANGXI RADICAL SQUARE;So;0;ON;<compat> 65B9;;;;N;;;;;
+2F46;KANGXI RADICAL NOT;So;0;ON;<compat> 65E0;;;;N;;;;;
+2F47;KANGXI RADICAL SUN;So;0;ON;<compat> 65E5;;;;N;;;;;
+2F48;KANGXI RADICAL SAY;So;0;ON;<compat> 66F0;;;;N;;;;;
+2F49;KANGXI RADICAL MOON;So;0;ON;<compat> 6708;;;;N;;;;;
+2F4A;KANGXI RADICAL TREE;So;0;ON;<compat> 6728;;;;N;;;;;
+2F4B;KANGXI RADICAL LACK;So;0;ON;<compat> 6B20;;;;N;;;;;
+2F4C;KANGXI RADICAL STOP;So;0;ON;<compat> 6B62;;;;N;;;;;
+2F4D;KANGXI RADICAL DEATH;So;0;ON;<compat> 6B79;;;;N;;;;;
+2F4E;KANGXI RADICAL WEAPON;So;0;ON;<compat> 6BB3;;;;N;;;;;
+2F4F;KANGXI RADICAL DO NOT;So;0;ON;<compat> 6BCB;;;;N;;;;;
+2F50;KANGXI RADICAL COMPARE;So;0;ON;<compat> 6BD4;;;;N;;;;;
+2F51;KANGXI RADICAL FUR;So;0;ON;<compat> 6BDB;;;;N;;;;;
+2F52;KANGXI RADICAL CLAN;So;0;ON;<compat> 6C0F;;;;N;;;;;
+2F53;KANGXI RADICAL STEAM;So;0;ON;<compat> 6C14;;;;N;;;;;
+2F54;KANGXI RADICAL WATER;So;0;ON;<compat> 6C34;;;;N;;;;;
+2F55;KANGXI RADICAL FIRE;So;0;ON;<compat> 706B;;;;N;;;;;
+2F56;KANGXI RADICAL CLAW;So;0;ON;<compat> 722A;;;;N;;;;;
+2F57;KANGXI RADICAL FATHER;So;0;ON;<compat> 7236;;;;N;;;;;
+2F58;KANGXI RADICAL DOUBLE X;So;0;ON;<compat> 723B;;;;N;;;;;
+2F59;KANGXI RADICAL HALF TREE TRUNK;So;0;ON;<compat> 723F;;;;N;;;;;
+2F5A;KANGXI RADICAL SLICE;So;0;ON;<compat> 7247;;;;N;;;;;
+2F5B;KANGXI RADICAL FANG;So;0;ON;<compat> 7259;;;;N;;;;;
+2F5C;KANGXI RADICAL COW;So;0;ON;<compat> 725B;;;;N;;;;;
+2F5D;KANGXI RADICAL DOG;So;0;ON;<compat> 72AC;;;;N;;;;;
+2F5E;KANGXI RADICAL PROFOUND;So;0;ON;<compat> 7384;;;;N;;;;;
+2F5F;KANGXI RADICAL JADE;So;0;ON;<compat> 7389;;;;N;;;;;
+2F60;KANGXI RADICAL MELON;So;0;ON;<compat> 74DC;;;;N;;;;;
+2F61;KANGXI RADICAL TILE;So;0;ON;<compat> 74E6;;;;N;;;;;
+2F62;KANGXI RADICAL SWEET;So;0;ON;<compat> 7518;;;;N;;;;;
+2F63;KANGXI RADICAL LIFE;So;0;ON;<compat> 751F;;;;N;;;;;
+2F64;KANGXI RADICAL USE;So;0;ON;<compat> 7528;;;;N;;;;;
+2F65;KANGXI RADICAL FIELD;So;0;ON;<compat> 7530;;;;N;;;;;
+2F66;KANGXI RADICAL BOLT OF CLOTH;So;0;ON;<compat> 758B;;;;N;;;;;
+2F67;KANGXI RADICAL SICKNESS;So;0;ON;<compat> 7592;;;;N;;;;;
+2F68;KANGXI RADICAL DOTTED TENT;So;0;ON;<compat> 7676;;;;N;;;;;
+2F69;KANGXI RADICAL WHITE;So;0;ON;<compat> 767D;;;;N;;;;;
+2F6A;KANGXI RADICAL SKIN;So;0;ON;<compat> 76AE;;;;N;;;;;
+2F6B;KANGXI RADICAL DISH;So;0;ON;<compat> 76BF;;;;N;;;;;
+2F6C;KANGXI RADICAL EYE;So;0;ON;<compat> 76EE;;;;N;;;;;
+2F6D;KANGXI RADICAL SPEAR;So;0;ON;<compat> 77DB;;;;N;;;;;
+2F6E;KANGXI RADICAL ARROW;So;0;ON;<compat> 77E2;;;;N;;;;;
+2F6F;KANGXI RADICAL STONE;So;0;ON;<compat> 77F3;;;;N;;;;;
+2F70;KANGXI RADICAL SPIRIT;So;0;ON;<compat> 793A;;;;N;;;;;
+2F71;KANGXI RADICAL TRACK;So;0;ON;<compat> 79B8;;;;N;;;;;
+2F72;KANGXI RADICAL GRAIN;So;0;ON;<compat> 79BE;;;;N;;;;;
+2F73;KANGXI RADICAL CAVE;So;0;ON;<compat> 7A74;;;;N;;;;;
+2F74;KANGXI RADICAL STAND;So;0;ON;<compat> 7ACB;;;;N;;;;;
+2F75;KANGXI RADICAL BAMBOO;So;0;ON;<compat> 7AF9;;;;N;;;;;
+2F76;KANGXI RADICAL RICE;So;0;ON;<compat> 7C73;;;;N;;;;;
+2F77;KANGXI RADICAL SILK;So;0;ON;<compat> 7CF8;;;;N;;;;;
+2F78;KANGXI RADICAL JAR;So;0;ON;<compat> 7F36;;;;N;;;;;
+2F79;KANGXI RADICAL NET;So;0;ON;<compat> 7F51;;;;N;;;;;
+2F7A;KANGXI RADICAL SHEEP;So;0;ON;<compat> 7F8A;;;;N;;;;;
+2F7B;KANGXI RADICAL FEATHER;So;0;ON;<compat> 7FBD;;;;N;;;;;
+2F7C;KANGXI RADICAL OLD;So;0;ON;<compat> 8001;;;;N;;;;;
+2F7D;KANGXI RADICAL AND;So;0;ON;<compat> 800C;;;;N;;;;;
+2F7E;KANGXI RADICAL PLOW;So;0;ON;<compat> 8012;;;;N;;;;;
+2F7F;KANGXI RADICAL EAR;So;0;ON;<compat> 8033;;;;N;;;;;
+2F80;KANGXI RADICAL BRUSH;So;0;ON;<compat> 807F;;;;N;;;;;
+2F81;KANGXI RADICAL MEAT;So;0;ON;<compat> 8089;;;;N;;;;;
+2F82;KANGXI RADICAL MINISTER;So;0;ON;<compat> 81E3;;;;N;;;;;
+2F83;KANGXI RADICAL SELF;So;0;ON;<compat> 81EA;;;;N;;;;;
+2F84;KANGXI RADICAL ARRIVE;So;0;ON;<compat> 81F3;;;;N;;;;;
+2F85;KANGXI RADICAL MORTAR;So;0;ON;<compat> 81FC;;;;N;;;;;
+2F86;KANGXI RADICAL TONGUE;So;0;ON;<compat> 820C;;;;N;;;;;
+2F87;KANGXI RADICAL OPPOSE;So;0;ON;<compat> 821B;;;;N;;;;;
+2F88;KANGXI RADICAL BOAT;So;0;ON;<compat> 821F;;;;N;;;;;
+2F89;KANGXI RADICAL STOPPING;So;0;ON;<compat> 826E;;;;N;;;;;
+2F8A;KANGXI RADICAL COLOR;So;0;ON;<compat> 8272;;;;N;;;;;
+2F8B;KANGXI RADICAL GRASS;So;0;ON;<compat> 8278;;;;N;;;;;
+2F8C;KANGXI RADICAL TIGER;So;0;ON;<compat> 864D;;;;N;;;;;
+2F8D;KANGXI RADICAL INSECT;So;0;ON;<compat> 866B;;;;N;;;;;
+2F8E;KANGXI RADICAL BLOOD;So;0;ON;<compat> 8840;;;;N;;;;;
+2F8F;KANGXI RADICAL WALK ENCLOSURE;So;0;ON;<compat> 884C;;;;N;;;;;
+2F90;KANGXI RADICAL CLOTHES;So;0;ON;<compat> 8863;;;;N;;;;;
+2F91;KANGXI RADICAL WEST;So;0;ON;<compat> 897E;;;;N;;;;;
+2F92;KANGXI RADICAL SEE;So;0;ON;<compat> 898B;;;;N;;;;;
+2F93;KANGXI RADICAL HORN;So;0;ON;<compat> 89D2;;;;N;;;;;
+2F94;KANGXI RADICAL SPEECH;So;0;ON;<compat> 8A00;;;;N;;;;;
+2F95;KANGXI RADICAL VALLEY;So;0;ON;<compat> 8C37;;;;N;;;;;
+2F96;KANGXI RADICAL BEAN;So;0;ON;<compat> 8C46;;;;N;;;;;
+2F97;KANGXI RADICAL PIG;So;0;ON;<compat> 8C55;;;;N;;;;;
+2F98;KANGXI RADICAL BADGER;So;0;ON;<compat> 8C78;;;;N;;;;;
+2F99;KANGXI RADICAL SHELL;So;0;ON;<compat> 8C9D;;;;N;;;;;
+2F9A;KANGXI RADICAL RED;So;0;ON;<compat> 8D64;;;;N;;;;;
+2F9B;KANGXI RADICAL RUN;So;0;ON;<compat> 8D70;;;;N;;;;;
+2F9C;KANGXI RADICAL FOOT;So;0;ON;<compat> 8DB3;;;;N;;;;;
+2F9D;KANGXI RADICAL BODY;So;0;ON;<compat> 8EAB;;;;N;;;;;
+2F9E;KANGXI RADICAL CART;So;0;ON;<compat> 8ECA;;;;N;;;;;
+2F9F;KANGXI RADICAL BITTER;So;0;ON;<compat> 8F9B;;;;N;;;;;
+2FA0;KANGXI RADICAL MORNING;So;0;ON;<compat> 8FB0;;;;N;;;;;
+2FA1;KANGXI RADICAL WALK;So;0;ON;<compat> 8FB5;;;;N;;;;;
+2FA2;KANGXI RADICAL CITY;So;0;ON;<compat> 9091;;;;N;;;;;
+2FA3;KANGXI RADICAL WINE;So;0;ON;<compat> 9149;;;;N;;;;;
+2FA4;KANGXI RADICAL DISTINGUISH;So;0;ON;<compat> 91C6;;;;N;;;;;
+2FA5;KANGXI RADICAL VILLAGE;So;0;ON;<compat> 91CC;;;;N;;;;;
+2FA6;KANGXI RADICAL GOLD;So;0;ON;<compat> 91D1;;;;N;;;;;
+2FA7;KANGXI RADICAL LONG;So;0;ON;<compat> 9577;;;;N;;;;;
+2FA8;KANGXI RADICAL GATE;So;0;ON;<compat> 9580;;;;N;;;;;
+2FA9;KANGXI RADICAL MOUND;So;0;ON;<compat> 961C;;;;N;;;;;
+2FAA;KANGXI RADICAL SLAVE;So;0;ON;<compat> 96B6;;;;N;;;;;
+2FAB;KANGXI RADICAL SHORT TAILED BIRD;So;0;ON;<compat> 96B9;;;;N;;;;;
+2FAC;KANGXI RADICAL RAIN;So;0;ON;<compat> 96E8;;;;N;;;;;
+2FAD;KANGXI RADICAL BLUE;So;0;ON;<compat> 9751;;;;N;;;;;
+2FAE;KANGXI RADICAL WRONG;So;0;ON;<compat> 975E;;;;N;;;;;
+2FAF;KANGXI RADICAL FACE;So;0;ON;<compat> 9762;;;;N;;;;;
+2FB0;KANGXI RADICAL LEATHER;So;0;ON;<compat> 9769;;;;N;;;;;
+2FB1;KANGXI RADICAL TANNED LEATHER;So;0;ON;<compat> 97CB;;;;N;;;;;
+2FB2;KANGXI RADICAL LEEK;So;0;ON;<compat> 97ED;;;;N;;;;;
+2FB3;KANGXI RADICAL SOUND;So;0;ON;<compat> 97F3;;;;N;;;;;
+2FB4;KANGXI RADICAL LEAF;So;0;ON;<compat> 9801;;;;N;;;;;
+2FB5;KANGXI RADICAL WIND;So;0;ON;<compat> 98A8;;;;N;;;;;
+2FB6;KANGXI RADICAL FLY;So;0;ON;<compat> 98DB;;;;N;;;;;
+2FB7;KANGXI RADICAL EAT;So;0;ON;<compat> 98DF;;;;N;;;;;
+2FB8;KANGXI RADICAL HEAD;So;0;ON;<compat> 9996;;;;N;;;;;
+2FB9;KANGXI RADICAL FRAGRANT;So;0;ON;<compat> 9999;;;;N;;;;;
+2FBA;KANGXI RADICAL HORSE;So;0;ON;<compat> 99AC;;;;N;;;;;
+2FBB;KANGXI RADICAL BONE;So;0;ON;<compat> 9AA8;;;;N;;;;;
+2FBC;KANGXI RADICAL TALL;So;0;ON;<compat> 9AD8;;;;N;;;;;
+2FBD;KANGXI RADICAL HAIR;So;0;ON;<compat> 9ADF;;;;N;;;;;
+2FBE;KANGXI RADICAL FIGHT;So;0;ON;<compat> 9B25;;;;N;;;;;
+2FBF;KANGXI RADICAL SACRIFICIAL WINE;So;0;ON;<compat> 9B2F;;;;N;;;;;
+2FC0;KANGXI RADICAL CAULDRON;So;0;ON;<compat> 9B32;;;;N;;;;;
+2FC1;KANGXI RADICAL GHOST;So;0;ON;<compat> 9B3C;;;;N;;;;;
+2FC2;KANGXI RADICAL FISH;So;0;ON;<compat> 9B5A;;;;N;;;;;
+2FC3;KANGXI RADICAL BIRD;So;0;ON;<compat> 9CE5;;;;N;;;;;
+2FC4;KANGXI RADICAL SALT;So;0;ON;<compat> 9E75;;;;N;;;;;
+2FC5;KANGXI RADICAL DEER;So;0;ON;<compat> 9E7F;;;;N;;;;;
+2FC6;KANGXI RADICAL WHEAT;So;0;ON;<compat> 9EA5;;;;N;;;;;
+2FC7;KANGXI RADICAL HEMP;So;0;ON;<compat> 9EBB;;;;N;;;;;
+2FC8;KANGXI RADICAL YELLOW;So;0;ON;<compat> 9EC3;;;;N;;;;;
+2FC9;KANGXI RADICAL MILLET;So;0;ON;<compat> 9ECD;;;;N;;;;;
+2FCA;KANGXI RADICAL BLACK;So;0;ON;<compat> 9ED1;;;;N;;;;;
+2FCB;KANGXI RADICAL EMBROIDERY;So;0;ON;<compat> 9EF9;;;;N;;;;;
+2FCC;KANGXI RADICAL FROG;So;0;ON;<compat> 9EFD;;;;N;;;;;
+2FCD;KANGXI RADICAL TRIPOD;So;0;ON;<compat> 9F0E;;;;N;;;;;
+2FCE;KANGXI RADICAL DRUM;So;0;ON;<compat> 9F13;;;;N;;;;;
+2FCF;KANGXI RADICAL RAT;So;0;ON;<compat> 9F20;;;;N;;;;;
+2FD0;KANGXI RADICAL NOSE;So;0;ON;<compat> 9F3B;;;;N;;;;;
+2FD1;KANGXI RADICAL EVEN;So;0;ON;<compat> 9F4A;;;;N;;;;;
+2FD2;KANGXI RADICAL TOOTH;So;0;ON;<compat> 9F52;;;;N;;;;;
+2FD3;KANGXI RADICAL DRAGON;So;0;ON;<compat> 9F8D;;;;N;;;;;
+2FD4;KANGXI RADICAL TURTLE;So;0;ON;<compat> 9F9C;;;;N;;;;;
+2FD5;KANGXI RADICAL FLUTE;So;0;ON;<compat> 9FA0;;;;N;;;;;
+2FF0;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO RIGHT;So;0;ON;;;;;N;;;;;
+2FF1;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO BELOW;So;0;ON;;;;;N;;;;;
+2FF2;IDEOGRAPHIC DESCRIPTION CHARACTER LEFT TO MIDDLE AND RIGHT;So;0;ON;;;;;N;;;;;
+2FF3;IDEOGRAPHIC DESCRIPTION CHARACTER ABOVE TO MIDDLE AND BELOW;So;0;ON;;;;;N;;;;;
+2FF4;IDEOGRAPHIC DESCRIPTION CHARACTER FULL SURROUND;So;0;ON;;;;;N;;;;;
+2FF5;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM ABOVE;So;0;ON;;;;;N;;;;;
+2FF6;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM BELOW;So;0;ON;;;;;N;;;;;
+2FF7;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LEFT;So;0;ON;;;;;N;;;;;
+2FF8;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER LEFT;So;0;ON;;;;;N;;;;;
+2FF9;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM UPPER RIGHT;So;0;ON;;;;;N;;;;;
+2FFA;IDEOGRAPHIC DESCRIPTION CHARACTER SURROUND FROM LOWER LEFT;So;0;ON;;;;;N;;;;;
+2FFB;IDEOGRAPHIC DESCRIPTION CHARACTER OVERLAID;So;0;ON;;;;;N;;;;;
+3000;IDEOGRAPHIC SPACE;Zs;0;WS;<wide> 0020;;;;N;;;;;
+3001;IDEOGRAPHIC COMMA;Po;0;ON;;;;;N;;;;;
+3002;IDEOGRAPHIC FULL STOP;Po;0;ON;;;;;N;IDEOGRAPHIC PERIOD;;;;
+3003;DITTO MARK;Po;0;ON;;;;;N;;;;;
+3004;JAPANESE INDUSTRIAL STANDARD SYMBOL;So;0;ON;;;;;N;;;;;
+3005;IDEOGRAPHIC ITERATION MARK;Lm;0;L;;;;;N;;;;;
+3006;IDEOGRAPHIC CLOSING MARK;Lo;0;L;;;;;N;;;;;
+3007;IDEOGRAPHIC NUMBER ZERO;Nl;0;L;;;;0;N;;;;;
+3008;LEFT ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING ANGLE BRACKET;;;;
+3009;RIGHT ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING ANGLE BRACKET;;;;
+300A;LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;;;;;Y;OPENING DOUBLE ANGLE BRACKET;;;;
+300B;RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;;;;;Y;CLOSING DOUBLE ANGLE BRACKET;;;;
+300C;LEFT CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING CORNER BRACKET;;;;
+300D;RIGHT CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING CORNER BRACKET;;;;
+300E;LEFT WHITE CORNER BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE CORNER BRACKET;;;;
+300F;RIGHT WHITE CORNER BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE CORNER BRACKET;;;;
+3010;LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING BLACK LENTICULAR BRACKET;;;;
+3011;RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING BLACK LENTICULAR BRACKET;;;;
+3012;POSTAL MARK;So;0;ON;;;;;N;;;;;
+3013;GETA MARK;So;0;ON;;;;;N;;;;;
+3014;LEFT TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING TORTOISE SHELL BRACKET;;;;
+3015;RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING TORTOISE SHELL BRACKET;;;;
+3016;LEFT WHITE LENTICULAR BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE LENTICULAR BRACKET;;;;
+3017;RIGHT WHITE LENTICULAR BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE LENTICULAR BRACKET;;;;
+3018;LEFT WHITE TORTOISE SHELL BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE TORTOISE SHELL BRACKET;;;;
+3019;RIGHT WHITE TORTOISE SHELL BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE TORTOISE SHELL BRACKET;;;;
+301A;LEFT WHITE SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING WHITE SQUARE BRACKET;;;;
+301B;RIGHT WHITE SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING WHITE SQUARE BRACKET;;;;
+301C;WAVE DASH;Pd;0;ON;;;;;N;;;;;
+301D;REVERSED DOUBLE PRIME QUOTATION MARK;Ps;0;ON;;;;;N;;;;;
+301E;DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+301F;LOW DOUBLE PRIME QUOTATION MARK;Pe;0;ON;;;;;N;;;;;
+3020;POSTAL MARK FACE;So;0;ON;;;;;N;;;;;
+3021;HANGZHOU NUMERAL ONE;Nl;0;L;;;;1;N;;;;;
+3022;HANGZHOU NUMERAL TWO;Nl;0;L;;;;2;N;;;;;
+3023;HANGZHOU NUMERAL THREE;Nl;0;L;;;;3;N;;;;;
+3024;HANGZHOU NUMERAL FOUR;Nl;0;L;;;;4;N;;;;;
+3025;HANGZHOU NUMERAL FIVE;Nl;0;L;;;;5;N;;;;;
+3026;HANGZHOU NUMERAL SIX;Nl;0;L;;;;6;N;;;;;
+3027;HANGZHOU NUMERAL SEVEN;Nl;0;L;;;;7;N;;;;;
+3028;HANGZHOU NUMERAL EIGHT;Nl;0;L;;;;8;N;;;;;
+3029;HANGZHOU NUMERAL NINE;Nl;0;L;;;;9;N;;;;;
+302A;IDEOGRAPHIC LEVEL TONE MARK;Mn;218;NSM;;;;;N;;;;;
+302B;IDEOGRAPHIC RISING TONE MARK;Mn;228;NSM;;;;;N;;;;;
+302C;IDEOGRAPHIC DEPARTING TONE MARK;Mn;232;NSM;;;;;N;;;;;
+302D;IDEOGRAPHIC ENTERING TONE MARK;Mn;222;NSM;;;;;N;;;;;
+302E;HANGUL SINGLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
+302F;HANGUL DOUBLE DOT TONE MARK;Mn;224;NSM;;;;;N;;;;;
+3030;WAVY DASH;Pd;0;ON;;;;;N;;;;;
+3031;VERTICAL KANA REPEAT MARK;Lm;0;L;;;;;N;;;;;
+3032;VERTICAL KANA REPEAT WITH VOICED SOUND MARK;Lm;0;L;;;;;N;;;;;
+3033;VERTICAL KANA REPEAT MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
+3034;VERTICAL KANA REPEAT WITH VOICED SOUND MARK UPPER HALF;Lm;0;L;;;;;N;;;;;
+3035;VERTICAL KANA REPEAT MARK LOWER HALF;Lm;0;L;;;;;N;;;;;
+3036;CIRCLED POSTAL MARK;So;0;ON;<compat> 3012;;;;N;;;;;
+3037;IDEOGRAPHIC TELEGRAPH LINE FEED SEPARATOR SYMBOL;So;0;ON;;;;;N;;;;;
+3038;HANGZHOU NUMERAL TEN;Nl;0;L;<compat> 5341;;;10;N;;;;;
+3039;HANGZHOU NUMERAL TWENTY;Nl;0;L;<compat> 5344;;;20;N;;;;;
+303A;HANGZHOU NUMERAL THIRTY;Nl;0;L;<compat> 5345;;;30;N;;;;;
+303E;IDEOGRAPHIC VARIATION INDICATOR;So;0;ON;;;;;N;;;;;
+303F;IDEOGRAPHIC HALF FILL SPACE;So;0;ON;;;;;N;;;;;
+3041;HIRAGANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+3042;HIRAGANA LETTER A;Lo;0;L;;;;;N;;;;;
+3043;HIRAGANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+3044;HIRAGANA LETTER I;Lo;0;L;;;;;N;;;;;
+3045;HIRAGANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+3046;HIRAGANA LETTER U;Lo;0;L;;;;;N;;;;;
+3047;HIRAGANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+3048;HIRAGANA LETTER E;Lo;0;L;;;;;N;;;;;
+3049;HIRAGANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+304A;HIRAGANA LETTER O;Lo;0;L;;;;;N;;;;;
+304B;HIRAGANA LETTER KA;Lo;0;L;;;;;N;;;;;
+304C;HIRAGANA LETTER GA;Lo;0;L;304B 3099;;;;N;;;;;
+304D;HIRAGANA LETTER KI;Lo;0;L;;;;;N;;;;;
+304E;HIRAGANA LETTER GI;Lo;0;L;304D 3099;;;;N;;;;;
+304F;HIRAGANA LETTER KU;Lo;0;L;;;;;N;;;;;
+3050;HIRAGANA LETTER GU;Lo;0;L;304F 3099;;;;N;;;;;
+3051;HIRAGANA LETTER KE;Lo;0;L;;;;;N;;;;;
+3052;HIRAGANA LETTER GE;Lo;0;L;3051 3099;;;;N;;;;;
+3053;HIRAGANA LETTER KO;Lo;0;L;;;;;N;;;;;
+3054;HIRAGANA LETTER GO;Lo;0;L;3053 3099;;;;N;;;;;
+3055;HIRAGANA LETTER SA;Lo;0;L;;;;;N;;;;;
+3056;HIRAGANA LETTER ZA;Lo;0;L;3055 3099;;;;N;;;;;
+3057;HIRAGANA LETTER SI;Lo;0;L;;;;;N;;;;;
+3058;HIRAGANA LETTER ZI;Lo;0;L;3057 3099;;;;N;;;;;
+3059;HIRAGANA LETTER SU;Lo;0;L;;;;;N;;;;;
+305A;HIRAGANA LETTER ZU;Lo;0;L;3059 3099;;;;N;;;;;
+305B;HIRAGANA LETTER SE;Lo;0;L;;;;;N;;;;;
+305C;HIRAGANA LETTER ZE;Lo;0;L;305B 3099;;;;N;;;;;
+305D;HIRAGANA LETTER SO;Lo;0;L;;;;;N;;;;;
+305E;HIRAGANA LETTER ZO;Lo;0;L;305D 3099;;;;N;;;;;
+305F;HIRAGANA LETTER TA;Lo;0;L;;;;;N;;;;;
+3060;HIRAGANA LETTER DA;Lo;0;L;305F 3099;;;;N;;;;;
+3061;HIRAGANA LETTER TI;Lo;0;L;;;;;N;;;;;
+3062;HIRAGANA LETTER DI;Lo;0;L;3061 3099;;;;N;;;;;
+3063;HIRAGANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+3064;HIRAGANA LETTER TU;Lo;0;L;;;;;N;;;;;
+3065;HIRAGANA LETTER DU;Lo;0;L;3064 3099;;;;N;;;;;
+3066;HIRAGANA LETTER TE;Lo;0;L;;;;;N;;;;;
+3067;HIRAGANA LETTER DE;Lo;0;L;3066 3099;;;;N;;;;;
+3068;HIRAGANA LETTER TO;Lo;0;L;;;;;N;;;;;
+3069;HIRAGANA LETTER DO;Lo;0;L;3068 3099;;;;N;;;;;
+306A;HIRAGANA LETTER NA;Lo;0;L;;;;;N;;;;;
+306B;HIRAGANA LETTER NI;Lo;0;L;;;;;N;;;;;
+306C;HIRAGANA LETTER NU;Lo;0;L;;;;;N;;;;;
+306D;HIRAGANA LETTER NE;Lo;0;L;;;;;N;;;;;
+306E;HIRAGANA LETTER NO;Lo;0;L;;;;;N;;;;;
+306F;HIRAGANA LETTER HA;Lo;0;L;;;;;N;;;;;
+3070;HIRAGANA LETTER BA;Lo;0;L;306F 3099;;;;N;;;;;
+3071;HIRAGANA LETTER PA;Lo;0;L;306F 309A;;;;N;;;;;
+3072;HIRAGANA LETTER HI;Lo;0;L;;;;;N;;;;;
+3073;HIRAGANA LETTER BI;Lo;0;L;3072 3099;;;;N;;;;;
+3074;HIRAGANA LETTER PI;Lo;0;L;3072 309A;;;;N;;;;;
+3075;HIRAGANA LETTER HU;Lo;0;L;;;;;N;;;;;
+3076;HIRAGANA LETTER BU;Lo;0;L;3075 3099;;;;N;;;;;
+3077;HIRAGANA LETTER PU;Lo;0;L;3075 309A;;;;N;;;;;
+3078;HIRAGANA LETTER HE;Lo;0;L;;;;;N;;;;;
+3079;HIRAGANA LETTER BE;Lo;0;L;3078 3099;;;;N;;;;;
+307A;HIRAGANA LETTER PE;Lo;0;L;3078 309A;;;;N;;;;;
+307B;HIRAGANA LETTER HO;Lo;0;L;;;;;N;;;;;
+307C;HIRAGANA LETTER BO;Lo;0;L;307B 3099;;;;N;;;;;
+307D;HIRAGANA LETTER PO;Lo;0;L;307B 309A;;;;N;;;;;
+307E;HIRAGANA LETTER MA;Lo;0;L;;;;;N;;;;;
+307F;HIRAGANA LETTER MI;Lo;0;L;;;;;N;;;;;
+3080;HIRAGANA LETTER MU;Lo;0;L;;;;;N;;;;;
+3081;HIRAGANA LETTER ME;Lo;0;L;;;;;N;;;;;
+3082;HIRAGANA LETTER MO;Lo;0;L;;;;;N;;;;;
+3083;HIRAGANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+3084;HIRAGANA LETTER YA;Lo;0;L;;;;;N;;;;;
+3085;HIRAGANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+3086;HIRAGANA LETTER YU;Lo;0;L;;;;;N;;;;;
+3087;HIRAGANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+3088;HIRAGANA LETTER YO;Lo;0;L;;;;;N;;;;;
+3089;HIRAGANA LETTER RA;Lo;0;L;;;;;N;;;;;
+308A;HIRAGANA LETTER RI;Lo;0;L;;;;;N;;;;;
+308B;HIRAGANA LETTER RU;Lo;0;L;;;;;N;;;;;
+308C;HIRAGANA LETTER RE;Lo;0;L;;;;;N;;;;;
+308D;HIRAGANA LETTER RO;Lo;0;L;;;;;N;;;;;
+308E;HIRAGANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+308F;HIRAGANA LETTER WA;Lo;0;L;;;;;N;;;;;
+3090;HIRAGANA LETTER WI;Lo;0;L;;;;;N;;;;;
+3091;HIRAGANA LETTER WE;Lo;0;L;;;;;N;;;;;
+3092;HIRAGANA LETTER WO;Lo;0;L;;;;;N;;;;;
+3093;HIRAGANA LETTER N;Lo;0;L;;;;;N;;;;;
+3094;HIRAGANA LETTER VU;Lo;0;L;3046 3099;;;;N;;;;;
+3099;COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA VOICED SOUND MARK;;;;
+309A;COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Mn;8;NSM;;;;;N;NON-SPACING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;;;;
+309B;KATAKANA-HIRAGANA VOICED SOUND MARK;Sk;0;ON;<compat> 0020 3099;;;;N;;;;;
+309C;KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK;Sk;0;ON;<compat> 0020 309A;;;;N;;;;;
+309D;HIRAGANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+309E;HIRAGANA VOICED ITERATION MARK;Lm;0;L;309D 3099;;;;N;;;;;
+30A1;KATAKANA LETTER SMALL A;Lo;0;L;;;;;N;;;;;
+30A2;KATAKANA LETTER A;Lo;0;L;;;;;N;;;;;
+30A3;KATAKANA LETTER SMALL I;Lo;0;L;;;;;N;;;;;
+30A4;KATAKANA LETTER I;Lo;0;L;;;;;N;;;;;
+30A5;KATAKANA LETTER SMALL U;Lo;0;L;;;;;N;;;;;
+30A6;KATAKANA LETTER U;Lo;0;L;;;;;N;;;;;
+30A7;KATAKANA LETTER SMALL E;Lo;0;L;;;;;N;;;;;
+30A8;KATAKANA LETTER E;Lo;0;L;;;;;N;;;;;
+30A9;KATAKANA LETTER SMALL O;Lo;0;L;;;;;N;;;;;
+30AA;KATAKANA LETTER O;Lo;0;L;;;;;N;;;;;
+30AB;KATAKANA LETTER KA;Lo;0;L;;;;;N;;;;;
+30AC;KATAKANA LETTER GA;Lo;0;L;30AB 3099;;;;N;;;;;
+30AD;KATAKANA LETTER KI;Lo;0;L;;;;;N;;;;;
+30AE;KATAKANA LETTER GI;Lo;0;L;30AD 3099;;;;N;;;;;
+30AF;KATAKANA LETTER KU;Lo;0;L;;;;;N;;;;;
+30B0;KATAKANA LETTER GU;Lo;0;L;30AF 3099;;;;N;;;;;
+30B1;KATAKANA LETTER KE;Lo;0;L;;;;;N;;;;;
+30B2;KATAKANA LETTER GE;Lo;0;L;30B1 3099;;;;N;;;;;
+30B3;KATAKANA LETTER KO;Lo;0;L;;;;;N;;;;;
+30B4;KATAKANA LETTER GO;Lo;0;L;30B3 3099;;;;N;;;;;
+30B5;KATAKANA LETTER SA;Lo;0;L;;;;;N;;;;;
+30B6;KATAKANA LETTER ZA;Lo;0;L;30B5 3099;;;;N;;;;;
+30B7;KATAKANA LETTER SI;Lo;0;L;;;;;N;;;;;
+30B8;KATAKANA LETTER ZI;Lo;0;L;30B7 3099;;;;N;;;;;
+30B9;KATAKANA LETTER SU;Lo;0;L;;;;;N;;;;;
+30BA;KATAKANA LETTER ZU;Lo;0;L;30B9 3099;;;;N;;;;;
+30BB;KATAKANA LETTER SE;Lo;0;L;;;;;N;;;;;
+30BC;KATAKANA LETTER ZE;Lo;0;L;30BB 3099;;;;N;;;;;
+30BD;KATAKANA LETTER SO;Lo;0;L;;;;;N;;;;;
+30BE;KATAKANA LETTER ZO;Lo;0;L;30BD 3099;;;;N;;;;;
+30BF;KATAKANA LETTER TA;Lo;0;L;;;;;N;;;;;
+30C0;KATAKANA LETTER DA;Lo;0;L;30BF 3099;;;;N;;;;;
+30C1;KATAKANA LETTER TI;Lo;0;L;;;;;N;;;;;
+30C2;KATAKANA LETTER DI;Lo;0;L;30C1 3099;;;;N;;;;;
+30C3;KATAKANA LETTER SMALL TU;Lo;0;L;;;;;N;;;;;
+30C4;KATAKANA LETTER TU;Lo;0;L;;;;;N;;;;;
+30C5;KATAKANA LETTER DU;Lo;0;L;30C4 3099;;;;N;;;;;
+30C6;KATAKANA LETTER TE;Lo;0;L;;;;;N;;;;;
+30C7;KATAKANA LETTER DE;Lo;0;L;30C6 3099;;;;N;;;;;
+30C8;KATAKANA LETTER TO;Lo;0;L;;;;;N;;;;;
+30C9;KATAKANA LETTER DO;Lo;0;L;30C8 3099;;;;N;;;;;
+30CA;KATAKANA LETTER NA;Lo;0;L;;;;;N;;;;;
+30CB;KATAKANA LETTER NI;Lo;0;L;;;;;N;;;;;
+30CC;KATAKANA LETTER NU;Lo;0;L;;;;;N;;;;;
+30CD;KATAKANA LETTER NE;Lo;0;L;;;;;N;;;;;
+30CE;KATAKANA LETTER NO;Lo;0;L;;;;;N;;;;;
+30CF;KATAKANA LETTER HA;Lo;0;L;;;;;N;;;;;
+30D0;KATAKANA LETTER BA;Lo;0;L;30CF 3099;;;;N;;;;;
+30D1;KATAKANA LETTER PA;Lo;0;L;30CF 309A;;;;N;;;;;
+30D2;KATAKANA LETTER HI;Lo;0;L;;;;;N;;;;;
+30D3;KATAKANA LETTER BI;Lo;0;L;30D2 3099;;;;N;;;;;
+30D4;KATAKANA LETTER PI;Lo;0;L;30D2 309A;;;;N;;;;;
+30D5;KATAKANA LETTER HU;Lo;0;L;;;;;N;;;;;
+30D6;KATAKANA LETTER BU;Lo;0;L;30D5 3099;;;;N;;;;;
+30D7;KATAKANA LETTER PU;Lo;0;L;30D5 309A;;;;N;;;;;
+30D8;KATAKANA LETTER HE;Lo;0;L;;;;;N;;;;;
+30D9;KATAKANA LETTER BE;Lo;0;L;30D8 3099;;;;N;;;;;
+30DA;KATAKANA LETTER PE;Lo;0;L;30D8 309A;;;;N;;;;;
+30DB;KATAKANA LETTER HO;Lo;0;L;;;;;N;;;;;
+30DC;KATAKANA LETTER BO;Lo;0;L;30DB 3099;;;;N;;;;;
+30DD;KATAKANA LETTER PO;Lo;0;L;30DB 309A;;;;N;;;;;
+30DE;KATAKANA LETTER MA;Lo;0;L;;;;;N;;;;;
+30DF;KATAKANA LETTER MI;Lo;0;L;;;;;N;;;;;
+30E0;KATAKANA LETTER MU;Lo;0;L;;;;;N;;;;;
+30E1;KATAKANA LETTER ME;Lo;0;L;;;;;N;;;;;
+30E2;KATAKANA LETTER MO;Lo;0;L;;;;;N;;;;;
+30E3;KATAKANA LETTER SMALL YA;Lo;0;L;;;;;N;;;;;
+30E4;KATAKANA LETTER YA;Lo;0;L;;;;;N;;;;;
+30E5;KATAKANA LETTER SMALL YU;Lo;0;L;;;;;N;;;;;
+30E6;KATAKANA LETTER YU;Lo;0;L;;;;;N;;;;;
+30E7;KATAKANA LETTER SMALL YO;Lo;0;L;;;;;N;;;;;
+30E8;KATAKANA LETTER YO;Lo;0;L;;;;;N;;;;;
+30E9;KATAKANA LETTER RA;Lo;0;L;;;;;N;;;;;
+30EA;KATAKANA LETTER RI;Lo;0;L;;;;;N;;;;;
+30EB;KATAKANA LETTER RU;Lo;0;L;;;;;N;;;;;
+30EC;KATAKANA LETTER RE;Lo;0;L;;;;;N;;;;;
+30ED;KATAKANA LETTER RO;Lo;0;L;;;;;N;;;;;
+30EE;KATAKANA LETTER SMALL WA;Lo;0;L;;;;;N;;;;;
+30EF;KATAKANA LETTER WA;Lo;0;L;;;;;N;;;;;
+30F0;KATAKANA LETTER WI;Lo;0;L;;;;;N;;;;;
+30F1;KATAKANA LETTER WE;Lo;0;L;;;;;N;;;;;
+30F2;KATAKANA LETTER WO;Lo;0;L;;;;;N;;;;;
+30F3;KATAKANA LETTER N;Lo;0;L;;;;;N;;;;;
+30F4;KATAKANA LETTER VU;Lo;0;L;30A6 3099;;;;N;;;;;
+30F5;KATAKANA LETTER SMALL KA;Lo;0;L;;;;;N;;;;;
+30F6;KATAKANA LETTER SMALL KE;Lo;0;L;;;;;N;;;;;
+30F7;KATAKANA LETTER VA;Lo;0;L;30EF 3099;;;;N;;;;;
+30F8;KATAKANA LETTER VI;Lo;0;L;30F0 3099;;;;N;;;;;
+30F9;KATAKANA LETTER VE;Lo;0;L;30F1 3099;;;;N;;;;;
+30FA;KATAKANA LETTER VO;Lo;0;L;30F2 3099;;;;N;;;;;
+30FB;KATAKANA MIDDLE DOT;Pc;0;ON;;;;;N;;;;;
+30FC;KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;;;;;N;;;;;
+30FD;KATAKANA ITERATION MARK;Lm;0;L;;;;;N;;;;;
+30FE;KATAKANA VOICED ITERATION MARK;Lm;0;L;30FD 3099;;;;N;;;;;
+3105;BOPOMOFO LETTER B;Lo;0;L;;;;;N;;;;;
+3106;BOPOMOFO LETTER P;Lo;0;L;;;;;N;;;;;
+3107;BOPOMOFO LETTER M;Lo;0;L;;;;;N;;;;;
+3108;BOPOMOFO LETTER F;Lo;0;L;;;;;N;;;;;
+3109;BOPOMOFO LETTER D;Lo;0;L;;;;;N;;;;;
+310A;BOPOMOFO LETTER T;Lo;0;L;;;;;N;;;;;
+310B;BOPOMOFO LETTER N;Lo;0;L;;;;;N;;;;;
+310C;BOPOMOFO LETTER L;Lo;0;L;;;;;N;;;;;
+310D;BOPOMOFO LETTER G;Lo;0;L;;;;;N;;;;;
+310E;BOPOMOFO LETTER K;Lo;0;L;;;;;N;;;;;
+310F;BOPOMOFO LETTER H;Lo;0;L;;;;;N;;;;;
+3110;BOPOMOFO LETTER J;Lo;0;L;;;;;N;;;;;
+3111;BOPOMOFO LETTER Q;Lo;0;L;;;;;N;;;;;
+3112;BOPOMOFO LETTER X;Lo;0;L;;;;;N;;;;;
+3113;BOPOMOFO LETTER ZH;Lo;0;L;;;;;N;;;;;
+3114;BOPOMOFO LETTER CH;Lo;0;L;;;;;N;;;;;
+3115;BOPOMOFO LETTER SH;Lo;0;L;;;;;N;;;;;
+3116;BOPOMOFO LETTER R;Lo;0;L;;;;;N;;;;;
+3117;BOPOMOFO LETTER Z;Lo;0;L;;;;;N;;;;;
+3118;BOPOMOFO LETTER C;Lo;0;L;;;;;N;;;;;
+3119;BOPOMOFO LETTER S;Lo;0;L;;;;;N;;;;;
+311A;BOPOMOFO LETTER A;Lo;0;L;;;;;N;;;;;
+311B;BOPOMOFO LETTER O;Lo;0;L;;;;;N;;;;;
+311C;BOPOMOFO LETTER E;Lo;0;L;;;;;N;;;;;
+311D;BOPOMOFO LETTER EH;Lo;0;L;;;;;N;;;;;
+311E;BOPOMOFO LETTER AI;Lo;0;L;;;;;N;;;;;
+311F;BOPOMOFO LETTER EI;Lo;0;L;;;;;N;;;;;
+3120;BOPOMOFO LETTER AU;Lo;0;L;;;;;N;;;;;
+3121;BOPOMOFO LETTER OU;Lo;0;L;;;;;N;;;;;
+3122;BOPOMOFO LETTER AN;Lo;0;L;;;;;N;;;;;
+3123;BOPOMOFO LETTER EN;Lo;0;L;;;;;N;;;;;
+3124;BOPOMOFO LETTER ANG;Lo;0;L;;;;;N;;;;;
+3125;BOPOMOFO LETTER ENG;Lo;0;L;;;;;N;;;;;
+3126;BOPOMOFO LETTER ER;Lo;0;L;;;;;N;;;;;
+3127;BOPOMOFO LETTER I;Lo;0;L;;;;;N;;;;;
+3128;BOPOMOFO LETTER U;Lo;0;L;;;;;N;;;;;
+3129;BOPOMOFO LETTER IU;Lo;0;L;;;;;N;;;;;
+312A;BOPOMOFO LETTER V;Lo;0;L;;;;;N;;;;;
+312B;BOPOMOFO LETTER NG;Lo;0;L;;;;;N;;;;;
+312C;BOPOMOFO LETTER GN;Lo;0;L;;;;;N;;;;;
+3131;HANGUL LETTER KIYEOK;Lo;0;L;<compat> 1100;;;;N;HANGUL LETTER GIYEOG;;;;
+3132;HANGUL LETTER SSANGKIYEOK;Lo;0;L;<compat> 1101;;;;N;HANGUL LETTER SSANG GIYEOG;;;;
+3133;HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
+3134;HANGUL LETTER NIEUN;Lo;0;L;<compat> 1102;;;;N;;;;;
+3135;HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<compat> 11AC;;;;N;HANGUL LETTER NIEUN JIEUJ;;;;
+3136;HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<compat> 11AD;;;;N;HANGUL LETTER NIEUN HIEUH;;;;
+3137;HANGUL LETTER TIKEUT;Lo;0;L;<compat> 1103;;;;N;HANGUL LETTER DIGEUD;;;;
+3138;HANGUL LETTER SSANGTIKEUT;Lo;0;L;<compat> 1104;;;;N;HANGUL LETTER SSANG DIGEUD;;;;
+3139;HANGUL LETTER RIEUL;Lo;0;L;<compat> 1105;;;;N;HANGUL LETTER LIEUL;;;;
+313A;HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<compat> 11B0;;;;N;HANGUL LETTER LIEUL GIYEOG;;;;
+313B;HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<compat> 11B1;;;;N;HANGUL LETTER LIEUL MIEUM;;;;
+313C;HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<compat> 11B2;;;;N;HANGUL LETTER LIEUL BIEUB;;;;
+313D;HANGUL LETTER RIEUL-SIOS;Lo;0;L;<compat> 11B3;;;;N;HANGUL LETTER LIEUL SIOS;;;;
+313E;HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<compat> 11B4;;;;N;HANGUL LETTER LIEUL TIEUT;;;;
+313F;HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<compat> 11B5;;;;N;HANGUL LETTER LIEUL PIEUP;;;;
+3140;HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<compat> 111A;;;;N;HANGUL LETTER LIEUL HIEUH;;;;
+3141;HANGUL LETTER MIEUM;Lo;0;L;<compat> 1106;;;;N;;;;;
+3142;HANGUL LETTER PIEUP;Lo;0;L;<compat> 1107;;;;N;HANGUL LETTER BIEUB;;;;
+3143;HANGUL LETTER SSANGPIEUP;Lo;0;L;<compat> 1108;;;;N;HANGUL LETTER SSANG BIEUB;;;;
+3144;HANGUL LETTER PIEUP-SIOS;Lo;0;L;<compat> 1121;;;;N;HANGUL LETTER BIEUB SIOS;;;;
+3145;HANGUL LETTER SIOS;Lo;0;L;<compat> 1109;;;;N;;;;;
+3146;HANGUL LETTER SSANGSIOS;Lo;0;L;<compat> 110A;;;;N;HANGUL LETTER SSANG SIOS;;;;
+3147;HANGUL LETTER IEUNG;Lo;0;L;<compat> 110B;;;;N;;;;;
+3148;HANGUL LETTER CIEUC;Lo;0;L;<compat> 110C;;;;N;HANGUL LETTER JIEUJ;;;;
+3149;HANGUL LETTER SSANGCIEUC;Lo;0;L;<compat> 110D;;;;N;HANGUL LETTER SSANG JIEUJ;;;;
+314A;HANGUL LETTER CHIEUCH;Lo;0;L;<compat> 110E;;;;N;HANGUL LETTER CIEUC;;;;
+314B;HANGUL LETTER KHIEUKH;Lo;0;L;<compat> 110F;;;;N;HANGUL LETTER KIYEOK;;;;
+314C;HANGUL LETTER THIEUTH;Lo;0;L;<compat> 1110;;;;N;HANGUL LETTER TIEUT;;;;
+314D;HANGUL LETTER PHIEUPH;Lo;0;L;<compat> 1111;;;;N;HANGUL LETTER PIEUP;;;;
+314E;HANGUL LETTER HIEUH;Lo;0;L;<compat> 1112;;;;N;;;;;
+314F;HANGUL LETTER A;Lo;0;L;<compat> 1161;;;;N;;;;;
+3150;HANGUL LETTER AE;Lo;0;L;<compat> 1162;;;;N;;;;;
+3151;HANGUL LETTER YA;Lo;0;L;<compat> 1163;;;;N;;;;;
+3152;HANGUL LETTER YAE;Lo;0;L;<compat> 1164;;;;N;;;;;
+3153;HANGUL LETTER EO;Lo;0;L;<compat> 1165;;;;N;;;;;
+3154;HANGUL LETTER E;Lo;0;L;<compat> 1166;;;;N;;;;;
+3155;HANGUL LETTER YEO;Lo;0;L;<compat> 1167;;;;N;;;;;
+3156;HANGUL LETTER YE;Lo;0;L;<compat> 1168;;;;N;;;;;
+3157;HANGUL LETTER O;Lo;0;L;<compat> 1169;;;;N;;;;;
+3158;HANGUL LETTER WA;Lo;0;L;<compat> 116A;;;;N;;;;;
+3159;HANGUL LETTER WAE;Lo;0;L;<compat> 116B;;;;N;;;;;
+315A;HANGUL LETTER OE;Lo;0;L;<compat> 116C;;;;N;;;;;
+315B;HANGUL LETTER YO;Lo;0;L;<compat> 116D;;;;N;;;;;
+315C;HANGUL LETTER U;Lo;0;L;<compat> 116E;;;;N;;;;;
+315D;HANGUL LETTER WEO;Lo;0;L;<compat> 116F;;;;N;;;;;
+315E;HANGUL LETTER WE;Lo;0;L;<compat> 1170;;;;N;;;;;
+315F;HANGUL LETTER WI;Lo;0;L;<compat> 1171;;;;N;;;;;
+3160;HANGUL LETTER YU;Lo;0;L;<compat> 1172;;;;N;;;;;
+3161;HANGUL LETTER EU;Lo;0;L;<compat> 1173;;;;N;;;;;
+3162;HANGUL LETTER YI;Lo;0;L;<compat> 1174;;;;N;;;;;
+3163;HANGUL LETTER I;Lo;0;L;<compat> 1175;;;;N;;;;;
+3164;HANGUL FILLER;Lo;0;L;<compat> 1160;;;;N;HANGUL CAE OM;;;;
+3165;HANGUL LETTER SSANGNIEUN;Lo;0;L;<compat> 1114;;;;N;HANGUL LETTER SSANG NIEUN;;;;
+3166;HANGUL LETTER NIEUN-TIKEUT;Lo;0;L;<compat> 1115;;;;N;HANGUL LETTER NIEUN DIGEUD;;;;
+3167;HANGUL LETTER NIEUN-SIOS;Lo;0;L;<compat> 11C7;;;;N;HANGUL LETTER NIEUN SIOS;;;;
+3168;HANGUL LETTER NIEUN-PANSIOS;Lo;0;L;<compat> 11C8;;;;N;HANGUL LETTER NIEUN BAN CHI EUM;;;;
+3169;HANGUL LETTER RIEUL-KIYEOK-SIOS;Lo;0;L;<compat> 11CC;;;;N;HANGUL LETTER LIEUL GIYEOG SIOS;;;;
+316A;HANGUL LETTER RIEUL-TIKEUT;Lo;0;L;<compat> 11CE;;;;N;HANGUL LETTER LIEUL DIGEUD;;;;
+316B;HANGUL LETTER RIEUL-PIEUP-SIOS;Lo;0;L;<compat> 11D3;;;;N;HANGUL LETTER LIEUL BIEUB SIOS;;;;
+316C;HANGUL LETTER RIEUL-PANSIOS;Lo;0;L;<compat> 11D7;;;;N;HANGUL LETTER LIEUL BAN CHI EUM;;;;
+316D;HANGUL LETTER RIEUL-YEORINHIEUH;Lo;0;L;<compat> 11D9;;;;N;HANGUL LETTER LIEUL YEOLIN HIEUH;;;;
+316E;HANGUL LETTER MIEUM-PIEUP;Lo;0;L;<compat> 111C;;;;N;HANGUL LETTER MIEUM BIEUB;;;;
+316F;HANGUL LETTER MIEUM-SIOS;Lo;0;L;<compat> 11DD;;;;N;HANGUL LETTER MIEUM SIOS;;;;
+3170;HANGUL LETTER MIEUM-PANSIOS;Lo;0;L;<compat> 11DF;;;;N;HANGUL LETTER BIEUB BAN CHI EUM;;;;
+3171;HANGUL LETTER KAPYEOUNMIEUM;Lo;0;L;<compat> 111D;;;;N;HANGUL LETTER MIEUM SUN GYEONG EUM;;;;
+3172;HANGUL LETTER PIEUP-KIYEOK;Lo;0;L;<compat> 111E;;;;N;HANGUL LETTER BIEUB GIYEOG;;;;
+3173;HANGUL LETTER PIEUP-TIKEUT;Lo;0;L;<compat> 1120;;;;N;HANGUL LETTER BIEUB DIGEUD;;;;
+3174;HANGUL LETTER PIEUP-SIOS-KIYEOK;Lo;0;L;<compat> 1122;;;;N;HANGUL LETTER BIEUB SIOS GIYEOG;;;;
+3175;HANGUL LETTER PIEUP-SIOS-TIKEUT;Lo;0;L;<compat> 1123;;;;N;HANGUL LETTER BIEUB SIOS DIGEUD;;;;
+3176;HANGUL LETTER PIEUP-CIEUC;Lo;0;L;<compat> 1127;;;;N;HANGUL LETTER BIEUB JIEUJ;;;;
+3177;HANGUL LETTER PIEUP-THIEUTH;Lo;0;L;<compat> 1129;;;;N;HANGUL LETTER BIEUB TIEUT;;;;
+3178;HANGUL LETTER KAPYEOUNPIEUP;Lo;0;L;<compat> 112B;;;;N;HANGUL LETTER BIEUB SUN GYEONG EUM;;;;
+3179;HANGUL LETTER KAPYEOUNSSANGPIEUP;Lo;0;L;<compat> 112C;;;;N;HANGUL LETTER SSANG BIEUB SUN GYEONG EUM;;;;
+317A;HANGUL LETTER SIOS-KIYEOK;Lo;0;L;<compat> 112D;;;;N;HANGUL LETTER SIOS GIYEOG;;;;
+317B;HANGUL LETTER SIOS-NIEUN;Lo;0;L;<compat> 112E;;;;N;HANGUL LETTER SIOS NIEUN;;;;
+317C;HANGUL LETTER SIOS-TIKEUT;Lo;0;L;<compat> 112F;;;;N;HANGUL LETTER SIOS DIGEUD;;;;
+317D;HANGUL LETTER SIOS-PIEUP;Lo;0;L;<compat> 1132;;;;N;HANGUL LETTER SIOS BIEUB;;;;
+317E;HANGUL LETTER SIOS-CIEUC;Lo;0;L;<compat> 1136;;;;N;HANGUL LETTER SIOS JIEUJ;;;;
+317F;HANGUL LETTER PANSIOS;Lo;0;L;<compat> 1140;;;;N;HANGUL LETTER BAN CHI EUM;;;;
+3180;HANGUL LETTER SSANGIEUNG;Lo;0;L;<compat> 1147;;;;N;HANGUL LETTER SSANG IEUNG;;;;
+3181;HANGUL LETTER YESIEUNG;Lo;0;L;<compat> 114C;;;;N;HANGUL LETTER NGIEUNG;;;;
+3182;HANGUL LETTER YESIEUNG-SIOS;Lo;0;L;<compat> 11F1;;;;N;HANGUL LETTER NGIEUNG SIOS;;;;
+3183;HANGUL LETTER YESIEUNG-PANSIOS;Lo;0;L;<compat> 11F2;;;;N;HANGUL LETTER NGIEUNG BAN CHI EUM;;;;
+3184;HANGUL LETTER KAPYEOUNPHIEUPH;Lo;0;L;<compat> 1157;;;;N;HANGUL LETTER PIEUP SUN GYEONG EUM;;;;
+3185;HANGUL LETTER SSANGHIEUH;Lo;0;L;<compat> 1158;;;;N;HANGUL LETTER SSANG HIEUH;;;;
+3186;HANGUL LETTER YEORINHIEUH;Lo;0;L;<compat> 1159;;;;N;HANGUL LETTER YEOLIN HIEUH;;;;
+3187;HANGUL LETTER YO-YA;Lo;0;L;<compat> 1184;;;;N;HANGUL LETTER YOYA;;;;
+3188;HANGUL LETTER YO-YAE;Lo;0;L;<compat> 1185;;;;N;HANGUL LETTER YOYAE;;;;
+3189;HANGUL LETTER YO-I;Lo;0;L;<compat> 1188;;;;N;HANGUL LETTER YOI;;;;
+318A;HANGUL LETTER YU-YEO;Lo;0;L;<compat> 1191;;;;N;HANGUL LETTER YUYEO;;;;
+318B;HANGUL LETTER YU-YE;Lo;0;L;<compat> 1192;;;;N;HANGUL LETTER YUYE;;;;
+318C;HANGUL LETTER YU-I;Lo;0;L;<compat> 1194;;;;N;HANGUL LETTER YUI;;;;
+318D;HANGUL LETTER ARAEA;Lo;0;L;<compat> 119E;;;;N;HANGUL LETTER ALAE A;;;;
+318E;HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
+3190;IDEOGRAPHIC ANNOTATION LINKING MARK;So;0;L;;;;;N;KANBUN TATETEN;Kanbun Tateten;;;
+3191;IDEOGRAPHIC ANNOTATION REVERSE MARK;So;0;L;;;;;N;KAERITEN RE;Kaeriten;;;
+3192;IDEOGRAPHIC ANNOTATION ONE MARK;No;0;L;<super> 4E00;;;;N;KAERITEN ITI;Kaeriten;;;
+3193;IDEOGRAPHIC ANNOTATION TWO MARK;No;0;L;<super> 4E8C;;;;N;KAERITEN NI;Kaeriten;;;
+3194;IDEOGRAPHIC ANNOTATION THREE MARK;No;0;L;<super> 4E09;;;;N;KAERITEN SAN;Kaeriten;;;
+3195;IDEOGRAPHIC ANNOTATION FOUR MARK;No;0;L;<super> 56DB;;;;N;KAERITEN SI;Kaeriten;;;
+3196;IDEOGRAPHIC ANNOTATION TOP MARK;So;0;L;<super> 4E0A;;;;N;KAERITEN ZYOU;Kaeriten;;;
+3197;IDEOGRAPHIC ANNOTATION MIDDLE MARK;So;0;L;<super> 4E2D;;;;N;KAERITEN TYUU;Kaeriten;;;
+3198;IDEOGRAPHIC ANNOTATION BOTTOM MARK;So;0;L;<super> 4E0B;;;;N;KAERITEN GE;Kaeriten;;;
+3199;IDEOGRAPHIC ANNOTATION FIRST MARK;So;0;L;<super> 7532;;;;N;KAERITEN KOU;Kaeriten;;;
+319A;IDEOGRAPHIC ANNOTATION SECOND MARK;So;0;L;<super> 4E59;;;;N;KAERITEN OTU;Kaeriten;;;
+319B;IDEOGRAPHIC ANNOTATION THIRD MARK;So;0;L;<super> 4E19;;;;N;KAERITEN HEI;Kaeriten;;;
+319C;IDEOGRAPHIC ANNOTATION FOURTH MARK;So;0;L;<super> 4E01;;;;N;KAERITEN TEI;Kaeriten;;;
+319D;IDEOGRAPHIC ANNOTATION HEAVEN MARK;So;0;L;<super> 5929;;;;N;KAERITEN TEN;Kaeriten;;;
+319E;IDEOGRAPHIC ANNOTATION EARTH MARK;So;0;L;<super> 5730;;;;N;KAERITEN TI;Kaeriten;;;
+319F;IDEOGRAPHIC ANNOTATION MAN MARK;So;0;L;<super> 4EBA;;;;N;KAERITEN ZIN;Kaeriten;;;
+31A0;BOPOMOFO LETTER BU;Lo;0;L;;;;;N;;;;;
+31A1;BOPOMOFO LETTER ZI;Lo;0;L;;;;;N;;;;;
+31A2;BOPOMOFO LETTER JI;Lo;0;L;;;;;N;;;;;
+31A3;BOPOMOFO LETTER GU;Lo;0;L;;;;;N;;;;;
+31A4;BOPOMOFO LETTER EE;Lo;0;L;;;;;N;;;;;
+31A5;BOPOMOFO LETTER ENN;Lo;0;L;;;;;N;;;;;
+31A6;BOPOMOFO LETTER OO;Lo;0;L;;;;;N;;;;;
+31A7;BOPOMOFO LETTER ONN;Lo;0;L;;;;;N;;;;;
+31A8;BOPOMOFO LETTER IR;Lo;0;L;;;;;N;;;;;
+31A9;BOPOMOFO LETTER ANN;Lo;0;L;;;;;N;;;;;
+31AA;BOPOMOFO LETTER INN;Lo;0;L;;;;;N;;;;;
+31AB;BOPOMOFO LETTER UNN;Lo;0;L;;;;;N;;;;;
+31AC;BOPOMOFO LETTER IM;Lo;0;L;;;;;N;;;;;
+31AD;BOPOMOFO LETTER NGG;Lo;0;L;;;;;N;;;;;
+31AE;BOPOMOFO LETTER AINN;Lo;0;L;;;;;N;;;;;
+31AF;BOPOMOFO LETTER AUNN;Lo;0;L;;;;;N;;;;;
+31B0;BOPOMOFO LETTER AM;Lo;0;L;;;;;N;;;;;
+31B1;BOPOMOFO LETTER OM;Lo;0;L;;;;;N;;;;;
+31B2;BOPOMOFO LETTER ONG;Lo;0;L;;;;;N;;;;;
+31B3;BOPOMOFO LETTER INNN;Lo;0;L;;;;;N;;;;;
+31B4;BOPOMOFO FINAL LETTER P;Lo;0;L;;;;;N;;;;;
+31B5;BOPOMOFO FINAL LETTER T;Lo;0;L;;;;;N;;;;;
+31B6;BOPOMOFO FINAL LETTER K;Lo;0;L;;;;;N;;;;;
+31B7;BOPOMOFO FINAL LETTER H;Lo;0;L;;;;;N;;;;;
+3200;PARENTHESIZED HANGUL KIYEOK;So;0;L;<compat> 0028 1100 0029;;;;N;PARENTHESIZED HANGUL GIYEOG;;;;
+3201;PARENTHESIZED HANGUL NIEUN;So;0;L;<compat> 0028 1102 0029;;;;N;;;;;
+3202;PARENTHESIZED HANGUL TIKEUT;So;0;L;<compat> 0028 1103 0029;;;;N;PARENTHESIZED HANGUL DIGEUD;;;;
+3203;PARENTHESIZED HANGUL RIEUL;So;0;L;<compat> 0028 1105 0029;;;;N;PARENTHESIZED HANGUL LIEUL;;;;
+3204;PARENTHESIZED HANGUL MIEUM;So;0;L;<compat> 0028 1106 0029;;;;N;;;;;
+3205;PARENTHESIZED HANGUL PIEUP;So;0;L;<compat> 0028 1107 0029;;;;N;PARENTHESIZED HANGUL BIEUB;;;;
+3206;PARENTHESIZED HANGUL SIOS;So;0;L;<compat> 0028 1109 0029;;;;N;;;;;
+3207;PARENTHESIZED HANGUL IEUNG;So;0;L;<compat> 0028 110B 0029;;;;N;;;;;
+3208;PARENTHESIZED HANGUL CIEUC;So;0;L;<compat> 0028 110C 0029;;;;N;PARENTHESIZED HANGUL JIEUJ;;;;
+3209;PARENTHESIZED HANGUL CHIEUCH;So;0;L;<compat> 0028 110E 0029;;;;N;PARENTHESIZED HANGUL CIEUC;;;;
+320A;PARENTHESIZED HANGUL KHIEUKH;So;0;L;<compat> 0028 110F 0029;;;;N;PARENTHESIZED HANGUL KIYEOK;;;;
+320B;PARENTHESIZED HANGUL THIEUTH;So;0;L;<compat> 0028 1110 0029;;;;N;PARENTHESIZED HANGUL TIEUT;;;;
+320C;PARENTHESIZED HANGUL PHIEUPH;So;0;L;<compat> 0028 1111 0029;;;;N;PARENTHESIZED HANGUL PIEUP;;;;
+320D;PARENTHESIZED HANGUL HIEUH;So;0;L;<compat> 0028 1112 0029;;;;N;;;;;
+320E;PARENTHESIZED HANGUL KIYEOK A;So;0;L;<compat> 0028 1100 1161 0029;;;;N;PARENTHESIZED HANGUL GA;;;;
+320F;PARENTHESIZED HANGUL NIEUN A;So;0;L;<compat> 0028 1102 1161 0029;;;;N;PARENTHESIZED HANGUL NA;;;;
+3210;PARENTHESIZED HANGUL TIKEUT A;So;0;L;<compat> 0028 1103 1161 0029;;;;N;PARENTHESIZED HANGUL DA;;;;
+3211;PARENTHESIZED HANGUL RIEUL A;So;0;L;<compat> 0028 1105 1161 0029;;;;N;PARENTHESIZED HANGUL LA;;;;
+3212;PARENTHESIZED HANGUL MIEUM A;So;0;L;<compat> 0028 1106 1161 0029;;;;N;PARENTHESIZED HANGUL MA;;;;
+3213;PARENTHESIZED HANGUL PIEUP A;So;0;L;<compat> 0028 1107 1161 0029;;;;N;PARENTHESIZED HANGUL BA;;;;
+3214;PARENTHESIZED HANGUL SIOS A;So;0;L;<compat> 0028 1109 1161 0029;;;;N;PARENTHESIZED HANGUL SA;;;;
+3215;PARENTHESIZED HANGUL IEUNG A;So;0;L;<compat> 0028 110B 1161 0029;;;;N;PARENTHESIZED HANGUL A;;;;
+3216;PARENTHESIZED HANGUL CIEUC A;So;0;L;<compat> 0028 110C 1161 0029;;;;N;PARENTHESIZED HANGUL JA;;;;
+3217;PARENTHESIZED HANGUL CHIEUCH A;So;0;L;<compat> 0028 110E 1161 0029;;;;N;PARENTHESIZED HANGUL CA;;;;
+3218;PARENTHESIZED HANGUL KHIEUKH A;So;0;L;<compat> 0028 110F 1161 0029;;;;N;PARENTHESIZED HANGUL KA;;;;
+3219;PARENTHESIZED HANGUL THIEUTH A;So;0;L;<compat> 0028 1110 1161 0029;;;;N;PARENTHESIZED HANGUL TA;;;;
+321A;PARENTHESIZED HANGUL PHIEUPH A;So;0;L;<compat> 0028 1111 1161 0029;;;;N;PARENTHESIZED HANGUL PA;;;;
+321B;PARENTHESIZED HANGUL HIEUH A;So;0;L;<compat> 0028 1112 1161 0029;;;;N;PARENTHESIZED HANGUL HA;;;;
+321C;PARENTHESIZED HANGUL CIEUC U;So;0;L;<compat> 0028 110C 116E 0029;;;;N;PARENTHESIZED HANGUL JU;;;;
+3220;PARENTHESIZED IDEOGRAPH ONE;No;0;L;<compat> 0028 4E00 0029;;;;N;;;;;
+3221;PARENTHESIZED IDEOGRAPH TWO;No;0;L;<compat> 0028 4E8C 0029;;;;N;;;;;
+3222;PARENTHESIZED IDEOGRAPH THREE;No;0;L;<compat> 0028 4E09 0029;;;;N;;;;;
+3223;PARENTHESIZED IDEOGRAPH FOUR;No;0;L;<compat> 0028 56DB 0029;;;;N;;;;;
+3224;PARENTHESIZED IDEOGRAPH FIVE;No;0;L;<compat> 0028 4E94 0029;;;;N;;;;;
+3225;PARENTHESIZED IDEOGRAPH SIX;No;0;L;<compat> 0028 516D 0029;;;;N;;;;;
+3226;PARENTHESIZED IDEOGRAPH SEVEN;No;0;L;<compat> 0028 4E03 0029;;;;N;;;;;
+3227;PARENTHESIZED IDEOGRAPH EIGHT;No;0;L;<compat> 0028 516B 0029;;;;N;;;;;
+3228;PARENTHESIZED IDEOGRAPH NINE;No;0;L;<compat> 0028 4E5D 0029;;;;N;;;;;
+3229;PARENTHESIZED IDEOGRAPH TEN;No;0;L;<compat> 0028 5341 0029;;;;N;;;;;
+322A;PARENTHESIZED IDEOGRAPH MOON;So;0;L;<compat> 0028 6708 0029;;;;N;;;;;
+322B;PARENTHESIZED IDEOGRAPH FIRE;So;0;L;<compat> 0028 706B 0029;;;;N;;;;;
+322C;PARENTHESIZED IDEOGRAPH WATER;So;0;L;<compat> 0028 6C34 0029;;;;N;;;;;
+322D;PARENTHESIZED IDEOGRAPH WOOD;So;0;L;<compat> 0028 6728 0029;;;;N;;;;;
+322E;PARENTHESIZED IDEOGRAPH METAL;So;0;L;<compat> 0028 91D1 0029;;;;N;;;;;
+322F;PARENTHESIZED IDEOGRAPH EARTH;So;0;L;<compat> 0028 571F 0029;;;;N;;;;;
+3230;PARENTHESIZED IDEOGRAPH SUN;So;0;L;<compat> 0028 65E5 0029;;;;N;;;;;
+3231;PARENTHESIZED IDEOGRAPH STOCK;So;0;L;<compat> 0028 682A 0029;;;;N;;;;;
+3232;PARENTHESIZED IDEOGRAPH HAVE;So;0;L;<compat> 0028 6709 0029;;;;N;;;;;
+3233;PARENTHESIZED IDEOGRAPH SOCIETY;So;0;L;<compat> 0028 793E 0029;;;;N;;;;;
+3234;PARENTHESIZED IDEOGRAPH NAME;So;0;L;<compat> 0028 540D 0029;;;;N;;;;;
+3235;PARENTHESIZED IDEOGRAPH SPECIAL;So;0;L;<compat> 0028 7279 0029;;;;N;;;;;
+3236;PARENTHESIZED IDEOGRAPH FINANCIAL;So;0;L;<compat> 0028 8CA1 0029;;;;N;;;;;
+3237;PARENTHESIZED IDEOGRAPH CONGRATULATION;So;0;L;<compat> 0028 795D 0029;;;;N;;;;;
+3238;PARENTHESIZED IDEOGRAPH LABOR;So;0;L;<compat> 0028 52B4 0029;;;;N;;;;;
+3239;PARENTHESIZED IDEOGRAPH REPRESENT;So;0;L;<compat> 0028 4EE3 0029;;;;N;;;;;
+323A;PARENTHESIZED IDEOGRAPH CALL;So;0;L;<compat> 0028 547C 0029;;;;N;;;;;
+323B;PARENTHESIZED IDEOGRAPH STUDY;So;0;L;<compat> 0028 5B66 0029;;;;N;;;;;
+323C;PARENTHESIZED IDEOGRAPH SUPERVISE;So;0;L;<compat> 0028 76E3 0029;;;;N;;;;;
+323D;PARENTHESIZED IDEOGRAPH ENTERPRISE;So;0;L;<compat> 0028 4F01 0029;;;;N;;;;;
+323E;PARENTHESIZED IDEOGRAPH RESOURCE;So;0;L;<compat> 0028 8CC7 0029;;;;N;;;;;
+323F;PARENTHESIZED IDEOGRAPH ALLIANCE;So;0;L;<compat> 0028 5354 0029;;;;N;;;;;
+3240;PARENTHESIZED IDEOGRAPH FESTIVAL;So;0;L;<compat> 0028 796D 0029;;;;N;;;;;
+3241;PARENTHESIZED IDEOGRAPH REST;So;0;L;<compat> 0028 4F11 0029;;;;N;;;;;
+3242;PARENTHESIZED IDEOGRAPH SELF;So;0;L;<compat> 0028 81EA 0029;;;;N;;;;;
+3243;PARENTHESIZED IDEOGRAPH REACH;So;0;L;<compat> 0028 81F3 0029;;;;N;;;;;
+3260;CIRCLED HANGUL KIYEOK;So;0;L;<circle> 1100;;;;N;CIRCLED HANGUL GIYEOG;;;;
+3261;CIRCLED HANGUL NIEUN;So;0;L;<circle> 1102;;;;N;;;;;
+3262;CIRCLED HANGUL TIKEUT;So;0;L;<circle> 1103;;;;N;CIRCLED HANGUL DIGEUD;;;;
+3263;CIRCLED HANGUL RIEUL;So;0;L;<circle> 1105;;;;N;CIRCLED HANGUL LIEUL;;;;
+3264;CIRCLED HANGUL MIEUM;So;0;L;<circle> 1106;;;;N;;;;;
+3265;CIRCLED HANGUL PIEUP;So;0;L;<circle> 1107;;;;N;CIRCLED HANGUL BIEUB;;;;
+3266;CIRCLED HANGUL SIOS;So;0;L;<circle> 1109;;;;N;;;;;
+3267;CIRCLED HANGUL IEUNG;So;0;L;<circle> 110B;;;;N;;;;;
+3268;CIRCLED HANGUL CIEUC;So;0;L;<circle> 110C;;;;N;CIRCLED HANGUL JIEUJ;;;;
+3269;CIRCLED HANGUL CHIEUCH;So;0;L;<circle> 110E;;;;N;CIRCLED HANGUL CIEUC;;;;
+326A;CIRCLED HANGUL KHIEUKH;So;0;L;<circle> 110F;;;;N;CIRCLED HANGUL KIYEOK;;;;
+326B;CIRCLED HANGUL THIEUTH;So;0;L;<circle> 1110;;;;N;CIRCLED HANGUL TIEUT;;;;
+326C;CIRCLED HANGUL PHIEUPH;So;0;L;<circle> 1111;;;;N;CIRCLED HANGUL PIEUP;;;;
+326D;CIRCLED HANGUL HIEUH;So;0;L;<circle> 1112;;;;N;;;;;
+326E;CIRCLED HANGUL KIYEOK A;So;0;L;<circle> 1100 1161;;;;N;CIRCLED HANGUL GA;;;;
+326F;CIRCLED HANGUL NIEUN A;So;0;L;<circle> 1102 1161;;;;N;CIRCLED HANGUL NA;;;;
+3270;CIRCLED HANGUL TIKEUT A;So;0;L;<circle> 1103 1161;;;;N;CIRCLED HANGUL DA;;;;
+3271;CIRCLED HANGUL RIEUL A;So;0;L;<circle> 1105 1161;;;;N;CIRCLED HANGUL LA;;;;
+3272;CIRCLED HANGUL MIEUM A;So;0;L;<circle> 1106 1161;;;;N;CIRCLED HANGUL MA;;;;
+3273;CIRCLED HANGUL PIEUP A;So;0;L;<circle> 1107 1161;;;;N;CIRCLED HANGUL BA;;;;
+3274;CIRCLED HANGUL SIOS A;So;0;L;<circle> 1109 1161;;;;N;CIRCLED HANGUL SA;;;;
+3275;CIRCLED HANGUL IEUNG A;So;0;L;<circle> 110B 1161;;;;N;CIRCLED HANGUL A;;;;
+3276;CIRCLED HANGUL CIEUC A;So;0;L;<circle> 110C 1161;;;;N;CIRCLED HANGUL JA;;;;
+3277;CIRCLED HANGUL CHIEUCH A;So;0;L;<circle> 110E 1161;;;;N;CIRCLED HANGUL CA;;;;
+3278;CIRCLED HANGUL KHIEUKH A;So;0;L;<circle> 110F 1161;;;;N;CIRCLED HANGUL KA;;;;
+3279;CIRCLED HANGUL THIEUTH A;So;0;L;<circle> 1110 1161;;;;N;CIRCLED HANGUL TA;;;;
+327A;CIRCLED HANGUL PHIEUPH A;So;0;L;<circle> 1111 1161;;;;N;CIRCLED HANGUL PA;;;;
+327B;CIRCLED HANGUL HIEUH A;So;0;L;<circle> 1112 1161;;;;N;CIRCLED HANGUL HA;;;;
+327F;KOREAN STANDARD SYMBOL;So;0;L;;;;;N;;;;;
+3280;CIRCLED IDEOGRAPH ONE;No;0;L;<circle> 4E00;;;1;N;;;;;
+3281;CIRCLED IDEOGRAPH TWO;No;0;L;<circle> 4E8C;;;2;N;;;;;
+3282;CIRCLED IDEOGRAPH THREE;No;0;L;<circle> 4E09;;;3;N;;;;;
+3283;CIRCLED IDEOGRAPH FOUR;No;0;L;<circle> 56DB;;;4;N;;;;;
+3284;CIRCLED IDEOGRAPH FIVE;No;0;L;<circle> 4E94;;;5;N;;;;;
+3285;CIRCLED IDEOGRAPH SIX;No;0;L;<circle> 516D;;;6;N;;;;;
+3286;CIRCLED IDEOGRAPH SEVEN;No;0;L;<circle> 4E03;;;7;N;;;;;
+3287;CIRCLED IDEOGRAPH EIGHT;No;0;L;<circle> 516B;;;8;N;;;;;
+3288;CIRCLED IDEOGRAPH NINE;No;0;L;<circle> 4E5D;;;9;N;;;;;
+3289;CIRCLED IDEOGRAPH TEN;No;0;L;<circle> 5341;;;10;N;;;;;
+328A;CIRCLED IDEOGRAPH MOON;So;0;L;<circle> 6708;;;;N;;;;;
+328B;CIRCLED IDEOGRAPH FIRE;So;0;L;<circle> 706B;;;;N;;;;;
+328C;CIRCLED IDEOGRAPH WATER;So;0;L;<circle> 6C34;;;;N;;;;;
+328D;CIRCLED IDEOGRAPH WOOD;So;0;L;<circle> 6728;;;;N;;;;;
+328E;CIRCLED IDEOGRAPH METAL;So;0;L;<circle> 91D1;;;;N;;;;;
+328F;CIRCLED IDEOGRAPH EARTH;So;0;L;<circle> 571F;;;;N;;;;;
+3290;CIRCLED IDEOGRAPH SUN;So;0;L;<circle> 65E5;;;;N;;;;;
+3291;CIRCLED IDEOGRAPH STOCK;So;0;L;<circle> 682A;;;;N;;;;;
+3292;CIRCLED IDEOGRAPH HAVE;So;0;L;<circle> 6709;;;;N;;;;;
+3293;CIRCLED IDEOGRAPH SOCIETY;So;0;L;<circle> 793E;;;;N;;;;;
+3294;CIRCLED IDEOGRAPH NAME;So;0;L;<circle> 540D;;;;N;;;;;
+3295;CIRCLED IDEOGRAPH SPECIAL;So;0;L;<circle> 7279;;;;N;;;;;
+3296;CIRCLED IDEOGRAPH FINANCIAL;So;0;L;<circle> 8CA1;;;;N;;;;;
+3297;CIRCLED IDEOGRAPH CONGRATULATION;So;0;L;<circle> 795D;;;;N;;;;;
+3298;CIRCLED IDEOGRAPH LABOR;So;0;L;<circle> 52B4;;;;N;;;;;
+3299;CIRCLED IDEOGRAPH SECRET;So;0;L;<circle> 79D8;;;;N;;;;;
+329A;CIRCLED IDEOGRAPH MALE;So;0;L;<circle> 7537;;;;N;;;;;
+329B;CIRCLED IDEOGRAPH FEMALE;So;0;L;<circle> 5973;;;;N;;;;;
+329C;CIRCLED IDEOGRAPH SUITABLE;So;0;L;<circle> 9069;;;;N;;;;;
+329D;CIRCLED IDEOGRAPH EXCELLENT;So;0;L;<circle> 512A;;;;N;;;;;
+329E;CIRCLED IDEOGRAPH PRINT;So;0;L;<circle> 5370;;;;N;;;;;
+329F;CIRCLED IDEOGRAPH ATTENTION;So;0;L;<circle> 6CE8;;;;N;;;;;
+32A0;CIRCLED IDEOGRAPH ITEM;So;0;L;<circle> 9805;;;;N;;;;;
+32A1;CIRCLED IDEOGRAPH REST;So;0;L;<circle> 4F11;;;;N;;;;;
+32A2;CIRCLED IDEOGRAPH COPY;So;0;L;<circle> 5199;;;;N;;;;;
+32A3;CIRCLED IDEOGRAPH CORRECT;So;0;L;<circle> 6B63;;;;N;;;;;
+32A4;CIRCLED IDEOGRAPH HIGH;So;0;L;<circle> 4E0A;;;;N;;;;;
+32A5;CIRCLED IDEOGRAPH CENTRE;So;0;L;<circle> 4E2D;;;;N;CIRCLED IDEOGRAPH CENTER;;;;
+32A6;CIRCLED IDEOGRAPH LOW;So;0;L;<circle> 4E0B;;;;N;;;;;
+32A7;CIRCLED IDEOGRAPH LEFT;So;0;L;<circle> 5DE6;;;;N;;;;;
+32A8;CIRCLED IDEOGRAPH RIGHT;So;0;L;<circle> 53F3;;;;N;;;;;
+32A9;CIRCLED IDEOGRAPH MEDICINE;So;0;L;<circle> 533B;;;;N;;;;;
+32AA;CIRCLED IDEOGRAPH RELIGION;So;0;L;<circle> 5B97;;;;N;;;;;
+32AB;CIRCLED IDEOGRAPH STUDY;So;0;L;<circle> 5B66;;;;N;;;;;
+32AC;CIRCLED IDEOGRAPH SUPERVISE;So;0;L;<circle> 76E3;;;;N;;;;;
+32AD;CIRCLED IDEOGRAPH ENTERPRISE;So;0;L;<circle> 4F01;;;;N;;;;;
+32AE;CIRCLED IDEOGRAPH RESOURCE;So;0;L;<circle> 8CC7;;;;N;;;;;
+32AF;CIRCLED IDEOGRAPH ALLIANCE;So;0;L;<circle> 5354;;;;N;;;;;
+32B0;CIRCLED IDEOGRAPH NIGHT;So;0;L;<circle> 591C;;;;N;;;;;
+32C0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JANUARY;So;0;L;<compat> 0031 6708;;;;N;;;;;
+32C1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR FEBRUARY;So;0;L;<compat> 0032 6708;;;;N;;;;;
+32C2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MARCH;So;0;L;<compat> 0033 6708;;;;N;;;;;
+32C3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR APRIL;So;0;L;<compat> 0034 6708;;;;N;;;;;
+32C4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR MAY;So;0;L;<compat> 0035 6708;;;;N;;;;;
+32C5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JUNE;So;0;L;<compat> 0036 6708;;;;N;;;;;
+32C6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR JULY;So;0;L;<compat> 0037 6708;;;;N;;;;;
+32C7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR AUGUST;So;0;L;<compat> 0038 6708;;;;N;;;;;
+32C8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR SEPTEMBER;So;0;L;<compat> 0039 6708;;;;N;;;;;
+32C9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR OCTOBER;So;0;L;<compat> 0031 0030 6708;;;;N;;;;;
+32CA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR NOVEMBER;So;0;L;<compat> 0031 0031 6708;;;;N;;;;;
+32CB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DECEMBER;So;0;L;<compat> 0031 0032 6708;;;;N;;;;;
+32D0;CIRCLED KATAKANA A;So;0;L;<circle> 30A2;;;;N;;;;;
+32D1;CIRCLED KATAKANA I;So;0;L;<circle> 30A4;;;;N;;;;;
+32D2;CIRCLED KATAKANA U;So;0;L;<circle> 30A6;;;;N;;;;;
+32D3;CIRCLED KATAKANA E;So;0;L;<circle> 30A8;;;;N;;;;;
+32D4;CIRCLED KATAKANA O;So;0;L;<circle> 30AA;;;;N;;;;;
+32D5;CIRCLED KATAKANA KA;So;0;L;<circle> 30AB;;;;N;;;;;
+32D6;CIRCLED KATAKANA KI;So;0;L;<circle> 30AD;;;;N;;;;;
+32D7;CIRCLED KATAKANA KU;So;0;L;<circle> 30AF;;;;N;;;;;
+32D8;CIRCLED KATAKANA KE;So;0;L;<circle> 30B1;;;;N;;;;;
+32D9;CIRCLED KATAKANA KO;So;0;L;<circle> 30B3;;;;N;;;;;
+32DA;CIRCLED KATAKANA SA;So;0;L;<circle> 30B5;;;;N;;;;;
+32DB;CIRCLED KATAKANA SI;So;0;L;<circle> 30B7;;;;N;;;;;
+32DC;CIRCLED KATAKANA SU;So;0;L;<circle> 30B9;;;;N;;;;;
+32DD;CIRCLED KATAKANA SE;So;0;L;<circle> 30BB;;;;N;;;;;
+32DE;CIRCLED KATAKANA SO;So;0;L;<circle> 30BD;;;;N;;;;;
+32DF;CIRCLED KATAKANA TA;So;0;L;<circle> 30BF;;;;N;;;;;
+32E0;CIRCLED KATAKANA TI;So;0;L;<circle> 30C1;;;;N;;;;;
+32E1;CIRCLED KATAKANA TU;So;0;L;<circle> 30C4;;;;N;;;;;
+32E2;CIRCLED KATAKANA TE;So;0;L;<circle> 30C6;;;;N;;;;;
+32E3;CIRCLED KATAKANA TO;So;0;L;<circle> 30C8;;;;N;;;;;
+32E4;CIRCLED KATAKANA NA;So;0;L;<circle> 30CA;;;;N;;;;;
+32E5;CIRCLED KATAKANA NI;So;0;L;<circle> 30CB;;;;N;;;;;
+32E6;CIRCLED KATAKANA NU;So;0;L;<circle> 30CC;;;;N;;;;;
+32E7;CIRCLED KATAKANA NE;So;0;L;<circle> 30CD;;;;N;;;;;
+32E8;CIRCLED KATAKANA NO;So;0;L;<circle> 30CE;;;;N;;;;;
+32E9;CIRCLED KATAKANA HA;So;0;L;<circle> 30CF;;;;N;;;;;
+32EA;CIRCLED KATAKANA HI;So;0;L;<circle> 30D2;;;;N;;;;;
+32EB;CIRCLED KATAKANA HU;So;0;L;<circle> 30D5;;;;N;;;;;
+32EC;CIRCLED KATAKANA HE;So;0;L;<circle> 30D8;;;;N;;;;;
+32ED;CIRCLED KATAKANA HO;So;0;L;<circle> 30DB;;;;N;;;;;
+32EE;CIRCLED KATAKANA MA;So;0;L;<circle> 30DE;;;;N;;;;;
+32EF;CIRCLED KATAKANA MI;So;0;L;<circle> 30DF;;;;N;;;;;
+32F0;CIRCLED KATAKANA MU;So;0;L;<circle> 30E0;;;;N;;;;;
+32F1;CIRCLED KATAKANA ME;So;0;L;<circle> 30E1;;;;N;;;;;
+32F2;CIRCLED KATAKANA MO;So;0;L;<circle> 30E2;;;;N;;;;;
+32F3;CIRCLED KATAKANA YA;So;0;L;<circle> 30E4;;;;N;;;;;
+32F4;CIRCLED KATAKANA YU;So;0;L;<circle> 30E6;;;;N;;;;;
+32F5;CIRCLED KATAKANA YO;So;0;L;<circle> 30E8;;;;N;;;;;
+32F6;CIRCLED KATAKANA RA;So;0;L;<circle> 30E9;;;;N;;;;;
+32F7;CIRCLED KATAKANA RI;So;0;L;<circle> 30EA;;;;N;;;;;
+32F8;CIRCLED KATAKANA RU;So;0;L;<circle> 30EB;;;;N;;;;;
+32F9;CIRCLED KATAKANA RE;So;0;L;<circle> 30EC;;;;N;;;;;
+32FA;CIRCLED KATAKANA RO;So;0;L;<circle> 30ED;;;;N;;;;;
+32FB;CIRCLED KATAKANA WA;So;0;L;<circle> 30EF;;;;N;;;;;
+32FC;CIRCLED KATAKANA WI;So;0;L;<circle> 30F0;;;;N;;;;;
+32FD;CIRCLED KATAKANA WE;So;0;L;<circle> 30F1;;;;N;;;;;
+32FE;CIRCLED KATAKANA WO;So;0;L;<circle> 30F2;;;;N;;;;;
+3300;SQUARE APAATO;So;0;L;<square> 30A2 30D1 30FC 30C8;;;;N;SQUARED APAATO;;;;
+3301;SQUARE ARUHUA;So;0;L;<square> 30A2 30EB 30D5 30A1;;;;N;SQUARED ARUHUA;;;;
+3302;SQUARE ANPEA;So;0;L;<square> 30A2 30F3 30DA 30A2;;;;N;SQUARED ANPEA;;;;
+3303;SQUARE AARU;So;0;L;<square> 30A2 30FC 30EB;;;;N;SQUARED AARU;;;;
+3304;SQUARE ININGU;So;0;L;<square> 30A4 30CB 30F3 30B0;;;;N;SQUARED ININGU;;;;
+3305;SQUARE INTI;So;0;L;<square> 30A4 30F3 30C1;;;;N;SQUARED INTI;;;;
+3306;SQUARE UON;So;0;L;<square> 30A6 30A9 30F3;;;;N;SQUARED UON;;;;
+3307;SQUARE ESUKUUDO;So;0;L;<square> 30A8 30B9 30AF 30FC 30C9;;;;N;SQUARED ESUKUUDO;;;;
+3308;SQUARE EEKAA;So;0;L;<square> 30A8 30FC 30AB 30FC;;;;N;SQUARED EEKAA;;;;
+3309;SQUARE ONSU;So;0;L;<square> 30AA 30F3 30B9;;;;N;SQUARED ONSU;;;;
+330A;SQUARE OOMU;So;0;L;<square> 30AA 30FC 30E0;;;;N;SQUARED OOMU;;;;
+330B;SQUARE KAIRI;So;0;L;<square> 30AB 30A4 30EA;;;;N;SQUARED KAIRI;;;;
+330C;SQUARE KARATTO;So;0;L;<square> 30AB 30E9 30C3 30C8;;;;N;SQUARED KARATTO;;;;
+330D;SQUARE KARORII;So;0;L;<square> 30AB 30ED 30EA 30FC;;;;N;SQUARED KARORII;;;;
+330E;SQUARE GARON;So;0;L;<square> 30AC 30ED 30F3;;;;N;SQUARED GARON;;;;
+330F;SQUARE GANMA;So;0;L;<square> 30AC 30F3 30DE;;;;N;SQUARED GANMA;;;;
+3310;SQUARE GIGA;So;0;L;<square> 30AE 30AC;;;;N;SQUARED GIGA;;;;
+3311;SQUARE GINII;So;0;L;<square> 30AE 30CB 30FC;;;;N;SQUARED GINII;;;;
+3312;SQUARE KYURII;So;0;L;<square> 30AD 30E5 30EA 30FC;;;;N;SQUARED KYURII;;;;
+3313;SQUARE GIRUDAA;So;0;L;<square> 30AE 30EB 30C0 30FC;;;;N;SQUARED GIRUDAA;;;;
+3314;SQUARE KIRO;So;0;L;<square> 30AD 30ED;;;;N;SQUARED KIRO;;;;
+3315;SQUARE KIROGURAMU;So;0;L;<square> 30AD 30ED 30B0 30E9 30E0;;;;N;SQUARED KIROGURAMU;;;;
+3316;SQUARE KIROMEETORU;So;0;L;<square> 30AD 30ED 30E1 30FC 30C8 30EB;;;;N;SQUARED KIROMEETORU;;;;
+3317;SQUARE KIROWATTO;So;0;L;<square> 30AD 30ED 30EF 30C3 30C8;;;;N;SQUARED KIROWATTO;;;;
+3318;SQUARE GURAMU;So;0;L;<square> 30B0 30E9 30E0;;;;N;SQUARED GURAMU;;;;
+3319;SQUARE GURAMUTON;So;0;L;<square> 30B0 30E9 30E0 30C8 30F3;;;;N;SQUARED GURAMUTON;;;;
+331A;SQUARE KURUZEIRO;So;0;L;<square> 30AF 30EB 30BC 30A4 30ED;;;;N;SQUARED KURUZEIRO;;;;
+331B;SQUARE KUROONE;So;0;L;<square> 30AF 30ED 30FC 30CD;;;;N;SQUARED KUROONE;;;;
+331C;SQUARE KEESU;So;0;L;<square> 30B1 30FC 30B9;;;;N;SQUARED KEESU;;;;
+331D;SQUARE KORUNA;So;0;L;<square> 30B3 30EB 30CA;;;;N;SQUARED KORUNA;;;;
+331E;SQUARE KOOPO;So;0;L;<square> 30B3 30FC 30DD;;;;N;SQUARED KOOPO;;;;
+331F;SQUARE SAIKURU;So;0;L;<square> 30B5 30A4 30AF 30EB;;;;N;SQUARED SAIKURU;;;;
+3320;SQUARE SANTIIMU;So;0;L;<square> 30B5 30F3 30C1 30FC 30E0;;;;N;SQUARED SANTIIMU;;;;
+3321;SQUARE SIRINGU;So;0;L;<square> 30B7 30EA 30F3 30B0;;;;N;SQUARED SIRINGU;;;;
+3322;SQUARE SENTI;So;0;L;<square> 30BB 30F3 30C1;;;;N;SQUARED SENTI;;;;
+3323;SQUARE SENTO;So;0;L;<square> 30BB 30F3 30C8;;;;N;SQUARED SENTO;;;;
+3324;SQUARE DAASU;So;0;L;<square> 30C0 30FC 30B9;;;;N;SQUARED DAASU;;;;
+3325;SQUARE DESI;So;0;L;<square> 30C7 30B7;;;;N;SQUARED DESI;;;;
+3326;SQUARE DORU;So;0;L;<square> 30C9 30EB;;;;N;SQUARED DORU;;;;
+3327;SQUARE TON;So;0;L;<square> 30C8 30F3;;;;N;SQUARED TON;;;;
+3328;SQUARE NANO;So;0;L;<square> 30CA 30CE;;;;N;SQUARED NANO;;;;
+3329;SQUARE NOTTO;So;0;L;<square> 30CE 30C3 30C8;;;;N;SQUARED NOTTO;;;;
+332A;SQUARE HAITU;So;0;L;<square> 30CF 30A4 30C4;;;;N;SQUARED HAITU;;;;
+332B;SQUARE PAASENTO;So;0;L;<square> 30D1 30FC 30BB 30F3 30C8;;;;N;SQUARED PAASENTO;;;;
+332C;SQUARE PAATU;So;0;L;<square> 30D1 30FC 30C4;;;;N;SQUARED PAATU;;;;
+332D;SQUARE BAARERU;So;0;L;<square> 30D0 30FC 30EC 30EB;;;;N;SQUARED BAARERU;;;;
+332E;SQUARE PIASUTORU;So;0;L;<square> 30D4 30A2 30B9 30C8 30EB;;;;N;SQUARED PIASUTORU;;;;
+332F;SQUARE PIKURU;So;0;L;<square> 30D4 30AF 30EB;;;;N;SQUARED PIKURU;;;;
+3330;SQUARE PIKO;So;0;L;<square> 30D4 30B3;;;;N;SQUARED PIKO;;;;
+3331;SQUARE BIRU;So;0;L;<square> 30D3 30EB;;;;N;SQUARED BIRU;;;;
+3332;SQUARE HUARADDO;So;0;L;<square> 30D5 30A1 30E9 30C3 30C9;;;;N;SQUARED HUARADDO;;;;
+3333;SQUARE HUIITO;So;0;L;<square> 30D5 30A3 30FC 30C8;;;;N;SQUARED HUIITO;;;;
+3334;SQUARE BUSSYERU;So;0;L;<square> 30D6 30C3 30B7 30A7 30EB;;;;N;SQUARED BUSSYERU;;;;
+3335;SQUARE HURAN;So;0;L;<square> 30D5 30E9 30F3;;;;N;SQUARED HURAN;;;;
+3336;SQUARE HEKUTAARU;So;0;L;<square> 30D8 30AF 30BF 30FC 30EB;;;;N;SQUARED HEKUTAARU;;;;
+3337;SQUARE PESO;So;0;L;<square> 30DA 30BD;;;;N;SQUARED PESO;;;;
+3338;SQUARE PENIHI;So;0;L;<square> 30DA 30CB 30D2;;;;N;SQUARED PENIHI;;;;
+3339;SQUARE HERUTU;So;0;L;<square> 30D8 30EB 30C4;;;;N;SQUARED HERUTU;;;;
+333A;SQUARE PENSU;So;0;L;<square> 30DA 30F3 30B9;;;;N;SQUARED PENSU;;;;
+333B;SQUARE PEEZI;So;0;L;<square> 30DA 30FC 30B8;;;;N;SQUARED PEEZI;;;;
+333C;SQUARE BEETA;So;0;L;<square> 30D9 30FC 30BF;;;;N;SQUARED BEETA;;;;
+333D;SQUARE POINTO;So;0;L;<square> 30DD 30A4 30F3 30C8;;;;N;SQUARED POINTO;;;;
+333E;SQUARE BORUTO;So;0;L;<square> 30DC 30EB 30C8;;;;N;SQUARED BORUTO;;;;
+333F;SQUARE HON;So;0;L;<square> 30DB 30F3;;;;N;SQUARED HON;;;;
+3340;SQUARE PONDO;So;0;L;<square> 30DD 30F3 30C9;;;;N;SQUARED PONDO;;;;
+3341;SQUARE HOORU;So;0;L;<square> 30DB 30FC 30EB;;;;N;SQUARED HOORU;;;;
+3342;SQUARE HOON;So;0;L;<square> 30DB 30FC 30F3;;;;N;SQUARED HOON;;;;
+3343;SQUARE MAIKURO;So;0;L;<square> 30DE 30A4 30AF 30ED;;;;N;SQUARED MAIKURO;;;;
+3344;SQUARE MAIRU;So;0;L;<square> 30DE 30A4 30EB;;;;N;SQUARED MAIRU;;;;
+3345;SQUARE MAHHA;So;0;L;<square> 30DE 30C3 30CF;;;;N;SQUARED MAHHA;;;;
+3346;SQUARE MARUKU;So;0;L;<square> 30DE 30EB 30AF;;;;N;SQUARED MARUKU;;;;
+3347;SQUARE MANSYON;So;0;L;<square> 30DE 30F3 30B7 30E7 30F3;;;;N;SQUARED MANSYON;;;;
+3348;SQUARE MIKURON;So;0;L;<square> 30DF 30AF 30ED 30F3;;;;N;SQUARED MIKURON;;;;
+3349;SQUARE MIRI;So;0;L;<square> 30DF 30EA;;;;N;SQUARED MIRI;;;;
+334A;SQUARE MIRIBAARU;So;0;L;<square> 30DF 30EA 30D0 30FC 30EB;;;;N;SQUARED MIRIBAARU;;;;
+334B;SQUARE MEGA;So;0;L;<square> 30E1 30AC;;;;N;SQUARED MEGA;;;;
+334C;SQUARE MEGATON;So;0;L;<square> 30E1 30AC 30C8 30F3;;;;N;SQUARED MEGATON;;;;
+334D;SQUARE MEETORU;So;0;L;<square> 30E1 30FC 30C8 30EB;;;;N;SQUARED MEETORU;;;;
+334E;SQUARE YAADO;So;0;L;<square> 30E4 30FC 30C9;;;;N;SQUARED YAADO;;;;
+334F;SQUARE YAARU;So;0;L;<square> 30E4 30FC 30EB;;;;N;SQUARED YAARU;;;;
+3350;SQUARE YUAN;So;0;L;<square> 30E6 30A2 30F3;;;;N;SQUARED YUAN;;;;
+3351;SQUARE RITTORU;So;0;L;<square> 30EA 30C3 30C8 30EB;;;;N;SQUARED RITTORU;;;;
+3352;SQUARE RIRA;So;0;L;<square> 30EA 30E9;;;;N;SQUARED RIRA;;;;
+3353;SQUARE RUPII;So;0;L;<square> 30EB 30D4 30FC;;;;N;SQUARED RUPII;;;;
+3354;SQUARE RUUBURU;So;0;L;<square> 30EB 30FC 30D6 30EB;;;;N;SQUARED RUUBURU;;;;
+3355;SQUARE REMU;So;0;L;<square> 30EC 30E0;;;;N;SQUARED REMU;;;;
+3356;SQUARE RENTOGEN;So;0;L;<square> 30EC 30F3 30C8 30B2 30F3;;;;N;SQUARED RENTOGEN;;;;
+3357;SQUARE WATTO;So;0;L;<square> 30EF 30C3 30C8;;;;N;SQUARED WATTO;;;;
+3358;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ZERO;So;0;L;<compat> 0030 70B9;;;;N;;;;;
+3359;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ONE;So;0;L;<compat> 0031 70B9;;;;N;;;;;
+335A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWO;So;0;L;<compat> 0032 70B9;;;;N;;;;;
+335B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THREE;So;0;L;<compat> 0033 70B9;;;;N;;;;;
+335C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOUR;So;0;L;<compat> 0034 70B9;;;;N;;;;;
+335D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIVE;So;0;L;<compat> 0035 70B9;;;;N;;;;;
+335E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIX;So;0;L;<compat> 0036 70B9;;;;N;;;;;
+335F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVEN;So;0;L;<compat> 0037 70B9;;;;N;;;;;
+3360;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHT;So;0;L;<compat> 0038 70B9;;;;N;;;;;
+3361;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINE;So;0;L;<compat> 0039 70B9;;;;N;;;;;
+3362;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TEN;So;0;L;<compat> 0031 0030 70B9;;;;N;;;;;
+3363;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR ELEVEN;So;0;L;<compat> 0031 0031 70B9;;;;N;;;;;
+3364;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWELVE;So;0;L;<compat> 0031 0032 70B9;;;;N;;;;;
+3365;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR THIRTEEN;So;0;L;<compat> 0031 0033 70B9;;;;N;;;;;
+3366;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FOURTEEN;So;0;L;<compat> 0031 0034 70B9;;;;N;;;;;
+3367;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR FIFTEEN;So;0;L;<compat> 0031 0035 70B9;;;;N;;;;;
+3368;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SIXTEEN;So;0;L;<compat> 0031 0036 70B9;;;;N;;;;;
+3369;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR SEVENTEEN;So;0;L;<compat> 0031 0037 70B9;;;;N;;;;;
+336A;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR EIGHTEEN;So;0;L;<compat> 0031 0038 70B9;;;;N;;;;;
+336B;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR NINETEEN;So;0;L;<compat> 0031 0039 70B9;;;;N;;;;;
+336C;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY;So;0;L;<compat> 0032 0030 70B9;;;;N;;;;;
+336D;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-ONE;So;0;L;<compat> 0032 0031 70B9;;;;N;;;;;
+336E;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-TWO;So;0;L;<compat> 0032 0032 70B9;;;;N;;;;;
+336F;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-THREE;So;0;L;<compat> 0032 0033 70B9;;;;N;;;;;
+3370;IDEOGRAPHIC TELEGRAPH SYMBOL FOR HOUR TWENTY-FOUR;So;0;L;<compat> 0032 0034 70B9;;;;N;;;;;
+3371;SQUARE HPA;So;0;L;<square> 0068 0050 0061;;;;N;;;;;
+3372;SQUARE DA;So;0;L;<square> 0064 0061;;;;N;;;;;
+3373;SQUARE AU;So;0;L;<square> 0041 0055;;;;N;;;;;
+3374;SQUARE BAR;So;0;L;<square> 0062 0061 0072;;;;N;;;;;
+3375;SQUARE OV;So;0;L;<square> 006F 0056;;;;N;;;;;
+3376;SQUARE PC;So;0;L;<square> 0070 0063;;;;N;;;;;
+337B;SQUARE ERA NAME HEISEI;So;0;L;<square> 5E73 6210;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME HEISEI;;;;
+337C;SQUARE ERA NAME SYOUWA;So;0;L;<square> 662D 548C;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME SYOUWA;;;;
+337D;SQUARE ERA NAME TAISYOU;So;0;L;<square> 5927 6B63;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME TAISYOU;;;;
+337E;SQUARE ERA NAME MEIZI;So;0;L;<square> 660E 6CBB;;;;N;SQUARED TWO IDEOGRAPHS ERA NAME MEIZI;;;;
+337F;SQUARE CORPORATION;So;0;L;<square> 682A 5F0F 4F1A 793E;;;;N;SQUARED FOUR IDEOGRAPHS CORPORATION;;;;
+3380;SQUARE PA AMPS;So;0;L;<square> 0070 0041;;;;N;SQUARED PA AMPS;;;;
+3381;SQUARE NA;So;0;L;<square> 006E 0041;;;;N;SQUARED NA;;;;
+3382;SQUARE MU A;So;0;L;<square> 03BC 0041;;;;N;SQUARED MU A;;;;
+3383;SQUARE MA;So;0;L;<square> 006D 0041;;;;N;SQUARED MA;;;;
+3384;SQUARE KA;So;0;L;<square> 006B 0041;;;;N;SQUARED KA;;;;
+3385;SQUARE KB;So;0;L;<square> 004B 0042;;;;N;SQUARED KB;;;;
+3386;SQUARE MB;So;0;L;<square> 004D 0042;;;;N;SQUARED MB;;;;
+3387;SQUARE GB;So;0;L;<square> 0047 0042;;;;N;SQUARED GB;;;;
+3388;SQUARE CAL;So;0;L;<square> 0063 0061 006C;;;;N;SQUARED CAL;;;;
+3389;SQUARE KCAL;So;0;L;<square> 006B 0063 0061 006C;;;;N;SQUARED KCAL;;;;
+338A;SQUARE PF;So;0;L;<square> 0070 0046;;;;N;SQUARED PF;;;;
+338B;SQUARE NF;So;0;L;<square> 006E 0046;;;;N;SQUARED NF;;;;
+338C;SQUARE MU F;So;0;L;<square> 03BC 0046;;;;N;SQUARED MU F;;;;
+338D;SQUARE MU G;So;0;L;<square> 03BC 0067;;;;N;SQUARED MU G;;;;
+338E;SQUARE MG;So;0;L;<square> 006D 0067;;;;N;SQUARED MG;;;;
+338F;SQUARE KG;So;0;L;<square> 006B 0067;;;;N;SQUARED KG;;;;
+3390;SQUARE HZ;So;0;L;<square> 0048 007A;;;;N;SQUARED HZ;;;;
+3391;SQUARE KHZ;So;0;L;<square> 006B 0048 007A;;;;N;SQUARED KHZ;;;;
+3392;SQUARE MHZ;So;0;L;<square> 004D 0048 007A;;;;N;SQUARED MHZ;;;;
+3393;SQUARE GHZ;So;0;L;<square> 0047 0048 007A;;;;N;SQUARED GHZ;;;;
+3394;SQUARE THZ;So;0;L;<square> 0054 0048 007A;;;;N;SQUARED THZ;;;;
+3395;SQUARE MU L;So;0;L;<square> 03BC 2113;;;;N;SQUARED MU L;;;;
+3396;SQUARE ML;So;0;L;<square> 006D 2113;;;;N;SQUARED ML;;;;
+3397;SQUARE DL;So;0;L;<square> 0064 2113;;;;N;SQUARED DL;;;;
+3398;SQUARE KL;So;0;L;<square> 006B 2113;;;;N;SQUARED KL;;;;
+3399;SQUARE FM;So;0;L;<square> 0066 006D;;;;N;SQUARED FM;;;;
+339A;SQUARE NM;So;0;L;<square> 006E 006D;;;;N;SQUARED NM;;;;
+339B;SQUARE MU M;So;0;L;<square> 03BC 006D;;;;N;SQUARED MU M;;;;
+339C;SQUARE MM;So;0;L;<square> 006D 006D;;;;N;SQUARED MM;;;;
+339D;SQUARE CM;So;0;L;<square> 0063 006D;;;;N;SQUARED CM;;;;
+339E;SQUARE KM;So;0;L;<square> 006B 006D;;;;N;SQUARED KM;;;;
+339F;SQUARE MM SQUARED;So;0;L;<square> 006D 006D 00B2;;;;N;SQUARED MM SQUARED;;;;
+33A0;SQUARE CM SQUARED;So;0;L;<square> 0063 006D 00B2;;;;N;SQUARED CM SQUARED;;;;
+33A1;SQUARE M SQUARED;So;0;L;<square> 006D 00B2;;;;N;SQUARED M SQUARED;;;;
+33A2;SQUARE KM SQUARED;So;0;L;<square> 006B 006D 00B2;;;;N;SQUARED KM SQUARED;;;;
+33A3;SQUARE MM CUBED;So;0;L;<square> 006D 006D 00B3;;;;N;SQUARED MM CUBED;;;;
+33A4;SQUARE CM CUBED;So;0;L;<square> 0063 006D 00B3;;;;N;SQUARED CM CUBED;;;;
+33A5;SQUARE M CUBED;So;0;L;<square> 006D 00B3;;;;N;SQUARED M CUBED;;;;
+33A6;SQUARE KM CUBED;So;0;L;<square> 006B 006D 00B3;;;;N;SQUARED KM CUBED;;;;
+33A7;SQUARE M OVER S;So;0;L;<square> 006D 2215 0073;;;;N;SQUARED M OVER S;;;;
+33A8;SQUARE M OVER S SQUARED;So;0;L;<square> 006D 2215 0073 00B2;;;;N;SQUARED M OVER S SQUARED;;;;
+33A9;SQUARE PA;So;0;L;<square> 0050 0061;;;;N;SQUARED PA;;;;
+33AA;SQUARE KPA;So;0;L;<square> 006B 0050 0061;;;;N;SQUARED KPA;;;;
+33AB;SQUARE MPA;So;0;L;<square> 004D 0050 0061;;;;N;SQUARED MPA;;;;
+33AC;SQUARE GPA;So;0;L;<square> 0047 0050 0061;;;;N;SQUARED GPA;;;;
+33AD;SQUARE RAD;So;0;L;<square> 0072 0061 0064;;;;N;SQUARED RAD;;;;
+33AE;SQUARE RAD OVER S;So;0;L;<square> 0072 0061 0064 2215 0073;;;;N;SQUARED RAD OVER S;;;;
+33AF;SQUARE RAD OVER S SQUARED;So;0;L;<square> 0072 0061 0064 2215 0073 00B2;;;;N;SQUARED RAD OVER S SQUARED;;;;
+33B0;SQUARE PS;So;0;L;<square> 0070 0073;;;;N;SQUARED PS;;;;
+33B1;SQUARE NS;So;0;L;<square> 006E 0073;;;;N;SQUARED NS;;;;
+33B2;SQUARE MU S;So;0;L;<square> 03BC 0073;;;;N;SQUARED MU S;;;;
+33B3;SQUARE MS;So;0;L;<square> 006D 0073;;;;N;SQUARED MS;;;;
+33B4;SQUARE PV;So;0;L;<square> 0070 0056;;;;N;SQUARED PV;;;;
+33B5;SQUARE NV;So;0;L;<square> 006E 0056;;;;N;SQUARED NV;;;;
+33B6;SQUARE MU V;So;0;L;<square> 03BC 0056;;;;N;SQUARED MU V;;;;
+33B7;SQUARE MV;So;0;L;<square> 006D 0056;;;;N;SQUARED MV;;;;
+33B8;SQUARE KV;So;0;L;<square> 006B 0056;;;;N;SQUARED KV;;;;
+33B9;SQUARE MV MEGA;So;0;L;<square> 004D 0056;;;;N;SQUARED MV MEGA;;;;
+33BA;SQUARE PW;So;0;L;<square> 0070 0057;;;;N;SQUARED PW;;;;
+33BB;SQUARE NW;So;0;L;<square> 006E 0057;;;;N;SQUARED NW;;;;
+33BC;SQUARE MU W;So;0;L;<square> 03BC 0057;;;;N;SQUARED MU W;;;;
+33BD;SQUARE MW;So;0;L;<square> 006D 0057;;;;N;SQUARED MW;;;;
+33BE;SQUARE KW;So;0;L;<square> 006B 0057;;;;N;SQUARED KW;;;;
+33BF;SQUARE MW MEGA;So;0;L;<square> 004D 0057;;;;N;SQUARED MW MEGA;;;;
+33C0;SQUARE K OHM;So;0;L;<square> 006B 03A9;;;;N;SQUARED K OHM;;;;
+33C1;SQUARE M OHM;So;0;L;<square> 004D 03A9;;;;N;SQUARED M OHM;;;;
+33C2;SQUARE AM;So;0;L;<square> 0061 002E 006D 002E;;;;N;SQUARED AM;;;;
+33C3;SQUARE BQ;So;0;L;<square> 0042 0071;;;;N;SQUARED BQ;;;;
+33C4;SQUARE CC;So;0;L;<square> 0063 0063;;;;N;SQUARED CC;;;;
+33C5;SQUARE CD;So;0;L;<square> 0063 0064;;;;N;SQUARED CD;;;;
+33C6;SQUARE C OVER KG;So;0;L;<square> 0043 2215 006B 0067;;;;N;SQUARED C OVER KG;;;;
+33C7;SQUARE CO;So;0;L;<square> 0043 006F 002E;;;;N;SQUARED CO;;;;
+33C8;SQUARE DB;So;0;L;<square> 0064 0042;;;;N;SQUARED DB;;;;
+33C9;SQUARE GY;So;0;L;<square> 0047 0079;;;;N;SQUARED GY;;;;
+33CA;SQUARE HA;So;0;L;<square> 0068 0061;;;;N;SQUARED HA;;;;
+33CB;SQUARE HP;So;0;L;<square> 0048 0050;;;;N;SQUARED HP;;;;
+33CC;SQUARE IN;So;0;L;<square> 0069 006E;;;;N;SQUARED IN;;;;
+33CD;SQUARE KK;So;0;L;<square> 004B 004B;;;;N;SQUARED KK;;;;
+33CE;SQUARE KM CAPITAL;So;0;L;<square> 004B 004D;;;;N;SQUARED KM CAPITAL;;;;
+33CF;SQUARE KT;So;0;L;<square> 006B 0074;;;;N;SQUARED KT;;;;
+33D0;SQUARE LM;So;0;L;<square> 006C 006D;;;;N;SQUARED LM;;;;
+33D1;SQUARE LN;So;0;L;<square> 006C 006E;;;;N;SQUARED LN;;;;
+33D2;SQUARE LOG;So;0;L;<square> 006C 006F 0067;;;;N;SQUARED LOG;;;;
+33D3;SQUARE LX;So;0;L;<square> 006C 0078;;;;N;SQUARED LX;;;;
+33D4;SQUARE MB SMALL;So;0;L;<square> 006D 0062;;;;N;SQUARED MB SMALL;;;;
+33D5;SQUARE MIL;So;0;L;<square> 006D 0069 006C;;;;N;SQUARED MIL;;;;
+33D6;SQUARE MOL;So;0;L;<square> 006D 006F 006C;;;;N;SQUARED MOL;;;;
+33D7;SQUARE PH;So;0;L;<square> 0050 0048;;;;N;SQUARED PH;;;;
+33D8;SQUARE PM;So;0;L;<square> 0070 002E 006D 002E;;;;N;SQUARED PM;;;;
+33D9;SQUARE PPM;So;0;L;<square> 0050 0050 004D;;;;N;SQUARED PPM;;;;
+33DA;SQUARE PR;So;0;L;<square> 0050 0052;;;;N;SQUARED PR;;;;
+33DB;SQUARE SR;So;0;L;<square> 0073 0072;;;;N;SQUARED SR;;;;
+33DC;SQUARE SV;So;0;L;<square> 0053 0076;;;;N;SQUARED SV;;;;
+33DD;SQUARE WB;So;0;L;<square> 0057 0062;;;;N;SQUARED WB;;;;
+33E0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ONE;So;0;L;<compat> 0031 65E5;;;;N;;;;;
+33E1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWO;So;0;L;<compat> 0032 65E5;;;;N;;;;;
+33E2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THREE;So;0;L;<compat> 0033 65E5;;;;N;;;;;
+33E3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOUR;So;0;L;<compat> 0034 65E5;;;;N;;;;;
+33E4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIVE;So;0;L;<compat> 0035 65E5;;;;N;;;;;
+33E5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIX;So;0;L;<compat> 0036 65E5;;;;N;;;;;
+33E6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVEN;So;0;L;<compat> 0037 65E5;;;;N;;;;;
+33E7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHT;So;0;L;<compat> 0038 65E5;;;;N;;;;;
+33E8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINE;So;0;L;<compat> 0039 65E5;;;;N;;;;;
+33E9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TEN;So;0;L;<compat> 0031 0030 65E5;;;;N;;;;;
+33EA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY ELEVEN;So;0;L;<compat> 0031 0031 65E5;;;;N;;;;;
+33EB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWELVE;So;0;L;<compat> 0031 0032 65E5;;;;N;;;;;
+33EC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTEEN;So;0;L;<compat> 0031 0033 65E5;;;;N;;;;;
+33ED;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FOURTEEN;So;0;L;<compat> 0031 0034 65E5;;;;N;;;;;
+33EE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY FIFTEEN;So;0;L;<compat> 0031 0035 65E5;;;;N;;;;;
+33EF;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SIXTEEN;So;0;L;<compat> 0031 0036 65E5;;;;N;;;;;
+33F0;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY SEVENTEEN;So;0;L;<compat> 0031 0037 65E5;;;;N;;;;;
+33F1;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY EIGHTEEN;So;0;L;<compat> 0031 0038 65E5;;;;N;;;;;
+33F2;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY NINETEEN;So;0;L;<compat> 0031 0039 65E5;;;;N;;;;;
+33F3;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY;So;0;L;<compat> 0032 0030 65E5;;;;N;;;;;
+33F4;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-ONE;So;0;L;<compat> 0032 0031 65E5;;;;N;;;;;
+33F5;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-TWO;So;0;L;<compat> 0032 0032 65E5;;;;N;;;;;
+33F6;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-THREE;So;0;L;<compat> 0032 0033 65E5;;;;N;;;;;
+33F7;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FOUR;So;0;L;<compat> 0032 0034 65E5;;;;N;;;;;
+33F8;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-FIVE;So;0;L;<compat> 0032 0035 65E5;;;;N;;;;;
+33F9;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SIX;So;0;L;<compat> 0032 0036 65E5;;;;N;;;;;
+33FA;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-SEVEN;So;0;L;<compat> 0032 0037 65E5;;;;N;;;;;
+33FB;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-EIGHT;So;0;L;<compat> 0032 0038 65E5;;;;N;;;;;
+33FC;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY TWENTY-NINE;So;0;L;<compat> 0032 0039 65E5;;;;N;;;;;
+33FD;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY;So;0;L;<compat> 0033 0030 65E5;;;;N;;;;;
+33FE;IDEOGRAPHIC TELEGRAPH SYMBOL FOR DAY THIRTY-ONE;So;0;L;<compat> 0033 0031 65E5;;;;N;;;;;
+3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;;
+4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;
+4E00;<CJK Ideograph, First>;Lo;0;L;;;;;N;;;;;
+9FA5;<CJK Ideograph, Last>;Lo;0;L;;;;;N;;;;;
+A000;YI SYLLABLE IT;Lo;0;L;;;;;N;;;;;
+A001;YI SYLLABLE IX;Lo;0;L;;;;;N;;;;;
+A002;YI SYLLABLE I;Lo;0;L;;;;;N;;;;;
+A003;YI SYLLABLE IP;Lo;0;L;;;;;N;;;;;
+A004;YI SYLLABLE IET;Lo;0;L;;;;;N;;;;;
+A005;YI SYLLABLE IEX;Lo;0;L;;;;;N;;;;;
+A006;YI SYLLABLE IE;Lo;0;L;;;;;N;;;;;
+A007;YI SYLLABLE IEP;Lo;0;L;;;;;N;;;;;
+A008;YI SYLLABLE AT;Lo;0;L;;;;;N;;;;;
+A009;YI SYLLABLE AX;Lo;0;L;;;;;N;;;;;
+A00A;YI SYLLABLE A;Lo;0;L;;;;;N;;;;;
+A00B;YI SYLLABLE AP;Lo;0;L;;;;;N;;;;;
+A00C;YI SYLLABLE UOX;Lo;0;L;;;;;N;;;;;
+A00D;YI SYLLABLE UO;Lo;0;L;;;;;N;;;;;
+A00E;YI SYLLABLE UOP;Lo;0;L;;;;;N;;;;;
+A00F;YI SYLLABLE OT;Lo;0;L;;;;;N;;;;;
+A010;YI SYLLABLE OX;Lo;0;L;;;;;N;;;;;
+A011;YI SYLLABLE O;Lo;0;L;;;;;N;;;;;
+A012;YI SYLLABLE OP;Lo;0;L;;;;;N;;;;;
+A013;YI SYLLABLE EX;Lo;0;L;;;;;N;;;;;
+A014;YI SYLLABLE E;Lo;0;L;;;;;N;;;;;
+A015;YI SYLLABLE WU;Lo;0;L;;;;;N;;;;;
+A016;YI SYLLABLE BIT;Lo;0;L;;;;;N;;;;;
+A017;YI SYLLABLE BIX;Lo;0;L;;;;;N;;;;;
+A018;YI SYLLABLE BI;Lo;0;L;;;;;N;;;;;
+A019;YI SYLLABLE BIP;Lo;0;L;;;;;N;;;;;
+A01A;YI SYLLABLE BIET;Lo;0;L;;;;;N;;;;;
+A01B;YI SYLLABLE BIEX;Lo;0;L;;;;;N;;;;;
+A01C;YI SYLLABLE BIE;Lo;0;L;;;;;N;;;;;
+A01D;YI SYLLABLE BIEP;Lo;0;L;;;;;N;;;;;
+A01E;YI SYLLABLE BAT;Lo;0;L;;;;;N;;;;;
+A01F;YI SYLLABLE BAX;Lo;0;L;;;;;N;;;;;
+A020;YI SYLLABLE BA;Lo;0;L;;;;;N;;;;;
+A021;YI SYLLABLE BAP;Lo;0;L;;;;;N;;;;;
+A022;YI SYLLABLE BUOX;Lo;0;L;;;;;N;;;;;
+A023;YI SYLLABLE BUO;Lo;0;L;;;;;N;;;;;
+A024;YI SYLLABLE BUOP;Lo;0;L;;;;;N;;;;;
+A025;YI SYLLABLE BOT;Lo;0;L;;;;;N;;;;;
+A026;YI SYLLABLE BOX;Lo;0;L;;;;;N;;;;;
+A027;YI SYLLABLE BO;Lo;0;L;;;;;N;;;;;
+A028;YI SYLLABLE BOP;Lo;0;L;;;;;N;;;;;
+A029;YI SYLLABLE BEX;Lo;0;L;;;;;N;;;;;
+A02A;YI SYLLABLE BE;Lo;0;L;;;;;N;;;;;
+A02B;YI SYLLABLE BEP;Lo;0;L;;;;;N;;;;;
+A02C;YI SYLLABLE BUT;Lo;0;L;;;;;N;;;;;
+A02D;YI SYLLABLE BUX;Lo;0;L;;;;;N;;;;;
+A02E;YI SYLLABLE BU;Lo;0;L;;;;;N;;;;;
+A02F;YI SYLLABLE BUP;Lo;0;L;;;;;N;;;;;
+A030;YI SYLLABLE BURX;Lo;0;L;;;;;N;;;;;
+A031;YI SYLLABLE BUR;Lo;0;L;;;;;N;;;;;
+A032;YI SYLLABLE BYT;Lo;0;L;;;;;N;;;;;
+A033;YI SYLLABLE BYX;Lo;0;L;;;;;N;;;;;
+A034;YI SYLLABLE BY;Lo;0;L;;;;;N;;;;;
+A035;YI SYLLABLE BYP;Lo;0;L;;;;;N;;;;;
+A036;YI SYLLABLE BYRX;Lo;0;L;;;;;N;;;;;
+A037;YI SYLLABLE BYR;Lo;0;L;;;;;N;;;;;
+A038;YI SYLLABLE PIT;Lo;0;L;;;;;N;;;;;
+A039;YI SYLLABLE PIX;Lo;0;L;;;;;N;;;;;
+A03A;YI SYLLABLE PI;Lo;0;L;;;;;N;;;;;
+A03B;YI SYLLABLE PIP;Lo;0;L;;;;;N;;;;;
+A03C;YI SYLLABLE PIEX;Lo;0;L;;;;;N;;;;;
+A03D;YI SYLLABLE PIE;Lo;0;L;;;;;N;;;;;
+A03E;YI SYLLABLE PIEP;Lo;0;L;;;;;N;;;;;
+A03F;YI SYLLABLE PAT;Lo;0;L;;;;;N;;;;;
+A040;YI SYLLABLE PAX;Lo;0;L;;;;;N;;;;;
+A041;YI SYLLABLE PA;Lo;0;L;;;;;N;;;;;
+A042;YI SYLLABLE PAP;Lo;0;L;;;;;N;;;;;
+A043;YI SYLLABLE PUOX;Lo;0;L;;;;;N;;;;;
+A044;YI SYLLABLE PUO;Lo;0;L;;;;;N;;;;;
+A045;YI SYLLABLE PUOP;Lo;0;L;;;;;N;;;;;
+A046;YI SYLLABLE POT;Lo;0;L;;;;;N;;;;;
+A047;YI SYLLABLE POX;Lo;0;L;;;;;N;;;;;
+A048;YI SYLLABLE PO;Lo;0;L;;;;;N;;;;;
+A049;YI SYLLABLE POP;Lo;0;L;;;;;N;;;;;
+A04A;YI SYLLABLE PUT;Lo;0;L;;;;;N;;;;;
+A04B;YI SYLLABLE PUX;Lo;0;L;;;;;N;;;;;
+A04C;YI SYLLABLE PU;Lo;0;L;;;;;N;;;;;
+A04D;YI SYLLABLE PUP;Lo;0;L;;;;;N;;;;;
+A04E;YI SYLLABLE PURX;Lo;0;L;;;;;N;;;;;
+A04F;YI SYLLABLE PUR;Lo;0;L;;;;;N;;;;;
+A050;YI SYLLABLE PYT;Lo;0;L;;;;;N;;;;;
+A051;YI SYLLABLE PYX;Lo;0;L;;;;;N;;;;;
+A052;YI SYLLABLE PY;Lo;0;L;;;;;N;;;;;
+A053;YI SYLLABLE PYP;Lo;0;L;;;;;N;;;;;
+A054;YI SYLLABLE PYRX;Lo;0;L;;;;;N;;;;;
+A055;YI SYLLABLE PYR;Lo;0;L;;;;;N;;;;;
+A056;YI SYLLABLE BBIT;Lo;0;L;;;;;N;;;;;
+A057;YI SYLLABLE BBIX;Lo;0;L;;;;;N;;;;;
+A058;YI SYLLABLE BBI;Lo;0;L;;;;;N;;;;;
+A059;YI SYLLABLE BBIP;Lo;0;L;;;;;N;;;;;
+A05A;YI SYLLABLE BBIET;Lo;0;L;;;;;N;;;;;
+A05B;YI SYLLABLE BBIEX;Lo;0;L;;;;;N;;;;;
+A05C;YI SYLLABLE BBIE;Lo;0;L;;;;;N;;;;;
+A05D;YI SYLLABLE BBIEP;Lo;0;L;;;;;N;;;;;
+A05E;YI SYLLABLE BBAT;Lo;0;L;;;;;N;;;;;
+A05F;YI SYLLABLE BBAX;Lo;0;L;;;;;N;;;;;
+A060;YI SYLLABLE BBA;Lo;0;L;;;;;N;;;;;
+A061;YI SYLLABLE BBAP;Lo;0;L;;;;;N;;;;;
+A062;YI SYLLABLE BBUOX;Lo;0;L;;;;;N;;;;;
+A063;YI SYLLABLE BBUO;Lo;0;L;;;;;N;;;;;
+A064;YI SYLLABLE BBUOP;Lo;0;L;;;;;N;;;;;
+A065;YI SYLLABLE BBOT;Lo;0;L;;;;;N;;;;;
+A066;YI SYLLABLE BBOX;Lo;0;L;;;;;N;;;;;
+A067;YI SYLLABLE BBO;Lo;0;L;;;;;N;;;;;
+A068;YI SYLLABLE BBOP;Lo;0;L;;;;;N;;;;;
+A069;YI SYLLABLE BBEX;Lo;0;L;;;;;N;;;;;
+A06A;YI SYLLABLE BBE;Lo;0;L;;;;;N;;;;;
+A06B;YI SYLLABLE BBEP;Lo;0;L;;;;;N;;;;;
+A06C;YI SYLLABLE BBUT;Lo;0;L;;;;;N;;;;;
+A06D;YI SYLLABLE BBUX;Lo;0;L;;;;;N;;;;;
+A06E;YI SYLLABLE BBU;Lo;0;L;;;;;N;;;;;
+A06F;YI SYLLABLE BBUP;Lo;0;L;;;;;N;;;;;
+A070;YI SYLLABLE BBURX;Lo;0;L;;;;;N;;;;;
+A071;YI SYLLABLE BBUR;Lo;0;L;;;;;N;;;;;
+A072;YI SYLLABLE BBYT;Lo;0;L;;;;;N;;;;;
+A073;YI SYLLABLE BBYX;Lo;0;L;;;;;N;;;;;
+A074;YI SYLLABLE BBY;Lo;0;L;;;;;N;;;;;
+A075;YI SYLLABLE BBYP;Lo;0;L;;;;;N;;;;;
+A076;YI SYLLABLE NBIT;Lo;0;L;;;;;N;;;;;
+A077;YI SYLLABLE NBIX;Lo;0;L;;;;;N;;;;;
+A078;YI SYLLABLE NBI;Lo;0;L;;;;;N;;;;;
+A079;YI SYLLABLE NBIP;Lo;0;L;;;;;N;;;;;
+A07A;YI SYLLABLE NBIEX;Lo;0;L;;;;;N;;;;;
+A07B;YI SYLLABLE NBIE;Lo;0;L;;;;;N;;;;;
+A07C;YI SYLLABLE NBIEP;Lo;0;L;;;;;N;;;;;
+A07D;YI SYLLABLE NBAT;Lo;0;L;;;;;N;;;;;
+A07E;YI SYLLABLE NBAX;Lo;0;L;;;;;N;;;;;
+A07F;YI SYLLABLE NBA;Lo;0;L;;;;;N;;;;;
+A080;YI SYLLABLE NBAP;Lo;0;L;;;;;N;;;;;
+A081;YI SYLLABLE NBOT;Lo;0;L;;;;;N;;;;;
+A082;YI SYLLABLE NBOX;Lo;0;L;;;;;N;;;;;
+A083;YI SYLLABLE NBO;Lo;0;L;;;;;N;;;;;
+A084;YI SYLLABLE NBOP;Lo;0;L;;;;;N;;;;;
+A085;YI SYLLABLE NBUT;Lo;0;L;;;;;N;;;;;
+A086;YI SYLLABLE NBUX;Lo;0;L;;;;;N;;;;;
+A087;YI SYLLABLE NBU;Lo;0;L;;;;;N;;;;;
+A088;YI SYLLABLE NBUP;Lo;0;L;;;;;N;;;;;
+A089;YI SYLLABLE NBURX;Lo;0;L;;;;;N;;;;;
+A08A;YI SYLLABLE NBUR;Lo;0;L;;;;;N;;;;;
+A08B;YI SYLLABLE NBYT;Lo;0;L;;;;;N;;;;;
+A08C;YI SYLLABLE NBYX;Lo;0;L;;;;;N;;;;;
+A08D;YI SYLLABLE NBY;Lo;0;L;;;;;N;;;;;
+A08E;YI SYLLABLE NBYP;Lo;0;L;;;;;N;;;;;
+A08F;YI SYLLABLE NBYRX;Lo;0;L;;;;;N;;;;;
+A090;YI SYLLABLE NBYR;Lo;0;L;;;;;N;;;;;
+A091;YI SYLLABLE HMIT;Lo;0;L;;;;;N;;;;;
+A092;YI SYLLABLE HMIX;Lo;0;L;;;;;N;;;;;
+A093;YI SYLLABLE HMI;Lo;0;L;;;;;N;;;;;
+A094;YI SYLLABLE HMIP;Lo;0;L;;;;;N;;;;;
+A095;YI SYLLABLE HMIEX;Lo;0;L;;;;;N;;;;;
+A096;YI SYLLABLE HMIE;Lo;0;L;;;;;N;;;;;
+A097;YI SYLLABLE HMIEP;Lo;0;L;;;;;N;;;;;
+A098;YI SYLLABLE HMAT;Lo;0;L;;;;;N;;;;;
+A099;YI SYLLABLE HMAX;Lo;0;L;;;;;N;;;;;
+A09A;YI SYLLABLE HMA;Lo;0;L;;;;;N;;;;;
+A09B;YI SYLLABLE HMAP;Lo;0;L;;;;;N;;;;;
+A09C;YI SYLLABLE HMUOX;Lo;0;L;;;;;N;;;;;
+A09D;YI SYLLABLE HMUO;Lo;0;L;;;;;N;;;;;
+A09E;YI SYLLABLE HMUOP;Lo;0;L;;;;;N;;;;;
+A09F;YI SYLLABLE HMOT;Lo;0;L;;;;;N;;;;;
+A0A0;YI SYLLABLE HMOX;Lo;0;L;;;;;N;;;;;
+A0A1;YI SYLLABLE HMO;Lo;0;L;;;;;N;;;;;
+A0A2;YI SYLLABLE HMOP;Lo;0;L;;;;;N;;;;;
+A0A3;YI SYLLABLE HMUT;Lo;0;L;;;;;N;;;;;
+A0A4;YI SYLLABLE HMUX;Lo;0;L;;;;;N;;;;;
+A0A5;YI SYLLABLE HMU;Lo;0;L;;;;;N;;;;;
+A0A6;YI SYLLABLE HMUP;Lo;0;L;;;;;N;;;;;
+A0A7;YI SYLLABLE HMURX;Lo;0;L;;;;;N;;;;;
+A0A8;YI SYLLABLE HMUR;Lo;0;L;;;;;N;;;;;
+A0A9;YI SYLLABLE HMYX;Lo;0;L;;;;;N;;;;;
+A0AA;YI SYLLABLE HMY;Lo;0;L;;;;;N;;;;;
+A0AB;YI SYLLABLE HMYP;Lo;0;L;;;;;N;;;;;
+A0AC;YI SYLLABLE HMYRX;Lo;0;L;;;;;N;;;;;
+A0AD;YI SYLLABLE HMYR;Lo;0;L;;;;;N;;;;;
+A0AE;YI SYLLABLE MIT;Lo;0;L;;;;;N;;;;;
+A0AF;YI SYLLABLE MIX;Lo;0;L;;;;;N;;;;;
+A0B0;YI SYLLABLE MI;Lo;0;L;;;;;N;;;;;
+A0B1;YI SYLLABLE MIP;Lo;0;L;;;;;N;;;;;
+A0B2;YI SYLLABLE MIEX;Lo;0;L;;;;;N;;;;;
+A0B3;YI SYLLABLE MIE;Lo;0;L;;;;;N;;;;;
+A0B4;YI SYLLABLE MIEP;Lo;0;L;;;;;N;;;;;
+A0B5;YI SYLLABLE MAT;Lo;0;L;;;;;N;;;;;
+A0B6;YI SYLLABLE MAX;Lo;0;L;;;;;N;;;;;
+A0B7;YI SYLLABLE MA;Lo;0;L;;;;;N;;;;;
+A0B8;YI SYLLABLE MAP;Lo;0;L;;;;;N;;;;;
+A0B9;YI SYLLABLE MUOT;Lo;0;L;;;;;N;;;;;
+A0BA;YI SYLLABLE MUOX;Lo;0;L;;;;;N;;;;;
+A0BB;YI SYLLABLE MUO;Lo;0;L;;;;;N;;;;;
+A0BC;YI SYLLABLE MUOP;Lo;0;L;;;;;N;;;;;
+A0BD;YI SYLLABLE MOT;Lo;0;L;;;;;N;;;;;
+A0BE;YI SYLLABLE MOX;Lo;0;L;;;;;N;;;;;
+A0BF;YI SYLLABLE MO;Lo;0;L;;;;;N;;;;;
+A0C0;YI SYLLABLE MOP;Lo;0;L;;;;;N;;;;;
+A0C1;YI SYLLABLE MEX;Lo;0;L;;;;;N;;;;;
+A0C2;YI SYLLABLE ME;Lo;0;L;;;;;N;;;;;
+A0C3;YI SYLLABLE MUT;Lo;0;L;;;;;N;;;;;
+A0C4;YI SYLLABLE MUX;Lo;0;L;;;;;N;;;;;
+A0C5;YI SYLLABLE MU;Lo;0;L;;;;;N;;;;;
+A0C6;YI SYLLABLE MUP;Lo;0;L;;;;;N;;;;;
+A0C7;YI SYLLABLE MURX;Lo;0;L;;;;;N;;;;;
+A0C8;YI SYLLABLE MUR;Lo;0;L;;;;;N;;;;;
+A0C9;YI SYLLABLE MYT;Lo;0;L;;;;;N;;;;;
+A0CA;YI SYLLABLE MYX;Lo;0;L;;;;;N;;;;;
+A0CB;YI SYLLABLE MY;Lo;0;L;;;;;N;;;;;
+A0CC;YI SYLLABLE MYP;Lo;0;L;;;;;N;;;;;
+A0CD;YI SYLLABLE FIT;Lo;0;L;;;;;N;;;;;
+A0CE;YI SYLLABLE FIX;Lo;0;L;;;;;N;;;;;
+A0CF;YI SYLLABLE FI;Lo;0;L;;;;;N;;;;;
+A0D0;YI SYLLABLE FIP;Lo;0;L;;;;;N;;;;;
+A0D1;YI SYLLABLE FAT;Lo;0;L;;;;;N;;;;;
+A0D2;YI SYLLABLE FAX;Lo;0;L;;;;;N;;;;;
+A0D3;YI SYLLABLE FA;Lo;0;L;;;;;N;;;;;
+A0D4;YI SYLLABLE FAP;Lo;0;L;;;;;N;;;;;
+A0D5;YI SYLLABLE FOX;Lo;0;L;;;;;N;;;;;
+A0D6;YI SYLLABLE FO;Lo;0;L;;;;;N;;;;;
+A0D7;YI SYLLABLE FOP;Lo;0;L;;;;;N;;;;;
+A0D8;YI SYLLABLE FUT;Lo;0;L;;;;;N;;;;;
+A0D9;YI SYLLABLE FUX;Lo;0;L;;;;;N;;;;;
+A0DA;YI SYLLABLE FU;Lo;0;L;;;;;N;;;;;
+A0DB;YI SYLLABLE FUP;Lo;0;L;;;;;N;;;;;
+A0DC;YI SYLLABLE FURX;Lo;0;L;;;;;N;;;;;
+A0DD;YI SYLLABLE FUR;Lo;0;L;;;;;N;;;;;
+A0DE;YI SYLLABLE FYT;Lo;0;L;;;;;N;;;;;
+A0DF;YI SYLLABLE FYX;Lo;0;L;;;;;N;;;;;
+A0E0;YI SYLLABLE FY;Lo;0;L;;;;;N;;;;;
+A0E1;YI SYLLABLE FYP;Lo;0;L;;;;;N;;;;;
+A0E2;YI SYLLABLE VIT;Lo;0;L;;;;;N;;;;;
+A0E3;YI SYLLABLE VIX;Lo;0;L;;;;;N;;;;;
+A0E4;YI SYLLABLE VI;Lo;0;L;;;;;N;;;;;
+A0E5;YI SYLLABLE VIP;Lo;0;L;;;;;N;;;;;
+A0E6;YI SYLLABLE VIET;Lo;0;L;;;;;N;;;;;
+A0E7;YI SYLLABLE VIEX;Lo;0;L;;;;;N;;;;;
+A0E8;YI SYLLABLE VIE;Lo;0;L;;;;;N;;;;;
+A0E9;YI SYLLABLE VIEP;Lo;0;L;;;;;N;;;;;
+A0EA;YI SYLLABLE VAT;Lo;0;L;;;;;N;;;;;
+A0EB;YI SYLLABLE VAX;Lo;0;L;;;;;N;;;;;
+A0EC;YI SYLLABLE VA;Lo;0;L;;;;;N;;;;;
+A0ED;YI SYLLABLE VAP;Lo;0;L;;;;;N;;;;;
+A0EE;YI SYLLABLE VOT;Lo;0;L;;;;;N;;;;;
+A0EF;YI SYLLABLE VOX;Lo;0;L;;;;;N;;;;;
+A0F0;YI SYLLABLE VO;Lo;0;L;;;;;N;;;;;
+A0F1;YI SYLLABLE VOP;Lo;0;L;;;;;N;;;;;
+A0F2;YI SYLLABLE VEX;Lo;0;L;;;;;N;;;;;
+A0F3;YI SYLLABLE VEP;Lo;0;L;;;;;N;;;;;
+A0F4;YI SYLLABLE VUT;Lo;0;L;;;;;N;;;;;
+A0F5;YI SYLLABLE VUX;Lo;0;L;;;;;N;;;;;
+A0F6;YI SYLLABLE VU;Lo;0;L;;;;;N;;;;;
+A0F7;YI SYLLABLE VUP;Lo;0;L;;;;;N;;;;;
+A0F8;YI SYLLABLE VURX;Lo;0;L;;;;;N;;;;;
+A0F9;YI SYLLABLE VUR;Lo;0;L;;;;;N;;;;;
+A0FA;YI SYLLABLE VYT;Lo;0;L;;;;;N;;;;;
+A0FB;YI SYLLABLE VYX;Lo;0;L;;;;;N;;;;;
+A0FC;YI SYLLABLE VY;Lo;0;L;;;;;N;;;;;
+A0FD;YI SYLLABLE VYP;Lo;0;L;;;;;N;;;;;
+A0FE;YI SYLLABLE VYRX;Lo;0;L;;;;;N;;;;;
+A0FF;YI SYLLABLE VYR;Lo;0;L;;;;;N;;;;;
+A100;YI SYLLABLE DIT;Lo;0;L;;;;;N;;;;;
+A101;YI SYLLABLE DIX;Lo;0;L;;;;;N;;;;;
+A102;YI SYLLABLE DI;Lo;0;L;;;;;N;;;;;
+A103;YI SYLLABLE DIP;Lo;0;L;;;;;N;;;;;
+A104;YI SYLLABLE DIEX;Lo;0;L;;;;;N;;;;;
+A105;YI SYLLABLE DIE;Lo;0;L;;;;;N;;;;;
+A106;YI SYLLABLE DIEP;Lo;0;L;;;;;N;;;;;
+A107;YI SYLLABLE DAT;Lo;0;L;;;;;N;;;;;
+A108;YI SYLLABLE DAX;Lo;0;L;;;;;N;;;;;
+A109;YI SYLLABLE DA;Lo;0;L;;;;;N;;;;;
+A10A;YI SYLLABLE DAP;Lo;0;L;;;;;N;;;;;
+A10B;YI SYLLABLE DUOX;Lo;0;L;;;;;N;;;;;
+A10C;YI SYLLABLE DUO;Lo;0;L;;;;;N;;;;;
+A10D;YI SYLLABLE DOT;Lo;0;L;;;;;N;;;;;
+A10E;YI SYLLABLE DOX;Lo;0;L;;;;;N;;;;;
+A10F;YI SYLLABLE DO;Lo;0;L;;;;;N;;;;;
+A110;YI SYLLABLE DOP;Lo;0;L;;;;;N;;;;;
+A111;YI SYLLABLE DEX;Lo;0;L;;;;;N;;;;;
+A112;YI SYLLABLE DE;Lo;0;L;;;;;N;;;;;
+A113;YI SYLLABLE DEP;Lo;0;L;;;;;N;;;;;
+A114;YI SYLLABLE DUT;Lo;0;L;;;;;N;;;;;
+A115;YI SYLLABLE DUX;Lo;0;L;;;;;N;;;;;
+A116;YI SYLLABLE DU;Lo;0;L;;;;;N;;;;;
+A117;YI SYLLABLE DUP;Lo;0;L;;;;;N;;;;;
+A118;YI SYLLABLE DURX;Lo;0;L;;;;;N;;;;;
+A119;YI SYLLABLE DUR;Lo;0;L;;;;;N;;;;;
+A11A;YI SYLLABLE TIT;Lo;0;L;;;;;N;;;;;
+A11B;YI SYLLABLE TIX;Lo;0;L;;;;;N;;;;;
+A11C;YI SYLLABLE TI;Lo;0;L;;;;;N;;;;;
+A11D;YI SYLLABLE TIP;Lo;0;L;;;;;N;;;;;
+A11E;YI SYLLABLE TIEX;Lo;0;L;;;;;N;;;;;
+A11F;YI SYLLABLE TIE;Lo;0;L;;;;;N;;;;;
+A120;YI SYLLABLE TIEP;Lo;0;L;;;;;N;;;;;
+A121;YI SYLLABLE TAT;Lo;0;L;;;;;N;;;;;
+A122;YI SYLLABLE TAX;Lo;0;L;;;;;N;;;;;
+A123;YI SYLLABLE TA;Lo;0;L;;;;;N;;;;;
+A124;YI SYLLABLE TAP;Lo;0;L;;;;;N;;;;;
+A125;YI SYLLABLE TUOT;Lo;0;L;;;;;N;;;;;
+A126;YI SYLLABLE TUOX;Lo;0;L;;;;;N;;;;;
+A127;YI SYLLABLE TUO;Lo;0;L;;;;;N;;;;;
+A128;YI SYLLABLE TUOP;Lo;0;L;;;;;N;;;;;
+A129;YI SYLLABLE TOT;Lo;0;L;;;;;N;;;;;
+A12A;YI SYLLABLE TOX;Lo;0;L;;;;;N;;;;;
+A12B;YI SYLLABLE TO;Lo;0;L;;;;;N;;;;;
+A12C;YI SYLLABLE TOP;Lo;0;L;;;;;N;;;;;
+A12D;YI SYLLABLE TEX;Lo;0;L;;;;;N;;;;;
+A12E;YI SYLLABLE TE;Lo;0;L;;;;;N;;;;;
+A12F;YI SYLLABLE TEP;Lo;0;L;;;;;N;;;;;
+A130;YI SYLLABLE TUT;Lo;0;L;;;;;N;;;;;
+A131;YI SYLLABLE TUX;Lo;0;L;;;;;N;;;;;
+A132;YI SYLLABLE TU;Lo;0;L;;;;;N;;;;;
+A133;YI SYLLABLE TUP;Lo;0;L;;;;;N;;;;;
+A134;YI SYLLABLE TURX;Lo;0;L;;;;;N;;;;;
+A135;YI SYLLABLE TUR;Lo;0;L;;;;;N;;;;;
+A136;YI SYLLABLE DDIT;Lo;0;L;;;;;N;;;;;
+A137;YI SYLLABLE DDIX;Lo;0;L;;;;;N;;;;;
+A138;YI SYLLABLE DDI;Lo;0;L;;;;;N;;;;;
+A139;YI SYLLABLE DDIP;Lo;0;L;;;;;N;;;;;
+A13A;YI SYLLABLE DDIEX;Lo;0;L;;;;;N;;;;;
+A13B;YI SYLLABLE DDIE;Lo;0;L;;;;;N;;;;;
+A13C;YI SYLLABLE DDIEP;Lo;0;L;;;;;N;;;;;
+A13D;YI SYLLABLE DDAT;Lo;0;L;;;;;N;;;;;
+A13E;YI SYLLABLE DDAX;Lo;0;L;;;;;N;;;;;
+A13F;YI SYLLABLE DDA;Lo;0;L;;;;;N;;;;;
+A140;YI SYLLABLE DDAP;Lo;0;L;;;;;N;;;;;
+A141;YI SYLLABLE DDUOX;Lo;0;L;;;;;N;;;;;
+A142;YI SYLLABLE DDUO;Lo;0;L;;;;;N;;;;;
+A143;YI SYLLABLE DDUOP;Lo;0;L;;;;;N;;;;;
+A144;YI SYLLABLE DDOT;Lo;0;L;;;;;N;;;;;
+A145;YI SYLLABLE DDOX;Lo;0;L;;;;;N;;;;;
+A146;YI SYLLABLE DDO;Lo;0;L;;;;;N;;;;;
+A147;YI SYLLABLE DDOP;Lo;0;L;;;;;N;;;;;
+A148;YI SYLLABLE DDEX;Lo;0;L;;;;;N;;;;;
+A149;YI SYLLABLE DDE;Lo;0;L;;;;;N;;;;;
+A14A;YI SYLLABLE DDEP;Lo;0;L;;;;;N;;;;;
+A14B;YI SYLLABLE DDUT;Lo;0;L;;;;;N;;;;;
+A14C;YI SYLLABLE DDUX;Lo;0;L;;;;;N;;;;;
+A14D;YI SYLLABLE DDU;Lo;0;L;;;;;N;;;;;
+A14E;YI SYLLABLE DDUP;Lo;0;L;;;;;N;;;;;
+A14F;YI SYLLABLE DDURX;Lo;0;L;;;;;N;;;;;
+A150;YI SYLLABLE DDUR;Lo;0;L;;;;;N;;;;;
+A151;YI SYLLABLE NDIT;Lo;0;L;;;;;N;;;;;
+A152;YI SYLLABLE NDIX;Lo;0;L;;;;;N;;;;;
+A153;YI SYLLABLE NDI;Lo;0;L;;;;;N;;;;;
+A154;YI SYLLABLE NDIP;Lo;0;L;;;;;N;;;;;
+A155;YI SYLLABLE NDIEX;Lo;0;L;;;;;N;;;;;
+A156;YI SYLLABLE NDIE;Lo;0;L;;;;;N;;;;;
+A157;YI SYLLABLE NDAT;Lo;0;L;;;;;N;;;;;
+A158;YI SYLLABLE NDAX;Lo;0;L;;;;;N;;;;;
+A159;YI SYLLABLE NDA;Lo;0;L;;;;;N;;;;;
+A15A;YI SYLLABLE NDAP;Lo;0;L;;;;;N;;;;;
+A15B;YI SYLLABLE NDOT;Lo;0;L;;;;;N;;;;;
+A15C;YI SYLLABLE NDOX;Lo;0;L;;;;;N;;;;;
+A15D;YI SYLLABLE NDO;Lo;0;L;;;;;N;;;;;
+A15E;YI SYLLABLE NDOP;Lo;0;L;;;;;N;;;;;
+A15F;YI SYLLABLE NDEX;Lo;0;L;;;;;N;;;;;
+A160;YI SYLLABLE NDE;Lo;0;L;;;;;N;;;;;
+A161;YI SYLLABLE NDEP;Lo;0;L;;;;;N;;;;;
+A162;YI SYLLABLE NDUT;Lo;0;L;;;;;N;;;;;
+A163;YI SYLLABLE NDUX;Lo;0;L;;;;;N;;;;;
+A164;YI SYLLABLE NDU;Lo;0;L;;;;;N;;;;;
+A165;YI SYLLABLE NDUP;Lo;0;L;;;;;N;;;;;
+A166;YI SYLLABLE NDURX;Lo;0;L;;;;;N;;;;;
+A167;YI SYLLABLE NDUR;Lo;0;L;;;;;N;;;;;
+A168;YI SYLLABLE HNIT;Lo;0;L;;;;;N;;;;;
+A169;YI SYLLABLE HNIX;Lo;0;L;;;;;N;;;;;
+A16A;YI SYLLABLE HNI;Lo;0;L;;;;;N;;;;;
+A16B;YI SYLLABLE HNIP;Lo;0;L;;;;;N;;;;;
+A16C;YI SYLLABLE HNIET;Lo;0;L;;;;;N;;;;;
+A16D;YI SYLLABLE HNIEX;Lo;0;L;;;;;N;;;;;
+A16E;YI SYLLABLE HNIE;Lo;0;L;;;;;N;;;;;
+A16F;YI SYLLABLE HNIEP;Lo;0;L;;;;;N;;;;;
+A170;YI SYLLABLE HNAT;Lo;0;L;;;;;N;;;;;
+A171;YI SYLLABLE HNAX;Lo;0;L;;;;;N;;;;;
+A172;YI SYLLABLE HNA;Lo;0;L;;;;;N;;;;;
+A173;YI SYLLABLE HNAP;Lo;0;L;;;;;N;;;;;
+A174;YI SYLLABLE HNUOX;Lo;0;L;;;;;N;;;;;
+A175;YI SYLLABLE HNUO;Lo;0;L;;;;;N;;;;;
+A176;YI SYLLABLE HNOT;Lo;0;L;;;;;N;;;;;
+A177;YI SYLLABLE HNOX;Lo;0;L;;;;;N;;;;;
+A178;YI SYLLABLE HNOP;Lo;0;L;;;;;N;;;;;
+A179;YI SYLLABLE HNEX;Lo;0;L;;;;;N;;;;;
+A17A;YI SYLLABLE HNE;Lo;0;L;;;;;N;;;;;
+A17B;YI SYLLABLE HNEP;Lo;0;L;;;;;N;;;;;
+A17C;YI SYLLABLE HNUT;Lo;0;L;;;;;N;;;;;
+A17D;YI SYLLABLE NIT;Lo;0;L;;;;;N;;;;;
+A17E;YI SYLLABLE NIX;Lo;0;L;;;;;N;;;;;
+A17F;YI SYLLABLE NI;Lo;0;L;;;;;N;;;;;
+A180;YI SYLLABLE NIP;Lo;0;L;;;;;N;;;;;
+A181;YI SYLLABLE NIEX;Lo;0;L;;;;;N;;;;;
+A182;YI SYLLABLE NIE;Lo;0;L;;;;;N;;;;;
+A183;YI SYLLABLE NIEP;Lo;0;L;;;;;N;;;;;
+A184;YI SYLLABLE NAX;Lo;0;L;;;;;N;;;;;
+A185;YI SYLLABLE NA;Lo;0;L;;;;;N;;;;;
+A186;YI SYLLABLE NAP;Lo;0;L;;;;;N;;;;;
+A187;YI SYLLABLE NUOX;Lo;0;L;;;;;N;;;;;
+A188;YI SYLLABLE NUO;Lo;0;L;;;;;N;;;;;
+A189;YI SYLLABLE NUOP;Lo;0;L;;;;;N;;;;;
+A18A;YI SYLLABLE NOT;Lo;0;L;;;;;N;;;;;
+A18B;YI SYLLABLE NOX;Lo;0;L;;;;;N;;;;;
+A18C;YI SYLLABLE NO;Lo;0;L;;;;;N;;;;;
+A18D;YI SYLLABLE NOP;Lo;0;L;;;;;N;;;;;
+A18E;YI SYLLABLE NEX;Lo;0;L;;;;;N;;;;;
+A18F;YI SYLLABLE NE;Lo;0;L;;;;;N;;;;;
+A190;YI SYLLABLE NEP;Lo;0;L;;;;;N;;;;;
+A191;YI SYLLABLE NUT;Lo;0;L;;;;;N;;;;;
+A192;YI SYLLABLE NUX;Lo;0;L;;;;;N;;;;;
+A193;YI SYLLABLE NU;Lo;0;L;;;;;N;;;;;
+A194;YI SYLLABLE NUP;Lo;0;L;;;;;N;;;;;
+A195;YI SYLLABLE NURX;Lo;0;L;;;;;N;;;;;
+A196;YI SYLLABLE NUR;Lo;0;L;;;;;N;;;;;
+A197;YI SYLLABLE HLIT;Lo;0;L;;;;;N;;;;;
+A198;YI SYLLABLE HLIX;Lo;0;L;;;;;N;;;;;
+A199;YI SYLLABLE HLI;Lo;0;L;;;;;N;;;;;
+A19A;YI SYLLABLE HLIP;Lo;0;L;;;;;N;;;;;
+A19B;YI SYLLABLE HLIEX;Lo;0;L;;;;;N;;;;;
+A19C;YI SYLLABLE HLIE;Lo;0;L;;;;;N;;;;;
+A19D;YI SYLLABLE HLIEP;Lo;0;L;;;;;N;;;;;
+A19E;YI SYLLABLE HLAT;Lo;0;L;;;;;N;;;;;
+A19F;YI SYLLABLE HLAX;Lo;0;L;;;;;N;;;;;
+A1A0;YI SYLLABLE HLA;Lo;0;L;;;;;N;;;;;
+A1A1;YI SYLLABLE HLAP;Lo;0;L;;;;;N;;;;;
+A1A2;YI SYLLABLE HLUOX;Lo;0;L;;;;;N;;;;;
+A1A3;YI SYLLABLE HLUO;Lo;0;L;;;;;N;;;;;
+A1A4;YI SYLLABLE HLUOP;Lo;0;L;;;;;N;;;;;
+A1A5;YI SYLLABLE HLOX;Lo;0;L;;;;;N;;;;;
+A1A6;YI SYLLABLE HLO;Lo;0;L;;;;;N;;;;;
+A1A7;YI SYLLABLE HLOP;Lo;0;L;;;;;N;;;;;
+A1A8;YI SYLLABLE HLEX;Lo;0;L;;;;;N;;;;;
+A1A9;YI SYLLABLE HLE;Lo;0;L;;;;;N;;;;;
+A1AA;YI SYLLABLE HLEP;Lo;0;L;;;;;N;;;;;
+A1AB;YI SYLLABLE HLUT;Lo;0;L;;;;;N;;;;;
+A1AC;YI SYLLABLE HLUX;Lo;0;L;;;;;N;;;;;
+A1AD;YI SYLLABLE HLU;Lo;0;L;;;;;N;;;;;
+A1AE;YI SYLLABLE HLUP;Lo;0;L;;;;;N;;;;;
+A1AF;YI SYLLABLE HLURX;Lo;0;L;;;;;N;;;;;
+A1B0;YI SYLLABLE HLUR;Lo;0;L;;;;;N;;;;;
+A1B1;YI SYLLABLE HLYT;Lo;0;L;;;;;N;;;;;
+A1B2;YI SYLLABLE HLYX;Lo;0;L;;;;;N;;;;;
+A1B3;YI SYLLABLE HLY;Lo;0;L;;;;;N;;;;;
+A1B4;YI SYLLABLE HLYP;Lo;0;L;;;;;N;;;;;
+A1B5;YI SYLLABLE HLYRX;Lo;0;L;;;;;N;;;;;
+A1B6;YI SYLLABLE HLYR;Lo;0;L;;;;;N;;;;;
+A1B7;YI SYLLABLE LIT;Lo;0;L;;;;;N;;;;;
+A1B8;YI SYLLABLE LIX;Lo;0;L;;;;;N;;;;;
+A1B9;YI SYLLABLE LI;Lo;0;L;;;;;N;;;;;
+A1BA;YI SYLLABLE LIP;Lo;0;L;;;;;N;;;;;
+A1BB;YI SYLLABLE LIET;Lo;0;L;;;;;N;;;;;
+A1BC;YI SYLLABLE LIEX;Lo;0;L;;;;;N;;;;;
+A1BD;YI SYLLABLE LIE;Lo;0;L;;;;;N;;;;;
+A1BE;YI SYLLABLE LIEP;Lo;0;L;;;;;N;;;;;
+A1BF;YI SYLLABLE LAT;Lo;0;L;;;;;N;;;;;
+A1C0;YI SYLLABLE LAX;Lo;0;L;;;;;N;;;;;
+A1C1;YI SYLLABLE LA;Lo;0;L;;;;;N;;;;;
+A1C2;YI SYLLABLE LAP;Lo;0;L;;;;;N;;;;;
+A1C3;YI SYLLABLE LUOT;Lo;0;L;;;;;N;;;;;
+A1C4;YI SYLLABLE LUOX;Lo;0;L;;;;;N;;;;;
+A1C5;YI SYLLABLE LUO;Lo;0;L;;;;;N;;;;;
+A1C6;YI SYLLABLE LUOP;Lo;0;L;;;;;N;;;;;
+A1C7;YI SYLLABLE LOT;Lo;0;L;;;;;N;;;;;
+A1C8;YI SYLLABLE LOX;Lo;0;L;;;;;N;;;;;
+A1C9;YI SYLLABLE LO;Lo;0;L;;;;;N;;;;;
+A1CA;YI SYLLABLE LOP;Lo;0;L;;;;;N;;;;;
+A1CB;YI SYLLABLE LEX;Lo;0;L;;;;;N;;;;;
+A1CC;YI SYLLABLE LE;Lo;0;L;;;;;N;;;;;
+A1CD;YI SYLLABLE LEP;Lo;0;L;;;;;N;;;;;
+A1CE;YI SYLLABLE LUT;Lo;0;L;;;;;N;;;;;
+A1CF;YI SYLLABLE LUX;Lo;0;L;;;;;N;;;;;
+A1D0;YI SYLLABLE LU;Lo;0;L;;;;;N;;;;;
+A1D1;YI SYLLABLE LUP;Lo;0;L;;;;;N;;;;;
+A1D2;YI SYLLABLE LURX;Lo;0;L;;;;;N;;;;;
+A1D3;YI SYLLABLE LUR;Lo;0;L;;;;;N;;;;;
+A1D4;YI SYLLABLE LYT;Lo;0;L;;;;;N;;;;;
+A1D5;YI SYLLABLE LYX;Lo;0;L;;;;;N;;;;;
+A1D6;YI SYLLABLE LY;Lo;0;L;;;;;N;;;;;
+A1D7;YI SYLLABLE LYP;Lo;0;L;;;;;N;;;;;
+A1D8;YI SYLLABLE LYRX;Lo;0;L;;;;;N;;;;;
+A1D9;YI SYLLABLE LYR;Lo;0;L;;;;;N;;;;;
+A1DA;YI SYLLABLE GIT;Lo;0;L;;;;;N;;;;;
+A1DB;YI SYLLABLE GIX;Lo;0;L;;;;;N;;;;;
+A1DC;YI SYLLABLE GI;Lo;0;L;;;;;N;;;;;
+A1DD;YI SYLLABLE GIP;Lo;0;L;;;;;N;;;;;
+A1DE;YI SYLLABLE GIET;Lo;0;L;;;;;N;;;;;
+A1DF;YI SYLLABLE GIEX;Lo;0;L;;;;;N;;;;;
+A1E0;YI SYLLABLE GIE;Lo;0;L;;;;;N;;;;;
+A1E1;YI SYLLABLE GIEP;Lo;0;L;;;;;N;;;;;
+A1E2;YI SYLLABLE GAT;Lo;0;L;;;;;N;;;;;
+A1E3;YI SYLLABLE GAX;Lo;0;L;;;;;N;;;;;
+A1E4;YI SYLLABLE GA;Lo;0;L;;;;;N;;;;;
+A1E5;YI SYLLABLE GAP;Lo;0;L;;;;;N;;;;;
+A1E6;YI SYLLABLE GUOT;Lo;0;L;;;;;N;;;;;
+A1E7;YI SYLLABLE GUOX;Lo;0;L;;;;;N;;;;;
+A1E8;YI SYLLABLE GUO;Lo;0;L;;;;;N;;;;;
+A1E9;YI SYLLABLE GUOP;Lo;0;L;;;;;N;;;;;
+A1EA;YI SYLLABLE GOT;Lo;0;L;;;;;N;;;;;
+A1EB;YI SYLLABLE GOX;Lo;0;L;;;;;N;;;;;
+A1EC;YI SYLLABLE GO;Lo;0;L;;;;;N;;;;;
+A1ED;YI SYLLABLE GOP;Lo;0;L;;;;;N;;;;;
+A1EE;YI SYLLABLE GET;Lo;0;L;;;;;N;;;;;
+A1EF;YI SYLLABLE GEX;Lo;0;L;;;;;N;;;;;
+A1F0;YI SYLLABLE GE;Lo;0;L;;;;;N;;;;;
+A1F1;YI SYLLABLE GEP;Lo;0;L;;;;;N;;;;;
+A1F2;YI SYLLABLE GUT;Lo;0;L;;;;;N;;;;;
+A1F3;YI SYLLABLE GUX;Lo;0;L;;;;;N;;;;;
+A1F4;YI SYLLABLE GU;Lo;0;L;;;;;N;;;;;
+A1F5;YI SYLLABLE GUP;Lo;0;L;;;;;N;;;;;
+A1F6;YI SYLLABLE GURX;Lo;0;L;;;;;N;;;;;
+A1F7;YI SYLLABLE GUR;Lo;0;L;;;;;N;;;;;
+A1F8;YI SYLLABLE KIT;Lo;0;L;;;;;N;;;;;
+A1F9;YI SYLLABLE KIX;Lo;0;L;;;;;N;;;;;
+A1FA;YI SYLLABLE KI;Lo;0;L;;;;;N;;;;;
+A1FB;YI SYLLABLE KIP;Lo;0;L;;;;;N;;;;;
+A1FC;YI SYLLABLE KIEX;Lo;0;L;;;;;N;;;;;
+A1FD;YI SYLLABLE KIE;Lo;0;L;;;;;N;;;;;
+A1FE;YI SYLLABLE KIEP;Lo;0;L;;;;;N;;;;;
+A1FF;YI SYLLABLE KAT;Lo;0;L;;;;;N;;;;;
+A200;YI SYLLABLE KAX;Lo;0;L;;;;;N;;;;;
+A201;YI SYLLABLE KA;Lo;0;L;;;;;N;;;;;
+A202;YI SYLLABLE KAP;Lo;0;L;;;;;N;;;;;
+A203;YI SYLLABLE KUOX;Lo;0;L;;;;;N;;;;;
+A204;YI SYLLABLE KUO;Lo;0;L;;;;;N;;;;;
+A205;YI SYLLABLE KUOP;Lo;0;L;;;;;N;;;;;
+A206;YI SYLLABLE KOT;Lo;0;L;;;;;N;;;;;
+A207;YI SYLLABLE KOX;Lo;0;L;;;;;N;;;;;
+A208;YI SYLLABLE KO;Lo;0;L;;;;;N;;;;;
+A209;YI SYLLABLE KOP;Lo;0;L;;;;;N;;;;;
+A20A;YI SYLLABLE KET;Lo;0;L;;;;;N;;;;;
+A20B;YI SYLLABLE KEX;Lo;0;L;;;;;N;;;;;
+A20C;YI SYLLABLE KE;Lo;0;L;;;;;N;;;;;
+A20D;YI SYLLABLE KEP;Lo;0;L;;;;;N;;;;;
+A20E;YI SYLLABLE KUT;Lo;0;L;;;;;N;;;;;
+A20F;YI SYLLABLE KUX;Lo;0;L;;;;;N;;;;;
+A210;YI SYLLABLE KU;Lo;0;L;;;;;N;;;;;
+A211;YI SYLLABLE KUP;Lo;0;L;;;;;N;;;;;
+A212;YI SYLLABLE KURX;Lo;0;L;;;;;N;;;;;
+A213;YI SYLLABLE KUR;Lo;0;L;;;;;N;;;;;
+A214;YI SYLLABLE GGIT;Lo;0;L;;;;;N;;;;;
+A215;YI SYLLABLE GGIX;Lo;0;L;;;;;N;;;;;
+A216;YI SYLLABLE GGI;Lo;0;L;;;;;N;;;;;
+A217;YI SYLLABLE GGIEX;Lo;0;L;;;;;N;;;;;
+A218;YI SYLLABLE GGIE;Lo;0;L;;;;;N;;;;;
+A219;YI SYLLABLE GGIEP;Lo;0;L;;;;;N;;;;;
+A21A;YI SYLLABLE GGAT;Lo;0;L;;;;;N;;;;;
+A21B;YI SYLLABLE GGAX;Lo;0;L;;;;;N;;;;;
+A21C;YI SYLLABLE GGA;Lo;0;L;;;;;N;;;;;
+A21D;YI SYLLABLE GGAP;Lo;0;L;;;;;N;;;;;
+A21E;YI SYLLABLE GGUOT;Lo;0;L;;;;;N;;;;;
+A21F;YI SYLLABLE GGUOX;Lo;0;L;;;;;N;;;;;
+A220;YI SYLLABLE GGUO;Lo;0;L;;;;;N;;;;;
+A221;YI SYLLABLE GGUOP;Lo;0;L;;;;;N;;;;;
+A222;YI SYLLABLE GGOT;Lo;0;L;;;;;N;;;;;
+A223;YI SYLLABLE GGOX;Lo;0;L;;;;;N;;;;;
+A224;YI SYLLABLE GGO;Lo;0;L;;;;;N;;;;;
+A225;YI SYLLABLE GGOP;Lo;0;L;;;;;N;;;;;
+A226;YI SYLLABLE GGET;Lo;0;L;;;;;N;;;;;
+A227;YI SYLLABLE GGEX;Lo;0;L;;;;;N;;;;;
+A228;YI SYLLABLE GGE;Lo;0;L;;;;;N;;;;;
+A229;YI SYLLABLE GGEP;Lo;0;L;;;;;N;;;;;
+A22A;YI SYLLABLE GGUT;Lo;0;L;;;;;N;;;;;
+A22B;YI SYLLABLE GGUX;Lo;0;L;;;;;N;;;;;
+A22C;YI SYLLABLE GGU;Lo;0;L;;;;;N;;;;;
+A22D;YI SYLLABLE GGUP;Lo;0;L;;;;;N;;;;;
+A22E;YI SYLLABLE GGURX;Lo;0;L;;;;;N;;;;;
+A22F;YI SYLLABLE GGUR;Lo;0;L;;;;;N;;;;;
+A230;YI SYLLABLE MGIEX;Lo;0;L;;;;;N;;;;;
+A231;YI SYLLABLE MGIE;Lo;0;L;;;;;N;;;;;
+A232;YI SYLLABLE MGAT;Lo;0;L;;;;;N;;;;;
+A233;YI SYLLABLE MGAX;Lo;0;L;;;;;N;;;;;
+A234;YI SYLLABLE MGA;Lo;0;L;;;;;N;;;;;
+A235;YI SYLLABLE MGAP;Lo;0;L;;;;;N;;;;;
+A236;YI SYLLABLE MGUOX;Lo;0;L;;;;;N;;;;;
+A237;YI SYLLABLE MGUO;Lo;0;L;;;;;N;;;;;
+A238;YI SYLLABLE MGUOP;Lo;0;L;;;;;N;;;;;
+A239;YI SYLLABLE MGOT;Lo;0;L;;;;;N;;;;;
+A23A;YI SYLLABLE MGOX;Lo;0;L;;;;;N;;;;;
+A23B;YI SYLLABLE MGO;Lo;0;L;;;;;N;;;;;
+A23C;YI SYLLABLE MGOP;Lo;0;L;;;;;N;;;;;
+A23D;YI SYLLABLE MGEX;Lo;0;L;;;;;N;;;;;
+A23E;YI SYLLABLE MGE;Lo;0;L;;;;;N;;;;;
+A23F;YI SYLLABLE MGEP;Lo;0;L;;;;;N;;;;;
+A240;YI SYLLABLE MGUT;Lo;0;L;;;;;N;;;;;
+A241;YI SYLLABLE MGUX;Lo;0;L;;;;;N;;;;;
+A242;YI SYLLABLE MGU;Lo;0;L;;;;;N;;;;;
+A243;YI SYLLABLE MGUP;Lo;0;L;;;;;N;;;;;
+A244;YI SYLLABLE MGURX;Lo;0;L;;;;;N;;;;;
+A245;YI SYLLABLE MGUR;Lo;0;L;;;;;N;;;;;
+A246;YI SYLLABLE HXIT;Lo;0;L;;;;;N;;;;;
+A247;YI SYLLABLE HXIX;Lo;0;L;;;;;N;;;;;
+A248;YI SYLLABLE HXI;Lo;0;L;;;;;N;;;;;
+A249;YI SYLLABLE HXIP;Lo;0;L;;;;;N;;;;;
+A24A;YI SYLLABLE HXIET;Lo;0;L;;;;;N;;;;;
+A24B;YI SYLLABLE HXIEX;Lo;0;L;;;;;N;;;;;
+A24C;YI SYLLABLE HXIE;Lo;0;L;;;;;N;;;;;
+A24D;YI SYLLABLE HXIEP;Lo;0;L;;;;;N;;;;;
+A24E;YI SYLLABLE HXAT;Lo;0;L;;;;;N;;;;;
+A24F;YI SYLLABLE HXAX;Lo;0;L;;;;;N;;;;;
+A250;YI SYLLABLE HXA;Lo;0;L;;;;;N;;;;;
+A251;YI SYLLABLE HXAP;Lo;0;L;;;;;N;;;;;
+A252;YI SYLLABLE HXUOT;Lo;0;L;;;;;N;;;;;
+A253;YI SYLLABLE HXUOX;Lo;0;L;;;;;N;;;;;
+A254;YI SYLLABLE HXUO;Lo;0;L;;;;;N;;;;;
+A255;YI SYLLABLE HXUOP;Lo;0;L;;;;;N;;;;;
+A256;YI SYLLABLE HXOT;Lo;0;L;;;;;N;;;;;
+A257;YI SYLLABLE HXOX;Lo;0;L;;;;;N;;;;;
+A258;YI SYLLABLE HXO;Lo;0;L;;;;;N;;;;;
+A259;YI SYLLABLE HXOP;Lo;0;L;;;;;N;;;;;
+A25A;YI SYLLABLE HXEX;Lo;0;L;;;;;N;;;;;
+A25B;YI SYLLABLE HXE;Lo;0;L;;;;;N;;;;;
+A25C;YI SYLLABLE HXEP;Lo;0;L;;;;;N;;;;;
+A25D;YI SYLLABLE NGIEX;Lo;0;L;;;;;N;;;;;
+A25E;YI SYLLABLE NGIE;Lo;0;L;;;;;N;;;;;
+A25F;YI SYLLABLE NGIEP;Lo;0;L;;;;;N;;;;;
+A260;YI SYLLABLE NGAT;Lo;0;L;;;;;N;;;;;
+A261;YI SYLLABLE NGAX;Lo;0;L;;;;;N;;;;;
+A262;YI SYLLABLE NGA;Lo;0;L;;;;;N;;;;;
+A263;YI SYLLABLE NGAP;Lo;0;L;;;;;N;;;;;
+A264;YI SYLLABLE NGUOT;Lo;0;L;;;;;N;;;;;
+A265;YI SYLLABLE NGUOX;Lo;0;L;;;;;N;;;;;
+A266;YI SYLLABLE NGUO;Lo;0;L;;;;;N;;;;;
+A267;YI SYLLABLE NGOT;Lo;0;L;;;;;N;;;;;
+A268;YI SYLLABLE NGOX;Lo;0;L;;;;;N;;;;;
+A269;YI SYLLABLE NGO;Lo;0;L;;;;;N;;;;;
+A26A;YI SYLLABLE NGOP;Lo;0;L;;;;;N;;;;;
+A26B;YI SYLLABLE NGEX;Lo;0;L;;;;;N;;;;;
+A26C;YI SYLLABLE NGE;Lo;0;L;;;;;N;;;;;
+A26D;YI SYLLABLE NGEP;Lo;0;L;;;;;N;;;;;
+A26E;YI SYLLABLE HIT;Lo;0;L;;;;;N;;;;;
+A26F;YI SYLLABLE HIEX;Lo;0;L;;;;;N;;;;;
+A270;YI SYLLABLE HIE;Lo;0;L;;;;;N;;;;;
+A271;YI SYLLABLE HAT;Lo;0;L;;;;;N;;;;;
+A272;YI SYLLABLE HAX;Lo;0;L;;;;;N;;;;;
+A273;YI SYLLABLE HA;Lo;0;L;;;;;N;;;;;
+A274;YI SYLLABLE HAP;Lo;0;L;;;;;N;;;;;
+A275;YI SYLLABLE HUOT;Lo;0;L;;;;;N;;;;;
+A276;YI SYLLABLE HUOX;Lo;0;L;;;;;N;;;;;
+A277;YI SYLLABLE HUO;Lo;0;L;;;;;N;;;;;
+A278;YI SYLLABLE HUOP;Lo;0;L;;;;;N;;;;;
+A279;YI SYLLABLE HOT;Lo;0;L;;;;;N;;;;;
+A27A;YI SYLLABLE HOX;Lo;0;L;;;;;N;;;;;
+A27B;YI SYLLABLE HO;Lo;0;L;;;;;N;;;;;
+A27C;YI SYLLABLE HOP;Lo;0;L;;;;;N;;;;;
+A27D;YI SYLLABLE HEX;Lo;0;L;;;;;N;;;;;
+A27E;YI SYLLABLE HE;Lo;0;L;;;;;N;;;;;
+A27F;YI SYLLABLE HEP;Lo;0;L;;;;;N;;;;;
+A280;YI SYLLABLE WAT;Lo;0;L;;;;;N;;;;;
+A281;YI SYLLABLE WAX;Lo;0;L;;;;;N;;;;;
+A282;YI SYLLABLE WA;Lo;0;L;;;;;N;;;;;
+A283;YI SYLLABLE WAP;Lo;0;L;;;;;N;;;;;
+A284;YI SYLLABLE WUOX;Lo;0;L;;;;;N;;;;;
+A285;YI SYLLABLE WUO;Lo;0;L;;;;;N;;;;;
+A286;YI SYLLABLE WUOP;Lo;0;L;;;;;N;;;;;
+A287;YI SYLLABLE WOX;Lo;0;L;;;;;N;;;;;
+A288;YI SYLLABLE WO;Lo;0;L;;;;;N;;;;;
+A289;YI SYLLABLE WOP;Lo;0;L;;;;;N;;;;;
+A28A;YI SYLLABLE WEX;Lo;0;L;;;;;N;;;;;
+A28B;YI SYLLABLE WE;Lo;0;L;;;;;N;;;;;
+A28C;YI SYLLABLE WEP;Lo;0;L;;;;;N;;;;;
+A28D;YI SYLLABLE ZIT;Lo;0;L;;;;;N;;;;;
+A28E;YI SYLLABLE ZIX;Lo;0;L;;;;;N;;;;;
+A28F;YI SYLLABLE ZI;Lo;0;L;;;;;N;;;;;
+A290;YI SYLLABLE ZIP;Lo;0;L;;;;;N;;;;;
+A291;YI SYLLABLE ZIEX;Lo;0;L;;;;;N;;;;;
+A292;YI SYLLABLE ZIE;Lo;0;L;;;;;N;;;;;
+A293;YI SYLLABLE ZIEP;Lo;0;L;;;;;N;;;;;
+A294;YI SYLLABLE ZAT;Lo;0;L;;;;;N;;;;;
+A295;YI SYLLABLE ZAX;Lo;0;L;;;;;N;;;;;
+A296;YI SYLLABLE ZA;Lo;0;L;;;;;N;;;;;
+A297;YI SYLLABLE ZAP;Lo;0;L;;;;;N;;;;;
+A298;YI SYLLABLE ZUOX;Lo;0;L;;;;;N;;;;;
+A299;YI SYLLABLE ZUO;Lo;0;L;;;;;N;;;;;
+A29A;YI SYLLABLE ZUOP;Lo;0;L;;;;;N;;;;;
+A29B;YI SYLLABLE ZOT;Lo;0;L;;;;;N;;;;;
+A29C;YI SYLLABLE ZOX;Lo;0;L;;;;;N;;;;;
+A29D;YI SYLLABLE ZO;Lo;0;L;;;;;N;;;;;
+A29E;YI SYLLABLE ZOP;Lo;0;L;;;;;N;;;;;
+A29F;YI SYLLABLE ZEX;Lo;0;L;;;;;N;;;;;
+A2A0;YI SYLLABLE ZE;Lo;0;L;;;;;N;;;;;
+A2A1;YI SYLLABLE ZEP;Lo;0;L;;;;;N;;;;;
+A2A2;YI SYLLABLE ZUT;Lo;0;L;;;;;N;;;;;
+A2A3;YI SYLLABLE ZUX;Lo;0;L;;;;;N;;;;;
+A2A4;YI SYLLABLE ZU;Lo;0;L;;;;;N;;;;;
+A2A5;YI SYLLABLE ZUP;Lo;0;L;;;;;N;;;;;
+A2A6;YI SYLLABLE ZURX;Lo;0;L;;;;;N;;;;;
+A2A7;YI SYLLABLE ZUR;Lo;0;L;;;;;N;;;;;
+A2A8;YI SYLLABLE ZYT;Lo;0;L;;;;;N;;;;;
+A2A9;YI SYLLABLE ZYX;Lo;0;L;;;;;N;;;;;
+A2AA;YI SYLLABLE ZY;Lo;0;L;;;;;N;;;;;
+A2AB;YI SYLLABLE ZYP;Lo;0;L;;;;;N;;;;;
+A2AC;YI SYLLABLE ZYRX;Lo;0;L;;;;;N;;;;;
+A2AD;YI SYLLABLE ZYR;Lo;0;L;;;;;N;;;;;
+A2AE;YI SYLLABLE CIT;Lo;0;L;;;;;N;;;;;
+A2AF;YI SYLLABLE CIX;Lo;0;L;;;;;N;;;;;
+A2B0;YI SYLLABLE CI;Lo;0;L;;;;;N;;;;;
+A2B1;YI SYLLABLE CIP;Lo;0;L;;;;;N;;;;;
+A2B2;YI SYLLABLE CIET;Lo;0;L;;;;;N;;;;;
+A2B3;YI SYLLABLE CIEX;Lo;0;L;;;;;N;;;;;
+A2B4;YI SYLLABLE CIE;Lo;0;L;;;;;N;;;;;
+A2B5;YI SYLLABLE CIEP;Lo;0;L;;;;;N;;;;;
+A2B6;YI SYLLABLE CAT;Lo;0;L;;;;;N;;;;;
+A2B7;YI SYLLABLE CAX;Lo;0;L;;;;;N;;;;;
+A2B8;YI SYLLABLE CA;Lo;0;L;;;;;N;;;;;
+A2B9;YI SYLLABLE CAP;Lo;0;L;;;;;N;;;;;
+A2BA;YI SYLLABLE CUOX;Lo;0;L;;;;;N;;;;;
+A2BB;YI SYLLABLE CUO;Lo;0;L;;;;;N;;;;;
+A2BC;YI SYLLABLE CUOP;Lo;0;L;;;;;N;;;;;
+A2BD;YI SYLLABLE COT;Lo;0;L;;;;;N;;;;;
+A2BE;YI SYLLABLE COX;Lo;0;L;;;;;N;;;;;
+A2BF;YI SYLLABLE CO;Lo;0;L;;;;;N;;;;;
+A2C0;YI SYLLABLE COP;Lo;0;L;;;;;N;;;;;
+A2C1;YI SYLLABLE CEX;Lo;0;L;;;;;N;;;;;
+A2C2;YI SYLLABLE CE;Lo;0;L;;;;;N;;;;;
+A2C3;YI SYLLABLE CEP;Lo;0;L;;;;;N;;;;;
+A2C4;YI SYLLABLE CUT;Lo;0;L;;;;;N;;;;;
+A2C5;YI SYLLABLE CUX;Lo;0;L;;;;;N;;;;;
+A2C6;YI SYLLABLE CU;Lo;0;L;;;;;N;;;;;
+A2C7;YI SYLLABLE CUP;Lo;0;L;;;;;N;;;;;
+A2C8;YI SYLLABLE CURX;Lo;0;L;;;;;N;;;;;
+A2C9;YI SYLLABLE CUR;Lo;0;L;;;;;N;;;;;
+A2CA;YI SYLLABLE CYT;Lo;0;L;;;;;N;;;;;
+A2CB;YI SYLLABLE CYX;Lo;0;L;;;;;N;;;;;
+A2CC;YI SYLLABLE CY;Lo;0;L;;;;;N;;;;;
+A2CD;YI SYLLABLE CYP;Lo;0;L;;;;;N;;;;;
+A2CE;YI SYLLABLE CYRX;Lo;0;L;;;;;N;;;;;
+A2CF;YI SYLLABLE CYR;Lo;0;L;;;;;N;;;;;
+A2D0;YI SYLLABLE ZZIT;Lo;0;L;;;;;N;;;;;
+A2D1;YI SYLLABLE ZZIX;Lo;0;L;;;;;N;;;;;
+A2D2;YI SYLLABLE ZZI;Lo;0;L;;;;;N;;;;;
+A2D3;YI SYLLABLE ZZIP;Lo;0;L;;;;;N;;;;;
+A2D4;YI SYLLABLE ZZIET;Lo;0;L;;;;;N;;;;;
+A2D5;YI SYLLABLE ZZIEX;Lo;0;L;;;;;N;;;;;
+A2D6;YI SYLLABLE ZZIE;Lo;0;L;;;;;N;;;;;
+A2D7;YI SYLLABLE ZZIEP;Lo;0;L;;;;;N;;;;;
+A2D8;YI SYLLABLE ZZAT;Lo;0;L;;;;;N;;;;;
+A2D9;YI SYLLABLE ZZAX;Lo;0;L;;;;;N;;;;;
+A2DA;YI SYLLABLE ZZA;Lo;0;L;;;;;N;;;;;
+A2DB;YI SYLLABLE ZZAP;Lo;0;L;;;;;N;;;;;
+A2DC;YI SYLLABLE ZZOX;Lo;0;L;;;;;N;;;;;
+A2DD;YI SYLLABLE ZZO;Lo;0;L;;;;;N;;;;;
+A2DE;YI SYLLABLE ZZOP;Lo;0;L;;;;;N;;;;;
+A2DF;YI SYLLABLE ZZEX;Lo;0;L;;;;;N;;;;;
+A2E0;YI SYLLABLE ZZE;Lo;0;L;;;;;N;;;;;
+A2E1;YI SYLLABLE ZZEP;Lo;0;L;;;;;N;;;;;
+A2E2;YI SYLLABLE ZZUX;Lo;0;L;;;;;N;;;;;
+A2E3;YI SYLLABLE ZZU;Lo;0;L;;;;;N;;;;;
+A2E4;YI SYLLABLE ZZUP;Lo;0;L;;;;;N;;;;;
+A2E5;YI SYLLABLE ZZURX;Lo;0;L;;;;;N;;;;;
+A2E6;YI SYLLABLE ZZUR;Lo;0;L;;;;;N;;;;;
+A2E7;YI SYLLABLE ZZYT;Lo;0;L;;;;;N;;;;;
+A2E8;YI SYLLABLE ZZYX;Lo;0;L;;;;;N;;;;;
+A2E9;YI SYLLABLE ZZY;Lo;0;L;;;;;N;;;;;
+A2EA;YI SYLLABLE ZZYP;Lo;0;L;;;;;N;;;;;
+A2EB;YI SYLLABLE ZZYRX;Lo;0;L;;;;;N;;;;;
+A2EC;YI SYLLABLE ZZYR;Lo;0;L;;;;;N;;;;;
+A2ED;YI SYLLABLE NZIT;Lo;0;L;;;;;N;;;;;
+A2EE;YI SYLLABLE NZIX;Lo;0;L;;;;;N;;;;;
+A2EF;YI SYLLABLE NZI;Lo;0;L;;;;;N;;;;;
+A2F0;YI SYLLABLE NZIP;Lo;0;L;;;;;N;;;;;
+A2F1;YI SYLLABLE NZIEX;Lo;0;L;;;;;N;;;;;
+A2F2;YI SYLLABLE NZIE;Lo;0;L;;;;;N;;;;;
+A2F3;YI SYLLABLE NZIEP;Lo;0;L;;;;;N;;;;;
+A2F4;YI SYLLABLE NZAT;Lo;0;L;;;;;N;;;;;
+A2F5;YI SYLLABLE NZAX;Lo;0;L;;;;;N;;;;;
+A2F6;YI SYLLABLE NZA;Lo;0;L;;;;;N;;;;;
+A2F7;YI SYLLABLE NZAP;Lo;0;L;;;;;N;;;;;
+A2F8;YI SYLLABLE NZUOX;Lo;0;L;;;;;N;;;;;
+A2F9;YI SYLLABLE NZUO;Lo;0;L;;;;;N;;;;;
+A2FA;YI SYLLABLE NZOX;Lo;0;L;;;;;N;;;;;
+A2FB;YI SYLLABLE NZOP;Lo;0;L;;;;;N;;;;;
+A2FC;YI SYLLABLE NZEX;Lo;0;L;;;;;N;;;;;
+A2FD;YI SYLLABLE NZE;Lo;0;L;;;;;N;;;;;
+A2FE;YI SYLLABLE NZUX;Lo;0;L;;;;;N;;;;;
+A2FF;YI SYLLABLE NZU;Lo;0;L;;;;;N;;;;;
+A300;YI SYLLABLE NZUP;Lo;0;L;;;;;N;;;;;
+A301;YI SYLLABLE NZURX;Lo;0;L;;;;;N;;;;;
+A302;YI SYLLABLE NZUR;Lo;0;L;;;;;N;;;;;
+A303;YI SYLLABLE NZYT;Lo;0;L;;;;;N;;;;;
+A304;YI SYLLABLE NZYX;Lo;0;L;;;;;N;;;;;
+A305;YI SYLLABLE NZY;Lo;0;L;;;;;N;;;;;
+A306;YI SYLLABLE NZYP;Lo;0;L;;;;;N;;;;;
+A307;YI SYLLABLE NZYRX;Lo;0;L;;;;;N;;;;;
+A308;YI SYLLABLE NZYR;Lo;0;L;;;;;N;;;;;
+A309;YI SYLLABLE SIT;Lo;0;L;;;;;N;;;;;
+A30A;YI SYLLABLE SIX;Lo;0;L;;;;;N;;;;;
+A30B;YI SYLLABLE SI;Lo;0;L;;;;;N;;;;;
+A30C;YI SYLLABLE SIP;Lo;0;L;;;;;N;;;;;
+A30D;YI SYLLABLE SIEX;Lo;0;L;;;;;N;;;;;
+A30E;YI SYLLABLE SIE;Lo;0;L;;;;;N;;;;;
+A30F;YI SYLLABLE SIEP;Lo;0;L;;;;;N;;;;;
+A310;YI SYLLABLE SAT;Lo;0;L;;;;;N;;;;;
+A311;YI SYLLABLE SAX;Lo;0;L;;;;;N;;;;;
+A312;YI SYLLABLE SA;Lo;0;L;;;;;N;;;;;
+A313;YI SYLLABLE SAP;Lo;0;L;;;;;N;;;;;
+A314;YI SYLLABLE SUOX;Lo;0;L;;;;;N;;;;;
+A315;YI SYLLABLE SUO;Lo;0;L;;;;;N;;;;;
+A316;YI SYLLABLE SUOP;Lo;0;L;;;;;N;;;;;
+A317;YI SYLLABLE SOT;Lo;0;L;;;;;N;;;;;
+A318;YI SYLLABLE SOX;Lo;0;L;;;;;N;;;;;
+A319;YI SYLLABLE SO;Lo;0;L;;;;;N;;;;;
+A31A;YI SYLLABLE SOP;Lo;0;L;;;;;N;;;;;
+A31B;YI SYLLABLE SEX;Lo;0;L;;;;;N;;;;;
+A31C;YI SYLLABLE SE;Lo;0;L;;;;;N;;;;;
+A31D;YI SYLLABLE SEP;Lo;0;L;;;;;N;;;;;
+A31E;YI SYLLABLE SUT;Lo;0;L;;;;;N;;;;;
+A31F;YI SYLLABLE SUX;Lo;0;L;;;;;N;;;;;
+A320;YI SYLLABLE SU;Lo;0;L;;;;;N;;;;;
+A321;YI SYLLABLE SUP;Lo;0;L;;;;;N;;;;;
+A322;YI SYLLABLE SURX;Lo;0;L;;;;;N;;;;;
+A323;YI SYLLABLE SUR;Lo;0;L;;;;;N;;;;;
+A324;YI SYLLABLE SYT;Lo;0;L;;;;;N;;;;;
+A325;YI SYLLABLE SYX;Lo;0;L;;;;;N;;;;;
+A326;YI SYLLABLE SY;Lo;0;L;;;;;N;;;;;
+A327;YI SYLLABLE SYP;Lo;0;L;;;;;N;;;;;
+A328;YI SYLLABLE SYRX;Lo;0;L;;;;;N;;;;;
+A329;YI SYLLABLE SYR;Lo;0;L;;;;;N;;;;;
+A32A;YI SYLLABLE SSIT;Lo;0;L;;;;;N;;;;;
+A32B;YI SYLLABLE SSIX;Lo;0;L;;;;;N;;;;;
+A32C;YI SYLLABLE SSI;Lo;0;L;;;;;N;;;;;
+A32D;YI SYLLABLE SSIP;Lo;0;L;;;;;N;;;;;
+A32E;YI SYLLABLE SSIEX;Lo;0;L;;;;;N;;;;;
+A32F;YI SYLLABLE SSIE;Lo;0;L;;;;;N;;;;;
+A330;YI SYLLABLE SSIEP;Lo;0;L;;;;;N;;;;;
+A331;YI SYLLABLE SSAT;Lo;0;L;;;;;N;;;;;
+A332;YI SYLLABLE SSAX;Lo;0;L;;;;;N;;;;;
+A333;YI SYLLABLE SSA;Lo;0;L;;;;;N;;;;;
+A334;YI SYLLABLE SSAP;Lo;0;L;;;;;N;;;;;
+A335;YI SYLLABLE SSOT;Lo;0;L;;;;;N;;;;;
+A336;YI SYLLABLE SSOX;Lo;0;L;;;;;N;;;;;
+A337;YI SYLLABLE SSO;Lo;0;L;;;;;N;;;;;
+A338;YI SYLLABLE SSOP;Lo;0;L;;;;;N;;;;;
+A339;YI SYLLABLE SSEX;Lo;0;L;;;;;N;;;;;
+A33A;YI SYLLABLE SSE;Lo;0;L;;;;;N;;;;;
+A33B;YI SYLLABLE SSEP;Lo;0;L;;;;;N;;;;;
+A33C;YI SYLLABLE SSUT;Lo;0;L;;;;;N;;;;;
+A33D;YI SYLLABLE SSUX;Lo;0;L;;;;;N;;;;;
+A33E;YI SYLLABLE SSU;Lo;0;L;;;;;N;;;;;
+A33F;YI SYLLABLE SSUP;Lo;0;L;;;;;N;;;;;
+A340;YI SYLLABLE SSYT;Lo;0;L;;;;;N;;;;;
+A341;YI SYLLABLE SSYX;Lo;0;L;;;;;N;;;;;
+A342;YI SYLLABLE SSY;Lo;0;L;;;;;N;;;;;
+A343;YI SYLLABLE SSYP;Lo;0;L;;;;;N;;;;;
+A344;YI SYLLABLE SSYRX;Lo;0;L;;;;;N;;;;;
+A345;YI SYLLABLE SSYR;Lo;0;L;;;;;N;;;;;
+A346;YI SYLLABLE ZHAT;Lo;0;L;;;;;N;;;;;
+A347;YI SYLLABLE ZHAX;Lo;0;L;;;;;N;;;;;
+A348;YI SYLLABLE ZHA;Lo;0;L;;;;;N;;;;;
+A349;YI SYLLABLE ZHAP;Lo;0;L;;;;;N;;;;;
+A34A;YI SYLLABLE ZHUOX;Lo;0;L;;;;;N;;;;;
+A34B;YI SYLLABLE ZHUO;Lo;0;L;;;;;N;;;;;
+A34C;YI SYLLABLE ZHUOP;Lo;0;L;;;;;N;;;;;
+A34D;YI SYLLABLE ZHOT;Lo;0;L;;;;;N;;;;;
+A34E;YI SYLLABLE ZHOX;Lo;0;L;;;;;N;;;;;
+A34F;YI SYLLABLE ZHO;Lo;0;L;;;;;N;;;;;
+A350;YI SYLLABLE ZHOP;Lo;0;L;;;;;N;;;;;
+A351;YI SYLLABLE ZHET;Lo;0;L;;;;;N;;;;;
+A352;YI SYLLABLE ZHEX;Lo;0;L;;;;;N;;;;;
+A353;YI SYLLABLE ZHE;Lo;0;L;;;;;N;;;;;
+A354;YI SYLLABLE ZHEP;Lo;0;L;;;;;N;;;;;
+A355;YI SYLLABLE ZHUT;Lo;0;L;;;;;N;;;;;
+A356;YI SYLLABLE ZHUX;Lo;0;L;;;;;N;;;;;
+A357;YI SYLLABLE ZHU;Lo;0;L;;;;;N;;;;;
+A358;YI SYLLABLE ZHUP;Lo;0;L;;;;;N;;;;;
+A359;YI SYLLABLE ZHURX;Lo;0;L;;;;;N;;;;;
+A35A;YI SYLLABLE ZHUR;Lo;0;L;;;;;N;;;;;
+A35B;YI SYLLABLE ZHYT;Lo;0;L;;;;;N;;;;;
+A35C;YI SYLLABLE ZHYX;Lo;0;L;;;;;N;;;;;
+A35D;YI SYLLABLE ZHY;Lo;0;L;;;;;N;;;;;
+A35E;YI SYLLABLE ZHYP;Lo;0;L;;;;;N;;;;;
+A35F;YI SYLLABLE ZHYRX;Lo;0;L;;;;;N;;;;;
+A360;YI SYLLABLE ZHYR;Lo;0;L;;;;;N;;;;;
+A361;YI SYLLABLE CHAT;Lo;0;L;;;;;N;;;;;
+A362;YI SYLLABLE CHAX;Lo;0;L;;;;;N;;;;;
+A363;YI SYLLABLE CHA;Lo;0;L;;;;;N;;;;;
+A364;YI SYLLABLE CHAP;Lo;0;L;;;;;N;;;;;
+A365;YI SYLLABLE CHUOT;Lo;0;L;;;;;N;;;;;
+A366;YI SYLLABLE CHUOX;Lo;0;L;;;;;N;;;;;
+A367;YI SYLLABLE CHUO;Lo;0;L;;;;;N;;;;;
+A368;YI SYLLABLE CHUOP;Lo;0;L;;;;;N;;;;;
+A369;YI SYLLABLE CHOT;Lo;0;L;;;;;N;;;;;
+A36A;YI SYLLABLE CHOX;Lo;0;L;;;;;N;;;;;
+A36B;YI SYLLABLE CHO;Lo;0;L;;;;;N;;;;;
+A36C;YI SYLLABLE CHOP;Lo;0;L;;;;;N;;;;;
+A36D;YI SYLLABLE CHET;Lo;0;L;;;;;N;;;;;
+A36E;YI SYLLABLE CHEX;Lo;0;L;;;;;N;;;;;
+A36F;YI SYLLABLE CHE;Lo;0;L;;;;;N;;;;;
+A370;YI SYLLABLE CHEP;Lo;0;L;;;;;N;;;;;
+A371;YI SYLLABLE CHUX;Lo;0;L;;;;;N;;;;;
+A372;YI SYLLABLE CHU;Lo;0;L;;;;;N;;;;;
+A373;YI SYLLABLE CHUP;Lo;0;L;;;;;N;;;;;
+A374;YI SYLLABLE CHURX;Lo;0;L;;;;;N;;;;;
+A375;YI SYLLABLE CHUR;Lo;0;L;;;;;N;;;;;
+A376;YI SYLLABLE CHYT;Lo;0;L;;;;;N;;;;;
+A377;YI SYLLABLE CHYX;Lo;0;L;;;;;N;;;;;
+A378;YI SYLLABLE CHY;Lo;0;L;;;;;N;;;;;
+A379;YI SYLLABLE CHYP;Lo;0;L;;;;;N;;;;;
+A37A;YI SYLLABLE CHYRX;Lo;0;L;;;;;N;;;;;
+A37B;YI SYLLABLE CHYR;Lo;0;L;;;;;N;;;;;
+A37C;YI SYLLABLE RRAX;Lo;0;L;;;;;N;;;;;
+A37D;YI SYLLABLE RRA;Lo;0;L;;;;;N;;;;;
+A37E;YI SYLLABLE RRUOX;Lo;0;L;;;;;N;;;;;
+A37F;YI SYLLABLE RRUO;Lo;0;L;;;;;N;;;;;
+A380;YI SYLLABLE RROT;Lo;0;L;;;;;N;;;;;
+A381;YI SYLLABLE RROX;Lo;0;L;;;;;N;;;;;
+A382;YI SYLLABLE RRO;Lo;0;L;;;;;N;;;;;
+A383;YI SYLLABLE RROP;Lo;0;L;;;;;N;;;;;
+A384;YI SYLLABLE RRET;Lo;0;L;;;;;N;;;;;
+A385;YI SYLLABLE RREX;Lo;0;L;;;;;N;;;;;
+A386;YI SYLLABLE RRE;Lo;0;L;;;;;N;;;;;
+A387;YI SYLLABLE RREP;Lo;0;L;;;;;N;;;;;
+A388;YI SYLLABLE RRUT;Lo;0;L;;;;;N;;;;;
+A389;YI SYLLABLE RRUX;Lo;0;L;;;;;N;;;;;
+A38A;YI SYLLABLE RRU;Lo;0;L;;;;;N;;;;;
+A38B;YI SYLLABLE RRUP;Lo;0;L;;;;;N;;;;;
+A38C;YI SYLLABLE RRURX;Lo;0;L;;;;;N;;;;;
+A38D;YI SYLLABLE RRUR;Lo;0;L;;;;;N;;;;;
+A38E;YI SYLLABLE RRYT;Lo;0;L;;;;;N;;;;;
+A38F;YI SYLLABLE RRYX;Lo;0;L;;;;;N;;;;;
+A390;YI SYLLABLE RRY;Lo;0;L;;;;;N;;;;;
+A391;YI SYLLABLE RRYP;Lo;0;L;;;;;N;;;;;
+A392;YI SYLLABLE RRYRX;Lo;0;L;;;;;N;;;;;
+A393;YI SYLLABLE RRYR;Lo;0;L;;;;;N;;;;;
+A394;YI SYLLABLE NRAT;Lo;0;L;;;;;N;;;;;
+A395;YI SYLLABLE NRAX;Lo;0;L;;;;;N;;;;;
+A396;YI SYLLABLE NRA;Lo;0;L;;;;;N;;;;;
+A397;YI SYLLABLE NRAP;Lo;0;L;;;;;N;;;;;
+A398;YI SYLLABLE NROX;Lo;0;L;;;;;N;;;;;
+A399;YI SYLLABLE NRO;Lo;0;L;;;;;N;;;;;
+A39A;YI SYLLABLE NROP;Lo;0;L;;;;;N;;;;;
+A39B;YI SYLLABLE NRET;Lo;0;L;;;;;N;;;;;
+A39C;YI SYLLABLE NREX;Lo;0;L;;;;;N;;;;;
+A39D;YI SYLLABLE NRE;Lo;0;L;;;;;N;;;;;
+A39E;YI SYLLABLE NREP;Lo;0;L;;;;;N;;;;;
+A39F;YI SYLLABLE NRUT;Lo;0;L;;;;;N;;;;;
+A3A0;YI SYLLABLE NRUX;Lo;0;L;;;;;N;;;;;
+A3A1;YI SYLLABLE NRU;Lo;0;L;;;;;N;;;;;
+A3A2;YI SYLLABLE NRUP;Lo;0;L;;;;;N;;;;;
+A3A3;YI SYLLABLE NRURX;Lo;0;L;;;;;N;;;;;
+A3A4;YI SYLLABLE NRUR;Lo;0;L;;;;;N;;;;;
+A3A5;YI SYLLABLE NRYT;Lo;0;L;;;;;N;;;;;
+A3A6;YI SYLLABLE NRYX;Lo;0;L;;;;;N;;;;;
+A3A7;YI SYLLABLE NRY;Lo;0;L;;;;;N;;;;;
+A3A8;YI SYLLABLE NRYP;Lo;0;L;;;;;N;;;;;
+A3A9;YI SYLLABLE NRYRX;Lo;0;L;;;;;N;;;;;
+A3AA;YI SYLLABLE NRYR;Lo;0;L;;;;;N;;;;;
+A3AB;YI SYLLABLE SHAT;Lo;0;L;;;;;N;;;;;
+A3AC;YI SYLLABLE SHAX;Lo;0;L;;;;;N;;;;;
+A3AD;YI SYLLABLE SHA;Lo;0;L;;;;;N;;;;;
+A3AE;YI SYLLABLE SHAP;Lo;0;L;;;;;N;;;;;
+A3AF;YI SYLLABLE SHUOX;Lo;0;L;;;;;N;;;;;
+A3B0;YI SYLLABLE SHUO;Lo;0;L;;;;;N;;;;;
+A3B1;YI SYLLABLE SHUOP;Lo;0;L;;;;;N;;;;;
+A3B2;YI SYLLABLE SHOT;Lo;0;L;;;;;N;;;;;
+A3B3;YI SYLLABLE SHOX;Lo;0;L;;;;;N;;;;;
+A3B4;YI SYLLABLE SHO;Lo;0;L;;;;;N;;;;;
+A3B5;YI SYLLABLE SHOP;Lo;0;L;;;;;N;;;;;
+A3B6;YI SYLLABLE SHET;Lo;0;L;;;;;N;;;;;
+A3B7;YI SYLLABLE SHEX;Lo;0;L;;;;;N;;;;;
+A3B8;YI SYLLABLE SHE;Lo;0;L;;;;;N;;;;;
+A3B9;YI SYLLABLE SHEP;Lo;0;L;;;;;N;;;;;
+A3BA;YI SYLLABLE SHUT;Lo;0;L;;;;;N;;;;;
+A3BB;YI SYLLABLE SHUX;Lo;0;L;;;;;N;;;;;
+A3BC;YI SYLLABLE SHU;Lo;0;L;;;;;N;;;;;
+A3BD;YI SYLLABLE SHUP;Lo;0;L;;;;;N;;;;;
+A3BE;YI SYLLABLE SHURX;Lo;0;L;;;;;N;;;;;
+A3BF;YI SYLLABLE SHUR;Lo;0;L;;;;;N;;;;;
+A3C0;YI SYLLABLE SHYT;Lo;0;L;;;;;N;;;;;
+A3C1;YI SYLLABLE SHYX;Lo;0;L;;;;;N;;;;;
+A3C2;YI SYLLABLE SHY;Lo;0;L;;;;;N;;;;;
+A3C3;YI SYLLABLE SHYP;Lo;0;L;;;;;N;;;;;
+A3C4;YI SYLLABLE SHYRX;Lo;0;L;;;;;N;;;;;
+A3C5;YI SYLLABLE SHYR;Lo;0;L;;;;;N;;;;;
+A3C6;YI SYLLABLE RAT;Lo;0;L;;;;;N;;;;;
+A3C7;YI SYLLABLE RAX;Lo;0;L;;;;;N;;;;;
+A3C8;YI SYLLABLE RA;Lo;0;L;;;;;N;;;;;
+A3C9;YI SYLLABLE RAP;Lo;0;L;;;;;N;;;;;
+A3CA;YI SYLLABLE RUOX;Lo;0;L;;;;;N;;;;;
+A3CB;YI SYLLABLE RUO;Lo;0;L;;;;;N;;;;;
+A3CC;YI SYLLABLE RUOP;Lo;0;L;;;;;N;;;;;
+A3CD;YI SYLLABLE ROT;Lo;0;L;;;;;N;;;;;
+A3CE;YI SYLLABLE ROX;Lo;0;L;;;;;N;;;;;
+A3CF;YI SYLLABLE RO;Lo;0;L;;;;;N;;;;;
+A3D0;YI SYLLABLE ROP;Lo;0;L;;;;;N;;;;;
+A3D1;YI SYLLABLE REX;Lo;0;L;;;;;N;;;;;
+A3D2;YI SYLLABLE RE;Lo;0;L;;;;;N;;;;;
+A3D3;YI SYLLABLE REP;Lo;0;L;;;;;N;;;;;
+A3D4;YI SYLLABLE RUT;Lo;0;L;;;;;N;;;;;
+A3D5;YI SYLLABLE RUX;Lo;0;L;;;;;N;;;;;
+A3D6;YI SYLLABLE RU;Lo;0;L;;;;;N;;;;;
+A3D7;YI SYLLABLE RUP;Lo;0;L;;;;;N;;;;;
+A3D8;YI SYLLABLE RURX;Lo;0;L;;;;;N;;;;;
+A3D9;YI SYLLABLE RUR;Lo;0;L;;;;;N;;;;;
+A3DA;YI SYLLABLE RYT;Lo;0;L;;;;;N;;;;;
+A3DB;YI SYLLABLE RYX;Lo;0;L;;;;;N;;;;;
+A3DC;YI SYLLABLE RY;Lo;0;L;;;;;N;;;;;
+A3DD;YI SYLLABLE RYP;Lo;0;L;;;;;N;;;;;
+A3DE;YI SYLLABLE RYRX;Lo;0;L;;;;;N;;;;;
+A3DF;YI SYLLABLE RYR;Lo;0;L;;;;;N;;;;;
+A3E0;YI SYLLABLE JIT;Lo;0;L;;;;;N;;;;;
+A3E1;YI SYLLABLE JIX;Lo;0;L;;;;;N;;;;;
+A3E2;YI SYLLABLE JI;Lo;0;L;;;;;N;;;;;
+A3E3;YI SYLLABLE JIP;Lo;0;L;;;;;N;;;;;
+A3E4;YI SYLLABLE JIET;Lo;0;L;;;;;N;;;;;
+A3E5;YI SYLLABLE JIEX;Lo;0;L;;;;;N;;;;;
+A3E6;YI SYLLABLE JIE;Lo;0;L;;;;;N;;;;;
+A3E7;YI SYLLABLE JIEP;Lo;0;L;;;;;N;;;;;
+A3E8;YI SYLLABLE JUOT;Lo;0;L;;;;;N;;;;;
+A3E9;YI SYLLABLE JUOX;Lo;0;L;;;;;N;;;;;
+A3EA;YI SYLLABLE JUO;Lo;0;L;;;;;N;;;;;
+A3EB;YI SYLLABLE JUOP;Lo;0;L;;;;;N;;;;;
+A3EC;YI SYLLABLE JOT;Lo;0;L;;;;;N;;;;;
+A3ED;YI SYLLABLE JOX;Lo;0;L;;;;;N;;;;;
+A3EE;YI SYLLABLE JO;Lo;0;L;;;;;N;;;;;
+A3EF;YI SYLLABLE JOP;Lo;0;L;;;;;N;;;;;
+A3F0;YI SYLLABLE JUT;Lo;0;L;;;;;N;;;;;
+A3F1;YI SYLLABLE JUX;Lo;0;L;;;;;N;;;;;
+A3F2;YI SYLLABLE JU;Lo;0;L;;;;;N;;;;;
+A3F3;YI SYLLABLE JUP;Lo;0;L;;;;;N;;;;;
+A3F4;YI SYLLABLE JURX;Lo;0;L;;;;;N;;;;;
+A3F5;YI SYLLABLE JUR;Lo;0;L;;;;;N;;;;;
+A3F6;YI SYLLABLE JYT;Lo;0;L;;;;;N;;;;;
+A3F7;YI SYLLABLE JYX;Lo;0;L;;;;;N;;;;;
+A3F8;YI SYLLABLE JY;Lo;0;L;;;;;N;;;;;
+A3F9;YI SYLLABLE JYP;Lo;0;L;;;;;N;;;;;
+A3FA;YI SYLLABLE JYRX;Lo;0;L;;;;;N;;;;;
+A3FB;YI SYLLABLE JYR;Lo;0;L;;;;;N;;;;;
+A3FC;YI SYLLABLE QIT;Lo;0;L;;;;;N;;;;;
+A3FD;YI SYLLABLE QIX;Lo;0;L;;;;;N;;;;;
+A3FE;YI SYLLABLE QI;Lo;0;L;;;;;N;;;;;
+A3FF;YI SYLLABLE QIP;Lo;0;L;;;;;N;;;;;
+A400;YI SYLLABLE QIET;Lo;0;L;;;;;N;;;;;
+A401;YI SYLLABLE QIEX;Lo;0;L;;;;;N;;;;;
+A402;YI SYLLABLE QIE;Lo;0;L;;;;;N;;;;;
+A403;YI SYLLABLE QIEP;Lo;0;L;;;;;N;;;;;
+A404;YI SYLLABLE QUOT;Lo;0;L;;;;;N;;;;;
+A405;YI SYLLABLE QUOX;Lo;0;L;;;;;N;;;;;
+A406;YI SYLLABLE QUO;Lo;0;L;;;;;N;;;;;
+A407;YI SYLLABLE QUOP;Lo;0;L;;;;;N;;;;;
+A408;YI SYLLABLE QOT;Lo;0;L;;;;;N;;;;;
+A409;YI SYLLABLE QOX;Lo;0;L;;;;;N;;;;;
+A40A;YI SYLLABLE QO;Lo;0;L;;;;;N;;;;;
+A40B;YI SYLLABLE QOP;Lo;0;L;;;;;N;;;;;
+A40C;YI SYLLABLE QUT;Lo;0;L;;;;;N;;;;;
+A40D;YI SYLLABLE QUX;Lo;0;L;;;;;N;;;;;
+A40E;YI SYLLABLE QU;Lo;0;L;;;;;N;;;;;
+A40F;YI SYLLABLE QUP;Lo;0;L;;;;;N;;;;;
+A410;YI SYLLABLE QURX;Lo;0;L;;;;;N;;;;;
+A411;YI SYLLABLE QUR;Lo;0;L;;;;;N;;;;;
+A412;YI SYLLABLE QYT;Lo;0;L;;;;;N;;;;;
+A413;YI SYLLABLE QYX;Lo;0;L;;;;;N;;;;;
+A414;YI SYLLABLE QY;Lo;0;L;;;;;N;;;;;
+A415;YI SYLLABLE QYP;Lo;0;L;;;;;N;;;;;
+A416;YI SYLLABLE QYRX;Lo;0;L;;;;;N;;;;;
+A417;YI SYLLABLE QYR;Lo;0;L;;;;;N;;;;;
+A418;YI SYLLABLE JJIT;Lo;0;L;;;;;N;;;;;
+A419;YI SYLLABLE JJIX;Lo;0;L;;;;;N;;;;;
+A41A;YI SYLLABLE JJI;Lo;0;L;;;;;N;;;;;
+A41B;YI SYLLABLE JJIP;Lo;0;L;;;;;N;;;;;
+A41C;YI SYLLABLE JJIET;Lo;0;L;;;;;N;;;;;
+A41D;YI SYLLABLE JJIEX;Lo;0;L;;;;;N;;;;;
+A41E;YI SYLLABLE JJIE;Lo;0;L;;;;;N;;;;;
+A41F;YI SYLLABLE JJIEP;Lo;0;L;;;;;N;;;;;
+A420;YI SYLLABLE JJUOX;Lo;0;L;;;;;N;;;;;
+A421;YI SYLLABLE JJUO;Lo;0;L;;;;;N;;;;;
+A422;YI SYLLABLE JJUOP;Lo;0;L;;;;;N;;;;;
+A423;YI SYLLABLE JJOT;Lo;0;L;;;;;N;;;;;
+A424;YI SYLLABLE JJOX;Lo;0;L;;;;;N;;;;;
+A425;YI SYLLABLE JJO;Lo;0;L;;;;;N;;;;;
+A426;YI SYLLABLE JJOP;Lo;0;L;;;;;N;;;;;
+A427;YI SYLLABLE JJUT;Lo;0;L;;;;;N;;;;;
+A428;YI SYLLABLE JJUX;Lo;0;L;;;;;N;;;;;
+A429;YI SYLLABLE JJU;Lo;0;L;;;;;N;;;;;
+A42A;YI SYLLABLE JJUP;Lo;0;L;;;;;N;;;;;
+A42B;YI SYLLABLE JJURX;Lo;0;L;;;;;N;;;;;
+A42C;YI SYLLABLE JJUR;Lo;0;L;;;;;N;;;;;
+A42D;YI SYLLABLE JJYT;Lo;0;L;;;;;N;;;;;
+A42E;YI SYLLABLE JJYX;Lo;0;L;;;;;N;;;;;
+A42F;YI SYLLABLE JJY;Lo;0;L;;;;;N;;;;;
+A430;YI SYLLABLE JJYP;Lo;0;L;;;;;N;;;;;
+A431;YI SYLLABLE NJIT;Lo;0;L;;;;;N;;;;;
+A432;YI SYLLABLE NJIX;Lo;0;L;;;;;N;;;;;
+A433;YI SYLLABLE NJI;Lo;0;L;;;;;N;;;;;
+A434;YI SYLLABLE NJIP;Lo;0;L;;;;;N;;;;;
+A435;YI SYLLABLE NJIET;Lo;0;L;;;;;N;;;;;
+A436;YI SYLLABLE NJIEX;Lo;0;L;;;;;N;;;;;
+A437;YI SYLLABLE NJIE;Lo;0;L;;;;;N;;;;;
+A438;YI SYLLABLE NJIEP;Lo;0;L;;;;;N;;;;;
+A439;YI SYLLABLE NJUOX;Lo;0;L;;;;;N;;;;;
+A43A;YI SYLLABLE NJUO;Lo;0;L;;;;;N;;;;;
+A43B;YI SYLLABLE NJOT;Lo;0;L;;;;;N;;;;;
+A43C;YI SYLLABLE NJOX;Lo;0;L;;;;;N;;;;;
+A43D;YI SYLLABLE NJO;Lo;0;L;;;;;N;;;;;
+A43E;YI SYLLABLE NJOP;Lo;0;L;;;;;N;;;;;
+A43F;YI SYLLABLE NJUX;Lo;0;L;;;;;N;;;;;
+A440;YI SYLLABLE NJU;Lo;0;L;;;;;N;;;;;
+A441;YI SYLLABLE NJUP;Lo;0;L;;;;;N;;;;;
+A442;YI SYLLABLE NJURX;Lo;0;L;;;;;N;;;;;
+A443;YI SYLLABLE NJUR;Lo;0;L;;;;;N;;;;;
+A444;YI SYLLABLE NJYT;Lo;0;L;;;;;N;;;;;
+A445;YI SYLLABLE NJYX;Lo;0;L;;;;;N;;;;;
+A446;YI SYLLABLE NJY;Lo;0;L;;;;;N;;;;;
+A447;YI SYLLABLE NJYP;Lo;0;L;;;;;N;;;;;
+A448;YI SYLLABLE NJYRX;Lo;0;L;;;;;N;;;;;
+A449;YI SYLLABLE NJYR;Lo;0;L;;;;;N;;;;;
+A44A;YI SYLLABLE NYIT;Lo;0;L;;;;;N;;;;;
+A44B;YI SYLLABLE NYIX;Lo;0;L;;;;;N;;;;;
+A44C;YI SYLLABLE NYI;Lo;0;L;;;;;N;;;;;
+A44D;YI SYLLABLE NYIP;Lo;0;L;;;;;N;;;;;
+A44E;YI SYLLABLE NYIET;Lo;0;L;;;;;N;;;;;
+A44F;YI SYLLABLE NYIEX;Lo;0;L;;;;;N;;;;;
+A450;YI SYLLABLE NYIE;Lo;0;L;;;;;N;;;;;
+A451;YI SYLLABLE NYIEP;Lo;0;L;;;;;N;;;;;
+A452;YI SYLLABLE NYUOX;Lo;0;L;;;;;N;;;;;
+A453;YI SYLLABLE NYUO;Lo;0;L;;;;;N;;;;;
+A454;YI SYLLABLE NYUOP;Lo;0;L;;;;;N;;;;;
+A455;YI SYLLABLE NYOT;Lo;0;L;;;;;N;;;;;
+A456;YI SYLLABLE NYOX;Lo;0;L;;;;;N;;;;;
+A457;YI SYLLABLE NYO;Lo;0;L;;;;;N;;;;;
+A458;YI SYLLABLE NYOP;Lo;0;L;;;;;N;;;;;
+A459;YI SYLLABLE NYUT;Lo;0;L;;;;;N;;;;;
+A45A;YI SYLLABLE NYUX;Lo;0;L;;;;;N;;;;;
+A45B;YI SYLLABLE NYU;Lo;0;L;;;;;N;;;;;
+A45C;YI SYLLABLE NYUP;Lo;0;L;;;;;N;;;;;
+A45D;YI SYLLABLE XIT;Lo;0;L;;;;;N;;;;;
+A45E;YI SYLLABLE XIX;Lo;0;L;;;;;N;;;;;
+A45F;YI SYLLABLE XI;Lo;0;L;;;;;N;;;;;
+A460;YI SYLLABLE XIP;Lo;0;L;;;;;N;;;;;
+A461;YI SYLLABLE XIET;Lo;0;L;;;;;N;;;;;
+A462;YI SYLLABLE XIEX;Lo;0;L;;;;;N;;;;;
+A463;YI SYLLABLE XIE;Lo;0;L;;;;;N;;;;;
+A464;YI SYLLABLE XIEP;Lo;0;L;;;;;N;;;;;
+A465;YI SYLLABLE XUOX;Lo;0;L;;;;;N;;;;;
+A466;YI SYLLABLE XUO;Lo;0;L;;;;;N;;;;;
+A467;YI SYLLABLE XOT;Lo;0;L;;;;;N;;;;;
+A468;YI SYLLABLE XOX;Lo;0;L;;;;;N;;;;;
+A469;YI SYLLABLE XO;Lo;0;L;;;;;N;;;;;
+A46A;YI SYLLABLE XOP;Lo;0;L;;;;;N;;;;;
+A46B;YI SYLLABLE XYT;Lo;0;L;;;;;N;;;;;
+A46C;YI SYLLABLE XYX;Lo;0;L;;;;;N;;;;;
+A46D;YI SYLLABLE XY;Lo;0;L;;;;;N;;;;;
+A46E;YI SYLLABLE XYP;Lo;0;L;;;;;N;;;;;
+A46F;YI SYLLABLE XYRX;Lo;0;L;;;;;N;;;;;
+A470;YI SYLLABLE XYR;Lo;0;L;;;;;N;;;;;
+A471;YI SYLLABLE YIT;Lo;0;L;;;;;N;;;;;
+A472;YI SYLLABLE YIX;Lo;0;L;;;;;N;;;;;
+A473;YI SYLLABLE YI;Lo;0;L;;;;;N;;;;;
+A474;YI SYLLABLE YIP;Lo;0;L;;;;;N;;;;;
+A475;YI SYLLABLE YIET;Lo;0;L;;;;;N;;;;;
+A476;YI SYLLABLE YIEX;Lo;0;L;;;;;N;;;;;
+A477;YI SYLLABLE YIE;Lo;0;L;;;;;N;;;;;
+A478;YI SYLLABLE YIEP;Lo;0;L;;;;;N;;;;;
+A479;YI SYLLABLE YUOT;Lo;0;L;;;;;N;;;;;
+A47A;YI SYLLABLE YUOX;Lo;0;L;;;;;N;;;;;
+A47B;YI SYLLABLE YUO;Lo;0;L;;;;;N;;;;;
+A47C;YI SYLLABLE YUOP;Lo;0;L;;;;;N;;;;;
+A47D;YI SYLLABLE YOT;Lo;0;L;;;;;N;;;;;
+A47E;YI SYLLABLE YOX;Lo;0;L;;;;;N;;;;;
+A47F;YI SYLLABLE YO;Lo;0;L;;;;;N;;;;;
+A480;YI SYLLABLE YOP;Lo;0;L;;;;;N;;;;;
+A481;YI SYLLABLE YUT;Lo;0;L;;;;;N;;;;;
+A482;YI SYLLABLE YUX;Lo;0;L;;;;;N;;;;;
+A483;YI SYLLABLE YU;Lo;0;L;;;;;N;;;;;
+A484;YI SYLLABLE YUP;Lo;0;L;;;;;N;;;;;
+A485;YI SYLLABLE YURX;Lo;0;L;;;;;N;;;;;
+A486;YI SYLLABLE YUR;Lo;0;L;;;;;N;;;;;
+A487;YI SYLLABLE YYT;Lo;0;L;;;;;N;;;;;
+A488;YI SYLLABLE YYX;Lo;0;L;;;;;N;;;;;
+A489;YI SYLLABLE YY;Lo;0;L;;;;;N;;;;;
+A48A;YI SYLLABLE YYP;Lo;0;L;;;;;N;;;;;
+A48B;YI SYLLABLE YYRX;Lo;0;L;;;;;N;;;;;
+A48C;YI SYLLABLE YYR;Lo;0;L;;;;;N;;;;;
+A490;YI RADICAL QOT;So;0;ON;;;;;N;;;;;
+A491;YI RADICAL LI;So;0;ON;;;;;N;;;;;
+A492;YI RADICAL KIT;So;0;ON;;;;;N;;;;;
+A493;YI RADICAL NYIP;So;0;ON;;;;;N;;;;;
+A494;YI RADICAL CYP;So;0;ON;;;;;N;;;;;
+A495;YI RADICAL SSI;So;0;ON;;;;;N;;;;;
+A496;YI RADICAL GGOP;So;0;ON;;;;;N;;;;;
+A497;YI RADICAL GEP;So;0;ON;;;;;N;;;;;
+A498;YI RADICAL MI;So;0;ON;;;;;N;;;;;
+A499;YI RADICAL HXIT;So;0;ON;;;;;N;;;;;
+A49A;YI RADICAL LYR;So;0;ON;;;;;N;;;;;
+A49B;YI RADICAL BBUT;So;0;ON;;;;;N;;;;;
+A49C;YI RADICAL MOP;So;0;ON;;;;;N;;;;;
+A49D;YI RADICAL YO;So;0;ON;;;;;N;;;;;
+A49E;YI RADICAL PUT;So;0;ON;;;;;N;;;;;
+A49F;YI RADICAL HXUO;So;0;ON;;;;;N;;;;;
+A4A0;YI RADICAL TAT;So;0;ON;;;;;N;;;;;
+A4A1;YI RADICAL GA;So;0;ON;;;;;N;;;;;
+A4A4;YI RADICAL DDUR;So;0;ON;;;;;N;;;;;
+A4A5;YI RADICAL BUR;So;0;ON;;;;;N;;;;;
+A4A6;YI RADICAL GGUO;So;0;ON;;;;;N;;;;;
+A4A7;YI RADICAL NYOP;So;0;ON;;;;;N;;;;;
+A4A8;YI RADICAL TU;So;0;ON;;;;;N;;;;;
+A4A9;YI RADICAL OP;So;0;ON;;;;;N;;;;;
+A4AA;YI RADICAL JJUT;So;0;ON;;;;;N;;;;;
+A4AB;YI RADICAL ZOT;So;0;ON;;;;;N;;;;;
+A4AC;YI RADICAL PYT;So;0;ON;;;;;N;;;;;
+A4AD;YI RADICAL HMO;So;0;ON;;;;;N;;;;;
+A4AE;YI RADICAL YIT;So;0;ON;;;;;N;;;;;
+A4AF;YI RADICAL VUR;So;0;ON;;;;;N;;;;;
+A4B0;YI RADICAL SHY;So;0;ON;;;;;N;;;;;
+A4B1;YI RADICAL VEP;So;0;ON;;;;;N;;;;;
+A4B2;YI RADICAL ZA;So;0;ON;;;;;N;;;;;
+A4B3;YI RADICAL JO;So;0;ON;;;;;N;;;;;
+A4B5;YI RADICAL JJY;So;0;ON;;;;;N;;;;;
+A4B6;YI RADICAL GOT;So;0;ON;;;;;N;;;;;
+A4B7;YI RADICAL JJIE;So;0;ON;;;;;N;;;;;
+A4B8;YI RADICAL WO;So;0;ON;;;;;N;;;;;
+A4B9;YI RADICAL DU;So;0;ON;;;;;N;;;;;
+A4BA;YI RADICAL SHUR;So;0;ON;;;;;N;;;;;
+A4BB;YI RADICAL LIE;So;0;ON;;;;;N;;;;;
+A4BC;YI RADICAL CY;So;0;ON;;;;;N;;;;;
+A4BD;YI RADICAL CUOP;So;0;ON;;;;;N;;;;;
+A4BE;YI RADICAL CIP;So;0;ON;;;;;N;;;;;
+A4BF;YI RADICAL HXOP;So;0;ON;;;;;N;;;;;
+A4C0;YI RADICAL SHAT;So;0;ON;;;;;N;;;;;
+A4C2;YI RADICAL SHOP;So;0;ON;;;;;N;;;;;
+A4C3;YI RADICAL CHE;So;0;ON;;;;;N;;;;;
+A4C4;YI RADICAL ZZIET;So;0;ON;;;;;N;;;;;
+A4C6;YI RADICAL KE;So;0;ON;;;;;N;;;;;
+AC00;<Hangul Syllable, First>;Lo;0;L;;;;;N;;;;;
+D7A3;<Hangul Syllable, Last>;Lo;0;L;;;;;N;;;;;
+D800;<Non Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DB7F;<Non Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DB80;<Private Use High Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DBFF;<Private Use High Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+DC00;<Low Surrogate, First>;Cs;0;L;;;;;N;;;;;
+DFFF;<Low Surrogate, Last>;Cs;0;L;;;;;N;;;;;
+E000;<Private Use, First>;Co;0;L;;;;;N;;;;;
+F8FF;<Private Use, Last>;Co;0;L;;;;;N;;;;;
+F900;CJK COMPATIBILITY IDEOGRAPH-F900;Lo;0;L;8C48;;;;N;;;;;
+F901;CJK COMPATIBILITY IDEOGRAPH-F901;Lo;0;L;66F4;;;;N;;;;;
+F902;CJK COMPATIBILITY IDEOGRAPH-F902;Lo;0;L;8ECA;;;;N;;;;;
+F903;CJK COMPATIBILITY IDEOGRAPH-F903;Lo;0;L;8CC8;;;;N;;;;;
+F904;CJK COMPATIBILITY IDEOGRAPH-F904;Lo;0;L;6ED1;;;;N;;;;;
+F905;CJK COMPATIBILITY IDEOGRAPH-F905;Lo;0;L;4E32;;;;N;;;;;
+F906;CJK COMPATIBILITY IDEOGRAPH-F906;Lo;0;L;53E5;;;;N;;;;;
+F907;CJK COMPATIBILITY IDEOGRAPH-F907;Lo;0;L;9F9C;;;;N;;;;;
+F908;CJK COMPATIBILITY IDEOGRAPH-F908;Lo;0;L;9F9C;;;;N;;;;;
+F909;CJK COMPATIBILITY IDEOGRAPH-F909;Lo;0;L;5951;;;;N;;;;;
+F90A;CJK COMPATIBILITY IDEOGRAPH-F90A;Lo;0;L;91D1;;;;N;;;;;
+F90B;CJK COMPATIBILITY IDEOGRAPH-F90B;Lo;0;L;5587;;;;N;;;;;
+F90C;CJK COMPATIBILITY IDEOGRAPH-F90C;Lo;0;L;5948;;;;N;;;;;
+F90D;CJK COMPATIBILITY IDEOGRAPH-F90D;Lo;0;L;61F6;;;;N;;;;;
+F90E;CJK COMPATIBILITY IDEOGRAPH-F90E;Lo;0;L;7669;;;;N;;;;;
+F90F;CJK COMPATIBILITY IDEOGRAPH-F90F;Lo;0;L;7F85;;;;N;;;;;
+F910;CJK COMPATIBILITY IDEOGRAPH-F910;Lo;0;L;863F;;;;N;;;;;
+F911;CJK COMPATIBILITY IDEOGRAPH-F911;Lo;0;L;87BA;;;;N;;;;;
+F912;CJK COMPATIBILITY IDEOGRAPH-F912;Lo;0;L;88F8;;;;N;;;;;
+F913;CJK COMPATIBILITY IDEOGRAPH-F913;Lo;0;L;908F;;;;N;;;;;
+F914;CJK COMPATIBILITY IDEOGRAPH-F914;Lo;0;L;6A02;;;;N;;;;;
+F915;CJK COMPATIBILITY IDEOGRAPH-F915;Lo;0;L;6D1B;;;;N;;;;;
+F916;CJK COMPATIBILITY IDEOGRAPH-F916;Lo;0;L;70D9;;;;N;;;;;
+F917;CJK COMPATIBILITY IDEOGRAPH-F917;Lo;0;L;73DE;;;;N;;;;;
+F918;CJK COMPATIBILITY IDEOGRAPH-F918;Lo;0;L;843D;;;;N;;;;;
+F919;CJK COMPATIBILITY IDEOGRAPH-F919;Lo;0;L;916A;;;;N;;;;;
+F91A;CJK COMPATIBILITY IDEOGRAPH-F91A;Lo;0;L;99F1;;;;N;;;;;
+F91B;CJK COMPATIBILITY IDEOGRAPH-F91B;Lo;0;L;4E82;;;;N;;;;;
+F91C;CJK COMPATIBILITY IDEOGRAPH-F91C;Lo;0;L;5375;;;;N;;;;;
+F91D;CJK COMPATIBILITY IDEOGRAPH-F91D;Lo;0;L;6B04;;;;N;;;;;
+F91E;CJK COMPATIBILITY IDEOGRAPH-F91E;Lo;0;L;721B;;;;N;;;;;
+F91F;CJK COMPATIBILITY IDEOGRAPH-F91F;Lo;0;L;862D;;;;N;;;;;
+F920;CJK COMPATIBILITY IDEOGRAPH-F920;Lo;0;L;9E1E;;;;N;;;;;
+F921;CJK COMPATIBILITY IDEOGRAPH-F921;Lo;0;L;5D50;;;;N;;;;;
+F922;CJK COMPATIBILITY IDEOGRAPH-F922;Lo;0;L;6FEB;;;;N;;;;;
+F923;CJK COMPATIBILITY IDEOGRAPH-F923;Lo;0;L;85CD;;;;N;;;;;
+F924;CJK COMPATIBILITY IDEOGRAPH-F924;Lo;0;L;8964;;;;N;;;;;
+F925;CJK COMPATIBILITY IDEOGRAPH-F925;Lo;0;L;62C9;;;;N;;;;;
+F926;CJK COMPATIBILITY IDEOGRAPH-F926;Lo;0;L;81D8;;;;N;;;;;
+F927;CJK COMPATIBILITY IDEOGRAPH-F927;Lo;0;L;881F;;;;N;;;;;
+F928;CJK COMPATIBILITY IDEOGRAPH-F928;Lo;0;L;5ECA;;;;N;;;;;
+F929;CJK COMPATIBILITY IDEOGRAPH-F929;Lo;0;L;6717;;;;N;;;;;
+F92A;CJK COMPATIBILITY IDEOGRAPH-F92A;Lo;0;L;6D6A;;;;N;;;;;
+F92B;CJK COMPATIBILITY IDEOGRAPH-F92B;Lo;0;L;72FC;;;;N;;;;;
+F92C;CJK COMPATIBILITY IDEOGRAPH-F92C;Lo;0;L;90CE;;;;N;;;;;
+F92D;CJK COMPATIBILITY IDEOGRAPH-F92D;Lo;0;L;4F86;;;;N;;;;;
+F92E;CJK COMPATIBILITY IDEOGRAPH-F92E;Lo;0;L;51B7;;;;N;;;;;
+F92F;CJK COMPATIBILITY IDEOGRAPH-F92F;Lo;0;L;52DE;;;;N;;;;;
+F930;CJK COMPATIBILITY IDEOGRAPH-F930;Lo;0;L;64C4;;;;N;;;;;
+F931;CJK COMPATIBILITY IDEOGRAPH-F931;Lo;0;L;6AD3;;;;N;;;;;
+F932;CJK COMPATIBILITY IDEOGRAPH-F932;Lo;0;L;7210;;;;N;;;;;
+F933;CJK COMPATIBILITY IDEOGRAPH-F933;Lo;0;L;76E7;;;;N;;;;;
+F934;CJK COMPATIBILITY IDEOGRAPH-F934;Lo;0;L;8001;;;;N;;;;;
+F935;CJK COMPATIBILITY IDEOGRAPH-F935;Lo;0;L;8606;;;;N;;;;;
+F936;CJK COMPATIBILITY IDEOGRAPH-F936;Lo;0;L;865C;;;;N;;;;;
+F937;CJK COMPATIBILITY IDEOGRAPH-F937;Lo;0;L;8DEF;;;;N;;;;;
+F938;CJK COMPATIBILITY IDEOGRAPH-F938;Lo;0;L;9732;;;;N;;;;;
+F939;CJK COMPATIBILITY IDEOGRAPH-F939;Lo;0;L;9B6F;;;;N;;;;;
+F93A;CJK COMPATIBILITY IDEOGRAPH-F93A;Lo;0;L;9DFA;;;;N;;;;;
+F93B;CJK COMPATIBILITY IDEOGRAPH-F93B;Lo;0;L;788C;;;;N;;;;;
+F93C;CJK COMPATIBILITY IDEOGRAPH-F93C;Lo;0;L;797F;;;;N;;;;;
+F93D;CJK COMPATIBILITY IDEOGRAPH-F93D;Lo;0;L;7DA0;;;;N;;;;;
+F93E;CJK COMPATIBILITY IDEOGRAPH-F93E;Lo;0;L;83C9;;;;N;;;;;
+F93F;CJK COMPATIBILITY IDEOGRAPH-F93F;Lo;0;L;9304;;;;N;;;;;
+F940;CJK COMPATIBILITY IDEOGRAPH-F940;Lo;0;L;9E7F;;;;N;;;;;
+F941;CJK COMPATIBILITY IDEOGRAPH-F941;Lo;0;L;8AD6;;;;N;;;;;
+F942;CJK COMPATIBILITY IDEOGRAPH-F942;Lo;0;L;58DF;;;;N;;;;;
+F943;CJK COMPATIBILITY IDEOGRAPH-F943;Lo;0;L;5F04;;;;N;;;;;
+F944;CJK COMPATIBILITY IDEOGRAPH-F944;Lo;0;L;7C60;;;;N;;;;;
+F945;CJK COMPATIBILITY IDEOGRAPH-F945;Lo;0;L;807E;;;;N;;;;;
+F946;CJK COMPATIBILITY IDEOGRAPH-F946;Lo;0;L;7262;;;;N;;;;;
+F947;CJK COMPATIBILITY IDEOGRAPH-F947;Lo;0;L;78CA;;;;N;;;;;
+F948;CJK COMPATIBILITY IDEOGRAPH-F948;Lo;0;L;8CC2;;;;N;;;;;
+F949;CJK COMPATIBILITY IDEOGRAPH-F949;Lo;0;L;96F7;;;;N;;;;;
+F94A;CJK COMPATIBILITY IDEOGRAPH-F94A;Lo;0;L;58D8;;;;N;;;;;
+F94B;CJK COMPATIBILITY IDEOGRAPH-F94B;Lo;0;L;5C62;;;;N;;;;;
+F94C;CJK COMPATIBILITY IDEOGRAPH-F94C;Lo;0;L;6A13;;;;N;;;;;
+F94D;CJK COMPATIBILITY IDEOGRAPH-F94D;Lo;0;L;6DDA;;;;N;;;;;
+F94E;CJK COMPATIBILITY IDEOGRAPH-F94E;Lo;0;L;6F0F;;;;N;;;;;
+F94F;CJK COMPATIBILITY IDEOGRAPH-F94F;Lo;0;L;7D2F;;;;N;;;;;
+F950;CJK COMPATIBILITY IDEOGRAPH-F950;Lo;0;L;7E37;;;;N;;;;;
+F951;CJK COMPATIBILITY IDEOGRAPH-F951;Lo;0;L;96FB;;;;N;;;;;
+F952;CJK COMPATIBILITY IDEOGRAPH-F952;Lo;0;L;52D2;;;;N;;;;;
+F953;CJK COMPATIBILITY IDEOGRAPH-F953;Lo;0;L;808B;;;;N;;;;;
+F954;CJK COMPATIBILITY IDEOGRAPH-F954;Lo;0;L;51DC;;;;N;;;;;
+F955;CJK COMPATIBILITY IDEOGRAPH-F955;Lo;0;L;51CC;;;;N;;;;;
+F956;CJK COMPATIBILITY IDEOGRAPH-F956;Lo;0;L;7A1C;;;;N;;;;;
+F957;CJK COMPATIBILITY IDEOGRAPH-F957;Lo;0;L;7DBE;;;;N;;;;;
+F958;CJK COMPATIBILITY IDEOGRAPH-F958;Lo;0;L;83F1;;;;N;;;;;
+F959;CJK COMPATIBILITY IDEOGRAPH-F959;Lo;0;L;9675;;;;N;;;;;
+F95A;CJK COMPATIBILITY IDEOGRAPH-F95A;Lo;0;L;8B80;;;;N;;;;;
+F95B;CJK COMPATIBILITY IDEOGRAPH-F95B;Lo;0;L;62CF;;;;N;;;;;
+F95C;CJK COMPATIBILITY IDEOGRAPH-F95C;Lo;0;L;6A02;;;;N;;;;;
+F95D;CJK COMPATIBILITY IDEOGRAPH-F95D;Lo;0;L;8AFE;;;;N;;;;;
+F95E;CJK COMPATIBILITY IDEOGRAPH-F95E;Lo;0;L;4E39;;;;N;;;;;
+F95F;CJK COMPATIBILITY IDEOGRAPH-F95F;Lo;0;L;5BE7;;;;N;;;;;
+F960;CJK COMPATIBILITY IDEOGRAPH-F960;Lo;0;L;6012;;;;N;;;;;
+F961;CJK COMPATIBILITY IDEOGRAPH-F961;Lo;0;L;7387;;;;N;;;;;
+F962;CJK COMPATIBILITY IDEOGRAPH-F962;Lo;0;L;7570;;;;N;;;;;
+F963;CJK COMPATIBILITY IDEOGRAPH-F963;Lo;0;L;5317;;;;N;;;;;
+F964;CJK COMPATIBILITY IDEOGRAPH-F964;Lo;0;L;78FB;;;;N;;;;;
+F965;CJK COMPATIBILITY IDEOGRAPH-F965;Lo;0;L;4FBF;;;;N;;;;;
+F966;CJK COMPATIBILITY IDEOGRAPH-F966;Lo;0;L;5FA9;;;;N;;;;;
+F967;CJK COMPATIBILITY IDEOGRAPH-F967;Lo;0;L;4E0D;;;;N;;;;;
+F968;CJK COMPATIBILITY IDEOGRAPH-F968;Lo;0;L;6CCC;;;;N;;;;;
+F969;CJK COMPATIBILITY IDEOGRAPH-F969;Lo;0;L;6578;;;;N;;;;;
+F96A;CJK COMPATIBILITY IDEOGRAPH-F96A;Lo;0;L;7D22;;;;N;;;;;
+F96B;CJK COMPATIBILITY IDEOGRAPH-F96B;Lo;0;L;53C3;;;;N;;;;;
+F96C;CJK COMPATIBILITY IDEOGRAPH-F96C;Lo;0;L;585E;;;;N;;;;;
+F96D;CJK COMPATIBILITY IDEOGRAPH-F96D;Lo;0;L;7701;;;;N;;;;;
+F96E;CJK COMPATIBILITY IDEOGRAPH-F96E;Lo;0;L;8449;;;;N;;;;;
+F96F;CJK COMPATIBILITY IDEOGRAPH-F96F;Lo;0;L;8AAA;;;;N;;;;;
+F970;CJK COMPATIBILITY IDEOGRAPH-F970;Lo;0;L;6BBA;;;;N;;;;;
+F971;CJK COMPATIBILITY IDEOGRAPH-F971;Lo;0;L;8FB0;;;;N;;;;;
+F972;CJK COMPATIBILITY IDEOGRAPH-F972;Lo;0;L;6C88;;;;N;;;;;
+F973;CJK COMPATIBILITY IDEOGRAPH-F973;Lo;0;L;62FE;;;;N;;;;;
+F974;CJK COMPATIBILITY IDEOGRAPH-F974;Lo;0;L;82E5;;;;N;;;;;
+F975;CJK COMPATIBILITY IDEOGRAPH-F975;Lo;0;L;63A0;;;;N;;;;;
+F976;CJK COMPATIBILITY IDEOGRAPH-F976;Lo;0;L;7565;;;;N;;;;;
+F977;CJK COMPATIBILITY IDEOGRAPH-F977;Lo;0;L;4EAE;;;;N;;;;;
+F978;CJK COMPATIBILITY IDEOGRAPH-F978;Lo;0;L;5169;;;;N;;;;;
+F979;CJK COMPATIBILITY IDEOGRAPH-F979;Lo;0;L;51C9;;;;N;;;;;
+F97A;CJK COMPATIBILITY IDEOGRAPH-F97A;Lo;0;L;6881;;;;N;;;;;
+F97B;CJK COMPATIBILITY IDEOGRAPH-F97B;Lo;0;L;7CE7;;;;N;;;;;
+F97C;CJK COMPATIBILITY IDEOGRAPH-F97C;Lo;0;L;826F;;;;N;;;;;
+F97D;CJK COMPATIBILITY IDEOGRAPH-F97D;Lo;0;L;8AD2;;;;N;;;;;
+F97E;CJK COMPATIBILITY IDEOGRAPH-F97E;Lo;0;L;91CF;;;;N;;;;;
+F97F;CJK COMPATIBILITY IDEOGRAPH-F97F;Lo;0;L;52F5;;;;N;;;;;
+F980;CJK COMPATIBILITY IDEOGRAPH-F980;Lo;0;L;5442;;;;N;;;;;
+F981;CJK COMPATIBILITY IDEOGRAPH-F981;Lo;0;L;5973;;;;N;;;;;
+F982;CJK COMPATIBILITY IDEOGRAPH-F982;Lo;0;L;5EEC;;;;N;;;;;
+F983;CJK COMPATIBILITY IDEOGRAPH-F983;Lo;0;L;65C5;;;;N;;;;;
+F984;CJK COMPATIBILITY IDEOGRAPH-F984;Lo;0;L;6FFE;;;;N;;;;;
+F985;CJK COMPATIBILITY IDEOGRAPH-F985;Lo;0;L;792A;;;;N;;;;;
+F986;CJK COMPATIBILITY IDEOGRAPH-F986;Lo;0;L;95AD;;;;N;;;;;
+F987;CJK COMPATIBILITY IDEOGRAPH-F987;Lo;0;L;9A6A;;;;N;;;;;
+F988;CJK COMPATIBILITY IDEOGRAPH-F988;Lo;0;L;9E97;;;;N;;;;;
+F989;CJK COMPATIBILITY IDEOGRAPH-F989;Lo;0;L;9ECE;;;;N;;;;;
+F98A;CJK COMPATIBILITY IDEOGRAPH-F98A;Lo;0;L;529B;;;;N;;;;;
+F98B;CJK COMPATIBILITY IDEOGRAPH-F98B;Lo;0;L;66C6;;;;N;;;;;
+F98C;CJK COMPATIBILITY IDEOGRAPH-F98C;Lo;0;L;6B77;;;;N;;;;;
+F98D;CJK COMPATIBILITY IDEOGRAPH-F98D;Lo;0;L;8F62;;;;N;;;;;
+F98E;CJK COMPATIBILITY IDEOGRAPH-F98E;Lo;0;L;5E74;;;;N;;;;;
+F98F;CJK COMPATIBILITY IDEOGRAPH-F98F;Lo;0;L;6190;;;;N;;;;;
+F990;CJK COMPATIBILITY IDEOGRAPH-F990;Lo;0;L;6200;;;;N;;;;;
+F991;CJK COMPATIBILITY IDEOGRAPH-F991;Lo;0;L;649A;;;;N;;;;;
+F992;CJK COMPATIBILITY IDEOGRAPH-F992;Lo;0;L;6F23;;;;N;;;;;
+F993;CJK COMPATIBILITY IDEOGRAPH-F993;Lo;0;L;7149;;;;N;;;;;
+F994;CJK COMPATIBILITY IDEOGRAPH-F994;Lo;0;L;7489;;;;N;;;;;
+F995;CJK COMPATIBILITY IDEOGRAPH-F995;Lo;0;L;79CA;;;;N;;;;;
+F996;CJK COMPATIBILITY IDEOGRAPH-F996;Lo;0;L;7DF4;;;;N;;;;;
+F997;CJK COMPATIBILITY IDEOGRAPH-F997;Lo;0;L;806F;;;;N;;;;;
+F998;CJK COMPATIBILITY IDEOGRAPH-F998;Lo;0;L;8F26;;;;N;;;;;
+F999;CJK COMPATIBILITY IDEOGRAPH-F999;Lo;0;L;84EE;;;;N;;;;;
+F99A;CJK COMPATIBILITY IDEOGRAPH-F99A;Lo;0;L;9023;;;;N;;;;;
+F99B;CJK COMPATIBILITY IDEOGRAPH-F99B;Lo;0;L;934A;;;;N;;;;;
+F99C;CJK COMPATIBILITY IDEOGRAPH-F99C;Lo;0;L;5217;;;;N;;;;;
+F99D;CJK COMPATIBILITY IDEOGRAPH-F99D;Lo;0;L;52A3;;;;N;;;;;
+F99E;CJK COMPATIBILITY IDEOGRAPH-F99E;Lo;0;L;54BD;;;;N;;;;;
+F99F;CJK COMPATIBILITY IDEOGRAPH-F99F;Lo;0;L;70C8;;;;N;;;;;
+F9A0;CJK COMPATIBILITY IDEOGRAPH-F9A0;Lo;0;L;88C2;;;;N;;;;;
+F9A1;CJK COMPATIBILITY IDEOGRAPH-F9A1;Lo;0;L;8AAA;;;;N;;;;;
+F9A2;CJK COMPATIBILITY IDEOGRAPH-F9A2;Lo;0;L;5EC9;;;;N;;;;;
+F9A3;CJK COMPATIBILITY IDEOGRAPH-F9A3;Lo;0;L;5FF5;;;;N;;;;;
+F9A4;CJK COMPATIBILITY IDEOGRAPH-F9A4;Lo;0;L;637B;;;;N;;;;;
+F9A5;CJK COMPATIBILITY IDEOGRAPH-F9A5;Lo;0;L;6BAE;;;;N;;;;;
+F9A6;CJK COMPATIBILITY IDEOGRAPH-F9A6;Lo;0;L;7C3E;;;;N;;;;;
+F9A7;CJK COMPATIBILITY IDEOGRAPH-F9A7;Lo;0;L;7375;;;;N;;;;;
+F9A8;CJK COMPATIBILITY IDEOGRAPH-F9A8;Lo;0;L;4EE4;;;;N;;;;;
+F9A9;CJK COMPATIBILITY IDEOGRAPH-F9A9;Lo;0;L;56F9;;;;N;;;;;
+F9AA;CJK COMPATIBILITY IDEOGRAPH-F9AA;Lo;0;L;5BE7;;;;N;;;;;
+F9AB;CJK COMPATIBILITY IDEOGRAPH-F9AB;Lo;0;L;5DBA;;;;N;;;;;
+F9AC;CJK COMPATIBILITY IDEOGRAPH-F9AC;Lo;0;L;601C;;;;N;;;;;
+F9AD;CJK COMPATIBILITY IDEOGRAPH-F9AD;Lo;0;L;73B2;;;;N;;;;;
+F9AE;CJK COMPATIBILITY IDEOGRAPH-F9AE;Lo;0;L;7469;;;;N;;;;;
+F9AF;CJK COMPATIBILITY IDEOGRAPH-F9AF;Lo;0;L;7F9A;;;;N;;;;;
+F9B0;CJK COMPATIBILITY IDEOGRAPH-F9B0;Lo;0;L;8046;;;;N;;;;;
+F9B1;CJK COMPATIBILITY IDEOGRAPH-F9B1;Lo;0;L;9234;;;;N;;;;;
+F9B2;CJK COMPATIBILITY IDEOGRAPH-F9B2;Lo;0;L;96F6;;;;N;;;;;
+F9B3;CJK COMPATIBILITY IDEOGRAPH-F9B3;Lo;0;L;9748;;;;N;;;;;
+F9B4;CJK COMPATIBILITY IDEOGRAPH-F9B4;Lo;0;L;9818;;;;N;;;;;
+F9B5;CJK COMPATIBILITY IDEOGRAPH-F9B5;Lo;0;L;4F8B;;;;N;;;;;
+F9B6;CJK COMPATIBILITY IDEOGRAPH-F9B6;Lo;0;L;79AE;;;;N;;;;;
+F9B7;CJK COMPATIBILITY IDEOGRAPH-F9B7;Lo;0;L;91B4;;;;N;;;;;
+F9B8;CJK COMPATIBILITY IDEOGRAPH-F9B8;Lo;0;L;96B8;;;;N;;;;;
+F9B9;CJK COMPATIBILITY IDEOGRAPH-F9B9;Lo;0;L;60E1;;;;N;;;;;
+F9BA;CJK COMPATIBILITY IDEOGRAPH-F9BA;Lo;0;L;4E86;;;;N;;;;;
+F9BB;CJK COMPATIBILITY IDEOGRAPH-F9BB;Lo;0;L;50DA;;;;N;;;;;
+F9BC;CJK COMPATIBILITY IDEOGRAPH-F9BC;Lo;0;L;5BEE;;;;N;;;;;
+F9BD;CJK COMPATIBILITY IDEOGRAPH-F9BD;Lo;0;L;5C3F;;;;N;;;;;
+F9BE;CJK COMPATIBILITY IDEOGRAPH-F9BE;Lo;0;L;6599;;;;N;;;;;
+F9BF;CJK COMPATIBILITY IDEOGRAPH-F9BF;Lo;0;L;6A02;;;;N;;;;;
+F9C0;CJK COMPATIBILITY IDEOGRAPH-F9C0;Lo;0;L;71CE;;;;N;;;;;
+F9C1;CJK COMPATIBILITY IDEOGRAPH-F9C1;Lo;0;L;7642;;;;N;;;;;
+F9C2;CJK COMPATIBILITY IDEOGRAPH-F9C2;Lo;0;L;84FC;;;;N;;;;;
+F9C3;CJK COMPATIBILITY IDEOGRAPH-F9C3;Lo;0;L;907C;;;;N;;;;;
+F9C4;CJK COMPATIBILITY IDEOGRAPH-F9C4;Lo;0;L;9F8D;;;;N;;;;;
+F9C5;CJK COMPATIBILITY IDEOGRAPH-F9C5;Lo;0;L;6688;;;;N;;;;;
+F9C6;CJK COMPATIBILITY IDEOGRAPH-F9C6;Lo;0;L;962E;;;;N;;;;;
+F9C7;CJK COMPATIBILITY IDEOGRAPH-F9C7;Lo;0;L;5289;;;;N;;;;;
+F9C8;CJK COMPATIBILITY IDEOGRAPH-F9C8;Lo;0;L;677B;;;;N;;;;;
+F9C9;CJK COMPATIBILITY IDEOGRAPH-F9C9;Lo;0;L;67F3;;;;N;;;;;
+F9CA;CJK COMPATIBILITY IDEOGRAPH-F9CA;Lo;0;L;6D41;;;;N;;;;;
+F9CB;CJK COMPATIBILITY IDEOGRAPH-F9CB;Lo;0;L;6E9C;;;;N;;;;;
+F9CC;CJK COMPATIBILITY IDEOGRAPH-F9CC;Lo;0;L;7409;;;;N;;;;;
+F9CD;CJK COMPATIBILITY IDEOGRAPH-F9CD;Lo;0;L;7559;;;;N;;;;;
+F9CE;CJK COMPATIBILITY IDEOGRAPH-F9CE;Lo;0;L;786B;;;;N;;;;;
+F9CF;CJK COMPATIBILITY IDEOGRAPH-F9CF;Lo;0;L;7D10;;;;N;;;;;
+F9D0;CJK COMPATIBILITY IDEOGRAPH-F9D0;Lo;0;L;985E;;;;N;;;;;
+F9D1;CJK COMPATIBILITY IDEOGRAPH-F9D1;Lo;0;L;516D;;;;N;;;;;
+F9D2;CJK COMPATIBILITY IDEOGRAPH-F9D2;Lo;0;L;622E;;;;N;;;;;
+F9D3;CJK COMPATIBILITY IDEOGRAPH-F9D3;Lo;0;L;9678;;;;N;;;;;
+F9D4;CJK COMPATIBILITY IDEOGRAPH-F9D4;Lo;0;L;502B;;;;N;;;;;
+F9D5;CJK COMPATIBILITY IDEOGRAPH-F9D5;Lo;0;L;5D19;;;;N;;;;;
+F9D6;CJK COMPATIBILITY IDEOGRAPH-F9D6;Lo;0;L;6DEA;;;;N;;;;;
+F9D7;CJK COMPATIBILITY IDEOGRAPH-F9D7;Lo;0;L;8F2A;;;;N;;;;;
+F9D8;CJK COMPATIBILITY IDEOGRAPH-F9D8;Lo;0;L;5F8B;;;;N;;;;;
+F9D9;CJK COMPATIBILITY IDEOGRAPH-F9D9;Lo;0;L;6144;;;;N;;;;;
+F9DA;CJK COMPATIBILITY IDEOGRAPH-F9DA;Lo;0;L;6817;;;;N;;;;;
+F9DB;CJK COMPATIBILITY IDEOGRAPH-F9DB;Lo;0;L;7387;;;;N;;;;;
+F9DC;CJK COMPATIBILITY IDEOGRAPH-F9DC;Lo;0;L;9686;;;;N;;;;;
+F9DD;CJK COMPATIBILITY IDEOGRAPH-F9DD;Lo;0;L;5229;;;;N;;;;;
+F9DE;CJK COMPATIBILITY IDEOGRAPH-F9DE;Lo;0;L;540F;;;;N;;;;;
+F9DF;CJK COMPATIBILITY IDEOGRAPH-F9DF;Lo;0;L;5C65;;;;N;;;;;
+F9E0;CJK COMPATIBILITY IDEOGRAPH-F9E0;Lo;0;L;6613;;;;N;;;;;
+F9E1;CJK COMPATIBILITY IDEOGRAPH-F9E1;Lo;0;L;674E;;;;N;;;;;
+F9E2;CJK COMPATIBILITY IDEOGRAPH-F9E2;Lo;0;L;68A8;;;;N;;;;;
+F9E3;CJK COMPATIBILITY IDEOGRAPH-F9E3;Lo;0;L;6CE5;;;;N;;;;;
+F9E4;CJK COMPATIBILITY IDEOGRAPH-F9E4;Lo;0;L;7406;;;;N;;;;;
+F9E5;CJK COMPATIBILITY IDEOGRAPH-F9E5;Lo;0;L;75E2;;;;N;;;;;
+F9E6;CJK COMPATIBILITY IDEOGRAPH-F9E6;Lo;0;L;7F79;;;;N;;;;;
+F9E7;CJK COMPATIBILITY IDEOGRAPH-F9E7;Lo;0;L;88CF;;;;N;;;;;
+F9E8;CJK COMPATIBILITY IDEOGRAPH-F9E8;Lo;0;L;88E1;;;;N;;;;;
+F9E9;CJK COMPATIBILITY IDEOGRAPH-F9E9;Lo;0;L;91CC;;;;N;;;;;
+F9EA;CJK COMPATIBILITY IDEOGRAPH-F9EA;Lo;0;L;96E2;;;;N;;;;;
+F9EB;CJK COMPATIBILITY IDEOGRAPH-F9EB;Lo;0;L;533F;;;;N;;;;;
+F9EC;CJK COMPATIBILITY IDEOGRAPH-F9EC;Lo;0;L;6EBA;;;;N;;;;;
+F9ED;CJK COMPATIBILITY IDEOGRAPH-F9ED;Lo;0;L;541D;;;;N;;;;;
+F9EE;CJK COMPATIBILITY IDEOGRAPH-F9EE;Lo;0;L;71D0;;;;N;;;;;
+F9EF;CJK COMPATIBILITY IDEOGRAPH-F9EF;Lo;0;L;7498;;;;N;;;;;
+F9F0;CJK COMPATIBILITY IDEOGRAPH-F9F0;Lo;0;L;85FA;;;;N;;;;;
+F9F1;CJK COMPATIBILITY IDEOGRAPH-F9F1;Lo;0;L;96A3;;;;N;;;;;
+F9F2;CJK COMPATIBILITY IDEOGRAPH-F9F2;Lo;0;L;9C57;;;;N;;;;;
+F9F3;CJK COMPATIBILITY IDEOGRAPH-F9F3;Lo;0;L;9E9F;;;;N;;;;;
+F9F4;CJK COMPATIBILITY IDEOGRAPH-F9F4;Lo;0;L;6797;;;;N;;;;;
+F9F5;CJK COMPATIBILITY IDEOGRAPH-F9F5;Lo;0;L;6DCB;;;;N;;;;;
+F9F6;CJK COMPATIBILITY IDEOGRAPH-F9F6;Lo;0;L;81E8;;;;N;;;;;
+F9F7;CJK COMPATIBILITY IDEOGRAPH-F9F7;Lo;0;L;7ACB;;;;N;;;;;
+F9F8;CJK COMPATIBILITY IDEOGRAPH-F9F8;Lo;0;L;7B20;;;;N;;;;;
+F9F9;CJK COMPATIBILITY IDEOGRAPH-F9F9;Lo;0;L;7C92;;;;N;;;;;
+F9FA;CJK COMPATIBILITY IDEOGRAPH-F9FA;Lo;0;L;72C0;;;;N;;;;;
+F9FB;CJK COMPATIBILITY IDEOGRAPH-F9FB;Lo;0;L;7099;;;;N;;;;;
+F9FC;CJK COMPATIBILITY IDEOGRAPH-F9FC;Lo;0;L;8B58;;;;N;;;;;
+F9FD;CJK COMPATIBILITY IDEOGRAPH-F9FD;Lo;0;L;4EC0;;;;N;;;;;
+F9FE;CJK COMPATIBILITY IDEOGRAPH-F9FE;Lo;0;L;8336;;;;N;;;;;
+F9FF;CJK COMPATIBILITY IDEOGRAPH-F9FF;Lo;0;L;523A;;;;N;;;;;
+FA00;CJK COMPATIBILITY IDEOGRAPH-FA00;Lo;0;L;5207;;;;N;;;;;
+FA01;CJK COMPATIBILITY IDEOGRAPH-FA01;Lo;0;L;5EA6;;;;N;;;;;
+FA02;CJK COMPATIBILITY IDEOGRAPH-FA02;Lo;0;L;62D3;;;;N;;;;;
+FA03;CJK COMPATIBILITY IDEOGRAPH-FA03;Lo;0;L;7CD6;;;;N;;;;;
+FA04;CJK COMPATIBILITY IDEOGRAPH-FA04;Lo;0;L;5B85;;;;N;;;;;
+FA05;CJK COMPATIBILITY IDEOGRAPH-FA05;Lo;0;L;6D1E;;;;N;;;;;
+FA06;CJK COMPATIBILITY IDEOGRAPH-FA06;Lo;0;L;66B4;;;;N;;;;;
+FA07;CJK COMPATIBILITY IDEOGRAPH-FA07;Lo;0;L;8F3B;;;;N;;;;;
+FA08;CJK COMPATIBILITY IDEOGRAPH-FA08;Lo;0;L;884C;;;;N;;;;;
+FA09;CJK COMPATIBILITY IDEOGRAPH-FA09;Lo;0;L;964D;;;;N;;;;;
+FA0A;CJK COMPATIBILITY IDEOGRAPH-FA0A;Lo;0;L;898B;;;;N;;;;;
+FA0B;CJK COMPATIBILITY IDEOGRAPH-FA0B;Lo;0;L;5ED3;;;;N;;;;;
+FA0C;CJK COMPATIBILITY IDEOGRAPH-FA0C;Lo;0;L;5140;;;;N;;;;;
+FA0D;CJK COMPATIBILITY IDEOGRAPH-FA0D;Lo;0;L;55C0;;;;N;;;;;
+FA0E;CJK COMPATIBILITY IDEOGRAPH-FA0E;Lo;0;L;;;;;N;;;;;
+FA0F;CJK COMPATIBILITY IDEOGRAPH-FA0F;Lo;0;L;;;;;N;;;;;
+FA10;CJK COMPATIBILITY IDEOGRAPH-FA10;Lo;0;L;585A;;;;N;;;;;
+FA11;CJK COMPATIBILITY IDEOGRAPH-FA11;Lo;0;L;;;;;N;;;;;
+FA12;CJK COMPATIBILITY IDEOGRAPH-FA12;Lo;0;L;6674;;;;N;;;;;
+FA13;CJK COMPATIBILITY IDEOGRAPH-FA13;Lo;0;L;;;;;N;;;;;
+FA14;CJK COMPATIBILITY IDEOGRAPH-FA14;Lo;0;L;;;;;N;;;;;
+FA15;CJK COMPATIBILITY IDEOGRAPH-FA15;Lo;0;L;51DE;;;;N;;;;;
+FA16;CJK COMPATIBILITY IDEOGRAPH-FA16;Lo;0;L;732A;;;;N;;;;;
+FA17;CJK COMPATIBILITY IDEOGRAPH-FA17;Lo;0;L;76CA;;;;N;;;;;
+FA18;CJK COMPATIBILITY IDEOGRAPH-FA18;Lo;0;L;793C;;;;N;;;;;
+FA19;CJK COMPATIBILITY IDEOGRAPH-FA19;Lo;0;L;795E;;;;N;;;;;
+FA1A;CJK COMPATIBILITY IDEOGRAPH-FA1A;Lo;0;L;7965;;;;N;;;;;
+FA1B;CJK COMPATIBILITY IDEOGRAPH-FA1B;Lo;0;L;798F;;;;N;;;;;
+FA1C;CJK COMPATIBILITY IDEOGRAPH-FA1C;Lo;0;L;9756;;;;N;;;;;
+FA1D;CJK COMPATIBILITY IDEOGRAPH-FA1D;Lo;0;L;7CBE;;;;N;;;;;
+FA1E;CJK COMPATIBILITY IDEOGRAPH-FA1E;Lo;0;L;7FBD;;;;N;;;;;
+FA1F;CJK COMPATIBILITY IDEOGRAPH-FA1F;Lo;0;L;;;;;N;;*;;;
+FA20;CJK COMPATIBILITY IDEOGRAPH-FA20;Lo;0;L;8612;;;;N;;;;;
+FA21;CJK COMPATIBILITY IDEOGRAPH-FA21;Lo;0;L;;;;;N;;;;;
+FA22;CJK COMPATIBILITY IDEOGRAPH-FA22;Lo;0;L;8AF8;;;;N;;;;;
+FA23;CJK COMPATIBILITY IDEOGRAPH-FA23;Lo;0;L;;;;;N;;*;;;
+FA24;CJK COMPATIBILITY IDEOGRAPH-FA24;Lo;0;L;;;;;N;;;;;
+FA25;CJK COMPATIBILITY IDEOGRAPH-FA25;Lo;0;L;9038;;;;N;;;;;
+FA26;CJK COMPATIBILITY IDEOGRAPH-FA26;Lo;0;L;90FD;;;;N;;;;;
+FA27;CJK COMPATIBILITY IDEOGRAPH-FA27;Lo;0;L;;;;;N;;;;;
+FA28;CJK COMPATIBILITY IDEOGRAPH-FA28;Lo;0;L;;;;;N;;;;;
+FA29;CJK COMPATIBILITY IDEOGRAPH-FA29;Lo;0;L;;;;;N;;;;;
+FA2A;CJK COMPATIBILITY IDEOGRAPH-FA2A;Lo;0;L;98EF;;;;N;;;;;
+FA2B;CJK COMPATIBILITY IDEOGRAPH-FA2B;Lo;0;L;98FC;;;;N;;;;;
+FA2C;CJK COMPATIBILITY IDEOGRAPH-FA2C;Lo;0;L;9928;;;;N;;;;;
+FA2D;CJK COMPATIBILITY IDEOGRAPH-FA2D;Lo;0;L;9DB4;;;;N;;;;;
+FB00;LATIN SMALL LIGATURE FF;Ll;0;L;<compat> 0066 0066;;;;N;;;;;
+FB01;LATIN SMALL LIGATURE FI;Ll;0;L;<compat> 0066 0069;;;;N;;;;;
+FB02;LATIN SMALL LIGATURE FL;Ll;0;L;<compat> 0066 006C;;;;N;;;;;
+FB03;LATIN SMALL LIGATURE FFI;Ll;0;L;<compat> 0066 0066 0069;;;;N;;;;;
+FB04;LATIN SMALL LIGATURE FFL;Ll;0;L;<compat> 0066 0066 006C;;;;N;;;;;
+FB05;LATIN SMALL LIGATURE LONG S T;Ll;0;L;<compat> 017F 0074;;;;N;;;;;
+FB06;LATIN SMALL LIGATURE ST;Ll;0;L;<compat> 0073 0074;;;;N;;;;;
+FB13;ARMENIAN SMALL LIGATURE MEN NOW;Ll;0;L;<compat> 0574 0576;;;;N;;;;;
+FB14;ARMENIAN SMALL LIGATURE MEN ECH;Ll;0;L;<compat> 0574 0565;;;;N;;;;;
+FB15;ARMENIAN SMALL LIGATURE MEN INI;Ll;0;L;<compat> 0574 056B;;;;N;;;;;
+FB16;ARMENIAN SMALL LIGATURE VEW NOW;Ll;0;L;<compat> 057E 0576;;;;N;;;;;
+FB17;ARMENIAN SMALL LIGATURE MEN XEH;Ll;0;L;<compat> 0574 056D;;;;N;;;;;
+FB1D;HEBREW LETTER YOD WITH HIRIQ;Lo;0;R;05D9 05B4;;;;N;;;;;
+FB1E;HEBREW POINT JUDEO-SPANISH VARIKA;Mn;26;NSM;;;;;N;HEBREW POINT VARIKA;;;;
+FB1F;HEBREW LIGATURE YIDDISH YOD YOD PATAH;Lo;0;R;05F2 05B7;;;;N;;;;;
+FB20;HEBREW LETTER ALTERNATIVE AYIN;Lo;0;R;<font> 05E2;;;;N;;;;;
+FB21;HEBREW LETTER WIDE ALEF;Lo;0;R;<font> 05D0;;;;N;;;;;
+FB22;HEBREW LETTER WIDE DALET;Lo;0;R;<font> 05D3;;;;N;;;;;
+FB23;HEBREW LETTER WIDE HE;Lo;0;R;<font> 05D4;;;;N;;;;;
+FB24;HEBREW LETTER WIDE KAF;Lo;0;R;<font> 05DB;;;;N;;;;;
+FB25;HEBREW LETTER WIDE LAMED;Lo;0;R;<font> 05DC;;;;N;;;;;
+FB26;HEBREW LETTER WIDE FINAL MEM;Lo;0;R;<font> 05DD;;;;N;;;;;
+FB27;HEBREW LETTER WIDE RESH;Lo;0;R;<font> 05E8;;;;N;;;;;
+FB28;HEBREW LETTER WIDE TAV;Lo;0;R;<font> 05EA;;;;N;;;;;
+FB29;HEBREW LETTER ALTERNATIVE PLUS SIGN;Sm;0;ET;<font> 002B;;;;N;;;;;
+FB2A;HEBREW LETTER SHIN WITH SHIN DOT;Lo;0;R;05E9 05C1;;;;N;;;;;
+FB2B;HEBREW LETTER SHIN WITH SIN DOT;Lo;0;R;05E9 05C2;;;;N;;;;;
+FB2C;HEBREW LETTER SHIN WITH DAGESH AND SHIN DOT;Lo;0;R;FB49 05C1;;;;N;;;;;
+FB2D;HEBREW LETTER SHIN WITH DAGESH AND SIN DOT;Lo;0;R;FB49 05C2;;;;N;;;;;
+FB2E;HEBREW LETTER ALEF WITH PATAH;Lo;0;R;05D0 05B7;;;;N;;;;;
+FB2F;HEBREW LETTER ALEF WITH QAMATS;Lo;0;R;05D0 05B8;;;;N;;;;;
+FB30;HEBREW LETTER ALEF WITH MAPIQ;Lo;0;R;05D0 05BC;;;;N;;;;;
+FB31;HEBREW LETTER BET WITH DAGESH;Lo;0;R;05D1 05BC;;;;N;;;;;
+FB32;HEBREW LETTER GIMEL WITH DAGESH;Lo;0;R;05D2 05BC;;;;N;;;;;
+FB33;HEBREW LETTER DALET WITH DAGESH;Lo;0;R;05D3 05BC;;;;N;;;;;
+FB34;HEBREW LETTER HE WITH MAPIQ;Lo;0;R;05D4 05BC;;;;N;;;;;
+FB35;HEBREW LETTER VAV WITH DAGESH;Lo;0;R;05D5 05BC;;;;N;;;;;
+FB36;HEBREW LETTER ZAYIN WITH DAGESH;Lo;0;R;05D6 05BC;;;;N;;;;;
+FB38;HEBREW LETTER TET WITH DAGESH;Lo;0;R;05D8 05BC;;;;N;;;;;
+FB39;HEBREW LETTER YOD WITH DAGESH;Lo;0;R;05D9 05BC;;;;N;;;;;
+FB3A;HEBREW LETTER FINAL KAF WITH DAGESH;Lo;0;R;05DA 05BC;;;;N;;;;;
+FB3B;HEBREW LETTER KAF WITH DAGESH;Lo;0;R;05DB 05BC;;;;N;;;;;
+FB3C;HEBREW LETTER LAMED WITH DAGESH;Lo;0;R;05DC 05BC;;;;N;;;;;
+FB3E;HEBREW LETTER MEM WITH DAGESH;Lo;0;R;05DE 05BC;;;;N;;;;;
+FB40;HEBREW LETTER NUN WITH DAGESH;Lo;0;R;05E0 05BC;;;;N;;;;;
+FB41;HEBREW LETTER SAMEKH WITH DAGESH;Lo;0;R;05E1 05BC;;;;N;;;;;
+FB43;HEBREW LETTER FINAL PE WITH DAGESH;Lo;0;R;05E3 05BC;;;;N;;;;;
+FB44;HEBREW LETTER PE WITH DAGESH;Lo;0;R;05E4 05BC;;;;N;;;;;
+FB46;HEBREW LETTER TSADI WITH DAGESH;Lo;0;R;05E6 05BC;;;;N;;;;;
+FB47;HEBREW LETTER QOF WITH DAGESH;Lo;0;R;05E7 05BC;;;;N;;;;;
+FB48;HEBREW LETTER RESH WITH DAGESH;Lo;0;R;05E8 05BC;;;;N;;;;;
+FB49;HEBREW LETTER SHIN WITH DAGESH;Lo;0;R;05E9 05BC;;;;N;;;;;
+FB4A;HEBREW LETTER TAV WITH DAGESH;Lo;0;R;05EA 05BC;;;;N;;;;;
+FB4B;HEBREW LETTER VAV WITH HOLAM;Lo;0;R;05D5 05B9;;;;N;;;;;
+FB4C;HEBREW LETTER BET WITH RAFE;Lo;0;R;05D1 05BF;;;;N;;;;;
+FB4D;HEBREW LETTER KAF WITH RAFE;Lo;0;R;05DB 05BF;;;;N;;;;;
+FB4E;HEBREW LETTER PE WITH RAFE;Lo;0;R;05E4 05BF;;;;N;;;;;
+FB4F;HEBREW LIGATURE ALEF LAMED;Lo;0;R;<compat> 05D0 05DC;;;;N;;;;;
+FB50;ARABIC LETTER ALEF WASLA ISOLATED FORM;Lo;0;AL;<isolated> 0671;;;;N;;;;;
+FB51;ARABIC LETTER ALEF WASLA FINAL FORM;Lo;0;AL;<final> 0671;;;;N;;;;;
+FB52;ARABIC LETTER BEEH ISOLATED FORM;Lo;0;AL;<isolated> 067B;;;;N;;;;;
+FB53;ARABIC LETTER BEEH FINAL FORM;Lo;0;AL;<final> 067B;;;;N;;;;;
+FB54;ARABIC LETTER BEEH INITIAL FORM;Lo;0;AL;<initial> 067B;;;;N;;;;;
+FB55;ARABIC LETTER BEEH MEDIAL FORM;Lo;0;AL;<medial> 067B;;;;N;;;;;
+FB56;ARABIC LETTER PEH ISOLATED FORM;Lo;0;AL;<isolated> 067E;;;;N;;;;;
+FB57;ARABIC LETTER PEH FINAL FORM;Lo;0;AL;<final> 067E;;;;N;;;;;
+FB58;ARABIC LETTER PEH INITIAL FORM;Lo;0;AL;<initial> 067E;;;;N;;;;;
+FB59;ARABIC LETTER PEH MEDIAL FORM;Lo;0;AL;<medial> 067E;;;;N;;;;;
+FB5A;ARABIC LETTER BEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0680;;;;N;;;;;
+FB5B;ARABIC LETTER BEHEH FINAL FORM;Lo;0;AL;<final> 0680;;;;N;;;;;
+FB5C;ARABIC LETTER BEHEH INITIAL FORM;Lo;0;AL;<initial> 0680;;;;N;;;;;
+FB5D;ARABIC LETTER BEHEH MEDIAL FORM;Lo;0;AL;<medial> 0680;;;;N;;;;;
+FB5E;ARABIC LETTER TTEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067A;;;;N;;;;;
+FB5F;ARABIC LETTER TTEHEH FINAL FORM;Lo;0;AL;<final> 067A;;;;N;;;;;
+FB60;ARABIC LETTER TTEHEH INITIAL FORM;Lo;0;AL;<initial> 067A;;;;N;;;;;
+FB61;ARABIC LETTER TTEHEH MEDIAL FORM;Lo;0;AL;<medial> 067A;;;;N;;;;;
+FB62;ARABIC LETTER TEHEH ISOLATED FORM;Lo;0;AL;<isolated> 067F;;;;N;;;;;
+FB63;ARABIC LETTER TEHEH FINAL FORM;Lo;0;AL;<final> 067F;;;;N;;;;;
+FB64;ARABIC LETTER TEHEH INITIAL FORM;Lo;0;AL;<initial> 067F;;;;N;;;;;
+FB65;ARABIC LETTER TEHEH MEDIAL FORM;Lo;0;AL;<medial> 067F;;;;N;;;;;
+FB66;ARABIC LETTER TTEH ISOLATED FORM;Lo;0;AL;<isolated> 0679;;;;N;;;;;
+FB67;ARABIC LETTER TTEH FINAL FORM;Lo;0;AL;<final> 0679;;;;N;;;;;
+FB68;ARABIC LETTER TTEH INITIAL FORM;Lo;0;AL;<initial> 0679;;;;N;;;;;
+FB69;ARABIC LETTER TTEH MEDIAL FORM;Lo;0;AL;<medial> 0679;;;;N;;;;;
+FB6A;ARABIC LETTER VEH ISOLATED FORM;Lo;0;AL;<isolated> 06A4;;;;N;;;;;
+FB6B;ARABIC LETTER VEH FINAL FORM;Lo;0;AL;<final> 06A4;;;;N;;;;;
+FB6C;ARABIC LETTER VEH INITIAL FORM;Lo;0;AL;<initial> 06A4;;;;N;;;;;
+FB6D;ARABIC LETTER VEH MEDIAL FORM;Lo;0;AL;<medial> 06A4;;;;N;;;;;
+FB6E;ARABIC LETTER PEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A6;;;;N;;;;;
+FB6F;ARABIC LETTER PEHEH FINAL FORM;Lo;0;AL;<final> 06A6;;;;N;;;;;
+FB70;ARABIC LETTER PEHEH INITIAL FORM;Lo;0;AL;<initial> 06A6;;;;N;;;;;
+FB71;ARABIC LETTER PEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A6;;;;N;;;;;
+FB72;ARABIC LETTER DYEH ISOLATED FORM;Lo;0;AL;<isolated> 0684;;;;N;;;;;
+FB73;ARABIC LETTER DYEH FINAL FORM;Lo;0;AL;<final> 0684;;;;N;;;;;
+FB74;ARABIC LETTER DYEH INITIAL FORM;Lo;0;AL;<initial> 0684;;;;N;;;;;
+FB75;ARABIC LETTER DYEH MEDIAL FORM;Lo;0;AL;<medial> 0684;;;;N;;;;;
+FB76;ARABIC LETTER NYEH ISOLATED FORM;Lo;0;AL;<isolated> 0683;;;;N;;;;;
+FB77;ARABIC LETTER NYEH FINAL FORM;Lo;0;AL;<final> 0683;;;;N;;;;;
+FB78;ARABIC LETTER NYEH INITIAL FORM;Lo;0;AL;<initial> 0683;;;;N;;;;;
+FB79;ARABIC LETTER NYEH MEDIAL FORM;Lo;0;AL;<medial> 0683;;;;N;;;;;
+FB7A;ARABIC LETTER TCHEH ISOLATED FORM;Lo;0;AL;<isolated> 0686;;;;N;;;;;
+FB7B;ARABIC LETTER TCHEH FINAL FORM;Lo;0;AL;<final> 0686;;;;N;;;;;
+FB7C;ARABIC LETTER TCHEH INITIAL FORM;Lo;0;AL;<initial> 0686;;;;N;;;;;
+FB7D;ARABIC LETTER TCHEH MEDIAL FORM;Lo;0;AL;<medial> 0686;;;;N;;;;;
+FB7E;ARABIC LETTER TCHEHEH ISOLATED FORM;Lo;0;AL;<isolated> 0687;;;;N;;;;;
+FB7F;ARABIC LETTER TCHEHEH FINAL FORM;Lo;0;AL;<final> 0687;;;;N;;;;;
+FB80;ARABIC LETTER TCHEHEH INITIAL FORM;Lo;0;AL;<initial> 0687;;;;N;;;;;
+FB81;ARABIC LETTER TCHEHEH MEDIAL FORM;Lo;0;AL;<medial> 0687;;;;N;;;;;
+FB82;ARABIC LETTER DDAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068D;;;;N;;;;;
+FB83;ARABIC LETTER DDAHAL FINAL FORM;Lo;0;AL;<final> 068D;;;;N;;;;;
+FB84;ARABIC LETTER DAHAL ISOLATED FORM;Lo;0;AL;<isolated> 068C;;;;N;;;;;
+FB85;ARABIC LETTER DAHAL FINAL FORM;Lo;0;AL;<final> 068C;;;;N;;;;;
+FB86;ARABIC LETTER DUL ISOLATED FORM;Lo;0;AL;<isolated> 068E;;;;N;;;;;
+FB87;ARABIC LETTER DUL FINAL FORM;Lo;0;AL;<final> 068E;;;;N;;;;;
+FB88;ARABIC LETTER DDAL ISOLATED FORM;Lo;0;AL;<isolated> 0688;;;;N;;;;;
+FB89;ARABIC LETTER DDAL FINAL FORM;Lo;0;AL;<final> 0688;;;;N;;;;;
+FB8A;ARABIC LETTER JEH ISOLATED FORM;Lo;0;AL;<isolated> 0698;;;;N;;;;;
+FB8B;ARABIC LETTER JEH FINAL FORM;Lo;0;AL;<final> 0698;;;;N;;;;;
+FB8C;ARABIC LETTER RREH ISOLATED FORM;Lo;0;AL;<isolated> 0691;;;;N;;;;;
+FB8D;ARABIC LETTER RREH FINAL FORM;Lo;0;AL;<final> 0691;;;;N;;;;;
+FB8E;ARABIC LETTER KEHEH ISOLATED FORM;Lo;0;AL;<isolated> 06A9;;;;N;;;;;
+FB8F;ARABIC LETTER KEHEH FINAL FORM;Lo;0;AL;<final> 06A9;;;;N;;;;;
+FB90;ARABIC LETTER KEHEH INITIAL FORM;Lo;0;AL;<initial> 06A9;;;;N;;;;;
+FB91;ARABIC LETTER KEHEH MEDIAL FORM;Lo;0;AL;<medial> 06A9;;;;N;;;;;
+FB92;ARABIC LETTER GAF ISOLATED FORM;Lo;0;AL;<isolated> 06AF;;;;N;;;;;
+FB93;ARABIC LETTER GAF FINAL FORM;Lo;0;AL;<final> 06AF;;;;N;;;;;
+FB94;ARABIC LETTER GAF INITIAL FORM;Lo;0;AL;<initial> 06AF;;;;N;;;;;
+FB95;ARABIC LETTER GAF MEDIAL FORM;Lo;0;AL;<medial> 06AF;;;;N;;;;;
+FB96;ARABIC LETTER GUEH ISOLATED FORM;Lo;0;AL;<isolated> 06B3;;;;N;;;;;
+FB97;ARABIC LETTER GUEH FINAL FORM;Lo;0;AL;<final> 06B3;;;;N;;;;;
+FB98;ARABIC LETTER GUEH INITIAL FORM;Lo;0;AL;<initial> 06B3;;;;N;;;;;
+FB99;ARABIC LETTER GUEH MEDIAL FORM;Lo;0;AL;<medial> 06B3;;;;N;;;;;
+FB9A;ARABIC LETTER NGOEH ISOLATED FORM;Lo;0;AL;<isolated> 06B1;;;;N;;;;;
+FB9B;ARABIC LETTER NGOEH FINAL FORM;Lo;0;AL;<final> 06B1;;;;N;;;;;
+FB9C;ARABIC LETTER NGOEH INITIAL FORM;Lo;0;AL;<initial> 06B1;;;;N;;;;;
+FB9D;ARABIC LETTER NGOEH MEDIAL FORM;Lo;0;AL;<medial> 06B1;;;;N;;;;;
+FB9E;ARABIC LETTER NOON GHUNNA ISOLATED FORM;Lo;0;AL;<isolated> 06BA;;;;N;;;;;
+FB9F;ARABIC LETTER NOON GHUNNA FINAL FORM;Lo;0;AL;<final> 06BA;;;;N;;;;;
+FBA0;ARABIC LETTER RNOON ISOLATED FORM;Lo;0;AL;<isolated> 06BB;;;;N;;;;;
+FBA1;ARABIC LETTER RNOON FINAL FORM;Lo;0;AL;<final> 06BB;;;;N;;;;;
+FBA2;ARABIC LETTER RNOON INITIAL FORM;Lo;0;AL;<initial> 06BB;;;;N;;;;;
+FBA3;ARABIC LETTER RNOON MEDIAL FORM;Lo;0;AL;<medial> 06BB;;;;N;;;;;
+FBA4;ARABIC LETTER HEH WITH YEH ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06C0;;;;N;;;;;
+FBA5;ARABIC LETTER HEH WITH YEH ABOVE FINAL FORM;Lo;0;AL;<final> 06C0;;;;N;;;;;
+FBA6;ARABIC LETTER HEH GOAL ISOLATED FORM;Lo;0;AL;<isolated> 06C1;;;;N;;;;;
+FBA7;ARABIC LETTER HEH GOAL FINAL FORM;Lo;0;AL;<final> 06C1;;;;N;;;;;
+FBA8;ARABIC LETTER HEH GOAL INITIAL FORM;Lo;0;AL;<initial> 06C1;;;;N;;;;;
+FBA9;ARABIC LETTER HEH GOAL MEDIAL FORM;Lo;0;AL;<medial> 06C1;;;;N;;;;;
+FBAA;ARABIC LETTER HEH DOACHASHMEE ISOLATED FORM;Lo;0;AL;<isolated> 06BE;;;;N;;;;;
+FBAB;ARABIC LETTER HEH DOACHASHMEE FINAL FORM;Lo;0;AL;<final> 06BE;;;;N;;;;;
+FBAC;ARABIC LETTER HEH DOACHASHMEE INITIAL FORM;Lo;0;AL;<initial> 06BE;;;;N;;;;;
+FBAD;ARABIC LETTER HEH DOACHASHMEE MEDIAL FORM;Lo;0;AL;<medial> 06BE;;;;N;;;;;
+FBAE;ARABIC LETTER YEH BARREE ISOLATED FORM;Lo;0;AL;<isolated> 06D2;;;;N;;;;;
+FBAF;ARABIC LETTER YEH BARREE FINAL FORM;Lo;0;AL;<final> 06D2;;;;N;;;;;
+FBB0;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 06D3;;;;N;;;;;
+FBB1;ARABIC LETTER YEH BARREE WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 06D3;;;;N;;;;;
+FBD3;ARABIC LETTER NG ISOLATED FORM;Lo;0;AL;<isolated> 06AD;;;;N;;;;;
+FBD4;ARABIC LETTER NG FINAL FORM;Lo;0;AL;<final> 06AD;;;;N;;;;;
+FBD5;ARABIC LETTER NG INITIAL FORM;Lo;0;AL;<initial> 06AD;;;;N;;;;;
+FBD6;ARABIC LETTER NG MEDIAL FORM;Lo;0;AL;<medial> 06AD;;;;N;;;;;
+FBD7;ARABIC LETTER U ISOLATED FORM;Lo;0;AL;<isolated> 06C7;;;;N;;;;;
+FBD8;ARABIC LETTER U FINAL FORM;Lo;0;AL;<final> 06C7;;;;N;;;;;
+FBD9;ARABIC LETTER OE ISOLATED FORM;Lo;0;AL;<isolated> 06C6;;;;N;;;;;
+FBDA;ARABIC LETTER OE FINAL FORM;Lo;0;AL;<final> 06C6;;;;N;;;;;
+FBDB;ARABIC LETTER YU ISOLATED FORM;Lo;0;AL;<isolated> 06C8;;;;N;;;;;
+FBDC;ARABIC LETTER YU FINAL FORM;Lo;0;AL;<final> 06C8;;;;N;;;;;
+FBDD;ARABIC LETTER U WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0677;;;;N;;;;;
+FBDE;ARABIC LETTER VE ISOLATED FORM;Lo;0;AL;<isolated> 06CB;;;;N;;;;;
+FBDF;ARABIC LETTER VE FINAL FORM;Lo;0;AL;<final> 06CB;;;;N;;;;;
+FBE0;ARABIC LETTER KIRGHIZ OE ISOLATED FORM;Lo;0;AL;<isolated> 06C5;;;;N;;;;;
+FBE1;ARABIC LETTER KIRGHIZ OE FINAL FORM;Lo;0;AL;<final> 06C5;;;;N;;;;;
+FBE2;ARABIC LETTER KIRGHIZ YU ISOLATED FORM;Lo;0;AL;<isolated> 06C9;;;;N;;;;;
+FBE3;ARABIC LETTER KIRGHIZ YU FINAL FORM;Lo;0;AL;<final> 06C9;;;;N;;;;;
+FBE4;ARABIC LETTER E ISOLATED FORM;Lo;0;AL;<isolated> 06D0;;;;N;;;;;
+FBE5;ARABIC LETTER E FINAL FORM;Lo;0;AL;<final> 06D0;;;;N;;;;;
+FBE6;ARABIC LETTER E INITIAL FORM;Lo;0;AL;<initial> 06D0;;;;N;;;;;
+FBE7;ARABIC LETTER E MEDIAL FORM;Lo;0;AL;<medial> 06D0;;;;N;;;;;
+FBE8;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0649;;;;N;;;;;
+FBE9;ARABIC LETTER UIGHUR KAZAKH KIRGHIZ ALEF MAKSURA MEDIAL FORM;Lo;0;AL;<medial> 0649;;;;N;;;;;
+FBEA;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0626 0627;;;;N;;;;;
+FBEB;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF FINAL FORM;Lo;0;AL;<final> 0626 0627;;;;N;;;;;
+FBEC;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D5;;;;N;;;;;
+FBED;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH AE FINAL FORM;Lo;0;AL;<final> 0626 06D5;;;;N;;;;;
+FBEE;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW ISOLATED FORM;Lo;0;AL;<isolated> 0626 0648;;;;N;;;;;
+FBEF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH WAW FINAL FORM;Lo;0;AL;<final> 0626 0648;;;;N;;;;;
+FBF0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C7;;;;N;;;;;
+FBF1;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH U FINAL FORM;Lo;0;AL;<final> 0626 06C7;;;;N;;;;;
+FBF2;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C6;;;;N;;;;;
+FBF3;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH OE FINAL FORM;Lo;0;AL;<final> 0626 06C6;;;;N;;;;;
+FBF4;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU ISOLATED FORM;Lo;0;AL;<isolated> 0626 06C8;;;;N;;;;;
+FBF5;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YU FINAL FORM;Lo;0;AL;<final> 0626 06C8;;;;N;;;;;
+FBF6;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E ISOLATED FORM;Lo;0;AL;<isolated> 0626 06D0;;;;N;;;;;
+FBF7;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E FINAL FORM;Lo;0;AL;<final> 0626 06D0;;;;N;;;;;
+FBF8;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH E INITIAL FORM;Lo;0;AL;<initial> 0626 06D0;;;;N;;;;;
+FBF9;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+FBFA;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+FBFB;ARABIC LIGATURE UIGHUR KIRGHIZ YEH WITH HAMZA ABOVE WITH ALEF MAKSURA INITIAL FORM;Lo;0;AL;<initial> 0626 0649;;;;N;;;;;
+FBFC;ARABIC LETTER FARSI YEH ISOLATED FORM;Lo;0;AL;<isolated> 06CC;;;;N;;;;;
+FBFD;ARABIC LETTER FARSI YEH FINAL FORM;Lo;0;AL;<final> 06CC;;;;N;;;;;
+FBFE;ARABIC LETTER FARSI YEH INITIAL FORM;Lo;0;AL;<initial> 06CC;;;;N;;;;;
+FBFF;ARABIC LETTER FARSI YEH MEDIAL FORM;Lo;0;AL;<medial> 06CC;;;;N;;;;;
+FC00;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 062C;;;;N;;;;;
+FC01;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0626 062D;;;;N;;;;;
+FC02;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0626 0645;;;;N;;;;;
+FC03;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0626 0649;;;;N;;;;;
+FC04;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0626 064A;;;;N;;;;;
+FC05;ARABIC LIGATURE BEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 062C;;;;N;;;;;
+FC06;ARABIC LIGATURE BEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062D;;;;N;;;;;
+FC07;ARABIC LIGATURE BEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0628 062E;;;;N;;;;;
+FC08;ARABIC LIGATURE BEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0628 0645;;;;N;;;;;
+FC09;ARABIC LIGATURE BEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0628 0649;;;;N;;;;;
+FC0A;ARABIC LIGATURE BEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0628 064A;;;;N;;;;;
+FC0B;ARABIC LIGATURE TEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 062C;;;;N;;;;;
+FC0C;ARABIC LIGATURE TEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062D;;;;N;;;;;
+FC0D;ARABIC LIGATURE TEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062A 062E;;;;N;;;;;
+FC0E;ARABIC LIGATURE TEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062A 0645;;;;N;;;;;
+FC0F;ARABIC LIGATURE TEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062A 0649;;;;N;;;;;
+FC10;ARABIC LIGATURE TEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062A 064A;;;;N;;;;;
+FC11;ARABIC LIGATURE THEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 062C;;;;N;;;;;
+FC12;ARABIC LIGATURE THEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062B 0645;;;;N;;;;;
+FC13;ARABIC LIGATURE THEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062B 0649;;;;N;;;;;
+FC14;ARABIC LIGATURE THEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062B 064A;;;;N;;;;;
+FC15;ARABIC LIGATURE JEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062C 062D;;;;N;;;;;
+FC16;ARABIC LIGATURE JEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C 0645;;;;N;;;;;
+FC17;ARABIC LIGATURE HAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 062C;;;;N;;;;;
+FC18;ARABIC LIGATURE HAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062D 0645;;;;N;;;;;
+FC19;ARABIC LIGATURE KHAH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 062C;;;;N;;;;;
+FC1A;ARABIC LIGATURE KHAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 062E 062D;;;;N;;;;;
+FC1B;ARABIC LIGATURE KHAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 062E 0645;;;;N;;;;;
+FC1C;ARABIC LIGATURE SEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 062C;;;;N;;;;;
+FC1D;ARABIC LIGATURE SEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062D;;;;N;;;;;
+FC1E;ARABIC LIGATURE SEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0633 062E;;;;N;;;;;
+FC1F;ARABIC LIGATURE SEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0633 0645;;;;N;;;;;
+FC20;ARABIC LIGATURE SAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0635 062D;;;;N;;;;;
+FC21;ARABIC LIGATURE SAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0645;;;;N;;;;;
+FC22;ARABIC LIGATURE DAD WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 062C;;;;N;;;;;
+FC23;ARABIC LIGATURE DAD WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062D;;;;N;;;;;
+FC24;ARABIC LIGATURE DAD WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0636 062E;;;;N;;;;;
+FC25;ARABIC LIGATURE DAD WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0636 0645;;;;N;;;;;
+FC26;ARABIC LIGATURE TAH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0637 062D;;;;N;;;;;
+FC27;ARABIC LIGATURE TAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0637 0645;;;;N;;;;;
+FC28;ARABIC LIGATURE ZAH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0638 0645;;;;N;;;;;
+FC29;ARABIC LIGATURE AIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 062C;;;;N;;;;;
+FC2A;ARABIC LIGATURE AIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0639 0645;;;;N;;;;;
+FC2B;ARABIC LIGATURE GHAIN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 062C;;;;N;;;;;
+FC2C;ARABIC LIGATURE GHAIN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 063A 0645;;;;N;;;;;
+FC2D;ARABIC LIGATURE FEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 062C;;;;N;;;;;
+FC2E;ARABIC LIGATURE FEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062D;;;;N;;;;;
+FC2F;ARABIC LIGATURE FEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0641 062E;;;;N;;;;;
+FC30;ARABIC LIGATURE FEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0641 0645;;;;N;;;;;
+FC31;ARABIC LIGATURE FEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0641 0649;;;;N;;;;;
+FC32;ARABIC LIGATURE FEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0641 064A;;;;N;;;;;
+FC33;ARABIC LIGATURE QAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0642 062D;;;;N;;;;;
+FC34;ARABIC LIGATURE QAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0642 0645;;;;N;;;;;
+FC35;ARABIC LIGATURE QAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0642 0649;;;;N;;;;;
+FC36;ARABIC LIGATURE QAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0642 064A;;;;N;;;;;
+FC37;ARABIC LIGATURE KAF WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0643 0627;;;;N;;;;;
+FC38;ARABIC LIGATURE KAF WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 062C;;;;N;;;;;
+FC39;ARABIC LIGATURE KAF WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062D;;;;N;;;;;
+FC3A;ARABIC LIGATURE KAF WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0643 062E;;;;N;;;;;
+FC3B;ARABIC LIGATURE KAF WITH LAM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0644;;;;N;;;;;
+FC3C;ARABIC LIGATURE KAF WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0643 0645;;;;N;;;;;
+FC3D;ARABIC LIGATURE KAF WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0643 0649;;;;N;;;;;
+FC3E;ARABIC LIGATURE KAF WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0643 064A;;;;N;;;;;
+FC3F;ARABIC LIGATURE LAM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 062C;;;;N;;;;;
+FC40;ARABIC LIGATURE LAM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062D;;;;N;;;;;
+FC41;ARABIC LIGATURE LAM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0644 062E;;;;N;;;;;
+FC42;ARABIC LIGATURE LAM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0644 0645;;;;N;;;;;
+FC43;ARABIC LIGATURE LAM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0644 0649;;;;N;;;;;
+FC44;ARABIC LIGATURE LAM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0644 064A;;;;N;;;;;
+FC45;ARABIC LIGATURE MEEM WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 062C;;;;N;;;;;
+FC46;ARABIC LIGATURE MEEM WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D;;;;N;;;;;
+FC47;ARABIC LIGATURE MEEM WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0645 062E;;;;N;;;;;
+FC48;ARABIC LIGATURE MEEM WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645 0645;;;;N;;;;;
+FC49;ARABIC LIGATURE MEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0645 0649;;;;N;;;;;
+FC4A;ARABIC LIGATURE MEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0645 064A;;;;N;;;;;
+FC4B;ARABIC LIGATURE NOON WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 062C;;;;N;;;;;
+FC4C;ARABIC LIGATURE NOON WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062D;;;;N;;;;;
+FC4D;ARABIC LIGATURE NOON WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0646 062E;;;;N;;;;;
+FC4E;ARABIC LIGATURE NOON WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0646 0645;;;;N;;;;;
+FC4F;ARABIC LIGATURE NOON WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0646 0649;;;;N;;;;;
+FC50;ARABIC LIGATURE NOON WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0646 064A;;;;N;;;;;
+FC51;ARABIC LIGATURE HEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 062C;;;;N;;;;;
+FC52;ARABIC LIGATURE HEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0647 0645;;;;N;;;;;
+FC53;ARABIC LIGATURE HEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0647 0649;;;;N;;;;;
+FC54;ARABIC LIGATURE HEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0647 064A;;;;N;;;;;
+FC55;ARABIC LIGATURE YEH WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 062C;;;;N;;;;;
+FC56;ARABIC LIGATURE YEH WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062D;;;;N;;;;;
+FC57;ARABIC LIGATURE YEH WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 064A 062E;;;;N;;;;;
+FC58;ARABIC LIGATURE YEH WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 064A 0645;;;;N;;;;;
+FC59;ARABIC LIGATURE YEH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 064A 0649;;;;N;;;;;
+FC5A;ARABIC LIGATURE YEH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A 064A;;;;N;;;;;
+FC5B;ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0630 0670;;;;N;;;;;
+FC5C;ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0631 0670;;;;N;;;;;
+FC5D;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0649 0670;;;;N;;;;;
+FC5E;ARABIC LIGATURE SHADDA WITH DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C 0651;;;;N;;;;;
+FC5F;ARABIC LIGATURE SHADDA WITH KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D 0651;;;;N;;;;;
+FC60;ARABIC LIGATURE SHADDA WITH FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E 0651;;;;N;;;;;
+FC61;ARABIC LIGATURE SHADDA WITH DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F 0651;;;;N;;;;;
+FC62;ARABIC LIGATURE SHADDA WITH KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650 0651;;;;N;;;;;
+FC63;ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651 0670;;;;N;;;;;
+FC64;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH REH FINAL FORM;Lo;0;AL;<final> 0626 0631;;;;N;;;;;
+FC65;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0626 0632;;;;N;;;;;
+FC66;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM FINAL FORM;Lo;0;AL;<final> 0626 0645;;;;N;;;;;
+FC67;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH NOON FINAL FORM;Lo;0;AL;<final> 0626 0646;;;;N;;;;;
+FC68;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0626 0649;;;;N;;;;;
+FC69;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH YEH FINAL FORM;Lo;0;AL;<final> 0626 064A;;;;N;;;;;
+FC6A;ARABIC LIGATURE BEH WITH REH FINAL FORM;Lo;0;AL;<final> 0628 0631;;;;N;;;;;
+FC6B;ARABIC LIGATURE BEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0628 0632;;;;N;;;;;
+FC6C;ARABIC LIGATURE BEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0628 0645;;;;N;;;;;
+FC6D;ARABIC LIGATURE BEH WITH NOON FINAL FORM;Lo;0;AL;<final> 0628 0646;;;;N;;;;;
+FC6E;ARABIC LIGATURE BEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0628 0649;;;;N;;;;;
+FC6F;ARABIC LIGATURE BEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 064A;;;;N;;;;;
+FC70;ARABIC LIGATURE TEH WITH REH FINAL FORM;Lo;0;AL;<final> 062A 0631;;;;N;;;;;
+FC71;ARABIC LIGATURE TEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062A 0632;;;;N;;;;;
+FC72;ARABIC LIGATURE TEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062A 0645;;;;N;;;;;
+FC73;ARABIC LIGATURE TEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062A 0646;;;;N;;;;;
+FC74;ARABIC LIGATURE TEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0649;;;;N;;;;;
+FC75;ARABIC LIGATURE TEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 064A;;;;N;;;;;
+FC76;ARABIC LIGATURE THEH WITH REH FINAL FORM;Lo;0;AL;<final> 062B 0631;;;;N;;;;;
+FC77;ARABIC LIGATURE THEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 062B 0632;;;;N;;;;;
+FC78;ARABIC LIGATURE THEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 062B 0645;;;;N;;;;;
+FC79;ARABIC LIGATURE THEH WITH NOON FINAL FORM;Lo;0;AL;<final> 062B 0646;;;;N;;;;;
+FC7A;ARABIC LIGATURE THEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062B 0649;;;;N;;;;;
+FC7B;ARABIC LIGATURE THEH WITH YEH FINAL FORM;Lo;0;AL;<final> 062B 064A;;;;N;;;;;
+FC7C;ARABIC LIGATURE FEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0641 0649;;;;N;;;;;
+FC7D;ARABIC LIGATURE FEH WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 064A;;;;N;;;;;
+FC7E;ARABIC LIGATURE QAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0642 0649;;;;N;;;;;
+FC7F;ARABIC LIGATURE QAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 064A;;;;N;;;;;
+FC80;ARABIC LIGATURE KAF WITH ALEF FINAL FORM;Lo;0;AL;<final> 0643 0627;;;;N;;;;;
+FC81;ARABIC LIGATURE KAF WITH LAM FINAL FORM;Lo;0;AL;<final> 0643 0644;;;;N;;;;;
+FC82;ARABIC LIGATURE KAF WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645;;;;N;;;;;
+FC83;ARABIC LIGATURE KAF WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0643 0649;;;;N;;;;;
+FC84;ARABIC LIGATURE KAF WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 064A;;;;N;;;;;
+FC85;ARABIC LIGATURE LAM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 0645;;;;N;;;;;
+FC86;ARABIC LIGATURE LAM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 0649;;;;N;;;;;
+FC87;ARABIC LIGATURE LAM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 064A;;;;N;;;;;
+FC88;ARABIC LIGATURE MEEM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0645 0627;;;;N;;;;;
+FC89;ARABIC LIGATURE MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0645 0645;;;;N;;;;;
+FC8A;ARABIC LIGATURE NOON WITH REH FINAL FORM;Lo;0;AL;<final> 0646 0631;;;;N;;;;;
+FC8B;ARABIC LIGATURE NOON WITH ZAIN FINAL FORM;Lo;0;AL;<final> 0646 0632;;;;N;;;;;
+FC8C;ARABIC LIGATURE NOON WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 0645;;;;N;;;;;
+FC8D;ARABIC LIGATURE NOON WITH NOON FINAL FORM;Lo;0;AL;<final> 0646 0646;;;;N;;;;;
+FC8E;ARABIC LIGATURE NOON WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0649;;;;N;;;;;
+FC8F;ARABIC LIGATURE NOON WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 064A;;;;N;;;;;
+FC90;ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM;Lo;0;AL;<final> 0649 0670;;;;N;;;;;
+FC91;ARABIC LIGATURE YEH WITH REH FINAL FORM;Lo;0;AL;<final> 064A 0631;;;;N;;;;;
+FC92;ARABIC LIGATURE YEH WITH ZAIN FINAL FORM;Lo;0;AL;<final> 064A 0632;;;;N;;;;;
+FC93;ARABIC LIGATURE YEH WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645;;;;N;;;;;
+FC94;ARABIC LIGATURE YEH WITH NOON FINAL FORM;Lo;0;AL;<final> 064A 0646;;;;N;;;;;
+FC95;ARABIC LIGATURE YEH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 064A 0649;;;;N;;;;;
+FC96;ARABIC LIGATURE YEH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 064A;;;;N;;;;;
+FC97;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0626 062C;;;;N;;;;;
+FC98;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0626 062D;;;;N;;;;;
+FC99;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0626 062E;;;;N;;;;;
+FC9A;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0626 0645;;;;N;;;;;
+FC9B;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0626 0647;;;;N;;;;;
+FC9C;ARABIC LIGATURE BEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0628 062C;;;;N;;;;;
+FC9D;ARABIC LIGATURE BEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0628 062D;;;;N;;;;;
+FC9E;ARABIC LIGATURE BEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0628 062E;;;;N;;;;;
+FC9F;ARABIC LIGATURE BEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0628 0645;;;;N;;;;;
+FCA0;ARABIC LIGATURE BEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0628 0647;;;;N;;;;;
+FCA1;ARABIC LIGATURE TEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C;;;;N;;;;;
+FCA2;ARABIC LIGATURE TEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 062D;;;;N;;;;;
+FCA3;ARABIC LIGATURE TEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 062E;;;;N;;;;;
+FCA4;ARABIC LIGATURE TEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645;;;;N;;;;;
+FCA5;ARABIC LIGATURE TEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 062A 0647;;;;N;;;;;
+FCA6;ARABIC LIGATURE THEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062B 0645;;;;N;;;;;
+FCA7;ARABIC LIGATURE JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 062D;;;;N;;;;;
+FCA8;ARABIC LIGATURE JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062C 0645;;;;N;;;;;
+FCA9;ARABIC LIGATURE HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062D 062C;;;;N;;;;;
+FCAA;ARABIC LIGATURE HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062D 0645;;;;N;;;;;
+FCAB;ARABIC LIGATURE KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062E 062C;;;;N;;;;;
+FCAC;ARABIC LIGATURE KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062E 0645;;;;N;;;;;
+FCAD;ARABIC LIGATURE SEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062C;;;;N;;;;;
+FCAE;ARABIC LIGATURE SEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062D;;;;N;;;;;
+FCAF;ARABIC LIGATURE SEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0633 062E;;;;N;;;;;
+FCB0;ARABIC LIGATURE SEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645;;;;N;;;;;
+FCB1;ARABIC LIGATURE SAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D;;;;N;;;;;
+FCB2;ARABIC LIGATURE SAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0635 062E;;;;N;;;;;
+FCB3;ARABIC LIGATURE SAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645;;;;N;;;;;
+FCB4;ARABIC LIGATURE DAD WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062C;;;;N;;;;;
+FCB5;ARABIC LIGATURE DAD WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0636 062D;;;;N;;;;;
+FCB6;ARABIC LIGATURE DAD WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0636 062E;;;;N;;;;;
+FCB7;ARABIC LIGATURE DAD WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 0645;;;;N;;;;;
+FCB8;ARABIC LIGATURE TAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 062D;;;;N;;;;;
+FCB9;ARABIC LIGATURE ZAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0638 0645;;;;N;;;;;
+FCBA;ARABIC LIGATURE AIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C;;;;N;;;;;
+FCBB;ARABIC LIGATURE AIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645;;;;N;;;;;
+FCBC;ARABIC LIGATURE GHAIN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 063A 062C;;;;N;;;;;
+FCBD;ARABIC LIGATURE GHAIN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 063A 0645;;;;N;;;;;
+FCBE;ARABIC LIGATURE FEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062C;;;;N;;;;;
+FCBF;ARABIC LIGATURE FEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0641 062D;;;;N;;;;;
+FCC0;ARABIC LIGATURE FEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0641 062E;;;;N;;;;;
+FCC1;ARABIC LIGATURE FEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 0645;;;;N;;;;;
+FCC2;ARABIC LIGATURE QAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 062D;;;;N;;;;;
+FCC3;ARABIC LIGATURE QAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0642 0645;;;;N;;;;;
+FCC4;ARABIC LIGATURE KAF WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0643 062C;;;;N;;;;;
+FCC5;ARABIC LIGATURE KAF WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0643 062D;;;;N;;;;;
+FCC6;ARABIC LIGATURE KAF WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0643 062E;;;;N;;;;;
+FCC7;ARABIC LIGATURE KAF WITH LAM INITIAL FORM;Lo;0;AL;<initial> 0643 0644;;;;N;;;;;
+FCC8;ARABIC LIGATURE KAF WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645;;;;N;;;;;
+FCC9;ARABIC LIGATURE LAM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C;;;;N;;;;;
+FCCA;ARABIC LIGATURE LAM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 062D;;;;N;;;;;
+FCCB;ARABIC LIGATURE LAM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0644 062E;;;;N;;;;;
+FCCC;ARABIC LIGATURE LAM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 0645;;;;N;;;;;
+FCCD;ARABIC LIGATURE LAM WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0644 0647;;;;N;;;;;
+FCCE;ARABIC LIGATURE MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C;;;;N;;;;;
+FCCF;ARABIC LIGATURE MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062D;;;;N;;;;;
+FCD0;ARABIC LIGATURE MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062E;;;;N;;;;;
+FCD1;ARABIC LIGATURE MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 0645;;;;N;;;;;
+FCD2;ARABIC LIGATURE NOON WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C;;;;N;;;;;
+FCD3;ARABIC LIGATURE NOON WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062D;;;;N;;;;;
+FCD4;ARABIC LIGATURE NOON WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0646 062E;;;;N;;;;;
+FCD5;ARABIC LIGATURE NOON WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 0645;;;;N;;;;;
+FCD6;ARABIC LIGATURE NOON WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0646 0647;;;;N;;;;;
+FCD7;ARABIC LIGATURE HEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 062C;;;;N;;;;;
+FCD8;ARABIC LIGATURE HEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645;;;;N;;;;;
+FCD9;ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM;Lo;0;AL;<initial> 0647 0670;;;;N;;;;;
+FCDA;ARABIC LIGATURE YEH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 064A 062C;;;;N;;;;;
+FCDB;ARABIC LIGATURE YEH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 064A 062D;;;;N;;;;;
+FCDC;ARABIC LIGATURE YEH WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 064A 062E;;;;N;;;;;
+FCDD;ARABIC LIGATURE YEH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645;;;;N;;;;;
+FCDE;ARABIC LIGATURE YEH WITH HEH INITIAL FORM;Lo;0;AL;<initial> 064A 0647;;;;N;;;;;
+FCDF;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0626 0645;;;;N;;;;;
+FCE0;ARABIC LIGATURE YEH WITH HAMZA ABOVE WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0626 0647;;;;N;;;;;
+FCE1;ARABIC LIGATURE BEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0628 0645;;;;N;;;;;
+FCE2;ARABIC LIGATURE BEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0628 0647;;;;N;;;;;
+FCE3;ARABIC LIGATURE TEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062A 0645;;;;N;;;;;
+FCE4;ARABIC LIGATURE TEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062A 0647;;;;N;;;;;
+FCE5;ARABIC LIGATURE THEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 062B 0645;;;;N;;;;;
+FCE6;ARABIC LIGATURE THEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 062B 0647;;;;N;;;;;
+FCE7;ARABIC LIGATURE SEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 0645;;;;N;;;;;
+FCE8;ARABIC LIGATURE SEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0633 0647;;;;N;;;;;
+FCE9;ARABIC LIGATURE SHEEN WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 0645;;;;N;;;;;
+FCEA;ARABIC LIGATURE SHEEN WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0634 0647;;;;N;;;;;
+FCEB;ARABIC LIGATURE KAF WITH LAM MEDIAL FORM;Lo;0;AL;<medial> 0643 0644;;;;N;;;;;
+FCEC;ARABIC LIGATURE KAF WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0643 0645;;;;N;;;;;
+FCED;ARABIC LIGATURE LAM WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0644 0645;;;;N;;;;;
+FCEE;ARABIC LIGATURE NOON WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0646 0645;;;;N;;;;;
+FCEF;ARABIC LIGATURE NOON WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 0646 0647;;;;N;;;;;
+FCF0;ARABIC LIGATURE YEH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 064A 0645;;;;N;;;;;
+FCF1;ARABIC LIGATURE YEH WITH HEH MEDIAL FORM;Lo;0;AL;<medial> 064A 0647;;;;N;;;;;
+FCF2;ARABIC LIGATURE SHADDA WITH FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E 0651;;;;N;;;;;
+FCF3;ARABIC LIGATURE SHADDA WITH DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F 0651;;;;N;;;;;
+FCF4;ARABIC LIGATURE SHADDA WITH KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650 0651;;;;N;;;;;
+FCF5;ARABIC LIGATURE TAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0637 0649;;;;N;;;;;
+FCF6;ARABIC LIGATURE TAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0637 064A;;;;N;;;;;
+FCF7;ARABIC LIGATURE AIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0639 0649;;;;N;;;;;
+FCF8;ARABIC LIGATURE AIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0639 064A;;;;N;;;;;
+FCF9;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 063A 0649;;;;N;;;;;
+FCFA;ARABIC LIGATURE GHAIN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 063A 064A;;;;N;;;;;
+FCFB;ARABIC LIGATURE SEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0633 0649;;;;N;;;;;
+FCFC;ARABIC LIGATURE SEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0633 064A;;;;N;;;;;
+FCFD;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0634 0649;;;;N;;;;;
+FCFE;ARABIC LIGATURE SHEEN WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0634 064A;;;;N;;;;;
+FCFF;ARABIC LIGATURE HAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062D 0649;;;;N;;;;;
+FD00;ARABIC LIGATURE HAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062D 064A;;;;N;;;;;
+FD01;ARABIC LIGATURE JEEM WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062C 0649;;;;N;;;;;
+FD02;ARABIC LIGATURE JEEM WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062C 064A;;;;N;;;;;
+FD03;ARABIC LIGATURE KHAH WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 062E 0649;;;;N;;;;;
+FD04;ARABIC LIGATURE KHAH WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 062E 064A;;;;N;;;;;
+FD05;ARABIC LIGATURE SAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0649;;;;N;;;;;
+FD06;ARABIC LIGATURE SAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0635 064A;;;;N;;;;;
+FD07;ARABIC LIGATURE DAD WITH ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0636 0649;;;;N;;;;;
+FD08;ARABIC LIGATURE DAD WITH YEH ISOLATED FORM;Lo;0;AL;<isolated> 0636 064A;;;;N;;;;;
+FD09;ARABIC LIGATURE SHEEN WITH JEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 062C;;;;N;;;;;
+FD0A;ARABIC LIGATURE SHEEN WITH HAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062D;;;;N;;;;;
+FD0B;ARABIC LIGATURE SHEEN WITH KHAH ISOLATED FORM;Lo;0;AL;<isolated> 0634 062E;;;;N;;;;;
+FD0C;ARABIC LIGATURE SHEEN WITH MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0634 0645;;;;N;;;;;
+FD0D;ARABIC LIGATURE SHEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0634 0631;;;;N;;;;;
+FD0E;ARABIC LIGATURE SEEN WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0633 0631;;;;N;;;;;
+FD0F;ARABIC LIGATURE SAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0635 0631;;;;N;;;;;
+FD10;ARABIC LIGATURE DAD WITH REH ISOLATED FORM;Lo;0;AL;<isolated> 0636 0631;;;;N;;;;;
+FD11;ARABIC LIGATURE TAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0637 0649;;;;N;;;;;
+FD12;ARABIC LIGATURE TAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 064A;;;;N;;;;;
+FD13;ARABIC LIGATURE AIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0649;;;;N;;;;;
+FD14;ARABIC LIGATURE AIN WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 064A;;;;N;;;;;
+FD15;ARABIC LIGATURE GHAIN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0649;;;;N;;;;;
+FD16;ARABIC LIGATURE GHAIN WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 064A;;;;N;;;;;
+FD17;ARABIC LIGATURE SEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 0649;;;;N;;;;;
+FD18;ARABIC LIGATURE SEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 064A;;;;N;;;;;
+FD19;ARABIC LIGATURE SHEEN WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0634 0649;;;;N;;;;;
+FD1A;ARABIC LIGATURE SHEEN WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 064A;;;;N;;;;;
+FD1B;ARABIC LIGATURE HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0649;;;;N;;;;;
+FD1C;ARABIC LIGATURE HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 064A;;;;N;;;;;
+FD1D;ARABIC LIGATURE JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0649;;;;N;;;;;
+FD1E;ARABIC LIGATURE JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 064A;;;;N;;;;;
+FD1F;ARABIC LIGATURE KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062E 0649;;;;N;;;;;
+FD20;ARABIC LIGATURE KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062E 064A;;;;N;;;;;
+FD21;ARABIC LIGATURE SAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0635 0649;;;;N;;;;;
+FD22;ARABIC LIGATURE SAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 064A;;;;N;;;;;
+FD23;ARABIC LIGATURE DAD WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 0649;;;;N;;;;;
+FD24;ARABIC LIGATURE DAD WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 064A;;;;N;;;;;
+FD25;ARABIC LIGATURE SHEEN WITH JEEM FINAL FORM;Lo;0;AL;<final> 0634 062C;;;;N;;;;;
+FD26;ARABIC LIGATURE SHEEN WITH HAH FINAL FORM;Lo;0;AL;<final> 0634 062D;;;;N;;;;;
+FD27;ARABIC LIGATURE SHEEN WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 062E;;;;N;;;;;
+FD28;ARABIC LIGATURE SHEEN WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645;;;;N;;;;;
+FD29;ARABIC LIGATURE SHEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0634 0631;;;;N;;;;;
+FD2A;ARABIC LIGATURE SEEN WITH REH FINAL FORM;Lo;0;AL;<final> 0633 0631;;;;N;;;;;
+FD2B;ARABIC LIGATURE SAD WITH REH FINAL FORM;Lo;0;AL;<final> 0635 0631;;;;N;;;;;
+FD2C;ARABIC LIGATURE DAD WITH REH FINAL FORM;Lo;0;AL;<final> 0636 0631;;;;N;;;;;
+FD2D;ARABIC LIGATURE SHEEN WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062C;;;;N;;;;;
+FD2E;ARABIC LIGATURE SHEEN WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0634 062D;;;;N;;;;;
+FD2F;ARABIC LIGATURE SHEEN WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 062E;;;;N;;;;;
+FD30;ARABIC LIGATURE SHEEN WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645;;;;N;;;;;
+FD31;ARABIC LIGATURE SEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0633 0647;;;;N;;;;;
+FD32;ARABIC LIGATURE SHEEN WITH HEH INITIAL FORM;Lo;0;AL;<initial> 0634 0647;;;;N;;;;;
+FD33;ARABIC LIGATURE TAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645;;;;N;;;;;
+FD34;ARABIC LIGATURE SEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0633 062C;;;;N;;;;;
+FD35;ARABIC LIGATURE SEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062D;;;;N;;;;;
+FD36;ARABIC LIGATURE SEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0633 062E;;;;N;;;;;
+FD37;ARABIC LIGATURE SHEEN WITH JEEM MEDIAL FORM;Lo;0;AL;<medial> 0634 062C;;;;N;;;;;
+FD38;ARABIC LIGATURE SHEEN WITH HAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062D;;;;N;;;;;
+FD39;ARABIC LIGATURE SHEEN WITH KHAH MEDIAL FORM;Lo;0;AL;<medial> 0634 062E;;;;N;;;;;
+FD3A;ARABIC LIGATURE TAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0637 0645;;;;N;;;;;
+FD3B;ARABIC LIGATURE ZAH WITH MEEM MEDIAL FORM;Lo;0;AL;<medial> 0638 0645;;;;N;;;;;
+FD3C;ARABIC LIGATURE ALEF WITH FATHATAN FINAL FORM;Lo;0;AL;<final> 0627 064B;;;;N;;;;;
+FD3D;ARABIC LIGATURE ALEF WITH FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0627 064B;;;;N;;;;;
+FD3E;ORNATE LEFT PARENTHESIS;Ps;0;ON;;;;;N;;;;;
+FD3F;ORNATE RIGHT PARENTHESIS;Pe;0;ON;;;;;N;;;;;
+FD50;ARABIC LIGATURE TEH WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062C 0645;;;;N;;;;;
+FD51;ARABIC LIGATURE TEH WITH HAH WITH JEEM FINAL FORM;Lo;0;AL;<final> 062A 062D 062C;;;;N;;;;;
+FD52;ARABIC LIGATURE TEH WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 062C;;;;N;;;;;
+FD53;ARABIC LIGATURE TEH WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062D 0645;;;;N;;;;;
+FD54;ARABIC LIGATURE TEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 062A 062E 0645;;;;N;;;;;
+FD55;ARABIC LIGATURE TEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062C;;;;N;;;;;
+FD56;ARABIC LIGATURE TEH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062D;;;;N;;;;;
+FD57;ARABIC LIGATURE TEH WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 062A 0645 062E;;;;N;;;;;
+FD58;ARABIC LIGATURE JEEM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 062C 0645 062D;;;;N;;;;;
+FD59;ARABIC LIGATURE JEEM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 062C 0645 062D;;;;N;;;;;
+FD5A;ARABIC LIGATURE HAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 0645 064A;;;;N;;;;;
+FD5B;ARABIC LIGATURE HAH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062D 0645 0649;;;;N;;;;;
+FD5C;ARABIC LIGATURE SEEN WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 062D 062C;;;;N;;;;;
+FD5D;ARABIC LIGATURE SEEN WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 062C 062D;;;;N;;;;;
+FD5E;ARABIC LIGATURE SEEN WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062C 0649;;;;N;;;;;
+FD5F;ARABIC LIGATURE SEEN WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0633 0645 062D;;;;N;;;;;
+FD60;ARABIC LIGATURE SEEN WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062D;;;;N;;;;;
+FD61;ARABIC LIGATURE SEEN WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 062C;;;;N;;;;;
+FD62;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0633 0645 0645;;;;N;;;;;
+FD63;ARABIC LIGATURE SEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0633 0645 0645;;;;N;;;;;
+FD64;ARABIC LIGATURE SAD WITH HAH WITH HAH FINAL FORM;Lo;0;AL;<final> 0635 062D 062D;;;;N;;;;;
+FD65;ARABIC LIGATURE SAD WITH HAH WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0635 062D 062D;;;;N;;;;;
+FD66;ARABIC LIGATURE SAD WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0635 0645 0645;;;;N;;;;;
+FD67;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 062D 0645;;;;N;;;;;
+FD68;ARABIC LIGATURE SHEEN WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 062D 0645;;;;N;;;;;
+FD69;ARABIC LIGATURE SHEEN WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062C 064A;;;;N;;;;;
+FD6A;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH FINAL FORM;Lo;0;AL;<final> 0634 0645 062E;;;;N;;;;;
+FD6B;ARABIC LIGATURE SHEEN WITH MEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0634 0645 062E;;;;N;;;;;
+FD6C;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0634 0645 0645;;;;N;;;;;
+FD6D;ARABIC LIGATURE SHEEN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0634 0645 0645;;;;N;;;;;
+FD6E;ARABIC LIGATURE DAD WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0636 062D 0649;;;;N;;;;;
+FD6F;ARABIC LIGATURE DAD WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0636 062E 0645;;;;N;;;;;
+FD70;ARABIC LIGATURE DAD WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0636 062E 0645;;;;N;;;;;
+FD71;ARABIC LIGATURE TAH WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0637 0645 062D;;;;N;;;;;
+FD72;ARABIC LIGATURE TAH WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0637 0645 062D;;;;N;;;;;
+FD73;ARABIC LIGATURE TAH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0637 0645 0645;;;;N;;;;;
+FD74;ARABIC LIGATURE TAH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0637 0645 064A;;;;N;;;;;
+FD75;ARABIC LIGATURE AIN WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 062C 0645;;;;N;;;;;
+FD76;ARABIC LIGATURE AIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0639 0645 0645;;;;N;;;;;
+FD77;ARABIC LIGATURE AIN WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 0645 0645;;;;N;;;;;
+FD78;ARABIC LIGATURE AIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0639 0645 0649;;;;N;;;;;
+FD79;ARABIC LIGATURE GHAIN WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 063A 0645 0645;;;;N;;;;;
+FD7A;ARABIC LIGATURE GHAIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 063A 0645 064A;;;;N;;;;;
+FD7B;ARABIC LIGATURE GHAIN WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 063A 0645 0649;;;;N;;;;;
+FD7C;ARABIC LIGATURE FEH WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0641 062E 0645;;;;N;;;;;
+FD7D;ARABIC LIGATURE FEH WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0641 062E 0645;;;;N;;;;;
+FD7E;ARABIC LIGATURE QAF WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0642 0645 062D;;;;N;;;;;
+FD7F;ARABIC LIGATURE QAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0642 0645 0645;;;;N;;;;;
+FD80;ARABIC LIGATURE LAM WITH HAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062D 0645;;;;N;;;;;
+FD81;ARABIC LIGATURE LAM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062D 064A;;;;N;;;;;
+FD82;ARABIC LIGATURE LAM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0644 062D 0649;;;;N;;;;;
+FD83;ARABIC LIGATURE LAM WITH JEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 062C;;;;N;;;;;
+FD84;ARABIC LIGATURE LAM WITH JEEM WITH JEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 062C;;;;N;;;;;
+FD85;ARABIC LIGATURE LAM WITH KHAH WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062E 0645;;;;N;;;;;
+FD86;ARABIC LIGATURE LAM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062E 0645;;;;N;;;;;
+FD87;ARABIC LIGATURE LAM WITH MEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0644 0645 062D;;;;N;;;;;
+FD88;ARABIC LIGATURE LAM WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0644 0645 062D;;;;N;;;;;
+FD89;ARABIC LIGATURE MEEM WITH HAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 062C;;;;N;;;;;
+FD8A;ARABIC LIGATURE MEEM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062D 0645;;;;N;;;;;
+FD8B;ARABIC LIGATURE MEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062D 064A;;;;N;;;;;
+FD8C;ARABIC LIGATURE MEEM WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062D;;;;N;;;;;
+FD8D;ARABIC LIGATURE MEEM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062C 0645;;;;N;;;;;
+FD8E;ARABIC LIGATURE MEEM WITH KHAH WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 062C;;;;N;;;;;
+FD8F;ARABIC LIGATURE MEEM WITH KHAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0645 062E 0645;;;;N;;;;;
+FD92;ARABIC LIGATURE MEEM WITH JEEM WITH KHAH INITIAL FORM;Lo;0;AL;<initial> 0645 062C 062E;;;;N;;;;;
+FD93;ARABIC LIGATURE HEH WITH MEEM WITH JEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 062C;;;;N;;;;;
+FD94;ARABIC LIGATURE HEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0647 0645 0645;;;;N;;;;;
+FD95;ARABIC LIGATURE NOON WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062D 0645;;;;N;;;;;
+FD96;ARABIC LIGATURE NOON WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062D 0649;;;;N;;;;;
+FD97;ARABIC LIGATURE NOON WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0646 062C 0645;;;;N;;;;;
+FD98;ARABIC LIGATURE NOON WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0646 062C 0645;;;;N;;;;;
+FD99;ARABIC LIGATURE NOON WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 062C 0649;;;;N;;;;;
+FD9A;ARABIC LIGATURE NOON WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 0645 064A;;;;N;;;;;
+FD9B;ARABIC LIGATURE NOON WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0646 0645 0649;;;;N;;;;;
+FD9C;ARABIC LIGATURE YEH WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 064A 0645 0645;;;;N;;;;;
+FD9D;ARABIC LIGATURE YEH WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 064A 0645 0645;;;;N;;;;;
+FD9E;ARABIC LIGATURE BEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062E 064A;;;;N;;;;;
+FD9F;ARABIC LIGATURE TEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062C 064A;;;;N;;;;;
+FDA0;ARABIC LIGATURE TEH WITH JEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062C 0649;;;;N;;;;;
+FDA1;ARABIC LIGATURE TEH WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 062E 064A;;;;N;;;;;
+FDA2;ARABIC LIGATURE TEH WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 062E 0649;;;;N;;;;;
+FDA3;ARABIC LIGATURE TEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062A 0645 064A;;;;N;;;;;
+FDA4;ARABIC LIGATURE TEH WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062A 0645 0649;;;;N;;;;;
+FDA5;ARABIC LIGATURE JEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 0645 064A;;;;N;;;;;
+FDA6;ARABIC LIGATURE JEEM WITH HAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 062D 0649;;;;N;;;;;
+FDA7;ARABIC LIGATURE JEEM WITH MEEM WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 062C 0645 0649;;;;N;;;;;
+FDA8;ARABIC LIGATURE SEEN WITH KHAH WITH ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0633 062E 0649;;;;N;;;;;
+FDA9;ARABIC LIGATURE SAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0635 062D 064A;;;;N;;;;;
+FDAA;ARABIC LIGATURE SHEEN WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0634 062D 064A;;;;N;;;;;
+FDAB;ARABIC LIGATURE DAD WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0636 062D 064A;;;;N;;;;;
+FDAC;ARABIC LIGATURE LAM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 062C 064A;;;;N;;;;;
+FDAD;ARABIC LIGATURE LAM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0644 0645 064A;;;;N;;;;;
+FDAE;ARABIC LIGATURE YEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062D 064A;;;;N;;;;;
+FDAF;ARABIC LIGATURE YEH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 062C 064A;;;;N;;;;;
+FDB0;ARABIC LIGATURE YEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 064A 0645 064A;;;;N;;;;;
+FDB1;ARABIC LIGATURE MEEM WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 0645 064A;;;;N;;;;;
+FDB2;ARABIC LIGATURE QAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0642 0645 064A;;;;N;;;;;
+FDB3;ARABIC LIGATURE NOON WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062D 064A;;;;N;;;;;
+FDB4;ARABIC LIGATURE QAF WITH MEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0642 0645 062D;;;;N;;;;;
+FDB5;ARABIC LIGATURE LAM WITH HAH WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062D 0645;;;;N;;;;;
+FDB6;ARABIC LIGATURE AIN WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0639 0645 064A;;;;N;;;;;
+FDB7;ARABIC LIGATURE KAF WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0643 0645 064A;;;;N;;;;;
+FDB8;ARABIC LIGATURE NOON WITH JEEM WITH HAH INITIAL FORM;Lo;0;AL;<initial> 0646 062C 062D;;;;N;;;;;
+FDB9;ARABIC LIGATURE MEEM WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062E 064A;;;;N;;;;;
+FDBA;ARABIC LIGATURE LAM WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0644 062C 0645;;;;N;;;;;
+FDBB;ARABIC LIGATURE KAF WITH MEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0643 0645 0645;;;;N;;;;;
+FDBC;ARABIC LIGATURE LAM WITH JEEM WITH MEEM FINAL FORM;Lo;0;AL;<final> 0644 062C 0645;;;;N;;;;;
+FDBD;ARABIC LIGATURE NOON WITH JEEM WITH HAH FINAL FORM;Lo;0;AL;<final> 0646 062C 062D;;;;N;;;;;
+FDBE;ARABIC LIGATURE JEEM WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 062C 062D 064A;;;;N;;;;;
+FDBF;ARABIC LIGATURE HAH WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 062D 062C 064A;;;;N;;;;;
+FDC0;ARABIC LIGATURE MEEM WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0645 062C 064A;;;;N;;;;;
+FDC1;ARABIC LIGATURE FEH WITH MEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0641 0645 064A;;;;N;;;;;
+FDC2;ARABIC LIGATURE BEH WITH HAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0628 062D 064A;;;;N;;;;;
+FDC3;ARABIC LIGATURE KAF WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0643 0645 0645;;;;N;;;;;
+FDC4;ARABIC LIGATURE AIN WITH JEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0639 062C 0645;;;;N;;;;;
+FDC5;ARABIC LIGATURE SAD WITH MEEM WITH MEEM INITIAL FORM;Lo;0;AL;<initial> 0635 0645 0645;;;;N;;;;;
+FDC6;ARABIC LIGATURE SEEN WITH KHAH WITH YEH FINAL FORM;Lo;0;AL;<final> 0633 062E 064A;;;;N;;;;;
+FDC7;ARABIC LIGATURE NOON WITH JEEM WITH YEH FINAL FORM;Lo;0;AL;<final> 0646 062C 064A;;;;N;;;;;
+FDF0;ARABIC LIGATURE SALLA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 06D2;;;;N;;;;;
+FDF1;ARABIC LIGATURE QALA USED AS KORANIC STOP SIGN ISOLATED FORM;Lo;0;AL;<isolated> 0642 0644 06D2;;;;N;;;;;
+FDF2;ARABIC LIGATURE ALLAH ISOLATED FORM;Lo;0;AL;<isolated> 0627 0644 0644 0647;;;;N;;;;;
+FDF3;ARABIC LIGATURE AKBAR ISOLATED FORM;Lo;0;AL;<isolated> 0627 0643 0628 0631;;;;N;;;;;
+FDF4;ARABIC LIGATURE MOHAMMAD ISOLATED FORM;Lo;0;AL;<isolated> 0645 062D 0645 062F;;;;N;;;;;
+FDF5;ARABIC LIGATURE SALAM ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0639 0645;;;;N;;;;;
+FDF6;ARABIC LIGATURE RASOUL ISOLATED FORM;Lo;0;AL;<isolated> 0631 0633 0648 0644;;;;N;;;;;
+FDF7;ARABIC LIGATURE ALAYHE ISOLATED FORM;Lo;0;AL;<isolated> 0639 0644 064A 0647;;;;N;;;;;
+FDF8;ARABIC LIGATURE WASALLAM ISOLATED FORM;Lo;0;AL;<isolated> 0648 0633 0644 0645;;;;N;;;;;
+FDF9;ARABIC LIGATURE SALLA ISOLATED FORM;Lo;0;AL;<isolated> 0635 0644 0649;;;;N;;;;;
+FDFA;ARABIC LIGATURE SALLALLAHOU ALAYHE WASALLAM;Lo;0;AL;<isolated> 0635 0644 0649 0020 0627 0644 0644 0647 0020 0639 0644 064A 0647 0020 0648 0633 0644 0645;;;;N;ARABIC LETTER SALLALLAHOU ALAYHE WASALLAM;;;;
+FDFB;ARABIC LIGATURE JALLAJALALOUHOU;Lo;0;AL;<isolated> 062C 0644 0020 062C 0644 0627 0644 0647;;;;N;ARABIC LETTER JALLAJALALOUHOU;;;;
+FE20;COMBINING LIGATURE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE21;COMBINING LIGATURE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE22;COMBINING DOUBLE TILDE LEFT HALF;Mn;230;NSM;;;;;N;;;;;
+FE23;COMBINING DOUBLE TILDE RIGHT HALF;Mn;230;NSM;;;;;N;;;;;
+FE30;PRESENTATION FORM FOR VERTICAL TWO DOT LEADER;Po;0;ON;<vertical> 2025;;;;N;GLYPH FOR VERTICAL TWO DOT LEADER;;;;
+FE31;PRESENTATION FORM FOR VERTICAL EM DASH;Pd;0;ON;<vertical> 2014;;;;N;GLYPH FOR VERTICAL EM DASH;;;;
+FE32;PRESENTATION FORM FOR VERTICAL EN DASH;Pd;0;ON;<vertical> 2013;;;;N;GLYPH FOR VERTICAL EN DASH;;;;
+FE33;PRESENTATION FORM FOR VERTICAL LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING UNDERSCORE;;;;
+FE34;PRESENTATION FORM FOR VERTICAL WAVY LOW LINE;Pc;0;ON;<vertical> 005F;;;;N;GLYPH FOR VERTICAL SPACING WAVY UNDERSCORE;;;;
+FE35;PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS;Ps;0;ON;<vertical> 0028;;;;N;GLYPH FOR VERTICAL OPENING PARENTHESIS;;;;
+FE36;PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS;Pe;0;ON;<vertical> 0029;;;;N;GLYPH FOR VERTICAL CLOSING PARENTHESIS;;;;
+FE37;PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET;Ps;0;ON;<vertical> 007B;;;;N;GLYPH FOR VERTICAL OPENING CURLY BRACKET;;;;
+FE38;PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET;Pe;0;ON;<vertical> 007D;;;;N;GLYPH FOR VERTICAL CLOSING CURLY BRACKET;;;;
+FE39;PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<vertical> 3014;;;;N;GLYPH FOR VERTICAL OPENING TORTOISE SHELL BRACKET;;;;
+FE3A;PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<vertical> 3015;;;;N;GLYPH FOR VERTICAL CLOSING TORTOISE SHELL BRACKET;;;;
+FE3B;PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET;Ps;0;ON;<vertical> 3010;;;;N;GLYPH FOR VERTICAL OPENING BLACK LENTICULAR BRACKET;;;;
+FE3C;PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET;Pe;0;ON;<vertical> 3011;;;;N;GLYPH FOR VERTICAL CLOSING BLACK LENTICULAR BRACKET;;;;
+FE3D;PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET;Ps;0;ON;<vertical> 300A;;;;N;GLYPH FOR VERTICAL OPENING DOUBLE ANGLE BRACKET;;;;
+FE3E;PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET;Pe;0;ON;<vertical> 300B;;;;N;GLYPH FOR VERTICAL CLOSING DOUBLE ANGLE BRACKET;;;;
+FE3F;PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET;Ps;0;ON;<vertical> 3008;;;;N;GLYPH FOR VERTICAL OPENING ANGLE BRACKET;;;;
+FE40;PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET;Pe;0;ON;<vertical> 3009;;;;N;GLYPH FOR VERTICAL CLOSING ANGLE BRACKET;;;;
+FE41;PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET;Ps;0;ON;<vertical> 300C;;;;N;GLYPH FOR VERTICAL OPENING CORNER BRACKET;;;;
+FE42;PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET;Pe;0;ON;<vertical> 300D;;;;N;GLYPH FOR VERTICAL CLOSING CORNER BRACKET;;;;
+FE43;PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET;Ps;0;ON;<vertical> 300E;;;;N;GLYPH FOR VERTICAL OPENING WHITE CORNER BRACKET;;;;
+FE44;PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET;Pe;0;ON;<vertical> 300F;;;;N;GLYPH FOR VERTICAL CLOSING WHITE CORNER BRACKET;;;;
+FE49;DASHED OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DASHED OVERSCORE;;;;
+FE4A;CENTRELINE OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING CENTERLINE OVERSCORE;;;;
+FE4B;WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING WAVY OVERSCORE;;;;
+FE4C;DOUBLE WAVY OVERLINE;Po;0;ON;<compat> 203E;;;;N;SPACING DOUBLE WAVY OVERSCORE;;;;
+FE4D;DASHED LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING DASHED UNDERSCORE;;;;
+FE4E;CENTRELINE LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING CENTERLINE UNDERSCORE;;;;
+FE4F;WAVY LOW LINE;Pc;0;ON;<compat> 005F;;;;N;SPACING WAVY UNDERSCORE;;;;
+FE50;SMALL COMMA;Po;0;CS;<small> 002C;;;;N;;;;;
+FE51;SMALL IDEOGRAPHIC COMMA;Po;0;ON;<small> 3001;;;;N;;;;;
+FE52;SMALL FULL STOP;Po;0;CS;<small> 002E;;;;N;SMALL PERIOD;;;;
+FE54;SMALL SEMICOLON;Po;0;ON;<small> 003B;;;;N;;;;;
+FE55;SMALL COLON;Po;0;CS;<small> 003A;;;;N;;;;;
+FE56;SMALL QUESTION MARK;Po;0;ON;<small> 003F;;;;N;;;;;
+FE57;SMALL EXCLAMATION MARK;Po;0;ON;<small> 0021;;;;N;;;;;
+FE58;SMALL EM DASH;Pd;0;ON;<small> 2014;;;;N;;;;;
+FE59;SMALL LEFT PARENTHESIS;Ps;0;ON;<small> 0028;;;;N;SMALL OPENING PARENTHESIS;;;;
+FE5A;SMALL RIGHT PARENTHESIS;Pe;0;ON;<small> 0029;;;;N;SMALL CLOSING PARENTHESIS;;;;
+FE5B;SMALL LEFT CURLY BRACKET;Ps;0;ON;<small> 007B;;;;N;SMALL OPENING CURLY BRACKET;;;;
+FE5C;SMALL RIGHT CURLY BRACKET;Pe;0;ON;<small> 007D;;;;N;SMALL CLOSING CURLY BRACKET;;;;
+FE5D;SMALL LEFT TORTOISE SHELL BRACKET;Ps;0;ON;<small> 3014;;;;N;SMALL OPENING TORTOISE SHELL BRACKET;;;;
+FE5E;SMALL RIGHT TORTOISE SHELL BRACKET;Pe;0;ON;<small> 3015;;;;N;SMALL CLOSING TORTOISE SHELL BRACKET;;;;
+FE5F;SMALL NUMBER SIGN;Po;0;ET;<small> 0023;;;;N;;;;;
+FE60;SMALL AMPERSAND;Po;0;ON;<small> 0026;;;;N;;;;;
+FE61;SMALL ASTERISK;Po;0;ON;<small> 002A;;;;N;;;;;
+FE62;SMALL PLUS SIGN;Sm;0;ET;<small> 002B;;;;N;;;;;
+FE63;SMALL HYPHEN-MINUS;Pd;0;ET;<small> 002D;;;;N;;;;;
+FE64;SMALL LESS-THAN SIGN;Sm;0;ON;<small> 003C;;;;N;;;;;
+FE65;SMALL GREATER-THAN SIGN;Sm;0;ON;<small> 003E;;;;N;;;;;
+FE66;SMALL EQUALS SIGN;Sm;0;ON;<small> 003D;;;;N;;;;;
+FE68;SMALL REVERSE SOLIDUS;Po;0;ON;<small> 005C;;;;N;SMALL BACKSLASH;;;;
+FE69;SMALL DOLLAR SIGN;Sc;0;ET;<small> 0024;;;;N;;;;;
+FE6A;SMALL PERCENT SIGN;Po;0;ET;<small> 0025;;;;N;;;;;
+FE6B;SMALL COMMERCIAL AT;Po;0;ON;<small> 0040;;;;N;;;;;
+FE70;ARABIC FATHATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064B;;;;N;ARABIC SPACING FATHATAN;;;;
+FE71;ARABIC TATWEEL WITH FATHATAN ABOVE;Lo;0;AL;<medial> 0640 064B;;;;N;ARABIC FATHATAN ON TATWEEL;;;;
+FE72;ARABIC DAMMATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064C;;;;N;ARABIC SPACING DAMMATAN;;;;
+FE74;ARABIC KASRATAN ISOLATED FORM;Lo;0;AL;<isolated> 0020 064D;;;;N;ARABIC SPACING KASRATAN;;;;
+FE76;ARABIC FATHA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064E;;;;N;ARABIC SPACING FATHAH;;;;
+FE77;ARABIC FATHA MEDIAL FORM;Lo;0;AL;<medial> 0640 064E;;;;N;ARABIC FATHAH ON TATWEEL;;;;
+FE78;ARABIC DAMMA ISOLATED FORM;Lo;0;AL;<isolated> 0020 064F;;;;N;ARABIC SPACING DAMMAH;;;;
+FE79;ARABIC DAMMA MEDIAL FORM;Lo;0;AL;<medial> 0640 064F;;;;N;ARABIC DAMMAH ON TATWEEL;;;;
+FE7A;ARABIC KASRA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0650;;;;N;ARABIC SPACING KASRAH;;;;
+FE7B;ARABIC KASRA MEDIAL FORM;Lo;0;AL;<medial> 0640 0650;;;;N;ARABIC KASRAH ON TATWEEL;;;;
+FE7C;ARABIC SHADDA ISOLATED FORM;Lo;0;AL;<isolated> 0020 0651;;;;N;ARABIC SPACING SHADDAH;;;;
+FE7D;ARABIC SHADDA MEDIAL FORM;Lo;0;AL;<medial> 0640 0651;;;;N;ARABIC SHADDAH ON TATWEEL;;;;
+FE7E;ARABIC SUKUN ISOLATED FORM;Lo;0;AL;<isolated> 0020 0652;;;;N;ARABIC SPACING SUKUN;;;;
+FE7F;ARABIC SUKUN MEDIAL FORM;Lo;0;AL;<medial> 0640 0652;;;;N;ARABIC SUKUN ON TATWEEL;;;;
+FE80;ARABIC LETTER HAMZA ISOLATED FORM;Lo;0;AL;<isolated> 0621;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH;;;;
+FE81;ARABIC LETTER ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON ALEF;;;;
+FE82;ARABIC LETTER ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON ALEF;;;;
+FE83;ARABIC LETTER ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON ALEF;;;;
+FE84;ARABIC LETTER ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON ALEF;;;;
+FE85;ARABIC LETTER WAW WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0624;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON WAW;;;;
+FE86;ARABIC LETTER WAW WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0624;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON WAW;;;;
+FE87;ARABIC LETTER ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER ALEF;;;;
+FE88;ARABIC LETTER ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER ALEF;;;;
+FE89;ARABIC LETTER YEH WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0626;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON YA;;;;
+FE8A;ARABIC LETTER YEH WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0626;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON YA;;;;
+FE8B;ARABIC LETTER YEH WITH HAMZA ABOVE INITIAL FORM;Lo;0;AL;<initial> 0626;;;;N;GLYPH FOR INITIAL ARABIC HAMZAH ON YA;;;;
+FE8C;ARABIC LETTER YEH WITH HAMZA ABOVE MEDIAL FORM;Lo;0;AL;<medial> 0626;;;;N;GLYPH FOR MEDIAL ARABIC HAMZAH ON YA;;;;
+FE8D;ARABIC LETTER ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0627;;;;N;GLYPH FOR ISOLATE ARABIC ALEF;;;;
+FE8E;ARABIC LETTER ALEF FINAL FORM;Lo;0;AL;<final> 0627;;;;N;GLYPH FOR FINAL ARABIC ALEF;;;;
+FE8F;ARABIC LETTER BEH ISOLATED FORM;Lo;0;AL;<isolated> 0628;;;;N;GLYPH FOR ISOLATE ARABIC BAA;;;;
+FE90;ARABIC LETTER BEH FINAL FORM;Lo;0;AL;<final> 0628;;;;N;GLYPH FOR FINAL ARABIC BAA;;;;
+FE91;ARABIC LETTER BEH INITIAL FORM;Lo;0;AL;<initial> 0628;;;;N;GLYPH FOR INITIAL ARABIC BAA;;;;
+FE92;ARABIC LETTER BEH MEDIAL FORM;Lo;0;AL;<medial> 0628;;;;N;GLYPH FOR MEDIAL ARABIC BAA;;;;
+FE93;ARABIC LETTER TEH MARBUTA ISOLATED FORM;Lo;0;AL;<isolated> 0629;;;;N;GLYPH FOR ISOLATE ARABIC TAA MARBUTAH;;;;
+FE94;ARABIC LETTER TEH MARBUTA FINAL FORM;Lo;0;AL;<final> 0629;;;;N;GLYPH FOR FINAL ARABIC TAA MARBUTAH;;;;
+FE95;ARABIC LETTER TEH ISOLATED FORM;Lo;0;AL;<isolated> 062A;;;;N;GLYPH FOR ISOLATE ARABIC TAA;;;;
+FE96;ARABIC LETTER TEH FINAL FORM;Lo;0;AL;<final> 062A;;;;N;GLYPH FOR FINAL ARABIC TAA;;;;
+FE97;ARABIC LETTER TEH INITIAL FORM;Lo;0;AL;<initial> 062A;;;;N;GLYPH FOR INITIAL ARABIC TAA;;;;
+FE98;ARABIC LETTER TEH MEDIAL FORM;Lo;0;AL;<medial> 062A;;;;N;GLYPH FOR MEDIAL ARABIC TAA;;;;
+FE99;ARABIC LETTER THEH ISOLATED FORM;Lo;0;AL;<isolated> 062B;;;;N;GLYPH FOR ISOLATE ARABIC THAA;;;;
+FE9A;ARABIC LETTER THEH FINAL FORM;Lo;0;AL;<final> 062B;;;;N;GLYPH FOR FINAL ARABIC THAA;;;;
+FE9B;ARABIC LETTER THEH INITIAL FORM;Lo;0;AL;<initial> 062B;;;;N;GLYPH FOR INITIAL ARABIC THAA;;;;
+FE9C;ARABIC LETTER THEH MEDIAL FORM;Lo;0;AL;<medial> 062B;;;;N;GLYPH FOR MEDIAL ARABIC THAA;;;;
+FE9D;ARABIC LETTER JEEM ISOLATED FORM;Lo;0;AL;<isolated> 062C;;;;N;GLYPH FOR ISOLATE ARABIC JEEM;;;;
+FE9E;ARABIC LETTER JEEM FINAL FORM;Lo;0;AL;<final> 062C;;;;N;GLYPH FOR FINAL ARABIC JEEM;;;;
+FE9F;ARABIC LETTER JEEM INITIAL FORM;Lo;0;AL;<initial> 062C;;;;N;GLYPH FOR INITIAL ARABIC JEEM;;;;
+FEA0;ARABIC LETTER JEEM MEDIAL FORM;Lo;0;AL;<medial> 062C;;;;N;GLYPH FOR MEDIAL ARABIC JEEM;;;;
+FEA1;ARABIC LETTER HAH ISOLATED FORM;Lo;0;AL;<isolated> 062D;;;;N;GLYPH FOR ISOLATE ARABIC HAA;;;;
+FEA2;ARABIC LETTER HAH FINAL FORM;Lo;0;AL;<final> 062D;;;;N;GLYPH FOR FINAL ARABIC HAA;;;;
+FEA3;ARABIC LETTER HAH INITIAL FORM;Lo;0;AL;<initial> 062D;;;;N;GLYPH FOR INITIAL ARABIC HAA;;;;
+FEA4;ARABIC LETTER HAH MEDIAL FORM;Lo;0;AL;<medial> 062D;;;;N;GLYPH FOR MEDIAL ARABIC HAA;;;;
+FEA5;ARABIC LETTER KHAH ISOLATED FORM;Lo;0;AL;<isolated> 062E;;;;N;GLYPH FOR ISOLATE ARABIC KHAA;;;;
+FEA6;ARABIC LETTER KHAH FINAL FORM;Lo;0;AL;<final> 062E;;;;N;GLYPH FOR FINAL ARABIC KHAA;;;;
+FEA7;ARABIC LETTER KHAH INITIAL FORM;Lo;0;AL;<initial> 062E;;;;N;GLYPH FOR INITIAL ARABIC KHAA;;;;
+FEA8;ARABIC LETTER KHAH MEDIAL FORM;Lo;0;AL;<medial> 062E;;;;N;GLYPH FOR MEDIAL ARABIC KHAA;;;;
+FEA9;ARABIC LETTER DAL ISOLATED FORM;Lo;0;AL;<isolated> 062F;;;;N;GLYPH FOR ISOLATE ARABIC DAL;;;;
+FEAA;ARABIC LETTER DAL FINAL FORM;Lo;0;AL;<final> 062F;;;;N;GLYPH FOR FINAL ARABIC DAL;;;;
+FEAB;ARABIC LETTER THAL ISOLATED FORM;Lo;0;AL;<isolated> 0630;;;;N;GLYPH FOR ISOLATE ARABIC THAL;;;;
+FEAC;ARABIC LETTER THAL FINAL FORM;Lo;0;AL;<final> 0630;;;;N;GLYPH FOR FINAL ARABIC THAL;;;;
+FEAD;ARABIC LETTER REH ISOLATED FORM;Lo;0;AL;<isolated> 0631;;;;N;GLYPH FOR ISOLATE ARABIC RA;;;;
+FEAE;ARABIC LETTER REH FINAL FORM;Lo;0;AL;<final> 0631;;;;N;GLYPH FOR FINAL ARABIC RA;;;;
+FEAF;ARABIC LETTER ZAIN ISOLATED FORM;Lo;0;AL;<isolated> 0632;;;;N;GLYPH FOR ISOLATE ARABIC ZAIN;;;;
+FEB0;ARABIC LETTER ZAIN FINAL FORM;Lo;0;AL;<final> 0632;;;;N;GLYPH FOR FINAL ARABIC ZAIN;;;;
+FEB1;ARABIC LETTER SEEN ISOLATED FORM;Lo;0;AL;<isolated> 0633;;;;N;GLYPH FOR ISOLATE ARABIC SEEN;;;;
+FEB2;ARABIC LETTER SEEN FINAL FORM;Lo;0;AL;<final> 0633;;;;N;GLYPH FOR FINAL ARABIC SEEN;;;;
+FEB3;ARABIC LETTER SEEN INITIAL FORM;Lo;0;AL;<initial> 0633;;;;N;GLYPH FOR INITIAL ARABIC SEEN;;;;
+FEB4;ARABIC LETTER SEEN MEDIAL FORM;Lo;0;AL;<medial> 0633;;;;N;GLYPH FOR MEDIAL ARABIC SEEN;;;;
+FEB5;ARABIC LETTER SHEEN ISOLATED FORM;Lo;0;AL;<isolated> 0634;;;;N;GLYPH FOR ISOLATE ARABIC SHEEN;;;;
+FEB6;ARABIC LETTER SHEEN FINAL FORM;Lo;0;AL;<final> 0634;;;;N;GLYPH FOR FINAL ARABIC SHEEN;;;;
+FEB7;ARABIC LETTER SHEEN INITIAL FORM;Lo;0;AL;<initial> 0634;;;;N;GLYPH FOR INITIAL ARABIC SHEEN;;;;
+FEB8;ARABIC LETTER SHEEN MEDIAL FORM;Lo;0;AL;<medial> 0634;;;;N;GLYPH FOR MEDIAL ARABIC SHEEN;;;;
+FEB9;ARABIC LETTER SAD ISOLATED FORM;Lo;0;AL;<isolated> 0635;;;;N;GLYPH FOR ISOLATE ARABIC SAD;;;;
+FEBA;ARABIC LETTER SAD FINAL FORM;Lo;0;AL;<final> 0635;;;;N;GLYPH FOR FINAL ARABIC SAD;;;;
+FEBB;ARABIC LETTER SAD INITIAL FORM;Lo;0;AL;<initial> 0635;;;;N;GLYPH FOR INITIAL ARABIC SAD;;;;
+FEBC;ARABIC LETTER SAD MEDIAL FORM;Lo;0;AL;<medial> 0635;;;;N;GLYPH FOR MEDIAL ARABIC SAD;;;;
+FEBD;ARABIC LETTER DAD ISOLATED FORM;Lo;0;AL;<isolated> 0636;;;;N;GLYPH FOR ISOLATE ARABIC DAD;;;;
+FEBE;ARABIC LETTER DAD FINAL FORM;Lo;0;AL;<final> 0636;;;;N;GLYPH FOR FINAL ARABIC DAD;;;;
+FEBF;ARABIC LETTER DAD INITIAL FORM;Lo;0;AL;<initial> 0636;;;;N;GLYPH FOR INITIAL ARABIC DAD;;;;
+FEC0;ARABIC LETTER DAD MEDIAL FORM;Lo;0;AL;<medial> 0636;;;;N;GLYPH FOR MEDIAL ARABIC DAD;;;;
+FEC1;ARABIC LETTER TAH ISOLATED FORM;Lo;0;AL;<isolated> 0637;;;;N;GLYPH FOR ISOLATE ARABIC TAH;;;;
+FEC2;ARABIC LETTER TAH FINAL FORM;Lo;0;AL;<final> 0637;;;;N;GLYPH FOR FINAL ARABIC TAH;;;;
+FEC3;ARABIC LETTER TAH INITIAL FORM;Lo;0;AL;<initial> 0637;;;;N;GLYPH FOR INITIAL ARABIC TAH;;;;
+FEC4;ARABIC LETTER TAH MEDIAL FORM;Lo;0;AL;<medial> 0637;;;;N;GLYPH FOR MEDIAL ARABIC TAH;;;;
+FEC5;ARABIC LETTER ZAH ISOLATED FORM;Lo;0;AL;<isolated> 0638;;;;N;GLYPH FOR ISOLATE ARABIC DHAH;;;;
+FEC6;ARABIC LETTER ZAH FINAL FORM;Lo;0;AL;<final> 0638;;;;N;GLYPH FOR FINAL ARABIC DHAH;;;;
+FEC7;ARABIC LETTER ZAH INITIAL FORM;Lo;0;AL;<initial> 0638;;;;N;GLYPH FOR INITIAL ARABIC DHAH;;;;
+FEC8;ARABIC LETTER ZAH MEDIAL FORM;Lo;0;AL;<medial> 0638;;;;N;GLYPH FOR MEDIAL ARABIC DHAH;;;;
+FEC9;ARABIC LETTER AIN ISOLATED FORM;Lo;0;AL;<isolated> 0639;;;;N;GLYPH FOR ISOLATE ARABIC AIN;;;;
+FECA;ARABIC LETTER AIN FINAL FORM;Lo;0;AL;<final> 0639;;;;N;GLYPH FOR FINAL ARABIC AIN;;;;
+FECB;ARABIC LETTER AIN INITIAL FORM;Lo;0;AL;<initial> 0639;;;;N;GLYPH FOR INITIAL ARABIC AIN;;;;
+FECC;ARABIC LETTER AIN MEDIAL FORM;Lo;0;AL;<medial> 0639;;;;N;GLYPH FOR MEDIAL ARABIC AIN;;;;
+FECD;ARABIC LETTER GHAIN ISOLATED FORM;Lo;0;AL;<isolated> 063A;;;;N;GLYPH FOR ISOLATE ARABIC GHAIN;;;;
+FECE;ARABIC LETTER GHAIN FINAL FORM;Lo;0;AL;<final> 063A;;;;N;GLYPH FOR FINAL ARABIC GHAIN;;;;
+FECF;ARABIC LETTER GHAIN INITIAL FORM;Lo;0;AL;<initial> 063A;;;;N;GLYPH FOR INITIAL ARABIC GHAIN;;;;
+FED0;ARABIC LETTER GHAIN MEDIAL FORM;Lo;0;AL;<medial> 063A;;;;N;GLYPH FOR MEDIAL ARABIC GHAIN;;;;
+FED1;ARABIC LETTER FEH ISOLATED FORM;Lo;0;AL;<isolated> 0641;;;;N;GLYPH FOR ISOLATE ARABIC FA;;;;
+FED2;ARABIC LETTER FEH FINAL FORM;Lo;0;AL;<final> 0641;;;;N;GLYPH FOR FINAL ARABIC FA;;;;
+FED3;ARABIC LETTER FEH INITIAL FORM;Lo;0;AL;<initial> 0641;;;;N;GLYPH FOR INITIAL ARABIC FA;;;;
+FED4;ARABIC LETTER FEH MEDIAL FORM;Lo;0;AL;<medial> 0641;;;;N;GLYPH FOR MEDIAL ARABIC FA;;;;
+FED5;ARABIC LETTER QAF ISOLATED FORM;Lo;0;AL;<isolated> 0642;;;;N;GLYPH FOR ISOLATE ARABIC QAF;;;;
+FED6;ARABIC LETTER QAF FINAL FORM;Lo;0;AL;<final> 0642;;;;N;GLYPH FOR FINAL ARABIC QAF;;;;
+FED7;ARABIC LETTER QAF INITIAL FORM;Lo;0;AL;<initial> 0642;;;;N;GLYPH FOR INITIAL ARABIC QAF;;;;
+FED8;ARABIC LETTER QAF MEDIAL FORM;Lo;0;AL;<medial> 0642;;;;N;GLYPH FOR MEDIAL ARABIC QAF;;;;
+FED9;ARABIC LETTER KAF ISOLATED FORM;Lo;0;AL;<isolated> 0643;;;;N;GLYPH FOR ISOLATE ARABIC CAF;;;;
+FEDA;ARABIC LETTER KAF FINAL FORM;Lo;0;AL;<final> 0643;;;;N;GLYPH FOR FINAL ARABIC CAF;;;;
+FEDB;ARABIC LETTER KAF INITIAL FORM;Lo;0;AL;<initial> 0643;;;;N;GLYPH FOR INITIAL ARABIC CAF;;;;
+FEDC;ARABIC LETTER KAF MEDIAL FORM;Lo;0;AL;<medial> 0643;;;;N;GLYPH FOR MEDIAL ARABIC CAF;;;;
+FEDD;ARABIC LETTER LAM ISOLATED FORM;Lo;0;AL;<isolated> 0644;;;;N;GLYPH FOR ISOLATE ARABIC LAM;;;;
+FEDE;ARABIC LETTER LAM FINAL FORM;Lo;0;AL;<final> 0644;;;;N;GLYPH FOR FINAL ARABIC LAM;;;;
+FEDF;ARABIC LETTER LAM INITIAL FORM;Lo;0;AL;<initial> 0644;;;;N;GLYPH FOR INITIAL ARABIC LAM;;;;
+FEE0;ARABIC LETTER LAM MEDIAL FORM;Lo;0;AL;<medial> 0644;;;;N;GLYPH FOR MEDIAL ARABIC LAM;;;;
+FEE1;ARABIC LETTER MEEM ISOLATED FORM;Lo;0;AL;<isolated> 0645;;;;N;GLYPH FOR ISOLATE ARABIC MEEM;;;;
+FEE2;ARABIC LETTER MEEM FINAL FORM;Lo;0;AL;<final> 0645;;;;N;GLYPH FOR FINAL ARABIC MEEM;;;;
+FEE3;ARABIC LETTER MEEM INITIAL FORM;Lo;0;AL;<initial> 0645;;;;N;GLYPH FOR INITIAL ARABIC MEEM;;;;
+FEE4;ARABIC LETTER MEEM MEDIAL FORM;Lo;0;AL;<medial> 0645;;;;N;GLYPH FOR MEDIAL ARABIC MEEM;;;;
+FEE5;ARABIC LETTER NOON ISOLATED FORM;Lo;0;AL;<isolated> 0646;;;;N;GLYPH FOR ISOLATE ARABIC NOON;;;;
+FEE6;ARABIC LETTER NOON FINAL FORM;Lo;0;AL;<final> 0646;;;;N;GLYPH FOR FINAL ARABIC NOON;;;;
+FEE7;ARABIC LETTER NOON INITIAL FORM;Lo;0;AL;<initial> 0646;;;;N;GLYPH FOR INITIAL ARABIC NOON;;;;
+FEE8;ARABIC LETTER NOON MEDIAL FORM;Lo;0;AL;<medial> 0646;;;;N;GLYPH FOR MEDIAL ARABIC NOON;;;;
+FEE9;ARABIC LETTER HEH ISOLATED FORM;Lo;0;AL;<isolated> 0647;;;;N;GLYPH FOR ISOLATE ARABIC HA;;;;
+FEEA;ARABIC LETTER HEH FINAL FORM;Lo;0;AL;<final> 0647;;;;N;GLYPH FOR FINAL ARABIC HA;;;;
+FEEB;ARABIC LETTER HEH INITIAL FORM;Lo;0;AL;<initial> 0647;;;;N;GLYPH FOR INITIAL ARABIC HA;;;;
+FEEC;ARABIC LETTER HEH MEDIAL FORM;Lo;0;AL;<medial> 0647;;;;N;GLYPH FOR MEDIAL ARABIC HA;;;;
+FEED;ARABIC LETTER WAW ISOLATED FORM;Lo;0;AL;<isolated> 0648;;;;N;GLYPH FOR ISOLATE ARABIC WAW;;;;
+FEEE;ARABIC LETTER WAW FINAL FORM;Lo;0;AL;<final> 0648;;;;N;GLYPH FOR FINAL ARABIC WAW;;;;
+FEEF;ARABIC LETTER ALEF MAKSURA ISOLATED FORM;Lo;0;AL;<isolated> 0649;;;;N;GLYPH FOR ISOLATE ARABIC ALEF MAQSURAH;;;;
+FEF0;ARABIC LETTER ALEF MAKSURA FINAL FORM;Lo;0;AL;<final> 0649;;;;N;GLYPH FOR FINAL ARABIC ALEF MAQSURAH;;;;
+FEF1;ARABIC LETTER YEH ISOLATED FORM;Lo;0;AL;<isolated> 064A;;;;N;GLYPH FOR ISOLATE ARABIC YA;;;;
+FEF2;ARABIC LETTER YEH FINAL FORM;Lo;0;AL;<final> 064A;;;;N;GLYPH FOR FINAL ARABIC YA;;;;
+FEF3;ARABIC LETTER YEH INITIAL FORM;Lo;0;AL;<initial> 064A;;;;N;GLYPH FOR INITIAL ARABIC YA;;;;
+FEF4;ARABIC LETTER YEH MEDIAL FORM;Lo;0;AL;<medial> 064A;;;;N;GLYPH FOR MEDIAL ARABIC YA;;;;
+FEF5;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0622;;;;N;GLYPH FOR ISOLATE ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF6;ARABIC LIGATURE LAM WITH ALEF WITH MADDA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0622;;;;N;GLYPH FOR FINAL ARABIC MADDAH ON LIGATURE LAM ALEF;;;;
+FEF7;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE ISOLATED FORM;Lo;0;AL;<isolated> 0644 0623;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF8;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA ABOVE FINAL FORM;Lo;0;AL;<final> 0644 0623;;;;N;GLYPH FOR FINAL ARABIC HAMZAH ON LIGATURE LAM ALEF;;;;
+FEF9;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW ISOLATED FORM;Lo;0;AL;<isolated> 0644 0625;;;;N;GLYPH FOR ISOLATE ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFA;ARABIC LIGATURE LAM WITH ALEF WITH HAMZA BELOW FINAL FORM;Lo;0;AL;<final> 0644 0625;;;;N;GLYPH FOR FINAL ARABIC HAMZAH UNDER LIGATURE LAM ALEF;;;;
+FEFB;ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM;Lo;0;AL;<isolated> 0644 0627;;;;N;GLYPH FOR ISOLATE ARABIC LIGATURE LAM ALEF;;;;
+FEFC;ARABIC LIGATURE LAM WITH ALEF FINAL FORM;Lo;0;AL;<final> 0644 0627;;;;N;GLYPH FOR FINAL ARABIC LIGATURE LAM ALEF;;;;
+FEFF;ZERO WIDTH NO-BREAK SPACE;Cf;0;BN;;;;;N;BYTE ORDER MARK;;;;
+FF01;FULLWIDTH EXCLAMATION MARK;Po;0;ON;<wide> 0021;;;;N;;;;;
+FF02;FULLWIDTH QUOTATION MARK;Po;0;ON;<wide> 0022;;;;N;;;;;
+FF03;FULLWIDTH NUMBER SIGN;Po;0;ET;<wide> 0023;;;;N;;;;;
+FF04;FULLWIDTH DOLLAR SIGN;Sc;0;ET;<wide> 0024;;;;N;;;;;
+FF05;FULLWIDTH PERCENT SIGN;Po;0;ET;<wide> 0025;;;;N;;;;;
+FF06;FULLWIDTH AMPERSAND;Po;0;ON;<wide> 0026;;;;N;;;;;
+FF07;FULLWIDTH APOSTROPHE;Po;0;ON;<wide> 0027;;;;N;;;;;
+FF08;FULLWIDTH LEFT PARENTHESIS;Ps;0;ON;<wide> 0028;;;;N;FULLWIDTH OPENING PARENTHESIS;;;;
+FF09;FULLWIDTH RIGHT PARENTHESIS;Pe;0;ON;<wide> 0029;;;;N;FULLWIDTH CLOSING PARENTHESIS;;;;
+FF0A;FULLWIDTH ASTERISK;Po;0;ON;<wide> 002A;;;;N;;;;;
+FF0B;FULLWIDTH PLUS SIGN;Sm;0;ET;<wide> 002B;;;;N;;;;;
+FF0C;FULLWIDTH COMMA;Po;0;CS;<wide> 002C;;;;N;;;;;
+FF0D;FULLWIDTH HYPHEN-MINUS;Pd;0;ET;<wide> 002D;;;;N;;;;;
+FF0E;FULLWIDTH FULL STOP;Po;0;CS;<wide> 002E;;;;N;FULLWIDTH PERIOD;;;;
+FF0F;FULLWIDTH SOLIDUS;Po;0;ES;<wide> 002F;;;;N;FULLWIDTH SLASH;;;;
+FF10;FULLWIDTH DIGIT ZERO;Nd;0;EN;<wide> 0030;0;0;0;N;;;;;
+FF11;FULLWIDTH DIGIT ONE;Nd;0;EN;<wide> 0031;1;1;1;N;;;;;
+FF12;FULLWIDTH DIGIT TWO;Nd;0;EN;<wide> 0032;2;2;2;N;;;;;
+FF13;FULLWIDTH DIGIT THREE;Nd;0;EN;<wide> 0033;3;3;3;N;;;;;
+FF14;FULLWIDTH DIGIT FOUR;Nd;0;EN;<wide> 0034;4;4;4;N;;;;;
+FF15;FULLWIDTH DIGIT FIVE;Nd;0;EN;<wide> 0035;5;5;5;N;;;;;
+FF16;FULLWIDTH DIGIT SIX;Nd;0;EN;<wide> 0036;6;6;6;N;;;;;
+FF17;FULLWIDTH DIGIT SEVEN;Nd;0;EN;<wide> 0037;7;7;7;N;;;;;
+FF18;FULLWIDTH DIGIT EIGHT;Nd;0;EN;<wide> 0038;8;8;8;N;;;;;
+FF19;FULLWIDTH DIGIT NINE;Nd;0;EN;<wide> 0039;9;9;9;N;;;;;
+FF1A;FULLWIDTH COLON;Po;0;CS;<wide> 003A;;;;N;;;;;
+FF1B;FULLWIDTH SEMICOLON;Po;0;ON;<wide> 003B;;;;N;;;;;
+FF1C;FULLWIDTH LESS-THAN SIGN;Sm;0;ON;<wide> 003C;;;;N;;;;;
+FF1D;FULLWIDTH EQUALS SIGN;Sm;0;ON;<wide> 003D;;;;N;;;;;
+FF1E;FULLWIDTH GREATER-THAN SIGN;Sm;0;ON;<wide> 003E;;;;N;;;;;
+FF1F;FULLWIDTH QUESTION MARK;Po;0;ON;<wide> 003F;;;;N;;;;;
+FF20;FULLWIDTH COMMERCIAL AT;Po;0;ON;<wide> 0040;;;;N;;;;;
+FF21;FULLWIDTH LATIN CAPITAL LETTER A;Lu;0;L;<wide> 0041;;;;N;;;;FF41;
+FF22;FULLWIDTH LATIN CAPITAL LETTER B;Lu;0;L;<wide> 0042;;;;N;;;;FF42;
+FF23;FULLWIDTH LATIN CAPITAL LETTER C;Lu;0;L;<wide> 0043;;;;N;;;;FF43;
+FF24;FULLWIDTH LATIN CAPITAL LETTER D;Lu;0;L;<wide> 0044;;;;N;;;;FF44;
+FF25;FULLWIDTH LATIN CAPITAL LETTER E;Lu;0;L;<wide> 0045;;;;N;;;;FF45;
+FF26;FULLWIDTH LATIN CAPITAL LETTER F;Lu;0;L;<wide> 0046;;;;N;;;;FF46;
+FF27;FULLWIDTH LATIN CAPITAL LETTER G;Lu;0;L;<wide> 0047;;;;N;;;;FF47;
+FF28;FULLWIDTH LATIN CAPITAL LETTER H;Lu;0;L;<wide> 0048;;;;N;;;;FF48;
+FF29;FULLWIDTH LATIN CAPITAL LETTER I;Lu;0;L;<wide> 0049;;;;N;;;;FF49;
+FF2A;FULLWIDTH LATIN CAPITAL LETTER J;Lu;0;L;<wide> 004A;;;;N;;;;FF4A;
+FF2B;FULLWIDTH LATIN CAPITAL LETTER K;Lu;0;L;<wide> 004B;;;;N;;;;FF4B;
+FF2C;FULLWIDTH LATIN CAPITAL LETTER L;Lu;0;L;<wide> 004C;;;;N;;;;FF4C;
+FF2D;FULLWIDTH LATIN CAPITAL LETTER M;Lu;0;L;<wide> 004D;;;;N;;;;FF4D;
+FF2E;FULLWIDTH LATIN CAPITAL LETTER N;Lu;0;L;<wide> 004E;;;;N;;;;FF4E;
+FF2F;FULLWIDTH LATIN CAPITAL LETTER O;Lu;0;L;<wide> 004F;;;;N;;;;FF4F;
+FF30;FULLWIDTH LATIN CAPITAL LETTER P;Lu;0;L;<wide> 0050;;;;N;;;;FF50;
+FF31;FULLWIDTH LATIN CAPITAL LETTER Q;Lu;0;L;<wide> 0051;;;;N;;;;FF51;
+FF32;FULLWIDTH LATIN CAPITAL LETTER R;Lu;0;L;<wide> 0052;;;;N;;;;FF52;
+FF33;FULLWIDTH LATIN CAPITAL LETTER S;Lu;0;L;<wide> 0053;;;;N;;;;FF53;
+FF34;FULLWIDTH LATIN CAPITAL LETTER T;Lu;0;L;<wide> 0054;;;;N;;;;FF54;
+FF35;FULLWIDTH LATIN CAPITAL LETTER U;Lu;0;L;<wide> 0055;;;;N;;;;FF55;
+FF36;FULLWIDTH LATIN CAPITAL LETTER V;Lu;0;L;<wide> 0056;;;;N;;;;FF56;
+FF37;FULLWIDTH LATIN CAPITAL LETTER W;Lu;0;L;<wide> 0057;;;;N;;;;FF57;
+FF38;FULLWIDTH LATIN CAPITAL LETTER X;Lu;0;L;<wide> 0058;;;;N;;;;FF58;
+FF39;FULLWIDTH LATIN CAPITAL LETTER Y;Lu;0;L;<wide> 0059;;;;N;;;;FF59;
+FF3A;FULLWIDTH LATIN CAPITAL LETTER Z;Lu;0;L;<wide> 005A;;;;N;;;;FF5A;
+FF3B;FULLWIDTH LEFT SQUARE BRACKET;Ps;0;ON;<wide> 005B;;;;N;FULLWIDTH OPENING SQUARE BRACKET;;;;
+FF3C;FULLWIDTH REVERSE SOLIDUS;Po;0;ON;<wide> 005C;;;;N;FULLWIDTH BACKSLASH;;;;
+FF3D;FULLWIDTH RIGHT SQUARE BRACKET;Pe;0;ON;<wide> 005D;;;;N;FULLWIDTH CLOSING SQUARE BRACKET;;;;
+FF3E;FULLWIDTH CIRCUMFLEX ACCENT;Sk;0;ON;<wide> 005E;;;;N;FULLWIDTH SPACING CIRCUMFLEX;;;;
+FF3F;FULLWIDTH LOW LINE;Pc;0;ON;<wide> 005F;;;;N;FULLWIDTH SPACING UNDERSCORE;;;;
+FF40;FULLWIDTH GRAVE ACCENT;Sk;0;ON;<wide> 0060;;;;N;FULLWIDTH SPACING GRAVE;;;;
+FF41;FULLWIDTH LATIN SMALL LETTER A;Ll;0;L;<wide> 0061;;;;N;;;FF21;;FF21
+FF42;FULLWIDTH LATIN SMALL LETTER B;Ll;0;L;<wide> 0062;;;;N;;;FF22;;FF22
+FF43;FULLWIDTH LATIN SMALL LETTER C;Ll;0;L;<wide> 0063;;;;N;;;FF23;;FF23
+FF44;FULLWIDTH LATIN SMALL LETTER D;Ll;0;L;<wide> 0064;;;;N;;;FF24;;FF24
+FF45;FULLWIDTH LATIN SMALL LETTER E;Ll;0;L;<wide> 0065;;;;N;;;FF25;;FF25
+FF46;FULLWIDTH LATIN SMALL LETTER F;Ll;0;L;<wide> 0066;;;;N;;;FF26;;FF26
+FF47;FULLWIDTH LATIN SMALL LETTER G;Ll;0;L;<wide> 0067;;;;N;;;FF27;;FF27
+FF48;FULLWIDTH LATIN SMALL LETTER H;Ll;0;L;<wide> 0068;;;;N;;;FF28;;FF28
+FF49;FULLWIDTH LATIN SMALL LETTER I;Ll;0;L;<wide> 0069;;;;N;;;FF29;;FF29
+FF4A;FULLWIDTH LATIN SMALL LETTER J;Ll;0;L;<wide> 006A;;;;N;;;FF2A;;FF2A
+FF4B;FULLWIDTH LATIN SMALL LETTER K;Ll;0;L;<wide> 006B;;;;N;;;FF2B;;FF2B
+FF4C;FULLWIDTH LATIN SMALL LETTER L;Ll;0;L;<wide> 006C;;;;N;;;FF2C;;FF2C
+FF4D;FULLWIDTH LATIN SMALL LETTER M;Ll;0;L;<wide> 006D;;;;N;;;FF2D;;FF2D
+FF4E;FULLWIDTH LATIN SMALL LETTER N;Ll;0;L;<wide> 006E;;;;N;;;FF2E;;FF2E
+FF4F;FULLWIDTH LATIN SMALL LETTER O;Ll;0;L;<wide> 006F;;;;N;;;FF2F;;FF2F
+FF50;FULLWIDTH LATIN SMALL LETTER P;Ll;0;L;<wide> 0070;;;;N;;;FF30;;FF30
+FF51;FULLWIDTH LATIN SMALL LETTER Q;Ll;0;L;<wide> 0071;;;;N;;;FF31;;FF31
+FF52;FULLWIDTH LATIN SMALL LETTER R;Ll;0;L;<wide> 0072;;;;N;;;FF32;;FF32
+FF53;FULLWIDTH LATIN SMALL LETTER S;Ll;0;L;<wide> 0073;;;;N;;;FF33;;FF33
+FF54;FULLWIDTH LATIN SMALL LETTER T;Ll;0;L;<wide> 0074;;;;N;;;FF34;;FF34
+FF55;FULLWIDTH LATIN SMALL LETTER U;Ll;0;L;<wide> 0075;;;;N;;;FF35;;FF35
+FF56;FULLWIDTH LATIN SMALL LETTER V;Ll;0;L;<wide> 0076;;;;N;;;FF36;;FF36
+FF57;FULLWIDTH LATIN SMALL LETTER W;Ll;0;L;<wide> 0077;;;;N;;;FF37;;FF37
+FF58;FULLWIDTH LATIN SMALL LETTER X;Ll;0;L;<wide> 0078;;;;N;;;FF38;;FF38
+FF59;FULLWIDTH LATIN SMALL LETTER Y;Ll;0;L;<wide> 0079;;;;N;;;FF39;;FF39
+FF5A;FULLWIDTH LATIN SMALL LETTER Z;Ll;0;L;<wide> 007A;;;;N;;;FF3A;;FF3A
+FF5B;FULLWIDTH LEFT CURLY BRACKET;Ps;0;ON;<wide> 007B;;;;N;FULLWIDTH OPENING CURLY BRACKET;;;;
+FF5C;FULLWIDTH VERTICAL LINE;Sm;0;ON;<wide> 007C;;;;N;FULLWIDTH VERTICAL BAR;;;;
+FF5D;FULLWIDTH RIGHT CURLY BRACKET;Pe;0;ON;<wide> 007D;;;;N;FULLWIDTH CLOSING CURLY BRACKET;;;;
+FF5E;FULLWIDTH TILDE;Sm;0;ON;<wide> 007E;;;;N;FULLWIDTH SPACING TILDE;;;;
+FF61;HALFWIDTH IDEOGRAPHIC FULL STOP;Po;0;ON;<narrow> 3002;;;;N;HALFWIDTH IDEOGRAPHIC PERIOD;;;;
+FF62;HALFWIDTH LEFT CORNER BRACKET;Ps;0;ON;<narrow> 300C;;;;N;HALFWIDTH OPENING CORNER BRACKET;;;;
+FF63;HALFWIDTH RIGHT CORNER BRACKET;Pe;0;ON;<narrow> 300D;;;;N;HALFWIDTH CLOSING CORNER BRACKET;;;;
+FF64;HALFWIDTH IDEOGRAPHIC COMMA;Po;0;ON;<narrow> 3001;;;;N;;;;;
+FF65;HALFWIDTH KATAKANA MIDDLE DOT;Pc;0;ON;<narrow> 30FB;;;;N;;;;;
+FF66;HALFWIDTH KATAKANA LETTER WO;Lo;0;L;<narrow> 30F2;;;;N;;;;;
+FF67;HALFWIDTH KATAKANA LETTER SMALL A;Lo;0;L;<narrow> 30A1;;;;N;;;;;
+FF68;HALFWIDTH KATAKANA LETTER SMALL I;Lo;0;L;<narrow> 30A3;;;;N;;;;;
+FF69;HALFWIDTH KATAKANA LETTER SMALL U;Lo;0;L;<narrow> 30A5;;;;N;;;;;
+FF6A;HALFWIDTH KATAKANA LETTER SMALL E;Lo;0;L;<narrow> 30A7;;;;N;;;;;
+FF6B;HALFWIDTH KATAKANA LETTER SMALL O;Lo;0;L;<narrow> 30A9;;;;N;;;;;
+FF6C;HALFWIDTH KATAKANA LETTER SMALL YA;Lo;0;L;<narrow> 30E3;;;;N;;;;;
+FF6D;HALFWIDTH KATAKANA LETTER SMALL YU;Lo;0;L;<narrow> 30E5;;;;N;;;;;
+FF6E;HALFWIDTH KATAKANA LETTER SMALL YO;Lo;0;L;<narrow> 30E7;;;;N;;;;;
+FF6F;HALFWIDTH KATAKANA LETTER SMALL TU;Lo;0;L;<narrow> 30C3;;;;N;;;;;
+FF70;HALFWIDTH KATAKANA-HIRAGANA PROLONGED SOUND MARK;Lm;0;L;<narrow> 30FC;;;;N;;;;;
+FF71;HALFWIDTH KATAKANA LETTER A;Lo;0;L;<narrow> 30A2;;;;N;;;;;
+FF72;HALFWIDTH KATAKANA LETTER I;Lo;0;L;<narrow> 30A4;;;;N;;;;;
+FF73;HALFWIDTH KATAKANA LETTER U;Lo;0;L;<narrow> 30A6;;;;N;;;;;
+FF74;HALFWIDTH KATAKANA LETTER E;Lo;0;L;<narrow> 30A8;;;;N;;;;;
+FF75;HALFWIDTH KATAKANA LETTER O;Lo;0;L;<narrow> 30AA;;;;N;;;;;
+FF76;HALFWIDTH KATAKANA LETTER KA;Lo;0;L;<narrow> 30AB;;;;N;;;;;
+FF77;HALFWIDTH KATAKANA LETTER KI;Lo;0;L;<narrow> 30AD;;;;N;;;;;
+FF78;HALFWIDTH KATAKANA LETTER KU;Lo;0;L;<narrow> 30AF;;;;N;;;;;
+FF79;HALFWIDTH KATAKANA LETTER KE;Lo;0;L;<narrow> 30B1;;;;N;;;;;
+FF7A;HALFWIDTH KATAKANA LETTER KO;Lo;0;L;<narrow> 30B3;;;;N;;;;;
+FF7B;HALFWIDTH KATAKANA LETTER SA;Lo;0;L;<narrow> 30B5;;;;N;;;;;
+FF7C;HALFWIDTH KATAKANA LETTER SI;Lo;0;L;<narrow> 30B7;;;;N;;;;;
+FF7D;HALFWIDTH KATAKANA LETTER SU;Lo;0;L;<narrow> 30B9;;;;N;;;;;
+FF7E;HALFWIDTH KATAKANA LETTER SE;Lo;0;L;<narrow> 30BB;;;;N;;;;;
+FF7F;HALFWIDTH KATAKANA LETTER SO;Lo;0;L;<narrow> 30BD;;;;N;;;;;
+FF80;HALFWIDTH KATAKANA LETTER TA;Lo;0;L;<narrow> 30BF;;;;N;;;;;
+FF81;HALFWIDTH KATAKANA LETTER TI;Lo;0;L;<narrow> 30C1;;;;N;;;;;
+FF82;HALFWIDTH KATAKANA LETTER TU;Lo;0;L;<narrow> 30C4;;;;N;;;;;
+FF83;HALFWIDTH KATAKANA LETTER TE;Lo;0;L;<narrow> 30C6;;;;N;;;;;
+FF84;HALFWIDTH KATAKANA LETTER TO;Lo;0;L;<narrow> 30C8;;;;N;;;;;
+FF85;HALFWIDTH KATAKANA LETTER NA;Lo;0;L;<narrow> 30CA;;;;N;;;;;
+FF86;HALFWIDTH KATAKANA LETTER NI;Lo;0;L;<narrow> 30CB;;;;N;;;;;
+FF87;HALFWIDTH KATAKANA LETTER NU;Lo;0;L;<narrow> 30CC;;;;N;;;;;
+FF88;HALFWIDTH KATAKANA LETTER NE;Lo;0;L;<narrow> 30CD;;;;N;;;;;
+FF89;HALFWIDTH KATAKANA LETTER NO;Lo;0;L;<narrow> 30CE;;;;N;;;;;
+FF8A;HALFWIDTH KATAKANA LETTER HA;Lo;0;L;<narrow> 30CF;;;;N;;;;;
+FF8B;HALFWIDTH KATAKANA LETTER HI;Lo;0;L;<narrow> 30D2;;;;N;;;;;
+FF8C;HALFWIDTH KATAKANA LETTER HU;Lo;0;L;<narrow> 30D5;;;;N;;;;;
+FF8D;HALFWIDTH KATAKANA LETTER HE;Lo;0;L;<narrow> 30D8;;;;N;;;;;
+FF8E;HALFWIDTH KATAKANA LETTER HO;Lo;0;L;<narrow> 30DB;;;;N;;;;;
+FF8F;HALFWIDTH KATAKANA LETTER MA;Lo;0;L;<narrow> 30DE;;;;N;;;;;
+FF90;HALFWIDTH KATAKANA LETTER MI;Lo;0;L;<narrow> 30DF;;;;N;;;;;
+FF91;HALFWIDTH KATAKANA LETTER MU;Lo;0;L;<narrow> 30E0;;;;N;;;;;
+FF92;HALFWIDTH KATAKANA LETTER ME;Lo;0;L;<narrow> 30E1;;;;N;;;;;
+FF93;HALFWIDTH KATAKANA LETTER MO;Lo;0;L;<narrow> 30E2;;;;N;;;;;
+FF94;HALFWIDTH KATAKANA LETTER YA;Lo;0;L;<narrow> 30E4;;;;N;;;;;
+FF95;HALFWIDTH KATAKANA LETTER YU;Lo;0;L;<narrow> 30E6;;;;N;;;;;
+FF96;HALFWIDTH KATAKANA LETTER YO;Lo;0;L;<narrow> 30E8;;;;N;;;;;
+FF97;HALFWIDTH KATAKANA LETTER RA;Lo;0;L;<narrow> 30E9;;;;N;;;;;
+FF98;HALFWIDTH KATAKANA LETTER RI;Lo;0;L;<narrow> 30EA;;;;N;;;;;
+FF99;HALFWIDTH KATAKANA LETTER RU;Lo;0;L;<narrow> 30EB;;;;N;;;;;
+FF9A;HALFWIDTH KATAKANA LETTER RE;Lo;0;L;<narrow> 30EC;;;;N;;;;;
+FF9B;HALFWIDTH KATAKANA LETTER RO;Lo;0;L;<narrow> 30ED;;;;N;;;;;
+FF9C;HALFWIDTH KATAKANA LETTER WA;Lo;0;L;<narrow> 30EF;;;;N;;;;;
+FF9D;HALFWIDTH KATAKANA LETTER N;Lo;0;L;<narrow> 30F3;;;;N;;;;;
+FF9E;HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;halfwidth katakana-hiragana voiced sound mark;;;
+FF9F;HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;halfwidth katakana-hiragana semi-voiced sound mark;;;
+FFA0;HALFWIDTH HANGUL FILLER;Lo;0;L;<narrow> 3164;;;;N;HALFWIDTH HANGUL CAE OM;;;;
+FFA1;HALFWIDTH HANGUL LETTER KIYEOK;Lo;0;L;<narrow> 3131;;;;N;HALFWIDTH HANGUL LETTER GIYEOG;;;;
+FFA2;HALFWIDTH HANGUL LETTER SSANGKIYEOK;Lo;0;L;<narrow> 3132;;;;N;HALFWIDTH HANGUL LETTER SSANG GIYEOG;;;;
+FFA3;HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
+FFA4;HALFWIDTH HANGUL LETTER NIEUN;Lo;0;L;<narrow> 3134;;;;N;;;;;
+FFA5;HALFWIDTH HANGUL LETTER NIEUN-CIEUC;Lo;0;L;<narrow> 3135;;;;N;HALFWIDTH HANGUL LETTER NIEUN JIEUJ;;;;
+FFA6;HALFWIDTH HANGUL LETTER NIEUN-HIEUH;Lo;0;L;<narrow> 3136;;;;N;HALFWIDTH HANGUL LETTER NIEUN HIEUH;;;;
+FFA7;HALFWIDTH HANGUL LETTER TIKEUT;Lo;0;L;<narrow> 3137;;;;N;HALFWIDTH HANGUL LETTER DIGEUD;;;;
+FFA8;HALFWIDTH HANGUL LETTER SSANGTIKEUT;Lo;0;L;<narrow> 3138;;;;N;HALFWIDTH HANGUL LETTER SSANG DIGEUD;;;;
+FFA9;HALFWIDTH HANGUL LETTER RIEUL;Lo;0;L;<narrow> 3139;;;;N;HALFWIDTH HANGUL LETTER LIEUL;;;;
+FFAA;HALFWIDTH HANGUL LETTER RIEUL-KIYEOK;Lo;0;L;<narrow> 313A;;;;N;HALFWIDTH HANGUL LETTER LIEUL GIYEOG;;;;
+FFAB;HALFWIDTH HANGUL LETTER RIEUL-MIEUM;Lo;0;L;<narrow> 313B;;;;N;HALFWIDTH HANGUL LETTER LIEUL MIEUM;;;;
+FFAC;HALFWIDTH HANGUL LETTER RIEUL-PIEUP;Lo;0;L;<narrow> 313C;;;;N;HALFWIDTH HANGUL LETTER LIEUL BIEUB;;;;
+FFAD;HALFWIDTH HANGUL LETTER RIEUL-SIOS;Lo;0;L;<narrow> 313D;;;;N;HALFWIDTH HANGUL LETTER LIEUL SIOS;;;;
+FFAE;HALFWIDTH HANGUL LETTER RIEUL-THIEUTH;Lo;0;L;<narrow> 313E;;;;N;HALFWIDTH HANGUL LETTER LIEUL TIEUT;;;;
+FFAF;HALFWIDTH HANGUL LETTER RIEUL-PHIEUPH;Lo;0;L;<narrow> 313F;;;;N;HALFWIDTH HANGUL LETTER LIEUL PIEUP;;;;
+FFB0;HALFWIDTH HANGUL LETTER RIEUL-HIEUH;Lo;0;L;<narrow> 3140;;;;N;HALFWIDTH HANGUL LETTER LIEUL HIEUH;;;;
+FFB1;HALFWIDTH HANGUL LETTER MIEUM;Lo;0;L;<narrow> 3141;;;;N;;;;;
+FFB2;HALFWIDTH HANGUL LETTER PIEUP;Lo;0;L;<narrow> 3142;;;;N;HALFWIDTH HANGUL LETTER BIEUB;;;;
+FFB3;HALFWIDTH HANGUL LETTER SSANGPIEUP;Lo;0;L;<narrow> 3143;;;;N;HALFWIDTH HANGUL LETTER SSANG BIEUB;;;;
+FFB4;HALFWIDTH HANGUL LETTER PIEUP-SIOS;Lo;0;L;<narrow> 3144;;;;N;HALFWIDTH HANGUL LETTER BIEUB SIOS;;;;
+FFB5;HALFWIDTH HANGUL LETTER SIOS;Lo;0;L;<narrow> 3145;;;;N;;;;;
+FFB6;HALFWIDTH HANGUL LETTER SSANGSIOS;Lo;0;L;<narrow> 3146;;;;N;HALFWIDTH HANGUL LETTER SSANG SIOS;;;;
+FFB7;HALFWIDTH HANGUL LETTER IEUNG;Lo;0;L;<narrow> 3147;;;;N;;;;;
+FFB8;HALFWIDTH HANGUL LETTER CIEUC;Lo;0;L;<narrow> 3148;;;;N;HALFWIDTH HANGUL LETTER JIEUJ;;;;
+FFB9;HALFWIDTH HANGUL LETTER SSANGCIEUC;Lo;0;L;<narrow> 3149;;;;N;HALFWIDTH HANGUL LETTER SSANG JIEUJ;;;;
+FFBA;HALFWIDTH HANGUL LETTER CHIEUCH;Lo;0;L;<narrow> 314A;;;;N;HALFWIDTH HANGUL LETTER CIEUC;;;;
+FFBB;HALFWIDTH HANGUL LETTER KHIEUKH;Lo;0;L;<narrow> 314B;;;;N;HALFWIDTH HANGUL LETTER KIYEOK;;;;
+FFBC;HALFWIDTH HANGUL LETTER THIEUTH;Lo;0;L;<narrow> 314C;;;;N;HALFWIDTH HANGUL LETTER TIEUT;;;;
+FFBD;HALFWIDTH HANGUL LETTER PHIEUPH;Lo;0;L;<narrow> 314D;;;;N;HALFWIDTH HANGUL LETTER PIEUP;;;;
+FFBE;HALFWIDTH HANGUL LETTER HIEUH;Lo;0;L;<narrow> 314E;;;;N;;;;;
+FFC2;HALFWIDTH HANGUL LETTER A;Lo;0;L;<narrow> 314F;;;;N;;;;;
+FFC3;HALFWIDTH HANGUL LETTER AE;Lo;0;L;<narrow> 3150;;;;N;;;;;
+FFC4;HALFWIDTH HANGUL LETTER YA;Lo;0;L;<narrow> 3151;;;;N;;;;;
+FFC5;HALFWIDTH HANGUL LETTER YAE;Lo;0;L;<narrow> 3152;;;;N;;;;;
+FFC6;HALFWIDTH HANGUL LETTER EO;Lo;0;L;<narrow> 3153;;;;N;;;;;
+FFC7;HALFWIDTH HANGUL LETTER E;Lo;0;L;<narrow> 3154;;;;N;;;;;
+FFCA;HALFWIDTH HANGUL LETTER YEO;Lo;0;L;<narrow> 3155;;;;N;;;;;
+FFCB;HALFWIDTH HANGUL LETTER YE;Lo;0;L;<narrow> 3156;;;;N;;;;;
+FFCC;HALFWIDTH HANGUL LETTER O;Lo;0;L;<narrow> 3157;;;;N;;;;;
+FFCD;HALFWIDTH HANGUL LETTER WA;Lo;0;L;<narrow> 3158;;;;N;;;;;
+FFCE;HALFWIDTH HANGUL LETTER WAE;Lo;0;L;<narrow> 3159;;;;N;;;;;
+FFCF;HALFWIDTH HANGUL LETTER OE;Lo;0;L;<narrow> 315A;;;;N;;;;;
+FFD2;HALFWIDTH HANGUL LETTER YO;Lo;0;L;<narrow> 315B;;;;N;;;;;
+FFD3;HALFWIDTH HANGUL LETTER U;Lo;0;L;<narrow> 315C;;;;N;;;;;
+FFD4;HALFWIDTH HANGUL LETTER WEO;Lo;0;L;<narrow> 315D;;;;N;;;;;
+FFD5;HALFWIDTH HANGUL LETTER WE;Lo;0;L;<narrow> 315E;;;;N;;;;;
+FFD6;HALFWIDTH HANGUL LETTER WI;Lo;0;L;<narrow> 315F;;;;N;;;;;
+FFD7;HALFWIDTH HANGUL LETTER YU;Lo;0;L;<narrow> 3160;;;;N;;;;;
+FFDA;HALFWIDTH HANGUL LETTER EU;Lo;0;L;<narrow> 3161;;;;N;;;;;
+FFDB;HALFWIDTH HANGUL LETTER YI;Lo;0;L;<narrow> 3162;;;;N;;;;;
+FFDC;HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;
+FFE0;FULLWIDTH CENT SIGN;Sc;0;ET;<wide> 00A2;;;;N;;;;;
+FFE1;FULLWIDTH POUND SIGN;Sc;0;ET;<wide> 00A3;;;;N;;;;;
+FFE2;FULLWIDTH NOT SIGN;Sm;0;ON;<wide> 00AC;;;;N;;;;;
+FFE3;FULLWIDTH MACRON;Sk;0;ON;<wide> 00AF;;;;N;FULLWIDTH SPACING MACRON;*;;;
+FFE4;FULLWIDTH BROKEN BAR;So;0;ON;<wide> 00A6;;;;N;FULLWIDTH BROKEN VERTICAL BAR;;;;
+FFE5;FULLWIDTH YEN SIGN;Sc;0;ET;<wide> 00A5;;;;N;;;;;
+FFE6;FULLWIDTH WON SIGN;Sc;0;ET;<wide> 20A9;;;;N;;;;;
+FFE8;HALFWIDTH FORMS LIGHT VERTICAL;So;0;ON;<narrow> 2502;;;;N;;;;;
+FFE9;HALFWIDTH LEFTWARDS ARROW;Sm;0;ON;<narrow> 2190;;;;N;;;;;
+FFEA;HALFWIDTH UPWARDS ARROW;Sm;0;ON;<narrow> 2191;;;;N;;;;;
+FFEB;HALFWIDTH RIGHTWARDS ARROW;Sm;0;ON;<narrow> 2192;;;;N;;;;;
+FFEC;HALFWIDTH DOWNWARDS ARROW;Sm;0;ON;<narrow> 2193;;;;N;;;;;
+FFED;HALFWIDTH BLACK SQUARE;So;0;ON;<narrow> 25A0;;;;N;;;;;
+FFEE;HALFWIDTH WHITE CIRCLE;So;0;ON;<narrow> 25CB;;;;N;;;;;
+FFF9;INTERLINEAR ANNOTATION ANCHOR;Cf;0;BN;;;;;N;;;;;
+FFFA;INTERLINEAR ANNOTATION SEPARATOR;Cf;0;BN;;;;;N;;;;;
+FFFB;INTERLINEAR ANNOTATION TERMINATOR;Cf;0;BN;;;;;N;;;;;
+FFFC;OBJECT REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+FFFD;REPLACEMENT CHARACTER;So;0;ON;;;;;N;;;;;
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/readtype/unicodedata.html	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,1988 @@
+<html>
+
+
+
+<head>
+
+<meta NAME="GENERATOR" CONTENT="Microsoft FrontPage 4.0">
+
+<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
+
+<link REL="stylesheet" HREF="http://www.unicode.org/unicode.css" TYPE="text/css">
+
+<title>UnicodeData File Format</title>
+
+</head>
+
+
+
+<body>
+
+
+
+<h1>UnicodeData File Format<br> 
+Version 3.0.0</h1>
+
+
+
+<table BORDER="1" CELLSPACING="2" CELLPADDING="0" HEIGHT="87" WIDTH="100%">
+
+  <tr>
+
+    <td VALIGN="TOP" width="144">Revision</td>
+
+    <td VALIGN="TOP">3.0.0</td>
+
+  </tr>
+
+  <tr>
+
+    <td VALIGN="TOP" width="144">Authors</td>
+
+    <td VALIGN="TOP">Mark Davis and Ken Whistler</td>
+
+  </tr>
+
+  <tr>
+
+    <td VALIGN="TOP" width="144">Date</td>
+
+    <td VALIGN="TOP">1999-09-12</td>
+
+  </tr>
+
+  <tr>
+
+    <td VALIGN="TOP" width="144">This Version</td>
+
+    <td VALIGN="TOP"><a href="ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html">ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html</a></td>
+
+  </tr>
+
+  <tr>
+
+    <td VALIGN="TOP" width="144">Previous Version</td>
+
+    <td VALIGN="TOP">n/a</td>
+
+  </tr>
+
+  <tr>
+
+    <td VALIGN="TOP" width="144">Latest Version</td>
+
+    <td VALIGN="TOP"><a href="ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html">ftp://ftp.unicode.org/Public/3.0-Update/UnicodeData-3.0.0.html</a></td>
+
+  </tr>
+
+</table>
+
+
+
+<p align="center">Copyright © 1995-1999 Unicode, Inc. All Rights reserved.<br>    
+    
+<i>For more information, including Disclamer and Limitations, see <a HREF="UnicodeCharacterDatabase-3.0.0.html">UnicodeCharacterDatabase-3.0.0.html</a> </i></p>   
+   
+   
+   
+<p>This document describes the format of the UnicodeData.txt file, which is one of the    
+   
+files in the Unicode Character Database. The document is divided into the following    
+   
+sections:    
+   
+   
+   
+<ul>   
+   
+  <li><a HREF="#Field Formats">Field Formats</a> <ul>   
+   
+      <li><a HREF="#General Category">General Category</a> </li>   
+   
+      <li><a HREF="#Bidirectional Category">Bidirectional Category</a> </li>   
+   
+      <li><a HREF="#Character Decomposition">Character Decomposition Mapping</a> </li>  
+  
+      <li><a HREF="#Canonical Combining Classes">Canonical Combining Classes</a> </li>  
+  
+      <li><a HREF="#Decompositions and Normalization">Decompositions and Normalization</a> </li>  
+  
+      <li><a HREF="#Case Mappings">Case Mappings</a> </li>  
+  
+    </ul>  
+  
+  </li>  
+  
+  <li><a HREF="#Property Invariants">Property Invariants</a> </li>  
+  
+  <li><a HREF="#Modification History">Modification History</a> </li>  
+  
+</ul>  
+  
+  
+  
+<p><b>Warning: </b>the information in this file does not completely describe the use and   
+  
+interpretation of Unicode character properties and behavior. It must be used in   
+  
+conjunction with the data in the other files in the Unicode Character Database, and relies   
+  
+on the notation and definitions supplied in <i><a href="http://www.unicode.org/unicode/standard/versions/Unicode3.0.html"> The Unicode 
+Standard</a></i>. All chapter references   
+  
+are to Version 3.0 of the standard.</p>  
+  
+  
+  
+<h2><a NAME="Field Formats"></a>Field Formats</h2>    
+    
+    
+    
+<p>The file consists of lines containing fields terminated by semicolons. Each line     
+    
+represents the data for one encoded character in the Unicode Standard. Every encoded     
+    
+character has a data entry, with the exception of certain special ranges, as detailed     
+    
+below.     
+    
+    
+    
+<ul>    
+    
+  <li>There are six special ranges of characters that are represented only by their start and     
+    
+    end characters, since the properties in the file are uniform, except for code values     
+    
+    (which are all sequential and assigned). </li>    
+    
+  <li>The names of CJK ideograph characters and the names and decompositions of Hangul     
+    
+    syllable characters are algorithmically derivable. (See the Unicode Standard and <a    
+    
+    HREF="http://www.unicode.org/unicode/reports/tr15/">Unicode Technical Report #15</a> for     
+    
+    more information). </li>    
+    
+  <li>Surrogate code values and private use characters have no names. </li>    
+    
+  <li>The Private Use character outside of the BMP (U+F0000..U+FFFFD, U+100000..U+10FFFD) are     
+    
+    not listed. These correspond to surrogate pairs where the first surrogate is in the High     
+    
+    Surrogate Private Use section. </li>    
+    
+</ul>    
+    
+    
+    
+<p>The exact ranges represented by start and end characters are:     
+    
+    
+    
+<ul>    
+    
+  <li>CJK Ideographs Extension A (U+3400 - U+4DB5) </li>    
+    
+  <li>CJK Ideographs (U+4E00 - U+9FA5) </li>    
+    
+  <li>Hangul Syllables (U+AC00 - U+D7A3) </li>    
+    
+  <li>Non-Private Use High Surrogates (U+D800 - U+DB7F) </li>    
+    
+  <li>Private Use High Surrogates (U+DB80 - U+DBFF) </li>    
+    
+  <li>Low Surrogates (U+DC00 - U+DFFF) </li>    
+    
+  <li>The Private Use Area (U+E000 - U+F8FF) </li>    
+    
+</ul>    
+    
+    
+    
+<p>The following table describes the format and meaning of each field in a data entry in     
+    
+the UnicodeData file. Fields which contain normative information are so indicated.</p>    
+    
+    
+    
+<table BORDER="1" CELLSPACING="2" CELLPADDING="2">    
+    
+  <tr>    
+    
+    <th VALIGN="top" ALIGN="LEFT"><p ALIGN="LEFT">Field</th>    
+    
+    <th VALIGN="top" ALIGN="LEFT"><p ALIGN="LEFT">Name</th>    
+    
+    <th VALIGN="top" ALIGN="LEFT"><p ALIGN="LEFT">Status</th>    
+    
+    <th VALIGN="top" ALIGN="LEFT"><p ALIGN="LEFT">Explanation</th>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <th VALIGN="top">0</th>    
+    
+    <td VALIGN="top">Code value</td>    
+    
+    <td VALIGN="top">normative</td>    
+    
+    <td VALIGN="top">Code value in 4-digit hexadecimal format.</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <th VALIGN="top">1</th>    
+    
+    <td VALIGN="top">Character name</td>    
+    
+    <td VALIGN="top">normative</td>    
+    
+    <td VALIGN="top">These names match exactly the names published in Chapter 14 of the     
+    
+    Unicode Standard, Version 3.0.</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <th VALIGN="top">2</th>    
+    
+    <td VALIGN="top"><a HREF="#General Category">General Category</a> </td>    
+    
+    <td VALIGN="top">normative / informative<br>    
+    
+    (see below)</td>    
+    
+    <td VALIGN="top">This is a useful breakdown into various &quot;character types&quot; which     
+    
+    can be used as a default categorization in implementations. See below for a brief     
+    
+    explanation.</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <th VALIGN="top">3</th>    
+    
+    <td VALIGN="top"><a HREF="#Canonical Combining Classes">Canonical Combining Classes</a> </td>    
+    
+    <td VALIGN="top">normative</td>    
+    
+    <td VALIGN="top">The classes used for the Canonical Ordering Algorithm in the Unicode     
+    
+    Standard. These classes are also printed in Chapter 4 of the Unicode Standard.</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <th VALIGN="top">4</th>    
+    
+    <td VALIGN="top"><a HREF="#Bidirectional Category">Bidirectional Category</a> </td>    
+    
+    <td VALIGN="top">normative</td>    
+    
+    <td VALIGN="top">See the list below for an explanation of the abbreviations used in this     
+    
+    field. These are the categories required by the Bidirectional Behavior Algorithm in the     
+    
+    Unicode Standard. These categories are summarized in Chapter 3 of the Unicode Standard.</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <th VALIGN="top">5</th>    
+    
+    <td VALIGN="top"><a HREF="#Character Decomposition">Character Decomposition  
+      Mapping</a></td>   
+   
+    <td VALIGN="top">normative</td>   
+   
+    <td VALIGN="top">In the Unicode Standard, not all of the mappings are full (maximal)    
+   
+    decompositions. Recursive application of look-up for decompositions will, in all cases,    
+   
+    lead to a maximal decomposition. The decomposition mappings match exactly the    
+   
+    decomposition mappings published with the character names in the Unicode Standard.</td>   
+   
+  </tr>   
+   
+  <tr>   
+   
+    <th VALIGN="top">6</th>   
+   
+    <td VALIGN="top">Decimal digit value</td>   
+   
+    <td VALIGN="top">normative</td>   
+   
+    <td VALIGN="top">This is a numeric field. If the character has the decimal digit property,    
+   
+    as specified in Chapter 4 of the Unicode Standard, the value of that digit is represented    
+   
+    with an integer value in this field</td>   
+   
+  </tr>   
+   
+  <tr>   
+   
+    <th VALIGN="top">7</th>   
+   
+    <td VALIGN="top">Digit value</td>   
+   
+    <td VALIGN="top">normative</td>   
+   
+    <td VALIGN="top">This is a numeric field. If the character represents a digit, not    
+   
+    necessarily a decimal digit, the value is here. This covers digits which do not form    
+   
+    decimal radix forms, such as the compatibility superscript digits</td>   
+   
+  </tr>   
+   
+  <tr>   
+   
+    <th VALIGN="top">8</th>   
+   
+    <td VALIGN="top">Numeric value</td>   
+   
+    <td VALIGN="top">normative</td>   
+   
+    <td VALIGN="top">This is a numeric field. If the character has the numeric property, as    
+   
+    specified in Chapter 4 of the Unicode Standard, the value of that character is represented    
+   
+    with an integer or rational number in this field. This includes fractions as, e.g.,    
+   
+    &quot;1/5&quot; for U+2155 VULGAR FRACTION ONE FIFTH Also included are numerical values    
+   
+    for compatibility characters such as circled numbers.</td>   
+   
+  </tr>   
+   
+  <tr>   
+   
+    <th VALIGN="top">8</th>   
+   
+    <td VALIGN="top">Mirrored</td>   
+   
+    <td VALIGN="top">normative</td>   
+   
+    <td VALIGN="top">If the character has been identified as a &quot;mirrored&quot; character    
+   
+    in bidirectional text, this field has the value &quot;Y&quot;; otherwise &quot;N&quot;.    
+   
+    The list of mirrored characters is also printed in Chapter 4 of the Unicode Standard.</td>   
+   
+  </tr>   
+   
+  <tr>   
+   
+    <th VALIGN="top">10</th>   
+   
+    <td VALIGN="top">Unicode 1.0 Name</td>   
+   
+    <td VALIGN="top">informative</td>   
+   
+    <td VALIGN="top">This is the old name as published in Unicode 1.0. This name is only    
+   
+    provided when it is significantly different from the Unicode 3.0 name for the character.</td>   
+   
+  </tr>   
+   
+  <tr>   
+   
+    <th VALIGN="top">11</th>   
+   
+    <td VALIGN="top">10646 comment field</td>   
+   
+    <td VALIGN="top">informative</td>   
+   
+    <td VALIGN="top">This is the ISO 10646 comment field. It is in parantheses in the 10646    
+   
+    names list.</td>   
+   
+  </tr>   
+   
+  <tr>   
+   
+    <th VALIGN="top">12</th>   
+   
+    <td VALIGN="top"><a HREF="#Case Mappings">Uppercase Mapping</a></td>   
+   
+    <td VALIGN="top">informative</td>   
+   
+    <td VALIGN="top">Upper case equivalent mapping. If a character is part of an alphabet with    
+   
+    case distinctions, and has an upper case equivalent, then the upper case equivalent is in    
+   
+    this field. See the explanation below on case distinctions. These mappings are always    
+   
+    one-to-one, not one-to-many or many-to-one. This field is informative.</td>   
+   
+  </tr>   
+   
+  <tr>   
+   
+    <th VALIGN="top">13</th>   
+   
+    <td VALIGN="top"><a HREF="#Case Mappings">Lowercase Mapping</a></td>   
+   
+    <td VALIGN="top">informative</td>   
+   
+    <td VALIGN="top">Similar to Uppercase mapping</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <th VALIGN="top">14</th>    
+    
+    <td VALIGN="top"><a HREF="#Case Mappings">Titlecase Mapping</a></td>   
+   
+    <td VALIGN="top">informative</td>   
+   
+    <td VALIGN="top">Similar to Uppercase mapping</td>    
+    
+  </tr>    
+    
+</table>    
+    
+    
+    
+<h3><a NAME="General Category"></a>General Category</h3>    
+    
+    
+    
+<p>The values in this field are abbreviations for the following. Some of the values are     
+    
+normative, and some are informative. For more information, see the Unicode Standard.</p>    
+    
+    
+    
+<p><b>Note:</b> the standard does not assign information to control characters (except for     
+    
+certain cases in the Bidirectional Algorithm). Implementations will generally also assign     
+    
+categories to certain control characters, notably CR and LF, according to platform     
+    
+conventions.</p>    
+    
+    
+    
+<h4>Normative Categories</h4>    
+    
+    
+    
+<table BORDER="0" CELLSPACING="2" CELLPADDING="0">    
+    
+  <tr>    
+    
+    <th><p ALIGN="LEFT">Abbr.</th>    
+    
+    <th><p ALIGN="LEFT">Description</th>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Lu</td>    
+    
+    <td>Letter, Uppercase</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Ll</td>    
+    
+    <td>Letter, Lowercase</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Lt</td>    
+    
+    <td>Letter, Titlecase</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Mn</td>    
+    
+    <td>Mark, Non-Spacing</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Mc</td>    
+    
+    <td>Mark, Spacing Combining</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Me</td>    
+    
+    <td>Mark, Enclosing</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Nd</td>    
+    
+    <td>Number, Decimal Digit</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Nl</td>    
+    
+    <td>Number, Letter</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">No</td>    
+    
+    <td>Number, Other</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Zs</td>    
+    
+    <td>Separator, Space</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Zl</td>    
+    
+    <td>Separator, Line</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Zp</td>    
+    
+    <td>Separator, Paragraph</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Cc</td>    
+    
+    <td>Other, Control</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Cf</td>    
+    
+    <td>Other, Format</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Cs</td>    
+    
+    <td>Other, Surrogate</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Co</td>    
+    
+    <td>Other, Private Use</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Cn</td>    
+    
+    <td>Other, Not Assigned (no characters in the file have this property)</td>    
+    
+  </tr>    
+    
+</table>    
+    
+    
+    
+<h4>Informative Categories</h4>    
+    
+    
+    
+<table BORDER="0" CELLSPACING="2" CELLPADDING="0">    
+    
+  <tr>    
+    
+    <th><p ALIGN="LEFT">Abbr.</th>    
+    
+    <th><p ALIGN="LEFT">Description</th>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Lm</td>    
+    
+    <td>Letter, Modifier</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Lo</td>    
+    
+    <td>Letter, Other</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Pc</td>    
+    
+    <td>Punctuation, Connector</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Pd</td>    
+    
+    <td>Punctuation, Dash</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Ps</td>    
+    
+    <td>Punctuation, Open</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Pe</td>    
+    
+    <td>Punctuation, Close</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Pi</td>    
+    
+    <td>Punctuation, Initial quote (may behave like Ps or Pe depending on usage)</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Pf</td>    
+    
+    <td>Punctuation, Final quote (may behave like Ps or Pe depending on usage)</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Po</td>    
+    
+    <td>Punctuation, Other</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Sm</td>    
+    
+    <td>Symbol, Math</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Sc</td>    
+    
+    <td>Symbol, Currency</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">Sk</td>    
+    
+    <td>Symbol, Modifier</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">So</td>    
+    
+    <td>Symbol, Other</td>    
+    
+  </tr>    
+    
+</table>    
+    
+    
+    
+<h3><a NAME="Bidirectional Category"></a>Bidirectional Category</h3>    
+    
+    
+    
+<p>Please refer to Chapter 3 for an explanation of the algorithm for Bidirectional     
+    
+Behavior and an explanation of the significance of these categories. An up-to-date version     
+    
+can be found on <a HREF="http://www.unicode.org/unicode/reports/tr9/">Unicode Technical     
+    
+Report #9: The Bidirectional Algorithm</a>. These values are normative.</p>    
+    
+    
+    
+<table BORDER="0" CELLPADDING="2">    
+    
+  <tr>    
+    
+    <th VALIGN="TOP" ALIGN="LEFT"><p ALIGN="LEFT">Type</th>    
+    
+    <th VALIGN="TOP" ALIGN="LEFT"><p ALIGN="LEFT">Description</th>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td VALIGN="TOP"><b>L</b></td>    
+    
+    <td VALIGN="TOP">Left-to-Right</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td VALIGN="TOP"><b>LRE</b></td>    
+    
+    <td VALIGN="TOP">Left-to-Right Embedding</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td VALIGN="TOP"><b>LRO</b></td>    
+    
+    <td VALIGN="TOP">Left-to-Right Override</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td VALIGN="TOP"><b>R</b></td>    
+    
+    <td VALIGN="TOP">Right-to-Left</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td VALIGN="TOP"><b>AL</b></td>    
+    
+    <td VALIGN="TOP">Right-to-Left Arabic</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td VALIGN="TOP"><b>RLE</b></td>    
+    
+    <td VALIGN="TOP">Right-to-Left Embedding</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td VALIGN="TOP"><b>RLO</b></td>    
+    
+    <td VALIGN="TOP">Right-to-Left Override</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td VALIGN="TOP"><b>PDF</b></td>    
+    
+    <td VALIGN="TOP">Pop Directional Format</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td VALIGN="TOP"><b>EN</b></td>    
+    
+    <td VALIGN="TOP">European Number</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td VALIGN="TOP"><b>ES</b></td>    
+    
+    <td VALIGN="TOP">European Number Separator</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td VALIGN="TOP"><b>ET</b></td>    
+    
+    <td VALIGN="TOP">European Number Terminator</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td VALIGN="TOP"><b>AN</b></td>    
+    
+    <td VALIGN="TOP">Arabic Number</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td VALIGN="TOP"><b>CS</b></td>    
+    
+    <td VALIGN="TOP">Common Number Separator</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td VALIGN="TOP"><b>NSM</b></td>    
+    
+    <td VALIGN="TOP">Non-Spacing Mark</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td VALIGN="TOP"><b>BN</b></td>    
+    
+    <td VALIGN="TOP">Boundary Neutral</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td VALIGN="TOP"><b>B</b></td>    
+    
+    <td VALIGN="TOP">Paragraph Separator</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td VALIGN="TOP"><b>S</b></td>    
+    
+    <td VALIGN="TOP">Segment Separator</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td VALIGN="TOP"><b>WS</b></td>    
+    
+    <td VALIGN="TOP">Whitespace</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td VALIGN="TOP"><b>ON</b></td>    
+    
+    <td VALIGN="TOP">Other Neutrals</td>    
+    
+  </tr>    
+    
+</table>    
+    
+    
+    
+<h3><a NAME="Character Decomposition"></a>Character Decomposition Mapping</h3>   
+   
+   
+   
+<p>The decomposition is a normative property of a character. The tags supplied with    
+   
+certain decomposition mappings generally indicate formatting information. Where no such    
+   
+tag is given, the mapping is designated as canonical. Conversely, the presence of a    
+   
+formatting tag also indicates that the mapping is a compatibility mapping and not a    
+   
+canonical mapping. In the absence of other formatting information in a compatibility    
+   
+mapping, the tag is used to distinguish it from canonical mappings.</p>   
+   
+   
+   
+<p>In some instances a canonical mapping or a compatibility mapping may consist of a    
+   
+single character. For a canonical mapping, this indicates that the character is a    
+   
+canonical equivalent of another single character. For a compatibility mapping, this    
+   
+indicates that the character is a compatibility equivalent of another single character.    
+   
+The compatibility formatting tags used are:</p>   
+   
+   
+   
+<table BORDER="0" CELLSPACING="2" CELLPADDING="0">   
+   
+  <tr>   
+   
+    <th>Tag</th>   
+   
+    <th><p ALIGN="LEFT">Description</th>   
+   
+  </tr>   
+   
+  <tr>   
+   
+    <td ALIGN="CENTER">&lt;font&gt;&nbsp;&nbsp;</td>   
+   
+    <td>A font variant (e.g. a blackletter form).</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">&lt;noBreak&gt;&nbsp;&nbsp;</td>    
+    
+    <td>A no-break version of a space or hyphen.</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">&lt;initial&gt;&nbsp;&nbsp;</td>    
+    
+    <td>An initial presentation form (Arabic).</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">&lt;medial&gt;&nbsp;&nbsp;</td>    
+    
+    <td>A medial presentation form (Arabic).</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">&lt;final&gt;&nbsp;&nbsp;</td>    
+    
+    <td>A final presentation form (Arabic).</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">&lt;isolated&gt;&nbsp;&nbsp;</td>    
+    
+    <td>An isolated presentation form (Arabic).</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">&lt;circle&gt;&nbsp;&nbsp;</td>    
+    
+    <td>An encircled form.</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">&lt;super&gt;&nbsp;&nbsp;</td>    
+    
+    <td>A superscript form.</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">&lt;sub&gt;&nbsp;&nbsp;</td>    
+    
+    <td>A subscript form.</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">&lt;vertical&gt;&nbsp;&nbsp;</td>    
+    
+    <td>A vertical layout presentation form.</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">&lt;wide&gt;&nbsp;&nbsp;</td>    
+    
+    <td>A wide (or zenkaku) compatibility character.</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">&lt;narrow&gt;&nbsp;&nbsp;</td>    
+    
+    <td>A narrow (or hankaku) compatibility character.</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">&lt;small&gt;&nbsp;&nbsp;</td>    
+    
+    <td>A small variant form (CNS compatibility).</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">&lt;square&gt;&nbsp;&nbsp;</td>    
+    
+    <td>A CJK squared font variant.</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">&lt;fraction&gt;&nbsp;&nbsp;</td>    
+    
+    <td>A vulgar fraction form.</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="CENTER">&lt;compat&gt;&nbsp;&nbsp;</td>    
+    
+    <td>Otherwise unspecified compatibility character.</td>    
+    
+  </tr>    
+    
+</table>    
+    
+    
+    
+<p><b>Reminder: </b>There is a difference between decomposition and decomposition mapping.     
+    
+The decomposition mappings are defined in the UnicodeData, while the decomposition (also     
+    
+termed &quot;full decomposition&quot;) is defined in Chapter 3 to use those mappings  
+<i>    
+   
+recursively.</i>    
+   
+   
+   
+<ul>   
+   
+  <li>The canonical decomposition is formed by recursively applying the canonical mappings,    
+   
+    then applying the canonical reordering algorithm. </li>   
+   
+  <li>The compatibility decomposition is formed by recursively applying the canonical <em>and</em>    
+   
+    compatibility mappings, then applying the canonical reordering algorithm. </li>   
+   
+</ul>   
+   
+   
+   
+<h3><a NAME="Canonical Combining Classes"></a>Canonical Combining Classes</h3>    
+    
+    
+    
+<table BORDER="0" CELLSPACING="2" CELLPADDING="0">    
+    
+  <tr>    
+    
+    <th><p ALIGN="LEFT">Value</th>    
+    
+    <th><p ALIGN="LEFT">Description</th>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">0:</td>    
+    
+    <td>Spacing, split, enclosing, reordrant, and Tibetan subjoined</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">1:</td>    
+    
+    <td>Overlays and interior</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">7:</td>    
+    
+    <td>Nuktas</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">8:</td>    
+    
+    <td>Hiragana/Katakana voicing marks</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">9:</td>    
+    
+    <td>Viramas</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">10:</td>    
+    
+    <td>Start of fixed position classes</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">199:</td>    
+    
+    <td>End of fixed position classes</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">200:</td>    
+    
+    <td>Below left attached</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">202:</td>    
+    
+    <td>Below attached</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">204:</td>    
+    
+    <td>Below right attached</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">208:</td>    
+    
+    <td>Left attached (reordrant around single base character)</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">210:</td>    
+    
+    <td>Right attached</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">212:</td>    
+    
+    <td>Above left attached</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">214:</td>    
+    
+    <td>Above attached</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">216:</td>    
+    
+    <td>Above right attached</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">218:</td>    
+    
+    <td>Below left</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">220:</td>    
+    
+    <td>Below</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">222:</td>    
+    
+    <td>Below right</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">224:</td>    
+    
+    <td>Left (reordrant around single base character)</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">226:</td>    
+    
+    <td>Right</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">228:</td>    
+    
+    <td>Above left</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">230:</td>    
+    
+    <td>Above</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">232:</td>    
+    
+    <td>Above right</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">233:</td>    
+    
+    <td>Double below</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">234:</td>    
+    
+    <td>Double above</td>    
+    
+  </tr>    
+    
+  <tr>    
+    
+    <td ALIGN="RIGHT">240:</td>    
+    
+    <td>Below (iota subscript)</td>    
+    
+  </tr>    
+    
+</table>    
+    
+    
+    
+<p><strong>Note: </strong>some of the combining classes in this list do not currently have     
+    
+members but are specified here for completeness.</p>    
+    
+    
+    
+<h3><a NAME="Decompositions and Normalization"></a>Decompositions and Normalization</h3>    
+    
+    
+    
+<p>Decomposition is specified in Chapter 3. <a href="http://www.unicode.org/unicode/reports/tr15/"><i>Unicode Technical Report #15:     
+    
+Normalization Forms</i></a> specifies the interaction between decomposition and normalization. The     
+    
+most up-to-date version is found on <a HREF="http://www.unicode.org/unicode/reports/tr15/">http://www.unicode.org/unicode/reports/tr15/</a>.     
+    
+That report specifies how the decompositions defined in UnicodeData.txt are used to derive     
+    
+normalized forms of Unicode text.</p>    
+    
+    
+    
+<p>Note that as of the 2.1.9 update of the Unicode Character Database, the decompositions     
+    
+in the UnicodeData.txt file can be used to recursively derive the full decomposition in     
+    
+canonical order, without the need to separately apply canonical reordering. However,     
+    
+canonical reordering of combining character sequences must still be applied in     
+    
+decomposition when normalizing source text which contains any combining marks.</p>    
+    
+    
+    
+<h3><a NAME="Case Mappings"></a>Case Mappings</h3>    
+    
+    
+    
+<p>The case mapping is an informative, default mapping. Case itself, on the other hand,     
+    
+has normative status. Thus, for example, 0041 LATIN CAPITAL LETTER A is normatively     
+    
+uppercase, but its lowercase mapping the 0061 LATIN SMALL LETTER A is informative. The     
+    
+reason for this is that case can be considered to be an inherent property of a particular     
+    
+character (and is usually, but not always, derivable from the presence of the terms     
+    
+&quot;CAPITAL&quot; or &quot;SMALL&quot; in the character name), but case mappings between     
+    
+characters are occasionally influenced by local conventions. For example, certain     
+    
+languages, such as Turkish, German, French, or Greek may have small deviations from the     
+    
+default mappings listed in UnicodeData.</p>    
+    
+    
+    
+<p>In addition to uppercase and lowercase, because of the inclusion of certain composite     
+    
+characters for compatibility, such as 01F1 LATIN CAPITAL LETTER DZ, there is a third case,     
+    
+called <i>titlecase</i>, which is used where the first letter of a word is to be     
+    
+capitalized (e.g. UPPERCASE, Titlecase, lowercase). An example of such a titlecase letter     
+    
+is 01F2 LATIN CAPITAL LETTER D WITH SMALL LETTER Z.</p>    
+    
+    
+    
+<p>The uppercase, titlecase and lowercase fields are only included for characters that     
+    
+have a single corresponding character of that type. Composite characters (such as     
+    
+&quot;339D SQUARE CM&quot;) that do not have a single corresponding character of that type     
+    
+can be cased by decomposition.</p>    
+    
+    
+    
+<p>For compatibility with existing parsers, UnicodeData only contains case mappings for     
+    
+characters where they are one-to-one mappings; it also omits information about     
+    
+context-sensitive case mappings. Information about these special cases can be found in a     
+    
+separate data file, SpecialCasing.txt,     
+    
+which has been added starting with the 2.1.8 update to the Unicode data files.     
+    
+SpecialCasing.txt contains additional informative case mappings that are either not     
+    
+one-to-one or which are context-sensitive.</p>    
+    
+    
+    
+<h2><a NAME="Property Invariants"></a>Property Invariants</h2>    
+    
+    
+    
+<p>Values in UnicodeData.txt are subject to correction as errors are found; however, some     
+    
+characteristics of the categories themselves can be considered invariants. Applications     
+    
+may wish to take these invariants into account when choosing how to implement character     
+    
+properties. The following is a partial list of known invariants for the Unicode Character     
+    
+Database.</p>    
+    
+    
+    
+<h4>Database Fields</h4>    
+    
+    
+    
+<ul>    
+    
+  <li>The number of fields in UnicodeData.txt is fixed. </li>    
+    
+  <li>The order of the fields is also fixed. <ul>    
+    
+      <li>Any additional information about character properties to be added in the future will     
+    
+        appear in separate data tables, rather than being added on to the existing table or by     
+    
+        subdivision or reinterpretation of existing fields. </li>    
+    
+    </ul>    
+    
+  </li>    
+    
+</ul>    
+    
+    
+    
+<h4>General Category</h4>    
+    
+    
+    
+<ul>    
+    
+  <li>There will never be more than 32 General Category values. <ul>    
+    
+      <li>It is very unlikely that the Unicode Technical Committee will subdivide the General     
+    
+        Category partition any further, since that can cause implementations to misbehave. Because     
+    
+        the General Category is limited to 32 values, 5 bits can be used to represent the     
+    
+        information, and a 32-bit integer can be used as a bitmask to represent arbitrary sets of     
+    
+        categories. </li>    
+    
+    </ul>    
+    
+  </li>    
+    
+</ul>    
+    
+    
+    
+<h4>Combining Classes</h4>    
+    
+    
+    
+<ul>    
+    
+  <li>Combining classes are limited to the values 0 to 255. <ul>    
+    
+      <li>In practice, there are far fewer than 256 values used. Implementations may take     
+    
+        advantage of this fact for compression, since only the ordering of the non-zero values     
+    
+        matters for the Canonical Reordering Algorithm. It is possible for up to 256 values to be     
+    
+        used in the future; however, UTC decisions in the future may restrict the number of values     
+    
+        to 128, since this has implementation advantages. [Signed bytes can be used without     
+    
+        widening to ints in Java, for example.] </li>    
+    
+    </ul>    
+    
+  </li>    
+    
+  <li>All characters other than those of General Category M* have the combining class 0. <ul>    
+    
+      <li>Currently, all characters other than those of General Category Mn have the value 0.     
+    
+        However, some characters of General Category Me or Mc may be given non-zero values in the     
+    
+        future. </li>    
+    
+      <li>The precise values above the value 0 are not invariant--only the relative ordering is     
+    
+        considered normative. For example, it is not guaranteed in future versions that the class     
+    
+        of U+05B4 will be precisely 14. </li>    
+    
+    </ul>    
+    
+  </li>    
+    
+</ul>    
+    
+    
+    
+<h4>Case</h4>    
+    
+    
+    
+<ul>    
+    
+  <li>Characters of type Lu, Lt, or Ll are called <i>cased</i>. All characters with an Upper,     
+    
+    Lower, or Titlecase mapping are cased characters. <ul>    
+    
+      <li>However, characters with the General Categories of Lu, Ll, or Lt may not always have     
+    
+        case mappings, and case mappings may vary by locale. (See     
+    
+        ftp://ftp.unicode.org/Public/UNIDATA/SpecialCasing.txt). </li>    
+    
+    </ul>    
+    
+  </li>    
+    
+</ul>    
+    
+    
+    
+<h4>Canonical Decomposition</h4>    
+    
+    
+    
+<ul>    
+    
+  <li>Canonical mappings are always in canonical order. </li>    
+    
+  <li>Canonical mappings have only the first of a pair possibly further decomposing. </li>    
+    
+  <li>Canonical decompositions are &quot;transparent&quot; to other character data: <ul>    
+    
+      <li><tt>BIDI(a) = BIDI(principal(canonicalDecomposition(a))</tt> </li>    
+    
+      <li><tt>Category(a) = Category(principal(canonicalDecomposition(a))</tt> </li>    
+    
+      <li><tt>CombiningClass(a) = CombiningClass(principal(canonicalDecomposition(a))</tt><br>    
+    
+        where principal(a) is the first character not of type Mn, or the first character if all     
+    
+        characters are of type Mn. </li>    
+    
+    </ul>    
+    
+  </li>    
+    
+  <li>However, because there are sometimes missing case pairs, and because of some legacy     
+    
+    characters, it is only generally true that: <ul>    
+    
+      <li><tt>upper(canonicalDecomposition(a)) = canonicalDecomposition(upper(a))</tt> </li>    
+    
+      <li><tt>lower(canonicalDecomposition(a)) = canonicalDecomposition(lower(a))</tt> </li>    
+    
+      <li><tt>title(canonicalDecomposition(a)) = canonicalDecomposition(title(a))</tt> </li>    
+    
+    </ul>    
+    
+  </li>    
+    
+</ul>    
+    
+    
+    
+<h2><a NAME="Modification History"></a>Modification History</h2>    
+    
+    
+    
+<p>This section provides a summary of the changes between update versions of the Unicode     
+    
+Standard.</p>    
+    
+    
+    
+<h3><a href="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 3.0.0"> Unicode 3.0.0</a></h3>    
+    
+    
+    
+<p>Modifications made for Version 3.0.0 of UnicodeData.txt include many new characters and     
+    
+a number of property changes. These are summarized in Appendex D of <em>The Unicode     
+    
+Standard, Version 3.0.</em></p>    
+    
+    
+    
+<h3><a HREF="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 2.1.9">Unicode 2.1.9</a> </h3>    
+    
+    
+    
+<p>Modifications made for Version 2.1.9 of UnicodeData.txt include:     
+    
+    
+    
+<ul>    
+    
+  <li>Corrected combining class for U+05AE HEBREW ACCENT ZINOR. </li>    
+    
+  <li>Corrected combining class for U+20E1 COMBINING LEFT RIGHT ARROW ABOVE </li>    
+    
+  <li>Corrected combining class for U+0F35 and U+0F37 to 220. </li>    
+    
+  <li>Corrected combining class for U+0F71 to 129. </li>    
+    
+  <li>Added a decomposition for U+0F0C TIBETAN MARK DELIMITER TSHEG BSTAR. </li>    
+    
+  <li>Added&nbsp; decompositions for several Greek symbol letters: U+03D0..U+03D2, U+03D5,     
+    
+    U+03D6, U+03F0..U+03F2. </li>    
+    
+  <li>Removed&nbsp; decompositions from the conjoining jamo block: U+1100..U+11F8. </li>    
+    
+  <li>Changes to decomposition mappings for some Tibetan vowels for consistency in     
+    
+    normalization. (U+0F71, U+0F73, U+0F77, U+0F79, U+0F81) </li>    
+    
+  <li>Updated the decomposition mappings for several Vietnamese characters with two diacritics     
+    
+    (U+1EAC, U+1EAD, U+1EB6, U+1EB7, U+1EC6, U+1EC7, U+1ED8, U+1ED9), so that the recursive     
+    
+    decomposition can be generated directly in canonically reordered form (not a normative     
+    
+    change). </li>    
+    
+  <li>Updated the decomposition mappings for several Arabic compatibility characters involving     
+    
+    shadda (U+FC5E..U+FC62, U+FCF2..U+FCF4), and two Latin characters (U+1E1C, U+1E1D), so     
+    
+    that the decompositions are generated directly in canonically reordered form (not a     
+    
+    normative change). </li>    
+    
+  <li>Changed BIDI category for: U+00A0 NO-BREAK SPACE, U+2007 FIGURE SPACE, U+2028 LINE     
+    
+    SEPARATOR. </li>    
+    
+  <li>Changed BIDI category for extenders of General Category Lm: U+3005, U+3021..U+3035,     
+    
+    U+FF9E, U+FF9F. </li>    
+    
+  <li>Changed General Category and BIDI category for the Greek numeral signs: U+0374, U+0375. </li>    
+    
+  <li>Corrected General Category for U+FFE8 HALFWIDTH FORMS LIGHT VERTICAL. </li>    
+    
+  <li>Added Unicode 1.0 names for many Tibetan characters (informative). </li>    
+    
+</ul>    
+    
+    
+    
+<h3><a HREF="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 2.1.8">Unicode 2.1.8</a> </h3>    
+    
+    
+    
+<p>Modifications made for Version 2.1.8 of UnicodeData.txt include:     
+    
+    
+    
+<ul>    
+    
+  <li>Added combining class 240 for U+0345 COMBINING GREEK YPOGEGRAMMENI so that     
+    
+    decompositions involving iota subscript are derivable directly in canonically reordered     
+    
+    form; this also has a bearing on simplification of casing of polytonic Greek. </li>    
+    
+  <li>Changes in decompositions related to Greek tonos. These result from the clarification     
+    
+    that monotonic Greek &quot;tonos&quot; should be equated with U+0301 COMBINING ACUTE,     
+    
+    rather than with U+030D COMBINING VERTICAL LINE ABOVE. (All Greek characters in the Greek     
+    
+    block involving &quot;tonos&quot;; some Greek characters in the polytonic Greek in the     
+    
+    1FXX block.) </li>    
+    
+  <li>Changed decompositions involving dialytika tonos. (U+0390, U+03B0) </li>    
+    
+  <li>Changed ternary decompositions to binary. (U+0CCB, U+FB2C, U+FB2D) These changes     
+    
+    simplify normalization. </li>    
+    
+  <li>Removed canonical decomposition for Latin Candrabindu. (U+0310) </li>    
+    
+  <li>Corrected error in canonical decomposition for U+1FF4. </li>    
+    
+  <li>Added compatibility decompositions to clarify collation tables. (U+2100, U+2101, U+2105,     
+    
+    U+2106, U+1E9A) </li>    
+    
+  <li>A series of general category changes to assist the convergence of of Unicode definition     
+    
+    of identifier with ISO TR 10176: <ul>    
+    
+      <li>So &gt; Lo: U+0950, U+0AD0, U+0F00, U+0F88..U+0F8B </li>    
+    
+      <li>Po &gt; Lo: U+0E2F, U+0EAF, U+3006 </li>    
+    
+      <li>Lm &gt; Sk: U+309B, U+309C </li>    
+    
+      <li>Po &gt; Pc: U+30FB, U+FF65 </li>    
+    
+      <li>Ps/Pe &gt; Mn: U+0F3E, U+0F3F </li>    
+    
+    </ul>    
+    
+  </li>    
+    
+  <li>A series of bidi property changes for consistency. <ul>    
+    
+      <li>L &gt; ET: U+09F2, U+09F3 </li>    
+    
+      <li>ON &gt; L: U+3007 </li>    
+    
+      <li>L &gt; ON: U+0F3A..U+0F3D, U+037E, U+0387 </li>    
+    
+    </ul>    
+    
+  </li>    
+    
+  <li>Add case mapping: U+01A6 &lt;-&gt; U+0280 </li>    
+    
+  <li>Updated symmetric swapping value for guillemets: U+00AB, U+00BB, U+2039, U+203A. </li>    
+    
+  <li>Changes to combining class values. Most Indic fixed position class non-spacing marks     
+    
+    were changed to combining class 0. This fixes some inconsistencies in how canonical     
+    
+    reordering would apply to Indic scripts, including Tibetan. Indic interacting top/bottom     
+    
+    fixed position classes were merged into single (non-zero) classes as part of this change.     
+    
+    Tibetan subjoined consonants are changed from combining class 6 to combining class 0. Thai     
+    
+    pinthu (U+0E3A) moved to combining class 9. Moved two Devanagari stress marks into generic     
+    
+    above and below combining classes (U+0951, U+0952). </li>    
+    
+  <li>Corrected placement of semicolon near symmetric swapping field. (U+FA0E, etc., scattered     
+    
+    positions to U+FA29) </li>    
+    
+</ul>    
+    
+    
+    
+<h3>Version 2.1.7</h3>    
+    
+    
+    
+<p><i>This version was for internal change tracking only, and never publicly released.</i></p>    
+    
+    
+    
+<h3>Version 2.1.6</h3>    
+    
+    
+    
+<p><i>This version was for internal change tracking only, and never publicly released.</i></p>    
+    
+    
+    
+<h3><a HREF="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 2.1.5">Unicode 2.1.5</a> </h3>    
+    
+    
+    
+<p>Modifications made for Version 2.1.5 of UnicodeData.txt include:     
+    
+    
+    
+<ul>    
+    
+  <li>Changed decomposition for U+FF9E and U+FF9F so that correct collation weighting will     
+    
+    automatically result from the canonical equivalences. </li>    
+    
+  <li>Removed canonical decompositions for U+04D4, U+04D5, U+04D8, U+04D9, U+04E0, U+04E1,     
+    
+    U+04E8, U+04E9 (the implication being that no canonical equivalence is claimed between     
+    
+    these 8 characters and similar Latin letters), and updated 4 canonical decompositions for     
+    
+    U+04DB, U+04DC, U+04EA, U+04EB to reflect the implied difference in the base character. </li>    
+    
+  <li>Added Pi, and Pf categories and assigned the relevant quotation marks to those     
+    
+    categories, based on the Unicode Technical Corrigendum on Quotation Characters. </li>    
+    
+  <li>Updating of many bidi properties, following the advice of the ad hoc committee on bidi,     
+    
+    and to make the bidi properties of compatibility characters more consistent. </li>    
+    
+  <li>Changed category of several Tibetan characters: U+0F3E, U+0F3F, U+0F88..U+0F8B to make     
+    
+    them non-combining, reflecting the combined opinion of Tibetan experts. </li>    
+    
+  <li>Added case mapping for U+03F2. </li>    
+    
+  <li>Corrected case mapping for U+0275. </li>    
+    
+  <li>Added titlecase mappings for U+03D0, U+03D1, U+03D5, U+03D6, U+03F0.. U+03F2. </li>    
+    
+  <li>Corrected compatibility label for U+2121. </li>    
+    
+  <li>Add specific entries for all the CJK compatibility ideographs, U+F900..U+FA2D, so the     
+    
+    canonical decomposition for each (the URO character it is equivalent to) can be carried in     
+    
+    the database. </li>    
+    
+</ul>    
+    
+    
+    
+<h3>Version 2.1.4</h3>    
+    
+    
+    
+<p><i>This version was for internal change tracking only, and never publicly released.</i></p>    
+    
+    
+    
+<h3>Version 2.1.3</h3>    
+    
+    
+    
+<p><i>This version was for internal change tracking only, and never publicly released.</i></p>    
+    
+    
+    
+<h3><a HREF="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 2.1.2">Unicode 2.1.2</a> </h3>    
+    
+    
+    
+<p>Modifications made in updating UnicodeData.txt to Version 2.1.2 for the Unicode     
+    
+Standard, Version 2.1 (from Version 2.0) include:     
+    
+    
+    
+<ul>    
+    
+  <li>Added two characters (U+20AC and U+FFFC). </li>    
+    
+  <li>Amended bidi properties for U+0026, U+002E, U+0040, U+2007. </li>    
+    
+  <li>Corrected case mappings for U+018E, U+019F, U+01DD, U+0258, U+0275, U+03C2, U+1E9B. </li>    
+    
+  <li>Changed combining order class for U+0F71. </li>    
+    
+  <li>Corrected canonical decompositions for U+0F73, U+1FBE. </li>    
+    
+  <li>Changed decomposition for U+FB1F from compatibility to canonical. </li>    
+    
+  <li>Added compatibility decompositions for U+FBE8, U+FBE9, U+FBF9..U+FBFB. </li>    
+    
+  <li>Corrected compatibility decompositions for U+2469, U+246A, U+3358. </li>    
+    
+</ul>    
+    
+    
+    
+<h3>Version 2.1.1</h3>    
+    
+    
+    
+<p><i>This version was for internal change tracking only, and never publicly released.</i></p>    
+    
+    
+    
+<h3><a HREF="http://www.unicode.org/unicode/standard/versions/enumeratedversions.html#Unicode 2.0.0">Unicode 2.0.0</a> </h3>    
+    
+    
+    
+<p>The modifications made in updating UnicodeData.txt for the Unicode     
+    
+Standard, Version 2.0 include:     
+    
+    
+    
+<ul>    
+    
+  <li>Fixed decompositions with TONOS to use correct NSM: 030D. </li>    
+    
+  <li>Removed old Hangul Syllables; mapping to new characters are in a separate table. </li>    
+    
+  <li>Marked compatibility decompositions with additional tags. </li>    
+    
+  <li>Changed old tag names for clarity. </li>    
+    
+  <li>Revision of decompositions to use first-level decomposition, instead of maximal     
+    
+    decomposition. </li>    
+    
+  <li>Correction of all known errors in decompositions from earlier versions. </li>    
+    
+  <li>Added control code names (as old Unicode names). </li>    
+    
+  <li>Added Hangul Jamo decompositions. </li>    
+    
+  <li>Added Number category to match properties list in book. </li>    
+    
+  <li>Fixed categories of Koranic Arabic marks. </li>    
+    
+  <li>Fixed categories of precomposed characters to match decomposition where possible. </li>    
+    
+  <li>Added Hebrew cantillation marks and the Tibetan script. </li>    
+    
+  <li>Added place holders for ranges such as CJK Ideographic Area and the Private Use Area. </li>    
+    
+  <li>Added categories Me, Sk, Pc, Nl, Cs, Cf, and rectified a number of mistakes in the     
+    
+    database. </li>    
+    
+</ul>    
+    
+</body>    
+    
+</html>    
+    
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/srctools/tranasm/tranasm	Fri Jun 25 18:37:20 2010 +0800
@@ -0,0 +1,4 @@
+#!/bin/sh
+PATH=.:$PATH
+perl -S tranasm.pl $@
+